From f0398352493b7cb7c3b113840eeaf284af1944f1 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 20 Mar 2019 07:47:01 -0700 Subject: [PATCH 001/347] renamed YogaNodeJNI to YogaNodeJNIBase Summary: Renamed class from YogaNodeJNI to YogaNodeJNIBase. This change set is for adding experiment for layout outputs batching using a float array where we will have two separate classes which will override how layout outputs are transferred to java YogaNode object. We needed two separate classes because having everything in one class was causing memory issues as both the individual fields for width, height etc. and float array for batching needs to be present in code. Reviewed By: davidaurelio Differential Revision: D14368069 fbshipit-source-id: 0e98e28c8c7a9788345ccb92b2cd0f2cd4a53525 --- java/com/facebook/yoga/YogaNode.java | 4 +-- ...{YogaNodeJNI.java => YogaNodeJNIBase.java} | 36 +++++++++---------- java/jni/YGJTypes.h | 2 +- .../tests/com/facebook/yoga/YogaNodeTest.java | 6 ++-- 4 files changed, 24 insertions(+), 24 deletions(-) rename java/com/facebook/yoga/{YogaNodeJNI.java => YogaNodeJNIBase.java} (96%) diff --git a/java/com/facebook/yoga/YogaNode.java b/java/com/facebook/yoga/YogaNode.java index c01d0cec..3a47dcb9 100644 --- a/java/com/facebook/yoga/YogaNode.java +++ b/java/com/facebook/yoga/YogaNode.java @@ -10,11 +10,11 @@ import javax.annotation.Nullable; public abstract class YogaNode { public static YogaNode create() { - return new YogaNodeJNI(); + return new YogaNodeJNIBase(); } public static YogaNode create(YogaConfig config) { - return new YogaNodeJNI(config); + return new YogaNodeJNIBase(config); } public abstract void reset(); diff --git a/java/com/facebook/yoga/YogaNodeJNI.java b/java/com/facebook/yoga/YogaNodeJNIBase.java similarity index 96% rename from java/com/facebook/yoga/YogaNodeJNI.java rename to java/com/facebook/yoga/YogaNodeJNIBase.java index 41e1a461..b7ba18d9 100644 --- a/java/com/facebook/yoga/YogaNodeJNI.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -13,7 +13,7 @@ import java.util.List; import javax.annotation.Nullable; @DoNotStrip -public class YogaNodeJNI extends YogaNode { +public class YogaNodeJNIBase extends YogaNode { static { SoLoader.loadLibrary("yoga"); @@ -24,8 +24,8 @@ public class YogaNodeJNI extends YogaNode { */ static native int jni_YGNodeGetInstanceCount(); - private YogaNodeJNI mOwner; - @Nullable private List mChildren; + private YogaNodeJNIBase mOwner; + @Nullable private List mChildren; private YogaMeasureFunction mMeasureFunction; private YogaBaselineFunction mBaselineFunction; private long mNativePointer; @@ -75,7 +75,7 @@ public class YogaNodeJNI extends YogaNode { @DoNotStrip private boolean mDoesLegacyStretchFlagAffectsLayout = false; private native long jni_YGNodeNew(); - public YogaNodeJNI() { + public YogaNodeJNIBase() { mNativePointer = jni_YGNodeNew(); if (mNativePointer == 0) { throw new IllegalStateException("Failed to allocate native memory"); @@ -83,7 +83,7 @@ public class YogaNodeJNI extends YogaNode { } private native long jni_YGNodeNewWithConfig(long configPointer); - public YogaNodeJNI(YogaConfig config) { + public YogaNodeJNIBase(YogaConfig config) { mNativePointer = jni_YGNodeNewWithConfig(config.mNativePointer); if (mNativePointer == 0) { throw new IllegalStateException("Failed to allocate native memory"); @@ -144,7 +144,7 @@ public class YogaNodeJNI extends YogaNode { return mChildren == null ? 0 : mChildren.size(); } - public YogaNodeJNI getChildAt(int i) { + public YogaNodeJNIBase getChildAt(int i) { if (mChildren == null) { throw new IllegalStateException("YogaNode does not have children"); } @@ -154,7 +154,7 @@ public class YogaNodeJNI extends YogaNode { private static native void jni_YGNodeInsertChild(long nativePointer, long childPointer, int index); public void addChildAt(YogaNode c, int i) { - YogaNodeJNI child = (YogaNodeJNI) c; + YogaNodeJNIBase child = (YogaNodeJNIBase) c; if (child.mOwner != null) { throw new IllegalStateException("Child already has a parent, it must be removed first."); } @@ -187,12 +187,12 @@ public class YogaNodeJNI extends YogaNode { } private static native void jni_YGNodeRemoveChild(long nativePointer, long childPointer); - public YogaNodeJNI removeChildAt(int i) { + public YogaNodeJNIBase removeChildAt(int i) { if (mChildren == null) { throw new IllegalStateException( "Trying to remove a child of a YogaNode that does not have children"); } - final YogaNodeJNI child = mChildren.remove(i); + final YogaNodeJNIBase child = mChildren.remove(i); child.mOwner = null; jni_YGNodeRemoveChild(mNativePointer, child.mNativePointer); return child; @@ -207,14 +207,14 @@ public class YogaNodeJNI extends YogaNode { * {@link YogaNode} is shared between two or more YogaTrees. */ @Nullable - public YogaNodeJNI getOwner() { + public YogaNodeJNIBase getOwner() { return mOwner; } /** @deprecated Use #getOwner() instead. This will be removed in the next version. */ @Deprecated @Nullable - public YogaNodeJNI getParent() { + public YogaNodeJNIBase getParent() { return getOwner(); } @@ -222,21 +222,21 @@ public class YogaNodeJNI extends YogaNode { return mChildren == null ? -1 : mChildren.indexOf(child); } - private static native void jni_YGNodeCalculateLayout(long nativePointer, float width, float height, long[] nativePointers, YogaNodeJNI[] nodes); + private static native void jni_YGNodeCalculateLayout(long nativePointer, float width, float height, long[] nativePointers, YogaNodeJNIBase[] nodes); public void calculateLayout(float width, float height) { long[] nativePointers = null; - YogaNodeJNI[] nodes = null; + YogaNodeJNIBase[] nodes = null; - ArrayList n = new ArrayList<>(); + ArrayList n = new ArrayList<>(); n.add(this); for (int i = 0; i < n.size(); ++i) { - List children = n.get(i).mChildren; + List children = n.get(i).mChildren; if (children != null) { n.addAll(children); } } - nodes = n.toArray(new YogaNodeJNI[n.size()]); + nodes = n.toArray(new YogaNodeJNIBase[n.size()]); nativePointers = new long[nodes.length]; for (int i = 0; i < nodes.length; ++i) { nativePointers[i] = nodes[i].mNativePointer; @@ -268,7 +268,7 @@ public class YogaNodeJNI extends YogaNode { private static native void jni_YGNodeCopyStyle(long dstNativePointer, long srcNativePointer); @Override public void copyStyle(YogaNode srcNode) { - jni_YGNodeCopyStyle(mNativePointer, ((YogaNodeJNI) srcNode).mNativePointer); + jni_YGNodeCopyStyle(mNativePointer, ((YogaNodeJNIBase) srcNode).mNativePointer); } public void markLayoutSeen() { @@ -748,7 +748,7 @@ public class YogaNodeJNI extends YogaNode { * @return the nativePointer of the newNode {@linl YogaNode} */ @DoNotStrip - private final long replaceChild(YogaNodeJNI newNode, int childIndex) { + private final long replaceChild(YogaNodeJNIBase newNode, int childIndex) { if (mChildren == null) { throw new IllegalStateException("Cannot replace child. YogaNode does not have children"); } diff --git a/java/jni/YGJTypes.h b/java/jni/YGJTypes.h index 5681e81e..00129cc1 100644 --- a/java/jni/YGJTypes.h +++ b/java/jni/YGJTypes.h @@ -8,7 +8,7 @@ #include struct JYogaNode : public facebook::jni::JavaClass { - static constexpr auto kJavaDescriptor = "Lcom/facebook/yoga/YogaNodeJNI;"; + static constexpr auto kJavaDescriptor = "Lcom/facebook/yoga/YogaNodeJNIBase;"; jfloat baseline(jfloat width, jfloat height); jlong measure(jfloat width, jint widthMode, jfloat height, jint heightMode); diff --git a/java/tests/com/facebook/yoga/YogaNodeTest.java b/java/tests/com/facebook/yoga/YogaNodeTest.java index d2e296b6..dddf8eae 100644 --- a/java/tests/com/facebook/yoga/YogaNodeTest.java +++ b/java/tests/com/facebook/yoga/YogaNodeTest.java @@ -30,9 +30,9 @@ public class YogaNodeTest { @Test public void testInit() { - final int refCount = YogaNodeJNI.jni_YGNodeGetInstanceCount(); + final int refCount = YogaNodeJNIBase.jni_YGNodeGetInstanceCount(); final YogaNode node = createNode(); - assertEquals(refCount + 1, YogaNodeJNI.jni_YGNodeGetInstanceCount()); + assertEquals(refCount + 1, YogaNodeJNIBase.jni_YGNodeGetInstanceCount()); } @Test @@ -253,7 +253,7 @@ public class YogaNodeTest { root_child0_child0_child0.setFlexShrink(1); root_child0_child0.addChildAt(root_child0_child0_child0, 0); root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED); - assertFalse(((YogaNodeJNI) root).getDoesLegacyStretchFlagAffectsLayout()); + assertFalse(((YogaNodeJNIBase) root).getDoesLegacyStretchFlagAffectsLayout()); } @Test From 1471be54e39fa40b6f866fb9c15c54f62d8861f1 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Wed, 20 Mar 2019 08:39:34 -0700 Subject: [PATCH 002/347] JNI: Simplify node context Summary: @public Contexts of nodes only hold a bit mask after we got rid of weak JNI refs. We can simply store that data in a pointer-sized unsigned int. Here, we replace all context heap allocations with usage of the node context (`void *`) as bitmask. We also add a couple of utility operators in order to keep the code comprehensible. Reviewed By: fabiomassimo Differential Revision: D14425742 fbshipit-source-id: f32c2184a1f09268c39dbb8cd09ac96517339674 --- java/jni/YGJNI.cpp | 101 +++++++++++++++++++++++++++------------------ 1 file changed, 61 insertions(+), 40 deletions(-) diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp index cf923dc8..146a095e 100644 --- a/java/jni/YGJNI.cpp +++ b/java/jni/YGJNI.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include @@ -88,17 +89,46 @@ public: } }; -struct YGNodeContext { - int edgeSetFlag = 0; +namespace { + +union YGNodeContext { + uintptr_t edgesSet = 0; + void* asVoidPtr; }; -const int MARGIN = 1; -const int PADDING = 2; -const int BORDER = 4; +class YGNodeEdges { + uintptr_t edges_; -static inline YGNodeContext* ygNodeRefToYGNodeContext(YGNodeRef node) { - return reinterpret_cast(node->getContext()); -} +public: + enum Edge { + MARGIN = 1, + PADDING = 2, + BORDER = 4, + }; + + YGNodeEdges(YGNodeRef node) { + auto context = YGNodeContext{}; + context.asVoidPtr = node->getContext(); + edges_ = context.edgesSet; + } + + void setOn(YGNodeRef node) { + auto context = YGNodeContext{}; + context.edgesSet = edges_; + node->setContext(context.asVoidPtr); + } + + bool has(Edge edge) { + return (edges_ & edge) == edge; + } + + YGNodeEdges& add(Edge edge) { + edges_ |= edge; + return *this; + } +}; + +} // namespace static inline local_ref YGNodeJobject( YGNodeRef node, @@ -131,7 +161,7 @@ static void YGTransferLayoutOutputsRecursive( return; } - int edgeSetFlag = ygNodeRefToYGNodeContext(root)->edgeSetFlag; + auto edgesSet = YGNodeEdges{root}; static auto widthField = obj->getClass()->getField("mWidth"); static auto heightField = obj->getClass()->getField("mHeight"); @@ -178,7 +208,7 @@ static void YGTransferLayoutOutputsRecursive( obj->setFieldValue(hasNewLayoutField, true); YGTransferLayoutDirection(root, obj); - if ((edgeSetFlag & MARGIN) == MARGIN) { + if (edgesSet.has(YGNodeEdges::MARGIN)) { obj->setFieldValue( marginLeftField, YGNodeLayoutGetMargin(root, YGEdgeLeft)); obj->setFieldValue(marginTopField, YGNodeLayoutGetMargin(root, YGEdgeTop)); @@ -188,7 +218,7 @@ static void YGTransferLayoutOutputsRecursive( marginBottomField, YGNodeLayoutGetMargin(root, YGEdgeBottom)); } - if ((edgeSetFlag & PADDING) == PADDING) { + if (edgesSet.has(YGNodeEdges::PADDING)) { obj->setFieldValue( paddingLeftField, YGNodeLayoutGetPadding(root, YGEdgeLeft)); obj->setFieldValue( @@ -199,7 +229,7 @@ static void YGTransferLayoutOutputsRecursive( paddingBottomField, YGNodeLayoutGetPadding(root, YGEdgeBottom)); } - if ((edgeSetFlag & BORDER) == BORDER) { + if (edgesSet.has(YGNodeEdges::BORDER)) { obj->setFieldValue( borderLeftField, YGNodeLayoutGetBorder(root, YGEdgeLeft)); obj->setFieldValue(borderTopField, YGNodeLayoutGetBorder(root, YGEdgeTop)); @@ -310,20 +340,16 @@ static int YGJNILogFunc( return result; } -YGNodeContext* createYGNodeContext() { - return new YGNodeContext(); -} - jlong jni_YGNodeNew(alias_ref) { const YGNodeRef node = YGNodeNew(); - node->setContext(createYGNodeContext()); + node->setContext(YGNodeContext{}.asVoidPtr); node->setPrintFunc(YGPrint); return reinterpret_cast(node); } jlong jni_YGNodeNewWithConfig(alias_ref, jlong configPointer) { const YGNodeRef node = YGNodeNewWithConfig(_jlong2YGConfigRef(configPointer)); - node->setContext(createYGNodeContext()); + node->setContext(YGNodeContext{}.asVoidPtr); return reinterpret_cast(node); } @@ -332,10 +358,6 @@ void jni_YGNodeFree(alias_ref, jlong nativePointer) { return; } const YGNodeRef node = _jlong2YGNodeRef(nativePointer); - auto context = node->getContext(); - if (context != nullptr) { - delete reinterpret_cast(node->getContext()); - } YGNodeFree(node); } @@ -642,6 +664,7 @@ static void YGNodeSetStyleInputs( float* styleInputs, int size) { const auto end = styleInputs + size; + auto edgesSet = YGNodeEdges{node}; while (styleInputs < end) { auto styleInputKey = static_cast((int) *styleInputs++); switch (styleInputKey) { @@ -744,40 +767,40 @@ static void YGNodeSetStyleInputs( case Margin: { auto edge = static_cast(*styleInputs++); float marginValue = *styleInputs++; - ygNodeRefToYGNodeContext(node)->edgeSetFlag |= MARGIN; + edgesSet.add(YGNodeEdges::MARGIN); YGNodeStyleSetMargin(node, edge, marginValue); break; } case MarginPercent: { auto edge = static_cast(*styleInputs++); float marginPercent = *styleInputs++; - ygNodeRefToYGNodeContext(node)->edgeSetFlag |= MARGIN; + edgesSet.add(YGNodeEdges::MARGIN); YGNodeStyleSetMarginPercent(node, edge, marginPercent); break; } case MarginAuto: { - ygNodeRefToYGNodeContext(node)->edgeSetFlag |= MARGIN; + edgesSet.add(YGNodeEdges::MARGIN); YGNodeStyleSetMarginAuto(node, static_cast(*styleInputs++)); break; } case Padding: { auto edge = static_cast(*styleInputs++); float paddingValue = *styleInputs++; - ygNodeRefToYGNodeContext(node)->edgeSetFlag |= PADDING; + edgesSet.add(YGNodeEdges::PADDING); YGNodeStyleSetPadding(node, edge, paddingValue); break; } case PaddingPercent: { auto edge = static_cast(*styleInputs++); float paddingPercent = *styleInputs++; - ygNodeRefToYGNodeContext(node)->edgeSetFlag |= PADDING; + edgesSet.add(YGNodeEdges::PADDING); YGNodeStyleSetPaddingPercent(node, edge, paddingPercent); break; } case Border: { auto edge = static_cast(*styleInputs++); float borderValue = *styleInputs++; - ygNodeRefToYGNodeContext(node)->edgeSetFlag |= BORDER; + edgesSet.add(YGNodeEdges::BORDER); YGNodeStyleSetBorder(node, edge, borderValue); break; } @@ -801,6 +824,7 @@ static void YGNodeSetStyleInputs( break; } } + edgesSet.setOn(node); } void jni_YGNodeSetStyleInputs( @@ -822,8 +846,7 @@ local_ref jni_YGNodeStyleGetMargin( jlong nativePointer, jint edge) { YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); - int edgeSetFlag = ygNodeRefToYGNodeContext(yogaNodeRef)->edgeSetFlag; - if ((edgeSetFlag & MARGIN) != MARGIN) { + if (!YGNodeEdges{yogaNodeRef}.has(YGNodeEdges::MARGIN)) { return JYogaValue::create(YGValueUndefined); } return JYogaValue::create( @@ -832,7 +855,7 @@ local_ref jni_YGNodeStyleGetMargin( void jni_YGNodeStyleSetMargin(jlong nativePointer, jint edge, jfloat margin) { YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); - ygNodeRefToYGNodeContext(yogaNodeRef)->edgeSetFlag |= MARGIN; + YGNodeEdges{yogaNodeRef}.add(YGNodeEdges::MARGIN).setOn(yogaNodeRef); YGNodeStyleSetMargin( yogaNodeRef, static_cast(edge), static_cast(margin)); } @@ -842,14 +865,14 @@ void jni_YGNodeStyleSetMarginPercent( jint edge, jfloat percent) { YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); - ygNodeRefToYGNodeContext(yogaNodeRef)->edgeSetFlag |= MARGIN; + YGNodeEdges{yogaNodeRef}.add(YGNodeEdges::MARGIN).setOn(yogaNodeRef); YGNodeStyleSetMarginPercent( yogaNodeRef, static_cast(edge), static_cast(percent)); } void jni_YGNodeStyleSetMarginAuto(jlong nativePointer, jint edge) { YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); - ygNodeRefToYGNodeContext(yogaNodeRef)->edgeSetFlag |= MARGIN; + YGNodeEdges{yogaNodeRef}.add(YGNodeEdges::MARGIN).setOn(yogaNodeRef); YGNodeStyleSetMarginAuto(yogaNodeRef, static_cast(edge)); } @@ -858,8 +881,7 @@ local_ref jni_YGNodeStyleGetPadding( jlong nativePointer, jint edge) { YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); - int edgeSetFlag = ygNodeRefToYGNodeContext(yogaNodeRef)->edgeSetFlag; - if ((edgeSetFlag & PADDING) != PADDING) { + if (!YGNodeEdges{yogaNodeRef}.has(YGNodeEdges::PADDING)) { return JYogaValue::create(YGValueUndefined); } return JYogaValue::create( @@ -868,7 +890,7 @@ local_ref jni_YGNodeStyleGetPadding( void jni_YGNodeStyleSetPadding(jlong nativePointer, jint edge, jfloat padding) { YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); - ygNodeRefToYGNodeContext(yogaNodeRef)->edgeSetFlag |= PADDING; + YGNodeEdges{yogaNodeRef}.add(YGNodeEdges::PADDING).setOn(yogaNodeRef); YGNodeStyleSetPadding( yogaNodeRef, static_cast(edge), static_cast(padding)); } @@ -878,15 +900,14 @@ void jni_YGNodeStyleSetPaddingPercent( jint edge, jfloat percent) { YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); - ygNodeRefToYGNodeContext(yogaNodeRef)->edgeSetFlag |= PADDING; + YGNodeEdges{yogaNodeRef}.add(YGNodeEdges::PADDING).setOn(yogaNodeRef); YGNodeStyleSetPaddingPercent( yogaNodeRef, static_cast(edge), static_cast(percent)); } jfloat jni_YGNodeStyleGetBorder(jlong nativePointer, jint edge) { YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); - int edgeSetFlag = ygNodeRefToYGNodeContext(yogaNodeRef)->edgeSetFlag; - if ((edgeSetFlag & BORDER) != BORDER) { + if (!YGNodeEdges{yogaNodeRef}.has(YGNodeEdges::BORDER)) { return (jfloat) YGUndefined; } return (jfloat) YGNodeStyleGetBorder(yogaNodeRef, static_cast(edge)); @@ -894,7 +915,7 @@ jfloat jni_YGNodeStyleGetBorder(jlong nativePointer, jint edge) { void jni_YGNodeStyleSetBorder(jlong nativePointer, jint edge, jfloat border) { YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); - ygNodeRefToYGNodeContext(yogaNodeRef)->edgeSetFlag |= BORDER; + YGNodeEdges{yogaNodeRef}.add(YGNodeEdges::BORDER).setOn(yogaNodeRef); YGNodeStyleSetBorder( yogaNodeRef, static_cast(edge), static_cast(border)); } From f273e80c770b714756de02f9f8700b9430fa97df Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 20 Mar 2019 08:54:27 -0700 Subject: [PATCH 003/347] created a new class YogaNodeJNI which extends YogaNodeJNIBase and using YogaNodeJNi for new object creation Summary: Added a child class of YogaNodeJNIBase which will be used to separate layout outputs transfer logic. This change set is for adding experiment for layout outputs batching using a float array Reviewed By: davidaurelio Differential Revision: D14368098 fbshipit-source-id: e0f10fb61cd09ee47cf9ce41fb400f4cfb3dd795 --- java/com/facebook/yoga/YogaNode.java | 4 ++-- java/com/facebook/yoga/YogaNodeJNI.java | 21 +++++++++++++++++++++ java/com/facebook/yoga/YogaNodeJNIBase.java | 2 +- 3 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 java/com/facebook/yoga/YogaNodeJNI.java diff --git a/java/com/facebook/yoga/YogaNode.java b/java/com/facebook/yoga/YogaNode.java index 3a47dcb9..c01d0cec 100644 --- a/java/com/facebook/yoga/YogaNode.java +++ b/java/com/facebook/yoga/YogaNode.java @@ -10,11 +10,11 @@ import javax.annotation.Nullable; public abstract class YogaNode { public static YogaNode create() { - return new YogaNodeJNIBase(); + return new YogaNodeJNI(); } public static YogaNode create(YogaConfig config) { - return new YogaNodeJNIBase(config); + return new YogaNodeJNI(config); } public abstract void reset(); diff --git a/java/com/facebook/yoga/YogaNodeJNI.java b/java/com/facebook/yoga/YogaNodeJNI.java new file mode 100644 index 00000000..ff5d1149 --- /dev/null +++ b/java/com/facebook/yoga/YogaNodeJNI.java @@ -0,0 +1,21 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +package com.facebook.yoga; + +import com.facebook.proguard.annotations.DoNotStrip; + +@DoNotStrip +public class YogaNodeJNI extends YogaNodeJNIBase { + + public YogaNodeJNI() { + super(); + } + + public YogaNodeJNI(YogaConfig config) { + super(config); + } +} diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index b7ba18d9..002393ad 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -13,7 +13,7 @@ import java.util.List; import javax.annotation.Nullable; @DoNotStrip -public class YogaNodeJNIBase extends YogaNode { +public abstract class YogaNodeJNIBase extends YogaNode { static { SoLoader.loadLibrary("yoga"); From ab3bf40c7dad65b732f21626d7c7888df177551b Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Thu, 21 Mar 2019 04:53:57 -0700 Subject: [PATCH 004/347] Fix license headers Summary: @public Yoga's Java license headers were not in the correct format. Reviewed By: muraziz Differential Revision: D14541087 fbshipit-source-id: 5b3cff398875bd59dadeaddbb43020700ef027e2 --- java/com/facebook/yoga/YogaAlign.java | 9 ++++----- java/com/facebook/yoga/YogaBaselineFunction.java | 9 ++++----- java/com/facebook/yoga/YogaConfig.java | 9 ++++----- java/com/facebook/yoga/YogaDimension.java | 9 ++++----- java/com/facebook/yoga/YogaDirection.java | 9 ++++----- java/com/facebook/yoga/YogaDisplay.java | 9 ++++----- java/com/facebook/yoga/YogaEdge.java | 9 ++++----- java/com/facebook/yoga/YogaExperimentalFeature.java | 9 ++++----- java/com/facebook/yoga/YogaFlexDirection.java | 9 ++++----- java/com/facebook/yoga/YogaJustify.java | 9 ++++----- java/com/facebook/yoga/YogaLogLevel.java | 9 ++++----- java/com/facebook/yoga/YogaLogger.java | 9 ++++----- java/com/facebook/yoga/YogaMeasureFunction.java | 9 ++++----- java/com/facebook/yoga/YogaMeasureMode.java | 9 ++++----- java/com/facebook/yoga/YogaMeasureOutput.java | 9 ++++----- java/com/facebook/yoga/YogaNodeCloneFunction.java | 9 ++++----- java/com/facebook/yoga/YogaNodeType.java | 9 ++++----- java/com/facebook/yoga/YogaOverflow.java | 9 ++++----- java/com/facebook/yoga/YogaPositionType.java | 9 ++++----- java/com/facebook/yoga/YogaPrintOptions.java | 9 ++++----- java/com/facebook/yoga/YogaUnit.java | 9 ++++----- java/com/facebook/yoga/YogaValue.java | 9 ++++----- java/com/facebook/yoga/YogaWrap.java | 9 ++++----- 23 files changed, 92 insertions(+), 115 deletions(-) diff --git a/java/com/facebook/yoga/YogaAlign.java b/java/com/facebook/yoga/YogaAlign.java index 94878fd7..eeda627e 100644 --- a/java/com/facebook/yoga/YogaAlign.java +++ b/java/com/facebook/yoga/YogaAlign.java @@ -1,9 +1,8 @@ -/* - * Copyright (c) Facebook, Inc. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. +/** + * Copyright (c) Facebook, Inc. and its affiliates. * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ package com.facebook.yoga; diff --git a/java/com/facebook/yoga/YogaBaselineFunction.java b/java/com/facebook/yoga/YogaBaselineFunction.java index 0a4dba13..e2170a38 100644 --- a/java/com/facebook/yoga/YogaBaselineFunction.java +++ b/java/com/facebook/yoga/YogaBaselineFunction.java @@ -1,9 +1,8 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. +/** + * Copyright (c) Facebook, Inc. and its affiliates. * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ package com.facebook.yoga; diff --git a/java/com/facebook/yoga/YogaConfig.java b/java/com/facebook/yoga/YogaConfig.java index 6f54db39..05d03525 100644 --- a/java/com/facebook/yoga/YogaConfig.java +++ b/java/com/facebook/yoga/YogaConfig.java @@ -1,9 +1,8 @@ -/* - * Copyright (c) Facebook, Inc. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. +/** + * Copyright (c) Facebook, Inc. and its affiliates. * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ package com.facebook.yoga; diff --git a/java/com/facebook/yoga/YogaDimension.java b/java/com/facebook/yoga/YogaDimension.java index 2ef27726..e02df9f2 100644 --- a/java/com/facebook/yoga/YogaDimension.java +++ b/java/com/facebook/yoga/YogaDimension.java @@ -1,9 +1,8 @@ -/* - * Copyright (c) Facebook, Inc. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. +/** + * Copyright (c) Facebook, Inc. and its affiliates. * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ package com.facebook.yoga; diff --git a/java/com/facebook/yoga/YogaDirection.java b/java/com/facebook/yoga/YogaDirection.java index 6a5017cf..7554f441 100644 --- a/java/com/facebook/yoga/YogaDirection.java +++ b/java/com/facebook/yoga/YogaDirection.java @@ -1,9 +1,8 @@ -/* - * Copyright (c) Facebook, Inc. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. +/** + * Copyright (c) Facebook, Inc. and its affiliates. * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ package com.facebook.yoga; diff --git a/java/com/facebook/yoga/YogaDisplay.java b/java/com/facebook/yoga/YogaDisplay.java index 3ba4d56c..59f760ff 100644 --- a/java/com/facebook/yoga/YogaDisplay.java +++ b/java/com/facebook/yoga/YogaDisplay.java @@ -1,9 +1,8 @@ -/* - * Copyright (c) Facebook, Inc. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. +/** + * Copyright (c) Facebook, Inc. and its affiliates. * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ package com.facebook.yoga; diff --git a/java/com/facebook/yoga/YogaEdge.java b/java/com/facebook/yoga/YogaEdge.java index 80a783e7..53cd1518 100644 --- a/java/com/facebook/yoga/YogaEdge.java +++ b/java/com/facebook/yoga/YogaEdge.java @@ -1,9 +1,8 @@ -/* - * Copyright (c) Facebook, Inc. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. +/** + * Copyright (c) Facebook, Inc. and its affiliates. * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ package com.facebook.yoga; diff --git a/java/com/facebook/yoga/YogaExperimentalFeature.java b/java/com/facebook/yoga/YogaExperimentalFeature.java index 33a8389d..edabead6 100644 --- a/java/com/facebook/yoga/YogaExperimentalFeature.java +++ b/java/com/facebook/yoga/YogaExperimentalFeature.java @@ -1,9 +1,8 @@ -/* - * Copyright (c) Facebook, Inc. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. +/** + * Copyright (c) Facebook, Inc. and its affiliates. * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ package com.facebook.yoga; diff --git a/java/com/facebook/yoga/YogaFlexDirection.java b/java/com/facebook/yoga/YogaFlexDirection.java index c5f9ab5d..4acd9a1f 100644 --- a/java/com/facebook/yoga/YogaFlexDirection.java +++ b/java/com/facebook/yoga/YogaFlexDirection.java @@ -1,9 +1,8 @@ -/* - * Copyright (c) Facebook, Inc. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. +/** + * Copyright (c) Facebook, Inc. and its affiliates. * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ package com.facebook.yoga; diff --git a/java/com/facebook/yoga/YogaJustify.java b/java/com/facebook/yoga/YogaJustify.java index 6b1b83f5..33ce3c9d 100644 --- a/java/com/facebook/yoga/YogaJustify.java +++ b/java/com/facebook/yoga/YogaJustify.java @@ -1,9 +1,8 @@ -/* - * Copyright (c) Facebook, Inc. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. +/** + * Copyright (c) Facebook, Inc. and its affiliates. * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ package com.facebook.yoga; diff --git a/java/com/facebook/yoga/YogaLogLevel.java b/java/com/facebook/yoga/YogaLogLevel.java index 29476d67..454ce22e 100644 --- a/java/com/facebook/yoga/YogaLogLevel.java +++ b/java/com/facebook/yoga/YogaLogLevel.java @@ -1,9 +1,8 @@ -/* - * Copyright (c) Facebook, Inc. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. +/** + * Copyright (c) Facebook, Inc. and its affiliates. * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ package com.facebook.yoga; diff --git a/java/com/facebook/yoga/YogaLogger.java b/java/com/facebook/yoga/YogaLogger.java index 4f617004..2fd4d821 100644 --- a/java/com/facebook/yoga/YogaLogger.java +++ b/java/com/facebook/yoga/YogaLogger.java @@ -1,9 +1,8 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. +/** + * Copyright (c) Facebook, Inc. and its affiliates. * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ package com.facebook.yoga; diff --git a/java/com/facebook/yoga/YogaMeasureFunction.java b/java/com/facebook/yoga/YogaMeasureFunction.java index 1e116424..3a2ed209 100644 --- a/java/com/facebook/yoga/YogaMeasureFunction.java +++ b/java/com/facebook/yoga/YogaMeasureFunction.java @@ -1,9 +1,8 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. +/** + * Copyright (c) Facebook, Inc. and its affiliates. * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ package com.facebook.yoga; diff --git a/java/com/facebook/yoga/YogaMeasureMode.java b/java/com/facebook/yoga/YogaMeasureMode.java index 24399f62..92475b94 100644 --- a/java/com/facebook/yoga/YogaMeasureMode.java +++ b/java/com/facebook/yoga/YogaMeasureMode.java @@ -1,9 +1,8 @@ -/* - * Copyright (c) Facebook, Inc. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. +/** + * Copyright (c) Facebook, Inc. and its affiliates. * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ package com.facebook.yoga; diff --git a/java/com/facebook/yoga/YogaMeasureOutput.java b/java/com/facebook/yoga/YogaMeasureOutput.java index 9dfe4639..cd62dd2d 100644 --- a/java/com/facebook/yoga/YogaMeasureOutput.java +++ b/java/com/facebook/yoga/YogaMeasureOutput.java @@ -1,9 +1,8 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. +/** + * Copyright (c) Facebook, Inc. and its affiliates. * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ package com.facebook.yoga; diff --git a/java/com/facebook/yoga/YogaNodeCloneFunction.java b/java/com/facebook/yoga/YogaNodeCloneFunction.java index 53a8feef..1e2d5011 100644 --- a/java/com/facebook/yoga/YogaNodeCloneFunction.java +++ b/java/com/facebook/yoga/YogaNodeCloneFunction.java @@ -1,9 +1,8 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. +/** + * Copyright (c) Facebook, Inc. and its affiliates. * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ package com.facebook.yoga; diff --git a/java/com/facebook/yoga/YogaNodeType.java b/java/com/facebook/yoga/YogaNodeType.java index 28db7f1f..775fd572 100644 --- a/java/com/facebook/yoga/YogaNodeType.java +++ b/java/com/facebook/yoga/YogaNodeType.java @@ -1,9 +1,8 @@ -/* - * Copyright (c) Facebook, Inc. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. +/** + * Copyright (c) Facebook, Inc. and its affiliates. * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ package com.facebook.yoga; diff --git a/java/com/facebook/yoga/YogaOverflow.java b/java/com/facebook/yoga/YogaOverflow.java index 8dec3649..826070ec 100644 --- a/java/com/facebook/yoga/YogaOverflow.java +++ b/java/com/facebook/yoga/YogaOverflow.java @@ -1,9 +1,8 @@ -/* - * Copyright (c) Facebook, Inc. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. +/** + * Copyright (c) Facebook, Inc. and its affiliates. * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ package com.facebook.yoga; diff --git a/java/com/facebook/yoga/YogaPositionType.java b/java/com/facebook/yoga/YogaPositionType.java index 0392e6f8..e31d0a2e 100644 --- a/java/com/facebook/yoga/YogaPositionType.java +++ b/java/com/facebook/yoga/YogaPositionType.java @@ -1,9 +1,8 @@ -/* - * Copyright (c) Facebook, Inc. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. +/** + * Copyright (c) Facebook, Inc. and its affiliates. * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ package com.facebook.yoga; diff --git a/java/com/facebook/yoga/YogaPrintOptions.java b/java/com/facebook/yoga/YogaPrintOptions.java index fb1a6b14..8e95821e 100644 --- a/java/com/facebook/yoga/YogaPrintOptions.java +++ b/java/com/facebook/yoga/YogaPrintOptions.java @@ -1,9 +1,8 @@ -/* - * Copyright (c) Facebook, Inc. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. +/** + * Copyright (c) Facebook, Inc. and its affiliates. * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ package com.facebook.yoga; diff --git a/java/com/facebook/yoga/YogaUnit.java b/java/com/facebook/yoga/YogaUnit.java index b9a98e95..82ac2e54 100644 --- a/java/com/facebook/yoga/YogaUnit.java +++ b/java/com/facebook/yoga/YogaUnit.java @@ -1,9 +1,8 @@ -/* - * Copyright (c) Facebook, Inc. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. +/** + * Copyright (c) Facebook, Inc. and its affiliates. * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ package com.facebook.yoga; diff --git a/java/com/facebook/yoga/YogaValue.java b/java/com/facebook/yoga/YogaValue.java index 947cfcc7..6f234609 100644 --- a/java/com/facebook/yoga/YogaValue.java +++ b/java/com/facebook/yoga/YogaValue.java @@ -1,9 +1,8 @@ -/* - * Copyright (c) Facebook, Inc. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. +/** + * Copyright (c) Facebook, Inc. and its affiliates. * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ package com.facebook.yoga; diff --git a/java/com/facebook/yoga/YogaWrap.java b/java/com/facebook/yoga/YogaWrap.java index 45f1220c..b5b6c78c 100644 --- a/java/com/facebook/yoga/YogaWrap.java +++ b/java/com/facebook/yoga/YogaWrap.java @@ -1,9 +1,8 @@ -/* - * Copyright (c) Facebook, Inc. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. +/** + * Copyright (c) Facebook, Inc. and its affiliates. * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ package com.facebook.yoga; From 5bb226508355382bdb8f1d036b5decafdb6b5fdc Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Fri, 22 Mar 2019 09:30:25 -0700 Subject: [PATCH 005/347] Move native methods to a single class Summary: @public Moving all native methods in a single class provides the benefit of not having to load native bindings eagerly when just creating config objects in the startup paths, or setting Java-only values on them. Loading native bindings triggers additional class loads (`YogaConfig` / `YogaNode`), and can lead to problems in multi-dex scenarions. Reviewed By: pasqualeanatriello Differential Revision: D14560658 fbshipit-source-id: 14e31e3c3b560675b5a752a38ae75ab80a565ea1 --- java/com/facebook/yoga/YogaConfig.java | 38 +-- java/com/facebook/yoga/YogaNative.java | 114 ++++++++ java/com/facebook/yoga/YogaNodeJNIBase.java | 265 ++++++------------ java/jni/YGJNI.cpp | 204 +++++++------- java/jni/YGJTypes.h | 4 - .../tests/com/facebook/yoga/YogaNodeTest.java | 4 +- 6 files changed, 308 insertions(+), 321 deletions(-) create mode 100644 java/com/facebook/yoga/YogaNative.java diff --git a/java/com/facebook/yoga/YogaConfig.java b/java/com/facebook/yoga/YogaConfig.java index 05d03525..bc2538da 100644 --- a/java/com/facebook/yoga/YogaConfig.java +++ b/java/com/facebook/yoga/YogaConfig.java @@ -6,76 +6,57 @@ */ package com.facebook.yoga; -import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.soloader.SoLoader; -@DoNotStrip public class YogaConfig { public static int SPACING_TYPE = 1; - static { - SoLoader.loadLibrary("yoga"); - } - long mNativePointer; private YogaLogger mLogger; private YogaNodeCloneFunction mYogaNodeCloneFunction; - private native long jni_YGConfigNew(); public YogaConfig() { - mNativePointer = jni_YGConfigNew(); + mNativePointer = YogaNative.jni_YGConfigNew(); if (mNativePointer == 0) { throw new IllegalStateException("Failed to allocate native memory"); } } - private native void jni_YGConfigFree(long nativePointer); @Override protected void finalize() throws Throwable { try { - jni_YGConfigFree(mNativePointer); + YogaNative.jni_YGConfigFree(mNativePointer); } finally { super.finalize(); } } - private native void jni_YGConfigSetExperimentalFeatureEnabled( - long nativePointer, - int feature, - boolean enabled); public void setExperimentalFeatureEnabled(YogaExperimentalFeature feature, boolean enabled) { - jni_YGConfigSetExperimentalFeatureEnabled(mNativePointer, feature.intValue(), enabled); + YogaNative.jni_YGConfigSetExperimentalFeatureEnabled(mNativePointer, feature.intValue(), enabled); } - private native void jni_YGConfigSetUseWebDefaults(long nativePointer, boolean useWebDefaults); public void setUseWebDefaults(boolean useWebDefaults) { - jni_YGConfigSetUseWebDefaults(mNativePointer, useWebDefaults); + YogaNative.jni_YGConfigSetUseWebDefaults(mNativePointer, useWebDefaults); } - private native void jni_YGConfigSetPrintTreeFlag(long nativePointer, boolean enable); public void setPrintTreeFlag(boolean enable) { - jni_YGConfigSetPrintTreeFlag(mNativePointer, enable); + YogaNative.jni_YGConfigSetPrintTreeFlag(mNativePointer, enable); } - private native void jni_YGConfigSetPointScaleFactor(long nativePointer, float pixelsInPoint); public void setPointScaleFactor(float pixelsInPoint) { - jni_YGConfigSetPointScaleFactor(mNativePointer, pixelsInPoint); + YogaNative.jni_YGConfigSetPointScaleFactor(mNativePointer, pixelsInPoint); } - private native void jni_YGConfigSetUseLegacyStretchBehaviour(long nativePointer, boolean useLegacyStretchBehaviour); - /** * Yoga previously had an error where containers would take the maximum space possible instead of the minimum * like they are supposed to. In practice this resulted in implicit behaviour similar to align-self: stretch; * Because this was such a long-standing bug we must allow legacy users to switch back to this behaviour. */ public void setUseLegacyStretchBehaviour(boolean useLegacyStretchBehaviour) { - jni_YGConfigSetUseLegacyStretchBehaviour(mNativePointer, useLegacyStretchBehaviour); + YogaNative.jni_YGConfigSetUseLegacyStretchBehaviour(mNativePointer, useLegacyStretchBehaviour); } - private native void jni_YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviour( - long nativePointer, boolean shouldDiffLayoutWithoutLegacyStretchBehaviour); /** * If this flag is set then yoga would diff the layout without legacy flag and would set a bool in * YogaNode(mDoesLegacyStretchFlagAffectsLayout) with true if the layouts were different and false @@ -83,14 +64,13 @@ public class YogaConfig { */ public void setShouldDiffLayoutWithoutLegacyStretchBehaviour( boolean shouldDiffLayoutWithoutLegacyStretchBehaviour) { - jni_YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviour( + YogaNative.jni_YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviour( mNativePointer, shouldDiffLayoutWithoutLegacyStretchBehaviour); } - private native void jni_YGConfigSetLogger(long nativePointer, Object logger); public void setLogger(YogaLogger logger) { mLogger = logger; - jni_YGConfigSetLogger(mNativePointer, logger); + YogaNative.jni_YGConfigSetLogger(mNativePointer, logger); } public YogaLogger getLogger() { diff --git a/java/com/facebook/yoga/YogaNative.java b/java/com/facebook/yoga/YogaNative.java new file mode 100644 index 00000000..65ded834 --- /dev/null +++ b/java/com/facebook/yoga/YogaNative.java @@ -0,0 +1,114 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +package com.facebook.yoga; + +import com.facebook.proguard.annotations.DoNotStrip; +import com.facebook.soloader.SoLoader; + +@DoNotStrip +public class YogaNative { + static { + SoLoader.loadLibrary("yoga"); + } + + // YGConfig related + static native long jni_YGConfigNew(); + static native void jni_YGConfigFree(long nativePointer); + static native void jni_YGConfigSetExperimentalFeatureEnabled(long nativePointer, int feature, boolean enabled); + static native void jni_YGConfigSetUseWebDefaults(long nativePointer, boolean useWebDefaults); + static native void jni_YGConfigSetPrintTreeFlag(long nativePointer, boolean enable); + static native void jni_YGConfigSetPointScaleFactor(long nativePointer, float pixelsInPoint); + static native void jni_YGConfigSetUseLegacyStretchBehaviour(long nativePointer, boolean useLegacyStretchBehaviour); + static native void jni_YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviour(long nativePointer, boolean shouldDiffLayoutWithoutLegacyStretchBehaviour); + static native void jni_YGConfigSetLogger(long nativePointer, Object logger); + + + // YGNode related + static native int jni_YGNodeGetInstanceCount(); + static native long jni_YGNodeNew(); + static native long jni_YGNodeNewWithConfig(long configPointer); + static native void jni_YGNodeFree(long nativePointer); + static native void jni_YGNodeReset(long nativePointer); + static native void jni_YGNodeInsertChild(long nativePointer, long childPointer, int index); + static native void jni_YGNodeSetIsReferenceBaseline(long nativePointer, boolean isReferenceBaseline); + static native boolean jni_YGNodeIsReferenceBaseline(long nativePointer); + static native void jni_YGNodeClearChildren(long nativePointer); + static native void jni_YGNodeRemoveChild(long nativePointer, long childPointer); + static native void jni_YGNodeCalculateLayout(long nativePointer, float width, float height, long[] nativePointers, YogaNodeJNIBase[] nodes); + static native void jni_YGNodeMarkDirty(long nativePointer); + static native void jni_YGNodeMarkDirtyAndPropogateToDescendants(long nativePointer); + static native boolean jni_YGNodeIsDirty(long nativePointer); + static native void jni_YGNodeCopyStyle(long dstNativePointer, long srcNativePointer); + static native int jni_YGNodeStyleGetDirection(long nativePointer); + static native void jni_YGNodeStyleSetDirection(long nativePointer, int direction); + static native int jni_YGNodeStyleGetFlexDirection(long nativePointer); + static native void jni_YGNodeStyleSetFlexDirection(long nativePointer, int flexDirection); + static native int jni_YGNodeStyleGetJustifyContent(long nativePointer); + static native void jni_YGNodeStyleSetJustifyContent(long nativePointer, int justifyContent); + static native int jni_YGNodeStyleGetAlignItems(long nativePointer); + static native void jni_YGNodeStyleSetAlignItems(long nativePointer, int alignItems); + static native int jni_YGNodeStyleGetAlignSelf(long nativePointer); + static native void jni_YGNodeStyleSetAlignSelf(long nativePointer, int alignSelf); + static native int jni_YGNodeStyleGetAlignContent(long nativePointer); + static native void jni_YGNodeStyleSetAlignContent(long nativePointer, int alignContent); + static native int jni_YGNodeStyleGetPositionType(long nativePointer); + static native void jni_YGNodeStyleSetPositionType(long nativePointer, int positionType); + static native int jni_YGNodeStyleGetFlexWrap(long nativePointer); + static native void jni_YGNodeStyleSetFlexWrap(long nativePointer, int wrapType); + static native int jni_YGNodeStyleGetOverflow(long nativePointer); + static native void jni_YGNodeStyleSetOverflow(long nativePointer, int overflow); + static native int jni_YGNodeStyleGetDisplay(long nativePointer); + static native void jni_YGNodeStyleSetDisplay(long nativePointer, int display); + static native float jni_YGNodeStyleGetFlex(long nativePointer); + static native void jni_YGNodeStyleSetFlex(long nativePointer, float flex); + static native float jni_YGNodeStyleGetFlexGrow(long nativePointer); + static native void jni_YGNodeStyleSetFlexGrow(long nativePointer, float flexGrow); + static native float jni_YGNodeStyleGetFlexShrink(long nativePointer); + static native void jni_YGNodeStyleSetFlexShrink(long nativePointer, float flexShrink); + static native Object jni_YGNodeStyleGetFlexBasis(long nativePointer); + static native void jni_YGNodeStyleSetFlexBasis(long nativePointer, float flexBasis); + static native void jni_YGNodeStyleSetFlexBasisPercent(long nativePointer, float percent); + static native void jni_YGNodeStyleSetFlexBasisAuto(long nativePointer); + static native Object jni_YGNodeStyleGetMargin(long nativePointer, int edge); + static native void jni_YGNodeStyleSetMargin(long nativePointer, int edge, float margin); + static native void jni_YGNodeStyleSetMarginPercent(long nativePointer, int edge, float percent); + static native void jni_YGNodeStyleSetMarginAuto(long nativePointer, int edge); + static native Object jni_YGNodeStyleGetPadding(long nativePointer, int edge); + static native void jni_YGNodeStyleSetPadding(long nativePointer, int edge, float padding); + static native void jni_YGNodeStyleSetPaddingPercent(long nativePointer, int edge, float percent); + static native float jni_YGNodeStyleGetBorder(long nativePointer, int edge); + static native void jni_YGNodeStyleSetBorder(long nativePointer, int edge, float border); + static native Object jni_YGNodeStyleGetPosition(long nativePointer, int edge); + static native void jni_YGNodeStyleSetPosition(long nativePointer, int edge, float position); + static native void jni_YGNodeStyleSetPositionPercent(long nativePointer, int edge, float percent); + static native Object jni_YGNodeStyleGetWidth(long nativePointer); + static native void jni_YGNodeStyleSetWidth(long nativePointer, float width); + static native void jni_YGNodeStyleSetWidthPercent(long nativePointer, float percent); + static native void jni_YGNodeStyleSetWidthAuto(long nativePointer); + static native Object jni_YGNodeStyleGetHeight(long nativePointer); + static native void jni_YGNodeStyleSetHeight(long nativePointer, float height); + static native void jni_YGNodeStyleSetHeightPercent(long nativePointer, float percent); + static native void jni_YGNodeStyleSetHeightAuto(long nativePointer); + static native Object jni_YGNodeStyleGetMinWidth(long nativePointer); + static native void jni_YGNodeStyleSetMinWidth(long nativePointer, float minWidth); + static native void jni_YGNodeStyleSetMinWidthPercent(long nativePointer, float percent); + static native Object jni_YGNodeStyleGetMinHeight(long nativePointer); + static native void jni_YGNodeStyleSetMinHeight(long nativePointer, float minHeight); + static native void jni_YGNodeStyleSetMinHeightPercent(long nativePointer, float percent); + static native Object jni_YGNodeStyleGetMaxWidth(long nativePointer); + static native void jni_YGNodeStyleSetMaxWidth(long nativePointer, float maxWidth); + static native void jni_YGNodeStyleSetMaxWidthPercent(long nativePointer, float percent); + static native Object jni_YGNodeStyleGetMaxHeight(long nativePointer); + static native void jni_YGNodeStyleSetMaxHeight(long nativePointer, float maxheight); + static native void jni_YGNodeStyleSetMaxHeightPercent(long nativePointer, float percent); + static native float jni_YGNodeStyleGetAspectRatio(long nativePointer); + static native void jni_YGNodeStyleSetAspectRatio(long nativePointer, float aspectRatio); + static native void jni_YGNodeSetHasMeasureFunc(long nativePointer, boolean hasMeasureFunc); + static native void jni_YGNodeSetHasBaselineFunc(long nativePointer, boolean hasMeasureFunc); + static native void jni_YGNodePrint(long nativePointer); + static native void jni_YGNodeSetStyleInputs(long nativePointer, float[] styleInputsArray, int size); +} diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index 002393ad..4ec53d80 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -7,7 +7,6 @@ package com.facebook.yoga; import com.facebook.proguard.annotations.DoNotStrip; -import com.facebook.soloader.SoLoader; import java.util.ArrayList; import java.util.List; import javax.annotation.Nullable; @@ -15,15 +14,6 @@ import javax.annotation.Nullable; @DoNotStrip public abstract class YogaNodeJNIBase extends YogaNode { - static { - SoLoader.loadLibrary("yoga"); - } - - /** - * Get native instance count. Useful for testing only. - */ - static native int jni_YGNodeGetInstanceCount(); - private YogaNodeJNIBase mOwner; @Nullable private List mChildren; private YogaMeasureFunction mMeasureFunction; @@ -74,17 +64,15 @@ public abstract class YogaNodeJNIBase extends YogaNode { private boolean mHasNewLayout = true; @DoNotStrip private boolean mDoesLegacyStretchFlagAffectsLayout = false; - private native long jni_YGNodeNew(); public YogaNodeJNIBase() { - mNativePointer = jni_YGNodeNew(); + mNativePointer = YogaNative.jni_YGNodeNew(); if (mNativePointer == 0) { throw new IllegalStateException("Failed to allocate native memory"); } } - private native long jni_YGNodeNewWithConfig(long configPointer); public YogaNodeJNIBase(YogaConfig config) { - mNativePointer = jni_YGNodeNewWithConfig(config.mNativePointer); + mNativePointer = YogaNative.jni_YGNodeNewWithConfig(config.mNativePointer); if (mNativePointer == 0) { throw new IllegalStateException("Failed to allocate native memory"); } @@ -99,18 +87,14 @@ public abstract class YogaNodeJNIBase extends YogaNode { } } - private static native void jni_YGNodeFree(long nativePointer); - /* frees the native underlying YGNode. Useful for testing. */ public void freeNatives() { if (mNativePointer > 0) { long nativePointer = mNativePointer; mNativePointer = 0; - jni_YGNodeFree(nativePointer); + YogaNative.jni_YGNodeFree(nativePointer); } } - - private static native void jni_YGNodeReset(long nativePointer); public void reset() { mHasNewLayout = true; @@ -137,7 +121,7 @@ public abstract class YogaNodeJNIBase extends YogaNode { mData = null; mDoesLegacyStretchFlagAffectsLayout = false; - jni_YGNodeReset(mNativePointer); + YogaNative.jni_YGNodeReset(mNativePointer); } public int getChildCount() { @@ -151,8 +135,6 @@ public abstract class YogaNodeJNIBase extends YogaNode { return mChildren.get(i); } - private static native void jni_YGNodeInsertChild(long nativePointer, long childPointer, int index); - public void addChildAt(YogaNode c, int i) { YogaNodeJNIBase child = (YogaNodeJNIBase) c; if (child.mOwner != null) { @@ -164,29 +146,22 @@ public abstract class YogaNodeJNIBase extends YogaNode { } mChildren.add(i, child); child.mOwner = this; - jni_YGNodeInsertChild(mNativePointer, child.mNativePointer, i); + YogaNative.jni_YGNodeInsertChild(mNativePointer, child.mNativePointer, i); } - private static native void jni_YGNodeSetIsReferenceBaseline(long nativePointer, boolean isReferenceBaseline); - public void setIsReferenceBaseline(boolean isReferenceBaseline) { - jni_YGNodeSetIsReferenceBaseline(mNativePointer, isReferenceBaseline); + YogaNative.jni_YGNodeSetIsReferenceBaseline(mNativePointer, isReferenceBaseline); } - private static native boolean jni_YGNodeIsReferenceBaseline(long nativePointer); - public boolean isReferenceBaseline() { - return jni_YGNodeIsReferenceBaseline(mNativePointer); + return YogaNative.jni_YGNodeIsReferenceBaseline(mNativePointer); } - private static native void jni_YGNodeClearChildren(long nativePointer); - private void clearChildren() { mChildren = null; - jni_YGNodeClearChildren(mNativePointer); + YogaNative.jni_YGNodeClearChildren(mNativePointer); } - private static native void jni_YGNodeRemoveChild(long nativePointer, long childPointer); public YogaNodeJNIBase removeChildAt(int i) { if (mChildren == null) { throw new IllegalStateException( @@ -194,7 +169,7 @@ public abstract class YogaNodeJNIBase extends YogaNode { } final YogaNodeJNIBase child = mChildren.remove(i); child.mOwner = null; - jni_YGNodeRemoveChild(mNativePointer, child.mNativePointer); + YogaNative.jni_YGNodeRemoveChild(mNativePointer, child.mNativePointer); return child; } @@ -222,7 +197,6 @@ public abstract class YogaNodeJNIBase extends YogaNode { return mChildren == null ? -1 : mChildren.indexOf(child); } - private static native void jni_YGNodeCalculateLayout(long nativePointer, float width, float height, long[] nativePointers, YogaNodeJNIBase[] nodes); public void calculateLayout(float width, float height) { long[] nativePointers = null; YogaNodeJNIBase[] nodes = null; @@ -242,357 +216,288 @@ public abstract class YogaNodeJNIBase extends YogaNode { nativePointers[i] = nodes[i].mNativePointer; } - jni_YGNodeCalculateLayout(mNativePointer, width, height, nativePointers, nodes); + YogaNative.jni_YGNodeCalculateLayout(mNativePointer, width, height, nativePointers, nodes); } public boolean hasNewLayout() { return mHasNewLayout; } - private static native void jni_YGNodeMarkDirty(long nativePointer); public void dirty() { - jni_YGNodeMarkDirty(mNativePointer); + YogaNative.jni_YGNodeMarkDirty(mNativePointer); } - private static native void jni_YGNodeMarkDirtyAndPropogateToDescendants(long nativePointer); - public void dirtyAllDescendants() { - jni_YGNodeMarkDirtyAndPropogateToDescendants(mNativePointer); + YogaNative.jni_YGNodeMarkDirtyAndPropogateToDescendants(mNativePointer); } - private static native boolean jni_YGNodeIsDirty(long nativePointer); public boolean isDirty() { - return jni_YGNodeIsDirty(mNativePointer); + return YogaNative.jni_YGNodeIsDirty(mNativePointer); } - private static native void jni_YGNodeCopyStyle(long dstNativePointer, long srcNativePointer); @Override public void copyStyle(YogaNode srcNode) { - jni_YGNodeCopyStyle(mNativePointer, ((YogaNodeJNIBase) srcNode).mNativePointer); + YogaNative.jni_YGNodeCopyStyle(mNativePointer, ((YogaNodeJNIBase) srcNode).mNativePointer); } public void markLayoutSeen() { mHasNewLayout = false; } - private static native int jni_YGNodeStyleGetDirection(long nativePointer); public YogaDirection getStyleDirection() { - return YogaDirection.fromInt(jni_YGNodeStyleGetDirection(mNativePointer)); + return YogaDirection.fromInt(YogaNative.jni_YGNodeStyleGetDirection(mNativePointer)); } - private static native void jni_YGNodeStyleSetDirection(long nativePointer, int direction); public void setDirection(YogaDirection direction) { - jni_YGNodeStyleSetDirection(mNativePointer, direction.intValue()); + YogaNative.jni_YGNodeStyleSetDirection(mNativePointer, direction.intValue()); } - private static native int jni_YGNodeStyleGetFlexDirection(long nativePointer); public YogaFlexDirection getFlexDirection() { - return YogaFlexDirection.fromInt(jni_YGNodeStyleGetFlexDirection(mNativePointer)); + return YogaFlexDirection.fromInt(YogaNative.jni_YGNodeStyleGetFlexDirection(mNativePointer)); } - private static native void jni_YGNodeStyleSetFlexDirection(long nativePointer, int flexDirection); public void setFlexDirection(YogaFlexDirection flexDirection) { - jni_YGNodeStyleSetFlexDirection(mNativePointer, flexDirection.intValue()); + YogaNative.jni_YGNodeStyleSetFlexDirection(mNativePointer, flexDirection.intValue()); } - private static native int jni_YGNodeStyleGetJustifyContent(long nativePointer); public YogaJustify getJustifyContent() { - return YogaJustify.fromInt(jni_YGNodeStyleGetJustifyContent(mNativePointer)); + return YogaJustify.fromInt(YogaNative.jni_YGNodeStyleGetJustifyContent(mNativePointer)); } - private static native void jni_YGNodeStyleSetJustifyContent(long nativePointer, int justifyContent); public void setJustifyContent(YogaJustify justifyContent) { - jni_YGNodeStyleSetJustifyContent(mNativePointer, justifyContent.intValue()); + YogaNative.jni_YGNodeStyleSetJustifyContent(mNativePointer, justifyContent.intValue()); } - private static native int jni_YGNodeStyleGetAlignItems(long nativePointer); public YogaAlign getAlignItems() { - return YogaAlign.fromInt(jni_YGNodeStyleGetAlignItems(mNativePointer)); + return YogaAlign.fromInt(YogaNative.jni_YGNodeStyleGetAlignItems(mNativePointer)); } - private static native void jni_YGNodeStyleSetAlignItems(long nativePointer, int alignItems); public void setAlignItems(YogaAlign alignItems) { - jni_YGNodeStyleSetAlignItems(mNativePointer, alignItems.intValue()); + YogaNative.jni_YGNodeStyleSetAlignItems(mNativePointer, alignItems.intValue()); } - private static native int jni_YGNodeStyleGetAlignSelf(long nativePointer); public YogaAlign getAlignSelf() { - return YogaAlign.fromInt(jni_YGNodeStyleGetAlignSelf(mNativePointer)); + return YogaAlign.fromInt(YogaNative.jni_YGNodeStyleGetAlignSelf(mNativePointer)); } - private static native void jni_YGNodeStyleSetAlignSelf(long nativePointer, int alignSelf); public void setAlignSelf(YogaAlign alignSelf) { - jni_YGNodeStyleSetAlignSelf(mNativePointer, alignSelf.intValue()); + YogaNative.jni_YGNodeStyleSetAlignSelf(mNativePointer, alignSelf.intValue()); } - private static native int jni_YGNodeStyleGetAlignContent(long nativePointer); public YogaAlign getAlignContent() { - return YogaAlign.fromInt(jni_YGNodeStyleGetAlignContent(mNativePointer)); + return YogaAlign.fromInt(YogaNative.jni_YGNodeStyleGetAlignContent(mNativePointer)); } - private static native void jni_YGNodeStyleSetAlignContent(long nativePointer, int alignContent); public void setAlignContent(YogaAlign alignContent) { - jni_YGNodeStyleSetAlignContent(mNativePointer, alignContent.intValue()); + YogaNative.jni_YGNodeStyleSetAlignContent(mNativePointer, alignContent.intValue()); } - private static native int jni_YGNodeStyleGetPositionType(long nativePointer); public YogaPositionType getPositionType() { - return YogaPositionType.fromInt(jni_YGNodeStyleGetPositionType(mNativePointer)); + return YogaPositionType.fromInt(YogaNative.jni_YGNodeStyleGetPositionType(mNativePointer)); } - private static native void jni_YGNodeStyleSetPositionType(long nativePointer, int positionType); public void setPositionType(YogaPositionType positionType) { - jni_YGNodeStyleSetPositionType(mNativePointer, positionType.intValue()); + YogaNative.jni_YGNodeStyleSetPositionType(mNativePointer, positionType.intValue()); } - private static native int jni_YGNodeStyleGetFlexWrap(long nativePointer); public YogaWrap getWrap() { - return YogaWrap.fromInt(jni_YGNodeStyleGetFlexWrap(mNativePointer)); + return YogaWrap.fromInt(YogaNative.jni_YGNodeStyleGetFlexWrap(mNativePointer)); } - private static native void jni_YGNodeStyleSetFlexWrap(long nativePointer, int wrapType); public void setWrap(YogaWrap flexWrap) { - jni_YGNodeStyleSetFlexWrap(mNativePointer, flexWrap.intValue()); + YogaNative.jni_YGNodeStyleSetFlexWrap(mNativePointer, flexWrap.intValue()); } - private static native int jni_YGNodeStyleGetOverflow(long nativePointer); public YogaOverflow getOverflow() { - return YogaOverflow.fromInt(jni_YGNodeStyleGetOverflow(mNativePointer)); + return YogaOverflow.fromInt(YogaNative.jni_YGNodeStyleGetOverflow(mNativePointer)); } - private static native void jni_YGNodeStyleSetOverflow(long nativePointer, int overflow); public void setOverflow(YogaOverflow overflow) { - jni_YGNodeStyleSetOverflow(mNativePointer, overflow.intValue()); + YogaNative.jni_YGNodeStyleSetOverflow(mNativePointer, overflow.intValue()); } - private static native int jni_YGNodeStyleGetDisplay(long nativePointer); public YogaDisplay getDisplay() { - return YogaDisplay.fromInt(jni_YGNodeStyleGetDisplay(mNativePointer)); + return YogaDisplay.fromInt(YogaNative.jni_YGNodeStyleGetDisplay(mNativePointer)); } - private static native void jni_YGNodeStyleSetDisplay(long nativePointer, int display); public void setDisplay(YogaDisplay display) { - jni_YGNodeStyleSetDisplay(mNativePointer, display.intValue()); + YogaNative.jni_YGNodeStyleSetDisplay(mNativePointer, display.intValue()); } - private static native float jni_YGNodeStyleGetFlex(long nativePointer); public float getFlex() { - return jni_YGNodeStyleGetFlex(mNativePointer); + return YogaNative.jni_YGNodeStyleGetFlex(mNativePointer); } - private static native void jni_YGNodeStyleSetFlex(long nativePointer, float flex); public void setFlex(float flex) { - jni_YGNodeStyleSetFlex(mNativePointer, flex); + YogaNative.jni_YGNodeStyleSetFlex(mNativePointer, flex); } - private static native float jni_YGNodeStyleGetFlexGrow(long nativePointer); public float getFlexGrow() { - return jni_YGNodeStyleGetFlexGrow(mNativePointer); + return YogaNative.jni_YGNodeStyleGetFlexGrow(mNativePointer); } - private static native void jni_YGNodeStyleSetFlexGrow(long nativePointer, float flexGrow); public void setFlexGrow(float flexGrow) { - jni_YGNodeStyleSetFlexGrow(mNativePointer, flexGrow); + YogaNative.jni_YGNodeStyleSetFlexGrow(mNativePointer, flexGrow); } - private static native float jni_YGNodeStyleGetFlexShrink(long nativePointer); public float getFlexShrink() { - return jni_YGNodeStyleGetFlexShrink(mNativePointer); + return YogaNative.jni_YGNodeStyleGetFlexShrink(mNativePointer); } - private static native void jni_YGNodeStyleSetFlexShrink(long nativePointer, float flexShrink); public void setFlexShrink(float flexShrink) { - jni_YGNodeStyleSetFlexShrink(mNativePointer, flexShrink); + YogaNative.jni_YGNodeStyleSetFlexShrink(mNativePointer, flexShrink); } - private static native Object jni_YGNodeStyleGetFlexBasis(long nativePointer); public YogaValue getFlexBasis() { - return (YogaValue) jni_YGNodeStyleGetFlexBasis(mNativePointer); + return (YogaValue) YogaNative.jni_YGNodeStyleGetFlexBasis(mNativePointer); } - private static native void jni_YGNodeStyleSetFlexBasis(long nativePointer, float flexBasis); public void setFlexBasis(float flexBasis) { - jni_YGNodeStyleSetFlexBasis(mNativePointer, flexBasis); + YogaNative.jni_YGNodeStyleSetFlexBasis(mNativePointer, flexBasis); } - private static native void jni_YGNodeStyleSetFlexBasisPercent(long nativePointer, float percent); public void setFlexBasisPercent(float percent) { - jni_YGNodeStyleSetFlexBasisPercent(mNativePointer, percent); + YogaNative.jni_YGNodeStyleSetFlexBasisPercent(mNativePointer, percent); } - private static native void jni_YGNodeStyleSetFlexBasisAuto(long nativePointer); public void setFlexBasisAuto() { - jni_YGNodeStyleSetFlexBasisAuto(mNativePointer); + YogaNative.jni_YGNodeStyleSetFlexBasisAuto(mNativePointer); } - private static native Object jni_YGNodeStyleGetMargin(long nativePointer, int edge); public YogaValue getMargin(YogaEdge edge) { - return (YogaValue) jni_YGNodeStyleGetMargin(mNativePointer, edge.intValue()); + return (YogaValue) YogaNative.jni_YGNodeStyleGetMargin(mNativePointer, edge.intValue()); } - private static native void jni_YGNodeStyleSetMargin(long nativePointer, int edge, float margin); public void setMargin(YogaEdge edge, float margin) { - jni_YGNodeStyleSetMargin(mNativePointer, edge.intValue(), margin); + YogaNative.jni_YGNodeStyleSetMargin(mNativePointer, edge.intValue(), margin); } - private static native void jni_YGNodeStyleSetMarginPercent(long nativePointer, int edge, float percent); public void setMarginPercent(YogaEdge edge, float percent) { - jni_YGNodeStyleSetMarginPercent(mNativePointer, edge.intValue(), percent); + YogaNative.jni_YGNodeStyleSetMarginPercent(mNativePointer, edge.intValue(), percent); } - private static native void jni_YGNodeStyleSetMarginAuto(long nativePointer, int edge); public void setMarginAuto(YogaEdge edge) { - jni_YGNodeStyleSetMarginAuto(mNativePointer, edge.intValue()); + YogaNative.jni_YGNodeStyleSetMarginAuto(mNativePointer, edge.intValue()); } - private static native Object jni_YGNodeStyleGetPadding(long nativePointer, int edge); public YogaValue getPadding(YogaEdge edge) { - return (YogaValue) jni_YGNodeStyleGetPadding(mNativePointer, edge.intValue()); + return (YogaValue) YogaNative.jni_YGNodeStyleGetPadding(mNativePointer, edge.intValue()); } - private static native void jni_YGNodeStyleSetPadding(long nativePointer, int edge, float padding); public void setPadding(YogaEdge edge, float padding) { - jni_YGNodeStyleSetPadding(mNativePointer, edge.intValue(), padding); + YogaNative.jni_YGNodeStyleSetPadding(mNativePointer, edge.intValue(), padding); } - private static native void jni_YGNodeStyleSetPaddingPercent(long nativePointer, int edge, float percent); public void setPaddingPercent(YogaEdge edge, float percent) { - jni_YGNodeStyleSetPaddingPercent(mNativePointer, edge.intValue(), percent); + YogaNative.jni_YGNodeStyleSetPaddingPercent(mNativePointer, edge.intValue(), percent); } - private static native float jni_YGNodeStyleGetBorder(long nativePointer, int edge); public float getBorder(YogaEdge edge) { - return jni_YGNodeStyleGetBorder(mNativePointer, edge.intValue()); + return YogaNative.jni_YGNodeStyleGetBorder(mNativePointer, edge.intValue()); } - private static native void jni_YGNodeStyleSetBorder(long nativePointer, int edge, float border); public void setBorder(YogaEdge edge, float border) { - jni_YGNodeStyleSetBorder(mNativePointer, edge.intValue(), border); + YogaNative.jni_YGNodeStyleSetBorder(mNativePointer, edge.intValue(), border); } - private static native Object jni_YGNodeStyleGetPosition(long nativePointer, int edge); public YogaValue getPosition(YogaEdge edge) { - return (YogaValue) jni_YGNodeStyleGetPosition(mNativePointer, edge.intValue()); + return (YogaValue) YogaNative.jni_YGNodeStyleGetPosition(mNativePointer, edge.intValue()); } - private static native void jni_YGNodeStyleSetPosition(long nativePointer, int edge, float position); public void setPosition(YogaEdge edge, float position) { - jni_YGNodeStyleSetPosition(mNativePointer, edge.intValue(), position); + YogaNative.jni_YGNodeStyleSetPosition(mNativePointer, edge.intValue(), position); } - private static native void jni_YGNodeStyleSetPositionPercent(long nativePointer, int edge, float percent); public void setPositionPercent(YogaEdge edge, float percent) { - jni_YGNodeStyleSetPositionPercent(mNativePointer, edge.intValue(), percent); + YogaNative.jni_YGNodeStyleSetPositionPercent(mNativePointer, edge.intValue(), percent); } - private static native Object jni_YGNodeStyleGetWidth(long nativePointer); public YogaValue getWidth() { - return (YogaValue) jni_YGNodeStyleGetWidth(mNativePointer); + return (YogaValue) YogaNative.jni_YGNodeStyleGetWidth(mNativePointer); } - private static native void jni_YGNodeStyleSetWidth(long nativePointer, float width); public void setWidth(float width) { - jni_YGNodeStyleSetWidth(mNativePointer, width); + YogaNative.jni_YGNodeStyleSetWidth(mNativePointer, width); } - private static native void jni_YGNodeStyleSetWidthPercent(long nativePointer, float percent); public void setWidthPercent(float percent) { - jni_YGNodeStyleSetWidthPercent(mNativePointer, percent); + YogaNative.jni_YGNodeStyleSetWidthPercent(mNativePointer, percent); } - private static native void jni_YGNodeStyleSetWidthAuto(long nativePointer); public void setWidthAuto() { - jni_YGNodeStyleSetWidthAuto(mNativePointer); + YogaNative.jni_YGNodeStyleSetWidthAuto(mNativePointer); } - private static native Object jni_YGNodeStyleGetHeight(long nativePointer); public YogaValue getHeight() { - return (YogaValue) jni_YGNodeStyleGetHeight(mNativePointer); + return (YogaValue) YogaNative.jni_YGNodeStyleGetHeight(mNativePointer); } - private static native void jni_YGNodeStyleSetHeight(long nativePointer, float height); public void setHeight(float height) { - jni_YGNodeStyleSetHeight(mNativePointer, height); + YogaNative.jni_YGNodeStyleSetHeight(mNativePointer, height); } - private static native void jni_YGNodeStyleSetHeightPercent(long nativePointer, float percent); public void setHeightPercent(float percent) { - jni_YGNodeStyleSetHeightPercent(mNativePointer, percent); + YogaNative.jni_YGNodeStyleSetHeightPercent(mNativePointer, percent); } - private static native void jni_YGNodeStyleSetHeightAuto(long nativePointer); public void setHeightAuto() { - jni_YGNodeStyleSetHeightAuto(mNativePointer); + YogaNative.jni_YGNodeStyleSetHeightAuto(mNativePointer); } - private static native Object jni_YGNodeStyleGetMinWidth(long nativePointer); public YogaValue getMinWidth() { - return (YogaValue) jni_YGNodeStyleGetMinWidth(mNativePointer); + return (YogaValue) YogaNative.jni_YGNodeStyleGetMinWidth(mNativePointer); } - private static native void jni_YGNodeStyleSetMinWidth(long nativePointer, float minWidth); public void setMinWidth(float minWidth) { - jni_YGNodeStyleSetMinWidth(mNativePointer, minWidth); + YogaNative.jni_YGNodeStyleSetMinWidth(mNativePointer, minWidth); } - private static native void jni_YGNodeStyleSetMinWidthPercent(long nativePointer, float percent); public void setMinWidthPercent(float percent) { - jni_YGNodeStyleSetMinWidthPercent(mNativePointer, percent); + YogaNative.jni_YGNodeStyleSetMinWidthPercent(mNativePointer, percent); } - private static native Object jni_YGNodeStyleGetMinHeight(long nativePointer); public YogaValue getMinHeight() { - return (YogaValue) jni_YGNodeStyleGetMinHeight(mNativePointer); + return (YogaValue) YogaNative.jni_YGNodeStyleGetMinHeight(mNativePointer); } - private static native void jni_YGNodeStyleSetMinHeight(long nativePointer, float minHeight); public void setMinHeight(float minHeight) { - jni_YGNodeStyleSetMinHeight(mNativePointer, minHeight); + YogaNative.jni_YGNodeStyleSetMinHeight(mNativePointer, minHeight); } - private static native void jni_YGNodeStyleSetMinHeightPercent(long nativePointer, float percent); public void setMinHeightPercent(float percent) { - jni_YGNodeStyleSetMinHeightPercent(mNativePointer, percent); + YogaNative.jni_YGNodeStyleSetMinHeightPercent(mNativePointer, percent); } - private static native Object jni_YGNodeStyleGetMaxWidth(long nativePointer); public YogaValue getMaxWidth() { - return (YogaValue) jni_YGNodeStyleGetMaxWidth(mNativePointer); + return (YogaValue) YogaNative.jni_YGNodeStyleGetMaxWidth(mNativePointer); } - private static native void jni_YGNodeStyleSetMaxWidth(long nativePointer, float maxWidth); public void setMaxWidth(float maxWidth) { - jni_YGNodeStyleSetMaxWidth(mNativePointer, maxWidth); + YogaNative.jni_YGNodeStyleSetMaxWidth(mNativePointer, maxWidth); } - private static native void jni_YGNodeStyleSetMaxWidthPercent(long nativePointer, float percent); public void setMaxWidthPercent(float percent) { - jni_YGNodeStyleSetMaxWidthPercent(mNativePointer, percent); + YogaNative.jni_YGNodeStyleSetMaxWidthPercent(mNativePointer, percent); } - private static native Object jni_YGNodeStyleGetMaxHeight(long nativePointer); public YogaValue getMaxHeight() { - return (YogaValue) jni_YGNodeStyleGetMaxHeight(mNativePointer); + return (YogaValue) YogaNative.jni_YGNodeStyleGetMaxHeight(mNativePointer); } - private static native void jni_YGNodeStyleSetMaxHeight(long nativePointer, float maxheight); public void setMaxHeight(float maxheight) { - jni_YGNodeStyleSetMaxHeight(mNativePointer, maxheight); + YogaNative.jni_YGNodeStyleSetMaxHeight(mNativePointer, maxheight); } - private static native void jni_YGNodeStyleSetMaxHeightPercent(long nativePointer, float percent); public void setMaxHeightPercent(float percent) { - jni_YGNodeStyleSetMaxHeightPercent(mNativePointer, percent); + YogaNative.jni_YGNodeStyleSetMaxHeightPercent(mNativePointer, percent); } - private static native float jni_YGNodeStyleGetAspectRatio(long nativePointer); public float getAspectRatio() { - return jni_YGNodeStyleGetAspectRatio(mNativePointer); + return YogaNative.jni_YGNodeStyleGetAspectRatio(mNativePointer); } - private static native void jni_YGNodeStyleSetAspectRatio(long nativePointer, float aspectRatio); public void setAspectRatio(float aspectRatio) { - jni_YGNodeStyleSetAspectRatio(mNativePointer, aspectRatio); + YogaNative.jni_YGNodeStyleSetAspectRatio(mNativePointer, aspectRatio); } public float getLayoutX() { @@ -676,10 +581,9 @@ public abstract class YogaNodeJNIBase extends YogaNode { return YogaDirection.fromInt(mLayoutDirection); } - private static native void jni_YGNodeSetHasMeasureFunc(long nativePointer, boolean hasMeasureFunc); public void setMeasureFunction(YogaMeasureFunction measureFunction) { mMeasureFunction = measureFunction; - jni_YGNodeSetHasMeasureFunc(mNativePointer, measureFunction != null); + YogaNative.jni_YGNodeSetHasMeasureFunc(mNativePointer, measureFunction != null); } // Implementation Note: Why this method needs to stay final @@ -701,10 +605,9 @@ public abstract class YogaNodeJNIBase extends YogaNode { YogaMeasureMode.fromInt(heightMode)); } - private static native void jni_YGNodeSetHasBaselineFunc(long nativePointer, boolean hasMeasureFunc); public void setBaselineFunction(YogaBaselineFunction baselineFunction) { mBaselineFunction = baselineFunction; - jni_YGNodeSetHasBaselineFunc(mNativePointer, baselineFunction != null); + YogaNative.jni_YGNodeSetHasBaselineFunc(mNativePointer, baselineFunction != null); } @DoNotStrip @@ -724,20 +627,16 @@ public abstract class YogaNodeJNIBase extends YogaNode { return mData; } - private static native void jni_YGNodePrint(long nativePointer); - /** * Use the set logger (defaults to adb log) to print out the styles, children, and computed * layout of the tree rooted at this node. */ public void print() { - jni_YGNodePrint(mNativePointer); + YogaNative.jni_YGNodePrint(mNativePointer); } - private static native void jni_YGNodeSetStyleInputs(long nativePointer, float[] styleInputsArray, int size); - public void setStyleInputs(float[] styleInputsArray, int size) { - jni_YGNodeSetStyleInputs(mNativePointer, styleInputsArray, size); + YogaNative.jni_YGNodeSetStyleInputs(mNativePointer, styleInputsArray, size); } /** diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp index 146a095e..c001ce28 100644 --- a/java/jni/YGJNI.cpp +++ b/java/jni/YGJNI.cpp @@ -340,14 +340,14 @@ static int YGJNILogFunc( return result; } -jlong jni_YGNodeNew(alias_ref) { +jlong jni_YGNodeNew(alias_ref) { const YGNodeRef node = YGNodeNew(); node->setContext(YGNodeContext{}.asVoidPtr); node->setPrintFunc(YGPrint); return reinterpret_cast(node); } -jlong jni_YGNodeNewWithConfig(alias_ref, jlong configPointer) { +jlong jni_YGNodeNewWithConfig(alias_ref, jlong configPointer) { const YGNodeRef node = YGNodeNewWithConfig(_jlong2YGConfigRef(configPointer)); node->setContext(YGNodeContext{}.asVoidPtr); return reinterpret_cast(node); @@ -473,7 +473,7 @@ void jni_YGNodeCopyStyle(jlong dstNativePointer, jlong srcNativePointer) { #define YG_NODE_JNI_STYLE_UNIT_PROP(name) \ local_ref jni_YGNodeStyleGet##name( \ - alias_ref, jlong nativePointer) { \ + alias_ref, jlong nativePointer) { \ return JYogaValue::create( \ YGNodeStyleGet##name(_jlong2YGNodeRef(nativePointer))); \ } \ @@ -510,7 +510,7 @@ void jni_YGNodeCopyStyle(jlong dstNativePointer, jlong srcNativePointer) { #define YG_NODE_JNI_STYLE_EDGE_UNIT_PROP(name) \ local_ref jni_YGNodeStyleGet##name( \ - alias_ref, jlong nativePointer, jint edge) { \ + alias_ref, jlong nativePointer, jint edge) { \ return JYogaValue::create(YGNodeStyleGet##name( \ _jlong2YGNodeRef(nativePointer), static_cast(edge))); \ } \ @@ -572,11 +572,11 @@ YG_NODE_JNI_STYLE_UNIT_PROP(MaxHeight); // Yoga specific properties, not compatible with flexbox specification YG_NODE_JNI_STYLE_PROP(jfloat, float, AspectRatio); -jlong jni_YGConfigNew(alias_ref) { +jlong jni_YGConfigNew(alias_ref) { return reinterpret_cast(YGConfigNew()); } -void jni_YGConfigFree(alias_ref, jlong nativePointer) { +void jni_YGConfigFree(alias_ref, jlong nativePointer) { const YGConfigRef config = _jlong2YGConfigRef(nativePointer); // unique_ptr will destruct the underlying global_ref, if present. auto context = std::unique_ptr>{ @@ -585,7 +585,7 @@ void jni_YGConfigFree(alias_ref, jlong nativePointer) { } void jni_YGConfigSetExperimentalFeatureEnabled( - alias_ref, + alias_ref, jlong nativePointer, jint feature, jboolean enabled) { @@ -595,7 +595,7 @@ void jni_YGConfigSetExperimentalFeatureEnabled( } void jni_YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviour( - alias_ref, + alias_ref, jlong nativePointer, jboolean enabled) { const YGConfigRef config = _jlong2YGConfigRef(nativePointer); @@ -603,7 +603,7 @@ void jni_YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviour( } void jni_YGConfigSetUseWebDefaults( - alias_ref, + alias_ref, jlong nativePointer, jboolean useWebDefaults) { const YGConfigRef config = _jlong2YGConfigRef(nativePointer); @@ -611,7 +611,7 @@ void jni_YGConfigSetUseWebDefaults( } void jni_YGConfigSetPrintTreeFlag( - alias_ref, + alias_ref, jlong nativePointer, jboolean enable) { const YGConfigRef config = _jlong2YGConfigRef(nativePointer); @@ -619,7 +619,7 @@ void jni_YGConfigSetPrintTreeFlag( } void jni_YGConfigSetPointScaleFactor( - alias_ref, + alias_ref, jlong nativePointer, jfloat pixelsInPoint) { const YGConfigRef config = _jlong2YGConfigRef(nativePointer); @@ -627,7 +627,7 @@ void jni_YGConfigSetPointScaleFactor( } void jni_YGConfigSetUseLegacyStretchBehaviour( - alias_ref, + alias_ref, jlong nativePointer, jboolean useLegacyStretchBehaviour) { const YGConfigRef config = _jlong2YGConfigRef(nativePointer); @@ -635,7 +635,7 @@ void jni_YGConfigSetUseLegacyStretchBehaviour( } void jni_YGConfigSetLogger( - alias_ref, + alias_ref, jlong nativePointer, alias_ref logger) { const YGConfigRef config = _jlong2YGConfigRef(nativePointer); @@ -828,7 +828,7 @@ static void YGNodeSetStyleInputs( } void jni_YGNodeSetStyleInputs( - alias_ref, + alias_ref, jlong nativePointer, alias_ref styleInputs, jint size) { @@ -842,7 +842,7 @@ jint jni_YGNodeGetInstanceCount() { } local_ref jni_YGNodeStyleGetMargin( - alias_ref, + alias_ref, jlong nativePointer, jint edge) { YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); @@ -877,7 +877,7 @@ void jni_YGNodeStyleSetMarginAuto(jlong nativePointer, jint edge) { } local_ref jni_YGNodeStyleGetPadding( - alias_ref, + alias_ref, jlong nativePointer, jint edge) { YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); @@ -926,95 +926,93 @@ void jni_YGNodeStyleSetBorder(jlong nativePointer, jint edge, jfloat border) { jint JNI_OnLoad(JavaVM* vm, void*) { return initialize(vm, [] { - JYogaNode::javaClassStatic()->registerNatives({ - YGMakeNativeMethod(jni_YGNodeNew), - YGMakeNativeMethod(jni_YGNodeNewWithConfig), - YGMakeNativeMethod(jni_YGNodeFree), - YGMakeCriticalNativeMethod(jni_YGNodeReset), - YGMakeCriticalNativeMethod(jni_YGNodeClearChildren), - YGMakeCriticalNativeMethod(jni_YGNodeInsertChild), - YGMakeCriticalNativeMethod(jni_YGNodeRemoveChild), - YGMakeCriticalNativeMethod(jni_YGNodeSetIsReferenceBaseline), - YGMakeCriticalNativeMethod(jni_YGNodeIsReferenceBaseline), - YGMakeNativeMethod(jni_YGNodeCalculateLayout), - YGMakeCriticalNativeMethod(jni_YGNodeMarkDirty), - YGMakeCriticalNativeMethod( - jni_YGNodeMarkDirtyAndPropogateToDescendants), - YGMakeCriticalNativeMethod(jni_YGNodeIsDirty), - YGMakeCriticalNativeMethod(jni_YGNodeSetHasMeasureFunc), - YGMakeCriticalNativeMethod(jni_YGNodeSetHasBaselineFunc), - YGMakeCriticalNativeMethod(jni_YGNodeCopyStyle), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetDirection), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetDirection), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetFlexDirection), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexDirection), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetJustifyContent), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetJustifyContent), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetAlignItems), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetAlignItems), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetAlignSelf), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetAlignSelf), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetAlignContent), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetAlignContent), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetPositionType), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPositionType), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetFlexWrap), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexWrap), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetOverflow), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetOverflow), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetDisplay), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetDisplay), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetFlex), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlex), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetFlexGrow), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexGrow), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetFlexShrink), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexShrink), - YGMakeNativeMethod(jni_YGNodeStyleGetFlexBasis), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexBasis), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexBasisPercent), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexBasisAuto), - YGMakeNativeMethod(jni_YGNodeStyleGetMargin), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMargin), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMarginPercent), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMarginAuto), - YGMakeNativeMethod(jni_YGNodeStyleGetPadding), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPadding), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPaddingPercent), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetBorder), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetBorder), - YGMakeNativeMethod(jni_YGNodeStyleGetPosition), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPosition), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPositionPercent), - YGMakeNativeMethod(jni_YGNodeStyleGetWidth), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetWidth), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetWidthPercent), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetWidthAuto), - YGMakeNativeMethod(jni_YGNodeStyleGetHeight), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetHeight), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetHeightPercent), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetHeightAuto), - YGMakeNativeMethod(jni_YGNodeStyleGetMinWidth), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMinWidth), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMinWidthPercent), - YGMakeNativeMethod(jni_YGNodeStyleGetMinHeight), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMinHeight), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMinHeightPercent), - YGMakeNativeMethod(jni_YGNodeStyleGetMaxWidth), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMaxWidth), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMaxWidthPercent), - YGMakeNativeMethod(jni_YGNodeStyleGetMaxHeight), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMaxHeight), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMaxHeightPercent), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetAspectRatio), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetAspectRatio), - YGMakeCriticalNativeMethod(jni_YGNodeGetInstanceCount), - YGMakeCriticalNativeMethod(jni_YGNodePrint), - YGMakeNativeMethod(jni_YGNodeSetStyleInputs), - }); registerNatives( - "com/facebook/yoga/YogaConfig", + "com/facebook/yoga/YogaNative", { + YGMakeNativeMethod(jni_YGNodeNew), + YGMakeNativeMethod(jni_YGNodeNewWithConfig), + YGMakeNativeMethod(jni_YGNodeFree), + YGMakeCriticalNativeMethod(jni_YGNodeReset), + YGMakeCriticalNativeMethod(jni_YGNodeClearChildren), + YGMakeCriticalNativeMethod(jni_YGNodeInsertChild), + YGMakeCriticalNativeMethod(jni_YGNodeRemoveChild), + YGMakeCriticalNativeMethod(jni_YGNodeSetIsReferenceBaseline), + YGMakeCriticalNativeMethod(jni_YGNodeIsReferenceBaseline), + YGMakeNativeMethod(jni_YGNodeCalculateLayout), + YGMakeCriticalNativeMethod(jni_YGNodeMarkDirty), + YGMakeCriticalNativeMethod( + jni_YGNodeMarkDirtyAndPropogateToDescendants), + YGMakeCriticalNativeMethod(jni_YGNodeIsDirty), + YGMakeCriticalNativeMethod(jni_YGNodeSetHasMeasureFunc), + YGMakeCriticalNativeMethod(jni_YGNodeSetHasBaselineFunc), + YGMakeCriticalNativeMethod(jni_YGNodeCopyStyle), + YGMakeCriticalNativeMethod(jni_YGNodeStyleGetDirection), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetDirection), + YGMakeCriticalNativeMethod(jni_YGNodeStyleGetFlexDirection), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexDirection), + YGMakeCriticalNativeMethod(jni_YGNodeStyleGetJustifyContent), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetJustifyContent), + YGMakeCriticalNativeMethod(jni_YGNodeStyleGetAlignItems), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetAlignItems), + YGMakeCriticalNativeMethod(jni_YGNodeStyleGetAlignSelf), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetAlignSelf), + YGMakeCriticalNativeMethod(jni_YGNodeStyleGetAlignContent), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetAlignContent), + YGMakeCriticalNativeMethod(jni_YGNodeStyleGetPositionType), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPositionType), + YGMakeCriticalNativeMethod(jni_YGNodeStyleGetFlexWrap), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexWrap), + YGMakeCriticalNativeMethod(jni_YGNodeStyleGetOverflow), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetOverflow), + YGMakeCriticalNativeMethod(jni_YGNodeStyleGetDisplay), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetDisplay), + YGMakeCriticalNativeMethod(jni_YGNodeStyleGetFlex), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlex), + YGMakeCriticalNativeMethod(jni_YGNodeStyleGetFlexGrow), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexGrow), + YGMakeCriticalNativeMethod(jni_YGNodeStyleGetFlexShrink), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexShrink), + YGMakeNativeMethod(jni_YGNodeStyleGetFlexBasis), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexBasis), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexBasisPercent), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexBasisAuto), + YGMakeNativeMethod(jni_YGNodeStyleGetMargin), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMargin), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMarginPercent), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMarginAuto), + YGMakeNativeMethod(jni_YGNodeStyleGetPadding), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPadding), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPaddingPercent), + YGMakeCriticalNativeMethod(jni_YGNodeStyleGetBorder), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetBorder), + YGMakeNativeMethod(jni_YGNodeStyleGetPosition), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPosition), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPositionPercent), + YGMakeNativeMethod(jni_YGNodeStyleGetWidth), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetWidth), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetWidthPercent), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetWidthAuto), + YGMakeNativeMethod(jni_YGNodeStyleGetHeight), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetHeight), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetHeightPercent), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetHeightAuto), + YGMakeNativeMethod(jni_YGNodeStyleGetMinWidth), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMinWidth), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMinWidthPercent), + YGMakeNativeMethod(jni_YGNodeStyleGetMinHeight), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMinHeight), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMinHeightPercent), + YGMakeNativeMethod(jni_YGNodeStyleGetMaxWidth), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMaxWidth), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMaxWidthPercent), + YGMakeNativeMethod(jni_YGNodeStyleGetMaxHeight), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMaxHeight), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMaxHeightPercent), + YGMakeCriticalNativeMethod(jni_YGNodeStyleGetAspectRatio), + YGMakeCriticalNativeMethod(jni_YGNodeStyleSetAspectRatio), + YGMakeCriticalNativeMethod(jni_YGNodeGetInstanceCount), + YGMakeCriticalNativeMethod(jni_YGNodePrint), + YGMakeNativeMethod(jni_YGNodeSetStyleInputs), YGMakeNativeMethod(jni_YGConfigNew), YGMakeNativeMethod(jni_YGConfigFree), YGMakeNativeMethod(jni_YGConfigSetExperimentalFeatureEnabled), diff --git a/java/jni/YGJTypes.h b/java/jni/YGJTypes.h index 00129cc1..53f606f7 100644 --- a/java/jni/YGJTypes.h +++ b/java/jni/YGJTypes.h @@ -14,10 +14,6 @@ struct JYogaNode : public facebook::jni::JavaClass { jlong measure(jfloat width, jint widthMode, jfloat height, jint heightMode); }; -struct JYogaConfig : public facebook::jni::JavaClass { - static constexpr auto kJavaDescriptor = "Lcom/facebook/yoga/YogaConfig;"; -}; - struct JYogaLogLevel : public facebook::jni::JavaClass { static constexpr auto kJavaDescriptor = "Lcom/facebook/yoga/YogaLogLevel;"; diff --git a/java/tests/com/facebook/yoga/YogaNodeTest.java b/java/tests/com/facebook/yoga/YogaNodeTest.java index dddf8eae..7573bbb0 100644 --- a/java/tests/com/facebook/yoga/YogaNodeTest.java +++ b/java/tests/com/facebook/yoga/YogaNodeTest.java @@ -30,9 +30,9 @@ public class YogaNodeTest { @Test public void testInit() { - final int refCount = YogaNodeJNIBase.jni_YGNodeGetInstanceCount(); + final int refCount = YogaNative.jni_YGNodeGetInstanceCount(); final YogaNode node = createNode(); - assertEquals(refCount + 1, YogaNodeJNIBase.jni_YGNodeGetInstanceCount()); + assertEquals(refCount + 1, YogaNative.jni_YGNodeGetInstanceCount()); } @Test From ca46c67e9efa5343bf524096d332be170fe8991a Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Fri, 22 Mar 2019 10:31:18 -0700 Subject: [PATCH 006/347] Create `YogaValue` instances in Java, not C++ Summary: @public Passing primitive data via JNI is more efficient than passing objects. Here, we avoid creating `YogaValue` (Java) instances via JNI, and rather pass a `long` back to Java. The instance is then created by extracting the necessary bytes on the Java side. Reviewed By: foghina Differential Revision: D14576755 fbshipit-source-id: 22d09ad50c3ac6c49b0a797a0dad639ea4829df9 --- java/com/facebook/yoga/YogaNative.java | 20 +++++------ java/com/facebook/yoga/YogaNodeJNIBase.java | 24 +++++++------ java/com/facebook/yoga/YogaValue.java | 4 --- java/jni/YGJNI.cpp | 35 +++++++++++++------ java/jni/YGJTypes.h | 8 ----- .../yoga/YogaNodeStylePropertiesTest.java | 24 ++++++++++--- 6 files changed, 67 insertions(+), 48 deletions(-) diff --git a/java/com/facebook/yoga/YogaNative.java b/java/com/facebook/yoga/YogaNative.java index 65ded834..ef0b44ee 100644 --- a/java/com/facebook/yoga/YogaNative.java +++ b/java/com/facebook/yoga/YogaNative.java @@ -69,40 +69,40 @@ public class YogaNative { static native void jni_YGNodeStyleSetFlexGrow(long nativePointer, float flexGrow); static native float jni_YGNodeStyleGetFlexShrink(long nativePointer); static native void jni_YGNodeStyleSetFlexShrink(long nativePointer, float flexShrink); - static native Object jni_YGNodeStyleGetFlexBasis(long nativePointer); + static native long jni_YGNodeStyleGetFlexBasis(long nativePointer); static native void jni_YGNodeStyleSetFlexBasis(long nativePointer, float flexBasis); static native void jni_YGNodeStyleSetFlexBasisPercent(long nativePointer, float percent); static native void jni_YGNodeStyleSetFlexBasisAuto(long nativePointer); - static native Object jni_YGNodeStyleGetMargin(long nativePointer, int edge); + static native long jni_YGNodeStyleGetMargin(long nativePointer, int edge); static native void jni_YGNodeStyleSetMargin(long nativePointer, int edge, float margin); static native void jni_YGNodeStyleSetMarginPercent(long nativePointer, int edge, float percent); static native void jni_YGNodeStyleSetMarginAuto(long nativePointer, int edge); - static native Object jni_YGNodeStyleGetPadding(long nativePointer, int edge); + static native long jni_YGNodeStyleGetPadding(long nativePointer, int edge); static native void jni_YGNodeStyleSetPadding(long nativePointer, int edge, float padding); static native void jni_YGNodeStyleSetPaddingPercent(long nativePointer, int edge, float percent); static native float jni_YGNodeStyleGetBorder(long nativePointer, int edge); static native void jni_YGNodeStyleSetBorder(long nativePointer, int edge, float border); - static native Object jni_YGNodeStyleGetPosition(long nativePointer, int edge); + static native long jni_YGNodeStyleGetPosition(long nativePointer, int edge); static native void jni_YGNodeStyleSetPosition(long nativePointer, int edge, float position); static native void jni_YGNodeStyleSetPositionPercent(long nativePointer, int edge, float percent); - static native Object jni_YGNodeStyleGetWidth(long nativePointer); + static native long jni_YGNodeStyleGetWidth(long nativePointer); static native void jni_YGNodeStyleSetWidth(long nativePointer, float width); static native void jni_YGNodeStyleSetWidthPercent(long nativePointer, float percent); static native void jni_YGNodeStyleSetWidthAuto(long nativePointer); - static native Object jni_YGNodeStyleGetHeight(long nativePointer); + static native long jni_YGNodeStyleGetHeight(long nativePointer); static native void jni_YGNodeStyleSetHeight(long nativePointer, float height); static native void jni_YGNodeStyleSetHeightPercent(long nativePointer, float percent); static native void jni_YGNodeStyleSetHeightAuto(long nativePointer); - static native Object jni_YGNodeStyleGetMinWidth(long nativePointer); + static native long jni_YGNodeStyleGetMinWidth(long nativePointer); static native void jni_YGNodeStyleSetMinWidth(long nativePointer, float minWidth); static native void jni_YGNodeStyleSetMinWidthPercent(long nativePointer, float percent); - static native Object jni_YGNodeStyleGetMinHeight(long nativePointer); + static native long jni_YGNodeStyleGetMinHeight(long nativePointer); static native void jni_YGNodeStyleSetMinHeight(long nativePointer, float minHeight); static native void jni_YGNodeStyleSetMinHeightPercent(long nativePointer, float percent); - static native Object jni_YGNodeStyleGetMaxWidth(long nativePointer); + static native long jni_YGNodeStyleGetMaxWidth(long nativePointer); static native void jni_YGNodeStyleSetMaxWidth(long nativePointer, float maxWidth); static native void jni_YGNodeStyleSetMaxWidthPercent(long nativePointer, float percent); - static native Object jni_YGNodeStyleGetMaxHeight(long nativePointer); + static native long jni_YGNodeStyleGetMaxHeight(long nativePointer); static native void jni_YGNodeStyleSetMaxHeight(long nativePointer, float maxheight); static native void jni_YGNodeStyleSetMaxHeightPercent(long nativePointer, float percent); static native float jni_YGNodeStyleGetAspectRatio(long nativePointer); diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index 4ec53d80..4981ebd1 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -349,7 +349,7 @@ public abstract class YogaNodeJNIBase extends YogaNode { } public YogaValue getFlexBasis() { - return (YogaValue) YogaNative.jni_YGNodeStyleGetFlexBasis(mNativePointer); + return valueFromLong(YogaNative.jni_YGNodeStyleGetFlexBasis(mNativePointer)); } public void setFlexBasis(float flexBasis) { @@ -365,7 +365,7 @@ public abstract class YogaNodeJNIBase extends YogaNode { } public YogaValue getMargin(YogaEdge edge) { - return (YogaValue) YogaNative.jni_YGNodeStyleGetMargin(mNativePointer, edge.intValue()); + return valueFromLong(YogaNative.jni_YGNodeStyleGetMargin(mNativePointer, edge.intValue())); } public void setMargin(YogaEdge edge, float margin) { @@ -381,7 +381,7 @@ public abstract class YogaNodeJNIBase extends YogaNode { } public YogaValue getPadding(YogaEdge edge) { - return (YogaValue) YogaNative.jni_YGNodeStyleGetPadding(mNativePointer, edge.intValue()); + return valueFromLong(YogaNative.jni_YGNodeStyleGetPadding(mNativePointer, edge.intValue())); } public void setPadding(YogaEdge edge, float padding) { @@ -401,7 +401,7 @@ public abstract class YogaNodeJNIBase extends YogaNode { } public YogaValue getPosition(YogaEdge edge) { - return (YogaValue) YogaNative.jni_YGNodeStyleGetPosition(mNativePointer, edge.intValue()); + return valueFromLong(YogaNative.jni_YGNodeStyleGetPosition(mNativePointer, edge.intValue())); } public void setPosition(YogaEdge edge, float position) { @@ -413,7 +413,7 @@ public abstract class YogaNodeJNIBase extends YogaNode { } public YogaValue getWidth() { - return (YogaValue) YogaNative.jni_YGNodeStyleGetWidth(mNativePointer); + return valueFromLong(YogaNative.jni_YGNodeStyleGetWidth(mNativePointer)); } public void setWidth(float width) { @@ -429,7 +429,7 @@ public abstract class YogaNodeJNIBase extends YogaNode { } public YogaValue getHeight() { - return (YogaValue) YogaNative.jni_YGNodeStyleGetHeight(mNativePointer); + return valueFromLong(YogaNative.jni_YGNodeStyleGetHeight(mNativePointer)); } public void setHeight(float height) { @@ -445,7 +445,7 @@ public abstract class YogaNodeJNIBase extends YogaNode { } public YogaValue getMinWidth() { - return (YogaValue) YogaNative.jni_YGNodeStyleGetMinWidth(mNativePointer); + return valueFromLong(YogaNative.jni_YGNodeStyleGetMinWidth(mNativePointer)); } public void setMinWidth(float minWidth) { @@ -457,7 +457,7 @@ public abstract class YogaNodeJNIBase extends YogaNode { } public YogaValue getMinHeight() { - return (YogaValue) YogaNative.jni_YGNodeStyleGetMinHeight(mNativePointer); + return valueFromLong(YogaNative.jni_YGNodeStyleGetMinHeight(mNativePointer)); } public void setMinHeight(float minHeight) { @@ -469,7 +469,7 @@ public abstract class YogaNodeJNIBase extends YogaNode { } public YogaValue getMaxWidth() { - return (YogaValue) YogaNative.jni_YGNodeStyleGetMaxWidth(mNativePointer); + return valueFromLong(YogaNative.jni_YGNodeStyleGetMaxWidth(mNativePointer)); } public void setMaxWidth(float maxWidth) { @@ -481,7 +481,7 @@ public abstract class YogaNodeJNIBase extends YogaNode { } public YogaValue getMaxHeight() { - return (YogaValue) YogaNative.jni_YGNodeStyleGetMaxHeight(mNativePointer); + return valueFromLong(YogaNative.jni_YGNodeStyleGetMaxHeight(mNativePointer)); } public void setMaxHeight(float maxheight) { @@ -656,4 +656,8 @@ public abstract class YogaNodeJNIBase extends YogaNode { newNode.mOwner = this; return newNode.mNativePointer; } + + private static YogaValue valueFromLong(long raw) { + return new YogaValue(Float.intBitsToFloat((int) raw), (int) (raw >> 32)); + } } diff --git a/java/com/facebook/yoga/YogaValue.java b/java/com/facebook/yoga/YogaValue.java index 6f234609..9b012bfd 100644 --- a/java/com/facebook/yoga/YogaValue.java +++ b/java/com/facebook/yoga/YogaValue.java @@ -6,9 +6,6 @@ */ package com.facebook.yoga; -import com.facebook.proguard.annotations.DoNotStrip; - -@DoNotStrip public class YogaValue { static final YogaValue UNDEFINED = new YogaValue(YogaConstants.UNDEFINED, YogaUnit.UNDEFINED); static final YogaValue ZERO = new YogaValue(0, YogaUnit.POINT); @@ -22,7 +19,6 @@ public class YogaValue { this.unit = unit; } - @DoNotStrip YogaValue(float value, int unit) { this(value, YogaUnit.fromInt(unit)); } diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp index c001ce28..15e5635c 100644 --- a/java/jni/YGJNI.cpp +++ b/java/jni/YGJNI.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -128,6 +129,19 @@ public: } }; +struct YogaValue { + static constexpr jint NAN_BYTES = 0x7fc00000; + + static jlong asJavaLong(const YGValue& value) { + uint32_t valueBytes = 0; + memcpy(&valueBytes, &value.value, sizeof valueBytes); + return ((jlong) value.unit) << 32 | valueBytes; + } + constexpr static jlong undefinedAsJavaLong() { + return ((jlong) YGUnitUndefined) << 32 | NAN_BYTES; + } +}; + } // namespace static inline local_ref YGNodeJobject( @@ -472,9 +486,8 @@ void jni_YGNodeCopyStyle(jlong dstNativePointer, jlong srcNativePointer) { } #define YG_NODE_JNI_STYLE_UNIT_PROP(name) \ - local_ref jni_YGNodeStyleGet##name( \ - alias_ref, jlong nativePointer) { \ - return JYogaValue::create( \ + jlong jni_YGNodeStyleGet##name(alias_ref, jlong nativePointer) { \ + return YogaValue::asJavaLong( \ YGNodeStyleGet##name(_jlong2YGNodeRef(nativePointer))); \ } \ \ @@ -509,9 +522,9 @@ void jni_YGNodeCopyStyle(jlong dstNativePointer, jlong srcNativePointer) { } #define YG_NODE_JNI_STYLE_EDGE_UNIT_PROP(name) \ - local_ref jni_YGNodeStyleGet##name( \ + jlong jni_YGNodeStyleGet##name( \ alias_ref, jlong nativePointer, jint edge) { \ - return JYogaValue::create(YGNodeStyleGet##name( \ + return YogaValue::asJavaLong(YGNodeStyleGet##name( \ _jlong2YGNodeRef(nativePointer), static_cast(edge))); \ } \ \ @@ -841,15 +854,15 @@ jint jni_YGNodeGetInstanceCount() { return YGNodeGetInstanceCount(); } -local_ref jni_YGNodeStyleGetMargin( +jlong jni_YGNodeStyleGetMargin( alias_ref, jlong nativePointer, jint edge) { YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); if (!YGNodeEdges{yogaNodeRef}.has(YGNodeEdges::MARGIN)) { - return JYogaValue::create(YGValueUndefined); + return YogaValue::undefinedAsJavaLong(); } - return JYogaValue::create( + return YogaValue::asJavaLong( YGNodeStyleGetMargin(yogaNodeRef, static_cast(edge))); } @@ -876,15 +889,15 @@ void jni_YGNodeStyleSetMarginAuto(jlong nativePointer, jint edge) { YGNodeStyleSetMarginAuto(yogaNodeRef, static_cast(edge)); } -local_ref jni_YGNodeStyleGetPadding( +jlong jni_YGNodeStyleGetPadding( alias_ref, jlong nativePointer, jint edge) { YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); if (!YGNodeEdges{yogaNodeRef}.has(YGNodeEdges::PADDING)) { - return JYogaValue::create(YGValueUndefined); + return YogaValue::undefinedAsJavaLong(); } - return JYogaValue::create( + return YogaValue::asJavaLong( YGNodeStyleGetPadding(yogaNodeRef, static_cast(edge))); } diff --git a/java/jni/YGJTypes.h b/java/jni/YGJTypes.h index 53f606f7..c2c5fc51 100644 --- a/java/jni/YGJTypes.h +++ b/java/jni/YGJTypes.h @@ -28,11 +28,3 @@ struct JYogaLogger : public facebook::jni::JavaClass { facebook::jni::alias_ref, jstring); }; - -struct JYogaValue : public facebook::jni::JavaClass { - constexpr static auto kJavaDescriptor = "Lcom/facebook/yoga/YogaValue;"; - - static facebook::jni::local_ref create(YGValue value) { - return newInstance(value.value, static_cast(value.unit)); - } -}; diff --git a/java/tests/com/facebook/yoga/YogaNodeStylePropertiesTest.java b/java/tests/com/facebook/yoga/YogaNodeStylePropertiesTest.java index 75ad6730..7cfb82a2 100644 --- a/java/tests/com/facebook/yoga/YogaNodeStylePropertiesTest.java +++ b/java/tests/com/facebook/yoga/YogaNodeStylePropertiesTest.java @@ -1,9 +1,8 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. +/** + * Copyright (c) Facebook, Inc. and its affiliates. * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ package com.facebook.yoga; @@ -401,6 +400,21 @@ public class YogaNodeStylePropertiesTest { } } + @Test + public void testNegativeMarginAssignment() { + final YogaNode node = createNode(); + for (YogaEdge edge : YogaEdge.values()) { + node.setMargin(edge, -25); + assertEquals(new YogaValue(-25, YogaUnit.POINT), node.getMargin(edge)); + + node.setMarginPercent(edge, -5); + assertEquals(new YogaValue(-5, YogaUnit.PERCENT), node.getMargin(edge)); + + node.setMarginAuto(edge); + assertEquals(YogaValue.AUTO, node.getMargin(edge)); + } + } + @Test public void testMarginPointAffectsLayout() { final YogaNode node = style().margin(YogaEdge.TOP, 42).node(); From 62d8a911ff4332d12a4ca5287155e7b6e61de5fe Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Fri, 22 Mar 2019 10:31:18 -0700 Subject: [PATCH 007/347] Switch style getters to JNI fast calls Summary: @public After changing native methods to return `long` rather than `YogaValue`, we switch them to JNI fast calls, as there is no more interaction with the Java GC. Reviewed By: pasqualeanatriello Differential Revision: D14576815 fbshipit-source-id: b5a33caef7343ba1de3d9634a50dc82ab3148cc7 --- java/jni/YGJNI.cpp | 35 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp index 15e5635c..7f703c89 100644 --- a/java/jni/YGJNI.cpp +++ b/java/jni/YGJNI.cpp @@ -486,7 +486,7 @@ void jni_YGNodeCopyStyle(jlong dstNativePointer, jlong srcNativePointer) { } #define YG_NODE_JNI_STYLE_UNIT_PROP(name) \ - jlong jni_YGNodeStyleGet##name(alias_ref, jlong nativePointer) { \ + jlong jni_YGNodeStyleGet##name(jlong nativePointer) { \ return YogaValue::asJavaLong( \ YGNodeStyleGet##name(_jlong2YGNodeRef(nativePointer))); \ } \ @@ -522,8 +522,7 @@ void jni_YGNodeCopyStyle(jlong dstNativePointer, jlong srcNativePointer) { } #define YG_NODE_JNI_STYLE_EDGE_UNIT_PROP(name) \ - jlong jni_YGNodeStyleGet##name( \ - alias_ref, jlong nativePointer, jint edge) { \ + jlong jni_YGNodeStyleGet##name(jlong nativePointer, jint edge) { \ return YogaValue::asJavaLong(YGNodeStyleGet##name( \ _jlong2YGNodeRef(nativePointer), static_cast(edge))); \ } \ @@ -854,10 +853,7 @@ jint jni_YGNodeGetInstanceCount() { return YGNodeGetInstanceCount(); } -jlong jni_YGNodeStyleGetMargin( - alias_ref, - jlong nativePointer, - jint edge) { +jlong jni_YGNodeStyleGetMargin(jlong nativePointer, jint edge) { YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); if (!YGNodeEdges{yogaNodeRef}.has(YGNodeEdges::MARGIN)) { return YogaValue::undefinedAsJavaLong(); @@ -889,10 +885,7 @@ void jni_YGNodeStyleSetMarginAuto(jlong nativePointer, jint edge) { YGNodeStyleSetMarginAuto(yogaNodeRef, static_cast(edge)); } -jlong jni_YGNodeStyleGetPadding( - alias_ref, - jlong nativePointer, - jint edge) { +jlong jni_YGNodeStyleGetPadding(jlong nativePointer, jint edge) { YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); if (!YGNodeEdges{yogaNodeRef}.has(YGNodeEdges::PADDING)) { return YogaValue::undefinedAsJavaLong(); @@ -985,40 +978,40 @@ jint JNI_OnLoad(JavaVM* vm, void*) { YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexGrow), YGMakeCriticalNativeMethod(jni_YGNodeStyleGetFlexShrink), YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexShrink), - YGMakeNativeMethod(jni_YGNodeStyleGetFlexBasis), + YGMakeCriticalNativeMethod(jni_YGNodeStyleGetFlexBasis), YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexBasis), YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexBasisPercent), YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexBasisAuto), - YGMakeNativeMethod(jni_YGNodeStyleGetMargin), + YGMakeCriticalNativeMethod(jni_YGNodeStyleGetMargin), YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMargin), YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMarginPercent), YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMarginAuto), - YGMakeNativeMethod(jni_YGNodeStyleGetPadding), + YGMakeCriticalNativeMethod(jni_YGNodeStyleGetPadding), YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPadding), YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPaddingPercent), YGMakeCriticalNativeMethod(jni_YGNodeStyleGetBorder), YGMakeCriticalNativeMethod(jni_YGNodeStyleSetBorder), - YGMakeNativeMethod(jni_YGNodeStyleGetPosition), + YGMakeCriticalNativeMethod(jni_YGNodeStyleGetPosition), YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPosition), YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPositionPercent), - YGMakeNativeMethod(jni_YGNodeStyleGetWidth), + YGMakeCriticalNativeMethod(jni_YGNodeStyleGetWidth), YGMakeCriticalNativeMethod(jni_YGNodeStyleSetWidth), YGMakeCriticalNativeMethod(jni_YGNodeStyleSetWidthPercent), YGMakeCriticalNativeMethod(jni_YGNodeStyleSetWidthAuto), - YGMakeNativeMethod(jni_YGNodeStyleGetHeight), + YGMakeCriticalNativeMethod(jni_YGNodeStyleGetHeight), YGMakeCriticalNativeMethod(jni_YGNodeStyleSetHeight), YGMakeCriticalNativeMethod(jni_YGNodeStyleSetHeightPercent), YGMakeCriticalNativeMethod(jni_YGNodeStyleSetHeightAuto), - YGMakeNativeMethod(jni_YGNodeStyleGetMinWidth), + YGMakeCriticalNativeMethod(jni_YGNodeStyleGetMinWidth), YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMinWidth), YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMinWidthPercent), - YGMakeNativeMethod(jni_YGNodeStyleGetMinHeight), + YGMakeCriticalNativeMethod(jni_YGNodeStyleGetMinHeight), YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMinHeight), YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMinHeightPercent), - YGMakeNativeMethod(jni_YGNodeStyleGetMaxWidth), + YGMakeCriticalNativeMethod(jni_YGNodeStyleGetMaxWidth), YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMaxWidth), YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMaxWidthPercent), - YGMakeNativeMethod(jni_YGNodeStyleGetMaxHeight), + YGMakeCriticalNativeMethod(jni_YGNodeStyleGetMaxHeight), YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMaxHeight), YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMaxHeightPercent), YGMakeCriticalNativeMethod(jni_YGNodeStyleGetAspectRatio), From 7d7b7b9e187a6f5d8a970baf89940615c235c41a Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Fri, 22 Mar 2019 11:43:08 -0700 Subject: [PATCH 008/347] Sample workspace: remove XML comment Summary: @public Xcode does not like it Reviewed By: astreet Differential Revision: D14580168 fbshipit-source-id: 6d26b3961b45a59ef9dc977b21493e60e3cf9396 --- .../project.xcworkspace/contents.xcworkspacedata | 7 ------- 1 file changed, 7 deletions(-) diff --git a/YogaKit/YogaKitSample/YogaKitSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/YogaKit/YogaKitSample/YogaKitSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata index cee8ad8b..b8f12e0b 100644 --- a/YogaKit/YogaKitSample/YogaKitSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/YogaKit/YogaKitSample/YogaKitSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -1,10 +1,3 @@ - - From 85352c4e45f1a2950ada532e572ebd4b2c4b293c Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Mon, 25 Mar 2019 05:37:36 -0700 Subject: [PATCH 009/347] Automatic lint fixes Summary: @public A round of automatic lint fixes. Reviewed By: SidharthGuglani Differential Revision: D14590396 fbshipit-source-id: f0b4a0ce503a1d9d46ea7ae788f9f2eac09c2ac7 --- .../samples/yoga/BenchmarkActivity.java | 8 +- .../samples/yoga/BenchmarkAggregator.java | 8 +- .../samples/yoga/BenchmarkFragment.java | 8 +- .../samples/yoga/BenchmarkInflate.java | 8 +- .../samples/yoga/BenchmarkLayout.java | 8 +- .../samples/yoga/BenchmarkMeasure.java | 8 +- .../facebook/samples/yoga/MainActivity.java | 8 +- .../yoga/android/VirtualYogaLayout.java | 5 +- .../com/facebook/yoga/android/YogaLayout.java | 5 +- .../yoga/android/YogaViewLayoutFactory.java | 5 +- .../proguard/annotations/DoNotStrip.java | 5 +- .../facebook/yoga/TestParametrization.java | 9 +- .../facebook/yoga/YGAbsolutePositionTest.java | 5 +- .../facebook/yoga/YGAlignBaselineTest.java | 4 +- .../com/facebook/yoga/YGAlignContentTest.java | 5 +- .../com/facebook/yoga/YGAlignItemsTest.java | 5 +- .../com/facebook/yoga/YGAlignSelfTest.java | 5 +- .../com/facebook/yoga/YGAndroidNewsFeed.java | 5 +- .../tests/com/facebook/yoga/YGBorderTest.java | 5 +- .../com/facebook/yoga/YGDimensionTest.java | 5 +- .../com/facebook/yoga/YGDisplayTest.java | 5 +- .../facebook/yoga/YGFlexDirectionTest.java | 5 +- java/tests/com/facebook/yoga/YGFlexTest.java | 4 +- .../com/facebook/yoga/YGFlexWrapTest.java | 5 +- .../facebook/yoga/YGJustifyContentTest.java | 4 +- .../tests/com/facebook/yoga/YGMarginTest.java | 5 +- .../facebook/yoga/YGMinMaxDimensionTest.java | 5 +- .../com/facebook/yoga/YGPaddingTest.java | 5 +- .../com/facebook/yoga/YGPercentageTest.java | 5 +- .../com/facebook/yoga/YGRoundingTest.java | 5 +- .../com/facebook/yoga/YGSizeOverflowTest.java | 5 +- .../com/facebook/yoga/YogaLoggerTest.java | 5 +- .../com/facebook/yoga/YogaValueTest.java | 5 +- javascript/sources/Config.cc | 39 +- javascript/sources/Config.hh | 49 +- javascript/sources/Layout.hh | 27 +- javascript/sources/Node.cc | 536 ++++++++---------- javascript/sources/Node.hh | 265 ++++----- javascript/sources/Size.hh | 31 +- javascript/sources/Value.hh | 38 +- javascript/sources/global.cc | 5 +- javascript/sources/global.hh | 5 +- javascript/sources/nbind.cc | 218 ++++--- tests/CompactValueTest.cpp | 4 +- tests/YGAbsolutePositionTest.cpp | 23 +- tests/YGAlignBaselineTest.cpp | 6 +- tests/YGAlignContentTest.cpp | 3 +- tests/YGAspectRatioTest.cpp | 11 +- tests/YGBaselineFuncTest.cpp | 2 +- tests/YGDefaultValuesTest.cpp | 6 +- tests/YGDirtiedTest.cpp | 2 +- tests/YGFlexDirectionTest.cpp | 3 +- tests/YGHadOverflowTest.cpp | 8 +- tests/YGInfiniteHeightTest.cpp | 3 +- tests/YGLoggerTest.cpp | 63 +- tests/YGMeasureCacheTest.cpp | 62 +- tests/YGMeasureModeTest.cpp | 47 +- tests/YGMinMaxDimensionTest.cpp | 3 +- tests/YGPercentageTest.cpp | 4 +- tests/YGRelayoutTest.cpp | 3 +- tests/YGRoundingFunctionTest.cpp | 3 +- tests/YGRoundingMeasureFuncTest.cpp | 46 +- tests/YGSizeOverflowTest.cpp | 3 +- tests/YGTraversalTest.cpp | 17 +- tests/YGTreeMutationTest.cpp | 27 +- yoga/log.cpp | 1 - 66 files changed, 833 insertions(+), 917 deletions(-) diff --git a/android/sample/java/com/facebook/samples/yoga/BenchmarkActivity.java b/android/sample/java/com/facebook/samples/yoga/BenchmarkActivity.java index ba09f51b..03f96d2b 100644 --- a/android/sample/java/com/facebook/samples/yoga/BenchmarkActivity.java +++ b/android/sample/java/com/facebook/samples/yoga/BenchmarkActivity.java @@ -1,5 +1,9 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ package com.facebook.samples.yoga; import android.content.Intent; diff --git a/android/sample/java/com/facebook/samples/yoga/BenchmarkAggregator.java b/android/sample/java/com/facebook/samples/yoga/BenchmarkAggregator.java index 2fc57896..35a77342 100644 --- a/android/sample/java/com/facebook/samples/yoga/BenchmarkAggregator.java +++ b/android/sample/java/com/facebook/samples/yoga/BenchmarkAggregator.java @@ -1,5 +1,9 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ package com.facebook.samples.yoga; import java.io.File; diff --git a/android/sample/java/com/facebook/samples/yoga/BenchmarkFragment.java b/android/sample/java/com/facebook/samples/yoga/BenchmarkFragment.java index bc692290..5c4698a0 100644 --- a/android/sample/java/com/facebook/samples/yoga/BenchmarkFragment.java +++ b/android/sample/java/com/facebook/samples/yoga/BenchmarkFragment.java @@ -1,5 +1,9 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ package com.facebook.samples.yoga; diff --git a/android/sample/java/com/facebook/samples/yoga/BenchmarkInflate.java b/android/sample/java/com/facebook/samples/yoga/BenchmarkInflate.java index b3a24474..5eb413ae 100644 --- a/android/sample/java/com/facebook/samples/yoga/BenchmarkInflate.java +++ b/android/sample/java/com/facebook/samples/yoga/BenchmarkInflate.java @@ -1,5 +1,9 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ package com.facebook.samples.yoga; import android.os.Bundle; diff --git a/android/sample/java/com/facebook/samples/yoga/BenchmarkLayout.java b/android/sample/java/com/facebook/samples/yoga/BenchmarkLayout.java index 8fdcdb64..72cd6ba5 100644 --- a/android/sample/java/com/facebook/samples/yoga/BenchmarkLayout.java +++ b/android/sample/java/com/facebook/samples/yoga/BenchmarkLayout.java @@ -1,5 +1,9 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ package com.facebook.samples.yoga; import android.os.Bundle; diff --git a/android/sample/java/com/facebook/samples/yoga/BenchmarkMeasure.java b/android/sample/java/com/facebook/samples/yoga/BenchmarkMeasure.java index 51151878..3ed670ee 100644 --- a/android/sample/java/com/facebook/samples/yoga/BenchmarkMeasure.java +++ b/android/sample/java/com/facebook/samples/yoga/BenchmarkMeasure.java @@ -1,5 +1,9 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ package com.facebook.samples.yoga; import android.os.Bundle; diff --git a/android/sample/java/com/facebook/samples/yoga/MainActivity.java b/android/sample/java/com/facebook/samples/yoga/MainActivity.java index 2410ca95..68606105 100644 --- a/android/sample/java/com/facebook/samples/yoga/MainActivity.java +++ b/android/sample/java/com/facebook/samples/yoga/MainActivity.java @@ -1,11 +1,9 @@ /** - * Copyright 2014-present, Facebook, Inc. - * All rights reserved. + * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the license found in the - * LICENSE-examples file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - package com.facebook.samples.yoga; import android.content.Intent; diff --git a/android/src/main/java/com/facebook/yoga/android/VirtualYogaLayout.java b/android/src/main/java/com/facebook/yoga/android/VirtualYogaLayout.java index 8bb188e2..c6b87e5e 100644 --- a/android/src/main/java/com/facebook/yoga/android/VirtualYogaLayout.java +++ b/android/src/main/java/com/facebook/yoga/android/VirtualYogaLayout.java @@ -1,10 +1,9 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - package com.facebook.yoga.android; import java.util.HashMap; diff --git a/android/src/main/java/com/facebook/yoga/android/YogaLayout.java b/android/src/main/java/com/facebook/yoga/android/YogaLayout.java index 352a0ed3..92e2c86c 100644 --- a/android/src/main/java/com/facebook/yoga/android/YogaLayout.java +++ b/android/src/main/java/com/facebook/yoga/android/YogaLayout.java @@ -1,10 +1,9 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - package com.facebook.yoga.android; import android.content.Context; diff --git a/android/src/main/java/com/facebook/yoga/android/YogaViewLayoutFactory.java b/android/src/main/java/com/facebook/yoga/android/YogaViewLayoutFactory.java index c8698d0d..ee4e09c8 100644 --- a/android/src/main/java/com/facebook/yoga/android/YogaViewLayoutFactory.java +++ b/android/src/main/java/com/facebook/yoga/android/YogaViewLayoutFactory.java @@ -1,10 +1,9 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - package com.facebook.yoga.android; import android.content.Context; diff --git a/java/proguard-annotations/src/main/java/com/facebook/proguard/annotations/DoNotStrip.java b/java/proguard-annotations/src/main/java/com/facebook/proguard/annotations/DoNotStrip.java index 90be72b8..519fca34 100644 --- a/java/proguard-annotations/src/main/java/com/facebook/proguard/annotations/DoNotStrip.java +++ b/java/proguard-annotations/src/main/java/com/facebook/proguard/annotations/DoNotStrip.java @@ -1,10 +1,9 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - package com.facebook.proguard.annotations; import java.lang.annotation.ElementType; diff --git a/java/tests/com/facebook/yoga/TestParametrization.java b/java/tests/com/facebook/yoga/TestParametrization.java index 53c49fbe..0ae47233 100644 --- a/java/tests/com/facebook/yoga/TestParametrization.java +++ b/java/tests/com/facebook/yoga/TestParametrization.java @@ -1,9 +1,8 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. +/** + * Copyright (c) Facebook, Inc. and its affiliates. * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGAbsolutePositionTest.java b/java/tests/com/facebook/yoga/YGAbsolutePositionTest.java index 92db607c..b3523e10 100644 --- a/java/tests/com/facebook/yoga/YGAbsolutePositionTest.java +++ b/java/tests/com/facebook/yoga/YGAbsolutePositionTest.java @@ -1,10 +1,9 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGAbsolutePositionTest.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGAlignBaselineTest.java b/java/tests/com/facebook/yoga/YGAlignBaselineTest.java index 46258b41..893d130b 100644 --- a/java/tests/com/facebook/yoga/YGAlignBaselineTest.java +++ b/java/tests/com/facebook/yoga/YGAlignBaselineTest.java @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGAlignContentTest.java b/java/tests/com/facebook/yoga/YGAlignContentTest.java index 5609ae23..bdc2c60d 100644 --- a/java/tests/com/facebook/yoga/YGAlignContentTest.java +++ b/java/tests/com/facebook/yoga/YGAlignContentTest.java @@ -1,10 +1,9 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignContentTest.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGAlignItemsTest.java b/java/tests/com/facebook/yoga/YGAlignItemsTest.java index 5bbe7795..f5127150 100644 --- a/java/tests/com/facebook/yoga/YGAlignItemsTest.java +++ b/java/tests/com/facebook/yoga/YGAlignItemsTest.java @@ -1,10 +1,9 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignItemsTest.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGAlignSelfTest.java b/java/tests/com/facebook/yoga/YGAlignSelfTest.java index d4ebbc66..c73ee981 100644 --- a/java/tests/com/facebook/yoga/YGAlignSelfTest.java +++ b/java/tests/com/facebook/yoga/YGAlignSelfTest.java @@ -1,10 +1,9 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignSelfTest.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGAndroidNewsFeed.java b/java/tests/com/facebook/yoga/YGAndroidNewsFeed.java index d4a8d3af..687518a2 100644 --- a/java/tests/com/facebook/yoga/YGAndroidNewsFeed.java +++ b/java/tests/com/facebook/yoga/YGAndroidNewsFeed.java @@ -1,10 +1,9 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGAndroidNewsFeed.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGBorderTest.java b/java/tests/com/facebook/yoga/YGBorderTest.java index d0f0ba2e..8c76ae0d 100644 --- a/java/tests/com/facebook/yoga/YGBorderTest.java +++ b/java/tests/com/facebook/yoga/YGBorderTest.java @@ -1,10 +1,9 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGBorderTest.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGDimensionTest.java b/java/tests/com/facebook/yoga/YGDimensionTest.java index 629870e8..36f6dafd 100644 --- a/java/tests/com/facebook/yoga/YGDimensionTest.java +++ b/java/tests/com/facebook/yoga/YGDimensionTest.java @@ -1,10 +1,9 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGDimensionTest.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGDisplayTest.java b/java/tests/com/facebook/yoga/YGDisplayTest.java index c991d37d..0671d28e 100644 --- a/java/tests/com/facebook/yoga/YGDisplayTest.java +++ b/java/tests/com/facebook/yoga/YGDisplayTest.java @@ -1,10 +1,9 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGDisplayTest.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGFlexDirectionTest.java b/java/tests/com/facebook/yoga/YGFlexDirectionTest.java index 489916a4..1299a48e 100644 --- a/java/tests/com/facebook/yoga/YGFlexDirectionTest.java +++ b/java/tests/com/facebook/yoga/YGFlexDirectionTest.java @@ -1,10 +1,9 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexDirectionTest.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGFlexTest.java b/java/tests/com/facebook/yoga/YGFlexTest.java index 5ebc8abf..e7a5f33b 100644 --- a/java/tests/com/facebook/yoga/YGFlexTest.java +++ b/java/tests/com/facebook/yoga/YGFlexTest.java @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexTest.html diff --git a/java/tests/com/facebook/yoga/YGFlexWrapTest.java b/java/tests/com/facebook/yoga/YGFlexWrapTest.java index 6528714d..3f46dffd 100644 --- a/java/tests/com/facebook/yoga/YGFlexWrapTest.java +++ b/java/tests/com/facebook/yoga/YGFlexWrapTest.java @@ -1,10 +1,9 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexWrapTest.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGJustifyContentTest.java b/java/tests/com/facebook/yoga/YGJustifyContentTest.java index 1f7442c8..070aa32f 100644 --- a/java/tests/com/facebook/yoga/YGJustifyContentTest.java +++ b/java/tests/com/facebook/yoga/YGJustifyContentTest.java @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGJustifyContentTest.html diff --git a/java/tests/com/facebook/yoga/YGMarginTest.java b/java/tests/com/facebook/yoga/YGMarginTest.java index 3c62d3d6..2795aa33 100644 --- a/java/tests/com/facebook/yoga/YGMarginTest.java +++ b/java/tests/com/facebook/yoga/YGMarginTest.java @@ -1,10 +1,9 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGMarginTest.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGMinMaxDimensionTest.java b/java/tests/com/facebook/yoga/YGMinMaxDimensionTest.java index 60945034..c7039311 100644 --- a/java/tests/com/facebook/yoga/YGMinMaxDimensionTest.java +++ b/java/tests/com/facebook/yoga/YGMinMaxDimensionTest.java @@ -1,10 +1,9 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGMinMaxDimensionTest.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGPaddingTest.java b/java/tests/com/facebook/yoga/YGPaddingTest.java index 3679d4a2..aa9ad398 100644 --- a/java/tests/com/facebook/yoga/YGPaddingTest.java +++ b/java/tests/com/facebook/yoga/YGPaddingTest.java @@ -1,10 +1,9 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGPaddingTest.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGPercentageTest.java b/java/tests/com/facebook/yoga/YGPercentageTest.java index a433fac6..88aa947e 100644 --- a/java/tests/com/facebook/yoga/YGPercentageTest.java +++ b/java/tests/com/facebook/yoga/YGPercentageTest.java @@ -1,10 +1,9 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGPercentageTest.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGRoundingTest.java b/java/tests/com/facebook/yoga/YGRoundingTest.java index 64b8a124..2b23f9e4 100644 --- a/java/tests/com/facebook/yoga/YGRoundingTest.java +++ b/java/tests/com/facebook/yoga/YGRoundingTest.java @@ -1,10 +1,9 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGRoundingTest.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGSizeOverflowTest.java b/java/tests/com/facebook/yoga/YGSizeOverflowTest.java index 804282b7..ce342bbb 100644 --- a/java/tests/com/facebook/yoga/YGSizeOverflowTest.java +++ b/java/tests/com/facebook/yoga/YGSizeOverflowTest.java @@ -1,10 +1,9 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGSizeOverflowTest.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YogaLoggerTest.java b/java/tests/com/facebook/yoga/YogaLoggerTest.java index b6b9885e..3350d970 100644 --- a/java/tests/com/facebook/yoga/YogaLoggerTest.java +++ b/java/tests/com/facebook/yoga/YogaLoggerTest.java @@ -1,10 +1,9 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - package com.facebook.yoga; import org.junit.Test; diff --git a/java/tests/com/facebook/yoga/YogaValueTest.java b/java/tests/com/facebook/yoga/YogaValueTest.java index 9f17a892..fa09c504 100644 --- a/java/tests/com/facebook/yoga/YogaValueTest.java +++ b/java/tests/com/facebook/yoga/YogaValueTest.java @@ -1,10 +1,9 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - package com.facebook.yoga; import org.junit.Test; diff --git a/javascript/sources/Config.cc b/javascript/sources/Config.cc index 60e5bafc..675ccfe0 100644 --- a/javascript/sources/Config.cc +++ b/javascript/sources/Config.cc @@ -8,37 +8,30 @@ #include "./Config.hh" -/* static */ Config * Config::create(void) -{ - return new Config(); +/* static */ Config* Config::create(void) { + return new Config(); } -/* static */ void Config::destroy(Config * node) -{ - delete node; +/* static */ void Config::destroy(Config* node) { + delete node; } -Config::Config(void) -: m_config(YGConfigNew()) -{ +Config::Config(void) : m_config(YGConfigNew()) {} + +Config::~Config(void) { + YGConfigFree(m_config); } -Config::~Config(void) -{ - YGConfigFree(m_config); +void Config::setExperimentalFeatureEnabled(int feature, bool enabled) { + YGConfigSetExperimentalFeatureEnabled( + m_config, static_cast(feature), enabled); } -void Config::setExperimentalFeatureEnabled(int feature, bool enabled) -{ - YGConfigSetExperimentalFeatureEnabled(m_config, static_cast(feature), enabled); +void Config::setPointScaleFactor(float pixelsInPoint) { + YGConfigSetPointScaleFactor(m_config, pixelsInPoint); } -void Config::setPointScaleFactor(float pixelsInPoint) -{ - YGConfigSetPointScaleFactor(m_config, pixelsInPoint); -} - -bool Config::isExperimentalFeatureEnabled(int feature) const -{ - return YGConfigIsExperimentalFeatureEnabled(m_config, static_cast(feature)); +bool Config::isExperimentalFeatureEnabled(int feature) const { + return YGConfigIsExperimentalFeatureEnabled( + m_config, static_cast(feature)); } diff --git a/javascript/sources/Config.hh b/javascript/sources/Config.hh index e8519719..a1b75131 100644 --- a/javascript/sources/Config.hh +++ b/javascript/sources/Config.hh @@ -1,10 +1,9 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - #pragma once #include @@ -13,39 +12,31 @@ class Config { - friend class Node; + friend class Node; - public: +public: + static Config* create(void); - static Config * create(void); + static void destroy(Config* config); - static void destroy(Config * config); +private: + Config(void); - private: +public: + ~Config(void); - Config(void); +public: // Prevent accidental copy + Config(Config const&) = delete; - public: + Config const& operator=(Config const&) = delete; - ~Config(void); +public: // Setters + void setExperimentalFeatureEnabled(int feature, bool enabled); + void setPointScaleFactor(float pixelsInPoint); - public: // Prevent accidental copy - - Config(Config const &) = delete; - - Config const & operator=(Config const &) = delete; - - public: // Setters - - void setExperimentalFeatureEnabled(int feature, bool enabled); - void setPointScaleFactor(float pixelsInPoint); - - public: // Getters - - bool isExperimentalFeatureEnabled(int feature) const; - - private: - - YGConfigRef m_config; +public: // Getters + bool isExperimentalFeatureEnabled(int feature) const; +private: + YGConfigRef m_config; }; diff --git a/javascript/sources/Layout.hh b/javascript/sources/Layout.hh index 5cd135b3..c222236d 100644 --- a/javascript/sources/Layout.hh +++ b/javascript/sources/Layout.hh @@ -1,28 +1,25 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - #pragma once #include #include -struct Layout -{ - double left; - double right; +struct Layout { + double left; + double right; - double top; - double bottom; + double top; + double bottom; - double width; - double height; + double width; + double height; - void toJS(nbind::cbOutput expose) const - { - expose(left, right, top, bottom, width, height); - } + void toJS(nbind::cbOutput expose) const { + expose(left, right, top, bottom, width, height); + } }; diff --git a/javascript/sources/Node.cc b/javascript/sources/Node.cc index 748a6cd0..f49c2279 100644 --- a/javascript/sources/Node.cc +++ b/javascript/sources/Node.cc @@ -13,521 +13,445 @@ #include "./Size.hh" #include "./Config.hh" -static YGSize globalMeasureFunc(YGNodeRef nodeRef, float width, YGMeasureMode widthMode, float height, YGMeasureMode heightMode) -{ - Node const & node = *reinterpret_cast(YGNodeGetContext(nodeRef)); +static YGSize globalMeasureFunc( + YGNodeRef nodeRef, + float width, + YGMeasureMode widthMode, + float height, + YGMeasureMode heightMode) { + Node const& node = *reinterpret_cast(YGNodeGetContext(nodeRef)); - Size size = node.callMeasureFunc(width, widthMode, height, heightMode); - YGSize ygSize = { static_cast(size.width), static_cast(size.height) }; + Size size = node.callMeasureFunc(width, widthMode, height, heightMode); + YGSize ygSize = {static_cast(size.width), + static_cast(size.height)}; - return ygSize; + return ygSize; } -static void globalDirtiedFunc(YGNodeRef nodeRef) -{ - Node const & node = *reinterpret_cast(YGNodeGetContext(nodeRef)); +static void globalDirtiedFunc(YGNodeRef nodeRef) { + Node const& node = *reinterpret_cast(YGNodeGetContext(nodeRef)); - node.callDirtiedFunc(); + node.callDirtiedFunc(); } -/* static */ Node * Node::createDefault(void) -{ - return new Node(nullptr); +/* static */ Node* Node::createDefault(void) { + return new Node(nullptr); } -/* static */ Node * Node::createWithConfig(Config * config) -{ - return new Node(config); +/* static */ Node* Node::createWithConfig(Config* config) { + return new Node(config); } -/* static */ void Node::destroy(Node * node) -{ - delete node; +/* static */ void Node::destroy(Node* node) { + delete node; } -/* static */ Node * Node::fromYGNode(YGNodeRef nodeRef) -{ - return reinterpret_cast(YGNodeGetContext(nodeRef)); +/* static */ Node* Node::fromYGNode(YGNodeRef nodeRef) { + return reinterpret_cast(YGNodeGetContext(nodeRef)); } -Node::Node(Config * config) -: m_node(config != nullptr ? YGNodeNewWithConfig(config->m_config) : YGNodeNew()) -, m_measureFunc(nullptr) -, m_dirtiedFunc(nullptr) -{ - YGNodeSetContext(m_node, reinterpret_cast(this)); +Node::Node(Config* config) + : m_node( + config != nullptr ? YGNodeNewWithConfig(config->m_config) + : YGNodeNew()), + m_measureFunc(nullptr), + m_dirtiedFunc(nullptr) { + YGNodeSetContext(m_node, reinterpret_cast(this)); } -Node::~Node(void) -{ - YGNodeFree(m_node); +Node::~Node(void) { + YGNodeFree(m_node); } -void Node::reset(void) -{ - m_measureFunc.reset(nullptr); - m_dirtiedFunc.reset(nullptr); +void Node::reset(void) { + m_measureFunc.reset(nullptr); + m_dirtiedFunc.reset(nullptr); - YGNodeReset(m_node); + YGNodeReset(m_node); } -void Node::copyStyle(Node const & other) -{ - YGNodeCopyStyle(m_node, other.m_node); +void Node::copyStyle(Node const& other) { + YGNodeCopyStyle(m_node, other.m_node); } -void Node::setPositionType(int positionType) -{ - YGNodeStyleSetPositionType(m_node, static_cast(positionType)); +void Node::setPositionType(int positionType) { + YGNodeStyleSetPositionType(m_node, static_cast(positionType)); } -void Node::setPosition(int edge, double position) -{ - YGNodeStyleSetPosition(m_node, static_cast(edge), position); +void Node::setPosition(int edge, double position) { + YGNodeStyleSetPosition(m_node, static_cast(edge), position); } -void Node::setPositionPercent(int edge, double position) -{ - YGNodeStyleSetPositionPercent(m_node, static_cast(edge), position); +void Node::setPositionPercent(int edge, double position) { + YGNodeStyleSetPositionPercent(m_node, static_cast(edge), position); } -void Node::setAlignContent(int alignContent) -{ - YGNodeStyleSetAlignContent(m_node, static_cast(alignContent)); +void Node::setAlignContent(int alignContent) { + YGNodeStyleSetAlignContent(m_node, static_cast(alignContent)); } -void Node::setAlignItems(int alignItems) -{ - YGNodeStyleSetAlignItems(m_node, static_cast(alignItems)); +void Node::setAlignItems(int alignItems) { + YGNodeStyleSetAlignItems(m_node, static_cast(alignItems)); } -void Node::setAlignSelf(int alignSelf) -{ - YGNodeStyleSetAlignSelf(m_node, static_cast(alignSelf)); +void Node::setAlignSelf(int alignSelf) { + YGNodeStyleSetAlignSelf(m_node, static_cast(alignSelf)); } -void Node::setFlexDirection(int flexDirection) -{ - YGNodeStyleSetFlexDirection(m_node, static_cast(flexDirection)); +void Node::setFlexDirection(int flexDirection) { + YGNodeStyleSetFlexDirection( + m_node, static_cast(flexDirection)); } -void Node::setFlexWrap(int flexWrap) -{ - YGNodeStyleSetFlexWrap(m_node, static_cast(flexWrap)); +void Node::setFlexWrap(int flexWrap) { + YGNodeStyleSetFlexWrap(m_node, static_cast(flexWrap)); } -void Node::setJustifyContent(int justifyContent) -{ - YGNodeStyleSetJustifyContent(m_node, static_cast(justifyContent)); +void Node::setJustifyContent(int justifyContent) { + YGNodeStyleSetJustifyContent(m_node, static_cast(justifyContent)); } -void Node::setMargin(int edge, double margin) -{ - YGNodeStyleSetMargin(m_node, static_cast(edge), margin); +void Node::setMargin(int edge, double margin) { + YGNodeStyleSetMargin(m_node, static_cast(edge), margin); } -void Node::setMarginPercent(int edge, double margin) -{ - YGNodeStyleSetMarginPercent(m_node, static_cast(edge), margin); +void Node::setMarginPercent(int edge, double margin) { + YGNodeStyleSetMarginPercent(m_node, static_cast(edge), margin); } -void Node::setMarginAuto(int edge) -{ - YGNodeStyleSetMarginAuto(m_node, static_cast(edge)); +void Node::setMarginAuto(int edge) { + YGNodeStyleSetMarginAuto(m_node, static_cast(edge)); } -void Node::setOverflow(int overflow) -{ - YGNodeStyleSetOverflow(m_node, static_cast(overflow)); +void Node::setOverflow(int overflow) { + YGNodeStyleSetOverflow(m_node, static_cast(overflow)); } -void Node::setDisplay(int display) -{ - YGNodeStyleSetDisplay(m_node, static_cast(display)); +void Node::setDisplay(int display) { + YGNodeStyleSetDisplay(m_node, static_cast(display)); } -void Node::setFlex(double flex) -{ - YGNodeStyleSetFlex(m_node, flex); +void Node::setFlex(double flex) { + YGNodeStyleSetFlex(m_node, flex); } -void Node::setFlexBasis(double flexBasis) -{ - YGNodeStyleSetFlexBasis(m_node, flexBasis); +void Node::setFlexBasis(double flexBasis) { + YGNodeStyleSetFlexBasis(m_node, flexBasis); } -void Node::setFlexBasisPercent(double flexBasis) -{ - YGNodeStyleSetFlexBasisPercent(m_node, flexBasis); +void Node::setFlexBasisPercent(double flexBasis) { + YGNodeStyleSetFlexBasisPercent(m_node, flexBasis); } -void Node::setFlexGrow(double flexGrow) -{ - YGNodeStyleSetFlexGrow(m_node, flexGrow); +void Node::setFlexGrow(double flexGrow) { + YGNodeStyleSetFlexGrow(m_node, flexGrow); } -void Node::setFlexShrink(double flexShrink) -{ - YGNodeStyleSetFlexShrink(m_node, flexShrink); +void Node::setFlexShrink(double flexShrink) { + YGNodeStyleSetFlexShrink(m_node, flexShrink); } -void Node::setWidth(double width) -{ - YGNodeStyleSetWidth(m_node, width); +void Node::setWidth(double width) { + YGNodeStyleSetWidth(m_node, width); } -void Node::setWidthPercent(double width) -{ - YGNodeStyleSetWidthPercent(m_node, width); +void Node::setWidthPercent(double width) { + YGNodeStyleSetWidthPercent(m_node, width); } -void Node::setWidthAuto() -{ - YGNodeStyleSetWidthAuto(m_node); +void Node::setWidthAuto() { + YGNodeStyleSetWidthAuto(m_node); } -void Node::setHeight(double height) -{ - YGNodeStyleSetHeight(m_node, height); +void Node::setHeight(double height) { + YGNodeStyleSetHeight(m_node, height); } -void Node::setHeightPercent(double height) -{ - YGNodeStyleSetHeightPercent(m_node, height); +void Node::setHeightPercent(double height) { + YGNodeStyleSetHeightPercent(m_node, height); } -void Node::setHeightAuto() -{ - YGNodeStyleSetHeightAuto(m_node); +void Node::setHeightAuto() { + YGNodeStyleSetHeightAuto(m_node); } -void Node::setMinWidth(double minWidth) -{ - YGNodeStyleSetMinWidth(m_node, minWidth); +void Node::setMinWidth(double minWidth) { + YGNodeStyleSetMinWidth(m_node, minWidth); } -void Node::setMinWidthPercent(double minWidth) -{ - YGNodeStyleSetMinWidthPercent(m_node, minWidth); +void Node::setMinWidthPercent(double minWidth) { + YGNodeStyleSetMinWidthPercent(m_node, minWidth); } -void Node::setMinHeight(double minHeight) -{ - YGNodeStyleSetMinHeight(m_node, minHeight); +void Node::setMinHeight(double minHeight) { + YGNodeStyleSetMinHeight(m_node, minHeight); } -void Node::setMinHeightPercent(double minHeight) -{ - YGNodeStyleSetMinHeightPercent(m_node, minHeight); +void Node::setMinHeightPercent(double minHeight) { + YGNodeStyleSetMinHeightPercent(m_node, minHeight); } -void Node::setMaxWidth(double maxWidth) -{ - YGNodeStyleSetMaxWidth(m_node, maxWidth); +void Node::setMaxWidth(double maxWidth) { + YGNodeStyleSetMaxWidth(m_node, maxWidth); } -void Node::setMaxWidthPercent(double maxWidth) -{ - YGNodeStyleSetMaxWidthPercent(m_node, maxWidth); +void Node::setMaxWidthPercent(double maxWidth) { + YGNodeStyleSetMaxWidthPercent(m_node, maxWidth); } -void Node::setMaxHeight(double maxHeight) -{ - YGNodeStyleSetMaxHeight(m_node, maxHeight); +void Node::setMaxHeight(double maxHeight) { + YGNodeStyleSetMaxHeight(m_node, maxHeight); } -void Node::setMaxHeightPercent(double maxHeight) -{ - YGNodeStyleSetMaxHeightPercent(m_node, maxHeight); +void Node::setMaxHeightPercent(double maxHeight) { + YGNodeStyleSetMaxHeightPercent(m_node, maxHeight); } -void Node::setAspectRatio(double aspectRatio) -{ - YGNodeStyleSetAspectRatio(m_node, aspectRatio); +void Node::setAspectRatio(double aspectRatio) { + YGNodeStyleSetAspectRatio(m_node, aspectRatio); } -void Node::setBorder(int edge, double border) -{ - YGNodeStyleSetBorder(m_node, static_cast(edge), border); +void Node::setBorder(int edge, double border) { + YGNodeStyleSetBorder(m_node, static_cast(edge), border); } -void Node::setPadding(int edge, double padding) -{ - YGNodeStyleSetPadding(m_node, static_cast(edge), padding); +void Node::setPadding(int edge, double padding) { + YGNodeStyleSetPadding(m_node, static_cast(edge), padding); } -void Node::setPaddingPercent(int edge, double padding) -{ - YGNodeStyleSetPaddingPercent(m_node, static_cast(edge), padding); +void Node::setPaddingPercent(int edge, double padding) { + YGNodeStyleSetPaddingPercent(m_node, static_cast(edge), padding); } void Node::setIsReferenceBaseline(bool isReferenceBaseline) { YGNodeSetIsReferenceBaseline(m_node, isReferenceBaseline); } -int Node::getPositionType(void) const -{ - return YGNodeStyleGetPositionType(m_node); +int Node::getPositionType(void) const { + return YGNodeStyleGetPositionType(m_node); } -Value Node::getPosition(int edge) const -{ - return Value::fromYGValue(YGNodeStyleGetPosition(m_node, static_cast(edge))); +Value Node::getPosition(int edge) const { + return Value::fromYGValue( + YGNodeStyleGetPosition(m_node, static_cast(edge))); } -int Node::getAlignContent(void) const -{ - return YGNodeStyleGetAlignContent(m_node); +int Node::getAlignContent(void) const { + return YGNodeStyleGetAlignContent(m_node); } -int Node::getAlignItems(void) const -{ - return YGNodeStyleGetAlignItems(m_node); +int Node::getAlignItems(void) const { + return YGNodeStyleGetAlignItems(m_node); } -int Node::getAlignSelf(void) const -{ - return YGNodeStyleGetAlignSelf(m_node); +int Node::getAlignSelf(void) const { + return YGNodeStyleGetAlignSelf(m_node); } -int Node::getFlexDirection(void) const -{ - return YGNodeStyleGetFlexDirection(m_node); +int Node::getFlexDirection(void) const { + return YGNodeStyleGetFlexDirection(m_node); } -int Node::getFlexWrap(void) const -{ - return YGNodeStyleGetFlexWrap(m_node); +int Node::getFlexWrap(void) const { + return YGNodeStyleGetFlexWrap(m_node); } -int Node::getJustifyContent(void) const -{ - return YGNodeStyleGetJustifyContent(m_node); +int Node::getJustifyContent(void) const { + return YGNodeStyleGetJustifyContent(m_node); } -Value Node::getMargin(int edge) const -{ - return Value::fromYGValue(YGNodeStyleGetMargin(m_node, static_cast(edge))); +Value Node::getMargin(int edge) const { + return Value::fromYGValue( + YGNodeStyleGetMargin(m_node, static_cast(edge))); } -int Node::getOverflow(void) const -{ - return YGNodeStyleGetOverflow(m_node); +int Node::getOverflow(void) const { + return YGNodeStyleGetOverflow(m_node); } -int Node::getDisplay(void) const -{ - return YGNodeStyleGetDisplay(m_node); +int Node::getDisplay(void) const { + return YGNodeStyleGetDisplay(m_node); } -Value Node::getFlexBasis(void) const -{ - return Value::fromYGValue(YGNodeStyleGetFlexBasis(m_node)); +Value Node::getFlexBasis(void) const { + return Value::fromYGValue(YGNodeStyleGetFlexBasis(m_node)); } -double Node::getFlexGrow(void) const -{ - return YGNodeStyleGetFlexGrow(m_node); +double Node::getFlexGrow(void) const { + return YGNodeStyleGetFlexGrow(m_node); } -double Node::getFlexShrink(void) const -{ - return YGNodeStyleGetFlexShrink(m_node); +double Node::getFlexShrink(void) const { + return YGNodeStyleGetFlexShrink(m_node); } -Value Node::getWidth(void) const -{ - return Value::fromYGValue(YGNodeStyleGetWidth(m_node)); +Value Node::getWidth(void) const { + return Value::fromYGValue(YGNodeStyleGetWidth(m_node)); } -Value Node::getHeight(void) const -{ - return Value::fromYGValue(YGNodeStyleGetHeight(m_node)); +Value Node::getHeight(void) const { + return Value::fromYGValue(YGNodeStyleGetHeight(m_node)); } -Value Node::getMinWidth(void) const -{ - return Value::fromYGValue(YGNodeStyleGetMinWidth(m_node)); +Value Node::getMinWidth(void) const { + return Value::fromYGValue(YGNodeStyleGetMinWidth(m_node)); } -Value Node::getMinHeight(void) const -{ - return Value::fromYGValue(YGNodeStyleGetMinHeight(m_node)); +Value Node::getMinHeight(void) const { + return Value::fromYGValue(YGNodeStyleGetMinHeight(m_node)); } -Value Node::getMaxWidth(void) const -{ - return Value::fromYGValue(YGNodeStyleGetMaxWidth(m_node)); +Value Node::getMaxWidth(void) const { + return Value::fromYGValue(YGNodeStyleGetMaxWidth(m_node)); } -Value Node::getMaxHeight(void) const -{ - return Value::fromYGValue(YGNodeStyleGetMaxHeight(m_node)); +Value Node::getMaxHeight(void) const { + return Value::fromYGValue(YGNodeStyleGetMaxHeight(m_node)); } -double Node::getAspectRatio(void) const -{ - return YGNodeStyleGetAspectRatio(m_node); +double Node::getAspectRatio(void) const { + return YGNodeStyleGetAspectRatio(m_node); } -double Node::getBorder(int edge) const -{ - return YGNodeStyleGetBorder(m_node, static_cast(edge)); +double Node::getBorder(int edge) const { + return YGNodeStyleGetBorder(m_node, static_cast(edge)); } -Value Node::getPadding(int edge) const -{ - return Value::fromYGValue(YGNodeStyleGetPadding(m_node, static_cast(edge))); +Value Node::getPadding(int edge) const { + return Value::fromYGValue( + YGNodeStyleGetPadding(m_node, static_cast(edge))); } bool Node::isReferenceBaseline() { return YGNodeIsReferenceBaseline(m_node); } -void Node::insertChild(Node * child, unsigned index) -{ - YGNodeInsertChild(m_node, child->m_node, index); +void Node::insertChild(Node* child, unsigned index) { + YGNodeInsertChild(m_node, child->m_node, index); } -void Node::removeChild(Node * child) -{ - YGNodeRemoveChild(m_node, child->m_node); +void Node::removeChild(Node* child) { + YGNodeRemoveChild(m_node, child->m_node); } -unsigned Node::getChildCount(void) const -{ - return YGNodeGetChildCount(m_node); +unsigned Node::getChildCount(void) const { + return YGNodeGetChildCount(m_node); } -Node * Node::getParent(void) -{ - auto nodePtr = YGNodeGetParent(m_node); +Node* Node::getParent(void) { + auto nodePtr = YGNodeGetParent(m_node); - if (nodePtr == nullptr) - return nullptr; + if (nodePtr == nullptr) + return nullptr; - return Node::fromYGNode(nodePtr); + return Node::fromYGNode(nodePtr); } -Node * Node::getChild(unsigned index) -{ - auto nodePtr = YGNodeGetChild(m_node, index); +Node* Node::getChild(unsigned index) { + auto nodePtr = YGNodeGetChild(m_node, index); - if (nodePtr == nullptr) - return nullptr; + if (nodePtr == nullptr) + return nullptr; - return Node::fromYGNode(nodePtr); + return Node::fromYGNode(nodePtr); } -void Node::setMeasureFunc(nbind::cbFunction & measureFunc) -{ - m_measureFunc.reset(new nbind::cbFunction(measureFunc)); +void Node::setMeasureFunc(nbind::cbFunction& measureFunc) { + m_measureFunc.reset(new nbind::cbFunction(measureFunc)); - YGNodeSetMeasureFunc(m_node, &globalMeasureFunc); + YGNodeSetMeasureFunc(m_node, &globalMeasureFunc); } -void Node::unsetMeasureFunc(void) -{ - m_measureFunc.reset(nullptr); +void Node::unsetMeasureFunc(void) { + m_measureFunc.reset(nullptr); - YGNodeSetMeasureFunc(m_node, nullptr); + YGNodeSetMeasureFunc(m_node, nullptr); } -Size Node::callMeasureFunc(double width, int widthMode, double height, int heightMode) const -{ - return m_measureFunc->call(width, widthMode, height, heightMode); +Size Node::callMeasureFunc( + double width, + int widthMode, + double height, + int heightMode) const { + return m_measureFunc->call(width, widthMode, height, heightMode); } -void Node::setDirtiedFunc(nbind::cbFunction & dirtiedFunc) -{ - m_dirtiedFunc.reset(new nbind::cbFunction(dirtiedFunc)); +void Node::setDirtiedFunc(nbind::cbFunction& dirtiedFunc) { + m_dirtiedFunc.reset(new nbind::cbFunction(dirtiedFunc)); - YGNodeSetDirtiedFunc(m_node, &globalDirtiedFunc); + YGNodeSetDirtiedFunc(m_node, &globalDirtiedFunc); } void Node::unsetDirtiedFunc(void) { - m_dirtiedFunc.reset(nullptr); + m_dirtiedFunc.reset(nullptr); - YGNodeSetDirtiedFunc(m_node, nullptr); + YGNodeSetDirtiedFunc(m_node, nullptr); } -void Node::callDirtiedFunc(void) const -{ - m_dirtiedFunc->call(); +void Node::callDirtiedFunc(void) const { + m_dirtiedFunc->call(); } -void Node::markDirty(void) -{ - YGNodeMarkDirty(m_node); +void Node::markDirty(void) { + YGNodeMarkDirty(m_node); } -bool Node::isDirty(void) const -{ - return YGNodeIsDirty(m_node); +bool Node::isDirty(void) const { + return YGNodeIsDirty(m_node); } -void Node::calculateLayout(double width, double height, int direction) -{ - YGNodeCalculateLayout(m_node, width, height, static_cast(direction)); +void Node::calculateLayout(double width, double height, int direction) { + YGNodeCalculateLayout( + m_node, width, height, static_cast(direction)); } -double Node::getComputedLeft(void) const -{ - return YGNodeLayoutGetLeft(m_node); +double Node::getComputedLeft(void) const { + return YGNodeLayoutGetLeft(m_node); } -double Node::getComputedRight(void) const -{ - return YGNodeLayoutGetRight(m_node); +double Node::getComputedRight(void) const { + return YGNodeLayoutGetRight(m_node); } -double Node::getComputedTop(void) const -{ - return YGNodeLayoutGetTop(m_node); +double Node::getComputedTop(void) const { + return YGNodeLayoutGetTop(m_node); } -double Node::getComputedBottom(void) const -{ - return YGNodeLayoutGetBottom(m_node); +double Node::getComputedBottom(void) const { + return YGNodeLayoutGetBottom(m_node); } -double Node::getComputedWidth(void) const -{ - return YGNodeLayoutGetWidth(m_node); +double Node::getComputedWidth(void) const { + return YGNodeLayoutGetWidth(m_node); } -double Node::getComputedHeight(void) const -{ - return YGNodeLayoutGetHeight(m_node); +double Node::getComputedHeight(void) const { + return YGNodeLayoutGetHeight(m_node); } -Layout Node::getComputedLayout(void) const -{ - Layout layout; +Layout Node::getComputedLayout(void) const { + Layout layout; - layout.left = YGNodeLayoutGetLeft(m_node); - layout.right = YGNodeLayoutGetRight(m_node); + layout.left = YGNodeLayoutGetLeft(m_node); + layout.right = YGNodeLayoutGetRight(m_node); - layout.top = YGNodeLayoutGetTop(m_node); - layout.bottom = YGNodeLayoutGetBottom(m_node); + layout.top = YGNodeLayoutGetTop(m_node); + layout.bottom = YGNodeLayoutGetBottom(m_node); - layout.width = YGNodeLayoutGetWidth(m_node); - layout.height = YGNodeLayoutGetHeight(m_node); + layout.width = YGNodeLayoutGetWidth(m_node); + layout.height = YGNodeLayoutGetHeight(m_node); - return layout; + return layout; } -double Node::getComputedMargin(int edge) const -{ - return YGNodeLayoutGetMargin(m_node, static_cast(edge)); +double Node::getComputedMargin(int edge) const { + return YGNodeLayoutGetMargin(m_node, static_cast(edge)); } -double Node::getComputedBorder(int edge) const -{ - return YGNodeLayoutGetBorder(m_node, static_cast(edge)); +double Node::getComputedBorder(int edge) const { + return YGNodeLayoutGetBorder(m_node, static_cast(edge)); } -double Node::getComputedPadding(int edge) const -{ - return YGNodeLayoutGetPadding(m_node, static_cast(edge)); +double Node::getComputedPadding(int edge) const { + return YGNodeLayoutGetPadding(m_node, static_cast(edge)); } diff --git a/javascript/sources/Node.hh b/javascript/sources/Node.hh index a3114505..5bd7956b 100644 --- a/javascript/sources/Node.hh +++ b/javascript/sources/Node.hh @@ -1,10 +1,9 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - #pragma once #include @@ -20,188 +19,176 @@ class Node { - public: +public: + static Node* createDefault(void); + static Node* createWithConfig(Config* config); - static Node * createDefault(void); - static Node * createWithConfig(Config * config); + static void destroy(Node* node); - static void destroy(Node * node); +public: + static Node* fromYGNode(YGNodeRef nodeRef); - public: +private: + Node(Config* config); - static Node * fromYGNode(YGNodeRef nodeRef); +public: + ~Node(void); - private: +public: // Prevent accidental copy + Node(Node const&) = delete; - Node(Config * config); + Node const& operator=(Node const&) = delete; - public: +public: + void reset(void); - ~Node(void); +public: // Style setters + void copyStyle(Node const& other); - public: // Prevent accidental copy + void setPositionType(int positionType); + void setPosition(int edge, double position); + void setPositionPercent(int edge, double position); - Node(Node const &) = delete; + void setAlignContent(int alignContent); + void setAlignItems(int alignItems); + void setAlignSelf(int alignSelf); + void setFlexDirection(int flexDirection); + void setFlexWrap(int flexWrap); + void setJustifyContent(int justifyContent); - Node const & operator=(Node const &) = delete; + void setMargin(int edge, double margin); + void setMarginPercent(int edge, double margin); + void setMarginAuto(int edge); - public: + void setOverflow(int overflow); + void setDisplay(int display); - void reset(void); + void setFlex(double flex); + void setFlexBasis(double flexBasis); + void setFlexBasisPercent(double flexBasis); + void setFlexBasisAuto(); + void setFlexGrow(double flexGrow); + void setFlexShrink(double flexShrink); - public: // Style setters + void setWidth(double width); + void setWidthPercent(double width); + void setWidthAuto(); + void setHeight(double height); + void setHeightPercent(double height); + void setHeightAuto(); - void copyStyle(Node const & other); + void setMinWidth(double minWidth); + void setMinWidthPercent(double minWidth); + void setMinHeight(double minHeight); + void setMinHeightPercent(double minHeight); - void setPositionType(int positionType); - void setPosition(int edge, double position); - void setPositionPercent(int edge, double position); + void setMaxWidth(double maxWidth); + void setMaxWidthPercent(double maxWidth); + void setMaxHeight(double maxHeight); + void setMaxHeightPercent(double maxHeight); - void setAlignContent(int alignContent); - void setAlignItems(int alignItems); - void setAlignSelf(int alignSelf); - void setFlexDirection(int flexDirection); - void setFlexWrap(int flexWrap); - void setJustifyContent(int justifyContent); + void setAspectRatio(double aspectRatio); - void setMargin(int edge, double margin); - void setMarginPercent(int edge, double margin); - void setMarginAuto(int edge); + void setBorder(int edge, double border); - void setOverflow(int overflow); - void setDisplay(int display); + void setPadding(int edge, double padding); + void setPaddingPercent(int edge, double padding); - void setFlex(double flex); - void setFlexBasis(double flexBasis); - void setFlexBasisPercent(double flexBasis); - void setFlexBasisAuto(); - void setFlexGrow(double flexGrow); - void setFlexShrink(double flexShrink); +public: // Style getters + int getPositionType(void) const; + Value getPosition(int edge) const; - void setWidth(double width); - void setWidthPercent(double width); - void setWidthAuto(); - void setHeight(double height); - void setHeightPercent(double height); - void setHeightAuto(); + int getAlignContent(void) const; + int getAlignItems(void) const; + int getAlignSelf(void) const; + int getFlexDirection(void) const; + int getFlexWrap(void) const; + int getJustifyContent(void) const; - void setMinWidth(double minWidth); - void setMinWidthPercent(double minWidth); - void setMinHeight(double minHeight); - void setMinHeightPercent(double minHeight); + Value getMargin(int edge) const; - void setMaxWidth(double maxWidth); - void setMaxWidthPercent(double maxWidth); - void setMaxHeight(double maxHeight); - void setMaxHeightPercent(double maxHeight); + int getOverflow(void) const; + int getDisplay(void) const; - void setAspectRatio(double aspectRatio); + Value getFlexBasis(void) const; + double getFlexGrow(void) const; + double getFlexShrink(void) const; - void setBorder(int edge, double border); + Value getWidth(void) const; + Value getHeight(void) const; - void setPadding(int edge, double padding); - void setPaddingPercent(int edge, double padding); + Value getMinWidth(void) const; + Value getMinHeight(void) const; - public: // Style getters + Value getMaxWidth(void) const; + Value getMaxHeight(void) const; - int getPositionType(void) const; - Value getPosition(int edge) const; + double getAspectRatio(void) const; - int getAlignContent(void) const; - int getAlignItems(void) const; - int getAlignSelf(void) const; - int getFlexDirection(void) const; - int getFlexWrap(void) const; - int getJustifyContent(void) const; + double getBorder(int edge) const; - Value getMargin(int edge) const; + Value getPadding(int edge) const; - int getOverflow(void) const; - int getDisplay(void) const; +public: // Tree hierarchy mutators + void insertChild(Node* child, unsigned index); + void removeChild(Node* child); - Value getFlexBasis(void) const; - double getFlexGrow(void) const; - double getFlexShrink(void) const; +public: // Tree hierarchy inspectors + unsigned getChildCount(void) const; - Value getWidth(void) const; - Value getHeight(void) const; + // The following functions cannot be const because they could discard const + // qualifiers (ex: constNode->getChild(0)->getParent() wouldn't be const) - Value getMinWidth(void) const; - Value getMinHeight(void) const; + Node* getParent(void); + Node* getChild(unsigned index); - Value getMaxWidth(void) const; - Value getMaxHeight(void) const; +public: // Measure func mutators + void setMeasureFunc(nbind::cbFunction& measureFunc); + void unsetMeasureFunc(void); - double getAspectRatio(void) const; +public: // Measure func inspectors + Size callMeasureFunc( + double width, + int widthMode, + double height, + int heightMode) const; - double getBorder(int edge) const; +public: // Dirtied func mutators + void setDirtiedFunc(nbind::cbFunction& dirtiedFunc); + void unsetDirtiedFunc(void); - Value getPadding(int edge) const; +public: // Dirtied func inspectors + void callDirtiedFunc(void) const; - public: // Tree hierarchy mutators +public: // Dirtiness accessors + void markDirty(void); + bool isDirty(void) const; - void insertChild(Node * child, unsigned index); - void removeChild(Node * child); +public: // Layout mutators + void calculateLayout(double width, double height, int direction); - public: // Tree hierarchy inspectors +public: // Layout inspectors + double getComputedLeft(void) const; + double getComputedRight(void) const; - unsigned getChildCount(void) const; + double getComputedTop(void) const; + double getComputedBottom(void) const; - // The following functions cannot be const because they could discard const qualifiers (ex: constNode->getChild(0)->getParent() wouldn't be const) + double getComputedWidth(void) const; + double getComputedHeight(void) const; - Node * getParent(void); - Node * getChild(unsigned index); + Layout getComputedLayout(void) const; - public: // Measure func mutators + double getComputedMargin(int edge) const; + double getComputedBorder(int edge) const; + double getComputedPadding(int edge) const; - void setMeasureFunc(nbind::cbFunction & measureFunc); - void unsetMeasureFunc(void); +public: + void setIsReferenceBaseline(bool isReferenceBaseline); + bool isReferenceBaseline(); - public: // Measure func inspectors + YGNodeRef m_node; - Size callMeasureFunc(double width, int widthMode, double height, int heightMode) const; - - public: // Dirtied func mutators - - void setDirtiedFunc(nbind::cbFunction & dirtiedFunc); - void unsetDirtiedFunc(void); - - public: // Dirtied func inspectors - - void callDirtiedFunc(void) const; - - public: // Dirtiness accessors - - void markDirty(void); - bool isDirty(void) const; - - public: // Layout mutators - - void calculateLayout(double width, double height, int direction); - - public: // Layout inspectors - - double getComputedLeft(void) const; - double getComputedRight(void) const; - - double getComputedTop(void) const; - double getComputedBottom(void) const; - - double getComputedWidth(void) const; - double getComputedHeight(void) const; - - Layout getComputedLayout(void) const; - - double getComputedMargin(int edge) const; - double getComputedBorder(int edge) const; - double getComputedPadding(int edge) const; - - public: - void setIsReferenceBaseline(bool isReferenceBaseline); - bool isReferenceBaseline(); - - YGNodeRef m_node; - - std::unique_ptr m_measureFunc; - std::unique_ptr m_dirtiedFunc; + std::unique_ptr m_measureFunc; + std::unique_ptr m_dirtiedFunc; }; diff --git a/javascript/sources/Size.hh b/javascript/sources/Size.hh index b6ac6999..2bcd28dd 100644 --- a/javascript/sources/Size.hh +++ b/javascript/sources/Size.hh @@ -1,34 +1,23 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - #pragma once #include #include -struct Size -{ - double width; - double height; +struct Size { + double width; + double height; - Size(void) - : width(0.0) - , height(0.0) - { - } + Size(void) : width(0.0), height(0.0) {} - Size(double width, double height) - : width(width) - , height(height) - { - } + Size(double width, double height) : width(width), height(height) {} - void toJS(nbind::cbOutput expose) const - { - expose(width, height); - } + void toJS(nbind::cbOutput expose) const { + expose(width, height); + } }; diff --git a/javascript/sources/Value.hh b/javascript/sources/Value.hh index a44cbbbe..9191dcf3 100644 --- a/javascript/sources/Value.hh +++ b/javascript/sources/Value.hh @@ -1,38 +1,26 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - #pragma once #include -struct Value -{ - static Value fromYGValue(YGValue const & ygValue) - { - return Value(static_cast(ygValue.unit), ygValue.value); - } +struct Value { + static Value fromYGValue(YGValue const& ygValue) { + return Value(static_cast(ygValue.unit), ygValue.value); + } - int unit; - double value; + int unit; + double value; - Value(void) - : unit(YGUnitUndefined) - , value(0.0) - { - } + Value(void) : unit(YGUnitUndefined), value(0.0) {} - Value(int unit, double value) - : unit(unit) - , value(value) - { - } + Value(int unit, double value) : unit(unit), value(value) {} - void toJS(nbind::cbOutput expose) const - { - expose(unit, value); - } + void toJS(nbind::cbOutput expose) const { + expose(unit, value); + } }; diff --git a/javascript/sources/global.cc b/javascript/sources/global.cc index 96096e83..ae8454ee 100644 --- a/javascript/sources/global.cc +++ b/javascript/sources/global.cc @@ -8,7 +8,6 @@ #include "./global.hh" -unsigned getInstanceCount(void) -{ - return YGNodeGetInstanceCount(); +unsigned getInstanceCount(void) { + return YGNodeGetInstanceCount(); } diff --git a/javascript/sources/global.hh b/javascript/sources/global.hh index e424be1a..15a21f2e 100644 --- a/javascript/sources/global.hh +++ b/javascript/sources/global.hh @@ -1,10 +1,9 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - #pragma once unsigned getInstanceCount(void); diff --git a/javascript/sources/nbind.cc b/javascript/sources/nbind.cc index 7f1aac0f..05f56fa9 100644 --- a/javascript/sources/nbind.cc +++ b/javascript/sources/nbind.cc @@ -15,166 +15,160 @@ #include -NBIND_GLOBAL() -{ - function(getInstanceCount); +NBIND_GLOBAL() { + function(getInstanceCount); } -NBIND_CLASS(Size) -{ - construct<>(); - construct(); +NBIND_CLASS(Size) { + construct<>(); + construct(); } -NBIND_CLASS(Layout) -{ - construct<>(); +NBIND_CLASS(Layout) { + construct<>(); } -NBIND_CLASS(Value) -{ - construct<>(); - construct(); +NBIND_CLASS(Value) { + construct<>(); + construct(); } -NBIND_CLASS(Config) -{ - method(create); +NBIND_CLASS(Config) { + method(create); - method(destroy); + method(destroy); - method(setExperimentalFeatureEnabled); - method(setPointScaleFactor); + method(setExperimentalFeatureEnabled); + method(setPointScaleFactor); - method(isExperimentalFeatureEnabled); + method(isExperimentalFeatureEnabled); } -NBIND_CLASS(Node) -{ - method(createDefault); - method(createWithConfig); - method(destroy); +NBIND_CLASS(Node) { + method(createDefault); + method(createWithConfig); + method(destroy); - method(reset); + method(reset); - method(copyStyle); + method(copyStyle); - method(setPositionType); - method(setPosition); - method(setPositionPercent); + method(setPositionType); + method(setPosition); + method(setPositionPercent); - method(setAlignContent); - method(setAlignItems); - method(setAlignSelf); - method(setFlexDirection); - method(setFlexWrap); - method(setJustifyContent); + method(setAlignContent); + method(setAlignItems); + method(setAlignSelf); + method(setFlexDirection); + method(setFlexWrap); + method(setJustifyContent); - method(setMargin); - method(setMarginPercent); - method(setMarginAuto); + method(setMargin); + method(setMarginPercent); + method(setMarginAuto); - method(setOverflow); - method(setDisplay); + method(setOverflow); + method(setDisplay); - method(setFlex); - method(setFlexBasis); - method(setFlexBasisPercent); - method(setFlexGrow); - method(setFlexShrink); + method(setFlex); + method(setFlexBasis); + method(setFlexBasisPercent); + method(setFlexGrow); + method(setFlexShrink); - method(setWidth); - method(setWidthPercent); - method(setWidthAuto); - method(setHeight); - method(setHeightPercent); - method(setHeightAuto); + method(setWidth); + method(setWidthPercent); + method(setWidthAuto); + method(setHeight); + method(setHeightPercent); + method(setHeightAuto); - method(setMinWidth); - method(setMinWidthPercent); - method(setMinHeight); - method(setMinHeightPercent); + method(setMinWidth); + method(setMinWidthPercent); + method(setMinHeight); + method(setMinHeightPercent); - method(setMaxWidth); - method(setMaxWidthPercent); - method(setMaxHeight); - method(setMaxHeightPercent); + method(setMaxWidth); + method(setMaxWidthPercent); + method(setMaxHeight); + method(setMaxHeightPercent); - method(setAspectRatio); + method(setAspectRatio); - method(setBorder); + method(setBorder); - method(setPadding); - method(setPaddingPercent); + method(setPadding); + method(setPaddingPercent); - method(getPositionType); - method(getPosition); + method(getPositionType); + method(getPosition); - method(getAlignContent); - method(getAlignItems); - method(getAlignSelf); - method(getFlexDirection); - method(getFlexWrap); - method(getJustifyContent); + method(getAlignContent); + method(getAlignItems); + method(getAlignSelf); + method(getFlexDirection); + method(getFlexWrap); + method(getJustifyContent); - method(getMargin); + method(getMargin); - method(getFlexBasis); - method(getFlexGrow); - method(getFlexShrink); + method(getFlexBasis); + method(getFlexGrow); + method(getFlexShrink); - method(getWidth); - method(getHeight); + method(getWidth); + method(getHeight); - method(getMinWidth); - method(getMinHeight); + method(getMinWidth); + method(getMinHeight); - method(getMaxWidth); - method(getMaxHeight); + method(getMaxWidth); + method(getMaxHeight); - method(getAspectRatio); + method(getAspectRatio); - method(getBorder); + method(getBorder); - method(getOverflow); - method(getDisplay); + method(getOverflow); + method(getDisplay); - method(getPadding); + method(getPadding); - method(insertChild); - method(removeChild); + method(insertChild); + method(removeChild); - method(getChildCount); + method(getChildCount); - method(getParent); - method(getChild); + method(getParent); + method(getChild); - method(isReferenceBaseline); - method(setIsReferenceBaseline); + method(isReferenceBaseline); + method(setIsReferenceBaseline); - method(setMeasureFunc); - method(unsetMeasureFunc); + method(setMeasureFunc); + method(unsetMeasureFunc); - method(setDirtiedFunc); - method(unsetDirtiedFunc); + method(setDirtiedFunc); + method(unsetDirtiedFunc); - method(markDirty); - method(isDirty); + method(markDirty); + method(isDirty); - method(calculateLayout); + method(calculateLayout); - method(getComputedLeft); - method(getComputedRight); + method(getComputedLeft); + method(getComputedRight); - method(getComputedTop); - method(getComputedBottom); + method(getComputedTop); + method(getComputedBottom); - method(getComputedWidth); - method(getComputedHeight); + method(getComputedWidth); + method(getComputedHeight); - method(getComputedLayout); + method(getComputedLayout); - method(getComputedMargin); - method(getComputedBorder); - method(getComputedPadding); + method(getComputedMargin); + method(getComputedBorder); + method(getComputedPadding); } diff --git a/tests/CompactValueTest.cpp b/tests/CompactValueTest.cpp index d0a2c669..0faf1fca 100644 --- a/tests/CompactValueTest.cpp +++ b/tests/CompactValueTest.cpp @@ -325,10 +325,10 @@ TEST(YogaTest, can_be_assigned_from_YGValue) { YGValue v{2.0f, YGUnitPercent}; c = v; - ASSERT_EQ((YGValue)c, v); + ASSERT_EQ((YGValue) c, v); c = YGValue{123, YGUnitPoint}; - ASSERT_EQ((YGValue)c, (YGValue{123, YGUnitPoint})); + ASSERT_EQ((YGValue) c, (YGValue{123, YGUnitPoint})); } TEST(YogaTest, compact_value_bound_representations) { diff --git a/tests/YGAbsolutePositionTest.cpp b/tests/YGAbsolutePositionTest.cpp index 1faf554f..6e76b454 100644 --- a/tests/YGAbsolutePositionTest.cpp +++ b/tests/YGAbsolutePositionTest.cpp @@ -4,7 +4,8 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ -// @Generated by gentest/gentest.rb from gentest/fixtures/YGAbsolutePositionTest.html +// @Generated by gentest/gentest.rb from +// gentest/fixtures/YGAbsolutePositionTest.html #include #include @@ -183,7 +184,9 @@ TEST(YogaTest, absolute_layout_width_height_start_top_end_bottom) { YGConfigFree(config); } -TEST(YogaTest, do_not_clamp_height_of_absolute_node_to_height_of_its_overflow_hidden_parent) { +TEST( + YogaTest, + do_not_clamp_height_of_absolute_node_to_height_of_its_overflow_hidden_parent) { const YGConfigRef config = YGConfigNew(); const YGNodeRef root = YGNodeNewWithConfig(config); @@ -575,7 +578,9 @@ TEST(YogaTest, absolute_layout_align_items_center_on_child_only) { YGConfigFree(config); } -TEST(YogaTest, absolute_layout_align_items_and_justify_content_center_and_top_position) { +TEST( + YogaTest, + absolute_layout_align_items_and_justify_content_center_and_top_position) { const YGConfigRef config = YGConfigNew(); const YGNodeRef root = YGNodeNewWithConfig(config); @@ -620,7 +625,9 @@ TEST(YogaTest, absolute_layout_align_items_and_justify_content_center_and_top_po YGConfigFree(config); } -TEST(YogaTest, absolute_layout_align_items_and_justify_content_center_and_bottom_position) { +TEST( + YogaTest, + absolute_layout_align_items_and_justify_content_center_and_bottom_position) { const YGConfigRef config = YGConfigNew(); const YGNodeRef root = YGNodeNewWithConfig(config); @@ -665,7 +672,9 @@ TEST(YogaTest, absolute_layout_align_items_and_justify_content_center_and_bottom YGConfigFree(config); } -TEST(YogaTest, absolute_layout_align_items_and_justify_content_center_and_left_position) { +TEST( + YogaTest, + absolute_layout_align_items_and_justify_content_center_and_left_position) { const YGConfigRef config = YGConfigNew(); const YGNodeRef root = YGNodeNewWithConfig(config); @@ -710,7 +719,9 @@ TEST(YogaTest, absolute_layout_align_items_and_justify_content_center_and_left_p YGConfigFree(config); } -TEST(YogaTest, absolute_layout_align_items_and_justify_content_center_and_right_position) { +TEST( + YogaTest, + absolute_layout_align_items_and_justify_content_center_and_right_position) { const YGConfigRef config = YGConfigNew(); const YGNodeRef root = YGNodeNewWithConfig(config); diff --git a/tests/YGAlignBaselineTest.cpp b/tests/YGAlignBaselineTest.cpp index 5973b85b..074223e1 100644 --- a/tests/YGAlignBaselineTest.cpp +++ b/tests/YGAlignBaselineTest.cpp @@ -8,8 +8,10 @@ #include #include -static float -_baselineFunc(YGNodeRef node, const float width, const float height) { +static float _baselineFunc( + YGNodeRef node, + const float width, + const float height) { return height / 2; } diff --git a/tests/YGAlignContentTest.cpp b/tests/YGAlignContentTest.cpp index af6fe529..0c6f5322 100644 --- a/tests/YGAlignContentTest.cpp +++ b/tests/YGAlignContentTest.cpp @@ -4,7 +4,8 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ -// @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignContentTest.html +// @Generated by gentest/gentest.rb from +// gentest/fixtures/YGAlignContentTest.html #include #include diff --git a/tests/YGAspectRatioTest.cpp b/tests/YGAspectRatioTest.cpp index 9d99569b..217a8689 100644 --- a/tests/YGAspectRatioTest.cpp +++ b/tests/YGAspectRatioTest.cpp @@ -8,11 +8,12 @@ #include #include -static YGSize _measure(YGNodeRef node, - float width, - YGMeasureMode widthMode, - float height, - YGMeasureMode heightMode) { +static YGSize _measure( + YGNodeRef node, + float width, + YGMeasureMode widthMode, + float height, + YGMeasureMode heightMode) { return YGSize{ .width = widthMode == YGMeasureModeExactly ? width : 50, .height = heightMode == YGMeasureModeExactly ? height : 50, diff --git a/tests/YGBaselineFuncTest.cpp b/tests/YGBaselineFuncTest.cpp index 1e1027f3..af22785f 100644 --- a/tests/YGBaselineFuncTest.cpp +++ b/tests/YGBaselineFuncTest.cpp @@ -9,7 +9,7 @@ #include static float _baseline(YGNodeRef node, const float width, const float height) { - float* baseline = (float*)node->getContext(); + float* baseline = (float*) node->getContext(); return *baseline; } diff --git a/tests/YGDefaultValuesTest.cpp b/tests/YGDefaultValuesTest.cpp index 4d4d2c5c..e8725f77 100644 --- a/tests/YGDefaultValuesTest.cpp +++ b/tests/YGDefaultValuesTest.cpp @@ -89,7 +89,7 @@ TEST(YogaTest, assert_default_values) { } TEST(YogaTest, assert_webdefault_values) { - YGConfig *config = YGConfigNew(); + YGConfig* config = YGConfigNew(); YGConfigSetUseWebDefaults(config, true); const YGNodeRef root = YGNodeNewWithConfig(config); @@ -102,7 +102,7 @@ TEST(YogaTest, assert_webdefault_values) { } TEST(YogaTest, assert_webdefault_values_reset) { - YGConfig *config = YGConfigNew(); + YGConfig* config = YGConfigNew(); YGConfigSetUseWebDefaults(config, true); const YGNodeRef root = YGNodeNewWithConfig(config); YGNodeReset(root); @@ -116,7 +116,7 @@ TEST(YogaTest, assert_webdefault_values_reset) { } TEST(YogaTest, assert_legacy_stretch_behaviour) { - YGConfig *config = YGConfigNew(); + YGConfig* config = YGConfigNew(); YGConfigSetUseLegacyStretchBehaviour(config, true); const YGNodeRef root = YGNodeNewWithConfig(config); YGNodeStyleSetWidth(root, 500); diff --git a/tests/YGDirtiedTest.cpp b/tests/YGDirtiedTest.cpp index 5fb291be..e7792c62 100644 --- a/tests/YGDirtiedTest.cpp +++ b/tests/YGDirtiedTest.cpp @@ -8,7 +8,7 @@ #include static void _dirtied(YGNodeRef node) { - int* dirtiedCount = (int*)node->getContext(); + int* dirtiedCount = (int*) node->getContext(); (*dirtiedCount)++; } diff --git a/tests/YGFlexDirectionTest.cpp b/tests/YGFlexDirectionTest.cpp index 92bc450d..7dbcc254 100644 --- a/tests/YGFlexDirectionTest.cpp +++ b/tests/YGFlexDirectionTest.cpp @@ -4,7 +4,8 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ -// @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexDirectionTest.html +// @Generated by gentest/gentest.rb from +// gentest/fixtures/YGFlexDirectionTest.html #include #include diff --git a/tests/YGHadOverflowTest.cpp b/tests/YGHadOverflowTest.cpp index d0f8a332..f764c8ac 100644 --- a/tests/YGHadOverflowTest.cpp +++ b/tests/YGHadOverflowTest.cpp @@ -29,7 +29,9 @@ protected: YGConfigRef config; }; -TEST_F(YogaTest_HadOverflowTests, children_overflow_no_wrap_and_no_flex_children) { +TEST_F( + YogaTest_HadOverflowTests, + children_overflow_no_wrap_and_no_flex_children) { const YGNodeRef child0 = YGNodeNewWithConfig(config); YGNodeStyleSetWidth(child0, 80); YGNodeStyleSetHeight(child0, 40); @@ -47,7 +49,9 @@ TEST_F(YogaTest_HadOverflowTests, children_overflow_no_wrap_and_no_flex_children ASSERT_TRUE(YGNodeLayoutGetHadOverflow(root)); } -TEST_F(YogaTest_HadOverflowTests, spacing_overflow_no_wrap_and_no_flex_children) { +TEST_F( + YogaTest_HadOverflowTests, + spacing_overflow_no_wrap_and_no_flex_children) { const YGNodeRef child0 = YGNodeNewWithConfig(config); YGNodeStyleSetWidth(child0, 80); YGNodeStyleSetHeight(child0, 40); diff --git a/tests/YGInfiniteHeightTest.cpp b/tests/YGInfiniteHeightTest.cpp index 6a0cf307..99d84e0c 100644 --- a/tests/YGInfiniteHeightTest.cpp +++ b/tests/YGInfiniteHeightTest.cpp @@ -9,7 +9,8 @@ // This test isn't correct from the Flexbox standard standpoint, // because percentages are calculated with parent constraints. -// However, we need to make sure we fail gracefully in this case, not returning NaN +// However, we need to make sure we fail gracefully in this case, not returning +// NaN TEST(YogaTest, percent_absolute_position_infinite_height) { const YGConfigRef config = YGConfigNew(); diff --git a/tests/YGLoggerTest.cpp b/tests/YGLoggerTest.cpp index 3cf1095a..8ab4f805 100644 --- a/tests/YGLoggerTest.cpp +++ b/tests/YGLoggerTest.cpp @@ -10,17 +10,19 @@ namespace { char writeBuffer[4096]; -int _unmanagedLogger(const YGConfigRef config, - const YGNodeRef node, - YGLogLevel level, - const char *format, - va_list args) { - return vsnprintf(writeBuffer + strlen(writeBuffer), - sizeof(writeBuffer) - strlen(writeBuffer), - format, - args); -} +int _unmanagedLogger( + const YGConfigRef config, + const YGNodeRef node, + YGLogLevel level, + const char* format, + va_list args) { + return vsnprintf( + writeBuffer + strlen(writeBuffer), + sizeof(writeBuffer) - strlen(writeBuffer), + format, + args); } +} // namespace TEST(YogaTest, config_print_tree_enabled) { writeBuffer[0] = '\0'; @@ -68,13 +70,16 @@ TEST(YogaTest, logger_default_node_should_print_no_style_info) { YGConfigSetLogger(config, _unmanagedLogger); const YGNodeRef root = YGNodeNewWithConfig(config); YGNodeCalculateLayout(root, YGUnitUndefined, YGUnitUndefined, YGDirectionLTR); - YGNodePrint(root, - (YGPrintOptions)(YGPrintOptionsLayout | YGPrintOptionsChildren | - YGPrintOptionsStyle)); + YGNodePrint( + root, + (YGPrintOptions)( + YGPrintOptionsLayout | YGPrintOptionsChildren | YGPrintOptionsStyle)); YGConfigSetLogger(config, NULL); YGNodeFree(root); - const char *expected = "
"; + const char* expected = + "
"; ASSERT_STREQ(expected, writeBuffer); } @@ -90,15 +95,17 @@ TEST(YogaTest, logger_node_with_percentage_absolute_position_and_margin) { YGNodeStyleSetMargin(root, YGEdgeRight, 10); YGNodeStyleSetMarginAuto(root, YGEdgeLeft); YGNodeCalculateLayout(root, YGUnitUndefined, YGUnitUndefined, YGDirectionLTR); - YGNodePrint(root, - (YGPrintOptions)(YGPrintOptionsLayout | YGPrintOptionsChildren | - YGPrintOptionsStyle)); + YGNodePrint( + root, + (YGPrintOptions)( + YGPrintOptionsLayout | YGPrintOptionsChildren | YGPrintOptionsStyle)); YGConfigSetLogger(config, NULL); YGNodeFree(root); - const char *expected = "
"; + const char* expected = + "
"; ASSERT_STREQ(expected, writeBuffer); } @@ -112,15 +119,17 @@ TEST(YogaTest, logger_node_with_children_should_print_indented) { YGNodeInsertChild(root, child0, 0); YGNodeInsertChild(root, child1, 1); YGNodeCalculateLayout(root, YGUnitUndefined, YGUnitUndefined, YGDirectionLTR); - YGNodePrint(root, - (YGPrintOptions)(YGPrintOptionsLayout | YGPrintOptionsChildren | - YGPrintOptionsStyle)); + YGNodePrint( + root, + (YGPrintOptions)( + YGPrintOptionsLayout | YGPrintOptionsChildren | YGPrintOptionsStyle)); YGConfigSetLogger(config, NULL); YGNodeFreeRecursive(root); - const char *expected = "
\n " - "
\n
\n
"; + const char* expected = + "
\n " + "
\n
\n
"; ASSERT_STREQ(expected, writeBuffer); } diff --git a/tests/YGMeasureCacheTest.cpp b/tests/YGMeasureCacheTest.cpp index dfb7d2e9..f4c54a53 100644 --- a/tests/YGMeasureCacheTest.cpp +++ b/tests/YGMeasureCacheTest.cpp @@ -8,12 +8,13 @@ #include #include -static YGSize _measureMax(YGNodeRef node, - float width, - YGMeasureMode widthMode, - float height, - YGMeasureMode heightMode) { - int* measureCount = (int*)node->getContext(); +static YGSize _measureMax( + YGNodeRef node, + float width, + YGMeasureMode widthMode, + float height, + YGMeasureMode heightMode) { + int* measureCount = (int*) node->getContext(); (*measureCount)++; return YGSize{ @@ -22,37 +23,40 @@ static YGSize _measureMax(YGNodeRef node, }; } -static YGSize _measureMin(YGNodeRef node, - float width, - YGMeasureMode widthMode, - float height, - YGMeasureMode heightMode) { - int* measureCount = (int*)node->getContext(); +static YGSize _measureMin( + YGNodeRef node, + float width, + YGMeasureMode widthMode, + float height, + YGMeasureMode heightMode) { + int* measureCount = (int*) node->getContext(); *measureCount = *measureCount + 1; return YGSize{ - .width = - widthMode == YGMeasureModeUndefined || (widthMode == YGMeasureModeAtMost && width > 10) - ? 10 - : width, - .height = - heightMode == YGMeasureModeUndefined || (heightMode == YGMeasureModeAtMost && height > 10) - ? 10 - : height, + .width = widthMode == YGMeasureModeUndefined || + (widthMode == YGMeasureModeAtMost && width > 10) + ? 10 + : width, + .height = heightMode == YGMeasureModeUndefined || + (heightMode == YGMeasureModeAtMost && height > 10) + ? 10 + : height, }; } -static YGSize _measure_84_49(YGNodeRef node, - float width, - YGMeasureMode widthMode, - float height, - YGMeasureMode heightMode) { - int* measureCount = (int*)node->getContext(); +static YGSize _measure_84_49( + YGNodeRef node, + float width, + YGMeasureMode widthMode, + float height, + YGMeasureMode heightMode) { + int* measureCount = (int*) node->getContext(); if (measureCount) { (*measureCount)++; } return YGSize{ - .width = 84.f, .height = 49.f, + .width = 84.f, + .height = 49.f, }; } @@ -149,7 +153,9 @@ TEST(YogaTest, remeasure_with_atmost_computed_width_undefined_height) { YGNodeFreeRecursive(root); } -TEST(YogaTest, remeasure_with_already_measured_value_smaller_but_still_float_equal) { +TEST( + YogaTest, + remeasure_with_already_measured_value_smaller_but_still_float_equal) { int measureCount = 0; const YGNodeRef root = YGNodeNew(); diff --git a/tests/YGMeasureModeTest.cpp b/tests/YGMeasureModeTest.cpp index 9dd0416e..f0c2062d 100644 --- a/tests/YGMeasureModeTest.cpp +++ b/tests/YGMeasureModeTest.cpp @@ -17,17 +17,18 @@ struct _MeasureConstraint { struct _MeasureConstraintList { uint32_t length; - struct _MeasureConstraint *constraints; + struct _MeasureConstraint* constraints; }; -static YGSize _measure(YGNodeRef node, - float width, - YGMeasureMode widthMode, - float height, - YGMeasureMode heightMode) { +static YGSize _measure( + YGNodeRef node, + float width, + YGMeasureMode widthMode, + float height, + YGMeasureMode heightMode) { struct _MeasureConstraintList* constraintList = - (struct _MeasureConstraintList*)node->getContext(); - struct _MeasureConstraint *constraints = constraintList->constraints; + (struct _MeasureConstraintList*) node->getContext(); + struct _MeasureConstraint* constraints = constraintList->constraints; uint32_t currentIndex = constraintList->length; (&constraints[currentIndex])->width = width; (&constraints[currentIndex])->widthMode = widthMode; @@ -44,7 +45,8 @@ static YGSize _measure(YGNodeRef node, TEST(YogaTest, exactly_measure_stretched_child_column) { struct _MeasureConstraintList constraintList = _MeasureConstraintList{ .length = 0, - .constraints = (struct _MeasureConstraint *) malloc(10 * sizeof(struct _MeasureConstraint)), + .constraints = (struct _MeasureConstraint*) malloc( + 10 * sizeof(struct _MeasureConstraint)), }; const YGNodeRef root = YGNodeNew(); @@ -72,7 +74,8 @@ TEST(YogaTest, exactly_measure_stretched_child_column) { TEST(YogaTest, exactly_measure_stretched_child_row) { struct _MeasureConstraintList constraintList = _MeasureConstraintList{ .length = 0, - .constraints = (struct _MeasureConstraint *) malloc(10 * sizeof(struct _MeasureConstraint)), + .constraints = (struct _MeasureConstraint*) malloc( + 10 * sizeof(struct _MeasureConstraint)), }; const YGNodeRef root = YGNodeNew(); @@ -100,7 +103,8 @@ TEST(YogaTest, exactly_measure_stretched_child_row) { TEST(YogaTest, at_most_main_axis_column) { struct _MeasureConstraintList constraintList = _MeasureConstraintList{ .length = 0, - .constraints = (struct _MeasureConstraint *) malloc(10 * sizeof(struct _MeasureConstraint)), + .constraints = (struct _MeasureConstraint*) malloc( + 10 * sizeof(struct _MeasureConstraint)), }; const YGNodeRef root = YGNodeNew(); @@ -126,7 +130,8 @@ TEST(YogaTest, at_most_main_axis_column) { TEST(YogaTest, at_most_cross_axis_column) { struct _MeasureConstraintList constraintList = _MeasureConstraintList{ .length = 0, - .constraints = (struct _MeasureConstraint *) malloc(10 * sizeof(struct _MeasureConstraint)), + .constraints = (struct _MeasureConstraint*) malloc( + 10 * sizeof(struct _MeasureConstraint)), }; const YGNodeRef root = YGNodeNew(); @@ -153,7 +158,8 @@ TEST(YogaTest, at_most_cross_axis_column) { TEST(YogaTest, at_most_main_axis_row) { struct _MeasureConstraintList constraintList = _MeasureConstraintList{ .length = 0, - .constraints = (struct _MeasureConstraint *) malloc(10 * sizeof(struct _MeasureConstraint)), + .constraints = (struct _MeasureConstraint*) malloc( + 10 * sizeof(struct _MeasureConstraint)), }; const YGNodeRef root = YGNodeNew(); @@ -180,7 +186,8 @@ TEST(YogaTest, at_most_main_axis_row) { TEST(YogaTest, at_most_cross_axis_row) { struct _MeasureConstraintList constraintList = _MeasureConstraintList{ .length = 0, - .constraints = (struct _MeasureConstraint *) malloc(10 * sizeof(struct _MeasureConstraint)), + .constraints = (struct _MeasureConstraint*) malloc( + 10 * sizeof(struct _MeasureConstraint)), }; const YGNodeRef root = YGNodeNew(); @@ -208,7 +215,8 @@ TEST(YogaTest, at_most_cross_axis_row) { TEST(YogaTest, flex_child) { struct _MeasureConstraintList constraintList = _MeasureConstraintList{ .length = 0, - .constraints = (struct _MeasureConstraint *) malloc(10 * sizeof(struct _MeasureConstraint)), + .constraints = (struct _MeasureConstraint*) malloc( + 10 * sizeof(struct _MeasureConstraint)), }; const YGNodeRef root = YGNodeNew(); @@ -237,7 +245,8 @@ TEST(YogaTest, flex_child) { TEST(YogaTest, flex_child_with_flex_basis) { struct _MeasureConstraintList constraintList = _MeasureConstraintList{ .length = 0, - .constraints = (struct _MeasureConstraint *) malloc(10 * sizeof(struct _MeasureConstraint)), + .constraints = (struct _MeasureConstraint*) malloc( + 10 * sizeof(struct _MeasureConstraint)), }; const YGNodeRef root = YGNodeNew(); @@ -264,7 +273,8 @@ TEST(YogaTest, flex_child_with_flex_basis) { TEST(YogaTest, overflow_scroll_column) { struct _MeasureConstraintList constraintList = _MeasureConstraintList{ .length = 0, - .constraints = (struct _MeasureConstraint *) malloc(10 * sizeof(struct _MeasureConstraint)), + .constraints = (struct _MeasureConstraint*) malloc( + 10 * sizeof(struct _MeasureConstraint)), }; const YGNodeRef root = YGNodeNew(); @@ -295,7 +305,8 @@ TEST(YogaTest, overflow_scroll_column) { TEST(YogaTest, overflow_scroll_row) { struct _MeasureConstraintList constraintList = _MeasureConstraintList{ .length = 0, - .constraints = (struct _MeasureConstraint *) malloc(10 * sizeof(struct _MeasureConstraint)), + .constraints = (struct _MeasureConstraint*) malloc( + 10 * sizeof(struct _MeasureConstraint)), }; const YGNodeRef root = YGNodeNew(); diff --git a/tests/YGMinMaxDimensionTest.cpp b/tests/YGMinMaxDimensionTest.cpp index dd16e5f9..a3bee824 100644 --- a/tests/YGMinMaxDimensionTest.cpp +++ b/tests/YGMinMaxDimensionTest.cpp @@ -4,7 +4,8 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ -// @Generated by gentest/gentest.rb from gentest/fixtures/YGMinMaxDimensionTest.html +// @Generated by gentest/gentest.rb from +// gentest/fixtures/YGMinMaxDimensionTest.html #include #include diff --git a/tests/YGPercentageTest.cpp b/tests/YGPercentageTest.cpp index 93776413..e3efb7b6 100644 --- a/tests/YGPercentageTest.cpp +++ b/tests/YGPercentageTest.cpp @@ -647,7 +647,9 @@ TEST(YogaTest, percentage_flex_basis_cross_min_width) { YGConfigFree(config); } -TEST(YogaTest, percentage_multiple_nested_with_padding_margin_and_percentage_values) { +TEST( + YogaTest, + percentage_multiple_nested_with_padding_margin_and_percentage_values) { const YGConfigRef config = YGConfigNew(); const YGNodeRef root = YGNodeNewWithConfig(config); diff --git a/tests/YGRelayoutTest.cpp b/tests/YGRelayoutTest.cpp index fdbe3608..5df3ed5a 100644 --- a/tests/YGRelayoutTest.cpp +++ b/tests/YGRelayoutTest.cpp @@ -9,7 +9,8 @@ TEST(YogaTest, dont_cache_computed_flex_basis_between_layouts) { const YGConfigRef config = YGConfigNew(); - YGConfigSetExperimentalFeatureEnabled(config, YGExperimentalFeatureWebFlexBasis, true); + YGConfigSetExperimentalFeatureEnabled( + config, YGExperimentalFeatureWebFlexBasis, true); const YGNodeRef root = YGNodeNewWithConfig(config); YGNodeStyleSetHeightPercent(root, 100); diff --git a/tests/YGRoundingFunctionTest.cpp b/tests/YGRoundingFunctionTest.cpp index 672e8afd..a02175d9 100644 --- a/tests/YGRoundingFunctionTest.cpp +++ b/tests/YGRoundingFunctionTest.cpp @@ -24,7 +24,8 @@ TEST(YogaTest, rounding_value) { ASSERT_FLOAT_EQ(-6.0, YGRoundValueToPixelGrid(-5.999999, 2.0, true, false)); ASSERT_FLOAT_EQ(-6.0, YGRoundValueToPixelGrid(-5.999999, 2.0, false, true)); - // Test that numbers with fraction are rounded correctly accounting for ceil/floor flags + // Test that numbers with fraction are rounded correctly accounting for + // ceil/floor flags ASSERT_FLOAT_EQ(6.0, YGRoundValueToPixelGrid(6.01, 2.0, false, false)); ASSERT_FLOAT_EQ(6.5, YGRoundValueToPixelGrid(6.01, 2.0, true, false)); ASSERT_FLOAT_EQ(6.0, YGRoundValueToPixelGrid(6.01, 2.0, false, true)); diff --git a/tests/YGRoundingMeasureFuncTest.cpp b/tests/YGRoundingMeasureFuncTest.cpp index 5cf2120f..755e77aa 100644 --- a/tests/YGRoundingMeasureFuncTest.cpp +++ b/tests/YGRoundingMeasureFuncTest.cpp @@ -8,33 +8,39 @@ #include #include -static YGSize _measureFloor(YGNodeRef node, - float width, - YGMeasureMode widthMode, - float height, - YGMeasureMode heightMode) { +static YGSize _measureFloor( + YGNodeRef node, + float width, + YGMeasureMode widthMode, + float height, + YGMeasureMode heightMode) { return YGSize{ - width = 10.2f, height = 10.2f, + width = 10.2f, + height = 10.2f, }; } -static YGSize _measureCeil(YGNodeRef node, - float width, - YGMeasureMode widthMode, - float height, - YGMeasureMode heightMode) { +static YGSize _measureCeil( + YGNodeRef node, + float width, + YGMeasureMode widthMode, + float height, + YGMeasureMode heightMode) { return YGSize{ - width = 10.5f, height = 10.5f, + width = 10.5f, + height = 10.5f, }; } -static YGSize _measureFractial(YGNodeRef node, - float width, - YGMeasureMode widthMode, - float height, - YGMeasureMode heightMode) { +static YGSize _measureFractial( + YGNodeRef node, + float width, + YGMeasureMode widthMode, + float height, + YGMeasureMode heightMode) { return YGSize{ - width = 0.5f, height = 0.5f, + width = 0.5f, + height = 0.5f, }; } @@ -106,7 +112,9 @@ TEST(YogaTest, rounding_feature_with_custom_measure_func_ceil) { YGConfigFree(config); } -TEST(YogaTest, rounding_feature_with_custom_measure_and_fractial_matching_scale) { +TEST( + YogaTest, + rounding_feature_with_custom_measure_and_fractial_matching_scale) { const YGConfigRef config = YGConfigNew(); const YGNodeRef root = YGNodeNewWithConfig(config); diff --git a/tests/YGSizeOverflowTest.cpp b/tests/YGSizeOverflowTest.cpp index 73b35b72..2d037188 100644 --- a/tests/YGSizeOverflowTest.cpp +++ b/tests/YGSizeOverflowTest.cpp @@ -4,7 +4,8 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ -// @Generated by gentest/gentest.rb from gentest/fixtures/YGSizeOverflowTest.html +// @Generated by gentest/gentest.rb from +// gentest/fixtures/YGSizeOverflowTest.html #include #include diff --git a/tests/YGTraversalTest.cpp b/tests/YGTraversalTest.cpp index c77ba3f4..a3c54cd5 100644 --- a/tests/YGTraversalTest.cpp +++ b/tests/YGTraversalTest.cpp @@ -12,21 +12,16 @@ TEST(YogaTest, pre_order_traversal) { YGNodeRef const root_child0 = YGNodeNew(); YGNodeRef const root_child1 = YGNodeNew(); YGNodeRef const root_child0_child0 = YGNodeNew(); - + YGNodeSetChildren(root, {root_child0, root_child1}); YGNodeInsertChild(root_child0, root_child0_child0, 0); - + std::vector visited; - YGTraversePreOrder(root, [&visited](YGNodeRef node) { - visited.push_back(node); - }); - + YGTraversePreOrder( + root, [&visited](YGNodeRef node) { visited.push_back(node); }); + const std::vector expected = { - root, - root_child0, - root_child0_child0, - root_child1 - }; + root, root_child0, root_child0_child0, root_child1}; ASSERT_EQ(visited, expected); YGNodeFreeRecursive(root); diff --git a/tests/YGTreeMutationTest.cpp b/tests/YGTreeMutationTest.cpp index a7a625cd..d35b636e 100644 --- a/tests/YGTreeMutationTest.cpp +++ b/tests/YGTreeMutationTest.cpp @@ -7,12 +7,11 @@ #include #include -static std::vector getChildren(YGNodeRef const node) -{ +static std::vector getChildren(YGNodeRef const node) { const uint32_t count = YGNodeGetChildCount(node); std::vector children; children.reserve(count); - for (uint32_t i = 0 ; i < count ; i++) { + for (uint32_t i = 0; i < count; i++) { children.push_back(YGNodeGetChild(node, i)); } return children; @@ -29,7 +28,8 @@ TEST(YogaTest, set_children_adds_children_to_parent) { const std::vector expectedChildren = {root_child0, root_child1}; ASSERT_EQ(children, expectedChildren); - const std::vector owners = {YGNodeGetOwner(root_child0), YGNodeGetOwner(root_child1)}; + const std::vector owners = {YGNodeGetOwner(root_child0), + YGNodeGetOwner(root_child1)}; const std::vector expectedOwners = {root, root}; ASSERT_EQ(owners, expectedOwners); @@ -48,7 +48,8 @@ TEST(YogaTest, set_children_to_empty_removes_old_children) { const std::vector expectedChildren = {}; ASSERT_EQ(children, expectedChildren); - const std::vector owners = {YGNodeGetOwner(root_child0), YGNodeGetOwner(root_child1)}; + const std::vector owners = {YGNodeGetOwner(root_child0), + YGNodeGetOwner(root_child1)}; const std::vector expectedOwners = {nullptr, nullptr}; ASSERT_EQ(owners, expectedOwners); @@ -71,7 +72,8 @@ TEST(YogaTest, set_children_replaces_non_common_children) { const std::vector expectedChildren = {root_child2, root_child3}; ASSERT_EQ(children, expectedChildren); - const std::vector owners = {YGNodeGetOwner(root_child0), YGNodeGetOwner(root_child1)}; + const std::vector owners = {YGNodeGetOwner(root_child0), + YGNodeGetOwner(root_child1)}; const std::vector expectedOwners = {nullptr, nullptr}; ASSERT_EQ(owners, expectedOwners); @@ -93,15 +95,14 @@ TEST(YogaTest, set_children_keeps_and_reorders_common_children) { YGNodeSetChildren(root, {root_child2, root_child1, root_child3}); const std::vector children = getChildren(root); - const std::vector expectedChildren = {root_child2, root_child1, root_child3}; + const std::vector expectedChildren = { + root_child2, root_child1, root_child3}; ASSERT_EQ(children, expectedChildren); - const std::vector owners = { - YGNodeGetOwner(root_child0), - YGNodeGetOwner(root_child1), - YGNodeGetOwner(root_child2), - YGNodeGetOwner(root_child3) - }; + const std::vector owners = {YGNodeGetOwner(root_child0), + YGNodeGetOwner(root_child1), + YGNodeGetOwner(root_child2), + YGNodeGetOwner(root_child3)}; const std::vector expectedOwners = {nullptr, root, root, root}; ASSERT_EQ(owners, expectedOwners); diff --git a/yoga/log.cpp b/yoga/log.cpp index ebb99e45..62b3d4f0 100644 --- a/yoga/log.cpp +++ b/yoga/log.cpp @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - #include "log.h" #include "Yoga.h" From a2ee0f65bd1db4f0bf138247c67cf2c64485fb2a Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 25 Mar 2019 06:33:12 -0700 Subject: [PATCH 010/347] fixed @Nullable missing infer errors Summary: Fixed Nullable lint errors Reviewed By: davidaurelio Differential Revision: D14383930 fbshipit-source-id: 0847e19c50a0b8d4039199045b74aa86c96ac096 --- java/com/facebook/yoga/YogaNode.java | 1 + java/com/facebook/yoga/YogaNodeJNIBase.java | 11 ++++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/java/com/facebook/yoga/YogaNode.java b/java/com/facebook/yoga/YogaNode.java index c01d0cec..c6db5d45 100644 --- a/java/com/facebook/yoga/YogaNode.java +++ b/java/com/facebook/yoga/YogaNode.java @@ -213,6 +213,7 @@ public abstract class YogaNode { public abstract void setData(Object data); + @Nullable public abstract Object getData(); public abstract void print(); diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index 4981ebd1..7ddfa228 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -14,12 +14,12 @@ import javax.annotation.Nullable; @DoNotStrip public abstract class YogaNodeJNIBase extends YogaNode { - private YogaNodeJNIBase mOwner; + @Nullable private YogaNodeJNIBase mOwner; @Nullable private List mChildren; - private YogaMeasureFunction mMeasureFunction; - private YogaBaselineFunction mBaselineFunction; + @Nullable private YogaMeasureFunction mMeasureFunction; + @Nullable private YogaBaselineFunction mBaselineFunction; private long mNativePointer; - private Object mData; + @Nullable private Object mData; /* Those flags needs be in sync with YGJNI.cpp */ private static final int MARGIN = 1; @@ -623,7 +623,8 @@ public abstract class YogaNodeJNIBase extends YogaNode { mData = data; } - public Object getData() { + @Override + public @Nullable Object getData() { return mData; } From e4856a2264390e57ca677889bb9c7eac58cd9b2e Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Tue, 26 Mar 2019 05:17:50 -0700 Subject: [PATCH 011/347] Remove duplicated function declaration Summary: @public Just removes a duplicated function declaration. Reviewed By: SidharthGuglani Differential Revision: D14598446 fbshipit-source-id: b4d8fe192f9a07f512f6a346f27d9046bb3bae23 --- yoga/Yoga-internal.h | 1 - 1 file changed, 1 deletion(-) diff --git a/yoga/Yoga-internal.h b/yoga/Yoga-internal.h index bc4a4a20..5b4bc5be 100644 --- a/yoga/Yoga-internal.h +++ b/yoga/Yoga-internal.h @@ -154,7 +154,6 @@ static const float kDefaultFlexShrink = 0.0f; static const float kWebDefaultFlexShrink = 1.0f; extern bool YGFloatsEqual(const float a, const float b); -extern bool YGValueEqual(const YGValue a, const YGValue b); extern facebook::yoga::detail::CompactValue YGComputedEdgeValue( const facebook::yoga::detail::Values< facebook::yoga::enums::count()>& edges, From 3d2836a9475ad28f66c7e8238313ba7ce10d08c3 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Tue, 26 Mar 2019 05:17:50 -0700 Subject: [PATCH 012/347] `CompactValue` overrides of `YGResolveValue`/`YGValueEqual` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Summary: @public I would like to get rid of implicit conversions between `YGValue` and `CompactValue`, because they don’t come for free. That’s why I am adding `CompactValue` specific overrides for `YGResolveValue` and `YGValueEqual`, that do explicit casts. Up the commit stack, we will be able mark both `CompactValue(const YGValue&)` and `CompactValue::operator YGValue()` as `explicit`. Reviewed By: SidharthGuglani Differential Revision: D14598447 fbshipit-source-id: 75dc15cefb2dddcf8def891c5fb37893cacd9d46 --- yoga/Utils.cpp | 2 +- yoga/Utils.h | 13 ++++++++++++- yoga/YGNodePrint.cpp | 1 + yoga/YGStyle.cpp | 1 + yoga/Yoga-internal.h | 1 - 5 files changed, 15 insertions(+), 3 deletions(-) diff --git a/yoga/Utils.cpp b/yoga/Utils.cpp index 2035fe00..38b686c5 100644 --- a/yoga/Utils.cpp +++ b/yoga/Utils.cpp @@ -31,7 +31,7 @@ float YGFloatMin(const float a, const float b) { return yoga::isUndefined(a) ? b : a; } -bool YGValueEqual(const YGValue a, const YGValue b) { +bool YGValueEqual(const YGValue& a, const YGValue& b) { if (a.unit != b.unit) { return false; } diff --git a/yoga/Utils.h b/yoga/Utils.h index a27b62a1..900ccb1b 100644 --- a/yoga/Utils.h +++ b/yoga/Utils.h @@ -52,7 +52,12 @@ struct YGCollectFlexItemsRowValues { float crossDim; }; -bool YGValueEqual(const YGValue a, const YGValue b); +bool YGValueEqual(const YGValue& a, const YGValue& b); +inline bool YGValueEqual( + facebook::yoga::detail::CompactValue a, + facebook::yoga::detail::CompactValue b) { + return YGValueEqual((YGValue) a, (YGValue) b); +} // This custom float equality function returns true if either absolute // difference between two floats is less than 0.0001f or both are undefined. @@ -105,6 +110,12 @@ inline YGFloatOptional YGResolveValue( } } +inline YGFloatOptional YGResolveValue( + yoga::detail::CompactValue value, + float ownerSize) { + return YGResolveValue((YGValue) value, ownerSize); +} + inline bool YGFlexDirectionIsColumn(const YGFlexDirection flexDirection) { return flexDirection == YGFlexDirectionColumn || flexDirection == YGFlexDirectionColumnReverse; diff --git a/yoga/YGNodePrint.cpp b/yoga/YGNodePrint.cpp index ee07ac92..cc3ead74 100644 --- a/yoga/YGNodePrint.cpp +++ b/yoga/YGNodePrint.cpp @@ -10,6 +10,7 @@ #include "YGEnums.h" #include "YGNode.h" #include "Yoga-internal.h" +#include "Utils.h" namespace facebook { namespace yoga { diff --git a/yoga/YGStyle.cpp b/yoga/YGStyle.cpp index d9956363..26b0f269 100644 --- a/yoga/YGStyle.cpp +++ b/yoga/YGStyle.cpp @@ -5,6 +5,7 @@ * file in the root directory of this source tree. */ #include "YGStyle.h" +#include "Utils.h" // Yoga specific properties, not compatible with flexbox specification bool operator==(const YGStyle& lhs, const YGStyle& rhs) { diff --git a/yoga/Yoga-internal.h b/yoga/Yoga-internal.h index 5b4bc5be..f5cd6136 100644 --- a/yoga/Yoga-internal.h +++ b/yoga/Yoga-internal.h @@ -45,7 +45,6 @@ using namespace facebook; extern const std::array trailing; extern const std::array leading; -extern bool YGValueEqual(const YGValue a, const YGValue b); extern const YGValue YGValueUndefined; extern const YGValue YGValueAuto; extern const YGValue YGValueZero; From 9c2108c69e16aa8cb07e95341aa5531c6dbc64d2 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Tue, 26 Mar 2019 07:32:01 -0700 Subject: [PATCH 013/347] moved all the properties used for layout outputs to YogaNodeJNI Summary: Moved layout outputs transfer logic from YogaNodeJNIBase to YogaNodeJNI. This change set is for adding experiment for layout outputs batching using a float array Reviewed By: davidaurelio Differential Revision: D14368107 fbshipit-source-id: 75ca330c1e7f07adc0ab8e7a5927d93977088918 --- java/com/facebook/yoga/YogaNodeJNI.java | 168 ++++++++++++++++++++ java/com/facebook/yoga/YogaNodeJNIBase.java | 153 +----------------- 2 files changed, 169 insertions(+), 152 deletions(-) diff --git a/java/com/facebook/yoga/YogaNodeJNI.java b/java/com/facebook/yoga/YogaNodeJNI.java index ff5d1149..dbe12d55 100644 --- a/java/com/facebook/yoga/YogaNodeJNI.java +++ b/java/com/facebook/yoga/YogaNodeJNI.java @@ -11,6 +11,50 @@ import com.facebook.proguard.annotations.DoNotStrip; @DoNotStrip public class YogaNodeJNI extends YogaNodeJNIBase { + /* Those flags needs be in sync with YGJNI.cpp */ + private static final int MARGIN = 1; + private static final int PADDING = 2; + private static final int BORDER = 4; + + @DoNotStrip + private float mWidth = YogaConstants.UNDEFINED; + @DoNotStrip + private float mHeight = YogaConstants.UNDEFINED; + @DoNotStrip + private float mTop = YogaConstants.UNDEFINED; + @DoNotStrip + private float mLeft = YogaConstants.UNDEFINED; + @DoNotStrip + private float mMarginLeft = 0; + @DoNotStrip + private float mMarginTop = 0; + @DoNotStrip + private float mMarginRight = 0; + @DoNotStrip + private float mMarginBottom = 0; + @DoNotStrip + private float mPaddingLeft = 0; + @DoNotStrip + private float mPaddingTop = 0; + @DoNotStrip + private float mPaddingRight = 0; + @DoNotStrip + private float mPaddingBottom = 0; + @DoNotStrip + private float mBorderLeft = 0; + @DoNotStrip + private float mBorderTop = 0; + @DoNotStrip + private float mBorderRight = 0; + @DoNotStrip + private float mBorderBottom = 0; + @DoNotStrip + private int mLayoutDirection = 0; + @DoNotStrip + private boolean mHasNewLayout = true; + @DoNotStrip + private boolean mDoesLegacyStretchFlagAffectsLayout = false; + public YogaNodeJNI() { super(); } @@ -18,4 +62,128 @@ public class YogaNodeJNI extends YogaNodeJNIBase { public YogaNodeJNI(YogaConfig config) { super(config); } + + @Override + public void reset() { + mHasNewLayout = true; + + mWidth = YogaConstants.UNDEFINED; + mHeight = YogaConstants.UNDEFINED; + mTop = YogaConstants.UNDEFINED; + mLeft = YogaConstants.UNDEFINED; + mMarginLeft = 0; + mMarginTop = 0; + mMarginRight = 0; + mMarginBottom = 0; + mPaddingLeft = 0; + mPaddingTop = 0; + mPaddingRight = 0; + mPaddingBottom = 0; + mBorderLeft = 0; + mBorderTop = 0; + mBorderRight = 0; + mBorderBottom = 0; + mLayoutDirection = 0; + mDoesLegacyStretchFlagAffectsLayout = false; + } + + @Override + public float getLayoutX() { + return mLeft; + } + + @Override + public float getLayoutY() { + return mTop; + } + + @Override + public float getLayoutWidth() { + return mWidth; + } + + @Override + public float getLayoutHeight() { + return mHeight; + } + + @Override + public boolean getDoesLegacyStretchFlagAffectsLayout() { + return mDoesLegacyStretchFlagAffectsLayout; + } + + @Override + public float getLayoutMargin(YogaEdge edge) { + switch (edge) { + case LEFT: + return mMarginLeft; + case TOP: + return mMarginTop; + case RIGHT: + return mMarginRight; + case BOTTOM: + return mMarginBottom; + case START: + return getLayoutDirection() == YogaDirection.RTL ? mMarginRight : mMarginLeft; + case END: + return getLayoutDirection() == YogaDirection.RTL ? mMarginLeft : mMarginRight; + default: + throw new IllegalArgumentException("Cannot get layout margins of multi-edge shorthands"); + } + } + + @Override + public float getLayoutPadding(YogaEdge edge) { + switch (edge) { + case LEFT: + return mPaddingLeft; + case TOP: + return mPaddingTop; + case RIGHT: + return mPaddingRight; + case BOTTOM: + return mPaddingBottom; + case START: + return getLayoutDirection() == YogaDirection.RTL ? mPaddingRight : mPaddingLeft; + case END: + return getLayoutDirection() == YogaDirection.RTL ? mPaddingLeft : mPaddingRight; + default: + throw new IllegalArgumentException("Cannot get layout paddings of multi-edge shorthands"); + } + } + + @Override + public float getLayoutBorder(YogaEdge edge) { + switch (edge) { + case LEFT: + return mBorderLeft; + case TOP: + return mBorderTop; + case RIGHT: + return mBorderRight; + case BOTTOM: + return mBorderBottom; + case START: + return getLayoutDirection() == YogaDirection.RTL ? mBorderRight : mBorderLeft; + case END: + return getLayoutDirection() == YogaDirection.RTL ? mBorderLeft : mBorderRight; + default: + throw new IllegalArgumentException("Cannot get layout border of multi-edge shorthands"); + } + } + + @Override + public YogaDirection getLayoutDirection() { + return YogaDirection.fromInt(mLayoutDirection); + } + + @Override + public boolean hasNewLayout() { + return mHasNewLayout; + } + + @Override + public void markLayoutSeen() { + mHasNewLayout = false; + } } diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index 7ddfa228..52184d37 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -21,49 +21,6 @@ public abstract class YogaNodeJNIBase extends YogaNode { private long mNativePointer; @Nullable private Object mData; - /* Those flags needs be in sync with YGJNI.cpp */ - private static final int MARGIN = 1; - private static final int PADDING = 2; - private static final int BORDER = 4; - - @DoNotStrip - private float mWidth = YogaConstants.UNDEFINED; - @DoNotStrip - private float mHeight = YogaConstants.UNDEFINED; - @DoNotStrip - private float mTop = YogaConstants.UNDEFINED; - @DoNotStrip - private float mLeft = YogaConstants.UNDEFINED; - @DoNotStrip - private float mMarginLeft = 0; - @DoNotStrip - private float mMarginTop = 0; - @DoNotStrip - private float mMarginRight = 0; - @DoNotStrip - private float mMarginBottom = 0; - @DoNotStrip - private float mPaddingLeft = 0; - @DoNotStrip - private float mPaddingTop = 0; - @DoNotStrip - private float mPaddingRight = 0; - @DoNotStrip - private float mPaddingBottom = 0; - @DoNotStrip - private float mBorderLeft = 0; - @DoNotStrip - private float mBorderTop = 0; - @DoNotStrip - private float mBorderRight = 0; - @DoNotStrip - private float mBorderBottom = 0; - @DoNotStrip - private int mLayoutDirection = 0; - @DoNotStrip - private boolean mHasNewLayout = true; - @DoNotStrip private boolean mDoesLegacyStretchFlagAffectsLayout = false; - public YogaNodeJNIBase() { mNativePointer = YogaNative.jni_YGNodeNew(); if (mNativePointer == 0) { @@ -96,30 +53,9 @@ public abstract class YogaNodeJNIBase extends YogaNode { } } public void reset() { - mHasNewLayout = true; - - mWidth = YogaConstants.UNDEFINED; - mHeight = YogaConstants.UNDEFINED; - mTop = YogaConstants.UNDEFINED; - mLeft = YogaConstants.UNDEFINED; - mMarginLeft = 0; - mMarginTop = 0; - mMarginRight = 0; - mMarginBottom = 0; - mPaddingLeft = 0; - mPaddingTop = 0; - mPaddingRight = 0; - mPaddingBottom = 0; - mBorderLeft = 0; - mBorderTop = 0; - mBorderRight = 0; - mBorderBottom = 0; - mLayoutDirection = 0; - mMeasureFunction = null; mBaselineFunction = null; mData = null; - mDoesLegacyStretchFlagAffectsLayout = false; YogaNative.jni_YGNodeReset(mNativePointer); } @@ -219,10 +155,6 @@ public abstract class YogaNodeJNIBase extends YogaNode { YogaNative.jni_YGNodeCalculateLayout(mNativePointer, width, height, nativePointers, nodes); } - public boolean hasNewLayout() { - return mHasNewLayout; - } - public void dirty() { YogaNative.jni_YGNodeMarkDirty(mNativePointer); } @@ -240,10 +172,6 @@ public abstract class YogaNodeJNIBase extends YogaNode { YogaNative.jni_YGNodeCopyStyle(mNativePointer, ((YogaNodeJNIBase) srcNode).mNativePointer); } - public void markLayoutSeen() { - mHasNewLayout = false; - } - public YogaDirection getStyleDirection() { return YogaDirection.fromInt(YogaNative.jni_YGNodeStyleGetDirection(mNativePointer)); } @@ -500,86 +428,7 @@ public abstract class YogaNodeJNIBase extends YogaNode { YogaNative.jni_YGNodeStyleSetAspectRatio(mNativePointer, aspectRatio); } - public float getLayoutX() { - return mLeft; - } - - public float getLayoutY() { - return mTop; - } - - public float getLayoutWidth() { - return mWidth; - } - - public float getLayoutHeight() { - return mHeight; - } - - public boolean getDoesLegacyStretchFlagAffectsLayout() { - return mDoesLegacyStretchFlagAffectsLayout; - } - - public float getLayoutMargin(YogaEdge edge) { - switch (edge) { - case LEFT: - return mMarginLeft; - case TOP: - return mMarginTop; - case RIGHT: - return mMarginRight; - case BOTTOM: - return mMarginBottom; - case START: - return getLayoutDirection() == YogaDirection.RTL ? mMarginRight : mMarginLeft; - case END: - return getLayoutDirection() == YogaDirection.RTL ? mMarginLeft : mMarginRight; - default: - throw new IllegalArgumentException("Cannot get layout margins of multi-edge shorthands"); - } - } - - public float getLayoutPadding(YogaEdge edge) { - switch (edge) { - case LEFT: - return mPaddingLeft; - case TOP: - return mPaddingTop; - case RIGHT: - return mPaddingRight; - case BOTTOM: - return mPaddingBottom; - case START: - return getLayoutDirection() == YogaDirection.RTL ? mPaddingRight : mPaddingLeft; - case END: - return getLayoutDirection() == YogaDirection.RTL ? mPaddingLeft : mPaddingRight; - default: - throw new IllegalArgumentException("Cannot get layout paddings of multi-edge shorthands"); - } - } - - public float getLayoutBorder(YogaEdge edge) { - switch (edge) { - case LEFT: - return mBorderLeft; - case TOP: - return mBorderTop; - case RIGHT: - return mBorderRight; - case BOTTOM: - return mBorderBottom; - case START: - return getLayoutDirection() == YogaDirection.RTL ? mBorderRight : mBorderLeft; - case END: - return getLayoutDirection() == YogaDirection.RTL ? mBorderLeft : mBorderRight; - default: - throw new IllegalArgumentException("Cannot get layout border of multi-edge shorthands"); - } - } - - public YogaDirection getLayoutDirection() { - return YogaDirection.fromInt(mLayoutDirection); - } + public abstract boolean getDoesLegacyStretchFlagAffectsLayout(); public void setMeasureFunction(YogaMeasureFunction measureFunction) { mMeasureFunction = measureFunction; From 74202aecffc7bbe1ae0eb3cda713ea6441db8628 Mon Sep 17 00:00:00 2001 From: Will Wilson Date: Tue, 26 Mar 2019 07:39:58 -0700 Subject: [PATCH 014/347] Adds workspace for more efficient yoga development Summary: This workspace should ease yoga development Reviewed By: dinhviethoa Differential Revision: D14600002 fbshipit-source-id: 49f6d36680acad5835fcf96e80bcd547b667c0c8 --- ReactYoga.xcodeproj/project.pbxproj | 5224 +++++++++++++++++ YogaDev.xcworkspace/contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + YogaDev/YogaDev.xcodeproj/project.pbxproj | 350 ++ third-party(Yoga).xcconfig | 12 + 5 files changed, 5604 insertions(+) create mode 100644 ReactYoga.xcodeproj/project.pbxproj create mode 100644 YogaDev.xcworkspace/contents.xcworkspacedata create mode 100644 YogaDev.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 YogaDev/YogaDev.xcodeproj/project.pbxproj create mode 100644 third-party(Yoga).xcconfig diff --git a/ReactYoga.xcodeproj/project.pbxproj b/ReactYoga.xcodeproj/project.pbxproj new file mode 100644 index 00000000..4ad3260d --- /dev/null +++ b/ReactYoga.xcodeproj/project.pbxproj @@ -0,0 +1,5224 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 000E6CEB1AB0E980000CDF4D /* RCTSourceCode.m in Sources */ = {isa = PBXBuildFile; fileRef = 000E6CEA1AB0E980000CDF4D /* RCTSourceCode.m */; }; + 001BFCD01D8381DE008E587E /* RCTMultipartStreamReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 001BFCCF1D8381DE008E587E /* RCTMultipartStreamReader.m */; }; + 006FC4141D9B20820057AAAD /* RCTMultipartDataTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 006FC4131D9B20820057AAAD /* RCTMultipartDataTask.m */; }; + 008341F61D1DB34400876D9A /* RCTJSStackFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 008341F41D1DB34400876D9A /* RCTJSStackFrame.m */; }; + 0EA924D02237686F004AB895 /* RCTSurfacePresenterStub.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 589515DF2231AD9C0036BDE0 /* RCTSurfacePresenterStub.h */; }; + 0EEEA8DF2239002200A8C82D /* RCTSurfacePresenterStub.m in Sources */ = {isa = PBXBuildFile; fileRef = 0EEEA8DE2239002200A8C82D /* RCTSurfacePresenterStub.m */; }; + 0EEEA8E02239002200A8C82D /* RCTSurfacePresenterStub.m in Sources */ = {isa = PBXBuildFile; fileRef = 0EEEA8DE2239002200A8C82D /* RCTSurfacePresenterStub.m */; }; + 130443A11E3FEAA900D93A67 /* RCTFollyConvert.h in Headers */ = {isa = PBXBuildFile; fileRef = 1304439F1E3FEAA900D93A67 /* RCTFollyConvert.h */; }; + 130443A21E3FEAA900D93A67 /* RCTFollyConvert.mm in Sources */ = {isa = PBXBuildFile; fileRef = 130443A01E3FEAA900D93A67 /* RCTFollyConvert.mm */; }; + 130443A31E3FEAAE00D93A67 /* RCTFollyConvert.h in Headers */ = {isa = PBXBuildFile; fileRef = 1304439F1E3FEAA900D93A67 /* RCTFollyConvert.h */; }; + 130443A41E3FEAC600D93A67 /* RCTFollyConvert.mm in Sources */ = {isa = PBXBuildFile; fileRef = 130443A01E3FEAA900D93A67 /* RCTFollyConvert.mm */; }; + 130443C61E401A8C00D93A67 /* RCTConvert+Transform.m in Sources */ = {isa = PBXBuildFile; fileRef = 130443C41E401A8C00D93A67 /* RCTConvert+Transform.m */; }; + 130443DB1E401ADD00D93A67 /* RCTConvert+Transform.m in Sources */ = {isa = PBXBuildFile; fileRef = 130443C41E401A8C00D93A67 /* RCTConvert+Transform.m */; }; + 130443DC1E401AF400D93A67 /* RCTConvert+Transform.h in Headers */ = {isa = PBXBuildFile; fileRef = 130443C31E401A8C00D93A67 /* RCTConvert+Transform.h */; }; + 130443DD1E401AF500D93A67 /* RCTConvert+Transform.h in Headers */ = {isa = PBXBuildFile; fileRef = 130443C31E401A8C00D93A67 /* RCTConvert+Transform.h */; }; + 130443DE1E401B0D00D93A67 /* RCTTVView.h in Headers */ = {isa = PBXBuildFile; fileRef = 130443D61E401AD800D93A67 /* RCTTVView.h */; }; + 130E3D881E6A082100ACE484 /* RCTDevSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 130E3D861E6A082100ACE484 /* RCTDevSettings.h */; }; + 130E3D891E6A082100ACE484 /* RCTDevSettings.mm in Sources */ = {isa = PBXBuildFile; fileRef = 130E3D871E6A082100ACE484 /* RCTDevSettings.mm */; }; + 130E3D8A1E6A083600ACE484 /* RCTDevSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 130E3D861E6A082100ACE484 /* RCTDevSettings.h */; }; + 130E3D8B1E6A083900ACE484 /* RCTDevSettings.mm in Sources */ = {isa = PBXBuildFile; fileRef = 130E3D871E6A082100ACE484 /* RCTDevSettings.mm */; }; + 13134C861E296B2A00B9F3CB /* RCTCxxBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13134C741E296B2A00B9F3CB /* RCTCxxBridge.mm */; }; + 13134C871E296B2A00B9F3CB /* RCTCxxBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13134C741E296B2A00B9F3CB /* RCTCxxBridge.mm */; }; + 13134C8C1E296B2A00B9F3CB /* RCTMessageThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 13134C771E296B2A00B9F3CB /* RCTMessageThread.h */; }; + 13134C8D1E296B2A00B9F3CB /* RCTMessageThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 13134C771E296B2A00B9F3CB /* RCTMessageThread.h */; }; + 13134C8E1E296B2A00B9F3CB /* RCTMessageThread.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13134C781E296B2A00B9F3CB /* RCTMessageThread.mm */; }; + 13134C8F1E296B2A00B9F3CB /* RCTMessageThread.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13134C781E296B2A00B9F3CB /* RCTMessageThread.mm */; }; + 13134C941E296B2A00B9F3CB /* RCTObjcExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 13134C7B1E296B2A00B9F3CB /* RCTObjcExecutor.h */; }; + 13134C951E296B2A00B9F3CB /* RCTObjcExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 13134C7B1E296B2A00B9F3CB /* RCTObjcExecutor.h */; }; + 13134C961E296B2A00B9F3CB /* RCTObjcExecutor.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13134C7C1E296B2A00B9F3CB /* RCTObjcExecutor.mm */; }; + 13134C971E296B2A00B9F3CB /* RCTObjcExecutor.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13134C7C1E296B2A00B9F3CB /* RCTObjcExecutor.mm */; }; + 13134C981E296B2A00B9F3CB /* RCTCxxMethod.h in Headers */ = {isa = PBXBuildFile; fileRef = 13134C7E1E296B2A00B9F3CB /* RCTCxxMethod.h */; }; + 13134C991E296B2A00B9F3CB /* RCTCxxMethod.h in Headers */ = {isa = PBXBuildFile; fileRef = 13134C7E1E296B2A00B9F3CB /* RCTCxxMethod.h */; }; + 13134C9A1E296B2A00B9F3CB /* RCTCxxMethod.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13134C7F1E296B2A00B9F3CB /* RCTCxxMethod.mm */; }; + 13134C9B1E296B2A00B9F3CB /* RCTCxxMethod.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13134C7F1E296B2A00B9F3CB /* RCTCxxMethod.mm */; }; + 13134C9C1E296B2A00B9F3CB /* RCTCxxModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 13134C801E296B2A00B9F3CB /* RCTCxxModule.h */; }; + 13134C9D1E296B2A00B9F3CB /* RCTCxxModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 13134C801E296B2A00B9F3CB /* RCTCxxModule.h */; }; + 13134C9E1E296B2A00B9F3CB /* RCTCxxModule.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13134C811E296B2A00B9F3CB /* RCTCxxModule.mm */; }; + 13134C9F1E296B2A00B9F3CB /* RCTCxxModule.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13134C811E296B2A00B9F3CB /* RCTCxxModule.mm */; }; + 13134CA01E296B2A00B9F3CB /* RCTCxxUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 13134C821E296B2A00B9F3CB /* RCTCxxUtils.h */; }; + 13134CA11E296B2A00B9F3CB /* RCTCxxUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 13134C821E296B2A00B9F3CB /* RCTCxxUtils.h */; }; + 13134CA21E296B2A00B9F3CB /* RCTCxxUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13134C831E296B2A00B9F3CB /* RCTCxxUtils.mm */; }; + 13134CA31E296B2A00B9F3CB /* RCTCxxUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13134C831E296B2A00B9F3CB /* RCTCxxUtils.mm */; }; + 131B6AF41AF1093D00FFC3E0 /* RCTSegmentedControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 131B6AF11AF1093D00FFC3E0 /* RCTSegmentedControl.m */; }; + 131B6AF51AF1093D00FFC3E0 /* RCTSegmentedControlManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 131B6AF31AF1093D00FFC3E0 /* RCTSegmentedControlManager.m */; }; + 133EA4E52098F6E30035B1D8 /* ReactMarker.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13DA8A2F2097A90A00276ED4 /* ReactMarker.h */; }; + 13456E931ADAD2DE009F94A7 /* RCTConvert+CoreLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = 13456E921ADAD2DE009F94A7 /* RCTConvert+CoreLocation.m */; }; + 134D63C31F1FEC4B008872B5 /* RCTCxxBridgeDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 134D63C21F1FEC4B008872B5 /* RCTCxxBridgeDelegate.h */; }; + 134D63C41F1FEC65008872B5 /* RCTCxxBridgeDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 134D63C21F1FEC4B008872B5 /* RCTCxxBridgeDelegate.h */; }; + 13513F3C1B1F43F400FCE529 /* RCTProgressViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 13513F3B1B1F43F400FCE529 /* RCTProgressViewManager.m */; }; + 13723B501A82FD3C00F88898 /* RCTStatusBarManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 13723B4F1A82FD3C00F88898 /* RCTStatusBarManager.m */; }; + 1372B70A1AB030C200659ED6 /* RCTAppState.m in Sources */ = {isa = PBXBuildFile; fileRef = 1372B7091AB030C200659ED6 /* RCTAppState.m */; }; + 1384E2081E806D4E00545659 /* RCTNativeModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 1384E2061E806D4E00545659 /* RCTNativeModule.h */; }; + 1384E2091E806D4E00545659 /* RCTNativeModule.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1384E2071E806D4E00545659 /* RCTNativeModule.mm */; }; + 1384E20A1E806D5700545659 /* RCTNativeModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 1384E2061E806D4E00545659 /* RCTNativeModule.h */; }; + 1384E20B1E806D5B00545659 /* RCTNativeModule.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1384E2071E806D4E00545659 /* RCTNativeModule.mm */; }; + 139D7E911E25C70B00323FB7 /* bignum-dtoa.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7E391E25C5A300323FB7 /* bignum-dtoa.cc */; }; + 139D7E931E25C70B00323FB7 /* bignum.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7E3B1E25C5A300323FB7 /* bignum.cc */; }; + 139D7E951E25C70B00323FB7 /* cached-powers.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7E3D1E25C5A300323FB7 /* cached-powers.cc */; }; + 139D7E971E25C70B00323FB7 /* diy-fp.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7E3F1E25C5A300323FB7 /* diy-fp.cc */; }; + 139D7E991E25C70B00323FB7 /* double-conversion.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7E411E25C5A300323FB7 /* double-conversion.cc */; }; + 139D7E9B1E25C70B00323FB7 /* fast-dtoa.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7E431E25C5A300323FB7 /* fast-dtoa.cc */; }; + 139D7E9D1E25C70B00323FB7 /* fixed-dtoa.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7E451E25C5A300323FB7 /* fixed-dtoa.cc */; }; + 139D7EA01E25C70B00323FB7 /* strtod.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7E481E25C5A300323FB7 /* strtod.cc */; }; + 139D7EA51E25C85300323FB7 /* bignum-dtoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D7E3A1E25C5A300323FB7 /* bignum-dtoa.h */; }; + 139D7EA61E25C85300323FB7 /* bignum.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D7E3C1E25C5A300323FB7 /* bignum.h */; }; + 139D7EA71E25C85300323FB7 /* cached-powers.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D7E3E1E25C5A300323FB7 /* cached-powers.h */; }; + 139D7EA81E25C85300323FB7 /* diy-fp.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D7E401E25C5A300323FB7 /* diy-fp.h */; }; + 139D7EA91E25C85300323FB7 /* double-conversion.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D7E421E25C5A300323FB7 /* double-conversion.h */; }; + 139D7EAA1E25C85300323FB7 /* fast-dtoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D7E441E25C5A300323FB7 /* fast-dtoa.h */; }; + 139D7EAB1E25C85300323FB7 /* fixed-dtoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D7E461E25C5A300323FB7 /* fixed-dtoa.h */; }; + 139D7EAC1E25C85300323FB7 /* ieee.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D7E471E25C5A300323FB7 /* ieee.h */; }; + 139D7EAD1E25C85300323FB7 /* strtod.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D7E491E25C5A300323FB7 /* strtod.h */; }; + 139D7EAE1E25C85300323FB7 /* utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D7E4A1E25C5A300323FB7 /* utils.h */; }; + 139D7F021E25DE1100323FB7 /* logging.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7EDA1E25DBDC00323FB7 /* logging.cc */; }; + 139D7F031E25DE1100323FB7 /* raw_logging.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7EDB1E25DBDC00323FB7 /* raw_logging.cc */; }; + 139D7F041E25DE1100323FB7 /* signalhandler.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7EDC1E25DBDC00323FB7 /* signalhandler.cc */; }; + 139D7F051E25DE1100323FB7 /* symbolize.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7EDE1E25DBDC00323FB7 /* symbolize.cc */; }; + 139D7F061E25DE1100323FB7 /* utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7EE01E25DBDC00323FB7 /* utilities.cc */; }; + 139D7F071E25DE1100323FB7 /* vlog_is_on.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7EE21E25DBDC00323FB7 /* vlog_is_on.cc */; }; + 139D7F091E25DE3700323FB7 /* demangle.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7F081E25DE3700323FB7 /* demangle.cc */; }; + 139D84B01E273B5600323FB7 /* Conv.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 139D849F1E273B5600323FB7 /* Conv.cpp */; }; + 139D84B11E273B5600323FB7 /* dynamic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 139D84A21E273B5600323FB7 /* dynamic.cpp */; }; + 139D84B31E273B5600323FB7 /* json.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 139D84A71E273B5600323FB7 /* json.cpp */; }; + 13A0C2891B74F71200B29F6F /* RCTDevLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 13A0C2861B74F71200B29F6F /* RCTDevLoadingView.m */; }; + 13A0C28A1B74F71200B29F6F /* RCTDevMenu.m in Sources */ = {isa = PBXBuildFile; fileRef = 13A0C2881B74F71200B29F6F /* RCTDevMenu.m */; }; + 13A1F71E1A75392D00D3D453 /* RCTKeyCommands.m in Sources */ = {isa = PBXBuildFile; fileRef = 13A1F71D1A75392D00D3D453 /* RCTKeyCommands.m */; }; + 13A6E20E1C19AA0C00845B82 /* RCTParserUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 13A6E20D1C19AA0C00845B82 /* RCTParserUtils.m */; }; + 13AB90C11B6FA36700713B4F /* RCTComponentData.m in Sources */ = {isa = PBXBuildFile; fileRef = 13AB90C01B6FA36700713B4F /* RCTComponentData.m */; }; + 13AF20451AE707F9005F5298 /* RCTSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = 13AF20441AE707F9005F5298 /* RCTSlider.m */; }; + 13B07FEF1A69327A00A75B9A /* RCTAlertManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FE81A69327A00A75B9A /* RCTAlertManager.m */; }; + 13B07FF01A69327A00A75B9A /* RCTExceptionsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FEA1A69327A00A75B9A /* RCTExceptionsManager.m */; }; + 13B07FF21A69327A00A75B9A /* RCTTiming.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FEE1A69327A00A75B9A /* RCTTiming.m */; }; + 13B080201A69489C00A75B9A /* RCTActivityIndicatorViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B080191A69489C00A75B9A /* RCTActivityIndicatorViewManager.m */; }; + 13B080261A694A8400A75B9A /* RCTWrapperViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B080241A694A8400A75B9A /* RCTWrapperViewController.m */; }; + 13BB3D021BECD54500932C10 /* RCTImageSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 13BB3D011BECD54500932C10 /* RCTImageSource.m */; }; + 13BCE8091C99CB9D00DD7AAD /* RCTRootShadowView.m in Sources */ = {isa = PBXBuildFile; fileRef = 13BCE8081C99CB9D00DD7AAD /* RCTRootShadowView.m */; }; + 13C156051AB1A2840079392D /* RCTWebView.m in Sources */ = {isa = PBXBuildFile; fileRef = 13C156021AB1A2840079392D /* RCTWebView.m */; }; + 13C156061AB1A2840079392D /* RCTWebViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 13C156041AB1A2840079392D /* RCTWebViewManager.m */; }; + 13CC8A821B17642100940AE7 /* RCTBorderDrawing.m in Sources */ = {isa = PBXBuildFile; fileRef = 13CC8A811B17642100940AE7 /* RCTBorderDrawing.m */; }; + 13D033631C1837FE0021DC29 /* RCTClipboard.m in Sources */ = {isa = PBXBuildFile; fileRef = 13D033621C1837FE0021DC29 /* RCTClipboard.m */; }; + 13D9FEEB1CDCCECF00158BD7 /* RCTEventEmitter.m in Sources */ = {isa = PBXBuildFile; fileRef = 13D9FEEA1CDCCECF00158BD7 /* RCTEventEmitter.m */; }; + 13D9FEEE1CDCD93000158BD7 /* RCTKeyboardObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 13D9FEED1CDCD93000158BD7 /* RCTKeyboardObserver.m */; }; + 13DA8A312097A90B00276ED4 /* ReactMarker.h in Headers */ = {isa = PBXBuildFile; fileRef = 13DA8A2F2097A90A00276ED4 /* ReactMarker.h */; }; + 13DA8A322097A90B00276ED4 /* ReactMarker.h in Headers */ = {isa = PBXBuildFile; fileRef = 13DA8A2F2097A90A00276ED4 /* ReactMarker.h */; }; + 13DA8A332097A90B00276ED4 /* ReactMarker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 13DA8A302097A90B00276ED4 /* ReactMarker.cpp */; }; + 13DA8A342097A90B00276ED4 /* ReactMarker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 13DA8A302097A90B00276ED4 /* ReactMarker.cpp */; }; + 13E0674A1A70F434002CDEE1 /* RCTUIManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 13E067491A70F434002CDEE1 /* RCTUIManager.m */; }; + 13E067561A70F44B002CDEE1 /* RCTViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 13E0674E1A70F44B002CDEE1 /* RCTViewManager.m */; }; + 13E067571A70F44B002CDEE1 /* RCTView.m in Sources */ = {isa = PBXBuildFile; fileRef = 13E067501A70F44B002CDEE1 /* RCTView.m */; }; + 13E067591A70F44B002CDEE1 /* UIView+React.m in Sources */ = {isa = PBXBuildFile; fileRef = 13E067541A70F44B002CDEE1 /* UIView+React.m */; }; + 13E41EEB1C05CA0B00CD8DAC /* RCTProfileTrampoline-i386.S in Sources */ = {isa = PBXBuildFile; fileRef = 14BF717F1C04793D00C97D0C /* RCTProfileTrampoline-i386.S */; }; + 13F17A851B8493E5007D4C75 /* RCTRedBox.m in Sources */ = {isa = PBXBuildFile; fileRef = 13F17A841B8493E5007D4C75 /* RCTRedBox.m */; }; + 13F887581E2971D400C3C7A1 /* Demangle.h in Sources */ = {isa = PBXBuildFile; fileRef = 13F887521E2971C500C3C7A1 /* Demangle.h */; }; + 13F8875A1E2971D400C3C7A1 /* Unicode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 13F887541E2971C500C3C7A1 /* Unicode.cpp */; }; + 13F8876E1E29726200C3C7A1 /* CxxNativeModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D92B0A81E03699D0018521A /* CxxNativeModule.cpp */; }; + 13F887701E29726200C3C7A1 /* Instance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D92B0AE1E03699D0018521A /* Instance.cpp */; }; + 13F887711E29726200C3C7A1 /* JSBundleType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AC70D2EB1DE48A22002E6351 /* JSBundleType.cpp */; }; + 13F8877B1E29726200C3C7A1 /* JSIndexedRAMBundle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D92B0C61E03699D0018521A /* JSIndexedRAMBundle.cpp */; }; + 13F8877C1E29726200C3C7A1 /* MethodCall.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D92B0CA1E03699D0018521A /* MethodCall.cpp */; }; + 13F8877D1E29726200C3C7A1 /* ModuleRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D92B0CC1E03699D0018521A /* ModuleRegistry.cpp */; }; + 13F8877E1E29726200C3C7A1 /* NativeToJsBridge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D92B0CF1E03699D0018521A /* NativeToJsBridge.cpp */; }; + 13F887801E29726200C3C7A1 /* SampleCxxModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D92B0D31E03699D0018521A /* SampleCxxModule.cpp */; }; + 13F887821E29726300C3C7A1 /* CxxNativeModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D92B0A81E03699D0018521A /* CxxNativeModule.cpp */; }; + 13F887841E29726300C3C7A1 /* Instance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D92B0AE1E03699D0018521A /* Instance.cpp */; }; + 13F8878E1E29726300C3C7A1 /* JSIndexedRAMBundle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D92B0C61E03699D0018521A /* JSIndexedRAMBundle.cpp */; }; + 13F8878F1E29726300C3C7A1 /* MethodCall.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D92B0CA1E03699D0018521A /* MethodCall.cpp */; }; + 13F887901E29726300C3C7A1 /* ModuleRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D92B0CC1E03699D0018521A /* ModuleRegistry.cpp */; }; + 13F887911E29726300C3C7A1 /* NativeToJsBridge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D92B0CF1E03699D0018521A /* NativeToJsBridge.cpp */; }; + 13F887931E29726300C3C7A1 /* SampleCxxModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D92B0D31E03699D0018521A /* SampleCxxModule.cpp */; }; + 142014191B32094000CC17BA /* RCTPerformanceLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 142014171B32094000CC17BA /* RCTPerformanceLogger.m */; }; + 1450FF861BCFF28A00208362 /* RCTProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = 1450FF811BCFF28A00208362 /* RCTProfile.m */; }; + 1450FF871BCFF28A00208362 /* RCTProfileTrampoline-arm.S in Sources */ = {isa = PBXBuildFile; fileRef = 1450FF821BCFF28A00208362 /* RCTProfileTrampoline-arm.S */; }; + 1450FF881BCFF28A00208362 /* RCTProfileTrampoline-arm64.S in Sources */ = {isa = PBXBuildFile; fileRef = 1450FF831BCFF28A00208362 /* RCTProfileTrampoline-arm64.S */; }; + 1450FF8A1BCFF28A00208362 /* RCTProfileTrampoline-x86_64.S in Sources */ = {isa = PBXBuildFile; fileRef = 1450FF851BCFF28A00208362 /* RCTProfileTrampoline-x86_64.S */; }; + 14C2CA741B3AC64300E6CBB2 /* RCTModuleData.mm in Sources */ = {isa = PBXBuildFile; fileRef = 14C2CA731B3AC64300E6CBB2 /* RCTModuleData.mm */; }; + 14C2CA761B3AC64F00E6CBB2 /* RCTFrameUpdate.m in Sources */ = {isa = PBXBuildFile; fileRef = 14C2CA751B3AC64F00E6CBB2 /* RCTFrameUpdate.m */; }; + 14F3620D1AABD06A001CE568 /* RCTSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = 14F362081AABD06A001CE568 /* RCTSwitch.m */; }; + 14F3620E1AABD06A001CE568 /* RCTSwitchManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 14F3620A1AABD06A001CE568 /* RCTSwitchManager.m */; }; + 14F484561AABFCE100FDF6B9 /* RCTSliderManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 14F484551AABFCE100FDF6B9 /* RCTSliderManager.m */; }; + 14F7A0EC1BDA3B3C003C6C10 /* RCTPerfMonitor.m in Sources */ = {isa = PBXBuildFile; fileRef = 14F7A0EB1BDA3B3C003C6C10 /* RCTPerfMonitor.m */; }; + 14F7A0F01BDA714B003C6C10 /* RCTFPSGraph.m in Sources */ = {isa = PBXBuildFile; fileRef = 14F7A0EF1BDA714B003C6C10 /* RCTFPSGraph.m */; }; + 191E3EBE1C29D9AF00C180A6 /* RCTRefreshControlManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 191E3EBD1C29D9AF00C180A6 /* RCTRefreshControlManager.m */; }; + 191E3EC11C29DC3800C180A6 /* RCTRefreshControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 191E3EC01C29DC3800C180A6 /* RCTRefreshControl.m */; }; + 199B8A6F1F44DB16005DEF67 /* RCTVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 199B8A6E1F44DB16005DEF67 /* RCTVersion.h */; }; + 199B8A761F44DEDA005DEF67 /* RCTVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 199B8A6E1F44DB16005DEF67 /* RCTVersion.h */; }; + 19F61BFA1E8495CD00571D81 /* bignum-dtoa.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 139D7E3A1E25C5A300323FB7 /* bignum-dtoa.h */; }; + 19F61BFB1E8495CD00571D81 /* bignum.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 139D7E3C1E25C5A300323FB7 /* bignum.h */; }; + 19F61BFC1E8495CD00571D81 /* cached-powers.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 139D7E3E1E25C5A300323FB7 /* cached-powers.h */; }; + 19F61BFD1E8495CD00571D81 /* diy-fp.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 139D7E401E25C5A300323FB7 /* diy-fp.h */; }; + 19F61BFE1E8495CD00571D81 /* double-conversion.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 139D7E421E25C5A300323FB7 /* double-conversion.h */; }; + 19F61BFF1E8495CD00571D81 /* fast-dtoa.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 139D7E441E25C5A300323FB7 /* fast-dtoa.h */; }; + 19F61C001E8495CD00571D81 /* fixed-dtoa.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 139D7E461E25C5A300323FB7 /* fixed-dtoa.h */; }; + 19F61C011E8495CD00571D81 /* ieee.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 139D7E471E25C5A300323FB7 /* ieee.h */; }; + 19F61C021E8495CD00571D81 /* strtod.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 139D7E491E25C5A300323FB7 /* strtod.h */; }; + 19F61C031E8495CD00571D81 /* utils.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 139D7E4A1E25C5A300323FB7 /* utils.h */; }; + 27595AA41E575C7800CCE2B1 /* CxxModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0A71E03699D0018521A /* CxxModule.h */; }; + 27595AA51E575C7800CCE2B1 /* CxxNativeModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0A91E03699D0018521A /* CxxNativeModule.h */; }; + 27595AA61E575C7800CCE2B1 /* JSExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0AB1E03699D0018521A /* JSExecutor.h */; }; + 27595AA91E575C7800CCE2B1 /* Instance.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0AF1E03699D0018521A /* Instance.h */; }; + 27595AAA1E575C7800CCE2B1 /* JsArgumentHelpers-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0B01E03699D0018521A /* JsArgumentHelpers-inl.h */; }; + 27595AAB1E575C7800CCE2B1 /* JsArgumentHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0B11E03699D0018521A /* JsArgumentHelpers.h */; }; + 27595AB51E575C7800CCE2B1 /* JSIndexedRAMBundle.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0C71E03699D0018521A /* JSIndexedRAMBundle.h */; }; + 27595AB61E575C7800CCE2B1 /* MessageQueueThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0C91E03699D0018521A /* MessageQueueThread.h */; }; + 27595AB71E575C7800CCE2B1 /* MethodCall.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0CB1E03699D0018521A /* MethodCall.h */; }; + 27595AB81E575C7800CCE2B1 /* ModuleRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0CD1E03699D0018521A /* ModuleRegistry.h */; }; + 27595AB91E575C7800CCE2B1 /* NativeModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0CE1E03699D0018521A /* NativeModule.h */; }; + 27595ABA1E575C7800CCE2B1 /* NativeToJsBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0D01E03699D0018521A /* NativeToJsBridge.h */; }; + 27595ABC1E575C7800CCE2B1 /* SampleCxxModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0D41E03699D0018521A /* SampleCxxModule.h */; }; + 27595ABD1E575C7800CCE2B1 /* SystraceSection.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0D51E03699D0018521A /* SystraceSection.h */; }; + 27595ABF1E575C7800CCE2B1 /* CxxModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0A71E03699D0018521A /* CxxModule.h */; }; + 27595AC01E575C7800CCE2B1 /* CxxNativeModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0A91E03699D0018521A /* CxxNativeModule.h */; }; + 27595AC11E575C7800CCE2B1 /* JSExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0AB1E03699D0018521A /* JSExecutor.h */; }; + 27595AC41E575C7800CCE2B1 /* Instance.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0AF1E03699D0018521A /* Instance.h */; }; + 27595AC51E575C7800CCE2B1 /* JsArgumentHelpers-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0B01E03699D0018521A /* JsArgumentHelpers-inl.h */; }; + 27595AC61E575C7800CCE2B1 /* JsArgumentHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0B11E03699D0018521A /* JsArgumentHelpers.h */; }; + 27595AD01E575C7800CCE2B1 /* JSIndexedRAMBundle.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0C71E03699D0018521A /* JSIndexedRAMBundle.h */; }; + 27595AD11E575C7800CCE2B1 /* MessageQueueThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0C91E03699D0018521A /* MessageQueueThread.h */; }; + 27595AD21E575C7800CCE2B1 /* MethodCall.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0CB1E03699D0018521A /* MethodCall.h */; }; + 27595AD31E575C7800CCE2B1 /* ModuleRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0CD1E03699D0018521A /* ModuleRegistry.h */; }; + 27595AD41E575C7800CCE2B1 /* NativeModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0CE1E03699D0018521A /* NativeModule.h */; }; + 27595AD51E575C7800CCE2B1 /* NativeToJsBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0D01E03699D0018521A /* NativeToJsBridge.h */; }; + 27595AD71E575C7800CCE2B1 /* SampleCxxModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0D41E03699D0018521A /* SampleCxxModule.h */; }; + 27595AD81E575C7800CCE2B1 /* SystraceSection.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0D51E03699D0018521A /* SystraceSection.h */; }; + 2D0EB9F32021067800CAF88A /* RCTUIUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = F1EFDA4E201F660F00EE6E4C /* RCTUIUtils.m */; }; + 2D16E68E1FA4FD3900B85C8A /* RCTTVNavigationEventEmitter.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D0B842D1EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.h */; }; + 2D1D83CE1F74E2DA00615550 /* libdouble-conversion.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D383D621EBD27B9005632C8 /* libdouble-conversion.a */; }; + 2D3B5E931D9B087300451313 /* RCTErrorInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EDCA8A41D3591E700450C31 /* RCTErrorInfo.m */; }; + 2D3B5E941D9B087900451313 /* RCTBundleURLProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 68EFE4ED1CF6EB3900A1DE13 /* RCTBundleURLProvider.m */; }; + 2D3B5E951D9B087C00451313 /* RCTAssert.m in Sources */ = {isa = PBXBuildFile; fileRef = 83CBBA4B1A601E3B00E9B192 /* RCTAssert.m */; }; + 2D3B5E971D9B089000451313 /* RCTBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 83CBBA5F1A601EAA00E9B192 /* RCTBridge.m */; }; + 2D3B5E981D9B089500451313 /* RCTConvert.m in Sources */ = {isa = PBXBuildFile; fileRef = 83CBBACB1A6023D300E9B192 /* RCTConvert.m */; }; + 2D3B5E991D9B089A00451313 /* RCTDisplayLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1E68D91CABD13900DD7465 /* RCTDisplayLink.m */; }; + 2D3B5E9A1D9B089D00451313 /* RCTEventDispatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 83CBBA661A601EF300E9B192 /* RCTEventDispatcher.m */; }; + 2D3B5E9B1D9B08A000451313 /* RCTFrameUpdate.m in Sources */ = {isa = PBXBuildFile; fileRef = 14C2CA751B3AC64F00E6CBB2 /* RCTFrameUpdate.m */; }; + 2D3B5E9C1D9B08A300451313 /* RCTImageSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 13BB3D011BECD54500932C10 /* RCTImageSource.m */; }; + 2D3B5E9E1D9B08AD00451313 /* RCTJSStackFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 008341F41D1DB34400876D9A /* RCTJSStackFrame.m */; }; + 2D3B5E9F1D9B08AF00451313 /* RCTKeyCommands.m in Sources */ = {isa = PBXBuildFile; fileRef = 13A1F71D1A75392D00D3D453 /* RCTKeyCommands.m */; }; + 2D3B5EA01D9B08B200451313 /* RCTLog.mm in Sources */ = {isa = PBXBuildFile; fileRef = 83CBBA4E1A601E3B00E9B192 /* RCTLog.mm */; }; + 2D3B5EA11D9B08B600451313 /* RCTModuleData.mm in Sources */ = {isa = PBXBuildFile; fileRef = 14C2CA731B3AC64300E6CBB2 /* RCTModuleData.mm */; }; + 2D3B5EA31D9B08BE00451313 /* RCTParserUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 13A6E20D1C19AA0C00845B82 /* RCTParserUtils.m */; }; + 2D3B5EA41D9B08C200451313 /* RCTPerformanceLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 142014171B32094000CC17BA /* RCTPerformanceLogger.m */; }; + 2D3B5EA51D9B08C700451313 /* RCTRootView.m in Sources */ = {isa = PBXBuildFile; fileRef = 830A229D1A66C68A008503DA /* RCTRootView.m */; }; + 2D3B5EA61D9B08CA00451313 /* RCTTouchEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 391E86A21C623EC800009732 /* RCTTouchEvent.m */; }; + 2D3B5EA71D9B08CE00451313 /* RCTTouchHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 83CBBA971A6020BB00E9B192 /* RCTTouchHandler.m */; }; + 2D3B5EA81D9B08D300451313 /* RCTUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 83CBBA501A601E3B00E9B192 /* RCTUtils.m */; }; + 2D3B5EAE1D9B08F800451313 /* RCTEventEmitter.m in Sources */ = {isa = PBXBuildFile; fileRef = 13D9FEEA1CDCCECF00158BD7 /* RCTEventEmitter.m */; }; + 2D3B5EAF1D9B08FB00451313 /* RCTAccessibilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E9B20B7A1B500126007A2DA7 /* RCTAccessibilityManager.m */; }; + 2D3B5EB01D9B08FE00451313 /* RCTAlertManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FE81A69327A00A75B9A /* RCTAlertManager.m */; }; + 2D3B5EB11D9B090100451313 /* RCTAppState.m in Sources */ = {isa = PBXBuildFile; fileRef = 1372B7091AB030C200659ED6 /* RCTAppState.m */; }; + 2D3B5EB21D9B090300451313 /* RCTAsyncLocalStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 58114A4E1AAE93D500E7D092 /* RCTAsyncLocalStorage.m */; }; + 2D3B5EB41D9B090A00451313 /* RCTDevLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 13A0C2861B74F71200B29F6F /* RCTDevLoadingView.m */; }; + 2D3B5EB51D9B091100451313 /* RCTDevMenu.m in Sources */ = {isa = PBXBuildFile; fileRef = 13A0C2881B74F71200B29F6F /* RCTDevMenu.m */; }; + 2D3B5EB61D9B091400451313 /* RCTExceptionsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FEA1A69327A00A75B9A /* RCTExceptionsManager.m */; }; + 2D3B5EB71D9B091800451313 /* RCTRedBox.m in Sources */ = {isa = PBXBuildFile; fileRef = 13F17A841B8493E5007D4C75 /* RCTRedBox.m */; }; + 2D3B5EB81D9B091B00451313 /* RCTSourceCode.m in Sources */ = {isa = PBXBuildFile; fileRef = 000E6CEA1AB0E980000CDF4D /* RCTSourceCode.m */; }; + 2D3B5EBA1D9B092100451313 /* RCTI18nUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 352DCFEF1D19F4C20056D623 /* RCTI18nUtil.m */; }; + 2D3B5EBB1D9B092300451313 /* RCTI18nManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B233E6E91D2D845D00BC68BA /* RCTI18nManager.m */; }; + 2D3B5EBC1D9B092600451313 /* RCTKeyboardObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 13D9FEED1CDCD93000158BD7 /* RCTKeyboardObserver.m */; }; + 2D3B5EBD1D9B092A00451313 /* RCTTiming.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FEE1A69327A00A75B9A /* RCTTiming.m */; }; + 2D3B5EBE1D9B092D00451313 /* RCTUIManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 13E067491A70F434002CDEE1 /* RCTUIManager.m */; }; + 2D3B5EC01D9B093600451313 /* RCTPerfMonitor.m in Sources */ = {isa = PBXBuildFile; fileRef = 14F7A0EB1BDA3B3C003C6C10 /* RCTPerfMonitor.m */; }; + 2D3B5EC11D9B093900451313 /* RCTFPSGraph.m in Sources */ = {isa = PBXBuildFile; fileRef = 14F7A0EF1BDA714B003C6C10 /* RCTFPSGraph.m */; }; + 2D3B5EC21D9B093B00451313 /* RCTProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = 1450FF811BCFF28A00208362 /* RCTProfile.m */; }; + 2D3B5EC31D9B094800451313 /* RCTProfileTrampoline-arm.S in Sources */ = {isa = PBXBuildFile; fileRef = 1450FF821BCFF28A00208362 /* RCTProfileTrampoline-arm.S */; }; + 2D3B5EC41D9B094B00451313 /* RCTProfileTrampoline-arm64.S in Sources */ = {isa = PBXBuildFile; fileRef = 1450FF831BCFF28A00208362 /* RCTProfileTrampoline-arm64.S */; }; + 2D3B5EC51D9B094D00451313 /* RCTProfileTrampoline-i386.S in Sources */ = {isa = PBXBuildFile; fileRef = 14BF717F1C04793D00C97D0C /* RCTProfileTrampoline-i386.S */; }; + 2D3B5EC61D9B095000451313 /* RCTProfileTrampoline-x86_64.S in Sources */ = {isa = PBXBuildFile; fileRef = 1450FF851BCFF28A00208362 /* RCTProfileTrampoline-x86_64.S */; }; + 2D3B5EC71D9B095600451313 /* RCTActivityIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = B95154311D1B34B200FE7B80 /* RCTActivityIndicatorView.m */; }; + 2D3B5EC81D9B095800451313 /* RCTActivityIndicatorViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B080191A69489C00A75B9A /* RCTActivityIndicatorViewManager.m */; }; + 2D3B5EC91D9B095C00451313 /* RCTBorderDrawing.m in Sources */ = {isa = PBXBuildFile; fileRef = 13CC8A811B17642100940AE7 /* RCTBorderDrawing.m */; }; + 2D3B5ECA1D9B095F00451313 /* RCTComponentData.m in Sources */ = {isa = PBXBuildFile; fileRef = 13AB90C01B6FA36700713B4F /* RCTComponentData.m */; }; + 2D3B5ECB1D9B096200451313 /* RCTConvert+CoreLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = 13456E921ADAD2DE009F94A7 /* RCTConvert+CoreLocation.m */; }; + 2D3B5ECF1D9B096F00451313 /* RCTFont.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3D37B5811D522B190042D5B5 /* RCTFont.mm */; }; + 2D3B5ED41D9B097D00451313 /* RCTModalHostView.m in Sources */ = {isa = PBXBuildFile; fileRef = 83A1FE8B1B62640A00BE0E65 /* RCTModalHostView.m */; }; + 2D3B5ED51D9B098000451313 /* RCTModalHostViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 83392EB21B6634E10013B15F /* RCTModalHostViewController.m */; }; + 2D3B5ED61D9B098400451313 /* RCTModalHostViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 83A1FE8E1B62643A00BE0E65 /* RCTModalHostViewManager.m */; }; + 2D3B5EDD1D9B09A300451313 /* RCTProgressViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 13513F3B1B1F43F400FCE529 /* RCTProgressViewManager.m */; }; + 2D3B5EE01D9B09AD00451313 /* RCTRootShadowView.m in Sources */ = {isa = PBXBuildFile; fileRef = 13BCE8081C99CB9D00DD7AAD /* RCTRootShadowView.m */; }; + 2D3B5EE31D9B09B700451313 /* RCTSegmentedControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 131B6AF11AF1093D00FFC3E0 /* RCTSegmentedControl.m */; }; + 2D3B5EE41D9B09BB00451313 /* RCTSegmentedControlManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 131B6AF31AF1093D00FFC3E0 /* RCTSegmentedControlManager.m */; }; + 2D3B5EEE1D9B09DA00451313 /* RCTView.m in Sources */ = {isa = PBXBuildFile; fileRef = 13E067501A70F44B002CDEE1 /* RCTView.m */; }; + 2D3B5EEF1D9B09DC00451313 /* RCTViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 13E0674E1A70F44B002CDEE1 /* RCTViewManager.m */; }; + 2D3B5EF01D9B09E300451313 /* RCTWrapperViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B080241A694A8400A75B9A /* RCTWrapperViewController.m */; }; + 2D3B5EF11D9B09E700451313 /* UIView+React.m in Sources */ = {isa = PBXBuildFile; fileRef = 13E067541A70F44B002CDEE1 /* UIView+React.m */; }; + 2D74EAFA1DAE9590003B751B /* RCTMultipartDataTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 006FC4131D9B20820057AAAD /* RCTMultipartDataTask.m */; }; + 2D8C2E331DA40441000EE098 /* RCTMultipartStreamReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 001BFCCF1D8381DE008E587E /* RCTMultipartStreamReader.m */; }; + 2DD0EFE11DA84F2800B0C975 /* RCTStatusBarManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 13723B4F1A82FD3C00F88898 /* RCTStatusBarManager.m */; }; + 352DCFF01D19F4C20056D623 /* RCTI18nUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 352DCFEF1D19F4C20056D623 /* RCTI18nUtil.m */; }; + 391E86A41C623EC800009732 /* RCTTouchEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 391E86A21C623EC800009732 /* RCTTouchEvent.m */; }; + 39C50FF92046EACF00CEE534 /* RCTVersion.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 199B8A6E1F44DB16005DEF67 /* RCTVersion.h */; }; + 39C50FFB2046EE3500CEE534 /* RCTVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = 39C50FFA2046EE3500CEE534 /* RCTVersion.m */; }; + 39C50FFC2046EE3500CEE534 /* RCTVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = 39C50FFA2046EE3500CEE534 /* RCTVersion.m */; }; + 3D05745A1DE5FFF500184BB4 /* RCTJavaScriptLoader.mm in Sources */ = {isa = PBXBuildFile; fileRef = AC70D2E81DE489E4002E6351 /* RCTJavaScriptLoader.mm */; }; + 3D0B84221EC0B3F600B2BD8E /* RCTResizeMode.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D1FA0851DE4F3A000E03CC6 /* RCTResizeMode.h */; }; + 3D0B84231EC0B40D00B2BD8E /* RCTImageLoader.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D1FA0831DE4F3A000E03CC6 /* RCTImageLoader.h */; }; + 3D0B84241EC0B40D00B2BD8E /* RCTImageStoreManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D1FA0841DE4F3A000E03CC6 /* RCTImageStoreManager.h */; }; + 3D0B84251EC0B42600B2BD8E /* RCTNetworking.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D1FA07A1DE4F2EA00E03CC6 /* RCTNetworking.h */; }; + 3D0B84261EC0B42600B2BD8E /* RCTNetworkTask.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D1FA07B1DE4F2EA00E03CC6 /* RCTNetworkTask.h */; }; + 3D0B84271EC0B45400B2BD8E /* RCTLinkingManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D1FA08B1DE4F4DD00E03CC6 /* RCTLinkingManager.h */; }; + 3D0B842A1EC0B49400B2BD8E /* RCTTVRemoteHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D0B84281EC0B49400B2BD8E /* RCTTVRemoteHandler.h */; }; + 3D0B842B1EC0B49400B2BD8E /* RCTTVRemoteHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D0B84291EC0B49400B2BD8E /* RCTTVRemoteHandler.m */; }; + 3D0B842C1EC0B4EA00B2BD8E /* RCTTVView.m in Sources */ = {isa = PBXBuildFile; fileRef = 130443D71E401AD800D93A67 /* RCTTVView.m */; }; + 3D0B842F1EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D0B842D1EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.h */; }; + 3D0B84301EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D0B842E1EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.m */; }; + 3D0E378A1F1CC40000DCAC9F /* RCTWebSocketModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D0E37891F1CC40000DCAC9F /* RCTWebSocketModule.h */; }; + 3D0E378E1F1CC59100DCAC9F /* RCTWebSocketModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D0E37891F1CC40000DCAC9F /* RCTWebSocketModule.h */; }; + 3D0E378F1F1CC5CF00DCAC9F /* RCTWebSocketModule.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D0E37891F1CC40000DCAC9F /* RCTWebSocketModule.h */; }; + 3D0E37901F1CC5E100DCAC9F /* RCTWebSocketModule.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D0E37891F1CC40000DCAC9F /* RCTWebSocketModule.h */; }; + 3D1E68DB1CABD13900DD7465 /* RCTDisplayLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1E68D91CABD13900DD7465 /* RCTDisplayLink.m */; }; + 3D302F241DF828F800D6DDAE /* RCTImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1FA0831DE4F3A000E03CC6 /* RCTImageLoader.h */; }; + 3D302F251DF828F800D6DDAE /* RCTImageStoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1FA0841DE4F3A000E03CC6 /* RCTImageStoreManager.h */; }; + 3D302F261DF828F800D6DDAE /* RCTResizeMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1FA0851DE4F3A000E03CC6 /* RCTResizeMode.h */; }; + 3D302F271DF828F800D6DDAE /* RCTLinkingManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1FA08B1DE4F4DD00E03CC6 /* RCTLinkingManager.h */; }; + 3D302F281DF828F800D6DDAE /* RCTNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1FA07A1DE4F2EA00E03CC6 /* RCTNetworking.h */; }; + 3D302F291DF828F800D6DDAE /* RCTNetworkTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1FA07B1DE4F2EA00E03CC6 /* RCTNetworkTask.h */; }; + 3D302F2A1DF828F800D6DDAE /* RCTPushNotificationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1FA08D1DE4F4EE00E03CC6 /* RCTPushNotificationManager.h */; }; + 3D302F2B1DF828F800D6DDAE /* RCTAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA4A1A601E3B00E9B192 /* RCTAssert.h */; }; + 3D302F2C1DF828F800D6DDAE /* RCTBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA5E1A601EAA00E9B192 /* RCTBridge.h */; }; + 3D302F2D1DF828F800D6DDAE /* RCTBridge+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 14A43DB81C1F849600794BC8 /* RCTBridge+Private.h */; }; + 3D302F2E1DF828F800D6DDAE /* RCTBridgeDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1482F9E61B55B927000ADFF3 /* RCTBridgeDelegate.h */; }; + 3D302F2F1DF828F800D6DDAE /* RCTBridgeMethod.h in Headers */ = {isa = PBXBuildFile; fileRef = 13AFBCA11C07287B00BBAEAA /* RCTBridgeMethod.h */; }; + 3D302F301DF828F800D6DDAE /* RCTBridgeModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 830213F31A654E0800B993E6 /* RCTBridgeModule.h */; }; + 3D302F311DF828F800D6DDAE /* RCTBundleURLProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 68EFE4EC1CF6EB3000A1DE13 /* RCTBundleURLProvider.h */; }; + 3D302F321DF828F800D6DDAE /* RCTConvert.h in Headers */ = {isa = PBXBuildFile; fileRef = 83CBBACA1A6023D300E9B192 /* RCTConvert.h */; }; + 3D302F331DF828F800D6DDAE /* RCTDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 13AF1F851AE6E777005F5298 /* RCTDefines.h */; }; + 3D302F341DF828F800D6DDAE /* RCTDisplayLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1E68D81CABD13900DD7465 /* RCTDisplayLink.h */; }; + 3D302F351DF828F800D6DDAE /* RCTErrorCustomizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EDCA8A21D3591E700450C31 /* RCTErrorCustomizer.h */; }; + 3D302F361DF828F800D6DDAE /* RCTErrorInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EDCA8A31D3591E700450C31 /* RCTErrorInfo.h */; }; + 3D302F371DF828F800D6DDAE /* RCTEventDispatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA651A601EF300E9B192 /* RCTEventDispatcher.h */; }; + 3D302F381DF828F800D6DDAE /* RCTFrameUpdate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1436DD071ADE7AA000A5ED7D /* RCTFrameUpdate.h */; }; + 3D302F391DF828F800D6DDAE /* RCTImageSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 13BB3D001BECD54500932C10 /* RCTImageSource.h */; }; + 3D302F3A1DF828F800D6DDAE /* RCTInvalidating.h in Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA4C1A601E3B00E9B192 /* RCTInvalidating.h */; }; + 3D302F3B1DF828F800D6DDAE /* RCTJavaScriptExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA631A601ECA00E9B192 /* RCTJavaScriptExecutor.h */; }; + 3D302F3C1DF828F800D6DDAE /* RCTJavaScriptLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 14200DA81AC179B3008EE6BA /* RCTJavaScriptLoader.h */; }; + 3D302F3D1DF828F800D6DDAE /* RCTJSStackFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 008341F51D1DB34400876D9A /* RCTJSStackFrame.h */; }; + 3D302F3E1DF828F800D6DDAE /* RCTKeyCommands.h in Headers */ = {isa = PBXBuildFile; fileRef = 13A1F71C1A75392D00D3D453 /* RCTKeyCommands.h */; }; + 3D302F3F1DF828F800D6DDAE /* RCTLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA4D1A601E3B00E9B192 /* RCTLog.h */; }; + 3D302F401DF828F800D6DDAE /* RCTModuleData.h in Headers */ = {isa = PBXBuildFile; fileRef = 14C2CA721B3AC64300E6CBB2 /* RCTModuleData.h */; }; + 3D302F411DF828F800D6DDAE /* RCTModuleMethod.h in Headers */ = {isa = PBXBuildFile; fileRef = 14C2CA6F1B3AC63800E6CBB2 /* RCTModuleMethod.h */; }; + 3D302F421DF828F800D6DDAE /* RCTMultipartDataTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 006FC4121D9B20820057AAAD /* RCTMultipartDataTask.h */; }; + 3D302F431DF828F800D6DDAE /* RCTMultipartStreamReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 001BFCCE1D8381DE008E587E /* RCTMultipartStreamReader.h */; }; + 3D302F441DF828F800D6DDAE /* RCTNullability.h in Headers */ = {isa = PBXBuildFile; fileRef = 13A6E20F1C19ABC700845B82 /* RCTNullability.h */; }; + 3D302F451DF828F800D6DDAE /* RCTParserUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 13A6E20C1C19AA0C00845B82 /* RCTParserUtils.h */; }; + 3D302F461DF828F800D6DDAE /* RCTPerformanceLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 142014181B32094000CC17BA /* RCTPerformanceLogger.h */; }; + 3D302F471DF828F800D6DDAE /* RCTPlatform.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D7749421DC1065C007EC8D8 /* RCTPlatform.h */; }; + 3D302F481DF828F800D6DDAE /* RCTRootView.h in Headers */ = {isa = PBXBuildFile; fileRef = 830A229C1A66C68A008503DA /* RCTRootView.h */; }; + 3D302F491DF828F800D6DDAE /* RCTRootViewDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 13AFBCA21C07287B00BBAEAA /* RCTRootViewDelegate.h */; }; + 3D302F4A1DF828F800D6DDAE /* RCTRootViewInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A15FB0C1BDF663500531DFB /* RCTRootViewInternal.h */; }; + 3D302F4B1DF828F800D6DDAE /* RCTTouchEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 391E86A31C623EC800009732 /* RCTTouchEvent.h */; }; + 3D302F4C1DF828F800D6DDAE /* RCTTouchHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA961A6020BB00E9B192 /* RCTTouchHandler.h */; }; + 3D302F4D1DF828F800D6DDAE /* RCTURLRequestDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1345A83A1B265A0E00583190 /* RCTURLRequestDelegate.h */; }; + 3D302F4E1DF828F800D6DDAE /* RCTURLRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 1345A83B1B265A0E00583190 /* RCTURLRequestHandler.h */; }; + 3D302F4F1DF828F800D6DDAE /* RCTUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA4F1A601E3B00E9B192 /* RCTUtils.h */; }; + 3D302F551DF828F800D6DDAE /* RCTAccessibilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E9B20B791B500126007A2DA7 /* RCTAccessibilityManager.h */; }; + 3D302F561DF828F800D6DDAE /* RCTAlertManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 13B07FE71A69327A00A75B9A /* RCTAlertManager.h */; }; + 3D302F571DF828F800D6DDAE /* RCTAppState.h in Headers */ = {isa = PBXBuildFile; fileRef = 1372B7081AB030C200659ED6 /* RCTAppState.h */; }; + 3D302F581DF828F800D6DDAE /* RCTAsyncLocalStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 58114A4F1AAE93D500E7D092 /* RCTAsyncLocalStorage.h */; }; + 3D302F591DF828F800D6DDAE /* RCTClipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 13D033611C1837FE0021DC29 /* RCTClipboard.h */; }; + 3D302F5A1DF828F800D6DDAE /* RCTDevLoadingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 13A0C2851B74F71200B29F6F /* RCTDevLoadingView.h */; }; + 3D302F5B1DF828F800D6DDAE /* RCTDevMenu.h in Headers */ = {isa = PBXBuildFile; fileRef = 13A0C2871B74F71200B29F6F /* RCTDevMenu.h */; }; + 3D302F5C1DF828F800D6DDAE /* RCTEventEmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 13D9FEE91CDCCECF00158BD7 /* RCTEventEmitter.h */; }; + 3D302F5D1DF828F800D6DDAE /* RCTExceptionsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 13B07FE91A69327A00A75B9A /* RCTExceptionsManager.h */; }; + 3D302F5E1DF828F800D6DDAE /* RCTI18nManager.h in Headers */ = {isa = PBXBuildFile; fileRef = B233E6E81D2D843200BC68BA /* RCTI18nManager.h */; }; + 3D302F5F1DF828F800D6DDAE /* RCTI18nUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 352DCFEE1D19F4C20056D623 /* RCTI18nUtil.h */; }; + 3D302F601DF828F800D6DDAE /* RCTKeyboardObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 13D9FEEC1CDCD93000158BD7 /* RCTKeyboardObserver.h */; }; + 3D302F611DF828F800D6DDAE /* RCTRedBox.h in Headers */ = {isa = PBXBuildFile; fileRef = 13F17A831B8493E5007D4C75 /* RCTRedBox.h */; }; + 3D302F621DF828F800D6DDAE /* RCTSourceCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 000E6CE91AB0E97F000CDF4D /* RCTSourceCode.h */; }; + 3D302F631DF828F800D6DDAE /* RCTStatusBarManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 13723B4E1A82FD3C00F88898 /* RCTStatusBarManager.h */; }; + 3D302F641DF828F800D6DDAE /* RCTTiming.h in Headers */ = {isa = PBXBuildFile; fileRef = 13B07FED1A69327A00A75B9A /* RCTTiming.h */; }; + 3D302F651DF828F800D6DDAE /* RCTUIManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 13E067481A70F434002CDEE1 /* RCTUIManager.h */; }; + 3D302F661DF828F800D6DDAE /* RCTFPSGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = 14F7A0EE1BDA714B003C6C10 /* RCTFPSGraph.h */; }; + 3D302F681DF828F800D6DDAE /* RCTMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 14BF71811C04795500C97D0C /* RCTMacros.h */; }; + 3D302F691DF828F800D6DDAE /* RCTProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 1450FF801BCFF28A00208362 /* RCTProfile.h */; }; + 3D302F6A1DF828F800D6DDAE /* RCTActivityIndicatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = B95154301D1B34B200FE7B80 /* RCTActivityIndicatorView.h */; }; + 3D302F6B1DF828F800D6DDAE /* RCTActivityIndicatorViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 13B080181A69489C00A75B9A /* RCTActivityIndicatorViewManager.h */; }; + 3D302F6C1DF828F800D6DDAE /* RCTAnimationType.h in Headers */ = {isa = PBXBuildFile; fileRef = 13442BF21AA90E0B0037E5B0 /* RCTAnimationType.h */; }; + 3D302F6D1DF828F800D6DDAE /* RCTAutoInsetsProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 13C325261AA63B6A0048765F /* RCTAutoInsetsProtocol.h */; }; + 3D302F6E1DF828F800D6DDAE /* RCTBorderDrawing.h in Headers */ = {isa = PBXBuildFile; fileRef = 13CC8A801B17642100940AE7 /* RCTBorderDrawing.h */; }; + 3D302F6F1DF828F800D6DDAE /* RCTBorderStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = ACDD3FDA1BC7430D00E7DE33 /* RCTBorderStyle.h */; }; + 3D302F701DF828F800D6DDAE /* RCTComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 13C325281AA63B6A0048765F /* RCTComponent.h */; }; + 3D302F711DF828F800D6DDAE /* RCTComponentData.h in Headers */ = {isa = PBXBuildFile; fileRef = 13AB90BF1B6FA36700713B4F /* RCTComponentData.h */; }; + 3D302F721DF828F800D6DDAE /* RCTConvert+CoreLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 13456E911ADAD2DE009F94A7 /* RCTConvert+CoreLocation.h */; }; + 3D302F761DF828F800D6DDAE /* RCTFont.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D37B5801D522B190042D5B5 /* RCTFont.h */; }; + 3D302F7B1DF828F800D6DDAE /* RCTModalHostView.h in Headers */ = {isa = PBXBuildFile; fileRef = 83A1FE8A1B62640A00BE0E65 /* RCTModalHostView.h */; }; + 3D302F7C1DF828F800D6DDAE /* RCTModalHostViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 83392EB11B6634E10013B15F /* RCTModalHostViewController.h */; }; + 3D302F7D1DF828F800D6DDAE /* RCTModalHostViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 83A1FE8D1B62643A00BE0E65 /* RCTModalHostViewManager.h */; }; + 3D302F841DF828F800D6DDAE /* RCTPointerEvents.h in Headers */ = {isa = PBXBuildFile; fileRef = 13442BF31AA90E0B0037E5B0 /* RCTPointerEvents.h */; }; + 3D302F851DF828F800D6DDAE /* RCTProgressViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 13513F3A1B1F43F400FCE529 /* RCTProgressViewManager.h */; }; + 3D302F861DF828F800D6DDAE /* RCTRefreshControl.h in Headers */ = {isa = PBXBuildFile; fileRef = 191E3EBF1C29DC3800C180A6 /* RCTRefreshControl.h */; }; + 3D302F871DF828F800D6DDAE /* RCTRefreshControlManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 191E3EBC1C29D9AF00C180A6 /* RCTRefreshControlManager.h */; }; + 3D302F881DF828F800D6DDAE /* RCTRootShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = 13BCE8071C99CB9D00DD7AAD /* RCTRootShadowView.h */; }; + 3D302F8C1DF828F800D6DDAE /* RCTSegmentedControl.h in Headers */ = {isa = PBXBuildFile; fileRef = 131B6AF01AF1093D00FFC3E0 /* RCTSegmentedControl.h */; }; + 3D302F8D1DF828F800D6DDAE /* RCTSegmentedControlManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 131B6AF21AF1093D00FFC3E0 /* RCTSegmentedControlManager.h */; }; + 3D302F8E1DF828F800D6DDAE /* RCTShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = 13E0674B1A70F44B002CDEE1 /* RCTShadowView.h */; }; + 3D302F8F1DF828F800D6DDAE /* RCTSlider.h in Headers */ = {isa = PBXBuildFile; fileRef = 13AF20431AE707F8005F5298 /* RCTSlider.h */; }; + 3D302F901DF828F800D6DDAE /* RCTSliderManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 14F484541AABFCE100FDF6B9 /* RCTSliderManager.h */; }; + 3D302F911DF828F800D6DDAE /* RCTSwitch.h in Headers */ = {isa = PBXBuildFile; fileRef = 14F362071AABD06A001CE568 /* RCTSwitch.h */; }; + 3D302F921DF828F800D6DDAE /* RCTSwitchManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 14F362091AABD06A001CE568 /* RCTSwitchManager.h */; }; + 3D302F971DF828F800D6DDAE /* RCTTextDecorationLineType.h in Headers */ = {isa = PBXBuildFile; fileRef = E3BBC8EB1ADE6F47001BBD81 /* RCTTextDecorationLineType.h */; }; + 3D302F981DF828F800D6DDAE /* RCTView.h in Headers */ = {isa = PBXBuildFile; fileRef = 13E0674F1A70F44B002CDEE1 /* RCTView.h */; }; + 3D302F9A1DF828F800D6DDAE /* RCTViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 13E0674D1A70F44B002CDEE1 /* RCTViewManager.h */; }; + 3D302F9D1DF828F800D6DDAE /* RCTWrapperViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 13B080231A694A8400A75B9A /* RCTWrapperViewController.h */; }; + 3D302F9F1DF828F800D6DDAE /* UIView+React.h in Headers */ = {isa = PBXBuildFile; fileRef = 13E067531A70F44B002CDEE1 /* UIView+React.h */; }; + 3D3030221DF8294C00D6DDAE /* JSBundleType.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D3CD8F51DE5FB2300167DC4 /* JSBundleType.h */; }; + 3D37B5821D522B190042D5B5 /* RCTFont.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3D37B5811D522B190042D5B5 /* RCTFont.mm */; }; + 3D383D1F1EBD27A8005632C8 /* RCTBridge+Private.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 14A43DB81C1F849600794BC8 /* RCTBridge+Private.h */; }; + 3D383D201EBD27AF005632C8 /* RCTBridge+Private.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 14A43DB81C1F849600794BC8 /* RCTBridge+Private.h */; }; + 3D383D251EBD27B6005632C8 /* Conv.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 139D849F1E273B5600323FB7 /* Conv.cpp */; }; + 3D383D271EBD27B6005632C8 /* raw_logging.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7EDB1E25DBDC00323FB7 /* raw_logging.cc */; }; + 3D383D281EBD27B6005632C8 /* signalhandler.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7EDC1E25DBDC00323FB7 /* signalhandler.cc */; }; + 3D383D291EBD27B6005632C8 /* dynamic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 139D84A21E273B5600323FB7 /* dynamic.cpp */; }; + 3D383D2A1EBD27B6005632C8 /* utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7EE01E25DBDC00323FB7 /* utilities.cc */; }; + 3D383D2D1EBD27B6005632C8 /* symbolize.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7EDE1E25DBDC00323FB7 /* symbolize.cc */; }; + 3D383D2E1EBD27B6005632C8 /* vlog_is_on.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7EE21E25DBDC00323FB7 /* vlog_is_on.cc */; }; + 3D383D2F1EBD27B6005632C8 /* Unicode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 13F887541E2971C500C3C7A1 /* Unicode.cpp */; }; + 3D383D301EBD27B6005632C8 /* demangle.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7F081E25DE3700323FB7 /* demangle.cc */; }; + 3D383D311EBD27B6005632C8 /* Demangle.h in Sources */ = {isa = PBXBuildFile; fileRef = 13F887521E2971C500C3C7A1 /* Demangle.h */; }; + 3D383D331EBD27B6005632C8 /* logging.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7EDA1E25DBDC00323FB7 /* logging.cc */; }; + 3D383D341EBD27B6005632C8 /* json.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 139D84A71E273B5600323FB7 /* json.cpp */; }; + 3D383D401EBD27B9005632C8 /* bignum-dtoa.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7E391E25C5A300323FB7 /* bignum-dtoa.cc */; }; + 3D383D411EBD27B9005632C8 /* bignum.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7E3B1E25C5A300323FB7 /* bignum.cc */; }; + 3D383D421EBD27B9005632C8 /* cached-powers.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7E3D1E25C5A300323FB7 /* cached-powers.cc */; }; + 3D383D431EBD27B9005632C8 /* diy-fp.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7E3F1E25C5A300323FB7 /* diy-fp.cc */; }; + 3D383D441EBD27B9005632C8 /* double-conversion.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7E411E25C5A300323FB7 /* double-conversion.cc */; }; + 3D383D451EBD27B9005632C8 /* fast-dtoa.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7E431E25C5A300323FB7 /* fast-dtoa.cc */; }; + 3D383D461EBD27B9005632C8 /* fixed-dtoa.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7E451E25C5A300323FB7 /* fixed-dtoa.cc */; }; + 3D383D471EBD27B9005632C8 /* strtod.cc in Sources */ = {isa = PBXBuildFile; fileRef = 139D7E481E25C5A300323FB7 /* strtod.cc */; }; + 3D383D4A1EBD27B9005632C8 /* bignum-dtoa.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 139D7E3A1E25C5A300323FB7 /* bignum-dtoa.h */; }; + 3D383D4B1EBD27B9005632C8 /* bignum.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 139D7E3C1E25C5A300323FB7 /* bignum.h */; }; + 3D383D4C1EBD27B9005632C8 /* cached-powers.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 139D7E3E1E25C5A300323FB7 /* cached-powers.h */; }; + 3D383D4D1EBD27B9005632C8 /* diy-fp.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 139D7E401E25C5A300323FB7 /* diy-fp.h */; }; + 3D383D4E1EBD27B9005632C8 /* double-conversion.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 139D7E421E25C5A300323FB7 /* double-conversion.h */; }; + 3D383D4F1EBD27B9005632C8 /* fast-dtoa.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 139D7E441E25C5A300323FB7 /* fast-dtoa.h */; }; + 3D383D501EBD27B9005632C8 /* fixed-dtoa.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 139D7E461E25C5A300323FB7 /* fixed-dtoa.h */; }; + 3D383D511EBD27B9005632C8 /* ieee.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 139D7E471E25C5A300323FB7 /* ieee.h */; }; + 3D383D521EBD27B9005632C8 /* strtod.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 139D7E491E25C5A300323FB7 /* strtod.h */; }; + 3D383D531EBD27B9005632C8 /* utils.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 139D7E4A1E25C5A300323FB7 /* utils.h */; }; + 3D383D551EBD27B9005632C8 /* bignum-dtoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D7E3A1E25C5A300323FB7 /* bignum-dtoa.h */; }; + 3D383D561EBD27B9005632C8 /* bignum.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D7E3C1E25C5A300323FB7 /* bignum.h */; }; + 3D383D571EBD27B9005632C8 /* cached-powers.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D7E3E1E25C5A300323FB7 /* cached-powers.h */; }; + 3D383D581EBD27B9005632C8 /* diy-fp.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D7E401E25C5A300323FB7 /* diy-fp.h */; }; + 3D383D591EBD27B9005632C8 /* double-conversion.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D7E421E25C5A300323FB7 /* double-conversion.h */; }; + 3D383D5A1EBD27B9005632C8 /* fast-dtoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D7E441E25C5A300323FB7 /* fast-dtoa.h */; }; + 3D383D5B1EBD27B9005632C8 /* fixed-dtoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D7E461E25C5A300323FB7 /* fixed-dtoa.h */; }; + 3D383D5C1EBD27B9005632C8 /* ieee.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D7E471E25C5A300323FB7 /* ieee.h */; }; + 3D383D5D1EBD27B9005632C8 /* strtod.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D7E491E25C5A300323FB7 /* strtod.h */; }; + 3D383D5E1EBD27B9005632C8 /* utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D7E4A1E25C5A300323FB7 /* utils.h */; }; + 3D383D6D1EBD2940005632C8 /* libdouble-conversion.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D7E881E25C6D100323FB7 /* libdouble-conversion.a */; }; + 3D383D6F1EBD2940005632C8 /* libthird-party.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139D7ECE1E25DB7D00323FB7 /* libthird-party.a */; }; + 3D383D721EBD2949005632C8 /* libthird-party.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D383D3C1EBD27B6005632C8 /* libthird-party.a */; }; + 3D3CD9411DE5FC5300167DC4 /* libcxxreact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D3CD9251DE5FBEC00167DC4 /* libcxxreact.a */; }; + 3D3CD9451DE5FC7100167DC4 /* JSBundleType.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D3CD8F51DE5FB2300167DC4 /* JSBundleType.h */; }; + 3D74547C1E54758900E74ADD /* JSBigString.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D7454781E54757500E74ADD /* JSBigString.h */; }; + 3D74547D1E54758900E74ADD /* JSBigString.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D7454781E54757500E74ADD /* JSBigString.h */; }; + 3D74547E1E54759A00E74ADD /* JSModulesUnbundle.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0C81E03699D0018521A /* JSModulesUnbundle.h */; }; + 3D74547F1E54759E00E74ADD /* JSModulesUnbundle.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0C81E03699D0018521A /* JSModulesUnbundle.h */; }; + 3D7454801E5475AF00E74ADD /* RecoverableError.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D7454791E54757500E74ADD /* RecoverableError.h */; }; + 3D7454811E5475AF00E74ADD /* RecoverableError.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D7454791E54757500E74ADD /* RecoverableError.h */; }; + 3D7749441DC1065C007EC8D8 /* RCTPlatform.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D7749431DC1065C007EC8D8 /* RCTPlatform.m */; }; + 3D7AA9C41E548CD5001955CF /* NSDataBigString.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3D7AA9C31E548CD5001955CF /* NSDataBigString.mm */; }; + 3D7AA9C51E548CDB001955CF /* NSDataBigString.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D7454B31E54786200E74ADD /* NSDataBigString.h */; }; + 3D7AA9C61E548CDD001955CF /* NSDataBigString.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3D7AA9C31E548CD5001955CF /* NSDataBigString.mm */; }; + 3D7BFD151EA8E351008DFB7A /* RCTPackagerClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D7BFD0B1EA8E351008DFB7A /* RCTPackagerClient.h */; }; + 3D7BFD161EA8E351008DFB7A /* RCTPackagerClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D7BFD0B1EA8E351008DFB7A /* RCTPackagerClient.h */; }; + 3D7BFD171EA8E351008DFB7A /* RCTPackagerClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D7BFD0C1EA8E351008DFB7A /* RCTPackagerClient.m */; }; + 3D7BFD181EA8E351008DFB7A /* RCTPackagerClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D7BFD0C1EA8E351008DFB7A /* RCTPackagerClient.m */; }; + 3D7BFD1D1EA8E351008DFB7A /* RCTPackagerConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D7BFD0F1EA8E351008DFB7A /* RCTPackagerConnection.h */; }; + 3D7BFD1E1EA8E351008DFB7A /* RCTPackagerConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D7BFD0F1EA8E351008DFB7A /* RCTPackagerConnection.h */; }; + 3D7BFD1F1EA8E351008DFB7A /* RCTPackagerConnection.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3D7BFD101EA8E351008DFB7A /* RCTPackagerConnection.mm */; }; + 3D7BFD201EA8E351008DFB7A /* RCTPackagerConnection.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3D7BFD101EA8E351008DFB7A /* RCTPackagerConnection.mm */; }; + 3D7BFD291EA8E37B008DFB7A /* RCTDevSettings.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 130E3D861E6A082100ACE484 /* RCTDevSettings.h */; }; + 3D7BFD2D1EA8E3FA008DFB7A /* RCTReconnectingWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D7BFD2B1EA8E3FA008DFB7A /* RCTReconnectingWebSocket.h */; }; + 3D7BFD2E1EA8E3FA008DFB7A /* RCTReconnectingWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D7BFD2B1EA8E3FA008DFB7A /* RCTReconnectingWebSocket.h */; }; + 3D7BFD2F1EA8E3FA008DFB7A /* RCTSRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D7BFD2C1EA8E3FA008DFB7A /* RCTSRWebSocket.h */; }; + 3D7BFD301EA8E3FA008DFB7A /* RCTSRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D7BFD2C1EA8E3FA008DFB7A /* RCTSRWebSocket.h */; }; + 3D7BFD311EA8E41F008DFB7A /* RCTPackagerClient.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D7BFD0B1EA8E351008DFB7A /* RCTPackagerClient.h */; }; + 3D7BFD331EA8E433008DFB7A /* RCTPackagerClient.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D7BFD0B1EA8E351008DFB7A /* RCTPackagerClient.h */; }; + 3D7BFD351EA8E43F008DFB7A /* RCTDevSettings.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 130E3D861E6A082100ACE484 /* RCTDevSettings.h */; }; + 3D80D9181DF6F7A80028D040 /* JSBundleType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AC70D2EB1DE48A22002E6351 /* JSBundleType.cpp */; }; + 3D80D91B1DF6F8200028D040 /* RCTPlatform.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D7749431DC1065C007EC8D8 /* RCTPlatform.m */; }; + 3D80D91F1DF6FA890028D040 /* RCTImageLoader.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D1FA0831DE4F3A000E03CC6 /* RCTImageLoader.h */; }; + 3D80D9201DF6FA890028D040 /* RCTImageStoreManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D1FA0841DE4F3A000E03CC6 /* RCTImageStoreManager.h */; }; + 3D80D9211DF6FA890028D040 /* RCTResizeMode.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D1FA0851DE4F3A000E03CC6 /* RCTResizeMode.h */; }; + 3D80D9221DF6FA890028D040 /* RCTLinkingManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D1FA08B1DE4F4DD00E03CC6 /* RCTLinkingManager.h */; }; + 3D80D9231DF6FA890028D040 /* RCTNetworking.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D1FA07A1DE4F2EA00E03CC6 /* RCTNetworking.h */; }; + 3D80D9241DF6FA890028D040 /* RCTNetworkTask.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D1FA07B1DE4F2EA00E03CC6 /* RCTNetworkTask.h */; }; + 3D80D9251DF6FA890028D040 /* RCTPushNotificationManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D1FA08D1DE4F4EE00E03CC6 /* RCTPushNotificationManager.h */; }; + 3D80D9261DF6FA890028D040 /* RCTAssert.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA4A1A601E3B00E9B192 /* RCTAssert.h */; }; + 3D80D9271DF6FA890028D040 /* RCTBridge.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA5E1A601EAA00E9B192 /* RCTBridge.h */; }; + 3D80D9291DF6FA890028D040 /* RCTBridgeDelegate.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 1482F9E61B55B927000ADFF3 /* RCTBridgeDelegate.h */; }; + 3D80D92A1DF6FA890028D040 /* RCTBridgeMethod.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13AFBCA11C07287B00BBAEAA /* RCTBridgeMethod.h */; }; + 3D80D92B1DF6FA890028D040 /* RCTBridgeModule.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 830213F31A654E0800B993E6 /* RCTBridgeModule.h */; }; + 3D80D92C1DF6FA890028D040 /* RCTBundleURLProvider.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 68EFE4EC1CF6EB3000A1DE13 /* RCTBundleURLProvider.h */; }; + 3D80D92D1DF6FA890028D040 /* RCTConvert.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 83CBBACA1A6023D300E9B192 /* RCTConvert.h */; }; + 3D80D92E1DF6FA890028D040 /* RCTDefines.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13AF1F851AE6E777005F5298 /* RCTDefines.h */; }; + 3D80D92F1DF6FA890028D040 /* RCTDisplayLink.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D1E68D81CABD13900DD7465 /* RCTDisplayLink.h */; }; + 3D80D9301DF6FA890028D040 /* RCTErrorCustomizer.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3EDCA8A21D3591E700450C31 /* RCTErrorCustomizer.h */; }; + 3D80D9311DF6FA890028D040 /* RCTErrorInfo.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3EDCA8A31D3591E700450C31 /* RCTErrorInfo.h */; }; + 3D80D9321DF6FA890028D040 /* RCTEventDispatcher.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA651A601EF300E9B192 /* RCTEventDispatcher.h */; }; + 3D80D9331DF6FA890028D040 /* RCTFrameUpdate.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 1436DD071ADE7AA000A5ED7D /* RCTFrameUpdate.h */; }; + 3D80D9341DF6FA890028D040 /* RCTImageSource.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13BB3D001BECD54500932C10 /* RCTImageSource.h */; }; + 3D80D9351DF6FA890028D040 /* RCTInvalidating.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA4C1A601E3B00E9B192 /* RCTInvalidating.h */; }; + 3D80D9361DF6FA890028D040 /* RCTJavaScriptExecutor.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA631A601ECA00E9B192 /* RCTJavaScriptExecutor.h */; }; + 3D80D9371DF6FA890028D040 /* RCTJavaScriptLoader.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 14200DA81AC179B3008EE6BA /* RCTJavaScriptLoader.h */; }; + 3D80D9381DF6FA890028D040 /* RCTJSStackFrame.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 008341F51D1DB34400876D9A /* RCTJSStackFrame.h */; }; + 3D80D9391DF6FA890028D040 /* RCTKeyCommands.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13A1F71C1A75392D00D3D453 /* RCTKeyCommands.h */; }; + 3D80D93A1DF6FA890028D040 /* RCTLog.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA4D1A601E3B00E9B192 /* RCTLog.h */; }; + 3D80D93B1DF6FA890028D040 /* RCTModuleData.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 14C2CA721B3AC64300E6CBB2 /* RCTModuleData.h */; }; + 3D80D93C1DF6FA890028D040 /* RCTModuleMethod.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 14C2CA6F1B3AC63800E6CBB2 /* RCTModuleMethod.h */; }; + 3D80D93D1DF6FA890028D040 /* RCTMultipartDataTask.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 006FC4121D9B20820057AAAD /* RCTMultipartDataTask.h */; }; + 3D80D93E1DF6FA890028D040 /* RCTMultipartStreamReader.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 001BFCCE1D8381DE008E587E /* RCTMultipartStreamReader.h */; }; + 3D80D93F1DF6FA890028D040 /* RCTNullability.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13A6E20F1C19ABC700845B82 /* RCTNullability.h */; }; + 3D80D9401DF6FA890028D040 /* RCTParserUtils.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13A6E20C1C19AA0C00845B82 /* RCTParserUtils.h */; }; + 3D80D9411DF6FA890028D040 /* RCTPerformanceLogger.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 142014181B32094000CC17BA /* RCTPerformanceLogger.h */; }; + 3D80D9421DF6FA890028D040 /* RCTPlatform.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D7749421DC1065C007EC8D8 /* RCTPlatform.h */; }; + 3D80D9431DF6FA890028D040 /* RCTRootView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 830A229C1A66C68A008503DA /* RCTRootView.h */; }; + 3D80D9441DF6FA890028D040 /* RCTRootViewDelegate.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13AFBCA21C07287B00BBAEAA /* RCTRootViewDelegate.h */; }; + 3D80D9461DF6FA890028D040 /* RCTTouchEvent.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 391E86A31C623EC800009732 /* RCTTouchEvent.h */; }; + 3D80D9471DF6FA890028D040 /* RCTTouchHandler.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA961A6020BB00E9B192 /* RCTTouchHandler.h */; }; + 3D80D9481DF6FA890028D040 /* RCTURLRequestDelegate.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 1345A83A1B265A0E00583190 /* RCTURLRequestDelegate.h */; }; + 3D80D9491DF6FA890028D040 /* RCTURLRequestHandler.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 1345A83B1B265A0E00583190 /* RCTURLRequestHandler.h */; }; + 3D80D94A1DF6FA890028D040 /* RCTUtils.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA4F1A601E3B00E9B192 /* RCTUtils.h */; }; + 3D80D9501DF6FA890028D040 /* RCTAccessibilityManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = E9B20B791B500126007A2DA7 /* RCTAccessibilityManager.h */; }; + 3D80D9511DF6FA890028D040 /* RCTAlertManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13B07FE71A69327A00A75B9A /* RCTAlertManager.h */; }; + 3D80D9521DF6FA890028D040 /* RCTAppState.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 1372B7081AB030C200659ED6 /* RCTAppState.h */; }; + 3D80D9531DF6FA890028D040 /* RCTAsyncLocalStorage.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 58114A4F1AAE93D500E7D092 /* RCTAsyncLocalStorage.h */; }; + 3D80D9541DF6FA890028D040 /* RCTClipboard.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13D033611C1837FE0021DC29 /* RCTClipboard.h */; }; + 3D80D9551DF6FA890028D040 /* RCTDevLoadingView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13A0C2851B74F71200B29F6F /* RCTDevLoadingView.h */; }; + 3D80D9561DF6FA890028D040 /* RCTDevMenu.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13A0C2871B74F71200B29F6F /* RCTDevMenu.h */; }; + 3D80D9571DF6FA890028D040 /* RCTEventEmitter.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13D9FEE91CDCCECF00158BD7 /* RCTEventEmitter.h */; }; + 3D80D9581DF6FA890028D040 /* RCTExceptionsManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13B07FE91A69327A00A75B9A /* RCTExceptionsManager.h */; }; + 3D80D9591DF6FA890028D040 /* RCTI18nManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = B233E6E81D2D843200BC68BA /* RCTI18nManager.h */; }; + 3D80D95A1DF6FA890028D040 /* RCTI18nUtil.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 352DCFEE1D19F4C20056D623 /* RCTI18nUtil.h */; }; + 3D80D95B1DF6FA890028D040 /* RCTKeyboardObserver.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13D9FEEC1CDCD93000158BD7 /* RCTKeyboardObserver.h */; }; + 3D80D95C1DF6FA890028D040 /* RCTRedBox.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13F17A831B8493E5007D4C75 /* RCTRedBox.h */; }; + 3D80D95D1DF6FA890028D040 /* RCTSourceCode.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 000E6CE91AB0E97F000CDF4D /* RCTSourceCode.h */; }; + 3D80D95E1DF6FA890028D040 /* RCTStatusBarManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13723B4E1A82FD3C00F88898 /* RCTStatusBarManager.h */; }; + 3D80D95F1DF6FA890028D040 /* RCTTiming.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13B07FED1A69327A00A75B9A /* RCTTiming.h */; }; + 3D80D9601DF6FA890028D040 /* RCTUIManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13E067481A70F434002CDEE1 /* RCTUIManager.h */; }; + 3D80D9611DF6FA890028D040 /* RCTFPSGraph.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 14F7A0EE1BDA714B003C6C10 /* RCTFPSGraph.h */; }; + 3D80D9631DF6FA890028D040 /* RCTMacros.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 14BF71811C04795500C97D0C /* RCTMacros.h */; }; + 3D80D9641DF6FA890028D040 /* RCTProfile.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 1450FF801BCFF28A00208362 /* RCTProfile.h */; }; + 3D80D9651DF6FA890028D040 /* RCTActivityIndicatorView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = B95154301D1B34B200FE7B80 /* RCTActivityIndicatorView.h */; }; + 3D80D9661DF6FA890028D040 /* RCTActivityIndicatorViewManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13B080181A69489C00A75B9A /* RCTActivityIndicatorViewManager.h */; }; + 3D80D9671DF6FA890028D040 /* RCTAnimationType.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13442BF21AA90E0B0037E5B0 /* RCTAnimationType.h */; }; + 3D80D9681DF6FA890028D040 /* RCTAutoInsetsProtocol.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13C325261AA63B6A0048765F /* RCTAutoInsetsProtocol.h */; }; + 3D80D9691DF6FA890028D040 /* RCTBorderDrawing.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13CC8A801B17642100940AE7 /* RCTBorderDrawing.h */; }; + 3D80D96A1DF6FA890028D040 /* RCTBorderStyle.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = ACDD3FDA1BC7430D00E7DE33 /* RCTBorderStyle.h */; }; + 3D80D96B1DF6FA890028D040 /* RCTComponent.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13C325281AA63B6A0048765F /* RCTComponent.h */; }; + 3D80D96C1DF6FA890028D040 /* RCTComponentData.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13AB90BF1B6FA36700713B4F /* RCTComponentData.h */; }; + 3D80D96D1DF6FA890028D040 /* RCTConvert+CoreLocation.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13456E911ADAD2DE009F94A7 /* RCTConvert+CoreLocation.h */; }; + 3D80D9711DF6FA890028D040 /* RCTFont.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D37B5801D522B190042D5B5 /* RCTFont.h */; }; + 3D80D9761DF6FA890028D040 /* RCTModalHostView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 83A1FE8A1B62640A00BE0E65 /* RCTModalHostView.h */; }; + 3D80D9771DF6FA890028D040 /* RCTModalHostViewController.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 83392EB11B6634E10013B15F /* RCTModalHostViewController.h */; }; + 3D80D9781DF6FA890028D040 /* RCTModalHostViewManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 83A1FE8D1B62643A00BE0E65 /* RCTModalHostViewManager.h */; }; + 3D80D97D1DF6FA890028D040 /* RCTPicker.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 58114A121AAE854800E7D092 /* RCTPicker.h */; }; + 3D80D97E1DF6FA890028D040 /* RCTPickerManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 58114A141AAE854800E7D092 /* RCTPickerManager.h */; }; + 3D80D97F1DF6FA890028D040 /* RCTPointerEvents.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13442BF31AA90E0B0037E5B0 /* RCTPointerEvents.h */; }; + 3D80D9801DF6FA890028D040 /* RCTProgressViewManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13513F3A1B1F43F400FCE529 /* RCTProgressViewManager.h */; }; + 3D80D9811DF6FA890028D040 /* RCTRefreshControl.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 191E3EBF1C29DC3800C180A6 /* RCTRefreshControl.h */; }; + 3D80D9821DF6FA890028D040 /* RCTRefreshControlManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 191E3EBC1C29D9AF00C180A6 /* RCTRefreshControlManager.h */; }; + 3D80D9831DF6FA890028D040 /* RCTRootShadowView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13BCE8071C99CB9D00DD7AAD /* RCTRootShadowView.h */; }; + 3D80D9871DF6FA890028D040 /* RCTSegmentedControl.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 131B6AF01AF1093D00FFC3E0 /* RCTSegmentedControl.h */; }; + 3D80D9881DF6FA890028D040 /* RCTSegmentedControlManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 131B6AF21AF1093D00FFC3E0 /* RCTSegmentedControlManager.h */; }; + 3D80D9891DF6FA890028D040 /* RCTShadowView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13E0674B1A70F44B002CDEE1 /* RCTShadowView.h */; }; + 3D80D98A1DF6FA890028D040 /* RCTSlider.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13AF20431AE707F8005F5298 /* RCTSlider.h */; }; + 3D80D98B1DF6FA890028D040 /* RCTSliderManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 14F484541AABFCE100FDF6B9 /* RCTSliderManager.h */; }; + 3D80D98C1DF6FA890028D040 /* RCTSwitch.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 14F362071AABD06A001CE568 /* RCTSwitch.h */; }; + 3D80D98D1DF6FA890028D040 /* RCTSwitchManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 14F362091AABD06A001CE568 /* RCTSwitchManager.h */; }; + 3D80D9921DF6FA890028D040 /* RCTTextDecorationLineType.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = E3BBC8EB1ADE6F47001BBD81 /* RCTTextDecorationLineType.h */; }; + 3D80D9931DF6FA890028D040 /* RCTView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13E0674F1A70F44B002CDEE1 /* RCTView.h */; }; + 3D80D9951DF6FA890028D040 /* RCTViewManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13E0674D1A70F44B002CDEE1 /* RCTViewManager.h */; }; + 3D80D9961DF6FA890028D040 /* RCTWebView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13C156011AB1A2840079392D /* RCTWebView.h */; }; + 3D80D9971DF6FA890028D040 /* RCTWebViewManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13C156031AB1A2840079392D /* RCTWebViewManager.h */; }; + 3D80D9981DF6FA890028D040 /* RCTWrapperViewController.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13B080231A694A8400A75B9A /* RCTWrapperViewController.h */; }; + 3D80D99A1DF6FA890028D040 /* UIView+React.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13E067531A70F44B002CDEE1 /* UIView+React.h */; }; + 3D80DA191DF820620028D040 /* RCTImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1FA0831DE4F3A000E03CC6 /* RCTImageLoader.h */; }; + 3D80DA1A1DF820620028D040 /* RCTImageStoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1FA0841DE4F3A000E03CC6 /* RCTImageStoreManager.h */; }; + 3D80DA1B1DF820620028D040 /* RCTResizeMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1FA0851DE4F3A000E03CC6 /* RCTResizeMode.h */; }; + 3D80DA1C1DF820620028D040 /* RCTLinkingManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1FA08B1DE4F4DD00E03CC6 /* RCTLinkingManager.h */; }; + 3D80DA1D1DF820620028D040 /* RCTNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1FA07A1DE4F2EA00E03CC6 /* RCTNetworking.h */; }; + 3D80DA1E1DF820620028D040 /* RCTNetworkTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1FA07B1DE4F2EA00E03CC6 /* RCTNetworkTask.h */; }; + 3D80DA1F1DF820620028D040 /* RCTPushNotificationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1FA08D1DE4F4EE00E03CC6 /* RCTPushNotificationManager.h */; }; + 3D80DA201DF820620028D040 /* RCTAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA4A1A601E3B00E9B192 /* RCTAssert.h */; }; + 3D80DA211DF820620028D040 /* RCTBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA5E1A601EAA00E9B192 /* RCTBridge.h */; }; + 3D80DA221DF820620028D040 /* RCTBridge+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 14A43DB81C1F849600794BC8 /* RCTBridge+Private.h */; }; + 3D80DA231DF820620028D040 /* RCTBridgeDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1482F9E61B55B927000ADFF3 /* RCTBridgeDelegate.h */; }; + 3D80DA241DF820620028D040 /* RCTBridgeMethod.h in Headers */ = {isa = PBXBuildFile; fileRef = 13AFBCA11C07287B00BBAEAA /* RCTBridgeMethod.h */; }; + 3D80DA251DF820620028D040 /* RCTBridgeModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 830213F31A654E0800B993E6 /* RCTBridgeModule.h */; }; + 3D80DA261DF820620028D040 /* RCTBundleURLProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 68EFE4EC1CF6EB3000A1DE13 /* RCTBundleURLProvider.h */; }; + 3D80DA271DF820620028D040 /* RCTConvert.h in Headers */ = {isa = PBXBuildFile; fileRef = 83CBBACA1A6023D300E9B192 /* RCTConvert.h */; }; + 3D80DA281DF820620028D040 /* RCTDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 13AF1F851AE6E777005F5298 /* RCTDefines.h */; }; + 3D80DA291DF820620028D040 /* RCTDisplayLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1E68D81CABD13900DD7465 /* RCTDisplayLink.h */; }; + 3D80DA2A1DF820620028D040 /* RCTErrorCustomizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EDCA8A21D3591E700450C31 /* RCTErrorCustomizer.h */; }; + 3D80DA2B1DF820620028D040 /* RCTErrorInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EDCA8A31D3591E700450C31 /* RCTErrorInfo.h */; }; + 3D80DA2C1DF820620028D040 /* RCTEventDispatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA651A601EF300E9B192 /* RCTEventDispatcher.h */; }; + 3D80DA2D1DF820620028D040 /* RCTFrameUpdate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1436DD071ADE7AA000A5ED7D /* RCTFrameUpdate.h */; }; + 3D80DA2E1DF820620028D040 /* RCTImageSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 13BB3D001BECD54500932C10 /* RCTImageSource.h */; }; + 3D80DA2F1DF820620028D040 /* RCTInvalidating.h in Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA4C1A601E3B00E9B192 /* RCTInvalidating.h */; }; + 3D80DA301DF820620028D040 /* RCTJavaScriptExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA631A601ECA00E9B192 /* RCTJavaScriptExecutor.h */; }; + 3D80DA311DF820620028D040 /* RCTJavaScriptLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 14200DA81AC179B3008EE6BA /* RCTJavaScriptLoader.h */; }; + 3D80DA321DF820620028D040 /* RCTJSStackFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 008341F51D1DB34400876D9A /* RCTJSStackFrame.h */; }; + 3D80DA331DF820620028D040 /* RCTKeyCommands.h in Headers */ = {isa = PBXBuildFile; fileRef = 13A1F71C1A75392D00D3D453 /* RCTKeyCommands.h */; }; + 3D80DA341DF820620028D040 /* RCTLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA4D1A601E3B00E9B192 /* RCTLog.h */; }; + 3D80DA351DF820620028D040 /* RCTModuleData.h in Headers */ = {isa = PBXBuildFile; fileRef = 14C2CA721B3AC64300E6CBB2 /* RCTModuleData.h */; }; + 3D80DA361DF820620028D040 /* RCTModuleMethod.h in Headers */ = {isa = PBXBuildFile; fileRef = 14C2CA6F1B3AC63800E6CBB2 /* RCTModuleMethod.h */; }; + 3D80DA371DF820620028D040 /* RCTMultipartDataTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 006FC4121D9B20820057AAAD /* RCTMultipartDataTask.h */; }; + 3D80DA381DF820620028D040 /* RCTMultipartStreamReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 001BFCCE1D8381DE008E587E /* RCTMultipartStreamReader.h */; }; + 3D80DA391DF820620028D040 /* RCTNullability.h in Headers */ = {isa = PBXBuildFile; fileRef = 13A6E20F1C19ABC700845B82 /* RCTNullability.h */; }; + 3D80DA3A1DF820620028D040 /* RCTParserUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 13A6E20C1C19AA0C00845B82 /* RCTParserUtils.h */; }; + 3D80DA3B1DF820620028D040 /* RCTPerformanceLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 142014181B32094000CC17BA /* RCTPerformanceLogger.h */; }; + 3D80DA3C1DF820620028D040 /* RCTPlatform.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D7749421DC1065C007EC8D8 /* RCTPlatform.h */; }; + 3D80DA3D1DF820620028D040 /* RCTRootView.h in Headers */ = {isa = PBXBuildFile; fileRef = 830A229C1A66C68A008503DA /* RCTRootView.h */; }; + 3D80DA3E1DF820620028D040 /* RCTRootViewDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 13AFBCA21C07287B00BBAEAA /* RCTRootViewDelegate.h */; }; + 3D80DA3F1DF820620028D040 /* RCTRootViewInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A15FB0C1BDF663500531DFB /* RCTRootViewInternal.h */; }; + 3D80DA401DF820620028D040 /* RCTTouchEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 391E86A31C623EC800009732 /* RCTTouchEvent.h */; }; + 3D80DA411DF820620028D040 /* RCTTouchHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA961A6020BB00E9B192 /* RCTTouchHandler.h */; }; + 3D80DA421DF820620028D040 /* RCTURLRequestDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1345A83A1B265A0E00583190 /* RCTURLRequestDelegate.h */; }; + 3D80DA431DF820620028D040 /* RCTURLRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 1345A83B1B265A0E00583190 /* RCTURLRequestHandler.h */; }; + 3D80DA441DF820620028D040 /* RCTUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA4F1A601E3B00E9B192 /* RCTUtils.h */; }; + 3D80DA4A1DF820620028D040 /* RCTAccessibilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E9B20B791B500126007A2DA7 /* RCTAccessibilityManager.h */; }; + 3D80DA4B1DF820620028D040 /* RCTAlertManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 13B07FE71A69327A00A75B9A /* RCTAlertManager.h */; }; + 3D80DA4C1DF820620028D040 /* RCTAppState.h in Headers */ = {isa = PBXBuildFile; fileRef = 1372B7081AB030C200659ED6 /* RCTAppState.h */; }; + 3D80DA4D1DF820620028D040 /* RCTAsyncLocalStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 58114A4F1AAE93D500E7D092 /* RCTAsyncLocalStorage.h */; }; + 3D80DA4E1DF820620028D040 /* RCTClipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 13D033611C1837FE0021DC29 /* RCTClipboard.h */; }; + 3D80DA4F1DF820620028D040 /* RCTDevLoadingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 13A0C2851B74F71200B29F6F /* RCTDevLoadingView.h */; }; + 3D80DA501DF820620028D040 /* RCTDevMenu.h in Headers */ = {isa = PBXBuildFile; fileRef = 13A0C2871B74F71200B29F6F /* RCTDevMenu.h */; }; + 3D80DA511DF820620028D040 /* RCTEventEmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 13D9FEE91CDCCECF00158BD7 /* RCTEventEmitter.h */; }; + 3D80DA521DF820620028D040 /* RCTExceptionsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 13B07FE91A69327A00A75B9A /* RCTExceptionsManager.h */; }; + 3D80DA531DF820620028D040 /* RCTI18nManager.h in Headers */ = {isa = PBXBuildFile; fileRef = B233E6E81D2D843200BC68BA /* RCTI18nManager.h */; }; + 3D80DA541DF820620028D040 /* RCTI18nUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 352DCFEE1D19F4C20056D623 /* RCTI18nUtil.h */; }; + 3D80DA551DF820620028D040 /* RCTKeyboardObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 13D9FEEC1CDCD93000158BD7 /* RCTKeyboardObserver.h */; }; + 3D80DA561DF820620028D040 /* RCTRedBox.h in Headers */ = {isa = PBXBuildFile; fileRef = 13F17A831B8493E5007D4C75 /* RCTRedBox.h */; }; + 3D80DA571DF820620028D040 /* RCTSourceCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 000E6CE91AB0E97F000CDF4D /* RCTSourceCode.h */; }; + 3D80DA581DF820620028D040 /* RCTStatusBarManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 13723B4E1A82FD3C00F88898 /* RCTStatusBarManager.h */; }; + 3D80DA591DF820620028D040 /* RCTTiming.h in Headers */ = {isa = PBXBuildFile; fileRef = 13B07FED1A69327A00A75B9A /* RCTTiming.h */; }; + 3D80DA5A1DF820620028D040 /* RCTUIManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 13E067481A70F434002CDEE1 /* RCTUIManager.h */; }; + 3D80DA5B1DF820620028D040 /* RCTFPSGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = 14F7A0EE1BDA714B003C6C10 /* RCTFPSGraph.h */; }; + 3D80DA5D1DF820620028D040 /* RCTMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 14BF71811C04795500C97D0C /* RCTMacros.h */; }; + 3D80DA5E1DF820620028D040 /* RCTProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 1450FF801BCFF28A00208362 /* RCTProfile.h */; }; + 3D80DA5F1DF820620028D040 /* RCTActivityIndicatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = B95154301D1B34B200FE7B80 /* RCTActivityIndicatorView.h */; }; + 3D80DA601DF820620028D040 /* RCTActivityIndicatorViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 13B080181A69489C00A75B9A /* RCTActivityIndicatorViewManager.h */; }; + 3D80DA611DF820620028D040 /* RCTAnimationType.h in Headers */ = {isa = PBXBuildFile; fileRef = 13442BF21AA90E0B0037E5B0 /* RCTAnimationType.h */; }; + 3D80DA621DF820620028D040 /* RCTAutoInsetsProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 13C325261AA63B6A0048765F /* RCTAutoInsetsProtocol.h */; }; + 3D80DA631DF820620028D040 /* RCTBorderDrawing.h in Headers */ = {isa = PBXBuildFile; fileRef = 13CC8A801B17642100940AE7 /* RCTBorderDrawing.h */; }; + 3D80DA641DF820620028D040 /* RCTBorderStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = ACDD3FDA1BC7430D00E7DE33 /* RCTBorderStyle.h */; }; + 3D80DA651DF820620028D040 /* RCTComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 13C325281AA63B6A0048765F /* RCTComponent.h */; }; + 3D80DA661DF820620028D040 /* RCTComponentData.h in Headers */ = {isa = PBXBuildFile; fileRef = 13AB90BF1B6FA36700713B4F /* RCTComponentData.h */; }; + 3D80DA671DF820620028D040 /* RCTConvert+CoreLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 13456E911ADAD2DE009F94A7 /* RCTConvert+CoreLocation.h */; }; + 3D80DA6B1DF820620028D040 /* RCTFont.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D37B5801D522B190042D5B5 /* RCTFont.h */; }; + 3D80DA701DF820620028D040 /* RCTModalHostView.h in Headers */ = {isa = PBXBuildFile; fileRef = 83A1FE8A1B62640A00BE0E65 /* RCTModalHostView.h */; }; + 3D80DA711DF820620028D040 /* RCTModalHostViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 83392EB11B6634E10013B15F /* RCTModalHostViewController.h */; }; + 3D80DA721DF820620028D040 /* RCTModalHostViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 83A1FE8D1B62643A00BE0E65 /* RCTModalHostViewManager.h */; }; + 3D80DA771DF820620028D040 /* RCTPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 58114A121AAE854800E7D092 /* RCTPicker.h */; }; + 3D80DA781DF820620028D040 /* RCTPickerManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 58114A141AAE854800E7D092 /* RCTPickerManager.h */; }; + 3D80DA791DF820620028D040 /* RCTPointerEvents.h in Headers */ = {isa = PBXBuildFile; fileRef = 13442BF31AA90E0B0037E5B0 /* RCTPointerEvents.h */; }; + 3D80DA7A1DF820620028D040 /* RCTProgressViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 13513F3A1B1F43F400FCE529 /* RCTProgressViewManager.h */; }; + 3D80DA7B1DF820620028D040 /* RCTRefreshControl.h in Headers */ = {isa = PBXBuildFile; fileRef = 191E3EBF1C29DC3800C180A6 /* RCTRefreshControl.h */; }; + 3D80DA7C1DF820620028D040 /* RCTRefreshControlManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 191E3EBC1C29D9AF00C180A6 /* RCTRefreshControlManager.h */; }; + 3D80DA7D1DF820620028D040 /* RCTRootShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = 13BCE8071C99CB9D00DD7AAD /* RCTRootShadowView.h */; }; + 3D80DA811DF820620028D040 /* RCTSegmentedControl.h in Headers */ = {isa = PBXBuildFile; fileRef = 131B6AF01AF1093D00FFC3E0 /* RCTSegmentedControl.h */; }; + 3D80DA821DF820620028D040 /* RCTSegmentedControlManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 131B6AF21AF1093D00FFC3E0 /* RCTSegmentedControlManager.h */; }; + 3D80DA831DF820620028D040 /* RCTShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = 13E0674B1A70F44B002CDEE1 /* RCTShadowView.h */; }; + 3D80DA841DF820620028D040 /* RCTSlider.h in Headers */ = {isa = PBXBuildFile; fileRef = 13AF20431AE707F8005F5298 /* RCTSlider.h */; }; + 3D80DA851DF820620028D040 /* RCTSliderManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 14F484541AABFCE100FDF6B9 /* RCTSliderManager.h */; }; + 3D80DA861DF820620028D040 /* RCTSwitch.h in Headers */ = {isa = PBXBuildFile; fileRef = 14F362071AABD06A001CE568 /* RCTSwitch.h */; }; + 3D80DA871DF820620028D040 /* RCTSwitchManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 14F362091AABD06A001CE568 /* RCTSwitchManager.h */; }; + 3D80DA8C1DF820620028D040 /* RCTTextDecorationLineType.h in Headers */ = {isa = PBXBuildFile; fileRef = E3BBC8EB1ADE6F47001BBD81 /* RCTTextDecorationLineType.h */; }; + 3D80DA8D1DF820620028D040 /* RCTView.h in Headers */ = {isa = PBXBuildFile; fileRef = 13E0674F1A70F44B002CDEE1 /* RCTView.h */; }; + 3D80DA8F1DF820620028D040 /* RCTViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 13E0674D1A70F44B002CDEE1 /* RCTViewManager.h */; }; + 3D80DA901DF820620028D040 /* RCTWebView.h in Headers */ = {isa = PBXBuildFile; fileRef = 13C156011AB1A2840079392D /* RCTWebView.h */; }; + 3D80DA911DF820620028D040 /* RCTWebViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 13C156031AB1A2840079392D /* RCTWebViewManager.h */; }; + 3D80DA921DF820620028D040 /* RCTWrapperViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 13B080231A694A8400A75B9A /* RCTWrapperViewController.h */; }; + 3D80DA931DF820620028D040 /* UIView+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 83F15A171B7CC46900F10295 /* UIView+Private.h */; }; + 3D80DA941DF820620028D040 /* UIView+React.h in Headers */ = {isa = PBXBuildFile; fileRef = 13E067531A70F44B002CDEE1 /* UIView+React.h */; }; + 3D8ED92C1E5B120100D83D20 /* libcxxreact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D3CD9321DE5FBEE00167DC4 /* libcxxreact.a */; }; + 3DA9819E1E5B0DBB004F2374 /* NSDataBigString.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D7454B31E54786200E74ADD /* NSDataBigString.h */; }; + 3DA981A01E5B0E34004F2374 /* CxxModule.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0A71E03699D0018521A /* CxxModule.h */; }; + 3DA981A11E5B0E34004F2374 /* CxxNativeModule.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0A91E03699D0018521A /* CxxNativeModule.h */; }; + 3DA981A21E5B0E34004F2374 /* JSExecutor.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0AB1E03699D0018521A /* JSExecutor.h */; }; + 3DA981A51E5B0E34004F2374 /* Instance.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0AF1E03699D0018521A /* Instance.h */; }; + 3DA981A61E5B0E34004F2374 /* JsArgumentHelpers-inl.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0B01E03699D0018521A /* JsArgumentHelpers-inl.h */; }; + 3DA981A71E5B0E34004F2374 /* JsArgumentHelpers.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0B11E03699D0018521A /* JsArgumentHelpers.h */; }; + 3DA981A81E5B0E34004F2374 /* JSBigString.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D7454781E54757500E74ADD /* JSBigString.h */; }; + 3DA981A91E5B0E34004F2374 /* JSBundleType.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D3CD8F51DE5FB2300167DC4 /* JSBundleType.h */; }; + 3DA981B31E5B0E34004F2374 /* JSIndexedRAMBundle.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0C71E03699D0018521A /* JSIndexedRAMBundle.h */; }; + 3DA981B41E5B0E34004F2374 /* JSModulesUnbundle.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0C81E03699D0018521A /* JSModulesUnbundle.h */; }; + 3DA981B51E5B0E34004F2374 /* MessageQueueThread.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0C91E03699D0018521A /* MessageQueueThread.h */; }; + 3DA981B61E5B0E34004F2374 /* MethodCall.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0CB1E03699D0018521A /* MethodCall.h */; }; + 3DA981B71E5B0E34004F2374 /* ModuleRegistry.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0CD1E03699D0018521A /* ModuleRegistry.h */; }; + 3DA981B81E5B0E34004F2374 /* NativeModule.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0CE1E03699D0018521A /* NativeModule.h */; }; + 3DA981B91E5B0E34004F2374 /* NativeToJsBridge.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0D01E03699D0018521A /* NativeToJsBridge.h */; }; + 3DA981BC1E5B0E34004F2374 /* RecoverableError.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D7454791E54757500E74ADD /* RecoverableError.h */; }; + 3DA981BD1E5B0E34004F2374 /* SampleCxxModule.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0D41E03699D0018521A /* SampleCxxModule.h */; }; + 3DA981BE1E5B0E34004F2374 /* SystraceSection.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0D51E03699D0018521A /* SystraceSection.h */; }; + 3DA981BF1E5B0F29004F2374 /* RCTAssert.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA4A1A601E3B00E9B192 /* RCTAssert.h */; }; + 3DA981C01E5B0F29004F2374 /* RCTBridge.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA5E1A601EAA00E9B192 /* RCTBridge.h */; }; + 3DA981C21E5B0F29004F2374 /* RCTBridgeDelegate.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 1482F9E61B55B927000ADFF3 /* RCTBridgeDelegate.h */; }; + 3DA981C31E5B0F29004F2374 /* RCTBridgeMethod.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13AFBCA11C07287B00BBAEAA /* RCTBridgeMethod.h */; }; + 3DA981C41E5B0F29004F2374 /* RCTBridgeModule.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 830213F31A654E0800B993E6 /* RCTBridgeModule.h */; }; + 3DA981C51E5B0F29004F2374 /* RCTBundleURLProvider.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 68EFE4EC1CF6EB3000A1DE13 /* RCTBundleURLProvider.h */; }; + 3DA981C61E5B0F29004F2374 /* RCTConvert.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 83CBBACA1A6023D300E9B192 /* RCTConvert.h */; }; + 3DA981C71E5B0F29004F2374 /* RCTDefines.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13AF1F851AE6E777005F5298 /* RCTDefines.h */; }; + 3DA981C81E5B0F29004F2374 /* RCTDisplayLink.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D1E68D81CABD13900DD7465 /* RCTDisplayLink.h */; }; + 3DA981C91E5B0F29004F2374 /* RCTErrorCustomizer.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3EDCA8A21D3591E700450C31 /* RCTErrorCustomizer.h */; }; + 3DA981CA1E5B0F29004F2374 /* RCTErrorInfo.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3EDCA8A31D3591E700450C31 /* RCTErrorInfo.h */; }; + 3DA981CB1E5B0F29004F2374 /* RCTEventDispatcher.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA651A601EF300E9B192 /* RCTEventDispatcher.h */; }; + 3DA981CC1E5B0F29004F2374 /* RCTFrameUpdate.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 1436DD071ADE7AA000A5ED7D /* RCTFrameUpdate.h */; }; + 3DA981CD1E5B0F29004F2374 /* RCTImageSource.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13BB3D001BECD54500932C10 /* RCTImageSource.h */; }; + 3DA981CE1E5B0F29004F2374 /* RCTInvalidating.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA4C1A601E3B00E9B192 /* RCTInvalidating.h */; }; + 3DA981CF1E5B0F29004F2374 /* RCTJavaScriptExecutor.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA631A601ECA00E9B192 /* RCTJavaScriptExecutor.h */; }; + 3DA981D01E5B0F29004F2374 /* RCTJavaScriptLoader.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 14200DA81AC179B3008EE6BA /* RCTJavaScriptLoader.h */; }; + 3DA981D11E5B0F29004F2374 /* RCTJSStackFrame.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 008341F51D1DB34400876D9A /* RCTJSStackFrame.h */; }; + 3DA981D21E5B0F29004F2374 /* RCTKeyCommands.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13A1F71C1A75392D00D3D453 /* RCTKeyCommands.h */; }; + 3DA981D31E5B0F29004F2374 /* RCTLog.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA4D1A601E3B00E9B192 /* RCTLog.h */; }; + 3DA981D41E5B0F29004F2374 /* RCTModuleData.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 14C2CA721B3AC64300E6CBB2 /* RCTModuleData.h */; }; + 3DA981D51E5B0F29004F2374 /* RCTModuleMethod.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 14C2CA6F1B3AC63800E6CBB2 /* RCTModuleMethod.h */; }; + 3DA981D61E5B0F29004F2374 /* RCTMultipartDataTask.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 006FC4121D9B20820057AAAD /* RCTMultipartDataTask.h */; }; + 3DA981D71E5B0F29004F2374 /* RCTMultipartStreamReader.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 001BFCCE1D8381DE008E587E /* RCTMultipartStreamReader.h */; }; + 3DA981D81E5B0F29004F2374 /* RCTNullability.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13A6E20F1C19ABC700845B82 /* RCTNullability.h */; }; + 3DA981D91E5B0F29004F2374 /* RCTParserUtils.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13A6E20C1C19AA0C00845B82 /* RCTParserUtils.h */; }; + 3DA981DA1E5B0F29004F2374 /* RCTPerformanceLogger.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 142014181B32094000CC17BA /* RCTPerformanceLogger.h */; }; + 3DA981DB1E5B0F29004F2374 /* RCTPlatform.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D7749421DC1065C007EC8D8 /* RCTPlatform.h */; }; + 3DA981DC1E5B0F29004F2374 /* RCTReloadCommand.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = A2440AA01DF8D854006E7BFC /* RCTReloadCommand.h */; }; + 3DA981DD1E5B0F29004F2374 /* RCTRootContentView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 59A7B9FB1E577DBF0068EDBF /* RCTRootContentView.h */; }; + 3DA981DE1E5B0F29004F2374 /* RCTRootView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 830A229C1A66C68A008503DA /* RCTRootView.h */; }; + 3DA981DF1E5B0F29004F2374 /* RCTRootViewDelegate.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13AFBCA21C07287B00BBAEAA /* RCTRootViewDelegate.h */; }; + 3DA981E11E5B0F29004F2374 /* RCTTouchEvent.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 391E86A31C623EC800009732 /* RCTTouchEvent.h */; }; + 3DA981E21E5B0F29004F2374 /* RCTTouchHandler.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA961A6020BB00E9B192 /* RCTTouchHandler.h */; }; + 3DA981E31E5B0F29004F2374 /* RCTURLRequestDelegate.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 1345A83A1B265A0E00583190 /* RCTURLRequestDelegate.h */; }; + 3DA981E41E5B0F29004F2374 /* RCTURLRequestHandler.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 1345A83B1B265A0E00583190 /* RCTURLRequestHandler.h */; }; + 3DA981E51E5B0F29004F2374 /* RCTUtils.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 83CBBA4F1A601E3B00E9B192 /* RCTUtils.h */; }; + 3DA981EA1E5B0F7F004F2374 /* RCTAccessibilityManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = E9B20B791B500126007A2DA7 /* RCTAccessibilityManager.h */; }; + 3DA981EB1E5B0F7F004F2374 /* RCTAlertManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13B07FE71A69327A00A75B9A /* RCTAlertManager.h */; }; + 3DA981EC1E5B0F7F004F2374 /* RCTAppState.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 1372B7081AB030C200659ED6 /* RCTAppState.h */; }; + 3DA981ED1E5B0F7F004F2374 /* RCTAsyncLocalStorage.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 58114A4F1AAE93D500E7D092 /* RCTAsyncLocalStorage.h */; }; + 3DA981EE1E5B0F7F004F2374 /* RCTClipboard.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13D033611C1837FE0021DC29 /* RCTClipboard.h */; }; + 3DA981EF1E5B0F7F004F2374 /* RCTDevLoadingView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13A0C2851B74F71200B29F6F /* RCTDevLoadingView.h */; }; + 3DA981F01E5B0F7F004F2374 /* RCTDevMenu.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13A0C2871B74F71200B29F6F /* RCTDevMenu.h */; }; + 3DA981F11E5B0F7F004F2374 /* RCTEventEmitter.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13D9FEE91CDCCECF00158BD7 /* RCTEventEmitter.h */; }; + 3DA981F21E5B0F7F004F2374 /* RCTExceptionsManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13B07FE91A69327A00A75B9A /* RCTExceptionsManager.h */; }; + 3DA981F31E5B0F7F004F2374 /* RCTI18nManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = B233E6E81D2D843200BC68BA /* RCTI18nManager.h */; }; + 3DA981F41E5B0F7F004F2374 /* RCTI18nUtil.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 352DCFEE1D19F4C20056D623 /* RCTI18nUtil.h */; }; + 3DA981F51E5B0F7F004F2374 /* RCTKeyboardObserver.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13D9FEEC1CDCD93000158BD7 /* RCTKeyboardObserver.h */; }; + 3DA981F61E5B0F7F004F2374 /* RCTRedBox.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13F17A831B8493E5007D4C75 /* RCTRedBox.h */; }; + 3DA981F71E5B0F7F004F2374 /* RCTSourceCode.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 000E6CE91AB0E97F000CDF4D /* RCTSourceCode.h */; }; + 3DA981F81E5B0F7F004F2374 /* RCTStatusBarManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13723B4E1A82FD3C00F88898 /* RCTStatusBarManager.h */; }; + 3DA981F91E5B0F7F004F2374 /* RCTTiming.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13B07FED1A69327A00A75B9A /* RCTTiming.h */; }; + 3DA981FA1E5B0F7F004F2374 /* RCTUIManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13E067481A70F434002CDEE1 /* RCTUIManager.h */; }; + 3DA981FB1E5B0F7F004F2374 /* RCTFPSGraph.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 14F7A0EE1BDA714B003C6C10 /* RCTFPSGraph.h */; }; + 3DA981FD1E5B0F7F004F2374 /* RCTMacros.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 14BF71811C04795500C97D0C /* RCTMacros.h */; }; + 3DA981FE1E5B0F7F004F2374 /* RCTProfile.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 1450FF801BCFF28A00208362 /* RCTProfile.h */; }; + 3DA981FF1E5B0F7F004F2374 /* RCTActivityIndicatorView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = B95154301D1B34B200FE7B80 /* RCTActivityIndicatorView.h */; }; + 3DA982001E5B0F7F004F2374 /* RCTActivityIndicatorViewManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13B080181A69489C00A75B9A /* RCTActivityIndicatorViewManager.h */; }; + 3DA982011E5B0F7F004F2374 /* RCTAnimationType.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13442BF21AA90E0B0037E5B0 /* RCTAnimationType.h */; }; + 3DA982021E5B0F7F004F2374 /* RCTAutoInsetsProtocol.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13C325261AA63B6A0048765F /* RCTAutoInsetsProtocol.h */; }; + 3DA982031E5B0F7F004F2374 /* RCTBorderDrawing.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13CC8A801B17642100940AE7 /* RCTBorderDrawing.h */; }; + 3DA982041E5B0F7F004F2374 /* RCTBorderStyle.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = ACDD3FDA1BC7430D00E7DE33 /* RCTBorderStyle.h */; }; + 3DA982051E5B0F7F004F2374 /* RCTComponent.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13C325281AA63B6A0048765F /* RCTComponent.h */; }; + 3DA982061E5B0F7F004F2374 /* RCTComponentData.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13AB90BF1B6FA36700713B4F /* RCTComponentData.h */; }; + 3DA982071E5B0F7F004F2374 /* RCTConvert+CoreLocation.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13456E911ADAD2DE009F94A7 /* RCTConvert+CoreLocation.h */; }; + 3DA9820C1E5B0F7F004F2374 /* RCTFont.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D37B5801D522B190042D5B5 /* RCTFont.h */; }; + 3DA982111E5B0F7F004F2374 /* RCTModalHostView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 83A1FE8A1B62640A00BE0E65 /* RCTModalHostView.h */; }; + 3DA982121E5B0F7F004F2374 /* RCTModalHostViewController.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 83392EB11B6634E10013B15F /* RCTModalHostViewController.h */; }; + 3DA982131E5B0F7F004F2374 /* RCTModalHostViewManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 83A1FE8D1B62643A00BE0E65 /* RCTModalHostViewManager.h */; }; + 3DA982181E5B0F7F004F2374 /* RCTPicker.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 58114A121AAE854800E7D092 /* RCTPicker.h */; }; + 3DA982191E5B0F7F004F2374 /* RCTPickerManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 58114A141AAE854800E7D092 /* RCTPickerManager.h */; }; + 3DA9821A1E5B0F7F004F2374 /* RCTPointerEvents.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13442BF31AA90E0B0037E5B0 /* RCTPointerEvents.h */; }; + 3DA9821B1E5B0F7F004F2374 /* RCTProgressViewManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13513F3A1B1F43F400FCE529 /* RCTProgressViewManager.h */; }; + 3DA9821C1E5B0F7F004F2374 /* RCTRefreshControl.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 191E3EBF1C29DC3800C180A6 /* RCTRefreshControl.h */; }; + 3DA9821D1E5B0F7F004F2374 /* RCTRefreshControlManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 191E3EBC1C29D9AF00C180A6 /* RCTRefreshControlManager.h */; }; + 3DA9821E1E5B0F7F004F2374 /* RCTRootShadowView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13BCE8071C99CB9D00DD7AAD /* RCTRootShadowView.h */; }; + 3DA982241E5B0F7F004F2374 /* RCTSegmentedControl.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 131B6AF01AF1093D00FFC3E0 /* RCTSegmentedControl.h */; }; + 3DA982251E5B0F7F004F2374 /* RCTSegmentedControlManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 131B6AF21AF1093D00FFC3E0 /* RCTSegmentedControlManager.h */; }; + 3DA982261E5B0F7F004F2374 /* RCTShadowView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13E0674B1A70F44B002CDEE1 /* RCTShadowView.h */; }; + 3DA982271E5B0F7F004F2374 /* RCTSlider.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13AF20431AE707F8005F5298 /* RCTSlider.h */; }; + 3DA982281E5B0F7F004F2374 /* RCTSliderManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 14F484541AABFCE100FDF6B9 /* RCTSliderManager.h */; }; + 3DA982291E5B0F7F004F2374 /* RCTSwitch.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 14F362071AABD06A001CE568 /* RCTSwitch.h */; }; + 3DA9822A1E5B0F7F004F2374 /* RCTSwitchManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 14F362091AABD06A001CE568 /* RCTSwitchManager.h */; }; + 3DA9822F1E5B0F7F004F2374 /* RCTTextDecorationLineType.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = E3BBC8EB1ADE6F47001BBD81 /* RCTTextDecorationLineType.h */; }; + 3DA982301E5B0F7F004F2374 /* RCTTVView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 130443D61E401AD800D93A67 /* RCTTVView.h */; }; + 3DA982311E5B0F7F004F2374 /* RCTView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13E0674F1A70F44B002CDEE1 /* RCTView.h */; }; + 3DA982331E5B0F7F004F2374 /* RCTViewManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13E0674D1A70F44B002CDEE1 /* RCTViewManager.h */; }; + 3DA982341E5B0F7F004F2374 /* RCTWebView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13C156011AB1A2840079392D /* RCTWebView.h */; }; + 3DA982351E5B0F7F004F2374 /* RCTWebViewManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13C156031AB1A2840079392D /* RCTWebViewManager.h */; }; + 3DA982361E5B0F7F004F2374 /* RCTWrapperViewController.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13B080231A694A8400A75B9A /* RCTWrapperViewController.h */; }; + 3DA982381E5B0F7F004F2374 /* UIView+React.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13E067531A70F44B002CDEE1 /* UIView+React.h */; }; + 3DA982391E5B0F8A004F2374 /* UIView+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 83F15A171B7CC46900F10295 /* UIView+Private.h */; }; + 3DA9823B1E5B1053004F2374 /* CxxModule.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0A71E03699D0018521A /* CxxModule.h */; }; + 3DA9823C1E5B1053004F2374 /* CxxNativeModule.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0A91E03699D0018521A /* CxxNativeModule.h */; }; + 3DA9823D1E5B1053004F2374 /* JSExecutor.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0AB1E03699D0018521A /* JSExecutor.h */; }; + 3DA982401E5B1053004F2374 /* Instance.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0AF1E03699D0018521A /* Instance.h */; }; + 3DA982411E5B1053004F2374 /* JsArgumentHelpers-inl.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0B01E03699D0018521A /* JsArgumentHelpers-inl.h */; }; + 3DA982421E5B1053004F2374 /* JsArgumentHelpers.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0B11E03699D0018521A /* JsArgumentHelpers.h */; }; + 3DA982431E5B1053004F2374 /* JSBigString.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D7454781E54757500E74ADD /* JSBigString.h */; }; + 3DA982441E5B1053004F2374 /* JSBundleType.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D3CD8F51DE5FB2300167DC4 /* JSBundleType.h */; }; + 3DA9824E1E5B1053004F2374 /* JSIndexedRAMBundle.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0C71E03699D0018521A /* JSIndexedRAMBundle.h */; }; + 3DA9824F1E5B1053004F2374 /* JSModulesUnbundle.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0C81E03699D0018521A /* JSModulesUnbundle.h */; }; + 3DA982501E5B1053004F2374 /* MessageQueueThread.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0C91E03699D0018521A /* MessageQueueThread.h */; }; + 3DA982511E5B1053004F2374 /* MethodCall.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0CB1E03699D0018521A /* MethodCall.h */; }; + 3DA982521E5B1053004F2374 /* ModuleRegistry.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0CD1E03699D0018521A /* ModuleRegistry.h */; }; + 3DA982531E5B1053004F2374 /* NativeModule.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0CE1E03699D0018521A /* NativeModule.h */; }; + 3DA982541E5B1053004F2374 /* NativeToJsBridge.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0D01E03699D0018521A /* NativeToJsBridge.h */; }; + 3DA982571E5B1053004F2374 /* RecoverableError.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D7454791E54757500E74ADD /* RecoverableError.h */; }; + 3DA982581E5B1053004F2374 /* SampleCxxModule.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0D41E03699D0018521A /* SampleCxxModule.h */; }; + 3DA982591E5B1053004F2374 /* SystraceSection.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0D51E03699D0018521A /* SystraceSection.h */; }; + 3DC159E41E83E1AE007B1282 /* RCTRootContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 59A7B9FC1E577DBF0068EDBF /* RCTRootContentView.m */; }; + 3DC159E51E83E1E9007B1282 /* JSBigString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 27B958731E57587D0096647A /* JSBigString.cpp */; }; + 3DC159E61E83E1FA007B1282 /* JSBigString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 27B958731E57587D0096647A /* JSBigString.cpp */; }; + 3DCD185D1DF978E7007FE5A1 /* RCTReloadCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = A2440AA11DF8D854006E7BFC /* RCTReloadCommand.m */; }; + 3DCE52F31FEAB10600613583 /* RCTRedBoxExtraDataViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = FEFAAC9D1FDB89B40057BBE0 /* RCTRedBoxExtraDataViewController.h */; }; + 3DCE52F41FEAB10D00613583 /* RCTRedBoxExtraDataViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FEFAAC9C1FDB89B40057BBE0 /* RCTRedBoxExtraDataViewController.m */; }; + 3DCE53251FEAB1E000613583 /* RCTShadowView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5335D5401FE81A4700883D58 /* RCTShadowView.m */; }; + 3DCE53281FEAB23100613583 /* RCTDatePicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 133CAE8C1B8E5CFD00F6AD92 /* RCTDatePicker.h */; }; + 3DCE53291FEAB23100613583 /* RCTDatePicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 133CAE8D1B8E5CFD00F6AD92 /* RCTDatePicker.m */; }; + 3DCE532A1FEAB23100613583 /* RCTDatePickerManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 58C571C01AA56C1900CDF9C8 /* RCTDatePickerManager.h */; }; + 3DCE532B1FEAB23100613583 /* RCTDatePickerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 58C571BF1AA56C1900CDF9C8 /* RCTDatePickerManager.m */; }; + 3EDCA8A51D3591E700450C31 /* RCTErrorInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EDCA8A41D3591E700450C31 /* RCTErrorInfo.m */; }; + 4F56C93822167A4800DB9F3F /* jsilib.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F56C93722167A4800DB9F3F /* jsilib.h */; }; + 4F56C93922167A4D00DB9F3F /* jsilib.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 4F56C93722167A4800DB9F3F /* jsilib.h */; }; + 4F56C93A2216A3B700DB9F3F /* jsilib.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 4F56C93722167A4800DB9F3F /* jsilib.h */; }; + 50E98FEA21460B0D00CD9289 /* RCTWKWebViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 50E98FE621460B0D00CD9289 /* RCTWKWebViewManager.m */; }; + 50E98FEB21460B0D00CD9289 /* RCTWKWebView.h in Headers */ = {isa = PBXBuildFile; fileRef = 50E98FE721460B0D00CD9289 /* RCTWKWebView.h */; }; + 50E98FEC21460B0D00CD9289 /* RCTWKWebView.m in Sources */ = {isa = PBXBuildFile; fileRef = 50E98FE821460B0D00CD9289 /* RCTWKWebView.m */; }; + 50E98FED21460B0D00CD9289 /* RCTWKWebViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 50E98FE921460B0D00CD9289 /* RCTWKWebViewManager.h */; }; + 5335D5411FE81A4700883D58 /* RCTShadowView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5335D5401FE81A4700883D58 /* RCTShadowView.m */; }; + 58114A161AAE854800E7D092 /* RCTPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 58114A131AAE854800E7D092 /* RCTPicker.m */; }; + 58114A171AAE854800E7D092 /* RCTPickerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 58114A151AAE854800E7D092 /* RCTPickerManager.m */; }; + 58114A501AAE93D500E7D092 /* RCTAsyncLocalStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 58114A4E1AAE93D500E7D092 /* RCTAsyncLocalStorage.m */; }; + 589515E02231AD9C0036BDE0 /* RCTSurfacePresenterStub.h in Headers */ = {isa = PBXBuildFile; fileRef = 589515DF2231AD9C0036BDE0 /* RCTSurfacePresenterStub.h */; }; + 589515E12231ADE00036BDE0 /* RCTSurfacePresenterStub.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 589515DF2231AD9C0036BDE0 /* RCTSurfacePresenterStub.h */; }; + 590D7BFD1EBD458B00D8A370 /* RCTShadowView+Layout.h in Headers */ = {isa = PBXBuildFile; fileRef = 590D7BFB1EBD458B00D8A370 /* RCTShadowView+Layout.h */; }; + 590D7BFE1EBD458B00D8A370 /* RCTShadowView+Layout.h in Headers */ = {isa = PBXBuildFile; fileRef = 590D7BFB1EBD458B00D8A370 /* RCTShadowView+Layout.h */; }; + 590D7BFF1EBD458B00D8A370 /* RCTShadowView+Layout.m in Sources */ = {isa = PBXBuildFile; fileRef = 590D7BFC1EBD458B00D8A370 /* RCTShadowView+Layout.m */; }; + 590D7C001EBD458B00D8A370 /* RCTShadowView+Layout.m in Sources */ = {isa = PBXBuildFile; fileRef = 590D7BFC1EBD458B00D8A370 /* RCTShadowView+Layout.m */; }; + 591F78DA202ADB22004A668C /* RCTLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 591F78D8202ADB21004A668C /* RCTLayout.m */; }; + 591F78DB202ADB22004A668C /* RCTLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 591F78D8202ADB21004A668C /* RCTLayout.m */; }; + 591F78DC202ADB22004A668C /* RCTLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 591F78D9202ADB22004A668C /* RCTLayout.h */; }; + 591F78DD202ADB22004A668C /* RCTLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 591F78D9202ADB22004A668C /* RCTLayout.h */; }; + 591F78DE202ADB8F004A668C /* RCTLayout.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 591F78D9202ADB22004A668C /* RCTLayout.h */; }; + 591F78DF202ADB97004A668C /* RCTLayout.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 591F78D9202ADB22004A668C /* RCTLayout.h */; }; + 5925356A20084D0600DD584B /* RCTSurfaceSizeMeasureMode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5925356920084D0600DD584B /* RCTSurfaceSizeMeasureMode.mm */; }; + 5925356B20084D0600DD584B /* RCTSurfaceSizeMeasureMode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5925356920084D0600DD584B /* RCTSurfaceSizeMeasureMode.mm */; }; + 59283CA01FD67321000EAAB9 /* RCTSurfaceStage.m in Sources */ = {isa = PBXBuildFile; fileRef = 59283C9F1FD67320000EAAB9 /* RCTSurfaceStage.m */; }; + 59283CA11FD67321000EAAB9 /* RCTSurfaceStage.m in Sources */ = {isa = PBXBuildFile; fileRef = 59283C9F1FD67320000EAAB9 /* RCTSurfaceStage.m */; }; + 594F0A321FD23228007FBE96 /* RCTSurfaceHostingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 594F0A2F1FD23228007FBE96 /* RCTSurfaceHostingView.h */; }; + 594F0A331FD23228007FBE96 /* RCTSurfaceHostingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 594F0A2F1FD23228007FBE96 /* RCTSurfaceHostingView.h */; }; + 594F0A341FD23228007FBE96 /* RCTSurfaceHostingView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 594F0A301FD23228007FBE96 /* RCTSurfaceHostingView.mm */; }; + 594F0A351FD23228007FBE96 /* RCTSurfaceHostingView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 594F0A301FD23228007FBE96 /* RCTSurfaceHostingView.mm */; }; + 594F0A361FD23228007FBE96 /* RCTSurfaceSizeMeasureMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 594F0A311FD23228007FBE96 /* RCTSurfaceSizeMeasureMode.h */; }; + 594F0A371FD23228007FBE96 /* RCTSurfaceSizeMeasureMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 594F0A311FD23228007FBE96 /* RCTSurfaceSizeMeasureMode.h */; }; + 594F0A381FD233A2007FBE96 /* RCTSurface.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 599FAA2A1FB274970058CCF6 /* RCTSurface.h */; }; + 594F0A391FD233A2007FBE96 /* RCTSurfaceDelegate.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 599FAA2C1FB274970058CCF6 /* RCTSurfaceDelegate.h */; }; + 594F0A3A1FD233A2007FBE96 /* RCTSurfaceRootShadowView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 599FAA2D1FB274970058CCF6 /* RCTSurfaceRootShadowView.h */; }; + 594F0A3B1FD233A2007FBE96 /* RCTSurfaceRootShadowViewDelegate.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 599FAA2F1FB274970058CCF6 /* RCTSurfaceRootShadowViewDelegate.h */; }; + 594F0A3C1FD233A2007FBE96 /* RCTSurfaceRootView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 599FAA301FB274970058CCF6 /* RCTSurfaceRootView.h */; }; + 594F0A3D1FD233A2007FBE96 /* RCTSurfaceStage.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 599FAA321FB274970058CCF6 /* RCTSurfaceStage.h */; }; + 594F0A3E1FD233A2007FBE96 /* RCTSurfaceView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 599FAA341FB274970058CCF6 /* RCTSurfaceView.h */; }; + 594F0A3F1FD233A2007FBE96 /* RCTSurfaceHostingView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 594F0A2F1FD23228007FBE96 /* RCTSurfaceHostingView.h */; }; + 594F0A401FD233A2007FBE96 /* RCTSurfaceSizeMeasureMode.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 594F0A311FD23228007FBE96 /* RCTSurfaceSizeMeasureMode.h */; }; + 594F0A411FD233BD007FBE96 /* RCTSurface.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 599FAA2A1FB274970058CCF6 /* RCTSurface.h */; }; + 594F0A421FD233BD007FBE96 /* RCTSurfaceDelegate.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 599FAA2C1FB274970058CCF6 /* RCTSurfaceDelegate.h */; }; + 594F0A431FD233BD007FBE96 /* RCTSurfaceRootShadowView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 599FAA2D1FB274970058CCF6 /* RCTSurfaceRootShadowView.h */; }; + 594F0A441FD233BD007FBE96 /* RCTSurfaceRootShadowViewDelegate.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 599FAA2F1FB274970058CCF6 /* RCTSurfaceRootShadowViewDelegate.h */; }; + 594F0A451FD233BD007FBE96 /* RCTSurfaceRootView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 599FAA301FB274970058CCF6 /* RCTSurfaceRootView.h */; }; + 594F0A461FD233BD007FBE96 /* RCTSurfaceStage.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 599FAA321FB274970058CCF6 /* RCTSurfaceStage.h */; }; + 594F0A471FD233BD007FBE96 /* RCTSurfaceView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 599FAA341FB274970058CCF6 /* RCTSurfaceView.h */; }; + 594F0A481FD233BD007FBE96 /* RCTSurfaceHostingView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 594F0A2F1FD23228007FBE96 /* RCTSurfaceHostingView.h */; }; + 594F0A491FD233BD007FBE96 /* RCTSurfaceSizeMeasureMode.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 594F0A311FD23228007FBE96 /* RCTSurfaceSizeMeasureMode.h */; }; + 59500D431F71C63F00B122B7 /* RCTUIManagerUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 59500D411F71C63700B122B7 /* RCTUIManagerUtils.h */; }; + 59500D441F71C63F00B122B7 /* RCTUIManagerUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 59500D411F71C63700B122B7 /* RCTUIManagerUtils.h */; }; + 59500D451F71C63F00B122B7 /* RCTUIManagerUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 59500D421F71C63F00B122B7 /* RCTUIManagerUtils.m */; }; + 59500D461F71C63F00B122B7 /* RCTUIManagerUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 59500D421F71C63F00B122B7 /* RCTUIManagerUtils.m */; }; + 59500D471F71C66700B122B7 /* RCTUIManagerUtils.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 59500D411F71C63700B122B7 /* RCTUIManagerUtils.h */; }; + 59500D481F71C67600B122B7 /* RCTUIManagerUtils.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 59500D411F71C63700B122B7 /* RCTUIManagerUtils.h */; }; + 5960C1B51F0804A00066FD5B /* RCTLayoutAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 5960C1B11F0804A00066FD5B /* RCTLayoutAnimation.h */; }; + 5960C1B61F0804A00066FD5B /* RCTLayoutAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 5960C1B11F0804A00066FD5B /* RCTLayoutAnimation.h */; }; + 5960C1B71F0804A00066FD5B /* RCTLayoutAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 5960C1B21F0804A00066FD5B /* RCTLayoutAnimation.m */; }; + 5960C1B81F0804A00066FD5B /* RCTLayoutAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 5960C1B21F0804A00066FD5B /* RCTLayoutAnimation.m */; }; + 5960C1B91F0804A00066FD5B /* RCTLayoutAnimationGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 5960C1B31F0804A00066FD5B /* RCTLayoutAnimationGroup.h */; }; + 5960C1BA1F0804A00066FD5B /* RCTLayoutAnimationGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 5960C1B31F0804A00066FD5B /* RCTLayoutAnimationGroup.h */; }; + 5960C1BB1F0804A00066FD5B /* RCTLayoutAnimationGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 5960C1B41F0804A00066FD5B /* RCTLayoutAnimationGroup.m */; }; + 5960C1BC1F0804A00066FD5B /* RCTLayoutAnimationGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 5960C1B41F0804A00066FD5B /* RCTLayoutAnimationGroup.m */; }; + 5960C1BD1F0804DF0066FD5B /* RCTLayoutAnimation.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 5960C1B11F0804A00066FD5B /* RCTLayoutAnimation.h */; }; + 5960C1BE1F0804DF0066FD5B /* RCTLayoutAnimationGroup.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 5960C1B31F0804A00066FD5B /* RCTLayoutAnimationGroup.h */; }; + 5960C1BF1F0804F50066FD5B /* RCTLayoutAnimation.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 5960C1B11F0804A00066FD5B /* RCTLayoutAnimation.h */; }; + 5960C1C01F0804F50066FD5B /* RCTLayoutAnimationGroup.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 5960C1B31F0804A00066FD5B /* RCTLayoutAnimationGroup.h */; }; + 597633361F4E021D005BE8A4 /* RCTShadowView+Internal.m in Sources */ = {isa = PBXBuildFile; fileRef = 597633341F4E021D005BE8A4 /* RCTShadowView+Internal.m */; }; + 597633371F4E021D005BE8A4 /* RCTShadowView+Internal.m in Sources */ = {isa = PBXBuildFile; fileRef = 597633341F4E021D005BE8A4 /* RCTShadowView+Internal.m */; }; + 597633381F4E021D005BE8A4 /* RCTShadowView+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 597633351F4E021D005BE8A4 /* RCTShadowView+Internal.h */; }; + 597633391F4E021D005BE8A4 /* RCTShadowView+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 597633351F4E021D005BE8A4 /* RCTShadowView+Internal.h */; }; + 598FD1921F816A2A006C54CB /* RAMBundleRegistry.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = C6D380181F71D75B00621378 /* RAMBundleRegistry.h */; }; + 598FD1951F817335006C54CB /* RCTModalManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 91076A881F743AB00081B4FA /* RCTModalManager.h */; }; + 598FD1961F817335006C54CB /* RCTModalManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 91076A871F743AB00081B4FA /* RCTModalManager.m */; }; + 598FD1971F817336006C54CB /* RCTModalManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 91076A881F743AB00081B4FA /* RCTModalManager.h */; }; + 599FAA361FB274980058CCF6 /* RCTSurface.h in Headers */ = {isa = PBXBuildFile; fileRef = 599FAA2A1FB274970058CCF6 /* RCTSurface.h */; }; + 599FAA371FB274980058CCF6 /* RCTSurface.h in Headers */ = {isa = PBXBuildFile; fileRef = 599FAA2A1FB274970058CCF6 /* RCTSurface.h */; }; + 599FAA381FB274980058CCF6 /* RCTSurface.mm in Sources */ = {isa = PBXBuildFile; fileRef = 599FAA2B1FB274970058CCF6 /* RCTSurface.mm */; }; + 599FAA391FB274980058CCF6 /* RCTSurface.mm in Sources */ = {isa = PBXBuildFile; fileRef = 599FAA2B1FB274970058CCF6 /* RCTSurface.mm */; }; + 599FAA3A1FB274980058CCF6 /* RCTSurfaceDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 599FAA2C1FB274970058CCF6 /* RCTSurfaceDelegate.h */; }; + 599FAA3B1FB274980058CCF6 /* RCTSurfaceDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 599FAA2C1FB274970058CCF6 /* RCTSurfaceDelegate.h */; }; + 599FAA3C1FB274980058CCF6 /* RCTSurfaceRootShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = 599FAA2D1FB274970058CCF6 /* RCTSurfaceRootShadowView.h */; }; + 599FAA3D1FB274980058CCF6 /* RCTSurfaceRootShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = 599FAA2D1FB274970058CCF6 /* RCTSurfaceRootShadowView.h */; }; + 599FAA3E1FB274980058CCF6 /* RCTSurfaceRootShadowView.m in Sources */ = {isa = PBXBuildFile; fileRef = 599FAA2E1FB274970058CCF6 /* RCTSurfaceRootShadowView.m */; }; + 599FAA3F1FB274980058CCF6 /* RCTSurfaceRootShadowView.m in Sources */ = {isa = PBXBuildFile; fileRef = 599FAA2E1FB274970058CCF6 /* RCTSurfaceRootShadowView.m */; }; + 599FAA401FB274980058CCF6 /* RCTSurfaceRootShadowViewDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 599FAA2F1FB274970058CCF6 /* RCTSurfaceRootShadowViewDelegate.h */; }; + 599FAA411FB274980058CCF6 /* RCTSurfaceRootShadowViewDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 599FAA2F1FB274970058CCF6 /* RCTSurfaceRootShadowViewDelegate.h */; }; + 599FAA421FB274980058CCF6 /* RCTSurfaceRootView.h in Headers */ = {isa = PBXBuildFile; fileRef = 599FAA301FB274970058CCF6 /* RCTSurfaceRootView.h */; }; + 599FAA431FB274980058CCF6 /* RCTSurfaceRootView.h in Headers */ = {isa = PBXBuildFile; fileRef = 599FAA301FB274970058CCF6 /* RCTSurfaceRootView.h */; }; + 599FAA441FB274980058CCF6 /* RCTSurfaceRootView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 599FAA311FB274970058CCF6 /* RCTSurfaceRootView.mm */; }; + 599FAA451FB274980058CCF6 /* RCTSurfaceRootView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 599FAA311FB274970058CCF6 /* RCTSurfaceRootView.mm */; }; + 599FAA461FB274980058CCF6 /* RCTSurfaceStage.h in Headers */ = {isa = PBXBuildFile; fileRef = 599FAA321FB274970058CCF6 /* RCTSurfaceStage.h */; }; + 599FAA471FB274980058CCF6 /* RCTSurfaceStage.h in Headers */ = {isa = PBXBuildFile; fileRef = 599FAA321FB274970058CCF6 /* RCTSurfaceStage.h */; }; + 599FAA481FB274980058CCF6 /* RCTSurfaceView+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 599FAA331FB274970058CCF6 /* RCTSurfaceView+Internal.h */; }; + 599FAA491FB274980058CCF6 /* RCTSurfaceView+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 599FAA331FB274970058CCF6 /* RCTSurfaceView+Internal.h */; }; + 599FAA4A1FB274980058CCF6 /* RCTSurfaceView.h in Headers */ = {isa = PBXBuildFile; fileRef = 599FAA341FB274970058CCF6 /* RCTSurfaceView.h */; }; + 599FAA4B1FB274980058CCF6 /* RCTSurfaceView.h in Headers */ = {isa = PBXBuildFile; fileRef = 599FAA341FB274970058CCF6 /* RCTSurfaceView.h */; }; + 599FAA4C1FB274980058CCF6 /* RCTSurfaceView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 599FAA351FB274970058CCF6 /* RCTSurfaceView.mm */; }; + 599FAA4D1FB274980058CCF6 /* RCTSurfaceView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 599FAA351FB274970058CCF6 /* RCTSurfaceView.mm */; }; + 59A7B9FD1E577DBF0068EDBF /* RCTRootContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 59A7B9FB1E577DBF0068EDBF /* RCTRootContentView.h */; }; + 59A7B9FE1E577DBF0068EDBF /* RCTRootContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 59A7B9FC1E577DBF0068EDBF /* RCTRootContentView.m */; }; + 59B1EBC91EBD46250047B19B /* RCTShadowView+Layout.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 590D7BFB1EBD458B00D8A370 /* RCTShadowView+Layout.h */; }; + 59B1EBCA1EBD47520047B19B /* RCTShadowView+Layout.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 590D7BFB1EBD458B00D8A370 /* RCTShadowView+Layout.h */; }; + 59D031ED1F8353D3008361F0 /* RCTSafeAreaShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = 59D031E51F8353D3008361F0 /* RCTSafeAreaShadowView.h */; }; + 59D031EE1F8353D3008361F0 /* RCTSafeAreaShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = 59D031E51F8353D3008361F0 /* RCTSafeAreaShadowView.h */; }; + 59D031EF1F8353D3008361F0 /* RCTSafeAreaShadowView.m in Sources */ = {isa = PBXBuildFile; fileRef = 59D031E61F8353D3008361F0 /* RCTSafeAreaShadowView.m */; }; + 59D031F01F8353D3008361F0 /* RCTSafeAreaShadowView.m in Sources */ = {isa = PBXBuildFile; fileRef = 59D031E61F8353D3008361F0 /* RCTSafeAreaShadowView.m */; }; + 59D031F11F8353D3008361F0 /* RCTSafeAreaView.h in Headers */ = {isa = PBXBuildFile; fileRef = 59D031E71F8353D3008361F0 /* RCTSafeAreaView.h */; }; + 59D031F21F8353D3008361F0 /* RCTSafeAreaView.h in Headers */ = {isa = PBXBuildFile; fileRef = 59D031E71F8353D3008361F0 /* RCTSafeAreaView.h */; }; + 59D031F31F8353D3008361F0 /* RCTSafeAreaView.m in Sources */ = {isa = PBXBuildFile; fileRef = 59D031E81F8353D3008361F0 /* RCTSafeAreaView.m */; }; + 59D031F41F8353D3008361F0 /* RCTSafeAreaView.m in Sources */ = {isa = PBXBuildFile; fileRef = 59D031E81F8353D3008361F0 /* RCTSafeAreaView.m */; }; + 59D031F51F8353D3008361F0 /* RCTSafeAreaViewLocalData.h in Headers */ = {isa = PBXBuildFile; fileRef = 59D031E91F8353D3008361F0 /* RCTSafeAreaViewLocalData.h */; }; + 59D031F61F8353D3008361F0 /* RCTSafeAreaViewLocalData.h in Headers */ = {isa = PBXBuildFile; fileRef = 59D031E91F8353D3008361F0 /* RCTSafeAreaViewLocalData.h */; }; + 59D031F71F8353D3008361F0 /* RCTSafeAreaViewLocalData.m in Sources */ = {isa = PBXBuildFile; fileRef = 59D031EA1F8353D3008361F0 /* RCTSafeAreaViewLocalData.m */; }; + 59D031F81F8353D3008361F0 /* RCTSafeAreaViewLocalData.m in Sources */ = {isa = PBXBuildFile; fileRef = 59D031EA1F8353D3008361F0 /* RCTSafeAreaViewLocalData.m */; }; + 59D031F91F8353D3008361F0 /* RCTSafeAreaViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 59D031EB1F8353D3008361F0 /* RCTSafeAreaViewManager.h */; }; + 59D031FA1F8353D3008361F0 /* RCTSafeAreaViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 59D031EB1F8353D3008361F0 /* RCTSafeAreaViewManager.h */; }; + 59D031FB1F8353D3008361F0 /* RCTSafeAreaViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 59D031EC1F8353D3008361F0 /* RCTSafeAreaViewManager.m */; }; + 59D031FC1F8353D3008361F0 /* RCTSafeAreaViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 59D031EC1F8353D3008361F0 /* RCTSafeAreaViewManager.m */; }; + 59E604A01FE9CCE300BD90C5 /* RCTScrollContentShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = 59E6049C1FE9CCE100BD90C5 /* RCTScrollContentShadowView.h */; }; + 59E604A11FE9CCE300BD90C5 /* RCTScrollContentShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = 59E6049C1FE9CCE100BD90C5 /* RCTScrollContentShadowView.h */; }; + 59E604A21FE9CCE300BD90C5 /* RCTScrollContentViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 59E6049D1FE9CCE200BD90C5 /* RCTScrollContentViewManager.m */; }; + 59E604A31FE9CCE300BD90C5 /* RCTScrollContentViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 59E6049D1FE9CCE200BD90C5 /* RCTScrollContentViewManager.m */; }; + 59E604A41FE9CCE300BD90C5 /* RCTScrollContentShadowView.m in Sources */ = {isa = PBXBuildFile; fileRef = 59E6049E1FE9CCE200BD90C5 /* RCTScrollContentShadowView.m */; }; + 59E604A51FE9CCE300BD90C5 /* RCTScrollContentShadowView.m in Sources */ = {isa = PBXBuildFile; fileRef = 59E6049E1FE9CCE200BD90C5 /* RCTScrollContentShadowView.m */; }; + 59E604A61FE9CCE300BD90C5 /* RCTScrollContentViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 59E6049F1FE9CCE200BD90C5 /* RCTScrollContentViewManager.h */; }; + 59E604A71FE9CCE300BD90C5 /* RCTScrollContentViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 59E6049F1FE9CCE200BD90C5 /* RCTScrollContentViewManager.h */; }; + 59EB6DBB1EBD6FC90072A5E7 /* RCTUIManagerObserverCoordinator.h in Headers */ = {isa = PBXBuildFile; fileRef = 59EB6DB91EBD6FC90072A5E7 /* RCTUIManagerObserverCoordinator.h */; }; + 59EB6DBC1EBD6FC90072A5E7 /* RCTUIManagerObserverCoordinator.h in Headers */ = {isa = PBXBuildFile; fileRef = 59EB6DB91EBD6FC90072A5E7 /* RCTUIManagerObserverCoordinator.h */; }; + 59EB6DBD1EBD6FC90072A5E7 /* RCTUIManagerObserverCoordinator.mm in Sources */ = {isa = PBXBuildFile; fileRef = 59EB6DBA1EBD6FC90072A5E7 /* RCTUIManagerObserverCoordinator.mm */; }; + 59EB6DBE1EBD6FC90072A5E7 /* RCTUIManagerObserverCoordinator.mm in Sources */ = {isa = PBXBuildFile; fileRef = 59EB6DBA1EBD6FC90072A5E7 /* RCTUIManagerObserverCoordinator.mm */; }; + 59EB6DBF1EBD6FFC0072A5E7 /* RCTUIManagerObserverCoordinator.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 59EB6DB91EBD6FC90072A5E7 /* RCTUIManagerObserverCoordinator.h */; }; + 59EB6DC01EBD70130072A5E7 /* RCTUIManagerObserverCoordinator.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 59EB6DB91EBD6FC90072A5E7 /* RCTUIManagerObserverCoordinator.h */; }; + 59EDBCA71FDF4E0C003573DE /* RCTScrollableProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 59EDBC9C1FDF4E0C003573DE /* RCTScrollableProtocol.h */; }; + 59EDBCA81FDF4E0C003573DE /* RCTScrollableProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 59EDBC9C1FDF4E0C003573DE /* RCTScrollableProtocol.h */; }; + 59EDBCAD1FDF4E0C003573DE /* RCTScrollContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 59EDBC9F1FDF4E0C003573DE /* RCTScrollContentView.h */; }; + 59EDBCAE1FDF4E0C003573DE /* RCTScrollContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 59EDBC9F1FDF4E0C003573DE /* RCTScrollContentView.h */; }; + 59EDBCAF1FDF4E0C003573DE /* RCTScrollContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 59EDBCA01FDF4E0C003573DE /* RCTScrollContentView.m */; }; + 59EDBCB01FDF4E0C003573DE /* RCTScrollContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 59EDBCA01FDF4E0C003573DE /* RCTScrollContentView.m */; }; + 59EDBCB51FDF4E0C003573DE /* RCTScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = 59EDBCA31FDF4E0C003573DE /* RCTScrollView.h */; }; + 59EDBCB61FDF4E0C003573DE /* RCTScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = 59EDBCA31FDF4E0C003573DE /* RCTScrollView.h */; }; + 59EDBCB71FDF4E0C003573DE /* RCTScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 59EDBCA41FDF4E0C003573DE /* RCTScrollView.m */; }; + 59EDBCB81FDF4E0C003573DE /* RCTScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 59EDBCA41FDF4E0C003573DE /* RCTScrollView.m */; }; + 59EDBCB91FDF4E0C003573DE /* RCTScrollViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 59EDBCA51FDF4E0C003573DE /* RCTScrollViewManager.h */; }; + 59EDBCBA1FDF4E0C003573DE /* RCTScrollViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 59EDBCA51FDF4E0C003573DE /* RCTScrollViewManager.h */; }; + 59EDBCBB1FDF4E0C003573DE /* RCTScrollViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 59EDBCA61FDF4E0C003573DE /* RCTScrollViewManager.m */; }; + 59EDBCBC1FDF4E0C003573DE /* RCTScrollViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 59EDBCA61FDF4E0C003573DE /* RCTScrollViewManager.m */; }; + 59EDBCBD1FDF4E43003573DE /* RCTScrollableProtocol.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 59EDBC9C1FDF4E0C003573DE /* RCTScrollableProtocol.h */; }; + 59EDBCBF1FDF4E43003573DE /* RCTScrollContentView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 59EDBC9F1FDF4E0C003573DE /* RCTScrollContentView.h */; }; + 59EDBCC11FDF4E43003573DE /* RCTScrollView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 59EDBCA31FDF4E0C003573DE /* RCTScrollView.h */; }; + 59EDBCC21FDF4E43003573DE /* RCTScrollViewManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 59EDBCA51FDF4E0C003573DE /* RCTScrollViewManager.h */; }; + 59EDBCC31FDF4E55003573DE /* RCTScrollableProtocol.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 59EDBC9C1FDF4E0C003573DE /* RCTScrollableProtocol.h */; }; + 59EDBCC51FDF4E55003573DE /* RCTScrollContentView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 59EDBC9F1FDF4E0C003573DE /* RCTScrollContentView.h */; }; + 59EDBCC71FDF4E55003573DE /* RCTScrollView.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 59EDBCA31FDF4E0C003573DE /* RCTScrollView.h */; }; + 59EDBCC81FDF4E55003573DE /* RCTScrollViewManager.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 59EDBCA51FDF4E0C003573DE /* RCTScrollViewManager.h */; }; + 657734841EE834C900A0E9EA /* RCTInspectorDevServerHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 657734821EE834C900A0E9EA /* RCTInspectorDevServerHelper.h */; }; + 657734851EE834C900A0E9EA /* RCTInspectorDevServerHelper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 657734831EE834C900A0E9EA /* RCTInspectorDevServerHelper.mm */; }; + 657734861EE834D900A0E9EA /* RCTInspectorDevServerHelper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 657734831EE834C900A0E9EA /* RCTInspectorDevServerHelper.mm */; }; + 657734871EE834E000A0E9EA /* RCTInspectorDevServerHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 657734821EE834C900A0E9EA /* RCTInspectorDevServerHelper.h */; }; + 6577348E1EE8354A00A0E9EA /* RCTInspector.h in Headers */ = {isa = PBXBuildFile; fileRef = 6577348A1EE8354A00A0E9EA /* RCTInspector.h */; }; + 6577348F1EE8354A00A0E9EA /* RCTInspector.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6577348B1EE8354A00A0E9EA /* RCTInspector.mm */; }; + 657734901EE8354A00A0E9EA /* RCTInspectorPackagerConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 6577348C1EE8354A00A0E9EA /* RCTInspectorPackagerConnection.h */; }; + 657734911EE8354A00A0E9EA /* RCTInspectorPackagerConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 6577348D1EE8354A00A0E9EA /* RCTInspectorPackagerConnection.m */; }; + 657734921EE8356100A0E9EA /* RCTInspector.h in Headers */ = {isa = PBXBuildFile; fileRef = 6577348A1EE8354A00A0E9EA /* RCTInspector.h */; }; + 657734931EE8356100A0E9EA /* RCTInspector.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6577348B1EE8354A00A0E9EA /* RCTInspector.mm */; }; + 657734941EE8356100A0E9EA /* RCTInspectorPackagerConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 6577348C1EE8354A00A0E9EA /* RCTInspectorPackagerConnection.h */; }; + 657734951EE8356100A0E9EA /* RCTInspectorPackagerConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 6577348D1EE8354A00A0E9EA /* RCTInspectorPackagerConnection.m */; }; + 66CD94B11F1045E700CB3C7C /* RCTMaskedView.h in Headers */ = {isa = PBXBuildFile; fileRef = 66CD94AD1F1045E700CB3C7C /* RCTMaskedView.h */; }; + 66CD94B21F1045E700CB3C7C /* RCTMaskedView.h in Headers */ = {isa = PBXBuildFile; fileRef = 66CD94AD1F1045E700CB3C7C /* RCTMaskedView.h */; }; + 66CD94B31F1045E700CB3C7C /* RCTMaskedView.m in Sources */ = {isa = PBXBuildFile; fileRef = 66CD94AE1F1045E700CB3C7C /* RCTMaskedView.m */; }; + 66CD94B41F1045E700CB3C7C /* RCTMaskedView.m in Sources */ = {isa = PBXBuildFile; fileRef = 66CD94AE1F1045E700CB3C7C /* RCTMaskedView.m */; }; + 66CD94B51F1045E700CB3C7C /* RCTMaskedViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 66CD94AF1F1045E700CB3C7C /* RCTMaskedViewManager.h */; }; + 66CD94B61F1045E700CB3C7C /* RCTMaskedViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 66CD94AF1F1045E700CB3C7C /* RCTMaskedViewManager.h */; }; + 66CD94B71F1045E700CB3C7C /* RCTMaskedViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 66CD94B01F1045E700CB3C7C /* RCTMaskedViewManager.m */; }; + 66CD94B81F1045E700CB3C7C /* RCTMaskedViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 66CD94B01F1045E700CB3C7C /* RCTMaskedViewManager.m */; }; + 68EFE4EE1CF6EB3900A1DE13 /* RCTBundleURLProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 68EFE4ED1CF6EB3900A1DE13 /* RCTBundleURLProvider.m */; }; + 6D4C7F86224946B900CBB1EC /* libYogaDev.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D4C7F85224946B900CBB1EC /* libYogaDev.a */; }; + 6D4C7FB02249479200CBB1EC /* libYogaDev.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D4C7FAF2249479200CBB1EC /* libYogaDev.a */; }; + 6DCB224622493AF10041DDBC /* Demangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6DCB224522493AF10041DDBC /* Demangle.cpp */; }; + 830A229E1A66C68A008503DA /* RCTRootView.m in Sources */ = {isa = PBXBuildFile; fileRef = 830A229D1A66C68A008503DA /* RCTRootView.m */; }; + 83281384217EB70900574D55 /* MallocImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83281383217EB70800574D55 /* MallocImpl.cpp */; }; + 83281385217EB71200574D55 /* MallocImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83281383217EB70800574D55 /* MallocImpl.cpp */; }; + 83281387217EB73400574D55 /* String.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83281386217EB73400574D55 /* String.cpp */; }; + 83281388217EB73400574D55 /* String.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83281386217EB73400574D55 /* String.cpp */; }; + 8328138A217EB74C00574D55 /* json_pointer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83281389217EB74C00574D55 /* json_pointer.cpp */; }; + 8328138B217EB74C00574D55 /* json_pointer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83281389217EB74C00574D55 /* json_pointer.cpp */; }; + 8328138D217EB75C00574D55 /* ColdClass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8328138C217EB75C00574D55 /* ColdClass.cpp */; }; + 8328138E217EB75C00574D55 /* ColdClass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8328138C217EB75C00574D55 /* ColdClass.cpp */; }; + 83281393217EB77D00574D55 /* SpookyHashV2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83281392217EB77C00574D55 /* SpookyHashV2.cpp */; }; + 83281394217EB77D00574D55 /* SpookyHashV2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83281392217EB77C00574D55 /* SpookyHashV2.cpp */; }; + 83281396217EB79000574D55 /* F14Table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83281395217EB78F00574D55 /* F14Table.cpp */; }; + 83281397217EB79000574D55 /* F14Table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83281395217EB78F00574D55 /* F14Table.cpp */; }; + 83281399217EB79D00574D55 /* ScopeGuard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83281398217EB79D00574D55 /* ScopeGuard.cpp */; }; + 8328139A217EB79D00574D55 /* ScopeGuard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83281398217EB79D00574D55 /* ScopeGuard.cpp */; }; + 83392EB31B6634E10013B15F /* RCTModalHostViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 83392EB21B6634E10013B15F /* RCTModalHostViewController.m */; }; + 833D02BA217EBCFA00A23750 /* Assume.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 833D02B9217EBCFA00A23750 /* Assume.cpp */; }; + 833D02BB217EBCFA00A23750 /* Assume.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 833D02B9217EBCFA00A23750 /* Assume.cpp */; }; + 833D02BD217EBD2600A23750 /* Format.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 833D02BC217EBD2600A23750 /* Format.cpp */; }; + 833D02BE217EBD2600A23750 /* Format.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 833D02BC217EBD2600A23750 /* Format.cpp */; }; + 83A1FE8C1B62640A00BE0E65 /* RCTModalHostView.m in Sources */ = {isa = PBXBuildFile; fileRef = 83A1FE8B1B62640A00BE0E65 /* RCTModalHostView.m */; }; + 83A1FE8F1B62643A00BE0E65 /* RCTModalHostViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 83A1FE8E1B62643A00BE0E65 /* RCTModalHostViewManager.m */; }; + 83CBBA511A601E3B00E9B192 /* RCTAssert.m in Sources */ = {isa = PBXBuildFile; fileRef = 83CBBA4B1A601E3B00E9B192 /* RCTAssert.m */; }; + 83CBBA521A601E3B00E9B192 /* RCTLog.mm in Sources */ = {isa = PBXBuildFile; fileRef = 83CBBA4E1A601E3B00E9B192 /* RCTLog.mm */; }; + 83CBBA531A601E3B00E9B192 /* RCTUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 83CBBA501A601E3B00E9B192 /* RCTUtils.m */; }; + 83CBBA601A601EAA00E9B192 /* RCTBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 83CBBA5F1A601EAA00E9B192 /* RCTBridge.m */; }; + 83CBBA691A601EF300E9B192 /* RCTEventDispatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 83CBBA661A601EF300E9B192 /* RCTEventDispatcher.m */; }; + 83CBBA981A6020BB00E9B192 /* RCTTouchHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 83CBBA971A6020BB00E9B192 /* RCTTouchHandler.m */; }; + 83CBBACC1A6023D300E9B192 /* RCTConvert.m in Sources */ = {isa = PBXBuildFile; fileRef = 83CBBACB1A6023D300E9B192 /* RCTConvert.m */; }; + 8507BBBE21EDACC200AEAFCA /* JSCExecutorFactory.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8507BBBC21EDACC200AEAFCA /* JSCExecutorFactory.mm */; }; + 8507BBBF21EDACC200AEAFCA /* JSCExecutorFactory.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8507BBBC21EDACC200AEAFCA /* JSCExecutorFactory.mm */; }; + 8507BBC021EDACC200AEAFCA /* JSCExecutorFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 8507BBBD21EDACC200AEAFCA /* JSCExecutorFactory.h */; }; + 8507BBC121EDACC200AEAFCA /* JSCExecutorFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 8507BBBD21EDACC200AEAFCA /* JSCExecutorFactory.h */; }; + 916F9C2D1F743F57002E5920 /* RCTModalManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 91076A871F743AB00081B4FA /* RCTModalManager.m */; }; + A2440AA21DF8D854006E7BFC /* RCTReloadCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = A2440AA01DF8D854006E7BFC /* RCTReloadCommand.h */; }; + A2440AA31DF8D854006E7BFC /* RCTReloadCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = A2440AA11DF8D854006E7BFC /* RCTReloadCommand.m */; }; + A2440AA41DF8D865006E7BFC /* RCTReloadCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = A2440AA01DF8D854006E7BFC /* RCTReloadCommand.h */; }; + AC70D2E91DE489E4002E6351 /* RCTJavaScriptLoader.mm in Sources */ = {isa = PBXBuildFile; fileRef = AC70D2E81DE489E4002E6351 /* RCTJavaScriptLoader.mm */; }; + B233E6EA1D2D845D00BC68BA /* RCTI18nManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B233E6E91D2D845D00BC68BA /* RCTI18nManager.m */; }; + B95154321D1B34B200FE7B80 /* RCTActivityIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = B95154311D1B34B200FE7B80 /* RCTActivityIndicatorView.m */; }; + BA0501AD2109DCF200A6BBC4 /* ReactMarker.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 13DA8A2F2097A90A00276ED4 /* ReactMarker.h */; }; + BA0501AE2109DD0600A6BBC4 /* JSExecutor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E223624320875A8000108244 /* JSExecutor.cpp */; }; + C60128AB1F3D1258009DF9FF /* RCTCxxConvert.h in Headers */ = {isa = PBXBuildFile; fileRef = C60128A91F3D1258009DF9FF /* RCTCxxConvert.h */; }; + C60128AC1F3D1258009DF9FF /* RCTCxxConvert.h in Headers */ = {isa = PBXBuildFile; fileRef = C60128A91F3D1258009DF9FF /* RCTCxxConvert.h */; }; + C60128AD1F3D1258009DF9FF /* RCTCxxConvert.m in Sources */ = {isa = PBXBuildFile; fileRef = C60128AA1F3D1258009DF9FF /* RCTCxxConvert.m */; }; + C60128AE1F3D1258009DF9FF /* RCTCxxConvert.m in Sources */ = {isa = PBXBuildFile; fileRef = C60128AA1F3D1258009DF9FF /* RCTCxxConvert.m */; }; + C606692E1F3CC60500E67165 /* RCTModuleMethod.mm in Sources */ = {isa = PBXBuildFile; fileRef = C606692D1F3CC60500E67165 /* RCTModuleMethod.mm */; }; + C606692F1F3CC60500E67165 /* RCTModuleMethod.mm in Sources */ = {isa = PBXBuildFile; fileRef = C606692D1F3CC60500E67165 /* RCTModuleMethod.mm */; }; + C60669361F3CCF1B00E67165 /* RCTManagedPointer.mm in Sources */ = {isa = PBXBuildFile; fileRef = C60669351F3CCF1B00E67165 /* RCTManagedPointer.mm */; }; + C60669371F3CCF1B00E67165 /* RCTManagedPointer.mm in Sources */ = {isa = PBXBuildFile; fileRef = C60669351F3CCF1B00E67165 /* RCTManagedPointer.mm */; }; + C654505E1F3BD9280090799B /* RCTManagedPointer.h in Headers */ = {isa = PBXBuildFile; fileRef = C654505D1F3BD9280090799B /* RCTManagedPointer.h */; }; + C654505F1F3BD9280090799B /* RCTManagedPointer.h in Headers */ = {isa = PBXBuildFile; fileRef = C654505D1F3BD9280090799B /* RCTManagedPointer.h */; }; + C669D8981F72E3DE006748EB /* RAMBundleRegistry.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = C6D380181F71D75B00621378 /* RAMBundleRegistry.h */; }; + C6D3801A1F71D76100621378 /* RAMBundleRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D380181F71D75B00621378 /* RAMBundleRegistry.h */; }; + C6D3801B1F71D76200621378 /* RAMBundleRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D380181F71D75B00621378 /* RAMBundleRegistry.h */; }; + C6D3801C1F71D76700621378 /* RAMBundleRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6D380191F71D75B00621378 /* RAMBundleRegistry.cpp */; }; + C6D3801D1F71D76800621378 /* RAMBundleRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6D380191F71D75B00621378 /* RAMBundleRegistry.cpp */; }; + CF2731C01E7B8DE40044CA4F /* RCTDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = CF2731BE1E7B8DE40044CA4F /* RCTDeviceInfo.h */; }; + CF2731C11E7B8DE40044CA4F /* RCTDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = CF2731BF1E7B8DE40044CA4F /* RCTDeviceInfo.m */; }; + CF2731C21E7B8DEF0044CA4F /* RCTDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = CF2731BE1E7B8DE40044CA4F /* RCTDeviceInfo.h */; }; + CF2731C31E7B8DF30044CA4F /* RCTDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = CF2731BF1E7B8DE40044CA4F /* RCTDeviceInfo.m */; }; + E223624420875A8000108244 /* JSExecutor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E223624320875A8000108244 /* JSExecutor.cpp */; }; + E7711C7A2238455400FCF26D /* RCTSurfacePresenterStub.h in Headers */ = {isa = PBXBuildFile; fileRef = 589515DF2231AD9C0036BDE0 /* RCTSurfacePresenterStub.h */; }; + E9B20B7B1B500126007A2DA7 /* RCTAccessibilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E9B20B7A1B500126007A2DA7 /* RCTAccessibilityManager.m */; }; + EBF21BBC1FC498270052F4D5 /* InspectorInterfaces.h in Headers */ = {isa = PBXBuildFile; fileRef = EBF21BBA1FC498270052F4D5 /* InspectorInterfaces.h */; }; + EBF21BBE1FC498630052F4D5 /* InspectorInterfaces.h in Headers */ = {isa = PBXBuildFile; fileRef = EBF21BBA1FC498270052F4D5 /* InspectorInterfaces.h */; }; + EBF21BFB1FC498FC0052F4D5 /* InspectorInterfaces.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = EBF21BBA1FC498270052F4D5 /* InspectorInterfaces.h */; }; + EBF21BFC1FC4990B0052F4D5 /* InspectorInterfaces.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EBF21BBB1FC498270052F4D5 /* InspectorInterfaces.cpp */; }; + EBF21BFE1FC499840052F4D5 /* InspectorInterfaces.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = EBF21BBA1FC498270052F4D5 /* InspectorInterfaces.h */; }; + EBF21BFF1FC4998E0052F4D5 /* InspectorInterfaces.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EBF21BBB1FC498270052F4D5 /* InspectorInterfaces.cpp */; }; + ED296F82214C973700B7C4FE /* libjsinspector-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EBF21BFA1FC4989A0052F4D5 /* libjsinspector-tvOS.a */; }; + ED296FB7214C9A9A00B7C4FE /* JSIDynamic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EDEBC6DA214B3F6800DD5AC8 /* JSIDynamic.cpp */; }; + ED296FB8214C9A9A00B7C4FE /* jsi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EDEBC6DB214B3F6800DD5AC8 /* jsi.cpp */; }; + ED296FB9214C9AC200B7C4FE /* JSCRuntime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EDEBC6DD214B3F6800DD5AC8 /* JSCRuntime.cpp */; }; + ED296FBC214C9B0400B7C4FE /* jsi-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = EDEBC6D9214B3F6800DD5AC8 /* jsi-inl.h */; }; + ED296FBF214C9B0400B7C4FE /* JSIDynamic.h in Headers */ = {isa = PBXBuildFile; fileRef = EDEBC6DC214B3F6800DD5AC8 /* JSIDynamic.h */; }; + ED296FC1214C9B0400B7C4FE /* JSCRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = EDEBC6DE214B3F6800DD5AC8 /* JSCRuntime.h */; }; + ED296FC3214C9B0400B7C4FE /* instrumentation.h in Headers */ = {isa = PBXBuildFile; fileRef = EDEBC6E0214B3F6800DD5AC8 /* instrumentation.h */; }; + ED296FC4214C9B0400B7C4FE /* jsi.h in Headers */ = {isa = PBXBuildFile; fileRef = EDEBC6E1214B3F6800DD5AC8 /* jsi.h */; }; + ED296FC5214C9B3E00B7C4FE /* jsi-inl.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = EDEBC6D9214B3F6800DD5AC8 /* jsi-inl.h */; }; + ED296FC6214C9B4400B7C4FE /* JSIDynamic.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = EDEBC6DC214B3F6800DD5AC8 /* JSIDynamic.h */; }; + ED296FC7214C9B4B00B7C4FE /* instrumentation.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = EDEBC6E0214B3F6800DD5AC8 /* instrumentation.h */; }; + ED296FC8214C9B5200B7C4FE /* jsi.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = EDEBC6E1214B3F6800DD5AC8 /* jsi.h */; }; + ED296FCB214C9B6C00B7C4FE /* libjsi-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ED296FB6214C9A0900B7C4FE /* libjsi-tvOS.a */; }; + ED29703E2150126E00B7C4FE /* AtomicIntrusiveLinkedList.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D849C1E273B5600323FB7 /* AtomicIntrusiveLinkedList.h */; }; + ED2970422150126E00B7C4FE /* Conv.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D84A01E273B5600323FB7 /* Conv.h */; }; + ED2970432150126E00B7C4FE /* dynamic-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D84A11E273B5600323FB7 /* dynamic-inl.h */; }; + ED2970452150126E00B7C4FE /* dynamic.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D84A31E273B5600323FB7 /* dynamic.h */; }; + ED2970462150126E00B7C4FE /* Exception.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D84A41E273B5600323FB7 /* Exception.h */; }; + ED2970482150126E00B7C4FE /* json.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D84A81E273B5600323FB7 /* json.h */; }; + ED2970492150126E00B7C4FE /* Memory.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D84A91E273B5600323FB7 /* Memory.h */; }; + ED29704A2150126E00B7C4FE /* MoveWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D84AA1E273B5600323FB7 /* MoveWrapper.h */; }; + ED29704B2150126E00B7C4FE /* Optional.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D84AB1E273B5600323FB7 /* Optional.h */; }; + ED29704C2150126E00B7C4FE /* ScopeGuard.h in Headers */ = {isa = PBXBuildFile; fileRef = 139D84AC1E273B5600323FB7 /* ScopeGuard.h */; }; + ED29704F2150199F00B7C4FE /* JSCRuntime.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = EDEBC6DE214B3F6800DD5AC8 /* JSCRuntime.h */; }; + ED297050215019B400B7C4FE /* instrumentation.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = EDEBC6E0214B3F6800DD5AC8 /* instrumentation.h */; }; + ED297067215023D800B7C4FE /* libjsiexecutor-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ED296FEE214C9CF800B7C4FE /* libjsiexecutor-tvOS.a */; }; + ED6189692155BBF70000C9A7 /* JSIExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = ED6189672155BBF70000C9A7 /* JSIExecutor.h */; }; + ED61896A2155BBF70000C9A7 /* JSIExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = ED6189672155BBF70000C9A7 /* JSIExecutor.h */; }; + ED61896B2155BBF70000C9A7 /* JSINativeModules.h in Headers */ = {isa = PBXBuildFile; fileRef = ED6189682155BBF70000C9A7 /* JSINativeModules.h */; }; + ED61896C2155BBF70000C9A7 /* JSINativeModules.h in Headers */ = {isa = PBXBuildFile; fileRef = ED6189682155BBF70000C9A7 /* JSINativeModules.h */; }; + ED7286BC2155C62000C26ABF /* JSIExecutor.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = ED6189672155BBF70000C9A7 /* JSIExecutor.h */; }; + ED7286BD2155C62000C26ABF /* JSINativeModules.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = ED6189682155BBF70000C9A7 /* JSINativeModules.h */; }; + ED7286BE2155C62B00C26ABF /* JSIExecutor.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = ED6189672155BBF70000C9A7 /* JSIExecutor.h */; }; + ED7286BF2155C62B00C26ABF /* JSINativeModules.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = ED6189682155BBF70000C9A7 /* JSINativeModules.h */; }; + EDDA711D2164285A00B2D070 /* JSINativeModules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EDDA711B2164285A00B2D070 /* JSINativeModules.cpp */; }; + EDDA711E2164285A00B2D070 /* JSINativeModules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EDDA711B2164285A00B2D070 /* JSINativeModules.cpp */; }; + EDDA711F2164285A00B2D070 /* JSIExecutor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EDDA711C2164285A00B2D070 /* JSIExecutor.cpp */; }; + EDDA71202164285A00B2D070 /* JSIExecutor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EDDA711C2164285A00B2D070 /* JSIExecutor.cpp */; }; + EDEBC6E2214B3F6800DD5AC8 /* jsi-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = EDEBC6D9214B3F6800DD5AC8 /* jsi-inl.h */; }; + EDEBC6E3214B3F6800DD5AC8 /* JSIDynamic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EDEBC6DA214B3F6800DD5AC8 /* JSIDynamic.cpp */; }; + EDEBC6E4214B3F6800DD5AC8 /* jsi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EDEBC6DB214B3F6800DD5AC8 /* jsi.cpp */; }; + EDEBC6E5214B3F6800DD5AC8 /* JSIDynamic.h in Headers */ = {isa = PBXBuildFile; fileRef = EDEBC6DC214B3F6800DD5AC8 /* JSIDynamic.h */; }; + EDEBC6E6214B3F6800DD5AC8 /* JSCRuntime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EDEBC6DD214B3F6800DD5AC8 /* JSCRuntime.cpp */; }; + EDEBC6E7214B3F6800DD5AC8 /* JSCRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = EDEBC6DE214B3F6800DD5AC8 /* JSCRuntime.h */; }; + EDEBC6E8214B3F6800DD5AC8 /* instrumentation.h in Headers */ = {isa = PBXBuildFile; fileRef = EDEBC6E0214B3F6800DD5AC8 /* instrumentation.h */; }; + EDEBC6E9214B3F6800DD5AC8 /* jsi.h in Headers */ = {isa = PBXBuildFile; fileRef = EDEBC6E1214B3F6800DD5AC8 /* jsi.h */; }; + EDEBC71A214B40A300DD5AC8 /* libjsi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EDEBC6D6214B3E7000DD5AC8 /* libjsi.a */; }; + EDEBC71C214B40F900DD5AC8 /* jsi-inl.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = EDEBC6D9214B3F6800DD5AC8 /* jsi-inl.h */; }; + EDEBC71D214B40F900DD5AC8 /* JSIDynamic.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = EDEBC6DC214B3F6800DD5AC8 /* JSIDynamic.h */; }; + EDEBC71E214B40F900DD5AC8 /* JSCRuntime.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = EDEBC6DE214B3F6800DD5AC8 /* JSCRuntime.h */; }; + EDEBC71F214B40F900DD5AC8 /* jsi.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = EDEBC6E1214B3F6800DD5AC8 /* jsi.h */; }; + EDEBC7DF214C705700DD5AC8 /* libjsiexecutor.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EDEBC73B214B45A300DD5AC8 /* libjsiexecutor.a */; }; + EDEBC7E0214C709200DD5AC8 /* libjsinspector.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EBF21BDC1FC498900052F4D5 /* libjsinspector.a */; }; + F1EFDA50201F661000EE6E4C /* RCTUIUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = F1EFDA4E201F660F00EE6E4C /* RCTUIUtils.m */; }; + FEFAAC9E1FDB89B50057BBE0 /* RCTRedBoxExtraDataViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FEFAAC9C1FDB89B40057BBE0 /* RCTRedBoxExtraDataViewController.m */; }; + FEFAAC9F1FDB89B50057BBE0 /* RCTRedBoxExtraDataViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = FEFAAC9D1FDB89B40057BBE0 /* RCTRedBoxExtraDataViewController.h */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 1320081C1E283DCB00F0C457 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 139D7E871E25C6D100323FB7; + remoteInfo = "double-conversion"; + }; + 3D0574561DE5FF9600184BB4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3D3CD9261DE5FBEE00167DC4; + remoteInfo = "cxxreact-tvOS"; + }; + 3D383D651EBD27DB005632C8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3D383D3D1EBD27B9005632C8; + remoteInfo = "double-conversion-tvOS"; + }; + 3D3CD94B1DE5FCE700167DC4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3D3CD9191DE5FBEC00167DC4; + remoteInfo = cxxreact; + }; + ED296F7D214C957300B7C4FE /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = EDEBC6BA214B3E7000DD5AC8; + remoteInfo = jsi; + }; + ED296F80214C971800B7C4FE /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = EBF21BDD1FC4989A0052F4D5; + remoteInfo = "jsinspector-tvOS"; + }; + ED296F96214C996500B7C4FE /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3D383D3D1EBD27B9005632C8; + remoteInfo = "double-conversion-tvOS"; + }; + ED296FC9214C9B6200B7C4FE /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = ED296F98214C9A0900B7C4FE; + remoteInfo = "jsi-tvOS"; + }; + ED296FF7214C9EAA00B7C4FE /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3D383D211EBD27B6005632C8; + remoteInfo = "third-party-tvOS"; + }; + ED296FFB214C9EC000B7C4FE /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3D3CD9261DE5FBEE00167DC4; + remoteInfo = "cxxreact-tvOS"; + }; + ED296FFD214C9EC600B7C4FE /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = ED296F98214C9A0900B7C4FE; + remoteInfo = "jsi-tvOS"; + }; + ED29704D215012C700B7C4FE /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3D383D3D1EBD27B9005632C8; + remoteInfo = "double-conversion-tvOS"; + }; + ED2970652150237300B7C4FE /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = ED296FD0214C9CF800B7C4FE; + remoteInfo = "jsiexecutor-tvOS"; + }; + EDEBC74A214B46A700DD5AC8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = EDEBC724214B45A300DD5AC8; + remoteInfo = jsiexecutor; + }; + EDEBC74E214B477400DD5AC8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = EDEBC6BA214B3E7000DD5AC8; + remoteInfo = jsi; + }; + EDEBC7CB214C516800DD5AC8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 139D7E871E25C6D100323FB7; + remoteInfo = "double-conversion"; + }; + EDEBC7CD214C523F00DD5AC8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3D3CD9191DE5FBEC00167DC4; + remoteInfo = cxxreact; + }; + EDEBC7D2214C528C00DD5AC8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 139D7ECD1E25DB7D00323FB7; + remoteInfo = "third-party"; + }; + EDEBC7D6214C52FD00DD5AC8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 139D7E871E25C6D100323FB7; + remoteInfo = "double-conversion"; + }; + EDEBC7D8214C628300DD5AC8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = EBF21BBF1FC498900052F4D5; + remoteInfo = jsinspector; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 139D7E861E25C6D100323FB7 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + 19F61BFA1E8495CD00571D81 /* bignum-dtoa.h in CopyFiles */, + 19F61BFB1E8495CD00571D81 /* bignum.h in CopyFiles */, + 19F61BFC1E8495CD00571D81 /* cached-powers.h in CopyFiles */, + 19F61BFD1E8495CD00571D81 /* diy-fp.h in CopyFiles */, + 19F61BFE1E8495CD00571D81 /* double-conversion.h in CopyFiles */, + 19F61BFF1E8495CD00571D81 /* fast-dtoa.h in CopyFiles */, + 19F61C001E8495CD00571D81 /* fixed-dtoa.h in CopyFiles */, + 19F61C011E8495CD00571D81 /* ieee.h in CopyFiles */, + 19F61C021E8495CD00571D81 /* strtod.h in CopyFiles */, + 19F61C031E8495CD00571D81 /* utils.h in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3D302E191DF8249100D6DDAE /* Copy Headers */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = include/React; + dstSubfolderSpec = 16; + files = ( + 0EA924D02237686F004AB895 /* RCTSurfacePresenterStub.h in Copy Headers */, + 591F78DF202ADB97004A668C /* RCTLayout.h in Copy Headers */, + 59EDBCC31FDF4E55003573DE /* RCTScrollableProtocol.h in Copy Headers */, + 59EDBCC51FDF4E55003573DE /* RCTScrollContentView.h in Copy Headers */, + 59EDBCC71FDF4E55003573DE /* RCTScrollView.h in Copy Headers */, + 59EDBCC81FDF4E55003573DE /* RCTScrollViewManager.h in Copy Headers */, + 594F0A411FD233BD007FBE96 /* RCTSurface.h in Copy Headers */, + 594F0A421FD233BD007FBE96 /* RCTSurfaceDelegate.h in Copy Headers */, + 594F0A431FD233BD007FBE96 /* RCTSurfaceRootShadowView.h in Copy Headers */, + 594F0A441FD233BD007FBE96 /* RCTSurfaceRootShadowViewDelegate.h in Copy Headers */, + 594F0A451FD233BD007FBE96 /* RCTSurfaceRootView.h in Copy Headers */, + 594F0A461FD233BD007FBE96 /* RCTSurfaceStage.h in Copy Headers */, + 594F0A471FD233BD007FBE96 /* RCTSurfaceView.h in Copy Headers */, + 594F0A481FD233BD007FBE96 /* RCTSurfaceHostingView.h in Copy Headers */, + 594F0A491FD233BD007FBE96 /* RCTSurfaceSizeMeasureMode.h in Copy Headers */, + 2D16E68E1FA4FD3900B85C8A /* RCTTVNavigationEventEmitter.h in Copy Headers */, + 59500D481F71C67600B122B7 /* RCTUIManagerUtils.h in Copy Headers */, + 3D0E37901F1CC5E100DCAC9F /* RCTWebSocketModule.h in Copy Headers */, + 5960C1BF1F0804F50066FD5B /* RCTLayoutAnimation.h in Copy Headers */, + 5960C1C01F0804F50066FD5B /* RCTLayoutAnimationGroup.h in Copy Headers */, + 59EB6DC01EBD70130072A5E7 /* RCTUIManagerObserverCoordinator.h in Copy Headers */, + 59B1EBCA1EBD47520047B19B /* RCTShadowView+Layout.h in Copy Headers */, + 3D0B84271EC0B45400B2BD8E /* RCTLinkingManager.h in Copy Headers */, + 3D0B84251EC0B42600B2BD8E /* RCTNetworking.h in Copy Headers */, + 3D0B84261EC0B42600B2BD8E /* RCTNetworkTask.h in Copy Headers */, + 3D0B84231EC0B40D00B2BD8E /* RCTImageLoader.h in Copy Headers */, + 3D0B84241EC0B40D00B2BD8E /* RCTImageStoreManager.h in Copy Headers */, + 3D0B84221EC0B3F600B2BD8E /* RCTResizeMode.h in Copy Headers */, + 3D383D201EBD27AF005632C8 /* RCTBridge+Private.h in Copy Headers */, + 3D7BFD351EA8E43F008DFB7A /* RCTDevSettings.h in Copy Headers */, + 3D7BFD331EA8E433008DFB7A /* RCTPackagerClient.h in Copy Headers */, + 3DA981EA1E5B0F7F004F2374 /* RCTAccessibilityManager.h in Copy Headers */, + 3DA981EB1E5B0F7F004F2374 /* RCTAlertManager.h in Copy Headers */, + 3DA981EC1E5B0F7F004F2374 /* RCTAppState.h in Copy Headers */, + 3DA981ED1E5B0F7F004F2374 /* RCTAsyncLocalStorage.h in Copy Headers */, + 3DA981EE1E5B0F7F004F2374 /* RCTClipboard.h in Copy Headers */, + 3DA981EF1E5B0F7F004F2374 /* RCTDevLoadingView.h in Copy Headers */, + 3DA981F01E5B0F7F004F2374 /* RCTDevMenu.h in Copy Headers */, + 3DA981F11E5B0F7F004F2374 /* RCTEventEmitter.h in Copy Headers */, + 3DA981F21E5B0F7F004F2374 /* RCTExceptionsManager.h in Copy Headers */, + 3DA981F31E5B0F7F004F2374 /* RCTI18nManager.h in Copy Headers */, + 3DA981F41E5B0F7F004F2374 /* RCTI18nUtil.h in Copy Headers */, + 3DA981F51E5B0F7F004F2374 /* RCTKeyboardObserver.h in Copy Headers */, + 3DA981F61E5B0F7F004F2374 /* RCTRedBox.h in Copy Headers */, + 3DA981F71E5B0F7F004F2374 /* RCTSourceCode.h in Copy Headers */, + 3DA981F81E5B0F7F004F2374 /* RCTStatusBarManager.h in Copy Headers */, + 3DA981F91E5B0F7F004F2374 /* RCTTiming.h in Copy Headers */, + 3DA981FA1E5B0F7F004F2374 /* RCTUIManager.h in Copy Headers */, + 3DA981FB1E5B0F7F004F2374 /* RCTFPSGraph.h in Copy Headers */, + 3DA981FD1E5B0F7F004F2374 /* RCTMacros.h in Copy Headers */, + 3DA981FE1E5B0F7F004F2374 /* RCTProfile.h in Copy Headers */, + 3DA981FF1E5B0F7F004F2374 /* RCTActivityIndicatorView.h in Copy Headers */, + 3DA982001E5B0F7F004F2374 /* RCTActivityIndicatorViewManager.h in Copy Headers */, + 3DA982011E5B0F7F004F2374 /* RCTAnimationType.h in Copy Headers */, + 3DA982021E5B0F7F004F2374 /* RCTAutoInsetsProtocol.h in Copy Headers */, + 3DA982031E5B0F7F004F2374 /* RCTBorderDrawing.h in Copy Headers */, + 3DA982041E5B0F7F004F2374 /* RCTBorderStyle.h in Copy Headers */, + 3DA982051E5B0F7F004F2374 /* RCTComponent.h in Copy Headers */, + 3DA982061E5B0F7F004F2374 /* RCTComponentData.h in Copy Headers */, + 3DA982071E5B0F7F004F2374 /* RCTConvert+CoreLocation.h in Copy Headers */, + 3DA9820C1E5B0F7F004F2374 /* RCTFont.h in Copy Headers */, + 3DA982111E5B0F7F004F2374 /* RCTModalHostView.h in Copy Headers */, + 3DA982121E5B0F7F004F2374 /* RCTModalHostViewController.h in Copy Headers */, + 3DA982131E5B0F7F004F2374 /* RCTModalHostViewManager.h in Copy Headers */, + 3DA982181E5B0F7F004F2374 /* RCTPicker.h in Copy Headers */, + 3DA982191E5B0F7F004F2374 /* RCTPickerManager.h in Copy Headers */, + 3DA9821A1E5B0F7F004F2374 /* RCTPointerEvents.h in Copy Headers */, + 3DA9821B1E5B0F7F004F2374 /* RCTProgressViewManager.h in Copy Headers */, + 3DA9821C1E5B0F7F004F2374 /* RCTRefreshControl.h in Copy Headers */, + 3DA9821D1E5B0F7F004F2374 /* RCTRefreshControlManager.h in Copy Headers */, + 3DA9821E1E5B0F7F004F2374 /* RCTRootShadowView.h in Copy Headers */, + 3DA982241E5B0F7F004F2374 /* RCTSegmentedControl.h in Copy Headers */, + 3DA982251E5B0F7F004F2374 /* RCTSegmentedControlManager.h in Copy Headers */, + 3DA982261E5B0F7F004F2374 /* RCTShadowView.h in Copy Headers */, + 3DA982271E5B0F7F004F2374 /* RCTSlider.h in Copy Headers */, + 3DA982281E5B0F7F004F2374 /* RCTSliderManager.h in Copy Headers */, + 3DA982291E5B0F7F004F2374 /* RCTSwitch.h in Copy Headers */, + 3DA9822A1E5B0F7F004F2374 /* RCTSwitchManager.h in Copy Headers */, + 3DA9822F1E5B0F7F004F2374 /* RCTTextDecorationLineType.h in Copy Headers */, + 3DA982301E5B0F7F004F2374 /* RCTTVView.h in Copy Headers */, + 3DA982311E5B0F7F004F2374 /* RCTView.h in Copy Headers */, + 3DA982331E5B0F7F004F2374 /* RCTViewManager.h in Copy Headers */, + 3DA982341E5B0F7F004F2374 /* RCTWebView.h in Copy Headers */, + 3DA982351E5B0F7F004F2374 /* RCTWebViewManager.h in Copy Headers */, + 3DA982361E5B0F7F004F2374 /* RCTWrapperViewController.h in Copy Headers */, + 3DA982381E5B0F7F004F2374 /* UIView+React.h in Copy Headers */, + 3DA981BF1E5B0F29004F2374 /* RCTAssert.h in Copy Headers */, + 3DA981C01E5B0F29004F2374 /* RCTBridge.h in Copy Headers */, + 3DA981C21E5B0F29004F2374 /* RCTBridgeDelegate.h in Copy Headers */, + 3DA981C31E5B0F29004F2374 /* RCTBridgeMethod.h in Copy Headers */, + 3DA981C41E5B0F29004F2374 /* RCTBridgeModule.h in Copy Headers */, + 3DA981C51E5B0F29004F2374 /* RCTBundleURLProvider.h in Copy Headers */, + 3DA981C61E5B0F29004F2374 /* RCTConvert.h in Copy Headers */, + 3DA981C71E5B0F29004F2374 /* RCTDefines.h in Copy Headers */, + 3DA981C81E5B0F29004F2374 /* RCTDisplayLink.h in Copy Headers */, + 3DA981C91E5B0F29004F2374 /* RCTErrorCustomizer.h in Copy Headers */, + 3DA981CA1E5B0F29004F2374 /* RCTErrorInfo.h in Copy Headers */, + 3DA981CB1E5B0F29004F2374 /* RCTEventDispatcher.h in Copy Headers */, + 3DA981CC1E5B0F29004F2374 /* RCTFrameUpdate.h in Copy Headers */, + 3DA981CD1E5B0F29004F2374 /* RCTImageSource.h in Copy Headers */, + 3DA981CE1E5B0F29004F2374 /* RCTInvalidating.h in Copy Headers */, + 3DA981CF1E5B0F29004F2374 /* RCTJavaScriptExecutor.h in Copy Headers */, + 3DA981D01E5B0F29004F2374 /* RCTJavaScriptLoader.h in Copy Headers */, + 3DA981D11E5B0F29004F2374 /* RCTJSStackFrame.h in Copy Headers */, + 3DA981D21E5B0F29004F2374 /* RCTKeyCommands.h in Copy Headers */, + 3DA981D31E5B0F29004F2374 /* RCTLog.h in Copy Headers */, + 3DA981D41E5B0F29004F2374 /* RCTModuleData.h in Copy Headers */, + 3DA981D51E5B0F29004F2374 /* RCTModuleMethod.h in Copy Headers */, + 3DA981D61E5B0F29004F2374 /* RCTMultipartDataTask.h in Copy Headers */, + 3DA981D71E5B0F29004F2374 /* RCTMultipartStreamReader.h in Copy Headers */, + 3DA981D81E5B0F29004F2374 /* RCTNullability.h in Copy Headers */, + 3DA981D91E5B0F29004F2374 /* RCTParserUtils.h in Copy Headers */, + 3DA981DA1E5B0F29004F2374 /* RCTPerformanceLogger.h in Copy Headers */, + 3DA981DB1E5B0F29004F2374 /* RCTPlatform.h in Copy Headers */, + 3DA981DC1E5B0F29004F2374 /* RCTReloadCommand.h in Copy Headers */, + 3DA981DD1E5B0F29004F2374 /* RCTRootContentView.h in Copy Headers */, + 3DA981DE1E5B0F29004F2374 /* RCTRootView.h in Copy Headers */, + 3DA981DF1E5B0F29004F2374 /* RCTRootViewDelegate.h in Copy Headers */, + 3DA981E11E5B0F29004F2374 /* RCTTouchEvent.h in Copy Headers */, + 3DA981E21E5B0F29004F2374 /* RCTTouchHandler.h in Copy Headers */, + 3DA981E31E5B0F29004F2374 /* RCTURLRequestDelegate.h in Copy Headers */, + 3DA981E41E5B0F29004F2374 /* RCTURLRequestHandler.h in Copy Headers */, + 3DA981E51E5B0F29004F2374 /* RCTUtils.h in Copy Headers */, + ); + name = "Copy Headers"; + runOnlyForDeploymentPostprocessing = 0; + }; + 3D302F1B1DF8263300D6DDAE /* Copy Headers */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = include/cxxreact; + dstSubfolderSpec = 16; + files = ( + BA0501AD2109DCF200A6BBC4 /* ReactMarker.h in Copy Headers */, + 598FD1921F816A2A006C54CB /* RAMBundleRegistry.h in Copy Headers */, + 3DA9823B1E5B1053004F2374 /* CxxModule.h in Copy Headers */, + 3DA9823C1E5B1053004F2374 /* CxxNativeModule.h in Copy Headers */, + 3DA9823D1E5B1053004F2374 /* JSExecutor.h in Copy Headers */, + 3DA982401E5B1053004F2374 /* Instance.h in Copy Headers */, + 3DA982411E5B1053004F2374 /* JsArgumentHelpers-inl.h in Copy Headers */, + 3DA982421E5B1053004F2374 /* JsArgumentHelpers.h in Copy Headers */, + 3DA982431E5B1053004F2374 /* JSBigString.h in Copy Headers */, + 3DA982441E5B1053004F2374 /* JSBundleType.h in Copy Headers */, + 3DA9824E1E5B1053004F2374 /* JSIndexedRAMBundle.h in Copy Headers */, + 3DA9824F1E5B1053004F2374 /* JSModulesUnbundle.h in Copy Headers */, + 3DA982501E5B1053004F2374 /* MessageQueueThread.h in Copy Headers */, + 3DA982511E5B1053004F2374 /* MethodCall.h in Copy Headers */, + 3DA982521E5B1053004F2374 /* ModuleRegistry.h in Copy Headers */, + 3DA982531E5B1053004F2374 /* NativeModule.h in Copy Headers */, + 3DA982541E5B1053004F2374 /* NativeToJsBridge.h in Copy Headers */, + 3DA982571E5B1053004F2374 /* RecoverableError.h in Copy Headers */, + 3DA982581E5B1053004F2374 /* SampleCxxModule.h in Copy Headers */, + 3DA982591E5B1053004F2374 /* SystraceSection.h in Copy Headers */, + ); + name = "Copy Headers"; + runOnlyForDeploymentPostprocessing = 0; + }; + 3D383D491EBD27B9005632C8 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + 3D383D4A1EBD27B9005632C8 /* bignum-dtoa.h in CopyFiles */, + 3D383D4B1EBD27B9005632C8 /* bignum.h in CopyFiles */, + 3D383D4C1EBD27B9005632C8 /* cached-powers.h in CopyFiles */, + 3D383D4D1EBD27B9005632C8 /* diy-fp.h in CopyFiles */, + 3D383D4E1EBD27B9005632C8 /* double-conversion.h in CopyFiles */, + 3D383D4F1EBD27B9005632C8 /* fast-dtoa.h in CopyFiles */, + 3D383D501EBD27B9005632C8 /* fixed-dtoa.h in CopyFiles */, + 3D383D511EBD27B9005632C8 /* ieee.h in CopyFiles */, + 3D383D521EBD27B9005632C8 /* strtod.h in CopyFiles */, + 3D383D531EBD27B9005632C8 /* utils.h in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3D80D91E1DF6FA530028D040 /* Copy Headers */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = include/React; + dstSubfolderSpec = 16; + files = ( + 589515E12231ADE00036BDE0 /* RCTSurfacePresenterStub.h in Copy Headers */, + 39C50FF92046EACF00CEE534 /* RCTVersion.h in Copy Headers */, + 591F78DE202ADB8F004A668C /* RCTLayout.h in Copy Headers */, + 59EDBCBD1FDF4E43003573DE /* RCTScrollableProtocol.h in Copy Headers */, + 59EDBCBF1FDF4E43003573DE /* RCTScrollContentView.h in Copy Headers */, + 59EDBCC11FDF4E43003573DE /* RCTScrollView.h in Copy Headers */, + 59EDBCC21FDF4E43003573DE /* RCTScrollViewManager.h in Copy Headers */, + 594F0A381FD233A2007FBE96 /* RCTSurface.h in Copy Headers */, + 594F0A391FD233A2007FBE96 /* RCTSurfaceDelegate.h in Copy Headers */, + 594F0A3A1FD233A2007FBE96 /* RCTSurfaceRootShadowView.h in Copy Headers */, + 594F0A3B1FD233A2007FBE96 /* RCTSurfaceRootShadowViewDelegate.h in Copy Headers */, + 594F0A3C1FD233A2007FBE96 /* RCTSurfaceRootView.h in Copy Headers */, + 594F0A3D1FD233A2007FBE96 /* RCTSurfaceStage.h in Copy Headers */, + 594F0A3E1FD233A2007FBE96 /* RCTSurfaceView.h in Copy Headers */, + 594F0A3F1FD233A2007FBE96 /* RCTSurfaceHostingView.h in Copy Headers */, + 594F0A401FD233A2007FBE96 /* RCTSurfaceSizeMeasureMode.h in Copy Headers */, + 59500D471F71C66700B122B7 /* RCTUIManagerUtils.h in Copy Headers */, + 3D0E378F1F1CC5CF00DCAC9F /* RCTWebSocketModule.h in Copy Headers */, + 5960C1BD1F0804DF0066FD5B /* RCTLayoutAnimation.h in Copy Headers */, + 5960C1BE1F0804DF0066FD5B /* RCTLayoutAnimationGroup.h in Copy Headers */, + 59EB6DBF1EBD6FFC0072A5E7 /* RCTUIManagerObserverCoordinator.h in Copy Headers */, + 59B1EBC91EBD46250047B19B /* RCTShadowView+Layout.h in Copy Headers */, + 3D383D1F1EBD27A8005632C8 /* RCTBridge+Private.h in Copy Headers */, + 3D7BFD311EA8E41F008DFB7A /* RCTPackagerClient.h in Copy Headers */, + 3D7BFD291EA8E37B008DFB7A /* RCTDevSettings.h in Copy Headers */, + 3D80D91F1DF6FA890028D040 /* RCTImageLoader.h in Copy Headers */, + 3D80D9201DF6FA890028D040 /* RCTImageStoreManager.h in Copy Headers */, + 3D80D9211DF6FA890028D040 /* RCTResizeMode.h in Copy Headers */, + 3D80D9221DF6FA890028D040 /* RCTLinkingManager.h in Copy Headers */, + 3D80D9231DF6FA890028D040 /* RCTNetworking.h in Copy Headers */, + 3D80D9241DF6FA890028D040 /* RCTNetworkTask.h in Copy Headers */, + 3D80D9251DF6FA890028D040 /* RCTPushNotificationManager.h in Copy Headers */, + 3D80D9261DF6FA890028D040 /* RCTAssert.h in Copy Headers */, + 3D80D9271DF6FA890028D040 /* RCTBridge.h in Copy Headers */, + 3D80D9291DF6FA890028D040 /* RCTBridgeDelegate.h in Copy Headers */, + 3D80D92A1DF6FA890028D040 /* RCTBridgeMethod.h in Copy Headers */, + 3D80D92B1DF6FA890028D040 /* RCTBridgeModule.h in Copy Headers */, + 3D80D92C1DF6FA890028D040 /* RCTBundleURLProvider.h in Copy Headers */, + 3D80D92D1DF6FA890028D040 /* RCTConvert.h in Copy Headers */, + 3D80D92E1DF6FA890028D040 /* RCTDefines.h in Copy Headers */, + 3D80D92F1DF6FA890028D040 /* RCTDisplayLink.h in Copy Headers */, + 3D80D9301DF6FA890028D040 /* RCTErrorCustomizer.h in Copy Headers */, + 3D80D9311DF6FA890028D040 /* RCTErrorInfo.h in Copy Headers */, + 3D80D9321DF6FA890028D040 /* RCTEventDispatcher.h in Copy Headers */, + 3D80D9331DF6FA890028D040 /* RCTFrameUpdate.h in Copy Headers */, + 3D80D9341DF6FA890028D040 /* RCTImageSource.h in Copy Headers */, + 3D80D9351DF6FA890028D040 /* RCTInvalidating.h in Copy Headers */, + 3D80D9361DF6FA890028D040 /* RCTJavaScriptExecutor.h in Copy Headers */, + 3D80D9371DF6FA890028D040 /* RCTJavaScriptLoader.h in Copy Headers */, + 3D80D9381DF6FA890028D040 /* RCTJSStackFrame.h in Copy Headers */, + 3D80D9391DF6FA890028D040 /* RCTKeyCommands.h in Copy Headers */, + 3D80D93A1DF6FA890028D040 /* RCTLog.h in Copy Headers */, + 3D80D93B1DF6FA890028D040 /* RCTModuleData.h in Copy Headers */, + 3D80D93C1DF6FA890028D040 /* RCTModuleMethod.h in Copy Headers */, + 3D80D93D1DF6FA890028D040 /* RCTMultipartDataTask.h in Copy Headers */, + 3D80D93E1DF6FA890028D040 /* RCTMultipartStreamReader.h in Copy Headers */, + 3D80D93F1DF6FA890028D040 /* RCTNullability.h in Copy Headers */, + 3D80D9401DF6FA890028D040 /* RCTParserUtils.h in Copy Headers */, + 3D80D9411DF6FA890028D040 /* RCTPerformanceLogger.h in Copy Headers */, + 3D80D9421DF6FA890028D040 /* RCTPlatform.h in Copy Headers */, + 3D80D9431DF6FA890028D040 /* RCTRootView.h in Copy Headers */, + 3D80D9441DF6FA890028D040 /* RCTRootViewDelegate.h in Copy Headers */, + 3D80D9461DF6FA890028D040 /* RCTTouchEvent.h in Copy Headers */, + 3D80D9471DF6FA890028D040 /* RCTTouchHandler.h in Copy Headers */, + 3D80D9481DF6FA890028D040 /* RCTURLRequestDelegate.h in Copy Headers */, + 3D80D9491DF6FA890028D040 /* RCTURLRequestHandler.h in Copy Headers */, + 3D80D94A1DF6FA890028D040 /* RCTUtils.h in Copy Headers */, + 3D80D9501DF6FA890028D040 /* RCTAccessibilityManager.h in Copy Headers */, + 3D80D9511DF6FA890028D040 /* RCTAlertManager.h in Copy Headers */, + 3D80D9521DF6FA890028D040 /* RCTAppState.h in Copy Headers */, + 3D80D9531DF6FA890028D040 /* RCTAsyncLocalStorage.h in Copy Headers */, + 3D80D9541DF6FA890028D040 /* RCTClipboard.h in Copy Headers */, + 3D80D9551DF6FA890028D040 /* RCTDevLoadingView.h in Copy Headers */, + 3D80D9561DF6FA890028D040 /* RCTDevMenu.h in Copy Headers */, + 3D80D9571DF6FA890028D040 /* RCTEventEmitter.h in Copy Headers */, + 3D80D9581DF6FA890028D040 /* RCTExceptionsManager.h in Copy Headers */, + 3D80D9591DF6FA890028D040 /* RCTI18nManager.h in Copy Headers */, + 3D80D95A1DF6FA890028D040 /* RCTI18nUtil.h in Copy Headers */, + 3D80D95B1DF6FA890028D040 /* RCTKeyboardObserver.h in Copy Headers */, + 3D80D95C1DF6FA890028D040 /* RCTRedBox.h in Copy Headers */, + 3D80D95D1DF6FA890028D040 /* RCTSourceCode.h in Copy Headers */, + 3D80D95E1DF6FA890028D040 /* RCTStatusBarManager.h in Copy Headers */, + 3D80D95F1DF6FA890028D040 /* RCTTiming.h in Copy Headers */, + 3D80D9601DF6FA890028D040 /* RCTUIManager.h in Copy Headers */, + 3D80D9611DF6FA890028D040 /* RCTFPSGraph.h in Copy Headers */, + 3D80D9631DF6FA890028D040 /* RCTMacros.h in Copy Headers */, + 3D80D9641DF6FA890028D040 /* RCTProfile.h in Copy Headers */, + 3D80D9651DF6FA890028D040 /* RCTActivityIndicatorView.h in Copy Headers */, + 3D80D9661DF6FA890028D040 /* RCTActivityIndicatorViewManager.h in Copy Headers */, + 3D80D9671DF6FA890028D040 /* RCTAnimationType.h in Copy Headers */, + 3D80D9681DF6FA890028D040 /* RCTAutoInsetsProtocol.h in Copy Headers */, + 3D80D9691DF6FA890028D040 /* RCTBorderDrawing.h in Copy Headers */, + 3D80D96A1DF6FA890028D040 /* RCTBorderStyle.h in Copy Headers */, + 3D80D96B1DF6FA890028D040 /* RCTComponent.h in Copy Headers */, + 3D80D96C1DF6FA890028D040 /* RCTComponentData.h in Copy Headers */, + 3D80D96D1DF6FA890028D040 /* RCTConvert+CoreLocation.h in Copy Headers */, + 3D80D9711DF6FA890028D040 /* RCTFont.h in Copy Headers */, + 3D80D9761DF6FA890028D040 /* RCTModalHostView.h in Copy Headers */, + 3D80D9771DF6FA890028D040 /* RCTModalHostViewController.h in Copy Headers */, + 3D80D9781DF6FA890028D040 /* RCTModalHostViewManager.h in Copy Headers */, + 3D80D97D1DF6FA890028D040 /* RCTPicker.h in Copy Headers */, + 3D80D97E1DF6FA890028D040 /* RCTPickerManager.h in Copy Headers */, + 3D80D97F1DF6FA890028D040 /* RCTPointerEvents.h in Copy Headers */, + 3D80D9801DF6FA890028D040 /* RCTProgressViewManager.h in Copy Headers */, + 3D80D9811DF6FA890028D040 /* RCTRefreshControl.h in Copy Headers */, + 3D80D9821DF6FA890028D040 /* RCTRefreshControlManager.h in Copy Headers */, + 3D80D9831DF6FA890028D040 /* RCTRootShadowView.h in Copy Headers */, + 3D80D9871DF6FA890028D040 /* RCTSegmentedControl.h in Copy Headers */, + 3D80D9881DF6FA890028D040 /* RCTSegmentedControlManager.h in Copy Headers */, + 3D80D9891DF6FA890028D040 /* RCTShadowView.h in Copy Headers */, + 3D80D98A1DF6FA890028D040 /* RCTSlider.h in Copy Headers */, + 3D80D98B1DF6FA890028D040 /* RCTSliderManager.h in Copy Headers */, + 3D80D98C1DF6FA890028D040 /* RCTSwitch.h in Copy Headers */, + 3D80D98D1DF6FA890028D040 /* RCTSwitchManager.h in Copy Headers */, + 3D80D9921DF6FA890028D040 /* RCTTextDecorationLineType.h in Copy Headers */, + 3D80D9931DF6FA890028D040 /* RCTView.h in Copy Headers */, + 3D80D9951DF6FA890028D040 /* RCTViewManager.h in Copy Headers */, + 3D80D9961DF6FA890028D040 /* RCTWebView.h in Copy Headers */, + 3D80D9971DF6FA890028D040 /* RCTWebViewManager.h in Copy Headers */, + 3D80D9981DF6FA890028D040 /* RCTWrapperViewController.h in Copy Headers */, + 3D80D99A1DF6FA890028D040 /* UIView+React.h in Copy Headers */, + ); + name = "Copy Headers"; + runOnlyForDeploymentPostprocessing = 0; + }; + 3D80DAB91DF821710028D040 /* Copy Headers */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = include/cxxreact; + dstSubfolderSpec = 16; + files = ( + 133EA4E52098F6E30035B1D8 /* ReactMarker.h in Copy Headers */, + C669D8981F72E3DE006748EB /* RAMBundleRegistry.h in Copy Headers */, + 3DA981A01E5B0E34004F2374 /* CxxModule.h in Copy Headers */, + 3DA981A11E5B0E34004F2374 /* CxxNativeModule.h in Copy Headers */, + 3DA981A21E5B0E34004F2374 /* JSExecutor.h in Copy Headers */, + 3DA981A51E5B0E34004F2374 /* Instance.h in Copy Headers */, + 3DA981A61E5B0E34004F2374 /* JsArgumentHelpers-inl.h in Copy Headers */, + 3DA981A71E5B0E34004F2374 /* JsArgumentHelpers.h in Copy Headers */, + 3DA981A81E5B0E34004F2374 /* JSBigString.h in Copy Headers */, + 3DA981A91E5B0E34004F2374 /* JSBundleType.h in Copy Headers */, + 3DA981B31E5B0E34004F2374 /* JSIndexedRAMBundle.h in Copy Headers */, + 3DA981B41E5B0E34004F2374 /* JSModulesUnbundle.h in Copy Headers */, + 3DA981B51E5B0E34004F2374 /* MessageQueueThread.h in Copy Headers */, + 3DA981B61E5B0E34004F2374 /* MethodCall.h in Copy Headers */, + 3DA981B71E5B0E34004F2374 /* ModuleRegistry.h in Copy Headers */, + 3DA981B81E5B0E34004F2374 /* NativeModule.h in Copy Headers */, + 3DA981B91E5B0E34004F2374 /* NativeToJsBridge.h in Copy Headers */, + 3DA981BC1E5B0E34004F2374 /* RecoverableError.h in Copy Headers */, + 3DA981BD1E5B0E34004F2374 /* SampleCxxModule.h in Copy Headers */, + 3DA981BE1E5B0E34004F2374 /* SystraceSection.h in Copy Headers */, + ); + name = "Copy Headers"; + runOnlyForDeploymentPostprocessing = 0; + }; + EBF21BCB1FC498900052F4D5 /* Copy Headers */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = include/jsinspector; + dstSubfolderSpec = 16; + files = ( + EBF21BFB1FC498FC0052F4D5 /* InspectorInterfaces.h in Copy Headers */, + ); + name = "Copy Headers"; + runOnlyForDeploymentPostprocessing = 0; + }; + EBF21BE91FC4989A0052F4D5 /* Copy Headers */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = include/jsinspector; + dstSubfolderSpec = 16; + files = ( + EBF21BFE1FC499840052F4D5 /* InspectorInterfaces.h in Copy Headers */, + ); + name = "Copy Headers"; + runOnlyForDeploymentPostprocessing = 0; + }; + ED296FA4214C9A0900B7C4FE /* Copy Headers */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = include/jsi; + dstSubfolderSpec = 16; + files = ( + ED29704F2150199F00B7C4FE /* JSCRuntime.h in Copy Headers */, + ED296FC8214C9B5200B7C4FE /* jsi.h in Copy Headers */, + ED296FC7214C9B4B00B7C4FE /* instrumentation.h in Copy Headers */, + ED296FC6214C9B4400B7C4FE /* JSIDynamic.h in Copy Headers */, + ED296FC5214C9B3E00B7C4FE /* jsi-inl.h in Copy Headers */, + 4F56C93A2216A3B700DB9F3F /* jsilib.h in Copy Headers */, + ); + name = "Copy Headers"; + runOnlyForDeploymentPostprocessing = 0; + }; + ED296FDC214C9CF800B7C4FE /* Copy Headers */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = include/jsireact; + dstSubfolderSpec = 16; + files = ( + ED7286BE2155C62B00C26ABF /* JSIExecutor.h in Copy Headers */, + ED7286BF2155C62B00C26ABF /* JSINativeModules.h in Copy Headers */, + ); + name = "Copy Headers"; + runOnlyForDeploymentPostprocessing = 0; + }; + EDEBC6C6214B3E7000DD5AC8 /* Copy Headers */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 12; + dstPath = include/jsi; + dstSubfolderSpec = 16; + files = ( + ED297050215019B400B7C4FE /* instrumentation.h in Copy Headers */, + EDEBC71C214B40F900DD5AC8 /* jsi-inl.h in Copy Headers */, + EDEBC71D214B40F900DD5AC8 /* JSIDynamic.h in Copy Headers */, + EDEBC71E214B40F900DD5AC8 /* JSCRuntime.h in Copy Headers */, + EDEBC71F214B40F900DD5AC8 /* jsi.h in Copy Headers */, + 4F56C93922167A4D00DB9F3F /* jsilib.h in Copy Headers */, + ); + name = "Copy Headers"; + runOnlyForDeploymentPostprocessing = 0; + }; + EDEBC72F214B45A300DD5AC8 /* Copy Headers */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 12; + dstPath = include/jsireact; + dstSubfolderSpec = 16; + files = ( + ED7286BC2155C62000C26ABF /* JSIExecutor.h in Copy Headers */, + ED7286BD2155C62000C26ABF /* JSINativeModules.h in Copy Headers */, + ); + name = "Copy Headers"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 000E6CE91AB0E97F000CDF4D /* RCTSourceCode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTSourceCode.h; sourceTree = ""; }; + 000E6CEA1AB0E980000CDF4D /* RCTSourceCode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTSourceCode.m; sourceTree = ""; }; + 001BFCCE1D8381DE008E587E /* RCTMultipartStreamReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTMultipartStreamReader.h; sourceTree = ""; }; + 001BFCCF1D8381DE008E587E /* RCTMultipartStreamReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTMultipartStreamReader.m; sourceTree = ""; }; + 006FC4121D9B20820057AAAD /* RCTMultipartDataTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTMultipartDataTask.h; sourceTree = ""; }; + 006FC4131D9B20820057AAAD /* RCTMultipartDataTask.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTMultipartDataTask.m; sourceTree = ""; }; + 008341F41D1DB34400876D9A /* RCTJSStackFrame.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTJSStackFrame.m; sourceTree = ""; }; + 008341F51D1DB34400876D9A /* RCTJSStackFrame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTJSStackFrame.h; sourceTree = ""; }; + 0EEEA8DE2239002200A8C82D /* RCTSurfacePresenterStub.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RCTSurfacePresenterStub.m; sourceTree = ""; }; + 1304439F1E3FEAA900D93A67 /* RCTFollyConvert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RCTFollyConvert.h; path = CxxUtils/RCTFollyConvert.h; sourceTree = ""; }; + 130443A01E3FEAA900D93A67 /* RCTFollyConvert.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = RCTFollyConvert.mm; path = CxxUtils/RCTFollyConvert.mm; sourceTree = ""; }; + 130443C31E401A8C00D93A67 /* RCTConvert+Transform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RCTConvert+Transform.h"; sourceTree = ""; }; + 130443C41E401A8C00D93A67 /* RCTConvert+Transform.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "RCTConvert+Transform.m"; sourceTree = ""; }; + 130443D61E401AD800D93A67 /* RCTTVView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTTVView.h; sourceTree = ""; }; + 130443D71E401AD800D93A67 /* RCTTVView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTTVView.m; sourceTree = ""; }; + 130E3D861E6A082100ACE484 /* RCTDevSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTDevSettings.h; sourceTree = ""; }; + 130E3D871E6A082100ACE484 /* RCTDevSettings.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RCTDevSettings.mm; sourceTree = ""; }; + 13134C741E296B2A00B9F3CB /* RCTCxxBridge.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RCTCxxBridge.mm; sourceTree = ""; }; + 13134C771E296B2A00B9F3CB /* RCTMessageThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTMessageThread.h; sourceTree = ""; }; + 13134C781E296B2A00B9F3CB /* RCTMessageThread.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RCTMessageThread.mm; sourceTree = ""; }; + 13134C7B1E296B2A00B9F3CB /* RCTObjcExecutor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTObjcExecutor.h; sourceTree = ""; }; + 13134C7C1E296B2A00B9F3CB /* RCTObjcExecutor.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RCTObjcExecutor.mm; sourceTree = ""; }; + 13134C7E1E296B2A00B9F3CB /* RCTCxxMethod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTCxxMethod.h; sourceTree = ""; }; + 13134C7F1E296B2A00B9F3CB /* RCTCxxMethod.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RCTCxxMethod.mm; sourceTree = ""; }; + 13134C801E296B2A00B9F3CB /* RCTCxxModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTCxxModule.h; sourceTree = ""; }; + 13134C811E296B2A00B9F3CB /* RCTCxxModule.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RCTCxxModule.mm; sourceTree = ""; }; + 13134C821E296B2A00B9F3CB /* RCTCxxUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTCxxUtils.h; sourceTree = ""; }; + 13134C831E296B2A00B9F3CB /* RCTCxxUtils.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RCTCxxUtils.mm; sourceTree = ""; }; + 131B6AF01AF1093D00FFC3E0 /* RCTSegmentedControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTSegmentedControl.h; sourceTree = ""; }; + 131B6AF11AF1093D00FFC3E0 /* RCTSegmentedControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTSegmentedControl.m; sourceTree = ""; }; + 131B6AF21AF1093D00FFC3E0 /* RCTSegmentedControlManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTSegmentedControlManager.h; sourceTree = ""; }; + 131B6AF31AF1093D00FFC3E0 /* RCTSegmentedControlManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTSegmentedControlManager.m; sourceTree = ""; }; + 133CAE8C1B8E5CFD00F6AD92 /* RCTDatePicker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTDatePicker.h; sourceTree = ""; }; + 133CAE8D1B8E5CFD00F6AD92 /* RCTDatePicker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTDatePicker.m; sourceTree = ""; }; + 13442BF21AA90E0B0037E5B0 /* RCTAnimationType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTAnimationType.h; sourceTree = ""; }; + 13442BF31AA90E0B0037E5B0 /* RCTPointerEvents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTPointerEvents.h; sourceTree = ""; }; + 13456E911ADAD2DE009F94A7 /* RCTConvert+CoreLocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RCTConvert+CoreLocation.h"; sourceTree = ""; }; + 13456E921ADAD2DE009F94A7 /* RCTConvert+CoreLocation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "RCTConvert+CoreLocation.m"; sourceTree = ""; }; + 1345A83A1B265A0E00583190 /* RCTURLRequestDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTURLRequestDelegate.h; sourceTree = ""; }; + 1345A83B1B265A0E00583190 /* RCTURLRequestHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTURLRequestHandler.h; sourceTree = ""; }; + 134D63C21F1FEC4B008872B5 /* RCTCxxBridgeDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTCxxBridgeDelegate.h; sourceTree = ""; }; + 13513F3A1B1F43F400FCE529 /* RCTProgressViewManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTProgressViewManager.h; sourceTree = ""; }; + 13513F3B1B1F43F400FCE529 /* RCTProgressViewManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTProgressViewManager.m; sourceTree = ""; }; + 13723B4E1A82FD3C00F88898 /* RCTStatusBarManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTStatusBarManager.h; sourceTree = ""; }; + 13723B4F1A82FD3C00F88898 /* RCTStatusBarManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTStatusBarManager.m; sourceTree = ""; }; + 1372B7081AB030C200659ED6 /* RCTAppState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTAppState.h; sourceTree = ""; }; + 1372B7091AB030C200659ED6 /* RCTAppState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTAppState.m; sourceTree = ""; }; + 1384E2061E806D4E00545659 /* RCTNativeModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTNativeModule.h; sourceTree = ""; }; + 1384E2071E806D4E00545659 /* RCTNativeModule.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RCTNativeModule.mm; sourceTree = ""; }; + 139D7E391E25C5A300323FB7 /* bignum-dtoa.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "bignum-dtoa.cc"; path = "src/bignum-dtoa.cc"; sourceTree = ""; }; + 139D7E3A1E25C5A300323FB7 /* bignum-dtoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "bignum-dtoa.h"; path = "src/bignum-dtoa.h"; sourceTree = ""; }; + 139D7E3B1E25C5A300323FB7 /* bignum.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bignum.cc; path = src/bignum.cc; sourceTree = ""; }; + 139D7E3C1E25C5A300323FB7 /* bignum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = bignum.h; path = src/bignum.h; sourceTree = ""; }; + 139D7E3D1E25C5A300323FB7 /* cached-powers.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "cached-powers.cc"; path = "src/cached-powers.cc"; sourceTree = ""; }; + 139D7E3E1E25C5A300323FB7 /* cached-powers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "cached-powers.h"; path = "src/cached-powers.h"; sourceTree = ""; }; + 139D7E3F1E25C5A300323FB7 /* diy-fp.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "diy-fp.cc"; path = "src/diy-fp.cc"; sourceTree = ""; }; + 139D7E401E25C5A300323FB7 /* diy-fp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "diy-fp.h"; path = "src/diy-fp.h"; sourceTree = ""; }; + 139D7E411E25C5A300323FB7 /* double-conversion.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "double-conversion.cc"; path = "src/double-conversion.cc"; sourceTree = ""; }; + 139D7E421E25C5A300323FB7 /* double-conversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "double-conversion.h"; path = "src/double-conversion.h"; sourceTree = ""; }; + 139D7E431E25C5A300323FB7 /* fast-dtoa.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "fast-dtoa.cc"; path = "src/fast-dtoa.cc"; sourceTree = ""; }; + 139D7E441E25C5A300323FB7 /* fast-dtoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "fast-dtoa.h"; path = "src/fast-dtoa.h"; sourceTree = ""; }; + 139D7E451E25C5A300323FB7 /* fixed-dtoa.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "fixed-dtoa.cc"; path = "src/fixed-dtoa.cc"; sourceTree = ""; }; + 139D7E461E25C5A300323FB7 /* fixed-dtoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "fixed-dtoa.h"; path = "src/fixed-dtoa.h"; sourceTree = ""; }; + 139D7E471E25C5A300323FB7 /* ieee.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ieee.h; path = src/ieee.h; sourceTree = ""; }; + 139D7E481E25C5A300323FB7 /* strtod.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = strtod.cc; path = src/strtod.cc; sourceTree = ""; }; + 139D7E491E25C5A300323FB7 /* strtod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = strtod.h; path = src/strtod.h; sourceTree = ""; }; + 139D7E4A1E25C5A300323FB7 /* utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = utils.h; path = src/utils.h; sourceTree = ""; }; + 139D7E881E25C6D100323FB7 /* libdouble-conversion.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libdouble-conversion.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 139D7ECE1E25DB7D00323FB7 /* libthird-party.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libthird-party.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 139D7ED81E25DBDC00323FB7 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = config.h; path = "../third-party/glog-0.3.5/src/config.h"; sourceTree = ""; }; + 139D7ED91E25DBDC00323FB7 /* demangle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = demangle.h; path = "../third-party/glog-0.3.5/src/demangle.h"; sourceTree = ""; }; + 139D7EDA1E25DBDC00323FB7 /* logging.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = logging.cc; path = "../third-party/glog-0.3.5/src/logging.cc"; sourceTree = ""; }; + 139D7EDB1E25DBDC00323FB7 /* raw_logging.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = raw_logging.cc; path = "../third-party/glog-0.3.5/src/raw_logging.cc"; sourceTree = ""; }; + 139D7EDC1E25DBDC00323FB7 /* signalhandler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = signalhandler.cc; path = "../third-party/glog-0.3.5/src/signalhandler.cc"; sourceTree = ""; }; + 139D7EDD1E25DBDC00323FB7 /* stacktrace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stacktrace.h; path = "../third-party/glog-0.3.5/src/stacktrace.h"; sourceTree = ""; }; + 139D7EDE1E25DBDC00323FB7 /* symbolize.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = symbolize.cc; path = "../third-party/glog-0.3.5/src/symbolize.cc"; sourceTree = ""; }; + 139D7EDF1E25DBDC00323FB7 /* symbolize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = symbolize.h; path = "../third-party/glog-0.3.5/src/symbolize.h"; sourceTree = ""; }; + 139D7EE01E25DBDC00323FB7 /* utilities.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = utilities.cc; path = "../third-party/glog-0.3.5/src/utilities.cc"; sourceTree = ""; }; + 139D7EE11E25DBDC00323FB7 /* utilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = utilities.h; path = "../third-party/glog-0.3.5/src/utilities.h"; sourceTree = ""; }; + 139D7EE21E25DBDC00323FB7 /* vlog_is_on.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = vlog_is_on.cc; path = "../third-party/glog-0.3.5/src/vlog_is_on.cc"; sourceTree = ""; }; + 139D7F081E25DE3700323FB7 /* demangle.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = demangle.cc; path = "../third-party/glog-0.3.5/src/demangle.cc"; sourceTree = ""; }; + 139D7F111E25DEC900323FB7 /* log_severity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = log_severity.h; sourceTree = ""; }; + 139D7F121E25DEC900323FB7 /* logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = logging.h; sourceTree = ""; }; + 139D7F141E25DEC900323FB7 /* raw_logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = raw_logging.h; sourceTree = ""; }; + 139D7F161E25DEC900323FB7 /* stl_logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stl_logging.h; sourceTree = ""; }; + 139D7F181E25DEC900323FB7 /* vlog_is_on.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vlog_is_on.h; sourceTree = ""; }; + 139D849C1E273B5600323FB7 /* AtomicIntrusiveLinkedList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AtomicIntrusiveLinkedList.h; path = folly/AtomicIntrusiveLinkedList.h; sourceTree = ""; }; + 139D849F1E273B5600323FB7 /* Conv.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Conv.cpp; path = folly/Conv.cpp; sourceTree = ""; }; + 139D84A01E273B5600323FB7 /* Conv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Conv.h; path = folly/Conv.h; sourceTree = ""; }; + 139D84A11E273B5600323FB7 /* dynamic-inl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "dynamic-inl.h"; path = "folly/dynamic-inl.h"; sourceTree = ""; }; + 139D84A21E273B5600323FB7 /* dynamic.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dynamic.cpp; path = folly/dynamic.cpp; sourceTree = ""; }; + 139D84A31E273B5600323FB7 /* dynamic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dynamic.h; path = folly/dynamic.h; sourceTree = ""; }; + 139D84A41E273B5600323FB7 /* Exception.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Exception.h; path = folly/Exception.h; sourceTree = ""; }; + 139D84A71E273B5600323FB7 /* json.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = json.cpp; path = folly/json.cpp; sourceTree = ""; }; + 139D84A81E273B5600323FB7 /* json.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = json.h; path = folly/json.h; sourceTree = ""; }; + 139D84A91E273B5600323FB7 /* Memory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Memory.h; path = folly/Memory.h; sourceTree = ""; }; + 139D84AA1E273B5600323FB7 /* MoveWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MoveWrapper.h; path = folly/MoveWrapper.h; sourceTree = ""; }; + 139D84AB1E273B5600323FB7 /* Optional.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Optional.h; path = folly/Optional.h; sourceTree = ""; }; + 139D84AC1E273B5600323FB7 /* ScopeGuard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScopeGuard.h; path = folly/ScopeGuard.h; sourceTree = ""; }; + 13A0C2851B74F71200B29F6F /* RCTDevLoadingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = RCTDevLoadingView.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 13A0C2861B74F71200B29F6F /* RCTDevLoadingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTDevLoadingView.m; sourceTree = ""; }; + 13A0C2871B74F71200B29F6F /* RCTDevMenu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = RCTDevMenu.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 13A0C2881B74F71200B29F6F /* RCTDevMenu.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTDevMenu.m; sourceTree = ""; }; + 13A1F71C1A75392D00D3D453 /* RCTKeyCommands.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTKeyCommands.h; sourceTree = ""; }; + 13A1F71D1A75392D00D3D453 /* RCTKeyCommands.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTKeyCommands.m; sourceTree = ""; }; + 13A6E20C1C19AA0C00845B82 /* RCTParserUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTParserUtils.h; sourceTree = ""; }; + 13A6E20D1C19AA0C00845B82 /* RCTParserUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTParserUtils.m; sourceTree = ""; }; + 13A6E20F1C19ABC700845B82 /* RCTNullability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTNullability.h; sourceTree = ""; }; + 13AB90BF1B6FA36700713B4F /* RCTComponentData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTComponentData.h; sourceTree = ""; }; + 13AB90C01B6FA36700713B4F /* RCTComponentData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTComponentData.m; sourceTree = ""; }; + 13AF1F851AE6E777005F5298 /* RCTDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTDefines.h; sourceTree = ""; }; + 13AF20431AE707F8005F5298 /* RCTSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTSlider.h; sourceTree = ""; }; + 13AF20441AE707F9005F5298 /* RCTSlider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTSlider.m; sourceTree = ""; }; + 13AFBCA11C07287B00BBAEAA /* RCTBridgeMethod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTBridgeMethod.h; sourceTree = ""; }; + 13AFBCA21C07287B00BBAEAA /* RCTRootViewDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTRootViewDelegate.h; sourceTree = ""; }; + 13B07FE71A69327A00A75B9A /* RCTAlertManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTAlertManager.h; sourceTree = ""; }; + 13B07FE81A69327A00A75B9A /* RCTAlertManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTAlertManager.m; sourceTree = ""; }; + 13B07FE91A69327A00A75B9A /* RCTExceptionsManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = RCTExceptionsManager.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 13B07FEA1A69327A00A75B9A /* RCTExceptionsManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTExceptionsManager.m; sourceTree = ""; }; + 13B07FED1A69327A00A75B9A /* RCTTiming.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTTiming.h; sourceTree = ""; }; + 13B07FEE1A69327A00A75B9A /* RCTTiming.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTTiming.m; sourceTree = ""; }; + 13B080181A69489C00A75B9A /* RCTActivityIndicatorViewManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTActivityIndicatorViewManager.h; sourceTree = ""; }; + 13B080191A69489C00A75B9A /* RCTActivityIndicatorViewManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTActivityIndicatorViewManager.m; sourceTree = ""; }; + 13B080231A694A8400A75B9A /* RCTWrapperViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTWrapperViewController.h; sourceTree = ""; }; + 13B080241A694A8400A75B9A /* RCTWrapperViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTWrapperViewController.m; sourceTree = ""; }; + 13BB3D001BECD54500932C10 /* RCTImageSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = RCTImageSource.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 13BB3D011BECD54500932C10 /* RCTImageSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTImageSource.m; sourceTree = ""; }; + 13BCE8071C99CB9D00DD7AAD /* RCTRootShadowView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTRootShadowView.h; sourceTree = ""; }; + 13BCE8081C99CB9D00DD7AAD /* RCTRootShadowView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTRootShadowView.m; sourceTree = ""; }; + 13C156011AB1A2840079392D /* RCTWebView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTWebView.h; sourceTree = ""; }; + 13C156021AB1A2840079392D /* RCTWebView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTWebView.m; sourceTree = ""; }; + 13C156031AB1A2840079392D /* RCTWebViewManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTWebViewManager.h; sourceTree = ""; }; + 13C156041AB1A2840079392D /* RCTWebViewManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTWebViewManager.m; sourceTree = ""; }; + 13C325261AA63B6A0048765F /* RCTAutoInsetsProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTAutoInsetsProtocol.h; sourceTree = ""; }; + 13C325281AA63B6A0048765F /* RCTComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTComponent.h; sourceTree = ""; }; + 13CC8A801B17642100940AE7 /* RCTBorderDrawing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTBorderDrawing.h; sourceTree = ""; }; + 13CC8A811B17642100940AE7 /* RCTBorderDrawing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTBorderDrawing.m; sourceTree = ""; }; + 13D033611C1837FE0021DC29 /* RCTClipboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTClipboard.h; sourceTree = ""; }; + 13D033621C1837FE0021DC29 /* RCTClipboard.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTClipboard.m; sourceTree = ""; }; + 13D9FEE91CDCCECF00158BD7 /* RCTEventEmitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = RCTEventEmitter.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 13D9FEEA1CDCCECF00158BD7 /* RCTEventEmitter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTEventEmitter.m; sourceTree = ""; }; + 13D9FEEC1CDCD93000158BD7 /* RCTKeyboardObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTKeyboardObserver.h; sourceTree = ""; }; + 13D9FEED1CDCD93000158BD7 /* RCTKeyboardObserver.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTKeyboardObserver.m; sourceTree = ""; }; + 13DA8A2F2097A90A00276ED4 /* ReactMarker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReactMarker.h; sourceTree = ""; }; + 13DA8A302097A90B00276ED4 /* ReactMarker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ReactMarker.cpp; sourceTree = ""; }; + 13E067481A70F434002CDEE1 /* RCTUIManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTUIManager.h; sourceTree = ""; }; + 13E067491A70F434002CDEE1 /* RCTUIManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTUIManager.m; sourceTree = ""; }; + 13E0674B1A70F44B002CDEE1 /* RCTShadowView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTShadowView.h; sourceTree = ""; }; + 13E0674D1A70F44B002CDEE1 /* RCTViewManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTViewManager.h; sourceTree = ""; }; + 13E0674E1A70F44B002CDEE1 /* RCTViewManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTViewManager.m; sourceTree = ""; }; + 13E0674F1A70F44B002CDEE1 /* RCTView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTView.h; sourceTree = ""; }; + 13E067501A70F44B002CDEE1 /* RCTView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTView.m; sourceTree = ""; }; + 13E067531A70F44B002CDEE1 /* UIView+React.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+React.h"; sourceTree = ""; }; + 13E067541A70F44B002CDEE1 /* UIView+React.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+React.m"; sourceTree = ""; }; + 13F17A831B8493E5007D4C75 /* RCTRedBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTRedBox.h; sourceTree = ""; }; + 13F17A841B8493E5007D4C75 /* RCTRedBox.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTRedBox.m; sourceTree = ""; }; + 13F887521E2971C500C3C7A1 /* Demangle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Demangle.h; path = folly/Demangle.h; sourceTree = ""; }; + 13F887541E2971C500C3C7A1 /* Unicode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Unicode.cpp; path = folly/Unicode.cpp; sourceTree = ""; }; + 14200DA81AC179B3008EE6BA /* RCTJavaScriptLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTJavaScriptLoader.h; sourceTree = ""; }; + 142014171B32094000CC17BA /* RCTPerformanceLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTPerformanceLogger.m; sourceTree = ""; }; + 142014181B32094000CC17BA /* RCTPerformanceLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTPerformanceLogger.h; sourceTree = ""; }; + 1436DD071ADE7AA000A5ED7D /* RCTFrameUpdate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RCTFrameUpdate.h; sourceTree = ""; }; + 1450FF801BCFF28A00208362 /* RCTProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTProfile.h; sourceTree = ""; }; + 1450FF811BCFF28A00208362 /* RCTProfile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTProfile.m; sourceTree = ""; }; + 1450FF821BCFF28A00208362 /* RCTProfileTrampoline-arm.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = "RCTProfileTrampoline-arm.S"; sourceTree = ""; }; + 1450FF831BCFF28A00208362 /* RCTProfileTrampoline-arm64.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = "RCTProfileTrampoline-arm64.S"; sourceTree = ""; }; + 1450FF851BCFF28A00208362 /* RCTProfileTrampoline-x86_64.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = "RCTProfileTrampoline-x86_64.S"; sourceTree = ""; }; + 1482F9E61B55B927000ADFF3 /* RCTBridgeDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RCTBridgeDelegate.h; sourceTree = ""; }; + 14A43DB81C1F849600794BC8 /* RCTBridge+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "RCTBridge+Private.h"; sourceTree = ""; }; + 14BF717F1C04793D00C97D0C /* RCTProfileTrampoline-i386.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = "RCTProfileTrampoline-i386.S"; sourceTree = ""; }; + 14BF71811C04795500C97D0C /* RCTMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTMacros.h; sourceTree = ""; }; + 14C2CA6F1B3AC63800E6CBB2 /* RCTModuleMethod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTModuleMethod.h; sourceTree = ""; }; + 14C2CA721B3AC64300E6CBB2 /* RCTModuleData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTModuleData.h; sourceTree = ""; }; + 14C2CA731B3AC64300E6CBB2 /* RCTModuleData.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RCTModuleData.mm; sourceTree = ""; }; + 14C2CA751B3AC64F00E6CBB2 /* RCTFrameUpdate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTFrameUpdate.m; sourceTree = ""; }; + 14F362071AABD06A001CE568 /* RCTSwitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTSwitch.h; sourceTree = ""; }; + 14F362081AABD06A001CE568 /* RCTSwitch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTSwitch.m; sourceTree = ""; }; + 14F362091AABD06A001CE568 /* RCTSwitchManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTSwitchManager.h; sourceTree = ""; }; + 14F3620A1AABD06A001CE568 /* RCTSwitchManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTSwitchManager.m; sourceTree = ""; }; + 14F484541AABFCE100FDF6B9 /* RCTSliderManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTSliderManager.h; sourceTree = ""; }; + 14F484551AABFCE100FDF6B9 /* RCTSliderManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTSliderManager.m; sourceTree = ""; }; + 14F7A0EB1BDA3B3C003C6C10 /* RCTPerfMonitor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTPerfMonitor.m; sourceTree = ""; }; + 14F7A0EE1BDA714B003C6C10 /* RCTFPSGraph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = RCTFPSGraph.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 14F7A0EF1BDA714B003C6C10 /* RCTFPSGraph.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTFPSGraph.m; sourceTree = ""; }; + 191E3EBC1C29D9AF00C180A6 /* RCTRefreshControlManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTRefreshControlManager.h; sourceTree = ""; }; + 191E3EBD1C29D9AF00C180A6 /* RCTRefreshControlManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTRefreshControlManager.m; sourceTree = ""; }; + 191E3EBF1C29DC3800C180A6 /* RCTRefreshControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTRefreshControl.h; sourceTree = ""; }; + 191E3EC01C29DC3800C180A6 /* RCTRefreshControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTRefreshControl.m; sourceTree = ""; }; + 199B8A6E1F44DB16005DEF67 /* RCTVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTVersion.h; sourceTree = ""; }; + 27B958731E57587D0096647A /* JSBigString.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSBigString.cpp; sourceTree = ""; }; + 2D2A28131D9B038B00D4039D /* libReact.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libReact.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 352DCFEE1D19F4C20056D623 /* RCTI18nUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTI18nUtil.h; sourceTree = ""; }; + 352DCFEF1D19F4C20056D623 /* RCTI18nUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTI18nUtil.m; sourceTree = ""; }; + 391E86A21C623EC800009732 /* RCTTouchEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTTouchEvent.m; sourceTree = ""; }; + 391E86A31C623EC800009732 /* RCTTouchEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTTouchEvent.h; sourceTree = ""; }; + 39C50FFA2046EE3500CEE534 /* RCTVersion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTVersion.m; sourceTree = ""; }; + 3D0B84281EC0B49400B2BD8E /* RCTTVRemoteHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTTVRemoteHandler.h; sourceTree = ""; }; + 3D0B84291EC0B49400B2BD8E /* RCTTVRemoteHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTTVRemoteHandler.m; sourceTree = ""; }; + 3D0B842D1EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTTVNavigationEventEmitter.h; sourceTree = ""; }; + 3D0B842E1EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTTVNavigationEventEmitter.m; sourceTree = ""; }; + 3D0E37891F1CC40000DCAC9F /* RCTWebSocketModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RCTWebSocketModule.h; path = WebSocket/RCTWebSocketModule.h; sourceTree = ""; }; + 3D1E68D81CABD13900DD7465 /* RCTDisplayLink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTDisplayLink.h; sourceTree = ""; }; + 3D1E68D91CABD13900DD7465 /* RCTDisplayLink.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTDisplayLink.m; sourceTree = ""; }; + 3D1FA07A1DE4F2EA00E03CC6 /* RCTNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTNetworking.h; sourceTree = ""; }; + 3D1FA07B1DE4F2EA00E03CC6 /* RCTNetworkTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTNetworkTask.h; sourceTree = ""; }; + 3D1FA0831DE4F3A000E03CC6 /* RCTImageLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTImageLoader.h; sourceTree = ""; }; + 3D1FA0841DE4F3A000E03CC6 /* RCTImageStoreManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTImageStoreManager.h; sourceTree = ""; }; + 3D1FA0851DE4F3A000E03CC6 /* RCTResizeMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTResizeMode.h; sourceTree = ""; }; + 3D1FA08B1DE4F4DD00E03CC6 /* RCTLinkingManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTLinkingManager.h; sourceTree = ""; }; + 3D1FA08D1DE4F4EE00E03CC6 /* RCTPushNotificationManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RCTPushNotificationManager.h; path = PushNotificationIOS/RCTPushNotificationManager.h; sourceTree = ""; }; + 3D37B5801D522B190042D5B5 /* RCTFont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = RCTFont.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 3D37B5811D522B190042D5B5 /* RCTFont.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RCTFont.mm; sourceTree = ""; }; + 3D383D3C1EBD27B6005632C8 /* libthird-party.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libthird-party.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 3D383D621EBD27B9005632C8 /* libdouble-conversion.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libdouble-conversion.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 3D3CD8F51DE5FB2300167DC4 /* JSBundleType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSBundleType.h; sourceTree = ""; }; + 3D3CD9251DE5FBEC00167DC4 /* libcxxreact.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libcxxreact.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 3D3CD9321DE5FBEE00167DC4 /* libcxxreact.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libcxxreact.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 3D7454781E54757500E74ADD /* JSBigString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSBigString.h; sourceTree = ""; }; + 3D7454791E54757500E74ADD /* RecoverableError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RecoverableError.h; sourceTree = ""; }; + 3D7454B31E54786200E74ADD /* NSDataBigString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSDataBigString.h; sourceTree = ""; }; + 3D7749421DC1065C007EC8D8 /* RCTPlatform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTPlatform.h; sourceTree = ""; }; + 3D7749431DC1065C007EC8D8 /* RCTPlatform.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTPlatform.m; sourceTree = ""; }; + 3D7AA9C31E548CD5001955CF /* NSDataBigString.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = NSDataBigString.mm; sourceTree = ""; }; + 3D7BFD0B1EA8E351008DFB7A /* RCTPackagerClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTPackagerClient.h; sourceTree = ""; }; + 3D7BFD0C1EA8E351008DFB7A /* RCTPackagerClient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTPackagerClient.m; sourceTree = ""; }; + 3D7BFD0F1EA8E351008DFB7A /* RCTPackagerConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTPackagerConnection.h; sourceTree = ""; }; + 3D7BFD101EA8E351008DFB7A /* RCTPackagerConnection.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RCTPackagerConnection.mm; sourceTree = ""; }; + 3D7BFD2B1EA8E3FA008DFB7A /* RCTReconnectingWebSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RCTReconnectingWebSocket.h; path = WebSocket/RCTReconnectingWebSocket.h; sourceTree = ""; }; + 3D7BFD2C1EA8E3FA008DFB7A /* RCTSRWebSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RCTSRWebSocket.h; path = WebSocket/RCTSRWebSocket.h; sourceTree = ""; }; + 3D92B0A71E03699D0018521A /* CxxModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CxxModule.h; sourceTree = ""; }; + 3D92B0A81E03699D0018521A /* CxxNativeModule.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CxxNativeModule.cpp; sourceTree = ""; }; + 3D92B0A91E03699D0018521A /* CxxNativeModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CxxNativeModule.h; sourceTree = ""; }; + 3D92B0AB1E03699D0018521A /* JSExecutor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSExecutor.h; sourceTree = ""; }; + 3D92B0AE1E03699D0018521A /* Instance.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Instance.cpp; sourceTree = ""; }; + 3D92B0AF1E03699D0018521A /* Instance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Instance.h; sourceTree = ""; }; + 3D92B0B01E03699D0018521A /* JsArgumentHelpers-inl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "JsArgumentHelpers-inl.h"; sourceTree = ""; }; + 3D92B0B11E03699D0018521A /* JsArgumentHelpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JsArgumentHelpers.h; sourceTree = ""; }; + 3D92B0C61E03699D0018521A /* JSIndexedRAMBundle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIndexedRAMBundle.cpp; sourceTree = ""; }; + 3D92B0C71E03699D0018521A /* JSIndexedRAMBundle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIndexedRAMBundle.h; sourceTree = ""; }; + 3D92B0C81E03699D0018521A /* JSModulesUnbundle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSModulesUnbundle.h; sourceTree = ""; }; + 3D92B0C91E03699D0018521A /* MessageQueueThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MessageQueueThread.h; sourceTree = ""; }; + 3D92B0CA1E03699D0018521A /* MethodCall.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MethodCall.cpp; sourceTree = ""; }; + 3D92B0CB1E03699D0018521A /* MethodCall.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MethodCall.h; sourceTree = ""; }; + 3D92B0CC1E03699D0018521A /* ModuleRegistry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ModuleRegistry.cpp; sourceTree = ""; }; + 3D92B0CD1E03699D0018521A /* ModuleRegistry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModuleRegistry.h; sourceTree = ""; }; + 3D92B0CE1E03699D0018521A /* NativeModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NativeModule.h; sourceTree = ""; }; + 3D92B0CF1E03699D0018521A /* NativeToJsBridge.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NativeToJsBridge.cpp; sourceTree = ""; }; + 3D92B0D01E03699D0018521A /* NativeToJsBridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NativeToJsBridge.h; sourceTree = ""; }; + 3D92B0D31E03699D0018521A /* SampleCxxModule.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SampleCxxModule.cpp; sourceTree = ""; }; + 3D92B0D41E03699D0018521A /* SampleCxxModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SampleCxxModule.h; sourceTree = ""; }; + 3D92B0D51E03699D0018521A /* SystraceSection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SystraceSection.h; sourceTree = ""; }; + 3EDCA8A21D3591E700450C31 /* RCTErrorCustomizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTErrorCustomizer.h; sourceTree = ""; }; + 3EDCA8A31D3591E700450C31 /* RCTErrorInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTErrorInfo.h; sourceTree = ""; }; + 3EDCA8A41D3591E700450C31 /* RCTErrorInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTErrorInfo.m; sourceTree = ""; }; + 4F56C93722167A4800DB9F3F /* jsilib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsilib.h; sourceTree = ""; }; + 50E98FE621460B0D00CD9289 /* RCTWKWebViewManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTWKWebViewManager.m; sourceTree = ""; }; + 50E98FE721460B0D00CD9289 /* RCTWKWebView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTWKWebView.h; sourceTree = ""; }; + 50E98FE821460B0D00CD9289 /* RCTWKWebView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTWKWebView.m; sourceTree = ""; }; + 50E98FE921460B0D00CD9289 /* RCTWKWebViewManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTWKWebViewManager.h; sourceTree = ""; }; + 5335D5401FE81A4700883D58 /* RCTShadowView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTShadowView.m; sourceTree = ""; }; + 53D123831FBF1D49001B8A10 /* libyoga.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libyoga.a; path = "../../../../../../../../../Library/Developer/Xcode/DerivedData/yoga-hdfifpwsinitsibujacpiefkjfdy/Build/Products/Debug/libyoga.a"; sourceTree = ""; }; + 58114A121AAE854800E7D092 /* RCTPicker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTPicker.h; sourceTree = ""; }; + 58114A131AAE854800E7D092 /* RCTPicker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTPicker.m; sourceTree = ""; }; + 58114A141AAE854800E7D092 /* RCTPickerManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTPickerManager.h; sourceTree = ""; }; + 58114A151AAE854800E7D092 /* RCTPickerManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTPickerManager.m; sourceTree = ""; }; + 58114A4E1AAE93D500E7D092 /* RCTAsyncLocalStorage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTAsyncLocalStorage.m; sourceTree = ""; }; + 58114A4F1AAE93D500E7D092 /* RCTAsyncLocalStorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTAsyncLocalStorage.h; sourceTree = ""; }; + 589515DF2231AD9C0036BDE0 /* RCTSurfacePresenterStub.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTSurfacePresenterStub.h; sourceTree = ""; }; + 58C571BF1AA56C1900CDF9C8 /* RCTDatePickerManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTDatePickerManager.m; sourceTree = ""; }; + 58C571C01AA56C1900CDF9C8 /* RCTDatePickerManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = RCTDatePickerManager.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 590D7BFB1EBD458B00D8A370 /* RCTShadowView+Layout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RCTShadowView+Layout.h"; sourceTree = ""; }; + 590D7BFC1EBD458B00D8A370 /* RCTShadowView+Layout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "RCTShadowView+Layout.m"; sourceTree = ""; }; + 591F78D8202ADB21004A668C /* RCTLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTLayout.m; sourceTree = ""; }; + 591F78D9202ADB22004A668C /* RCTLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTLayout.h; sourceTree = ""; }; + 5925356920084D0600DD584B /* RCTSurfaceSizeMeasureMode.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RCTSurfaceSizeMeasureMode.mm; sourceTree = ""; }; + 59283C9F1FD67320000EAAB9 /* RCTSurfaceStage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTSurfaceStage.m; sourceTree = ""; }; + 594F0A2F1FD23228007FBE96 /* RCTSurfaceHostingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTSurfaceHostingView.h; sourceTree = ""; }; + 594F0A301FD23228007FBE96 /* RCTSurfaceHostingView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RCTSurfaceHostingView.mm; sourceTree = ""; }; + 594F0A311FD23228007FBE96 /* RCTSurfaceSizeMeasureMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTSurfaceSizeMeasureMode.h; sourceTree = ""; }; + 59500D411F71C63700B122B7 /* RCTUIManagerUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTUIManagerUtils.h; sourceTree = ""; }; + 59500D421F71C63F00B122B7 /* RCTUIManagerUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTUIManagerUtils.m; sourceTree = ""; }; + 5960C1B11F0804A00066FD5B /* RCTLayoutAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTLayoutAnimation.h; sourceTree = ""; }; + 5960C1B21F0804A00066FD5B /* RCTLayoutAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTLayoutAnimation.m; sourceTree = ""; }; + 5960C1B31F0804A00066FD5B /* RCTLayoutAnimationGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTLayoutAnimationGroup.h; sourceTree = ""; }; + 5960C1B41F0804A00066FD5B /* RCTLayoutAnimationGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTLayoutAnimationGroup.m; sourceTree = ""; }; + 597633341F4E021D005BE8A4 /* RCTShadowView+Internal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "RCTShadowView+Internal.m"; sourceTree = ""; }; + 597633351F4E021D005BE8A4 /* RCTShadowView+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RCTShadowView+Internal.h"; sourceTree = ""; }; + 599FAA2A1FB274970058CCF6 /* RCTSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTSurface.h; sourceTree = ""; }; + 599FAA2B1FB274970058CCF6 /* RCTSurface.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RCTSurface.mm; sourceTree = ""; }; + 599FAA2C1FB274970058CCF6 /* RCTSurfaceDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTSurfaceDelegate.h; sourceTree = ""; }; + 599FAA2D1FB274970058CCF6 /* RCTSurfaceRootShadowView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTSurfaceRootShadowView.h; sourceTree = ""; }; + 599FAA2E1FB274970058CCF6 /* RCTSurfaceRootShadowView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTSurfaceRootShadowView.m; sourceTree = ""; }; + 599FAA2F1FB274970058CCF6 /* RCTSurfaceRootShadowViewDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTSurfaceRootShadowViewDelegate.h; sourceTree = ""; }; + 599FAA301FB274970058CCF6 /* RCTSurfaceRootView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTSurfaceRootView.h; sourceTree = ""; }; + 599FAA311FB274970058CCF6 /* RCTSurfaceRootView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RCTSurfaceRootView.mm; sourceTree = ""; }; + 599FAA321FB274970058CCF6 /* RCTSurfaceStage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTSurfaceStage.h; sourceTree = ""; }; + 599FAA331FB274970058CCF6 /* RCTSurfaceView+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RCTSurfaceView+Internal.h"; sourceTree = ""; }; + 599FAA341FB274970058CCF6 /* RCTSurfaceView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTSurfaceView.h; sourceTree = ""; }; + 599FAA351FB274970058CCF6 /* RCTSurfaceView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RCTSurfaceView.mm; sourceTree = ""; }; + 59A7B9FB1E577DBF0068EDBF /* RCTRootContentView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTRootContentView.h; sourceTree = ""; }; + 59A7B9FC1E577DBF0068EDBF /* RCTRootContentView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTRootContentView.m; sourceTree = ""; }; + 59D031E51F8353D3008361F0 /* RCTSafeAreaShadowView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTSafeAreaShadowView.h; sourceTree = ""; }; + 59D031E61F8353D3008361F0 /* RCTSafeAreaShadowView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTSafeAreaShadowView.m; sourceTree = ""; }; + 59D031E71F8353D3008361F0 /* RCTSafeAreaView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTSafeAreaView.h; sourceTree = ""; }; + 59D031E81F8353D3008361F0 /* RCTSafeAreaView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTSafeAreaView.m; sourceTree = ""; }; + 59D031E91F8353D3008361F0 /* RCTSafeAreaViewLocalData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTSafeAreaViewLocalData.h; sourceTree = ""; }; + 59D031EA1F8353D3008361F0 /* RCTSafeAreaViewLocalData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTSafeAreaViewLocalData.m; sourceTree = ""; }; + 59D031EB1F8353D3008361F0 /* RCTSafeAreaViewManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTSafeAreaViewManager.h; sourceTree = ""; }; + 59D031EC1F8353D3008361F0 /* RCTSafeAreaViewManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTSafeAreaViewManager.m; sourceTree = ""; }; + 59E6049C1FE9CCE100BD90C5 /* RCTScrollContentShadowView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTScrollContentShadowView.h; sourceTree = ""; }; + 59E6049D1FE9CCE200BD90C5 /* RCTScrollContentViewManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTScrollContentViewManager.m; sourceTree = ""; }; + 59E6049E1FE9CCE200BD90C5 /* RCTScrollContentShadowView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTScrollContentShadowView.m; sourceTree = ""; }; + 59E6049F1FE9CCE200BD90C5 /* RCTScrollContentViewManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTScrollContentViewManager.h; sourceTree = ""; }; + 59EB6DB91EBD6FC90072A5E7 /* RCTUIManagerObserverCoordinator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTUIManagerObserverCoordinator.h; sourceTree = ""; }; + 59EB6DBA1EBD6FC90072A5E7 /* RCTUIManagerObserverCoordinator.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RCTUIManagerObserverCoordinator.mm; sourceTree = ""; }; + 59EDBC9C1FDF4E0C003573DE /* RCTScrollableProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTScrollableProtocol.h; sourceTree = ""; }; + 59EDBC9F1FDF4E0C003573DE /* RCTScrollContentView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTScrollContentView.h; sourceTree = ""; }; + 59EDBCA01FDF4E0C003573DE /* RCTScrollContentView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTScrollContentView.m; sourceTree = ""; }; + 59EDBCA31FDF4E0C003573DE /* RCTScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTScrollView.h; sourceTree = ""; }; + 59EDBCA41FDF4E0C003573DE /* RCTScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTScrollView.m; sourceTree = ""; }; + 59EDBCA51FDF4E0C003573DE /* RCTScrollViewManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTScrollViewManager.h; sourceTree = ""; }; + 59EDBCA61FDF4E0C003573DE /* RCTScrollViewManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTScrollViewManager.m; sourceTree = ""; }; + 657734821EE834C900A0E9EA /* RCTInspectorDevServerHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTInspectorDevServerHelper.h; sourceTree = ""; }; + 657734831EE834C900A0E9EA /* RCTInspectorDevServerHelper.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RCTInspectorDevServerHelper.mm; sourceTree = ""; }; + 6577348A1EE8354A00A0E9EA /* RCTInspector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RCTInspector.h; path = Inspector/RCTInspector.h; sourceTree = ""; }; + 6577348B1EE8354A00A0E9EA /* RCTInspector.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = RCTInspector.mm; path = Inspector/RCTInspector.mm; sourceTree = ""; }; + 6577348C1EE8354A00A0E9EA /* RCTInspectorPackagerConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RCTInspectorPackagerConnection.h; path = Inspector/RCTInspectorPackagerConnection.h; sourceTree = ""; }; + 6577348D1EE8354A00A0E9EA /* RCTInspectorPackagerConnection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RCTInspectorPackagerConnection.m; path = Inspector/RCTInspectorPackagerConnection.m; sourceTree = ""; }; + 66CD94AD1F1045E700CB3C7C /* RCTMaskedView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTMaskedView.h; sourceTree = ""; }; + 66CD94AE1F1045E700CB3C7C /* RCTMaskedView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTMaskedView.m; sourceTree = ""; }; + 66CD94AF1F1045E700CB3C7C /* RCTMaskedViewManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTMaskedViewManager.h; sourceTree = ""; }; + 66CD94B01F1045E700CB3C7C /* RCTMaskedViewManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTMaskedViewManager.m; sourceTree = ""; }; + 68EFE4EC1CF6EB3000A1DE13 /* RCTBundleURLProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTBundleURLProvider.h; sourceTree = ""; }; + 68EFE4ED1CF6EB3900A1DE13 /* RCTBundleURLProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTBundleURLProvider.m; sourceTree = ""; }; + 6A15FB0C1BDF663500531DFB /* RCTRootViewInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTRootViewInternal.h; sourceTree = ""; }; + 6D4C7F85224946B900CBB1EC /* libYogaDev.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libYogaDev.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 6D4C7FAF2249479200CBB1EC /* libYogaDev.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libYogaDev.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 6DCB22442249333B0041DDBC /* third-party(Yoga).xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "third-party(Yoga).xcconfig"; sourceTree = ""; }; + 6DCB224522493AF10041DDBC /* Demangle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Demangle.cpp; path = folly/Demangle.cpp; sourceTree = ""; }; + 830213F31A654E0800B993E6 /* RCTBridgeModule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RCTBridgeModule.h; sourceTree = ""; }; + 830A229C1A66C68A008503DA /* RCTRootView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTRootView.h; sourceTree = ""; }; + 830A229D1A66C68A008503DA /* RCTRootView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTRootView.m; sourceTree = ""; }; + 83281383217EB70800574D55 /* MallocImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MallocImpl.cpp; path = folly/memory/detail/MallocImpl.cpp; sourceTree = ""; }; + 83281386217EB73400574D55 /* String.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = String.cpp; path = folly/String.cpp; sourceTree = ""; }; + 83281389217EB74C00574D55 /* json_pointer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = json_pointer.cpp; path = folly/json_pointer.cpp; sourceTree = ""; }; + 8328138C217EB75C00574D55 /* ColdClass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ColdClass.cpp; path = folly/lang/ColdClass.cpp; sourceTree = ""; }; + 83281392217EB77C00574D55 /* SpookyHashV2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SpookyHashV2.cpp; path = folly/hash/SpookyHashV2.cpp; sourceTree = ""; }; + 83281395217EB78F00574D55 /* F14Table.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = F14Table.cpp; path = folly/container/detail/F14Table.cpp; sourceTree = ""; }; + 83281398217EB79D00574D55 /* ScopeGuard.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScopeGuard.cpp; path = folly/ScopeGuard.cpp; sourceTree = ""; }; + 83392EB11B6634E10013B15F /* RCTModalHostViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTModalHostViewController.h; sourceTree = ""; }; + 83392EB21B6634E10013B15F /* RCTModalHostViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTModalHostViewController.m; sourceTree = ""; }; + 833D02B9217EBCFA00A23750 /* Assume.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Assume.cpp; path = folly/lang/Assume.cpp; sourceTree = ""; }; + 833D02BC217EBD2600A23750 /* Format.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Format.cpp; path = folly/Format.cpp; sourceTree = ""; }; + 83A1FE8A1B62640A00BE0E65 /* RCTModalHostView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTModalHostView.h; sourceTree = ""; }; + 83A1FE8B1B62640A00BE0E65 /* RCTModalHostView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTModalHostView.m; sourceTree = ""; }; + 83A1FE8D1B62643A00BE0E65 /* RCTModalHostViewManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTModalHostViewManager.h; sourceTree = ""; }; + 83A1FE8E1B62643A00BE0E65 /* RCTModalHostViewManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTModalHostViewManager.m; sourceTree = ""; }; + 83CBBA2E1A601D0E00E9B192 /* libReact.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libReact.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 83CBBA4A1A601E3B00E9B192 /* RCTAssert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTAssert.h; sourceTree = ""; }; + 83CBBA4B1A601E3B00E9B192 /* RCTAssert.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTAssert.m; sourceTree = ""; }; + 83CBBA4C1A601E3B00E9B192 /* RCTInvalidating.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTInvalidating.h; sourceTree = ""; }; + 83CBBA4D1A601E3B00E9B192 /* RCTLog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTLog.h; sourceTree = ""; }; + 83CBBA4E1A601E3B00E9B192 /* RCTLog.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RCTLog.mm; sourceTree = ""; }; + 83CBBA4F1A601E3B00E9B192 /* RCTUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTUtils.h; sourceTree = ""; }; + 83CBBA501A601E3B00E9B192 /* RCTUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTUtils.m; sourceTree = ""; }; + 83CBBA5E1A601EAA00E9B192 /* RCTBridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTBridge.h; sourceTree = ""; }; + 83CBBA5F1A601EAA00E9B192 /* RCTBridge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTBridge.m; sourceTree = ""; }; + 83CBBA631A601ECA00E9B192 /* RCTJavaScriptExecutor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = RCTJavaScriptExecutor.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 83CBBA651A601EF300E9B192 /* RCTEventDispatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = RCTEventDispatcher.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 83CBBA661A601EF300E9B192 /* RCTEventDispatcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTEventDispatcher.m; sourceTree = ""; }; + 83CBBA961A6020BB00E9B192 /* RCTTouchHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTTouchHandler.h; sourceTree = ""; }; + 83CBBA971A6020BB00E9B192 /* RCTTouchHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTTouchHandler.m; sourceTree = ""; }; + 83CBBACA1A6023D300E9B192 /* RCTConvert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = RCTConvert.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + 83CBBACB1A6023D300E9B192 /* RCTConvert.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTConvert.m; sourceTree = ""; }; + 83F15A171B7CC46900F10295 /* UIView+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIView+Private.h"; sourceTree = ""; }; + 8507BBBC21EDACC200AEAFCA /* JSCExecutorFactory.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = JSCExecutorFactory.mm; sourceTree = ""; }; + 8507BBBD21EDACC200AEAFCA /* JSCExecutorFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCExecutorFactory.h; sourceTree = ""; }; + 91076A871F743AB00081B4FA /* RCTModalManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RCTModalManager.m; sourceTree = ""; }; + 91076A881F743AB00081B4FA /* RCTModalManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RCTModalManager.h; sourceTree = ""; }; + A2440AA01DF8D854006E7BFC /* RCTReloadCommand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTReloadCommand.h; sourceTree = ""; }; + A2440AA11DF8D854006E7BFC /* RCTReloadCommand.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTReloadCommand.m; sourceTree = ""; }; + AC70D2E81DE489E4002E6351 /* RCTJavaScriptLoader.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RCTJavaScriptLoader.mm; sourceTree = ""; }; + AC70D2EB1DE48A22002E6351 /* JSBundleType.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSBundleType.cpp; sourceTree = ""; }; + ACDD3FDA1BC7430D00E7DE33 /* RCTBorderStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTBorderStyle.h; sourceTree = ""; }; + B233E6E81D2D843200BC68BA /* RCTI18nManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = RCTI18nManager.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + B233E6E91D2D845D00BC68BA /* RCTI18nManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTI18nManager.m; sourceTree = ""; }; + B95154301D1B34B200FE7B80 /* RCTActivityIndicatorView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTActivityIndicatorView.h; sourceTree = ""; }; + B95154311D1B34B200FE7B80 /* RCTActivityIndicatorView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTActivityIndicatorView.m; sourceTree = ""; }; + C60128A91F3D1258009DF9FF /* RCTCxxConvert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTCxxConvert.h; sourceTree = ""; }; + C60128AA1F3D1258009DF9FF /* RCTCxxConvert.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTCxxConvert.m; sourceTree = ""; }; + C606692D1F3CC60500E67165 /* RCTModuleMethod.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RCTModuleMethod.mm; sourceTree = ""; }; + C60669351F3CCF1B00E67165 /* RCTManagedPointer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RCTManagedPointer.mm; sourceTree = ""; }; + C654505D1F3BD9280090799B /* RCTManagedPointer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTManagedPointer.h; sourceTree = ""; }; + C6D380181F71D75B00621378 /* RAMBundleRegistry.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RAMBundleRegistry.h; sourceTree = ""; }; + C6D380191F71D75B00621378 /* RAMBundleRegistry.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RAMBundleRegistry.cpp; sourceTree = ""; }; + CF2731BE1E7B8DE40044CA4F /* RCTDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTDeviceInfo.h; sourceTree = ""; }; + CF2731BF1E7B8DE40044CA4F /* RCTDeviceInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTDeviceInfo.m; sourceTree = ""; }; + E223624320875A8000108244 /* JSExecutor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSExecutor.cpp; sourceTree = ""; }; + E3BBC8EB1ADE6F47001BBD81 /* RCTTextDecorationLineType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RCTTextDecorationLineType.h; sourceTree = ""; }; + E9B20B791B500126007A2DA7 /* RCTAccessibilityManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTAccessibilityManager.h; sourceTree = ""; }; + E9B20B7A1B500126007A2DA7 /* RCTAccessibilityManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTAccessibilityManager.m; sourceTree = ""; }; + EBF21BBA1FC498270052F4D5 /* InspectorInterfaces.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorInterfaces.h; sourceTree = ""; }; + EBF21BBB1FC498270052F4D5 /* InspectorInterfaces.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorInterfaces.cpp; sourceTree = ""; }; + EBF21BDC1FC498900052F4D5 /* libjsinspector.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libjsinspector.a; sourceTree = BUILT_PRODUCTS_DIR; }; + EBF21BFA1FC4989A0052F4D5 /* libjsinspector-tvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libjsinspector-tvOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + ED296FB6214C9A0900B7C4FE /* libjsi-tvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libjsi-tvOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + ED296FEE214C9CF800B7C4FE /* libjsiexecutor-tvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libjsiexecutor-tvOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + ED6189672155BBF70000C9A7 /* JSIExecutor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JSIExecutor.h; path = jsireact/JSIExecutor.h; sourceTree = ""; }; + ED6189682155BBF70000C9A7 /* JSINativeModules.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JSINativeModules.h; path = jsireact/JSINativeModules.h; sourceTree = ""; }; + EDDA711B2164285A00B2D070 /* JSINativeModules.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JSINativeModules.cpp; path = jsireact/JSINativeModules.cpp; sourceTree = ""; }; + EDDA711C2164285A00B2D070 /* JSIExecutor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JSIExecutor.cpp; path = jsireact/JSIExecutor.cpp; sourceTree = ""; }; + EDEBC6D6214B3E7000DD5AC8 /* libjsi.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libjsi.a; sourceTree = BUILT_PRODUCTS_DIR; }; + EDEBC6D9214B3F6800DD5AC8 /* jsi-inl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "jsi-inl.h"; sourceTree = ""; }; + EDEBC6DA214B3F6800DD5AC8 /* JSIDynamic.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDynamic.cpp; sourceTree = ""; }; + EDEBC6DB214B3F6800DD5AC8 /* jsi.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = jsi.cpp; sourceTree = ""; }; + EDEBC6DC214B3F6800DD5AC8 /* JSIDynamic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDynamic.h; sourceTree = ""; }; + EDEBC6DD214B3F6800DD5AC8 /* JSCRuntime.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCRuntime.cpp; sourceTree = ""; }; + EDEBC6DE214B3F6800DD5AC8 /* JSCRuntime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCRuntime.h; sourceTree = ""; }; + EDEBC6DF214B3F6800DD5AC8 /* BUCK */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = BUCK; sourceTree = ""; }; + EDEBC6E0214B3F6800DD5AC8 /* instrumentation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instrumentation.h; sourceTree = ""; }; + EDEBC6E1214B3F6800DD5AC8 /* jsi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsi.h; sourceTree = ""; }; + EDEBC73B214B45A300DD5AC8 /* libjsiexecutor.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libjsiexecutor.a; sourceTree = BUILT_PRODUCTS_DIR; }; + EDEBC740214B463000DD5AC8 /* BUCK */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = BUCK; sourceTree = ""; }; + EDEBC750214B47E100DD5AC8 /* JSDeltaBundleClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSDeltaBundleClient.cpp; sourceTree = ""; }; + EDEBC751214B47E100DD5AC8 /* JSDeltaBundleClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSDeltaBundleClient.h; sourceTree = ""; }; + EDEBC752214B47E100DD5AC8 /* SharedProxyCxxModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SharedProxyCxxModule.h; sourceTree = ""; }; + EDEBC757214C284000DD5AC8 /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; + F1EFDA4E201F660F00EE6E4C /* RCTUIUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTUIUtils.m; sourceTree = ""; }; + F1EFDA4F201F660F00EE6E4C /* RCTUIUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTUIUtils.h; sourceTree = ""; }; + FEFAAC9C1FDB89B40057BBE0 /* RCTRedBoxExtraDataViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTRedBoxExtraDataViewController.m; sourceTree = ""; }; + FEFAAC9D1FDB89B40057BBE0 /* RCTRedBoxExtraDataViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTRedBoxExtraDataViewController.h; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 3D3C08881DE342EE00C268FA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + EDEBC7E0214C709200DD5AC8 /* libjsinspector.a in Frameworks */, + 3D3CD9411DE5FC5300167DC4 /* libcxxreact.a in Frameworks */, + EDEBC71A214B40A300DD5AC8 /* libjsi.a in Frameworks */, + EDEBC7DF214C705700DD5AC8 /* libjsiexecutor.a in Frameworks */, + 6D4C7F86224946B900CBB1EC /* libYogaDev.a in Frameworks */, + 3D383D6D1EBD2940005632C8 /* libdouble-conversion.a in Frameworks */, + 3D383D6F1EBD2940005632C8 /* libthird-party.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3D3C088B1DE342FE00C268FA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ED297067215023D800B7C4FE /* libjsiexecutor-tvOS.a in Frameworks */, + ED296FCB214C9B6C00B7C4FE /* libjsi-tvOS.a in Frameworks */, + 6D4C7FB02249479200CBB1EC /* libYogaDev.a in Frameworks */, + ED296F82214C973700B7C4FE /* libjsinspector-tvOS.a in Frameworks */, + 2D1D83CE1F74E2DA00615550 /* libdouble-conversion.a in Frameworks */, + 3D383D721EBD2949005632C8 /* libthird-party.a in Frameworks */, + 3D8ED92C1E5B120100D83D20 /* libcxxreact.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + ED296FCE214C9CB400B7C4FE /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + ED296FF5214C9E7C00B7C4FE /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EDEBC756214C283300DD5AC8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EDEBC79A214C2A7000DD5AC8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 1304439E1E3FEA8B00D93A67 /* CxxUtils */ = { + isa = PBXGroup; + children = ( + 1304439F1E3FEAA900D93A67 /* RCTFollyConvert.h */, + 130443A01E3FEAA900D93A67 /* RCTFollyConvert.mm */, + ); + name = CxxUtils; + sourceTree = ""; + }; + 13134C721E296B2A00B9F3CB /* CxxBridge */ = { + isa = PBXGroup; + children = ( + 134D63C21F1FEC4B008872B5 /* RCTCxxBridgeDelegate.h */, + 3D7454B31E54786200E74ADD /* NSDataBigString.h */, + 3D7AA9C31E548CD5001955CF /* NSDataBigString.mm */, + 13134C741E296B2A00B9F3CB /* RCTCxxBridge.mm */, + 13134C771E296B2A00B9F3CB /* RCTMessageThread.h */, + 13134C781E296B2A00B9F3CB /* RCTMessageThread.mm */, + 13134C7B1E296B2A00B9F3CB /* RCTObjcExecutor.h */, + 13134C7C1E296B2A00B9F3CB /* RCTObjcExecutor.mm */, + 8507BBBD21EDACC200AEAFCA /* JSCExecutorFactory.h */, + 8507BBBC21EDACC200AEAFCA /* JSCExecutorFactory.mm */, + ); + path = CxxBridge; + sourceTree = ""; + }; + 13134C7D1E296B2A00B9F3CB /* CxxModule */ = { + isa = PBXGroup; + children = ( + 1384E2061E806D4E00545659 /* RCTNativeModule.h */, + 1384E2071E806D4E00545659 /* RCTNativeModule.mm */, + 13134C7E1E296B2A00B9F3CB /* RCTCxxMethod.h */, + 13134C7F1E296B2A00B9F3CB /* RCTCxxMethod.mm */, + 13134C801E296B2A00B9F3CB /* RCTCxxModule.h */, + 13134C811E296B2A00B9F3CB /* RCTCxxModule.mm */, + 13134C821E296B2A00B9F3CB /* RCTCxxUtils.h */, + 13134C831E296B2A00B9F3CB /* RCTCxxUtils.mm */, + ); + path = CxxModule; + sourceTree = ""; + }; + 139D7E381E25C55B00323FB7 /* double-conversion */ = { + isa = PBXGroup; + children = ( + 139D7E391E25C5A300323FB7 /* bignum-dtoa.cc */, + 139D7E3A1E25C5A300323FB7 /* bignum-dtoa.h */, + 139D7E3B1E25C5A300323FB7 /* bignum.cc */, + 139D7E3C1E25C5A300323FB7 /* bignum.h */, + 139D7E3D1E25C5A300323FB7 /* cached-powers.cc */, + 139D7E3E1E25C5A300323FB7 /* cached-powers.h */, + 139D7E3F1E25C5A300323FB7 /* diy-fp.cc */, + 139D7E401E25C5A300323FB7 /* diy-fp.h */, + 139D7E411E25C5A300323FB7 /* double-conversion.cc */, + 139D7E421E25C5A300323FB7 /* double-conversion.h */, + 139D7E431E25C5A300323FB7 /* fast-dtoa.cc */, + 139D7E441E25C5A300323FB7 /* fast-dtoa.h */, + 139D7E451E25C5A300323FB7 /* fixed-dtoa.cc */, + 139D7E461E25C5A300323FB7 /* fixed-dtoa.h */, + 139D7E471E25C5A300323FB7 /* ieee.h */, + 139D7E481E25C5A300323FB7 /* strtod.cc */, + 139D7E491E25C5A300323FB7 /* strtod.h */, + 139D7E4A1E25C5A300323FB7 /* utils.h */, + ); + name = "double-conversion"; + path = "../js/react-native-github/third-party/double-conversion-1.1.6"; + sourceTree = ""; + }; + 139D7ED71E25DB9200323FB7 /* glog */ = { + isa = PBXGroup; + children = ( + 139D7F101E25DEC900323FB7 /* glog */, + 139D7ED81E25DBDC00323FB7 /* config.h */, + 139D7F081E25DE3700323FB7 /* demangle.cc */, + 139D7ED91E25DBDC00323FB7 /* demangle.h */, + 139D7EDA1E25DBDC00323FB7 /* logging.cc */, + 139D7EDB1E25DBDC00323FB7 /* raw_logging.cc */, + 139D7EDC1E25DBDC00323FB7 /* signalhandler.cc */, + 139D7EDD1E25DBDC00323FB7 /* stacktrace.h */, + 139D7EDE1E25DBDC00323FB7 /* symbolize.cc */, + 139D7EDF1E25DBDC00323FB7 /* symbolize.h */, + 139D7EE01E25DBDC00323FB7 /* utilities.cc */, + 139D7EE11E25DBDC00323FB7 /* utilities.h */, + 139D7EE21E25DBDC00323FB7 /* vlog_is_on.cc */, + ); + name = glog; + path = "../js/react-native-github/React"; + sourceTree = ""; + }; + 139D7F101E25DEC900323FB7 /* glog */ = { + isa = PBXGroup; + children = ( + 139D7F111E25DEC900323FB7 /* log_severity.h */, + 139D7F121E25DEC900323FB7 /* logging.h */, + 139D7F141E25DEC900323FB7 /* raw_logging.h */, + 139D7F161E25DEC900323FB7 /* stl_logging.h */, + 139D7F181E25DEC900323FB7 /* vlog_is_on.h */, + ); + name = glog; + path = "../third-party/glog-0.3.5/src/glog"; + sourceTree = ""; + }; + 139D849B1E2739EC00323FB7 /* folly */ = { + isa = PBXGroup; + children = ( + 6DCB224522493AF10041DDBC /* Demangle.cpp */, + 833D02B9217EBCFA00A23750 /* Assume.cpp */, + 139D849C1E273B5600323FB7 /* AtomicIntrusiveLinkedList.h */, + 8328138C217EB75C00574D55 /* ColdClass.cpp */, + 139D849F1E273B5600323FB7 /* Conv.cpp */, + 139D84A01E273B5600323FB7 /* Conv.h */, + 13F887521E2971C500C3C7A1 /* Demangle.h */, + 139D84A11E273B5600323FB7 /* dynamic-inl.h */, + 139D84A21E273B5600323FB7 /* dynamic.cpp */, + 139D84A31E273B5600323FB7 /* dynamic.h */, + 139D84A41E273B5600323FB7 /* Exception.h */, + 83281395217EB78F00574D55 /* F14Table.cpp */, + 833D02BC217EBD2600A23750 /* Format.cpp */, + 83281389217EB74C00574D55 /* json_pointer.cpp */, + 139D84A71E273B5600323FB7 /* json.cpp */, + 139D84A81E273B5600323FB7 /* json.h */, + 83281383217EB70800574D55 /* MallocImpl.cpp */, + 139D84A91E273B5600323FB7 /* Memory.h */, + 139D84AA1E273B5600323FB7 /* MoveWrapper.h */, + 139D84AB1E273B5600323FB7 /* Optional.h */, + 83281398217EB79D00574D55 /* ScopeGuard.cpp */, + 139D84AC1E273B5600323FB7 /* ScopeGuard.h */, + 83281392217EB77C00574D55 /* SpookyHashV2.cpp */, + 83281386217EB73400574D55 /* String.cpp */, + 13F887541E2971C500C3C7A1 /* Unicode.cpp */, + ); + name = folly; + path = "../js/react-native-github/third-party/folly-2018.10.22.00"; + sourceTree = ""; + }; + 13B07FE01A69315300A75B9A /* Modules */ = { + isa = PBXGroup; + children = ( + E9B20B791B500126007A2DA7 /* RCTAccessibilityManager.h */, + E9B20B7A1B500126007A2DA7 /* RCTAccessibilityManager.m */, + 13B07FE71A69327A00A75B9A /* RCTAlertManager.h */, + 13B07FE81A69327A00A75B9A /* RCTAlertManager.m */, + 1372B7081AB030C200659ED6 /* RCTAppState.h */, + 1372B7091AB030C200659ED6 /* RCTAppState.m */, + 58114A4F1AAE93D500E7D092 /* RCTAsyncLocalStorage.h */, + 58114A4E1AAE93D500E7D092 /* RCTAsyncLocalStorage.m */, + 13D033611C1837FE0021DC29 /* RCTClipboard.h */, + 13D033621C1837FE0021DC29 /* RCTClipboard.m */, + CF2731BE1E7B8DE40044CA4F /* RCTDeviceInfo.h */, + CF2731BF1E7B8DE40044CA4F /* RCTDeviceInfo.m */, + 130E3D861E6A082100ACE484 /* RCTDevSettings.h */, + 130E3D871E6A082100ACE484 /* RCTDevSettings.mm */, + 13D9FEE91CDCCECF00158BD7 /* RCTEventEmitter.h */, + 13D9FEEA1CDCCECF00158BD7 /* RCTEventEmitter.m */, + 13B07FE91A69327A00A75B9A /* RCTExceptionsManager.h */, + 13B07FEA1A69327A00A75B9A /* RCTExceptionsManager.m */, + B233E6E81D2D843200BC68BA /* RCTI18nManager.h */, + B233E6E91D2D845D00BC68BA /* RCTI18nManager.m */, + 352DCFEE1D19F4C20056D623 /* RCTI18nUtil.h */, + 352DCFEF1D19F4C20056D623 /* RCTI18nUtil.m */, + 13D9FEEC1CDCD93000158BD7 /* RCTKeyboardObserver.h */, + 13D9FEED1CDCD93000158BD7 /* RCTKeyboardObserver.m */, + 5960C1B11F0804A00066FD5B /* RCTLayoutAnimation.h */, + 5960C1B21F0804A00066FD5B /* RCTLayoutAnimation.m */, + 5960C1B31F0804A00066FD5B /* RCTLayoutAnimationGroup.h */, + 5960C1B41F0804A00066FD5B /* RCTLayoutAnimationGroup.m */, + 13F17A831B8493E5007D4C75 /* RCTRedBox.h */, + 13F17A841B8493E5007D4C75 /* RCTRedBox.m */, + FEFAAC9D1FDB89B40057BBE0 /* RCTRedBoxExtraDataViewController.h */, + FEFAAC9C1FDB89B40057BBE0 /* RCTRedBoxExtraDataViewController.m */, + 000E6CE91AB0E97F000CDF4D /* RCTSourceCode.h */, + 000E6CEA1AB0E980000CDF4D /* RCTSourceCode.m */, + 13723B4E1A82FD3C00F88898 /* RCTStatusBarManager.h */, + 13723B4F1A82FD3C00F88898 /* RCTStatusBarManager.m */, + 589515DF2231AD9C0036BDE0 /* RCTSurfacePresenterStub.h */, + 0EEEA8DE2239002200A8C82D /* RCTSurfacePresenterStub.m */, + 13B07FED1A69327A00A75B9A /* RCTTiming.h */, + 13B07FEE1A69327A00A75B9A /* RCTTiming.m */, + 3D0B842D1EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.h */, + 3D0B842E1EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.m */, + 13E067481A70F434002CDEE1 /* RCTUIManager.h */, + 13E067491A70F434002CDEE1 /* RCTUIManager.m */, + 59EB6DB91EBD6FC90072A5E7 /* RCTUIManagerObserverCoordinator.h */, + 59EB6DBA1EBD6FC90072A5E7 /* RCTUIManagerObserverCoordinator.mm */, + 59500D411F71C63700B122B7 /* RCTUIManagerUtils.h */, + 59500D421F71C63F00B122B7 /* RCTUIManagerUtils.m */, + ); + path = Modules; + sourceTree = ""; + }; + 13B07FF31A6947C200A75B9A /* Views */ = { + isa = PBXGroup; + children = ( + 50E98FE721460B0D00CD9289 /* RCTWKWebView.h */, + 50E98FE821460B0D00CD9289 /* RCTWKWebView.m */, + 50E98FE921460B0D00CD9289 /* RCTWKWebViewManager.h */, + 50E98FE621460B0D00CD9289 /* RCTWKWebViewManager.m */, + B95154301D1B34B200FE7B80 /* RCTActivityIndicatorView.h */, + B95154311D1B34B200FE7B80 /* RCTActivityIndicatorView.m */, + 13B080181A69489C00A75B9A /* RCTActivityIndicatorViewManager.h */, + 13B080191A69489C00A75B9A /* RCTActivityIndicatorViewManager.m */, + 13442BF21AA90E0B0037E5B0 /* RCTAnimationType.h */, + 13C325261AA63B6A0048765F /* RCTAutoInsetsProtocol.h */, + 13CC8A801B17642100940AE7 /* RCTBorderDrawing.h */, + 13CC8A811B17642100940AE7 /* RCTBorderDrawing.m */, + ACDD3FDA1BC7430D00E7DE33 /* RCTBorderStyle.h */, + 13C325281AA63B6A0048765F /* RCTComponent.h */, + 13AB90BF1B6FA36700713B4F /* RCTComponentData.h */, + 13AB90C01B6FA36700713B4F /* RCTComponentData.m */, + 13456E911ADAD2DE009F94A7 /* RCTConvert+CoreLocation.h */, + 13456E921ADAD2DE009F94A7 /* RCTConvert+CoreLocation.m */, + 130443C31E401A8C00D93A67 /* RCTConvert+Transform.h */, + 130443C41E401A8C00D93A67 /* RCTConvert+Transform.m */, + 133CAE8C1B8E5CFD00F6AD92 /* RCTDatePicker.h */, + 133CAE8D1B8E5CFD00F6AD92 /* RCTDatePicker.m */, + 58C571C01AA56C1900CDF9C8 /* RCTDatePickerManager.h */, + 58C571BF1AA56C1900CDF9C8 /* RCTDatePickerManager.m */, + 3D37B5801D522B190042D5B5 /* RCTFont.h */, + 3D37B5811D522B190042D5B5 /* RCTFont.mm */, + 591F78D9202ADB22004A668C /* RCTLayout.h */, + 591F78D8202ADB21004A668C /* RCTLayout.m */, + 66CD94AD1F1045E700CB3C7C /* RCTMaskedView.h */, + 66CD94AE1F1045E700CB3C7C /* RCTMaskedView.m */, + 66CD94AF1F1045E700CB3C7C /* RCTMaskedViewManager.h */, + 66CD94B01F1045E700CB3C7C /* RCTMaskedViewManager.m */, + 83A1FE8A1B62640A00BE0E65 /* RCTModalHostView.h */, + 83A1FE8B1B62640A00BE0E65 /* RCTModalHostView.m */, + 83392EB11B6634E10013B15F /* RCTModalHostViewController.h */, + 83392EB21B6634E10013B15F /* RCTModalHostViewController.m */, + 83A1FE8D1B62643A00BE0E65 /* RCTModalHostViewManager.h */, + 83A1FE8E1B62643A00BE0E65 /* RCTModalHostViewManager.m */, + 91076A881F743AB00081B4FA /* RCTModalManager.h */, + 91076A871F743AB00081B4FA /* RCTModalManager.m */, + 58114A121AAE854800E7D092 /* RCTPicker.h */, + 58114A131AAE854800E7D092 /* RCTPicker.m */, + 58114A141AAE854800E7D092 /* RCTPickerManager.h */, + 58114A151AAE854800E7D092 /* RCTPickerManager.m */, + 13442BF31AA90E0B0037E5B0 /* RCTPointerEvents.h */, + 13513F3A1B1F43F400FCE529 /* RCTProgressViewManager.h */, + 13513F3B1B1F43F400FCE529 /* RCTProgressViewManager.m */, + 191E3EBF1C29DC3800C180A6 /* RCTRefreshControl.h */, + 191E3EC01C29DC3800C180A6 /* RCTRefreshControl.m */, + 191E3EBC1C29D9AF00C180A6 /* RCTRefreshControlManager.h */, + 191E3EBD1C29D9AF00C180A6 /* RCTRefreshControlManager.m */, + 13BCE8071C99CB9D00DD7AAD /* RCTRootShadowView.h */, + 13BCE8081C99CB9D00DD7AAD /* RCTRootShadowView.m */, + 131B6AF01AF1093D00FFC3E0 /* RCTSegmentedControl.h */, + 131B6AF11AF1093D00FFC3E0 /* RCTSegmentedControl.m */, + 131B6AF21AF1093D00FFC3E0 /* RCTSegmentedControlManager.h */, + 131B6AF31AF1093D00FFC3E0 /* RCTSegmentedControlManager.m */, + 13E0674B1A70F44B002CDEE1 /* RCTShadowView.h */, + 5335D5401FE81A4700883D58 /* RCTShadowView.m */, + 597633351F4E021D005BE8A4 /* RCTShadowView+Internal.h */, + 597633341F4E021D005BE8A4 /* RCTShadowView+Internal.m */, + 590D7BFB1EBD458B00D8A370 /* RCTShadowView+Layout.h */, + 590D7BFC1EBD458B00D8A370 /* RCTShadowView+Layout.m */, + 13AF20431AE707F8005F5298 /* RCTSlider.h */, + 13AF20441AE707F9005F5298 /* RCTSlider.m */, + 14F484541AABFCE100FDF6B9 /* RCTSliderManager.h */, + 14F484551AABFCE100FDF6B9 /* RCTSliderManager.m */, + 14F362071AABD06A001CE568 /* RCTSwitch.h */, + 14F362081AABD06A001CE568 /* RCTSwitch.m */, + 14F362091AABD06A001CE568 /* RCTSwitchManager.h */, + 14F3620A1AABD06A001CE568 /* RCTSwitchManager.m */, + E3BBC8EB1ADE6F47001BBD81 /* RCTTextDecorationLineType.h */, + 130443D61E401AD800D93A67 /* RCTTVView.h */, + 130443D71E401AD800D93A67 /* RCTTVView.m */, + 13E0674F1A70F44B002CDEE1 /* RCTView.h */, + 13E067501A70F44B002CDEE1 /* RCTView.m */, + 13E0674D1A70F44B002CDEE1 /* RCTViewManager.h */, + 13E0674E1A70F44B002CDEE1 /* RCTViewManager.m */, + 13C156011AB1A2840079392D /* RCTWebView.h */, + 13C156021AB1A2840079392D /* RCTWebView.m */, + 13C156031AB1A2840079392D /* RCTWebViewManager.h */, + 13C156041AB1A2840079392D /* RCTWebViewManager.m */, + 13B080231A694A8400A75B9A /* RCTWrapperViewController.h */, + 13B080241A694A8400A75B9A /* RCTWrapperViewController.m */, + 59D031E41F8353D3008361F0 /* SafeAreaView */, + 59EDBC9B1FDF4E0C003573DE /* ScrollView */, + 83F15A171B7CC46900F10295 /* UIView+Private.h */, + 13E067531A70F44B002CDEE1 /* UIView+React.h */, + 13E067541A70F44B002CDEE1 /* UIView+React.m */, + ); + path = Views; + sourceTree = ""; + }; + 1450FF7F1BCFF28A00208362 /* Profiler */ = { + isa = PBXGroup; + children = ( + 14F7A0EE1BDA714B003C6C10 /* RCTFPSGraph.h */, + 14F7A0EF1BDA714B003C6C10 /* RCTFPSGraph.m */, + 14BF71811C04795500C97D0C /* RCTMacros.h */, + 14F7A0EB1BDA3B3C003C6C10 /* RCTPerfMonitor.m */, + 1450FF801BCFF28A00208362 /* RCTProfile.h */, + 1450FF811BCFF28A00208362 /* RCTProfile.m */, + 1450FF821BCFF28A00208362 /* RCTProfileTrampoline-arm.S */, + 1450FF831BCFF28A00208362 /* RCTProfileTrampoline-arm64.S */, + 14BF717F1C04793D00C97D0C /* RCTProfileTrampoline-i386.S */, + 1450FF851BCFF28A00208362 /* RCTProfileTrampoline-x86_64.S */, + ); + path = Profiler; + sourceTree = ""; + }; + 3D10A3C71DDF3CED004A0F9D /* ReactCommon */ = { + isa = PBXGroup; + children = ( + EDEBC73C214B463000DD5AC8 /* jsiexecutor */, + EDEBC6D8214B3F6800DD5AC8 /* jsi */, + AC70D2EA1DE489FC002E6351 /* cxxreact */, + EBF21BB91FC497DA0052F4D5 /* jsinspector */, + ); + name = ReactCommon; + path = "../js/react-native-github/ReactCommon"; + sourceTree = ""; + }; + 3D1FA0781DE4F2CD00E03CC6 /* Libraries */ = { + isa = PBXGroup; + children = ( + 3D1FA0821DE4F36600E03CC6 /* Image */, + 3D1FA0891DE4F4B900E03CC6 /* LinkingIOS */, + 3D1FA0791DE4F2D200E03CC6 /* Network */, + 3D1FA08A1DE4F4D600E03CC6 /* PushNotificationIOS */, + 3D7BFD2A1EA8E3D3008DFB7A /* WebSocket */, + ); + name = Libraries; + path = "../js/react-native-github/Libraries"; + sourceTree = ""; + }; + 3D1FA0791DE4F2D200E03CC6 /* Network */ = { + isa = PBXGroup; + children = ( + 3D1FA07A1DE4F2EA00E03CC6 /* RCTNetworking.h */, + 3D1FA07B1DE4F2EA00E03CC6 /* RCTNetworkTask.h */, + ); + path = Network; + sourceTree = ""; + }; + 3D1FA0821DE4F36600E03CC6 /* Image */ = { + isa = PBXGroup; + children = ( + 3D1FA0831DE4F3A000E03CC6 /* RCTImageLoader.h */, + 3D1FA0841DE4F3A000E03CC6 /* RCTImageStoreManager.h */, + 3D1FA0851DE4F3A000E03CC6 /* RCTResizeMode.h */, + ); + path = Image; + sourceTree = ""; + }; + 3D1FA0891DE4F4B900E03CC6 /* LinkingIOS */ = { + isa = PBXGroup; + children = ( + 3D1FA08B1DE4F4DD00E03CC6 /* RCTLinkingManager.h */, + ); + path = LinkingIOS; + sourceTree = ""; + }; + 3D1FA08A1DE4F4D600E03CC6 /* PushNotificationIOS */ = { + isa = PBXGroup; + children = ( + 3D1FA08D1DE4F4EE00E03CC6 /* RCTPushNotificationManager.h */, + ); + name = PushNotificationIOS; + sourceTree = ""; + }; + 3D7BFD0A1EA8E2D1008DFB7A /* DevSupport */ = { + isa = PBXGroup; + children = ( + 657734821EE834C900A0E9EA /* RCTInspectorDevServerHelper.h */, + 657734831EE834C900A0E9EA /* RCTInspectorDevServerHelper.mm */, + 13A0C2851B74F71200B29F6F /* RCTDevLoadingView.h */, + 13A0C2861B74F71200B29F6F /* RCTDevLoadingView.m */, + 13A0C2871B74F71200B29F6F /* RCTDevMenu.h */, + 13A0C2881B74F71200B29F6F /* RCTDevMenu.m */, + 3D7BFD0B1EA8E351008DFB7A /* RCTPackagerClient.h */, + 3D7BFD0C1EA8E351008DFB7A /* RCTPackagerClient.m */, + 3D7BFD0F1EA8E351008DFB7A /* RCTPackagerConnection.h */, + 3D7BFD101EA8E351008DFB7A /* RCTPackagerConnection.mm */, + ); + path = DevSupport; + sourceTree = ""; + }; + 3D7BFD2A1EA8E3D3008DFB7A /* WebSocket */ = { + isa = PBXGroup; + children = ( + 3D0E37891F1CC40000DCAC9F /* RCTWebSocketModule.h */, + 3D7BFD2B1EA8E3FA008DFB7A /* RCTReconnectingWebSocket.h */, + 3D7BFD2C1EA8E3FA008DFB7A /* RCTSRWebSocket.h */, + ); + name = WebSocket; + sourceTree = ""; + }; + 3D92B1151E036A690018521A /* ThirdParty */ = { + isa = PBXGroup; + children = ( + 139D849B1E2739EC00323FB7 /* folly */, + 139D7ED71E25DB9200323FB7 /* glog */, + 139D7E381E25C55B00323FB7 /* double-conversion */, + ); + name = ThirdParty; + sourceTree = ""; + }; + 53D123821FBF1D49001B8A10 /* Frameworks */ = { + isa = PBXGroup; + children = ( + EDEBC757214C284000DD5AC8 /* JavaScriptCore.framework */, + 53D123831FBF1D49001B8A10 /* libyoga.a */, + 6D4C7FAF2249479200CBB1EC /* libYogaDev.a */, + 6D4C7F85224946B900CBB1EC /* libYogaDev.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + 594F0A2E1FD23228007FBE96 /* SurfaceHostingView */ = { + isa = PBXGroup; + children = ( + 594F0A2F1FD23228007FBE96 /* RCTSurfaceHostingView.h */, + 594F0A301FD23228007FBE96 /* RCTSurfaceHostingView.mm */, + 594F0A311FD23228007FBE96 /* RCTSurfaceSizeMeasureMode.h */, + 5925356920084D0600DD584B /* RCTSurfaceSizeMeasureMode.mm */, + ); + path = SurfaceHostingView; + sourceTree = ""; + }; + 599FAA291FB274970058CCF6 /* Surface */ = { + isa = PBXGroup; + children = ( + 599FAA2A1FB274970058CCF6 /* RCTSurface.h */, + 599FAA2B1FB274970058CCF6 /* RCTSurface.mm */, + 599FAA2C1FB274970058CCF6 /* RCTSurfaceDelegate.h */, + 599FAA2D1FB274970058CCF6 /* RCTSurfaceRootShadowView.h */, + 599FAA2E1FB274970058CCF6 /* RCTSurfaceRootShadowView.m */, + 599FAA2F1FB274970058CCF6 /* RCTSurfaceRootShadowViewDelegate.h */, + 599FAA301FB274970058CCF6 /* RCTSurfaceRootView.h */, + 599FAA311FB274970058CCF6 /* RCTSurfaceRootView.mm */, + 599FAA321FB274970058CCF6 /* RCTSurfaceStage.h */, + 59283C9F1FD67320000EAAB9 /* RCTSurfaceStage.m */, + 599FAA341FB274970058CCF6 /* RCTSurfaceView.h */, + 599FAA351FB274970058CCF6 /* RCTSurfaceView.mm */, + 599FAA331FB274970058CCF6 /* RCTSurfaceView+Internal.h */, + 594F0A2E1FD23228007FBE96 /* SurfaceHostingView */, + ); + path = Surface; + sourceTree = ""; + }; + 59D031E41F8353D3008361F0 /* SafeAreaView */ = { + isa = PBXGroup; + children = ( + 59D031E51F8353D3008361F0 /* RCTSafeAreaShadowView.h */, + 59D031E61F8353D3008361F0 /* RCTSafeAreaShadowView.m */, + 59D031E71F8353D3008361F0 /* RCTSafeAreaView.h */, + 59D031E81F8353D3008361F0 /* RCTSafeAreaView.m */, + 59D031E91F8353D3008361F0 /* RCTSafeAreaViewLocalData.h */, + 59D031EA1F8353D3008361F0 /* RCTSafeAreaViewLocalData.m */, + 59D031EB1F8353D3008361F0 /* RCTSafeAreaViewManager.h */, + 59D031EC1F8353D3008361F0 /* RCTSafeAreaViewManager.m */, + ); + path = SafeAreaView; + sourceTree = ""; + }; + 59EDBC9B1FDF4E0C003573DE /* ScrollView */ = { + isa = PBXGroup; + children = ( + 59EDBC9C1FDF4E0C003573DE /* RCTScrollableProtocol.h */, + 59E6049C1FE9CCE100BD90C5 /* RCTScrollContentShadowView.h */, + 59E6049E1FE9CCE200BD90C5 /* RCTScrollContentShadowView.m */, + 59EDBC9F1FDF4E0C003573DE /* RCTScrollContentView.h */, + 59EDBCA01FDF4E0C003573DE /* RCTScrollContentView.m */, + 59E6049F1FE9CCE200BD90C5 /* RCTScrollContentViewManager.h */, + 59E6049D1FE9CCE200BD90C5 /* RCTScrollContentViewManager.m */, + 59EDBCA31FDF4E0C003573DE /* RCTScrollView.h */, + 59EDBCA41FDF4E0C003573DE /* RCTScrollView.m */, + 59EDBCA51FDF4E0C003573DE /* RCTScrollViewManager.h */, + 59EDBCA61FDF4E0C003573DE /* RCTScrollViewManager.m */, + ); + path = ScrollView; + sourceTree = ""; + }; + 657734881EE8352500A0E9EA /* Inspector */ = { + isa = PBXGroup; + children = ( + 6577348A1EE8354A00A0E9EA /* RCTInspector.h */, + 6577348B1EE8354A00A0E9EA /* RCTInspector.mm */, + 6577348C1EE8354A00A0E9EA /* RCTInspectorPackagerConnection.h */, + 6577348D1EE8354A00A0E9EA /* RCTInspectorPackagerConnection.m */, + ); + name = Inspector; + sourceTree = ""; + }; + 83CBB9F61A601CBA00E9B192 = { + isa = PBXGroup; + children = ( + 6DCB22442249333B0041DDBC /* third-party(Yoga).xcconfig */, + 83CBBA2F1A601D0F00E9B192 /* React */, + 3D10A3C71DDF3CED004A0F9D /* ReactCommon */, + 3D1FA0781DE4F2CD00E03CC6 /* Libraries */, + 3D92B1151E036A690018521A /* ThirdParty */, + 83CBBA001A601CBA00E9B192 /* Products */, + 53D123821FBF1D49001B8A10 /* Frameworks */, + ); + indentWidth = 2; + sourceTree = ""; + tabWidth = 2; + usesTabs = 0; + }; + 83CBBA001A601CBA00E9B192 /* Products */ = { + isa = PBXGroup; + children = ( + 83CBBA2E1A601D0E00E9B192 /* libReact.a */, + 2D2A28131D9B038B00D4039D /* libReact.a */, + 3D3CD9251DE5FBEC00167DC4 /* libcxxreact.a */, + 3D3CD9321DE5FBEE00167DC4 /* libcxxreact.a */, + 139D7E881E25C6D100323FB7 /* libdouble-conversion.a */, + 139D7ECE1E25DB7D00323FB7 /* libthird-party.a */, + 3D383D3C1EBD27B6005632C8 /* libthird-party.a */, + 3D383D621EBD27B9005632C8 /* libdouble-conversion.a */, + EBF21BDC1FC498900052F4D5 /* libjsinspector.a */, + EBF21BFA1FC4989A0052F4D5 /* libjsinspector-tvOS.a */, + EDEBC6D6214B3E7000DD5AC8 /* libjsi.a */, + EDEBC73B214B45A300DD5AC8 /* libjsiexecutor.a */, + ED296FB6214C9A0900B7C4FE /* libjsi-tvOS.a */, + ED296FEE214C9CF800B7C4FE /* libjsiexecutor-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 83CBBA2F1A601D0F00E9B192 /* React */ = { + isa = PBXGroup; + children = ( + 83CBBA491A601E3B00E9B192 /* Base */, + 13134C721E296B2A00B9F3CB /* CxxBridge */, + 13134C7D1E296B2A00B9F3CB /* CxxModule */, + 1304439E1E3FEA8B00D93A67 /* CxxUtils */, + 3D7BFD0A1EA8E2D1008DFB7A /* DevSupport */, + 657734881EE8352500A0E9EA /* Inspector */, + 13B07FE01A69315300A75B9A /* Modules */, + 1450FF7F1BCFF28A00208362 /* Profiler */, + F1EFDA4D201F660F00EE6E4C /* UIUtils */, + 13B07FF31A6947C200A75B9A /* Views */, + ); + name = React; + path = "../js/react-native-github/React"; + sourceTree = ""; + }; + 83CBBA491A601E3B00E9B192 /* Base */ = { + isa = PBXGroup; + children = ( + 83CBBA4A1A601E3B00E9B192 /* RCTAssert.h */, + 83CBBA4B1A601E3B00E9B192 /* RCTAssert.m */, + 83CBBA5E1A601EAA00E9B192 /* RCTBridge.h */, + 83CBBA5F1A601EAA00E9B192 /* RCTBridge.m */, + 14A43DB81C1F849600794BC8 /* RCTBridge+Private.h */, + 1482F9E61B55B927000ADFF3 /* RCTBridgeDelegate.h */, + 13AFBCA11C07287B00BBAEAA /* RCTBridgeMethod.h */, + 830213F31A654E0800B993E6 /* RCTBridgeModule.h */, + 68EFE4EC1CF6EB3000A1DE13 /* RCTBundleURLProvider.h */, + 68EFE4ED1CF6EB3900A1DE13 /* RCTBundleURLProvider.m */, + 83CBBACA1A6023D300E9B192 /* RCTConvert.h */, + 83CBBACB1A6023D300E9B192 /* RCTConvert.m */, + C60128A91F3D1258009DF9FF /* RCTCxxConvert.h */, + C60128AA1F3D1258009DF9FF /* RCTCxxConvert.m */, + 13AF1F851AE6E777005F5298 /* RCTDefines.h */, + 3D1E68D81CABD13900DD7465 /* RCTDisplayLink.h */, + 3D1E68D91CABD13900DD7465 /* RCTDisplayLink.m */, + 3EDCA8A21D3591E700450C31 /* RCTErrorCustomizer.h */, + 3EDCA8A31D3591E700450C31 /* RCTErrorInfo.h */, + 3EDCA8A41D3591E700450C31 /* RCTErrorInfo.m */, + 83CBBA651A601EF300E9B192 /* RCTEventDispatcher.h */, + 83CBBA661A601EF300E9B192 /* RCTEventDispatcher.m */, + 1436DD071ADE7AA000A5ED7D /* RCTFrameUpdate.h */, + 14C2CA751B3AC64F00E6CBB2 /* RCTFrameUpdate.m */, + 13BB3D001BECD54500932C10 /* RCTImageSource.h */, + 13BB3D011BECD54500932C10 /* RCTImageSource.m */, + 83CBBA4C1A601E3B00E9B192 /* RCTInvalidating.h */, + 83CBBA631A601ECA00E9B192 /* RCTJavaScriptExecutor.h */, + 14200DA81AC179B3008EE6BA /* RCTJavaScriptLoader.h */, + AC70D2E81DE489E4002E6351 /* RCTJavaScriptLoader.mm */, + 008341F51D1DB34400876D9A /* RCTJSStackFrame.h */, + 008341F41D1DB34400876D9A /* RCTJSStackFrame.m */, + 13A1F71C1A75392D00D3D453 /* RCTKeyCommands.h */, + 13A1F71D1A75392D00D3D453 /* RCTKeyCommands.m */, + 83CBBA4D1A601E3B00E9B192 /* RCTLog.h */, + 83CBBA4E1A601E3B00E9B192 /* RCTLog.mm */, + C654505D1F3BD9280090799B /* RCTManagedPointer.h */, + C60669351F3CCF1B00E67165 /* RCTManagedPointer.mm */, + 14C2CA721B3AC64300E6CBB2 /* RCTModuleData.h */, + 14C2CA731B3AC64300E6CBB2 /* RCTModuleData.mm */, + 14C2CA6F1B3AC63800E6CBB2 /* RCTModuleMethod.h */, + C606692D1F3CC60500E67165 /* RCTModuleMethod.mm */, + 006FC4121D9B20820057AAAD /* RCTMultipartDataTask.h */, + 006FC4131D9B20820057AAAD /* RCTMultipartDataTask.m */, + 001BFCCE1D8381DE008E587E /* RCTMultipartStreamReader.h */, + 001BFCCF1D8381DE008E587E /* RCTMultipartStreamReader.m */, + 13A6E20F1C19ABC700845B82 /* RCTNullability.h */, + 13A6E20C1C19AA0C00845B82 /* RCTParserUtils.h */, + 13A6E20D1C19AA0C00845B82 /* RCTParserUtils.m */, + 142014181B32094000CC17BA /* RCTPerformanceLogger.h */, + 142014171B32094000CC17BA /* RCTPerformanceLogger.m */, + 3D7749421DC1065C007EC8D8 /* RCTPlatform.h */, + 3D7749431DC1065C007EC8D8 /* RCTPlatform.m */, + A2440AA01DF8D854006E7BFC /* RCTReloadCommand.h */, + A2440AA11DF8D854006E7BFC /* RCTReloadCommand.m */, + 59A7B9FB1E577DBF0068EDBF /* RCTRootContentView.h */, + 59A7B9FC1E577DBF0068EDBF /* RCTRootContentView.m */, + 830A229C1A66C68A008503DA /* RCTRootView.h */, + 830A229D1A66C68A008503DA /* RCTRootView.m */, + 13AFBCA21C07287B00BBAEAA /* RCTRootViewDelegate.h */, + 6A15FB0C1BDF663500531DFB /* RCTRootViewInternal.h */, + 391E86A31C623EC800009732 /* RCTTouchEvent.h */, + 391E86A21C623EC800009732 /* RCTTouchEvent.m */, + 83CBBA961A6020BB00E9B192 /* RCTTouchHandler.h */, + 83CBBA971A6020BB00E9B192 /* RCTTouchHandler.m */, + 3D0B84281EC0B49400B2BD8E /* RCTTVRemoteHandler.h */, + 3D0B84291EC0B49400B2BD8E /* RCTTVRemoteHandler.m */, + 1345A83A1B265A0E00583190 /* RCTURLRequestDelegate.h */, + 1345A83B1B265A0E00583190 /* RCTURLRequestHandler.h */, + 83CBBA4F1A601E3B00E9B192 /* RCTUtils.h */, + 83CBBA501A601E3B00E9B192 /* RCTUtils.m */, + 199B8A6E1F44DB16005DEF67 /* RCTVersion.h */, + 39C50FFA2046EE3500CEE534 /* RCTVersion.m */, + 599FAA291FB274970058CCF6 /* Surface */, + ); + path = Base; + sourceTree = ""; + }; + AC70D2EA1DE489FC002E6351 /* cxxreact */ = { + isa = PBXGroup; + children = ( + EDEBC750214B47E100DD5AC8 /* JSDeltaBundleClient.cpp */, + EDEBC751214B47E100DD5AC8 /* JSDeltaBundleClient.h */, + EDEBC752214B47E100DD5AC8 /* SharedProxyCxxModule.h */, + 13DA8A302097A90B00276ED4 /* ReactMarker.cpp */, + 13DA8A2F2097A90A00276ED4 /* ReactMarker.h */, + E223624320875A8000108244 /* JSExecutor.cpp */, + 3D92B0A71E03699D0018521A /* CxxModule.h */, + 3D92B0A81E03699D0018521A /* CxxNativeModule.cpp */, + 3D92B0A91E03699D0018521A /* CxxNativeModule.h */, + 3D92B0AE1E03699D0018521A /* Instance.cpp */, + 3D92B0AF1E03699D0018521A /* Instance.h */, + 3D92B0B01E03699D0018521A /* JsArgumentHelpers-inl.h */, + 3D92B0B11E03699D0018521A /* JsArgumentHelpers.h */, + 27B958731E57587D0096647A /* JSBigString.cpp */, + 3D7454781E54757500E74ADD /* JSBigString.h */, + AC70D2EB1DE48A22002E6351 /* JSBundleType.cpp */, + 3D3CD8F51DE5FB2300167DC4 /* JSBundleType.h */, + 3D92B0AB1E03699D0018521A /* JSExecutor.h */, + 3D92B0C61E03699D0018521A /* JSIndexedRAMBundle.cpp */, + 3D92B0C71E03699D0018521A /* JSIndexedRAMBundle.h */, + 3D92B0C81E03699D0018521A /* JSModulesUnbundle.h */, + 3D92B0C91E03699D0018521A /* MessageQueueThread.h */, + 3D92B0CA1E03699D0018521A /* MethodCall.cpp */, + 3D92B0CB1E03699D0018521A /* MethodCall.h */, + 3D92B0CC1E03699D0018521A /* ModuleRegistry.cpp */, + 3D92B0CD1E03699D0018521A /* ModuleRegistry.h */, + 3D92B0CE1E03699D0018521A /* NativeModule.h */, + 3D92B0CF1E03699D0018521A /* NativeToJsBridge.cpp */, + 3D92B0D01E03699D0018521A /* NativeToJsBridge.h */, + C6D380191F71D75B00621378 /* RAMBundleRegistry.cpp */, + C6D380181F71D75B00621378 /* RAMBundleRegistry.h */, + 3D7454791E54757500E74ADD /* RecoverableError.h */, + 3D92B0D31E03699D0018521A /* SampleCxxModule.cpp */, + 3D92B0D41E03699D0018521A /* SampleCxxModule.h */, + 3D92B0D51E03699D0018521A /* SystraceSection.h */, + ); + path = cxxreact; + sourceTree = ""; + }; + EBF21BB91FC497DA0052F4D5 /* jsinspector */ = { + isa = PBXGroup; + children = ( + EBF21BBB1FC498270052F4D5 /* InspectorInterfaces.cpp */, + EBF21BBA1FC498270052F4D5 /* InspectorInterfaces.h */, + ); + path = jsinspector; + sourceTree = ""; + }; + ED6189662155BBDD0000C9A7 /* jsireact */ = { + isa = PBXGroup; + children = ( + EDDA711C2164285A00B2D070 /* JSIExecutor.cpp */, + EDDA711B2164285A00B2D070 /* JSINativeModules.cpp */, + ED6189672155BBF70000C9A7 /* JSIExecutor.h */, + ED6189682155BBF70000C9A7 /* JSINativeModules.h */, + ); + name = jsireact; + sourceTree = ""; + }; + EDEBC6D8214B3F6800DD5AC8 /* jsi */ = { + isa = PBXGroup; + children = ( + EDEBC6D9214B3F6800DD5AC8 /* jsi-inl.h */, + EDEBC6DA214B3F6800DD5AC8 /* JSIDynamic.cpp */, + EDEBC6DB214B3F6800DD5AC8 /* jsi.cpp */, + EDEBC6DC214B3F6800DD5AC8 /* JSIDynamic.h */, + EDEBC6DD214B3F6800DD5AC8 /* JSCRuntime.cpp */, + EDEBC6DE214B3F6800DD5AC8 /* JSCRuntime.h */, + EDEBC6DF214B3F6800DD5AC8 /* BUCK */, + EDEBC6E0214B3F6800DD5AC8 /* instrumentation.h */, + EDEBC6E1214B3F6800DD5AC8 /* jsi.h */, + 4F56C93722167A4800DB9F3F /* jsilib.h */, + ); + path = jsi; + sourceTree = ""; + }; + EDEBC73C214B463000DD5AC8 /* jsiexecutor */ = { + isa = PBXGroup; + children = ( + ED6189662155BBDD0000C9A7 /* jsireact */, + EDEBC740214B463000DD5AC8 /* BUCK */, + ); + path = jsiexecutor; + sourceTree = ""; + }; + F1EFDA4D201F660F00EE6E4C /* UIUtils */ = { + isa = PBXGroup; + children = ( + F1EFDA4F201F660F00EE6E4C /* RCTUIUtils.h */, + F1EFDA4E201F660F00EE6E4C /* RCTUIUtils.m */, + ); + path = UIUtils; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 139D7EA41E25C7BD00323FB7 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 139D7EA51E25C85300323FB7 /* bignum-dtoa.h in Headers */, + 139D7EA61E25C85300323FB7 /* bignum.h in Headers */, + 139D7EA71E25C85300323FB7 /* cached-powers.h in Headers */, + 139D7EA81E25C85300323FB7 /* diy-fp.h in Headers */, + 139D7EA91E25C85300323FB7 /* double-conversion.h in Headers */, + 139D7EAA1E25C85300323FB7 /* fast-dtoa.h in Headers */, + 139D7EAB1E25C85300323FB7 /* fixed-dtoa.h in Headers */, + 139D7EAC1E25C85300323FB7 /* ieee.h in Headers */, + 139D7EAD1E25C85300323FB7 /* strtod.h in Headers */, + 139D7EAE1E25C85300323FB7 /* utils.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3D302F231DF828D100D6DDAE /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 3DA982391E5B0F8A004F2374 /* UIView+Private.h in Headers */, + 13134C8D1E296B2A00B9F3CB /* RCTMessageThread.h in Headers */, + 130443DE1E401B0D00D93A67 /* RCTTVView.h in Headers */, + 3D7AA9C51E548CDB001955CF /* NSDataBigString.h in Headers */, + 5960C1BA1F0804A00066FD5B /* RCTLayoutAnimationGroup.h in Headers */, + 13134C991E296B2A00B9F3CB /* RCTCxxMethod.h in Headers */, + 3D302F471DF828F800D6DDAE /* RCTPlatform.h in Headers */, + 13134C951E296B2A00B9F3CB /* RCTObjcExecutor.h in Headers */, + 590D7BFE1EBD458B00D8A370 /* RCTShadowView+Layout.h in Headers */, + 13134C9D1E296B2A00B9F3CB /* RCTCxxModule.h in Headers */, + 66CD94B61F1045E700CB3C7C /* RCTMaskedViewManager.h in Headers */, + 130443A31E3FEAAE00D93A67 /* RCTFollyConvert.h in Headers */, + 3D7BFD1E1EA8E351008DFB7A /* RCTPackagerConnection.h in Headers */, + 3D302F241DF828F800D6DDAE /* RCTImageLoader.h in Headers */, + 3D302F251DF828F800D6DDAE /* RCTImageStoreManager.h in Headers */, + C60128AC1F3D1258009DF9FF /* RCTCxxConvert.h in Headers */, + 3D302F261DF828F800D6DDAE /* RCTResizeMode.h in Headers */, + 3D302F271DF828F800D6DDAE /* RCTLinkingManager.h in Headers */, + 3D7BFD161EA8E351008DFB7A /* RCTPackagerClient.h in Headers */, + 3D302F281DF828F800D6DDAE /* RCTNetworking.h in Headers */, + 3D302F291DF828F800D6DDAE /* RCTNetworkTask.h in Headers */, + 3D7BFD2E1EA8E3FA008DFB7A /* RCTReconnectingWebSocket.h in Headers */, + 3D302F2A1DF828F800D6DDAE /* RCTPushNotificationManager.h in Headers */, + 3D302F2B1DF828F800D6DDAE /* RCTAssert.h in Headers */, + 3D302F2C1DF828F800D6DDAE /* RCTBridge.h in Headers */, + 3D302F2D1DF828F800D6DDAE /* RCTBridge+Private.h in Headers */, + 3D302F2E1DF828F800D6DDAE /* RCTBridgeDelegate.h in Headers */, + 3D302F2F1DF828F800D6DDAE /* RCTBridgeMethod.h in Headers */, + 130E3D8A1E6A083600ACE484 /* RCTDevSettings.h in Headers */, + 8507BBC121EDACC200AEAFCA /* JSCExecutorFactory.h in Headers */, + 3D0E378E1F1CC59100DCAC9F /* RCTWebSocketModule.h in Headers */, + 3D302F301DF828F800D6DDAE /* RCTBridgeModule.h in Headers */, + 3D302F311DF828F800D6DDAE /* RCTBundleURLProvider.h in Headers */, + 3D302F321DF828F800D6DDAE /* RCTConvert.h in Headers */, + 3D302F331DF828F800D6DDAE /* RCTDefines.h in Headers */, + 3D0B842F1EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.h in Headers */, + 3D302F341DF828F800D6DDAE /* RCTDisplayLink.h in Headers */, + 3D302F351DF828F800D6DDAE /* RCTErrorCustomizer.h in Headers */, + 3D302F361DF828F800D6DDAE /* RCTErrorInfo.h in Headers */, + 3D302F371DF828F800D6DDAE /* RCTEventDispatcher.h in Headers */, + 594F0A371FD23228007FBE96 /* RCTSurfaceSizeMeasureMode.h in Headers */, + 3D302F381DF828F800D6DDAE /* RCTFrameUpdate.h in Headers */, + 3D302F391DF828F800D6DDAE /* RCTImageSource.h in Headers */, + 597633391F4E021D005BE8A4 /* RCTShadowView+Internal.h in Headers */, + 3D302F3A1DF828F800D6DDAE /* RCTInvalidating.h in Headers */, + 3D302F3B1DF828F800D6DDAE /* RCTJavaScriptExecutor.h in Headers */, + 59D031F61F8353D3008361F0 /* RCTSafeAreaViewLocalData.h in Headers */, + 3D302F3C1DF828F800D6DDAE /* RCTJavaScriptLoader.h in Headers */, + 3D302F3D1DF828F800D6DDAE /* RCTJSStackFrame.h in Headers */, + 599FAA491FB274980058CCF6 /* RCTSurfaceView+Internal.h in Headers */, + 59EDBCB61FDF4E0C003573DE /* RCTScrollView.h in Headers */, + 3D302F3E1DF828F800D6DDAE /* RCTKeyCommands.h in Headers */, + 599FAA411FB274980058CCF6 /* RCTSurfaceRootShadowViewDelegate.h in Headers */, + 3D302F3F1DF828F800D6DDAE /* RCTLog.h in Headers */, + 599FAA431FB274980058CCF6 /* RCTSurfaceRootView.h in Headers */, + 3D302F401DF828F800D6DDAE /* RCTModuleData.h in Headers */, + 5960C1B61F0804A00066FD5B /* RCTLayoutAnimation.h in Headers */, + 3D302F411DF828F800D6DDAE /* RCTModuleMethod.h in Headers */, + 3D302F421DF828F800D6DDAE /* RCTMultipartDataTask.h in Headers */, + 3D302F431DF828F800D6DDAE /* RCTMultipartStreamReader.h in Headers */, + 199B8A761F44DEDA005DEF67 /* RCTVersion.h in Headers */, + 3D302F441DF828F800D6DDAE /* RCTNullability.h in Headers */, + 3D302F451DF828F800D6DDAE /* RCTParserUtils.h in Headers */, + 3D302F461DF828F800D6DDAE /* RCTPerformanceLogger.h in Headers */, + 3D302F481DF828F800D6DDAE /* RCTRootView.h in Headers */, + 3D302F491DF828F800D6DDAE /* RCTRootViewDelegate.h in Headers */, + 3D302F4A1DF828F800D6DDAE /* RCTRootViewInternal.h in Headers */, + 3D302F4B1DF828F800D6DDAE /* RCTTouchEvent.h in Headers */, + 591F78DD202ADB22004A668C /* RCTLayout.h in Headers */, + 59D031F21F8353D3008361F0 /* RCTSafeAreaView.h in Headers */, + 3D302F4C1DF828F800D6DDAE /* RCTTouchHandler.h in Headers */, + 3D302F4D1DF828F800D6DDAE /* RCTURLRequestDelegate.h in Headers */, + 3D302F4E1DF828F800D6DDAE /* RCTURLRequestHandler.h in Headers */, + 59500D441F71C63F00B122B7 /* RCTUIManagerUtils.h in Headers */, + 3D302F4F1DF828F800D6DDAE /* RCTUtils.h in Headers */, + E7711C7A2238455400FCF26D /* RCTSurfacePresenterStub.h in Headers */, + 59D031FA1F8353D3008361F0 /* RCTSafeAreaViewManager.h in Headers */, + 3D302F551DF828F800D6DDAE /* RCTAccessibilityManager.h in Headers */, + 3D302F561DF828F800D6DDAE /* RCTAlertManager.h in Headers */, + 3D302F571DF828F800D6DDAE /* RCTAppState.h in Headers */, + 3D302F581DF828F800D6DDAE /* RCTAsyncLocalStorage.h in Headers */, + 59D031EE1F8353D3008361F0 /* RCTSafeAreaShadowView.h in Headers */, + 3D302F591DF828F800D6DDAE /* RCTClipboard.h in Headers */, + 3D302F5A1DF828F800D6DDAE /* RCTDevLoadingView.h in Headers */, + 59EDBCBA1FDF4E0C003573DE /* RCTScrollViewManager.h in Headers */, + 3D0B842A1EC0B49400B2BD8E /* RCTTVRemoteHandler.h in Headers */, + 3D302F5B1DF828F800D6DDAE /* RCTDevMenu.h in Headers */, + 657734921EE8356100A0E9EA /* RCTInspector.h in Headers */, + 3D302F5C1DF828F800D6DDAE /* RCTEventEmitter.h in Headers */, + 3D302F5D1DF828F800D6DDAE /* RCTExceptionsManager.h in Headers */, + 599FAA4B1FB274980058CCF6 /* RCTSurfaceView.h in Headers */, + 599FAA3D1FB274980058CCF6 /* RCTSurfaceRootShadowView.h in Headers */, + 3D302F5E1DF828F800D6DDAE /* RCTI18nManager.h in Headers */, + 3D302F5F1DF828F800D6DDAE /* RCTI18nUtil.h in Headers */, + 3D302F601DF828F800D6DDAE /* RCTKeyboardObserver.h in Headers */, + 3D302F611DF828F800D6DDAE /* RCTRedBox.h in Headers */, + 3D302F621DF828F800D6DDAE /* RCTSourceCode.h in Headers */, + 3D302F631DF828F800D6DDAE /* RCTStatusBarManager.h in Headers */, + 3DCE52F31FEAB10600613583 /* RCTRedBoxExtraDataViewController.h in Headers */, + 3D302F641DF828F800D6DDAE /* RCTTiming.h in Headers */, + 3D302F651DF828F800D6DDAE /* RCTUIManager.h in Headers */, + 599FAA3B1FB274980058CCF6 /* RCTSurfaceDelegate.h in Headers */, + 3D302F661DF828F800D6DDAE /* RCTFPSGraph.h in Headers */, + 3D302F681DF828F800D6DDAE /* RCTMacros.h in Headers */, + 3D302F691DF828F800D6DDAE /* RCTProfile.h in Headers */, + 3D302F6A1DF828F800D6DDAE /* RCTActivityIndicatorView.h in Headers */, + 3D302F6B1DF828F800D6DDAE /* RCTActivityIndicatorViewManager.h in Headers */, + 3D7BFD301EA8E3FA008DFB7A /* RCTSRWebSocket.h in Headers */, + 59EDBCA81FDF4E0C003573DE /* RCTScrollableProtocol.h in Headers */, + 3D302F6C1DF828F800D6DDAE /* RCTAnimationType.h in Headers */, + 598FD1951F817335006C54CB /* RCTModalManager.h in Headers */, + 657734871EE834E000A0E9EA /* RCTInspectorDevServerHelper.h in Headers */, + 3D302F6D1DF828F800D6DDAE /* RCTAutoInsetsProtocol.h in Headers */, + 3D302F6E1DF828F800D6DDAE /* RCTBorderDrawing.h in Headers */, + 3D302F6F1DF828F800D6DDAE /* RCTBorderStyle.h in Headers */, + 3D302F701DF828F800D6DDAE /* RCTComponent.h in Headers */, + 3D302F711DF828F800D6DDAE /* RCTComponentData.h in Headers */, + 3D302F721DF828F800D6DDAE /* RCTConvert+CoreLocation.h in Headers */, + 3D302F761DF828F800D6DDAE /* RCTFont.h in Headers */, + 3D302F7B1DF828F800D6DDAE /* RCTModalHostView.h in Headers */, + 1384E20A1E806D5700545659 /* RCTNativeModule.h in Headers */, + 3D302F7C1DF828F800D6DDAE /* RCTModalHostViewController.h in Headers */, + 3D302F7D1DF828F800D6DDAE /* RCTModalHostViewManager.h in Headers */, + 594F0A331FD23228007FBE96 /* RCTSurfaceHostingView.h in Headers */, + 130443DD1E401AF500D93A67 /* RCTConvert+Transform.h in Headers */, + 134D63C41F1FEC65008872B5 /* RCTCxxBridgeDelegate.h in Headers */, + 3D302F841DF828F800D6DDAE /* RCTPointerEvents.h in Headers */, + 59EB6DBC1EBD6FC90072A5E7 /* RCTUIManagerObserverCoordinator.h in Headers */, + 657734941EE8356100A0E9EA /* RCTInspectorPackagerConnection.h in Headers */, + 3D302F851DF828F800D6DDAE /* RCTProgressViewManager.h in Headers */, + 3D302F861DF828F800D6DDAE /* RCTRefreshControl.h in Headers */, + EBF21BBE1FC498630052F4D5 /* InspectorInterfaces.h in Headers */, + C654505F1F3BD9280090799B /* RCTManagedPointer.h in Headers */, + 3D302F871DF828F800D6DDAE /* RCTRefreshControlManager.h in Headers */, + A2440AA41DF8D865006E7BFC /* RCTReloadCommand.h in Headers */, + 3D302F881DF828F800D6DDAE /* RCTRootShadowView.h in Headers */, + CF2731C21E7B8DEF0044CA4F /* RCTDeviceInfo.h in Headers */, + 599FAA371FB274980058CCF6 /* RCTSurface.h in Headers */, + 3D302F8C1DF828F800D6DDAE /* RCTSegmentedControl.h in Headers */, + 66CD94B21F1045E700CB3C7C /* RCTMaskedView.h in Headers */, + 3D302F8D1DF828F800D6DDAE /* RCTSegmentedControlManager.h in Headers */, + 3D302F8E1DF828F800D6DDAE /* RCTShadowView.h in Headers */, + 59E604A11FE9CCE300BD90C5 /* RCTScrollContentShadowView.h in Headers */, + 3D302F8F1DF828F800D6DDAE /* RCTSlider.h in Headers */, + 3D302F901DF828F800D6DDAE /* RCTSliderManager.h in Headers */, + 3D302F911DF828F800D6DDAE /* RCTSwitch.h in Headers */, + 3D302F921DF828F800D6DDAE /* RCTSwitchManager.h in Headers */, + 59EDBCAE1FDF4E0C003573DE /* RCTScrollContentView.h in Headers */, + 59E604A71FE9CCE300BD90C5 /* RCTScrollContentViewManager.h in Headers */, + 3D302F971DF828F800D6DDAE /* RCTTextDecorationLineType.h in Headers */, + 3D302F981DF828F800D6DDAE /* RCTView.h in Headers */, + 3D302F9A1DF828F800D6DDAE /* RCTViewManager.h in Headers */, + 3D302F9D1DF828F800D6DDAE /* RCTWrapperViewController.h in Headers */, + 3D302F9F1DF828F800D6DDAE /* UIView+React.h in Headers */, + 599FAA471FB274980058CCF6 /* RCTSurfaceStage.h in Headers */, + 13134CA11E296B2A00B9F3CB /* RCTCxxUtils.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3D3030211DF8294400D6DDAE /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 13DA8A322097A90B00276ED4 /* ReactMarker.h in Headers */, + 3D74547E1E54759A00E74ADD /* JSModulesUnbundle.h in Headers */, + C6D3801B1F71D76200621378 /* RAMBundleRegistry.h in Headers */, + 27595AD51E575C7800CCE2B1 /* NativeToJsBridge.h in Headers */, + 27595AC41E575C7800CCE2B1 /* Instance.h in Headers */, + 27595AD11E575C7800CCE2B1 /* MessageQueueThread.h in Headers */, + 3D7454811E5475AF00E74ADD /* RecoverableError.h in Headers */, + 27595AC51E575C7800CCE2B1 /* JsArgumentHelpers-inl.h in Headers */, + 27595AD81E575C7800CCE2B1 /* SystraceSection.h in Headers */, + 27595AC61E575C7800CCE2B1 /* JsArgumentHelpers.h in Headers */, + 27595AD71E575C7800CCE2B1 /* SampleCxxModule.h in Headers */, + 27595AD21E575C7800CCE2B1 /* MethodCall.h in Headers */, + 3D3030221DF8294C00D6DDAE /* JSBundleType.h in Headers */, + 3D74547D1E54758900E74ADD /* JSBigString.h in Headers */, + 27595ABF1E575C7800CCE2B1 /* CxxModule.h in Headers */, + 27595AD41E575C7800CCE2B1 /* NativeModule.h in Headers */, + 27595AC01E575C7800CCE2B1 /* CxxNativeModule.h in Headers */, + 27595AD01E575C7800CCE2B1 /* JSIndexedRAMBundle.h in Headers */, + 27595AD31E575C7800CCE2B1 /* ModuleRegistry.h in Headers */, + 27595AC11E575C7800CCE2B1 /* JSExecutor.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3D383D541EBD27B9005632C8 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 3D383D551EBD27B9005632C8 /* bignum-dtoa.h in Headers */, + 3D383D561EBD27B9005632C8 /* bignum.h in Headers */, + 3D383D571EBD27B9005632C8 /* cached-powers.h in Headers */, + 3D383D581EBD27B9005632C8 /* diy-fp.h in Headers */, + 3D383D591EBD27B9005632C8 /* double-conversion.h in Headers */, + 3D383D5A1EBD27B9005632C8 /* fast-dtoa.h in Headers */, + 3D383D5B1EBD27B9005632C8 /* fixed-dtoa.h in Headers */, + 3D383D5C1EBD27B9005632C8 /* ieee.h in Headers */, + 3D383D5D1EBD27B9005632C8 /* strtod.h in Headers */, + 3D383D5E1EBD27B9005632C8 /* utils.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3D3CD91A1DE5FBEC00167DC4 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 13DA8A312097A90B00276ED4 /* ReactMarker.h in Headers */, + 3D74547F1E54759E00E74ADD /* JSModulesUnbundle.h in Headers */, + C6D3801A1F71D76100621378 /* RAMBundleRegistry.h in Headers */, + 27595ABA1E575C7800CCE2B1 /* NativeToJsBridge.h in Headers */, + 27595AA91E575C7800CCE2B1 /* Instance.h in Headers */, + 27595AB61E575C7800CCE2B1 /* MessageQueueThread.h in Headers */, + 3D7454801E5475AF00E74ADD /* RecoverableError.h in Headers */, + 27595AAA1E575C7800CCE2B1 /* JsArgumentHelpers-inl.h in Headers */, + 27595ABD1E575C7800CCE2B1 /* SystraceSection.h in Headers */, + 27595AAB1E575C7800CCE2B1 /* JsArgumentHelpers.h in Headers */, + 27595ABC1E575C7800CCE2B1 /* SampleCxxModule.h in Headers */, + 27595AB71E575C7800CCE2B1 /* MethodCall.h in Headers */, + 3D74547C1E54758900E74ADD /* JSBigString.h in Headers */, + 27595AA41E575C7800CCE2B1 /* CxxModule.h in Headers */, + 27595AB91E575C7800CCE2B1 /* NativeModule.h in Headers */, + 3D3CD9451DE5FC7100167DC4 /* JSBundleType.h in Headers */, + 27595AA51E575C7800CCE2B1 /* CxxNativeModule.h in Headers */, + 27595AB51E575C7800CCE2B1 /* JSIndexedRAMBundle.h in Headers */, + 27595AB81E575C7800CCE2B1 /* ModuleRegistry.h in Headers */, + 27595AA61E575C7800CCE2B1 /* JSExecutor.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3D80DA181DF820500028D040 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 3D80DA191DF820620028D040 /* RCTImageLoader.h in Headers */, + C654505E1F3BD9280090799B /* RCTManagedPointer.h in Headers */, + 13134C941E296B2A00B9F3CB /* RCTObjcExecutor.h in Headers */, + 199B8A6F1F44DB16005DEF67 /* RCTVersion.h in Headers */, + 3D80DA1A1DF820620028D040 /* RCTImageStoreManager.h in Headers */, + 130443A11E3FEAA900D93A67 /* RCTFollyConvert.h in Headers */, + 3D80DA1B1DF820620028D040 /* RCTResizeMode.h in Headers */, + 3D80DA1C1DF820620028D040 /* RCTLinkingManager.h in Headers */, + 3D80DA1D1DF820620028D040 /* RCTNetworking.h in Headers */, + 3D80DA1E1DF820620028D040 /* RCTNetworkTask.h in Headers */, + 657734841EE834C900A0E9EA /* RCTInspectorDevServerHelper.h in Headers */, + 3D80DA1F1DF820620028D040 /* RCTPushNotificationManager.h in Headers */, + 3D80DA201DF820620028D040 /* RCTAssert.h in Headers */, + 3D80DA211DF820620028D040 /* RCTBridge.h in Headers */, + 3D80DA221DF820620028D040 /* RCTBridge+Private.h in Headers */, + 599FAA461FB274980058CCF6 /* RCTSurfaceStage.h in Headers */, + 599FAA361FB274980058CCF6 /* RCTSurface.h in Headers */, + 3D80DA231DF820620028D040 /* RCTBridgeDelegate.h in Headers */, + 3D80DA241DF820620028D040 /* RCTBridgeMethod.h in Headers */, + 3D7BFD151EA8E351008DFB7A /* RCTPackagerClient.h in Headers */, + 3D80DA251DF820620028D040 /* RCTBridgeModule.h in Headers */, + 3D80DA261DF820620028D040 /* RCTBundleURLProvider.h in Headers */, + 599FAA401FB274980058CCF6 /* RCTSurfaceRootShadowViewDelegate.h in Headers */, + 5960C1B51F0804A00066FD5B /* RCTLayoutAnimation.h in Headers */, + 3D80DA271DF820620028D040 /* RCTConvert.h in Headers */, + 3D80DA281DF820620028D040 /* RCTDefines.h in Headers */, + 3D80DA291DF820620028D040 /* RCTDisplayLink.h in Headers */, + 597633381F4E021D005BE8A4 /* RCTShadowView+Internal.h in Headers */, + 3D80DA2A1DF820620028D040 /* RCTErrorCustomizer.h in Headers */, + 3D80DA2B1DF820620028D040 /* RCTErrorInfo.h in Headers */, + 1384E2081E806D4E00545659 /* RCTNativeModule.h in Headers */, + 50E98FED21460B0D00CD9289 /* RCTWKWebViewManager.h in Headers */, + 3D7BFD2D1EA8E3FA008DFB7A /* RCTReconnectingWebSocket.h in Headers */, + 3D80DA2C1DF820620028D040 /* RCTEventDispatcher.h in Headers */, + 3D80DA2D1DF820620028D040 /* RCTFrameUpdate.h in Headers */, + 3D80DA2E1DF820620028D040 /* RCTImageSource.h in Headers */, + 3D80DA2F1DF820620028D040 /* RCTInvalidating.h in Headers */, + 598FD1971F817336006C54CB /* RCTModalManager.h in Headers */, + 599FAA3A1FB274980058CCF6 /* RCTSurfaceDelegate.h in Headers */, + 3D80DA301DF820620028D040 /* RCTJavaScriptExecutor.h in Headers */, + 3DCE53281FEAB23100613583 /* RCTDatePicker.h in Headers */, + 50E98FEB21460B0D00CD9289 /* RCTWKWebView.h in Headers */, + 3D80DA311DF820620028D040 /* RCTJavaScriptLoader.h in Headers */, + 130E3D881E6A082100ACE484 /* RCTDevSettings.h in Headers */, + 3D80DA321DF820620028D040 /* RCTJSStackFrame.h in Headers */, + 130443DC1E401AF400D93A67 /* RCTConvert+Transform.h in Headers */, + 3D80DA331DF820620028D040 /* RCTKeyCommands.h in Headers */, + 3D80DA341DF820620028D040 /* RCTLog.h in Headers */, + 3D80DA351DF820620028D040 /* RCTModuleData.h in Headers */, + 3D80DA361DF820620028D040 /* RCTModuleMethod.h in Headers */, + 3D80DA371DF820620028D040 /* RCTMultipartDataTask.h in Headers */, + 3D80DA381DF820620028D040 /* RCTMultipartStreamReader.h in Headers */, + 594F0A361FD23228007FBE96 /* RCTSurfaceSizeMeasureMode.h in Headers */, + 3D80DA391DF820620028D040 /* RCTNullability.h in Headers */, + 3D80DA3A1DF820620028D040 /* RCTParserUtils.h in Headers */, + 599FAA421FB274980058CCF6 /* RCTSurfaceRootView.h in Headers */, + 59D031F91F8353D3008361F0 /* RCTSafeAreaViewManager.h in Headers */, + 3D80DA3B1DF820620028D040 /* RCTPerformanceLogger.h in Headers */, + 59D031F51F8353D3008361F0 /* RCTSafeAreaViewLocalData.h in Headers */, + 3D80DA3C1DF820620028D040 /* RCTPlatform.h in Headers */, + 3D80DA3D1DF820620028D040 /* RCTRootView.h in Headers */, + 59EDBCB91FDF4E0C003573DE /* RCTScrollViewManager.h in Headers */, + 59EDBCB51FDF4E0C003573DE /* RCTScrollView.h in Headers */, + 3D80DA3E1DF820620028D040 /* RCTRootViewDelegate.h in Headers */, + 3D80DA3F1DF820620028D040 /* RCTRootViewInternal.h in Headers */, + 3D80DA401DF820620028D040 /* RCTTouchEvent.h in Headers */, + 3D80DA411DF820620028D040 /* RCTTouchHandler.h in Headers */, + 59E604A61FE9CCE300BD90C5 /* RCTScrollContentViewManager.h in Headers */, + 13134C8C1E296B2A00B9F3CB /* RCTMessageThread.h in Headers */, + 59EB6DBB1EBD6FC90072A5E7 /* RCTUIManagerObserverCoordinator.h in Headers */, + 3D80DA421DF820620028D040 /* RCTURLRequestDelegate.h in Headers */, + 3D80DA431DF820620028D040 /* RCTURLRequestHandler.h in Headers */, + 3D80DA441DF820620028D040 /* RCTUtils.h in Headers */, + 13134C981E296B2A00B9F3CB /* RCTCxxMethod.h in Headers */, + 3D80DA4A1DF820620028D040 /* RCTAccessibilityManager.h in Headers */, + 3D80DA4B1DF820620028D040 /* RCTAlertManager.h in Headers */, + 3D80DA4C1DF820620028D040 /* RCTAppState.h in Headers */, + 3D80DA4D1DF820620028D040 /* RCTAsyncLocalStorage.h in Headers */, + 3D80DA4E1DF820620028D040 /* RCTClipboard.h in Headers */, + 3D80DA4F1DF820620028D040 /* RCTDevLoadingView.h in Headers */, + 3D80DA501DF820620028D040 /* RCTDevMenu.h in Headers */, + 3D80DA511DF820620028D040 /* RCTEventEmitter.h in Headers */, + 59A7B9FD1E577DBF0068EDBF /* RCTRootContentView.h in Headers */, + 3D80DA521DF820620028D040 /* RCTExceptionsManager.h in Headers */, + 3DCE532A1FEAB23100613583 /* RCTDatePickerManager.h in Headers */, + 3D80DA531DF820620028D040 /* RCTI18nManager.h in Headers */, + 3D7BFD2F1EA8E3FA008DFB7A /* RCTSRWebSocket.h in Headers */, + 3D80DA541DF820620028D040 /* RCTI18nUtil.h in Headers */, + 3D80DA551DF820620028D040 /* RCTKeyboardObserver.h in Headers */, + 3D80DA561DF820620028D040 /* RCTRedBox.h in Headers */, + 3D80DA571DF820620028D040 /* RCTSourceCode.h in Headers */, + EBF21BBC1FC498270052F4D5 /* InspectorInterfaces.h in Headers */, + 3D80DA581DF820620028D040 /* RCTStatusBarManager.h in Headers */, + 3D80DA591DF820620028D040 /* RCTTiming.h in Headers */, + 3D80DA5A1DF820620028D040 /* RCTUIManager.h in Headers */, + 3D80DA5B1DF820620028D040 /* RCTFPSGraph.h in Headers */, + FEFAAC9F1FDB89B50057BBE0 /* RCTRedBoxExtraDataViewController.h in Headers */, + 59E604A01FE9CCE300BD90C5 /* RCTScrollContentShadowView.h in Headers */, + 3D80DA5D1DF820620028D040 /* RCTMacros.h in Headers */, + 3D80DA5E1DF820620028D040 /* RCTProfile.h in Headers */, + 3D80DA5F1DF820620028D040 /* RCTActivityIndicatorView.h in Headers */, + 3D80DA601DF820620028D040 /* RCTActivityIndicatorViewManager.h in Headers */, + 59500D431F71C63F00B122B7 /* RCTUIManagerUtils.h in Headers */, + 5960C1B91F0804A00066FD5B /* RCTLayoutAnimationGroup.h in Headers */, + CF2731C01E7B8DE40044CA4F /* RCTDeviceInfo.h in Headers */, + 3D80DA611DF820620028D040 /* RCTAnimationType.h in Headers */, + 3D0E378A1F1CC40000DCAC9F /* RCTWebSocketModule.h in Headers */, + 3D80DA621DF820620028D040 /* RCTAutoInsetsProtocol.h in Headers */, + C60128AB1F3D1258009DF9FF /* RCTCxxConvert.h in Headers */, + 589515E02231AD9C0036BDE0 /* RCTSurfacePresenterStub.h in Headers */, + 59EDBCAD1FDF4E0C003573DE /* RCTScrollContentView.h in Headers */, + 59EDBCA71FDF4E0C003573DE /* RCTScrollableProtocol.h in Headers */, + 591F78DC202ADB22004A668C /* RCTLayout.h in Headers */, + 3D80DA631DF820620028D040 /* RCTBorderDrawing.h in Headers */, + 3D80DA641DF820620028D040 /* RCTBorderStyle.h in Headers */, + 3D80DA651DF820620028D040 /* RCTComponent.h in Headers */, + 3D80DA661DF820620028D040 /* RCTComponentData.h in Headers */, + 3DA9819E1E5B0DBB004F2374 /* NSDataBigString.h in Headers */, + 59D031F11F8353D3008361F0 /* RCTSafeAreaView.h in Headers */, + 3D80DA671DF820620028D040 /* RCTConvert+CoreLocation.h in Headers */, + 66CD94B11F1045E700CB3C7C /* RCTMaskedView.h in Headers */, + 3D80DA6B1DF820620028D040 /* RCTFont.h in Headers */, + 3D80DA701DF820620028D040 /* RCTModalHostView.h in Headers */, + 3D80DA711DF820620028D040 /* RCTModalHostViewController.h in Headers */, + 3D80DA721DF820620028D040 /* RCTModalHostViewManager.h in Headers */, + 13134C9C1E296B2A00B9F3CB /* RCTCxxModule.h in Headers */, + 594F0A321FD23228007FBE96 /* RCTSurfaceHostingView.h in Headers */, + 3D80DA771DF820620028D040 /* RCTPicker.h in Headers */, + 3D80DA781DF820620028D040 /* RCTPickerManager.h in Headers */, + 3D80DA791DF820620028D040 /* RCTPointerEvents.h in Headers */, + 3D80DA7A1DF820620028D040 /* RCTProgressViewManager.h in Headers */, + 3D80DA7B1DF820620028D040 /* RCTRefreshControl.h in Headers */, + A2440AA21DF8D854006E7BFC /* RCTReloadCommand.h in Headers */, + 3D80DA7C1DF820620028D040 /* RCTRefreshControlManager.h in Headers */, + 59D031ED1F8353D3008361F0 /* RCTSafeAreaShadowView.h in Headers */, + 3D80DA7D1DF820620028D040 /* RCTRootShadowView.h in Headers */, + 134D63C31F1FEC4B008872B5 /* RCTCxxBridgeDelegate.h in Headers */, + 657734901EE8354A00A0E9EA /* RCTInspectorPackagerConnection.h in Headers */, + 3D7BFD1D1EA8E351008DFB7A /* RCTPackagerConnection.h in Headers */, + 3D80DA811DF820620028D040 /* RCTSegmentedControl.h in Headers */, + 599FAA3C1FB274980058CCF6 /* RCTSurfaceRootShadowView.h in Headers */, + 3D80DA821DF820620028D040 /* RCTSegmentedControlManager.h in Headers */, + 3D80DA831DF820620028D040 /* RCTShadowView.h in Headers */, + 3D80DA841DF820620028D040 /* RCTSlider.h in Headers */, + 3D80DA851DF820620028D040 /* RCTSliderManager.h in Headers */, + 3D80DA861DF820620028D040 /* RCTSwitch.h in Headers */, + 3D80DA871DF820620028D040 /* RCTSwitchManager.h in Headers */, + 66CD94B51F1045E700CB3C7C /* RCTMaskedViewManager.h in Headers */, + 3D80DA8C1DF820620028D040 /* RCTTextDecorationLineType.h in Headers */, + 6577348E1EE8354A00A0E9EA /* RCTInspector.h in Headers */, + 3D80DA8D1DF820620028D040 /* RCTView.h in Headers */, + 8507BBC021EDACC200AEAFCA /* JSCExecutorFactory.h in Headers */, + 590D7BFD1EBD458B00D8A370 /* RCTShadowView+Layout.h in Headers */, + 3D80DA8F1DF820620028D040 /* RCTViewManager.h in Headers */, + 13134CA01E296B2A00B9F3CB /* RCTCxxUtils.h in Headers */, + 599FAA4A1FB274980058CCF6 /* RCTSurfaceView.h in Headers */, + 3D80DA901DF820620028D040 /* RCTWebView.h in Headers */, + 3D80DA911DF820620028D040 /* RCTWebViewManager.h in Headers */, + 3D80DA921DF820620028D040 /* RCTWrapperViewController.h in Headers */, + 3D80DA931DF820620028D040 /* UIView+Private.h in Headers */, + 3D80DA941DF820620028D040 /* UIView+React.h in Headers */, + 599FAA481FB274980058CCF6 /* RCTSurfaceView+Internal.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EBF21BC41FC498900052F4D5 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EBF21BE21FC4989A0052F4D5 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + ED296F99214C9A0900B7C4FE /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ED296FBC214C9B0400B7C4FE /* jsi-inl.h in Headers */, + ED296FBF214C9B0400B7C4FE /* JSIDynamic.h in Headers */, + ED296FC1214C9B0400B7C4FE /* JSCRuntime.h in Headers */, + ED296FC3214C9B0400B7C4FE /* instrumentation.h in Headers */, + ED296FC4214C9B0400B7C4FE /* jsi.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + ED296FD1214C9CF800B7C4FE /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ED61896C2155BBF70000C9A7 /* JSINativeModules.h in Headers */, + ED61896A2155BBF70000C9A7 /* JSIExecutor.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + ED2970382150123E00B7C4FE /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ED29703E2150126E00B7C4FE /* AtomicIntrusiveLinkedList.h in Headers */, + ED2970422150126E00B7C4FE /* Conv.h in Headers */, + ED2970432150126E00B7C4FE /* dynamic-inl.h in Headers */, + ED2970452150126E00B7C4FE /* dynamic.h in Headers */, + ED2970462150126E00B7C4FE /* Exception.h in Headers */, + ED2970482150126E00B7C4FE /* json.h in Headers */, + ED2970492150126E00B7C4FE /* Memory.h in Headers */, + ED29704A2150126E00B7C4FE /* MoveWrapper.h in Headers */, + ED29704B2150126E00B7C4FE /* Optional.h in Headers */, + ED29704C2150126E00B7C4FE /* ScopeGuard.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EDEBC6BB214B3E7000DD5AC8 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + EDEBC6E9214B3F6800DD5AC8 /* jsi.h in Headers */, + 4F56C93822167A4800DB9F3F /* jsilib.h in Headers */, + EDEBC6E7214B3F6800DD5AC8 /* JSCRuntime.h in Headers */, + EDEBC6E5214B3F6800DD5AC8 /* JSIDynamic.h in Headers */, + EDEBC6E2214B3F6800DD5AC8 /* jsi-inl.h in Headers */, + EDEBC6E8214B3F6800DD5AC8 /* instrumentation.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EDEBC729214B45A300DD5AC8 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ED61896B2155BBF70000C9A7 /* JSINativeModules.h in Headers */, + ED6189692155BBF70000C9A7 /* JSIExecutor.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 139D7E871E25C6D100323FB7 /* double-conversion */ = { + isa = PBXNativeTarget; + buildConfigurationList = 139D7E8E1E25C6D100323FB7 /* Build configuration list for PBXNativeTarget "double-conversion" */; + buildPhases = ( + 190EE32F1E6A43DE00A8543A /* Install Third Party */, + 139D7EA41E25C7BD00323FB7 /* Headers */, + 139D7E841E25C6D100323FB7 /* Sources */, + 139D7E861E25C6D100323FB7 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "double-conversion"; + productName = ThirdParty; + productReference = 139D7E881E25C6D100323FB7 /* libdouble-conversion.a */; + productType = "com.apple.product-type.library.static"; + }; + 139D7ECD1E25DB7D00323FB7 /* third-party */ = { + isa = PBXNativeTarget; + buildConfigurationList = 139D7ED41E25DB7D00323FB7 /* Build configuration list for PBXNativeTarget "third-party" */; + buildPhases = ( + 139D7ECA1E25DB7D00323FB7 /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + 1320081D1E283DCB00F0C457 /* PBXTargetDependency */, + ); + name = "third-party"; + productName = "third-party"; + productReference = 139D7ECE1E25DB7D00323FB7 /* libthird-party.a */; + productType = "com.apple.product-type.library.static"; + }; + 2D2A28121D9B038B00D4039D /* React-tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2D2A281B1D9B038B00D4039D /* Build configuration list for PBXNativeTarget "React-tvOS" */; + buildPhases = ( + 2D6948301DA3088700B3FA97 /* Start Packager */, + 3D302F231DF828D100D6DDAE /* Headers */, + 3D302E191DF8249100D6DDAE /* Copy Headers */, + 2D2A280F1D9B038B00D4039D /* Sources */, + 2D6948201DA3042200B3FA97 /* Include RCTJSCProfiler */, + 3D3C088B1DE342FE00C268FA /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ED2970662150237300B7C4FE /* PBXTargetDependency */, + ED296FCA214C9B6200B7C4FE /* PBXTargetDependency */, + ED296F81214C971800B7C4FE /* PBXTargetDependency */, + 3D0574571DE5FF9600184BB4 /* PBXTargetDependency */, + ); + name = "React-tvOS"; + productName = "React-tvOS"; + productReference = 2D2A28131D9B038B00D4039D /* libReact.a */; + productType = "com.apple.product-type.library.static"; + }; + 3D383D211EBD27B6005632C8 /* third-party-tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3D383D391EBD27B6005632C8 /* Build configuration list for PBXNativeTarget "third-party-tvOS" */; + buildPhases = ( + 3D383D241EBD27B6005632C8 /* Sources */, + ED2970382150123E00B7C4FE /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + 3D383D661EBD27DB005632C8 /* PBXTargetDependency */, + ); + name = "third-party-tvOS"; + productName = "third-party"; + productReference = 3D383D3C1EBD27B6005632C8 /* libthird-party.a */; + productType = "com.apple.product-type.library.static"; + }; + 3D383D3D1EBD27B9005632C8 /* double-conversion-tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3D383D5F1EBD27B9005632C8 /* Build configuration list for PBXNativeTarget "double-conversion-tvOS" */; + buildPhases = ( + 3D383D3E1EBD27B9005632C8 /* Install Third Party */, + 3D383D541EBD27B9005632C8 /* Headers */, + 3D383D3F1EBD27B9005632C8 /* Sources */, + 3D383D491EBD27B9005632C8 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "double-conversion-tvOS"; + productName = ThirdParty; + productReference = 3D383D621EBD27B9005632C8 /* libdouble-conversion.a */; + productType = "com.apple.product-type.library.static"; + }; + 3D3CD9191DE5FBEC00167DC4 /* cxxreact */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3D3CD9221DE5FBEC00167DC4 /* Build configuration list for PBXNativeTarget "cxxreact" */; + buildPhases = ( + 3D3CD91A1DE5FBEC00167DC4 /* Headers */, + 3D80DAB91DF821710028D040 /* Copy Headers */, + 3D3CD91F1DE5FBEC00167DC4 /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + EDEBC7D7214C52FD00DD5AC8 /* PBXTargetDependency */, + ); + name = cxxreact; + productName = React; + productReference = 3D3CD9251DE5FBEC00167DC4 /* libcxxreact.a */; + productType = "com.apple.product-type.library.static"; + }; + 3D3CD9261DE5FBEE00167DC4 /* cxxreact-tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3D3CD92F1DE5FBEE00167DC4 /* Build configuration list for PBXNativeTarget "cxxreact-tvOS" */; + buildPhases = ( + 3D3030211DF8294400D6DDAE /* Headers */, + 3D302F1B1DF8263300D6DDAE /* Copy Headers */, + 3D3CD92C1DE5FBEE00167DC4 /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + ED296F97214C996500B7C4FE /* PBXTargetDependency */, + ); + name = "cxxreact-tvOS"; + productName = "React-tvOS"; + productReference = 3D3CD9321DE5FBEE00167DC4 /* libcxxreact.a */; + productType = "com.apple.product-type.library.static"; + }; + 83CBBA2D1A601D0E00E9B192 /* React */ = { + isa = PBXNativeTarget; + buildConfigurationList = 83CBBA3F1A601D0F00E9B192 /* Build configuration list for PBXNativeTarget "React" */; + buildPhases = ( + 006B79A01A781F38006873D1 /* Start Packager */, + 3D80DA181DF820500028D040 /* Headers */, + 3D80D91E1DF6FA530028D040 /* Copy Headers */, + 83CBBA2A1A601D0E00E9B192 /* Sources */, + 142C4F7F1B582EA6001F0B58 /* Include RCTJSCProfiler */, + 3D3C08881DE342EE00C268FA /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + EDEBC74F214B477400DD5AC8 /* PBXTargetDependency */, + EDEBC7D9214C628300DD5AC8 /* PBXTargetDependency */, + EDEBC74B214B46A700DD5AC8 /* PBXTargetDependency */, + 3D3CD94C1DE5FCE700167DC4 /* PBXTargetDependency */, + ); + name = React; + productName = React; + productReference = 83CBBA2E1A601D0E00E9B192 /* libReact.a */; + productType = "com.apple.product-type.library.static"; + }; + EBF21BBF1FC498900052F4D5 /* jsinspector */ = { + isa = PBXNativeTarget; + buildConfigurationList = EBF21BD91FC498900052F4D5 /* Build configuration list for PBXNativeTarget "jsinspector" */; + buildPhases = ( + EBF21BC41FC498900052F4D5 /* Headers */, + EBF21BCB1FC498900052F4D5 /* Copy Headers */, + EBF21BD31FC498900052F4D5 /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = jsinspector; + productName = React; + productReference = EBF21BDC1FC498900052F4D5 /* libjsinspector.a */; + productType = "com.apple.product-type.library.static"; + }; + EBF21BDD1FC4989A0052F4D5 /* jsinspector-tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = EBF21BF71FC4989A0052F4D5 /* Build configuration list for PBXNativeTarget "jsinspector-tvOS" */; + buildPhases = ( + EBF21BE21FC4989A0052F4D5 /* Headers */, + EBF21BE91FC4989A0052F4D5 /* Copy Headers */, + EBF21BF11FC4989A0052F4D5 /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "jsinspector-tvOS"; + productName = "React-tvOS"; + productReference = EBF21BFA1FC4989A0052F4D5 /* libjsinspector-tvOS.a */; + productType = "com.apple.product-type.library.static"; + }; + ED296F98214C9A0900B7C4FE /* jsi-tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = ED296FB3214C9A0900B7C4FE /* Build configuration list for PBXNativeTarget "jsi-tvOS" */; + buildPhases = ( + ED296F99214C9A0900B7C4FE /* Headers */, + ED296FA4214C9A0900B7C4FE /* Copy Headers */, + ED296FA9214C9A0900B7C4FE /* Sources */, + ED296FCE214C9CB400B7C4FE /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ED29704E215012C700B7C4FE /* PBXTargetDependency */, + ); + name = "jsi-tvOS"; + productName = "React-tvOS"; + productReference = ED296FB6214C9A0900B7C4FE /* libjsi-tvOS.a */; + productType = "com.apple.product-type.library.static"; + }; + ED296FD0214C9CF800B7C4FE /* jsiexecutor-tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = ED296FEB214C9CF800B7C4FE /* Build configuration list for PBXNativeTarget "jsiexecutor-tvOS" */; + buildPhases = ( + ED296FD1214C9CF800B7C4FE /* Headers */, + ED296FDC214C9CF800B7C4FE /* Copy Headers */, + ED296FE1214C9CF800B7C4FE /* Sources */, + ED296FF5214C9E7C00B7C4FE /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ED296FFE214C9EC600B7C4FE /* PBXTargetDependency */, + ED296FFC214C9EC000B7C4FE /* PBXTargetDependency */, + ED296FF8214C9EAA00B7C4FE /* PBXTargetDependency */, + ); + name = "jsiexecutor-tvOS"; + productName = "React-tvOS"; + productReference = ED296FEE214C9CF800B7C4FE /* libjsiexecutor-tvOS.a */; + productType = "com.apple.product-type.library.static"; + }; + EDEBC6BA214B3E7000DD5AC8 /* jsi */ = { + isa = PBXNativeTarget; + buildConfigurationList = EDEBC6D3214B3E7000DD5AC8 /* Build configuration list for PBXNativeTarget "jsi" */; + buildPhases = ( + EDEBC6BB214B3E7000DD5AC8 /* Headers */, + EDEBC6C6214B3E7000DD5AC8 /* Copy Headers */, + EDEBC6CA214B3E7000DD5AC8 /* Sources */, + EDEBC756214C283300DD5AC8 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + EDEBC7CC214C516800DD5AC8 /* PBXTargetDependency */, + ); + name = jsi; + productName = React; + productReference = EDEBC6D6214B3E7000DD5AC8 /* libjsi.a */; + productType = "com.apple.product-type.library.static"; + }; + EDEBC724214B45A300DD5AC8 /* jsiexecutor */ = { + isa = PBXNativeTarget; + buildConfigurationList = EDEBC738214B45A300DD5AC8 /* Build configuration list for PBXNativeTarget "jsiexecutor" */; + buildPhases = ( + EDEBC729214B45A300DD5AC8 /* Headers */, + EDEBC72F214B45A300DD5AC8 /* Copy Headers */, + EDEBC734214B45A300DD5AC8 /* Sources */, + EDEBC79A214C2A7000DD5AC8 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ED296F7E214C957300B7C4FE /* PBXTargetDependency */, + EDEBC7D3214C528C00DD5AC8 /* PBXTargetDependency */, + EDEBC7CE214C523F00DD5AC8 /* PBXTargetDependency */, + ); + name = jsiexecutor; + productName = React; + productReference = EDEBC73B214B45A300DD5AC8 /* libjsiexecutor.a */; + productType = "com.apple.product-type.library.static"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 83CBB9F71A601CBA00E9B192 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0940; + ORGANIZATIONNAME = Facebook; + TargetAttributes = { + 139D7E871E25C6D100323FB7 = { + CreatedOnToolsVersion = 8.1; + }; + 139D7ECD1E25DB7D00323FB7 = { + CreatedOnToolsVersion = 8.1; + }; + 2D2A28121D9B038B00D4039D = { + CreatedOnToolsVersion = 8.0; + }; + 83CBBA2D1A601D0E00E9B192 = { + CreatedOnToolsVersion = 6.1.1; + }; + }; + }; + buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "ReactYoga" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 83CBB9F61A601CBA00E9B192; + productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 83CBBA2D1A601D0E00E9B192 /* React */, + 2D2A28121D9B038B00D4039D /* React-tvOS */, + 3D3CD9191DE5FBEC00167DC4 /* cxxreact */, + 3D3CD9261DE5FBEE00167DC4 /* cxxreact-tvOS */, + EBF21BBF1FC498900052F4D5 /* jsinspector */, + EBF21BDD1FC4989A0052F4D5 /* jsinspector-tvOS */, + 139D7ECD1E25DB7D00323FB7 /* third-party */, + 3D383D211EBD27B6005632C8 /* third-party-tvOS */, + 139D7E871E25C6D100323FB7 /* double-conversion */, + 3D383D3D1EBD27B9005632C8 /* double-conversion-tvOS */, + EDEBC6BA214B3E7000DD5AC8 /* jsi */, + EDEBC724214B45A300DD5AC8 /* jsiexecutor */, + ED296F98214C9A0900B7C4FE /* jsi-tvOS */, + ED296FD0214C9CF800B7C4FE /* jsiexecutor-tvOS */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXShellScriptBuildPhase section */ + 006B79A01A781F38006873D1 /* Start Packager */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Start Packager"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../js/react-native-github/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] && [ \"$CONFIGURATION\" == \"Debug\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open \"$SRCROOT/../js/react-native-github/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\n fi\nfi\n"; + showEnvVarsInLog = 0; + }; + 142C4F7F1B582EA6001F0B58 /* Include RCTJSCProfiler */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Include RCTJSCProfiler"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if [[ \"$CONFIGURATION\" == \"Debug\" ]] && [[ -d \"/tmp/RCTJSCProfiler\" ]]; then\n find \"${CONFIGURATION_BUILD_DIR}\" -name '*.app' | xargs -I{} sh -c 'cp -r /tmp/RCTJSCProfiler \"$1\"' -- {}\nfi\n"; + showEnvVarsInLog = 0; + }; + 190EE32F1E6A43DE00A8543A /* Install Third Party */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "../scripts/ios-install-third-party.sh", + ); + name = "Install Third Party"; + outputPaths = ( + "../third-party/glog-0.3.5/src/config.h", + "../third-party/glog-0.3.5/src/demangle.cc", + "../third-party/glog-0.3.5/src/demangle.h", + "../third-party/glog-0.3.5/src/logging.cc", + "../third-party/glog-0.3.5/src/raw_logging.cc", + "../third-party/glog-0.3.5/src/signalhandler.cc", + "../third-party/glog-0.3.5/src/stacktrace.h", + "../third-party/glog-0.3.5/src/symbolize.cc", + "../third-party/glog-0.3.5/src/symbolize.h", + "../third-party/glog-0.3.5/src/utilities.cc", + "../third-party/glog-0.3.5/src/utilities.h", + "../third-party/glog-0.3.5/src/vlog_is_on.cc", + "../third-party/glog-0.3.5/src/glog/log_severity.h", + "../third-party/glog-0.3.5/src/glog/logging.h", + "../third-party/glog-0.3.5/src/glog/raw_logging.h", + "../third-party/glog-0.3.5/src/glog/stl_logging.h", + "../third-party/glog-0.3.5/src/glog/vlog_is_on.h", + "../third-party/folly-2018.10.22.00/folly/memory/detail/MallocImpl.cpp", + "../third-party/folly-2018.10.22.00/folly/Demangle.cpp", + "../third-party/folly-2018.10.22.00/folly/Unicode.cpp", + "../third-party/folly-2018.10.22.00/folly/AtomicIntrusiveLinkedList.h", + "../third-party/folly-2018.10.22.00/folly/Conv.cpp", + "../third-party/folly-2018.10.22.00/folly/Conv.h", + "../third-party/folly-2018.10.22.00/folly/dynamic-inl.h", + "../third-party/folly-2018.10.22.00/folly/dynamic.cpp", + "../third-party/folly-2018.10.22.00/folly/dynamic.h", + "../third-party/folly-2018.10.22.00/folly/Exception.h", + "../third-party/folly-2018.10.22.00/folly/json.cpp", + "../third-party/folly-2018.10.22.00/folly/json.h", + "../third-party/folly-2018.10.22.00/folly/Memory.h", + "../third-party/folly-2018.10.22.00/folly/MoveWrapper.h", + "../third-party/folly-2018.10.22.00/folly/Optional.h", + "../third-party/folly-2018.10.22.00/folly/ScopeGuard.h", + "../third-party/folly-2018.10.22.00/folly/json_pointer.cpp", + "../third-party/folly-2018.10.22.00/folly/String.cpp", + "../third-party/folly-2018.10.22.00/folly/detail/Demangle.cpp", + "../third-party/folly-2018.10.22.00/folly/hash/SpookyHashV2.cpp", + "../third-party/folly-2018.10.22.00/folly/lang/ColdClass.cpp", + "../third-party/folly-2018.10.22.00/folly/container/detail/F14Table.cpp", + "../third-party/folly-2018.10.22.00/folly/ScopeGuard.cpp", + "../third-party/folly-2018.10.22.00/folly/lang/Assume.cpp", + "../third-party/folly-2018.10.22.00/folly/Format.cpp", + "../third-party/double-conversion-1.1.6/src/bignum-dtoa.cc", + "../third-party/double-conversion-1.1.6/src/bignum-dtoa.h", + "../third-party/double-conversion-1.1.6/src/bignum.cc", + "../third-party/double-conversion-1.1.6/src/bignum.h", + "../third-party/double-conversion-1.1.6/src/cached-powers.cc", + "../third-party/double-conversion-1.1.6/src/cached-powers.h", + "../third-party/double-conversion-1.1.6/src/diy-fp.cc", + "../third-party/double-conversion-1.1.6/src/diy-fp.h", + "../third-party/double-conversion-1.1.6/src/double-conversion.cc", + "../third-party/double-conversion-1.1.6/src/double-conversion.h", + "../third-party/double-conversion-1.1.6/src/fast-dtoa.cc", + "../third-party/double-conversion-1.1.6/src/fast-dtoa.h", + "../third-party/double-conversion-1.1.6/src/fixed-dtoa.cc", + "../third-party/double-conversion-1.1.6/src/fixed-dtoa.h", + "../third-party/double-conversion-1.1.6/src/ieee.h", + "../third-party/double-conversion-1.1.6/src/strtod.cc", + "../third-party/double-conversion-1.1.6/src/strtod.h", + "../third-party/double-conversion-1.1.6/src/utils.h", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "cd \"$SRCROOT/../js/react-native-github\"\nexec ./scripts/ios-install-third-party.sh\n"; + }; + 2D6948201DA3042200B3FA97 /* Include RCTJSCProfiler */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Include RCTJSCProfiler"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if [[ \"$CONFIGURATION\" == \"Debug\" ]] && [[ -d \"/tmp/RCTJSCProfiler\" ]]; then\nfind \"${CONFIGURATION_BUILD_DIR}\" -name '*.app' | xargs -I{} sh -c 'cp -r /tmp/RCTJSCProfiler \"$1\"' -- {}\nfi\n"; + showEnvVarsInLog = 0; + }; + 2D6948301DA3088700B3FA97 /* Start Packager */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Start Packager"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\nif nc -w 5 -z localhost 8081 ; then\nif ! curl -s \"http://localhost:8081/status\" | grep -q \"packager-status:running\" ; then\necho \"Port 8081 already in use, packager is either not running or not running correctly\"\nexit 2\nfi\nelse\nopen \"$SRCROOT/../js/react-native-github/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\nfi\nfi\n"; + showEnvVarsInLog = 0; + }; + 3D383D3E1EBD27B9005632C8 /* Install Third Party */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Install Third Party"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "cd \"$SRCROOT/../js/react-native-github\"\nexec ./scripts/ios-install-third-party.sh\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 139D7E841E25C6D100323FB7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 139D7E911E25C70B00323FB7 /* bignum-dtoa.cc in Sources */, + 139D7E931E25C70B00323FB7 /* bignum.cc in Sources */, + 139D7E951E25C70B00323FB7 /* cached-powers.cc in Sources */, + 139D7E971E25C70B00323FB7 /* diy-fp.cc in Sources */, + 139D7E991E25C70B00323FB7 /* double-conversion.cc in Sources */, + 139D7E9B1E25C70B00323FB7 /* fast-dtoa.cc in Sources */, + 139D7E9D1E25C70B00323FB7 /* fixed-dtoa.cc in Sources */, + 139D7EA01E25C70B00323FB7 /* strtod.cc in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 139D7ECA1E25DB7D00323FB7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 139D84B01E273B5600323FB7 /* Conv.cpp in Sources */, + 139D7F031E25DE1100323FB7 /* raw_logging.cc in Sources */, + 83281387217EB73400574D55 /* String.cpp in Sources */, + 139D7F041E25DE1100323FB7 /* signalhandler.cc in Sources */, + 833D02BD217EBD2600A23750 /* Format.cpp in Sources */, + 833D02BA217EBCFA00A23750 /* Assume.cpp in Sources */, + 139D84B11E273B5600323FB7 /* dynamic.cpp in Sources */, + 139D7F061E25DE1100323FB7 /* utilities.cc in Sources */, + 8328138D217EB75C00574D55 /* ColdClass.cpp in Sources */, + 139D7F051E25DE1100323FB7 /* symbolize.cc in Sources */, + 139D7F071E25DE1100323FB7 /* vlog_is_on.cc in Sources */, + 13F8875A1E2971D400C3C7A1 /* Unicode.cpp in Sources */, + 139D7F091E25DE3700323FB7 /* demangle.cc in Sources */, + 83281399217EB79D00574D55 /* ScopeGuard.cpp in Sources */, + 83281393217EB77D00574D55 /* SpookyHashV2.cpp in Sources */, + 13F887581E2971D400C3C7A1 /* Demangle.h in Sources */, + 139D7F021E25DE1100323FB7 /* logging.cc in Sources */, + 83281396217EB79000574D55 /* F14Table.cpp in Sources */, + 83281384217EB70900574D55 /* MallocImpl.cpp in Sources */, + 8328138A217EB74C00574D55 /* json_pointer.cpp in Sources */, + 139D84B31E273B5600323FB7 /* json.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D2A280F1D9B038B00D4039D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3DC159E41E83E1AE007B1282 /* RCTRootContentView.m in Sources */, + 3D80D91B1DF6F8200028D040 /* RCTPlatform.m in Sources */, + 2D0EB9F32021067800CAF88A /* RCTUIUtils.m in Sources */, + 2DD0EFE11DA84F2800B0C975 /* RCTStatusBarManager.m in Sources */, + 2D3B5EC91D9B095C00451313 /* RCTBorderDrawing.m in Sources */, + 66CD94B81F1045E700CB3C7C /* RCTMaskedViewManager.m in Sources */, + 2D3B5E991D9B089A00451313 /* RCTDisplayLink.m in Sources */, + 2D3B5EA11D9B08B600451313 /* RCTModuleData.mm in Sources */, + 3DCE52F41FEAB10D00613583 /* RCTRedBoxExtraDataViewController.m in Sources */, + 590D7C001EBD458B00D8A370 /* RCTShadowView+Layout.m in Sources */, + 2D3B5EAE1D9B08F800451313 /* RCTEventEmitter.m in Sources */, + 2D3B5ECA1D9B095F00451313 /* RCTComponentData.m in Sources */, + 2D3B5EA31D9B08BE00451313 /* RCTParserUtils.m in Sources */, + 59500D461F71C63F00B122B7 /* RCTUIManagerUtils.m in Sources */, + 599FAA4D1FB274980058CCF6 /* RCTSurfaceView.mm in Sources */, + 2D3B5EA01D9B08B200451313 /* RCTLog.mm in Sources */, + 5960C1BC1F0804A00066FD5B /* RCTLayoutAnimationGroup.m in Sources */, + 2D3B5ECF1D9B096F00451313 /* RCTFont.mm in Sources */, + 2D3B5ED51D9B098000451313 /* RCTModalHostViewController.m in Sources */, + 39C50FFC2046EE3500CEE534 /* RCTVersion.m in Sources */, + 2D3B5EBC1D9B092600451313 /* RCTKeyboardObserver.m in Sources */, + 657734931EE8356100A0E9EA /* RCTInspector.mm in Sources */, + 59EB6DBE1EBD6FC90072A5E7 /* RCTUIManagerObserverCoordinator.mm in Sources */, + 2D3B5E971D9B089000451313 /* RCTBridge.m in Sources */, + 2D3B5E9B1D9B08A000451313 /* RCTFrameUpdate.m in Sources */, + 2D3B5EE41D9B09BB00451313 /* RCTSegmentedControlManager.m in Sources */, + 59EDBCB81FDF4E0C003573DE /* RCTScrollView.m in Sources */, + 13134C9F1E296B2A00B9F3CB /* RCTCxxModule.mm in Sources */, + 2D3B5EE31D9B09B700451313 /* RCTSegmentedControl.m in Sources */, + 130443A41E3FEAC600D93A67 /* RCTFollyConvert.mm in Sources */, + 3D7BFD201EA8E351008DFB7A /* RCTPackagerConnection.mm in Sources */, + 59E604A51FE9CCE300BD90C5 /* RCTScrollContentShadowView.m in Sources */, + 5960C1B81F0804A00066FD5B /* RCTLayoutAnimation.m in Sources */, + 2D3B5EB71D9B091800451313 /* RCTRedBox.m in Sources */, + 3D7AA9C61E548CDD001955CF /* NSDataBigString.mm in Sources */, + 13134C8F1E296B2A00B9F3CB /* RCTMessageThread.mm in Sources */, + 0EEEA8E02239002200A8C82D /* RCTSurfacePresenterStub.m in Sources */, + 2D3B5EAF1D9B08FB00451313 /* RCTAccessibilityManager.m in Sources */, + 2D3B5EF11D9B09E700451313 /* UIView+React.m in Sources */, + 2D3B5E931D9B087300451313 /* RCTErrorInfo.m in Sources */, + C60669371F3CCF1B00E67165 /* RCTManagedPointer.mm in Sources */, + 2D3B5EE01D9B09AD00451313 /* RCTRootShadowView.m in Sources */, + 2D3B5EBA1D9B092100451313 /* RCTI18nUtil.m in Sources */, + 2D3B5EB41D9B090A00451313 /* RCTDevLoadingView.m in Sources */, + 3D0B842C1EC0B4EA00B2BD8E /* RCTTVView.m in Sources */, + 2D3B5EEF1D9B09DC00451313 /* RCTViewManager.m in Sources */, + 13134C971E296B2A00B9F3CB /* RCTObjcExecutor.mm in Sources */, + 594F0A351FD23228007FBE96 /* RCTSurfaceHostingView.mm in Sources */, + 130E3D8B1E6A083900ACE484 /* RCTDevSettings.mm in Sources */, + 2D3B5E951D9B087C00451313 /* RCTAssert.m in Sources */, + 59D031F81F8353D3008361F0 /* RCTSafeAreaViewLocalData.m in Sources */, + 2D3B5EB61D9B091400451313 /* RCTExceptionsManager.m in Sources */, + 2D3B5ED41D9B097D00451313 /* RCTModalHostView.m in Sources */, + 599FAA391FB274980058CCF6 /* RCTSurface.mm in Sources */, + C606692F1F3CC60500E67165 /* RCTModuleMethod.mm in Sources */, + 2D3B5E9F1D9B08AF00451313 /* RCTKeyCommands.m in Sources */, + 2D3B5EA51D9B08C700451313 /* RCTRootView.m in Sources */, + 13134C871E296B2A00B9F3CB /* RCTCxxBridge.mm in Sources */, + CF2731C31E7B8DF30044CA4F /* RCTDeviceInfo.m in Sources */, + 599FAA3F1FB274980058CCF6 /* RCTSurfaceRootShadowView.m in Sources */, + 597633371F4E021D005BE8A4 /* RCTShadowView+Internal.m in Sources */, + 2D3B5EB11D9B090100451313 /* RCTAppState.m in Sources */, + 59E604A31FE9CCE300BD90C5 /* RCTScrollContentViewManager.m in Sources */, + 1384E20B1E806D5B00545659 /* RCTNativeModule.mm in Sources */, + 2D3B5EC21D9B093B00451313 /* RCTProfile.m in Sources */, + 2D3B5ECB1D9B096200451313 /* RCTConvert+CoreLocation.m in Sources */, + 2D3B5EEE1D9B09DA00451313 /* RCTView.m in Sources */, + 2D3B5E981D9B089500451313 /* RCTConvert.m in Sources */, + 3D7BFD181EA8E351008DFB7A /* RCTPackagerClient.m in Sources */, + 2D3B5EA71D9B08CE00451313 /* RCTTouchHandler.m in Sources */, + 8507BBBF21EDACC200AEAFCA /* JSCExecutorFactory.mm in Sources */, + 59D031F01F8353D3008361F0 /* RCTSafeAreaShadowView.m in Sources */, + 5925356B20084D0600DD584B /* RCTSurfaceSizeMeasureMode.mm in Sources */, + 3D05745A1DE5FFF500184BB4 /* RCTJavaScriptLoader.mm in Sources */, + 2D3B5EA41D9B08C200451313 /* RCTPerformanceLogger.m in Sources */, + 3DCE53251FEAB1E000613583 /* RCTShadowView.m in Sources */, + 2D3B5E9E1D9B08AD00451313 /* RCTJSStackFrame.m in Sources */, + 13134CA31E296B2A00B9F3CB /* RCTCxxUtils.mm in Sources */, + 59D031F41F8353D3008361F0 /* RCTSafeAreaView.m in Sources */, + 2D3B5E941D9B087900451313 /* RCTBundleURLProvider.m in Sources */, + 2D3B5EB81D9B091B00451313 /* RCTSourceCode.m in Sources */, + 591F78DB202ADB22004A668C /* RCTLayout.m in Sources */, + 2D3B5EB51D9B091100451313 /* RCTDevMenu.m in Sources */, + 2D3B5EBD1D9B092A00451313 /* RCTTiming.m in Sources */, + 2D3B5EA81D9B08D300451313 /* RCTUtils.m in Sources */, + 599FAA451FB274980058CCF6 /* RCTSurfaceRootView.mm in Sources */, + 2D3B5EC81D9B095800451313 /* RCTActivityIndicatorViewManager.m in Sources */, + 598FD1961F817335006C54CB /* RCTModalManager.m in Sources */, + 3DCD185D1DF978E7007FE5A1 /* RCTReloadCommand.m in Sources */, + 130443DB1E401ADD00D93A67 /* RCTConvert+Transform.m in Sources */, + 3D0B84301EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.m in Sources */, + 2D3B5EC61D9B095000451313 /* RCTProfileTrampoline-x86_64.S in Sources */, + 2D3B5EA61D9B08CA00451313 /* RCTTouchEvent.m in Sources */, + 2D8C2E331DA40441000EE098 /* RCTMultipartStreamReader.m in Sources */, + 59EDBCBC1FDF4E0C003573DE /* RCTScrollViewManager.m in Sources */, + 59EDBCB01FDF4E0C003573DE /* RCTScrollContentView.m in Sources */, + 2D3B5EF01D9B09E300451313 /* RCTWrapperViewController.m in Sources */, + 2D3B5EB01D9B08FE00451313 /* RCTAlertManager.m in Sources */, + 13134C9B1E296B2A00B9F3CB /* RCTCxxMethod.mm in Sources */, + 2D3B5E9C1D9B08A300451313 /* RCTImageSource.m in Sources */, + 2D3B5EC31D9B094800451313 /* RCTProfileTrampoline-arm.S in Sources */, + 3D0B842B1EC0B49400B2BD8E /* RCTTVRemoteHandler.m in Sources */, + 657734861EE834D900A0E9EA /* RCTInspectorDevServerHelper.mm in Sources */, + 66CD94B41F1045E700CB3C7C /* RCTMaskedView.m in Sources */, + 2D74EAFA1DAE9590003B751B /* RCTMultipartDataTask.m in Sources */, + 2D3B5EC51D9B094D00451313 /* RCTProfileTrampoline-i386.S in Sources */, + 657734951EE8356100A0E9EA /* RCTInspectorPackagerConnection.m in Sources */, + 59283CA11FD67321000EAAB9 /* RCTSurfaceStage.m in Sources */, + 2D3B5EC41D9B094B00451313 /* RCTProfileTrampoline-arm64.S in Sources */, + 2D3B5EBB1D9B092300451313 /* RCTI18nManager.m in Sources */, + 2D3B5EBE1D9B092D00451313 /* RCTUIManager.m in Sources */, + C60128AE1F3D1258009DF9FF /* RCTCxxConvert.m in Sources */, + 2D3B5EDD1D9B09A300451313 /* RCTProgressViewManager.m in Sources */, + 2D3B5EC11D9B093900451313 /* RCTFPSGraph.m in Sources */, + 2D3B5E9A1D9B089D00451313 /* RCTEventDispatcher.m in Sources */, + 2D3B5ED61D9B098400451313 /* RCTModalHostViewManager.m in Sources */, + 2D3B5EC71D9B095600451313 /* RCTActivityIndicatorView.m in Sources */, + 2D3B5EB21D9B090300451313 /* RCTAsyncLocalStorage.m in Sources */, + 59D031FC1F8353D3008361F0 /* RCTSafeAreaViewManager.m in Sources */, + 2D3B5EC01D9B093600451313 /* RCTPerfMonitor.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3D383D241EBD27B6005632C8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3D383D251EBD27B6005632C8 /* Conv.cpp in Sources */, + 3D383D271EBD27B6005632C8 /* raw_logging.cc in Sources */, + 83281388217EB73400574D55 /* String.cpp in Sources */, + 3D383D281EBD27B6005632C8 /* signalhandler.cc in Sources */, + 833D02BE217EBD2600A23750 /* Format.cpp in Sources */, + 833D02BB217EBCFA00A23750 /* Assume.cpp in Sources */, + 3D383D291EBD27B6005632C8 /* dynamic.cpp in Sources */, + 3D383D2A1EBD27B6005632C8 /* utilities.cc in Sources */, + 8328138E217EB75C00574D55 /* ColdClass.cpp in Sources */, + 3D383D2D1EBD27B6005632C8 /* symbolize.cc in Sources */, + 3D383D2E1EBD27B6005632C8 /* vlog_is_on.cc in Sources */, + 3D383D2F1EBD27B6005632C8 /* Unicode.cpp in Sources */, + 3D383D301EBD27B6005632C8 /* demangle.cc in Sources */, + 8328139A217EB79D00574D55 /* ScopeGuard.cpp in Sources */, + 83281394217EB77D00574D55 /* SpookyHashV2.cpp in Sources */, + 3D383D311EBD27B6005632C8 /* Demangle.h in Sources */, + 3D383D331EBD27B6005632C8 /* logging.cc in Sources */, + 83281397217EB79000574D55 /* F14Table.cpp in Sources */, + 83281385217EB71200574D55 /* MallocImpl.cpp in Sources */, + 8328138B217EB74C00574D55 /* json_pointer.cpp in Sources */, + 3D383D341EBD27B6005632C8 /* json.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3D383D3F1EBD27B9005632C8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3D383D401EBD27B9005632C8 /* bignum-dtoa.cc in Sources */, + 3D383D411EBD27B9005632C8 /* bignum.cc in Sources */, + 3D383D421EBD27B9005632C8 /* cached-powers.cc in Sources */, + 3D383D431EBD27B9005632C8 /* diy-fp.cc in Sources */, + 3D383D441EBD27B9005632C8 /* double-conversion.cc in Sources */, + 3D383D451EBD27B9005632C8 /* fast-dtoa.cc in Sources */, + 3D383D461EBD27B9005632C8 /* fixed-dtoa.cc in Sources */, + 3D383D471EBD27B9005632C8 /* strtod.cc in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3D3CD91F1DE5FBEC00167DC4 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3DC159E51E83E1E9007B1282 /* JSBigString.cpp in Sources */, + 13F8877B1E29726200C3C7A1 /* JSIndexedRAMBundle.cpp in Sources */, + 13F8877D1E29726200C3C7A1 /* ModuleRegistry.cpp in Sources */, + C6D3801C1F71D76700621378 /* RAMBundleRegistry.cpp in Sources */, + 13F8876E1E29726200C3C7A1 /* CxxNativeModule.cpp in Sources */, + 13DA8A332097A90B00276ED4 /* ReactMarker.cpp in Sources */, + 13F887711E29726200C3C7A1 /* JSBundleType.cpp in Sources */, + 13F8877C1E29726200C3C7A1 /* MethodCall.cpp in Sources */, + 13F887701E29726200C3C7A1 /* Instance.cpp in Sources */, + 13F8877E1E29726200C3C7A1 /* NativeToJsBridge.cpp in Sources */, + 13F887801E29726200C3C7A1 /* SampleCxxModule.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3D3CD92C1DE5FBEE00167DC4 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BA0501AE2109DD0600A6BBC4 /* JSExecutor.cpp in Sources */, + 3DC159E61E83E1FA007B1282 /* JSBigString.cpp in Sources */, + 13F8878E1E29726300C3C7A1 /* JSIndexedRAMBundle.cpp in Sources */, + 13F887901E29726300C3C7A1 /* ModuleRegistry.cpp in Sources */, + C6D3801D1F71D76800621378 /* RAMBundleRegistry.cpp in Sources */, + 13DA8A342097A90B00276ED4 /* ReactMarker.cpp in Sources */, + 13F887841E29726300C3C7A1 /* Instance.cpp in Sources */, + 3D80D9181DF6F7A80028D040 /* JSBundleType.cpp in Sources */, + 13F8878F1E29726300C3C7A1 /* MethodCall.cpp in Sources */, + 13F887911E29726300C3C7A1 /* NativeToJsBridge.cpp in Sources */, + 13F887821E29726300C3C7A1 /* CxxNativeModule.cpp in Sources */, + 13F887931E29726300C3C7A1 /* SampleCxxModule.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 83CBBA2A1A601D0E00E9B192 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 13134C9A1E296B2A00B9F3CB /* RCTCxxMethod.mm in Sources */, + E223624420875A8000108244 /* JSExecutor.cpp in Sources */, + 59500D451F71C63F00B122B7 /* RCTUIManagerUtils.m in Sources */, + 597633361F4E021D005BE8A4 /* RCTShadowView+Internal.m in Sources */, + 13723B501A82FD3C00F88898 /* RCTStatusBarManager.m in Sources */, + 000E6CEB1AB0E980000CDF4D /* RCTSourceCode.m in Sources */, + 001BFCD01D8381DE008E587E /* RCTMultipartStreamReader.m in Sources */, + 14C2CA761B3AC64F00E6CBB2 /* RCTFrameUpdate.m in Sources */, + 594F0A341FD23228007FBE96 /* RCTSurfaceHostingView.mm in Sources */, + 13134C861E296B2A00B9F3CB /* RCTCxxBridge.mm in Sources */, + 13B07FEF1A69327A00A75B9A /* RCTAlertManager.m in Sources */, + 599FAA4C1FB274980058CCF6 /* RCTSurfaceView.mm in Sources */, + 352DCFF01D19F4C20056D623 /* RCTI18nUtil.m in Sources */, + 66CD94B71F1045E700CB3C7C /* RCTMaskedViewManager.m in Sources */, + 008341F61D1DB34400876D9A /* RCTJSStackFrame.m in Sources */, + 13134C961E296B2A00B9F3CB /* RCTObjcExecutor.mm in Sources */, + 59D031FB1F8353D3008361F0 /* RCTSafeAreaViewManager.m in Sources */, + 83CBBACC1A6023D300E9B192 /* RCTConvert.m in Sources */, + 131B6AF41AF1093D00FFC3E0 /* RCTSegmentedControl.m in Sources */, + 830A229E1A66C68A008503DA /* RCTRootView.m in Sources */, + 8507BBBE21EDACC200AEAFCA /* JSCExecutorFactory.mm in Sources */, + 13B07FF01A69327A00A75B9A /* RCTExceptionsManager.m in Sources */, + 13A0C28A1B74F71200B29F6F /* RCTDevMenu.m in Sources */, + 13BCE8091C99CB9D00DD7AAD /* RCTRootShadowView.m in Sources */, + 006FC4141D9B20820057AAAD /* RCTMultipartDataTask.m in Sources */, + 13CC8A821B17642100940AE7 /* RCTBorderDrawing.m in Sources */, + C60128AD1F3D1258009DF9FF /* RCTCxxConvert.m in Sources */, + 3DCE53291FEAB23100613583 /* RCTDatePicker.m in Sources */, + 0EEEA8DF2239002200A8C82D /* RCTSurfacePresenterStub.m in Sources */, + 50E98FEA21460B0D00CD9289 /* RCTWKWebViewManager.m in Sources */, + 83CBBA511A601E3B00E9B192 /* RCTAssert.m in Sources */, + 59EB6DBD1EBD6FC90072A5E7 /* RCTUIManagerObserverCoordinator.mm in Sources */, + 59E604A21FE9CCE300BD90C5 /* RCTScrollContentViewManager.m in Sources */, + 13AF20451AE707F9005F5298 /* RCTSlider.m in Sources */, + 130443A21E3FEAA900D93A67 /* RCTFollyConvert.mm in Sources */, + 58114A501AAE93D500E7D092 /* RCTAsyncLocalStorage.m in Sources */, + 657734851EE834C900A0E9EA /* RCTInspectorDevServerHelper.mm in Sources */, + 130E3D891E6A082100ACE484 /* RCTDevSettings.mm in Sources */, + 59283CA01FD67321000EAAB9 /* RCTSurfaceStage.m in Sources */, + 13513F3C1B1F43F400FCE529 /* RCTProgressViewManager.m in Sources */, + 14F7A0F01BDA714B003C6C10 /* RCTFPSGraph.m in Sources */, + 3D7BFD171EA8E351008DFB7A /* RCTPackagerClient.m in Sources */, + 14F3620D1AABD06A001CE568 /* RCTSwitch.m in Sources */, + 13134C8E1E296B2A00B9F3CB /* RCTMessageThread.mm in Sources */, + 599FAA381FB274980058CCF6 /* RCTSurface.mm in Sources */, + 59D031EF1F8353D3008361F0 /* RCTSafeAreaShadowView.m in Sources */, + 3D1E68DB1CABD13900DD7465 /* RCTDisplayLink.m in Sources */, + 14F3620E1AABD06A001CE568 /* RCTSwitchManager.m in Sources */, + 13B080201A69489C00A75B9A /* RCTActivityIndicatorViewManager.m in Sources */, + 13E067561A70F44B002CDEE1 /* RCTViewManager.m in Sources */, + 6DCB224622493AF10041DDBC /* Demangle.cpp in Sources */, + 13BB3D021BECD54500932C10 /* RCTImageSource.m in Sources */, + 13134CA21E296B2A00B9F3CB /* RCTCxxUtils.mm in Sources */, + C606692E1F3CC60500E67165 /* RCTModuleMethod.mm in Sources */, + 1450FF8A1BCFF28A00208362 /* RCTProfileTrampoline-x86_64.S in Sources */, + 13D9FEEB1CDCCECF00158BD7 /* RCTEventEmitter.m in Sources */, + 599FAA3E1FB274980058CCF6 /* RCTSurfaceRootShadowView.m in Sources */, + AC70D2E91DE489E4002E6351 /* RCTJavaScriptLoader.mm in Sources */, + 39C50FFB2046EE3500CEE534 /* RCTVersion.m in Sources */, + 14F7A0EC1BDA3B3C003C6C10 /* RCTPerfMonitor.m in Sources */, + 5960C1B71F0804A00066FD5B /* RCTLayoutAnimation.m in Sources */, + 13134C9E1E296B2A00B9F3CB /* RCTCxxModule.mm in Sources */, + 59E604A41FE9CCE300BD90C5 /* RCTScrollContentShadowView.m in Sources */, + 1450FF881BCFF28A00208362 /* RCTProfileTrampoline-arm64.S in Sources */, + 13E41EEB1C05CA0B00CD8DAC /* RCTProfileTrampoline-i386.S in Sources */, + 3D37B5821D522B190042D5B5 /* RCTFont.mm in Sources */, + 59EDBCB71FDF4E0C003573DE /* RCTScrollView.m in Sources */, + 59EDBCBB1FDF4E0C003573DE /* RCTScrollViewManager.m in Sources */, + 599FAA441FB274980058CCF6 /* RCTSurfaceRootView.mm in Sources */, + C60669361F3CCF1B00E67165 /* RCTManagedPointer.mm in Sources */, + 13B080261A694A8400A75B9A /* RCTWrapperViewController.m in Sources */, + A2440AA31DF8D854006E7BFC /* RCTReloadCommand.m in Sources */, + 6577348F1EE8354A00A0E9EA /* RCTInspector.mm in Sources */, + E9B20B7B1B500126007A2DA7 /* RCTAccessibilityManager.m in Sources */, + 13A0C2891B74F71200B29F6F /* RCTDevLoadingView.m in Sources */, + 13B07FF21A69327A00A75B9A /* RCTTiming.m in Sources */, + 1372B70A1AB030C200659ED6 /* RCTAppState.m in Sources */, + 59A7B9FE1E577DBF0068EDBF /* RCTRootContentView.m in Sources */, + 13E067591A70F44B002CDEE1 /* UIView+React.m in Sources */, + 591F78DA202ADB22004A668C /* RCTLayout.m in Sources */, + FEFAAC9E1FDB89B50057BBE0 /* RCTRedBoxExtraDataViewController.m in Sources */, + 14F484561AABFCE100FDF6B9 /* RCTSliderManager.m in Sources */, + CF2731C11E7B8DE40044CA4F /* RCTDeviceInfo.m in Sources */, + 3D7AA9C41E548CD5001955CF /* NSDataBigString.mm in Sources */, + 13D033631C1837FE0021DC29 /* RCTClipboard.m in Sources */, + 14C2CA741B3AC64300E6CBB2 /* RCTModuleData.mm in Sources */, + 142014191B32094000CC17BA /* RCTPerformanceLogger.m in Sources */, + 83CBBA981A6020BB00E9B192 /* RCTTouchHandler.m in Sources */, + 3EDCA8A51D3591E700450C31 /* RCTErrorInfo.m in Sources */, + 83CBBA521A601E3B00E9B192 /* RCTLog.mm in Sources */, + 13A6E20E1C19AA0C00845B82 /* RCTParserUtils.m in Sources */, + 59D031F71F8353D3008361F0 /* RCTSafeAreaViewLocalData.m in Sources */, + 13E067571A70F44B002CDEE1 /* RCTView.m in Sources */, + 3D7749441DC1065C007EC8D8 /* RCTPlatform.m in Sources */, + 59EDBCAF1FDF4E0C003573DE /* RCTScrollContentView.m in Sources */, + 13D9FEEE1CDCD93000158BD7 /* RCTKeyboardObserver.m in Sources */, + B233E6EA1D2D845D00BC68BA /* RCTI18nManager.m in Sources */, + 3D7BFD1F1EA8E351008DFB7A /* RCTPackagerConnection.mm in Sources */, + 13456E931ADAD2DE009F94A7 /* RCTConvert+CoreLocation.m in Sources */, + 13A1F71E1A75392D00D3D453 /* RCTKeyCommands.m in Sources */, + 83CBBA531A601E3B00E9B192 /* RCTUtils.m in Sources */, + 130443C61E401A8C00D93A67 /* RCTConvert+Transform.m in Sources */, + 191E3EC11C29DC3800C180A6 /* RCTRefreshControl.m in Sources */, + 3DCE532B1FEAB23100613583 /* RCTDatePickerManager.m in Sources */, + 13C156051AB1A2840079392D /* RCTWebView.m in Sources */, + 83CBBA601A601EAA00E9B192 /* RCTBridge.m in Sources */, + 50E98FEC21460B0D00CD9289 /* RCTWKWebView.m in Sources */, + 590D7BFF1EBD458B00D8A370 /* RCTShadowView+Layout.m in Sources */, + 5335D5411FE81A4700883D58 /* RCTShadowView.m in Sources */, + 66CD94B31F1045E700CB3C7C /* RCTMaskedView.m in Sources */, + 13C156061AB1A2840079392D /* RCTWebViewManager.m in Sources */, + 58114A161AAE854800E7D092 /* RCTPicker.m in Sources */, + 83A1FE8C1B62640A00BE0E65 /* RCTModalHostView.m in Sources */, + 5925356A20084D0600DD584B /* RCTSurfaceSizeMeasureMode.mm in Sources */, + 1450FF871BCFF28A00208362 /* RCTProfileTrampoline-arm.S in Sources */, + 131B6AF51AF1093D00FFC3E0 /* RCTSegmentedControlManager.m in Sources */, + 58114A171AAE854800E7D092 /* RCTPickerManager.m in Sources */, + 191E3EBE1C29D9AF00C180A6 /* RCTRefreshControlManager.m in Sources */, + 657734911EE8354A00A0E9EA /* RCTInspectorPackagerConnection.m in Sources */, + 68EFE4EE1CF6EB3900A1DE13 /* RCTBundleURLProvider.m in Sources */, + B95154321D1B34B200FE7B80 /* RCTActivityIndicatorView.m in Sources */, + 5960C1BB1F0804A00066FD5B /* RCTLayoutAnimationGroup.m in Sources */, + 13F17A851B8493E5007D4C75 /* RCTRedBox.m in Sources */, + 59D031F31F8353D3008361F0 /* RCTSafeAreaView.m in Sources */, + 83392EB31B6634E10013B15F /* RCTModalHostViewController.m in Sources */, + 83CBBA691A601EF300E9B192 /* RCTEventDispatcher.m in Sources */, + 83A1FE8F1B62643A00BE0E65 /* RCTModalHostViewManager.m in Sources */, + 13E0674A1A70F434002CDEE1 /* RCTUIManager.m in Sources */, + 1384E2091E806D4E00545659 /* RCTNativeModule.mm in Sources */, + 391E86A41C623EC800009732 /* RCTTouchEvent.m in Sources */, + 1450FF861BCFF28A00208362 /* RCTProfile.m in Sources */, + 13AB90C11B6FA36700713B4F /* RCTComponentData.m in Sources */, + 916F9C2D1F743F57002E5920 /* RCTModalManager.m in Sources */, + F1EFDA50201F661000EE6E4C /* RCTUIUtils.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EBF21BD31FC498900052F4D5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EBF21BFC1FC4990B0052F4D5 /* InspectorInterfaces.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EBF21BF11FC4989A0052F4D5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EBF21BFF1FC4998E0052F4D5 /* InspectorInterfaces.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + ED296FA9214C9A0900B7C4FE /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ED296FB9214C9AC200B7C4FE /* JSCRuntime.cpp in Sources */, + ED296FB7214C9A9A00B7C4FE /* JSIDynamic.cpp in Sources */, + ED296FB8214C9A9A00B7C4FE /* jsi.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + ED296FE1214C9CF800B7C4FE /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EDDA711E2164285A00B2D070 /* JSINativeModules.cpp in Sources */, + EDDA71202164285A00B2D070 /* JSIExecutor.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EDEBC6CA214B3E7000DD5AC8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EDEBC6E6214B3F6800DD5AC8 /* JSCRuntime.cpp in Sources */, + EDEBC6E4214B3F6800DD5AC8 /* jsi.cpp in Sources */, + EDEBC6E3214B3F6800DD5AC8 /* JSIDynamic.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EDEBC734214B45A300DD5AC8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EDDA711D2164285A00B2D070 /* JSINativeModules.cpp in Sources */, + EDDA711F2164285A00B2D070 /* JSIExecutor.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 1320081D1E283DCB00F0C457 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 139D7E871E25C6D100323FB7 /* double-conversion */; + targetProxy = 1320081C1E283DCB00F0C457 /* PBXContainerItemProxy */; + }; + 3D0574571DE5FF9600184BB4 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 3D3CD9261DE5FBEE00167DC4 /* cxxreact-tvOS */; + targetProxy = 3D0574561DE5FF9600184BB4 /* PBXContainerItemProxy */; + }; + 3D383D661EBD27DB005632C8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 3D383D3D1EBD27B9005632C8 /* double-conversion-tvOS */; + targetProxy = 3D383D651EBD27DB005632C8 /* PBXContainerItemProxy */; + }; + 3D3CD94C1DE5FCE700167DC4 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 3D3CD9191DE5FBEC00167DC4 /* cxxreact */; + targetProxy = 3D3CD94B1DE5FCE700167DC4 /* PBXContainerItemProxy */; + }; + ED296F7E214C957300B7C4FE /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = EDEBC6BA214B3E7000DD5AC8 /* jsi */; + targetProxy = ED296F7D214C957300B7C4FE /* PBXContainerItemProxy */; + }; + ED296F81214C971800B7C4FE /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = EBF21BDD1FC4989A0052F4D5 /* jsinspector-tvOS */; + targetProxy = ED296F80214C971800B7C4FE /* PBXContainerItemProxy */; + }; + ED296F97214C996500B7C4FE /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 3D383D3D1EBD27B9005632C8 /* double-conversion-tvOS */; + targetProxy = ED296F96214C996500B7C4FE /* PBXContainerItemProxy */; + }; + ED296FCA214C9B6200B7C4FE /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = ED296F98214C9A0900B7C4FE /* jsi-tvOS */; + targetProxy = ED296FC9214C9B6200B7C4FE /* PBXContainerItemProxy */; + }; + ED296FF8214C9EAA00B7C4FE /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 3D383D211EBD27B6005632C8 /* third-party-tvOS */; + targetProxy = ED296FF7214C9EAA00B7C4FE /* PBXContainerItemProxy */; + }; + ED296FFC214C9EC000B7C4FE /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 3D3CD9261DE5FBEE00167DC4 /* cxxreact-tvOS */; + targetProxy = ED296FFB214C9EC000B7C4FE /* PBXContainerItemProxy */; + }; + ED296FFE214C9EC600B7C4FE /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = ED296F98214C9A0900B7C4FE /* jsi-tvOS */; + targetProxy = ED296FFD214C9EC600B7C4FE /* PBXContainerItemProxy */; + }; + ED29704E215012C700B7C4FE /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 3D383D3D1EBD27B9005632C8 /* double-conversion-tvOS */; + targetProxy = ED29704D215012C700B7C4FE /* PBXContainerItemProxy */; + }; + ED2970662150237300B7C4FE /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = ED296FD0214C9CF800B7C4FE /* jsiexecutor-tvOS */; + targetProxy = ED2970652150237300B7C4FE /* PBXContainerItemProxy */; + }; + EDEBC74B214B46A700DD5AC8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = EDEBC724214B45A300DD5AC8 /* jsiexecutor */; + targetProxy = EDEBC74A214B46A700DD5AC8 /* PBXContainerItemProxy */; + }; + EDEBC74F214B477400DD5AC8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = EDEBC6BA214B3E7000DD5AC8 /* jsi */; + targetProxy = EDEBC74E214B477400DD5AC8 /* PBXContainerItemProxy */; + }; + EDEBC7CC214C516800DD5AC8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 139D7E871E25C6D100323FB7 /* double-conversion */; + targetProxy = EDEBC7CB214C516800DD5AC8 /* PBXContainerItemProxy */; + }; + EDEBC7CE214C523F00DD5AC8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 3D3CD9191DE5FBEC00167DC4 /* cxxreact */; + targetProxy = EDEBC7CD214C523F00DD5AC8 /* PBXContainerItemProxy */; + }; + EDEBC7D3214C528C00DD5AC8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 139D7ECD1E25DB7D00323FB7 /* third-party */; + targetProxy = EDEBC7D2214C528C00DD5AC8 /* PBXContainerItemProxy */; + }; + EDEBC7D7214C52FD00DD5AC8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 139D7E871E25C6D100323FB7 /* double-conversion */; + targetProxy = EDEBC7D6214C52FD00DD5AC8 /* PBXContainerItemProxy */; + }; + EDEBC7D9214C628300DD5AC8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = EBF21BBF1FC498900052F4D5 /* jsinspector */; + targetProxy = EDEBC7D8214C628300DD5AC8 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 139D7E8F1E25C6D100323FB7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_COMMA = NO; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_WARN_SHADOW = NO; + OTHER_LDFLAGS = "-ObjC"; + PRIVATE_HEADERS_FOLDER_PATH = "/usr/local/include/double-conversion"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 139D7E901E25C6D100323FB7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_COMMA = NO; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_WARN_SHADOW = NO; + OTHER_LDFLAGS = "-ObjC"; + PRIVATE_HEADERS_FOLDER_PATH = "/usr/local/include/double-conversion"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 139D7ED51E25DB7D00323FB7 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6DCB22442249333B0041DDBC /* third-party(Yoga).xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_WARN_COMMA = NO; + CLANG_WARN_DOCUMENTATION_COMMENTS = NO; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + USER_HEADER_SEARCH_PATHS = ""; + }; + name = Debug; + }; + 139D7ED61E25DB7D00323FB7 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6DCB22442249333B0041DDBC /* third-party(Yoga).xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_WARN_COMMA = NO; + CLANG_WARN_DOCUMENTATION_COMMENTS = NO; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + USER_HEADER_SEARCH_PATHS = ""; + }; + name = Release; + }; + 2D2A28191D9B038B00D4039D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6DCB22442249333B0041DDBC /* third-party(Yoga).xcconfig */; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_WARN_COMMA = NO; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = React; + PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include/React; + SDKROOT = appletvos; + }; + name = Debug; + }; + 2D2A281A1D9B038B00D4039D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6DCB22442249333B0041DDBC /* third-party(Yoga).xcconfig */; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_WARN_COMMA = NO; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = React; + PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include/React; + SDKROOT = appletvos; + }; + name = Release; + }; + 3D383D3A1EBD27B6005632C8 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6DCB22442249333B0041DDBC /* third-party(Yoga).xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_WARN_COMMA = NO; + CLANG_WARN_DOCUMENTATION_COMMENTS = NO; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "third-party"; + SDKROOT = appletvos; + SKIP_INSTALL = YES; + USER_HEADER_SEARCH_PATHS = ""; + }; + name = Debug; + }; + 3D383D3B1EBD27B6005632C8 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6DCB22442249333B0041DDBC /* third-party(Yoga).xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_WARN_COMMA = NO; + CLANG_WARN_DOCUMENTATION_COMMENTS = NO; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "third-party"; + SDKROOT = appletvos; + SKIP_INSTALL = YES; + USER_HEADER_SEARCH_PATHS = ""; + }; + name = Release; + }; + 3D383D601EBD27B9005632C8 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_COMMA = NO; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_WARN_SHADOW = NO; + OTHER_LDFLAGS = "-ObjC"; + PRIVATE_HEADERS_FOLDER_PATH = "/usr/local/include/double-conversion"; + PRODUCT_NAME = "double-conversion"; + SDKROOT = appletvos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 3D383D611EBD27B9005632C8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_COMMA = NO; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_WARN_SHADOW = NO; + OTHER_LDFLAGS = "-ObjC"; + PRIVATE_HEADERS_FOLDER_PATH = "/usr/local/include/double-conversion"; + PRODUCT_NAME = "double-conversion"; + SDKROOT = appletvos; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 3D3CD9231DE5FBEC00167DC4 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6DCB22442249333B0041DDBC /* third-party(Yoga).xcconfig */; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_STATIC_ANALYZER_MODE = deep; + CLANG_WARN_COMMA = NO; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include/cxxreact; + RUN_CLANG_STATIC_ANALYZER = YES; + }; + name = Debug; + }; + 3D3CD9241DE5FBEC00167DC4 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6DCB22442249333B0041DDBC /* third-party(Yoga).xcconfig */; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_STATIC_ANALYZER_MODE = deep; + CLANG_WARN_COMMA = NO; + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include/cxxreact; + RUN_CLANG_STATIC_ANALYZER = NO; + }; + name = Release; + }; + 3D3CD9301DE5FBEE00167DC4 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6DCB22442249333B0041DDBC /* third-party(Yoga).xcconfig */; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_WARN_COMMA = NO; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = cxxreact; + PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include/cxxreact; + SDKROOT = appletvos; + }; + name = Debug; + }; + 3D3CD9311DE5FBEE00167DC4 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6DCB22442249333B0041DDBC /* third-party(Yoga).xcconfig */; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_WARN_COMMA = NO; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = cxxreact; + PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include/cxxreact; + SDKROOT = appletvos; + }; + name = Release; + }; + 83CBBA201A601CBA00E9B192 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "RCT_DEBUG=1", + "RCT_DEV=1", + "RCT_NSASSERT=1", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; + GCC_WARN_SHADOW = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TVOS_DEPLOYMENT_TARGET = 9.2; + WARNING_CFLAGS = ( + "-Wextra", + "-Wall", + "-Wno-semicolon-before-method-body", + ); + }; + name = Debug; + }; + 83CBBA211A601CBA00E9B192 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; + GCC_WARN_SHADOW = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TVOS_DEPLOYMENT_TARGET = 9.2; + VALIDATE_PRODUCT = YES; + WARNING_CFLAGS = ( + "-Wextra", + "-Wall", + "-Wno-semicolon-before-method-body", + ); + }; + name = Release; + }; + 83CBBA401A601D0F00E9B192 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6DCB22442249333B0041DDBC /* third-party(Yoga).xcconfig */; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_STATIC_ANALYZER_MODE = deep; + CLANG_WARN_COMMA = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "RCT_DEBUG=1", + "RCT_DEV=1", + "RCT_NSASSERT=1", + "RCT_METRO_PORT=${RCT_METRO_PORT}", + ); + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + OTHER_LDFLAGS = ( + "-ObjC", + "-weak_framework", + WebKit, + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include/React; + RUN_CLANG_STATIC_ANALYZER = YES; + }; + name = Debug; + }; + 83CBBA411A601D0F00E9B192 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6DCB22442249333B0041DDBC /* third-party(Yoga).xcconfig */; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_STATIC_ANALYZER_MODE = deep; + CLANG_WARN_COMMA = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "RCT_METRO_PORT=${RCT_METRO_PORT}", + ); + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + OTHER_LDFLAGS = ( + "-ObjC", + "-weak_framework", + WebKit, + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include/React; + RUN_CLANG_STATIC_ANALYZER = NO; + }; + name = Release; + }; + EBF21BDA1FC498900052F4D5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6DCB22442249333B0041DDBC /* third-party(Yoga).xcconfig */; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_STATIC_ANALYZER_MODE = deep; + CLANG_WARN_COMMA = NO; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include/jsinspector; + RUN_CLANG_STATIC_ANALYZER = YES; + }; + name = Debug; + }; + EBF21BDB1FC498900052F4D5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6DCB22442249333B0041DDBC /* third-party(Yoga).xcconfig */; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_STATIC_ANALYZER_MODE = deep; + CLANG_WARN_COMMA = NO; + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include/jsinspector; + RUN_CLANG_STATIC_ANALYZER = NO; + }; + name = Release; + }; + EBF21BF81FC4989A0052F4D5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6DCB22442249333B0041DDBC /* third-party(Yoga).xcconfig */; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_WARN_COMMA = NO; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include/jsinspector; + SDKROOT = appletvos; + }; + name = Debug; + }; + EBF21BF91FC4989A0052F4D5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6DCB22442249333B0041DDBC /* third-party(Yoga).xcconfig */; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_WARN_COMMA = NO; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include/jsinspector; + SDKROOT = appletvos; + }; + name = Release; + }; + ED296FB4214C9A0900B7C4FE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_WARN_COMMA = NO; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + OTHER_CFLAGS = ( + "-DFOLLY_NO_CONFIG", + "-DFOLLY_MOBILE=1", + "-DFOLLY_USE_LIBCPP=1", + ); + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include/jsi; + SDKROOT = appletvos; + }; + name = Debug; + }; + ED296FB5214C9A0900B7C4FE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_WARN_COMMA = NO; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + OTHER_CFLAGS = ( + "-DFOLLY_NO_CONFIG", + "-DFOLLY_MOBILE=1", + "-DFOLLY_USE_LIBCPP=1", + ); + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include/jsi; + SDKROOT = appletvos; + }; + name = Release; + }; + ED296FEC214C9CF800B7C4FE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_WARN_COMMA = NO; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + OTHER_CFLAGS = ( + "-DFOLLY_NO_CONFIG", + "-DFOLLY_MOBILE=1", + "-DFOLLY_USE_LIBCPP=1", + ); + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include/jsireact; + SDKROOT = appletvos; + }; + name = Debug; + }; + ED296FED214C9CF800B7C4FE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_WARN_COMMA = NO; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_NO_COMMON_BLOCKS = YES; + OTHER_CFLAGS = ( + "-DFOLLY_NO_CONFIG", + "-DFOLLY_MOBILE=1", + "-DFOLLY_USE_LIBCPP=1", + ); + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include/jsireact; + SDKROOT = appletvos; + }; + name = Release; + }; + EDEBC6D4214B3E7000DD5AC8 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6DCB22442249333B0041DDBC /* third-party(Yoga).xcconfig */; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_STATIC_ANALYZER_MODE = deep; + CLANG_WARN_COMMA = NO; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include/jsi; + RUN_CLANG_STATIC_ANALYZER = YES; + }; + name = Debug; + }; + EDEBC6D5214B3E7000DD5AC8 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6DCB22442249333B0041DDBC /* third-party(Yoga).xcconfig */; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_STATIC_ANALYZER_MODE = deep; + CLANG_WARN_COMMA = NO; + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include/jsi; + RUN_CLANG_STATIC_ANALYZER = NO; + }; + name = Release; + }; + EDEBC739214B45A300DD5AC8 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6DCB22442249333B0041DDBC /* third-party(Yoga).xcconfig */; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_STATIC_ANALYZER_MODE = deep; + CLANG_WARN_COMMA = NO; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include/jsireact; + RUN_CLANG_STATIC_ANALYZER = YES; + }; + name = Debug; + }; + EDEBC73A214B45A300DD5AC8 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6DCB22442249333B0041DDBC /* third-party(Yoga).xcconfig */; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_STATIC_ANALYZER_MODE = deep; + CLANG_WARN_COMMA = NO; + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include/jsireact; + RUN_CLANG_STATIC_ANALYZER = NO; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 139D7E8E1E25C6D100323FB7 /* Build configuration list for PBXNativeTarget "double-conversion" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 139D7E8F1E25C6D100323FB7 /* Debug */, + 139D7E901E25C6D100323FB7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 139D7ED41E25DB7D00323FB7 /* Build configuration list for PBXNativeTarget "third-party" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 139D7ED51E25DB7D00323FB7 /* Debug */, + 139D7ED61E25DB7D00323FB7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2D2A281B1D9B038B00D4039D /* Build configuration list for PBXNativeTarget "React-tvOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2D2A28191D9B038B00D4039D /* Debug */, + 2D2A281A1D9B038B00D4039D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3D383D391EBD27B6005632C8 /* Build configuration list for PBXNativeTarget "third-party-tvOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3D383D3A1EBD27B6005632C8 /* Debug */, + 3D383D3B1EBD27B6005632C8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3D383D5F1EBD27B9005632C8 /* Build configuration list for PBXNativeTarget "double-conversion-tvOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3D383D601EBD27B9005632C8 /* Debug */, + 3D383D611EBD27B9005632C8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3D3CD9221DE5FBEC00167DC4 /* Build configuration list for PBXNativeTarget "cxxreact" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3D3CD9231DE5FBEC00167DC4 /* Debug */, + 3D3CD9241DE5FBEC00167DC4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3D3CD92F1DE5FBEE00167DC4 /* Build configuration list for PBXNativeTarget "cxxreact-tvOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3D3CD9301DE5FBEE00167DC4 /* Debug */, + 3D3CD9311DE5FBEE00167DC4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "ReactYoga" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 83CBBA201A601CBA00E9B192 /* Debug */, + 83CBBA211A601CBA00E9B192 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 83CBBA3F1A601D0F00E9B192 /* Build configuration list for PBXNativeTarget "React" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 83CBBA401A601D0F00E9B192 /* Debug */, + 83CBBA411A601D0F00E9B192 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EBF21BD91FC498900052F4D5 /* Build configuration list for PBXNativeTarget "jsinspector" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EBF21BDA1FC498900052F4D5 /* Debug */, + EBF21BDB1FC498900052F4D5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EBF21BF71FC4989A0052F4D5 /* Build configuration list for PBXNativeTarget "jsinspector-tvOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EBF21BF81FC4989A0052F4D5 /* Debug */, + EBF21BF91FC4989A0052F4D5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + ED296FB3214C9A0900B7C4FE /* Build configuration list for PBXNativeTarget "jsi-tvOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + ED296FB4214C9A0900B7C4FE /* Debug */, + ED296FB5214C9A0900B7C4FE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + ED296FEB214C9CF800B7C4FE /* Build configuration list for PBXNativeTarget "jsiexecutor-tvOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + ED296FEC214C9CF800B7C4FE /* Debug */, + ED296FED214C9CF800B7C4FE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EDEBC6D3214B3E7000DD5AC8 /* Build configuration list for PBXNativeTarget "jsi" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EDEBC6D4214B3E7000DD5AC8 /* Debug */, + EDEBC6D5214B3E7000DD5AC8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EDEBC738214B45A300DD5AC8 /* Build configuration list for PBXNativeTarget "jsiexecutor" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EDEBC739214B45A300DD5AC8 /* Debug */, + EDEBC73A214B45A300DD5AC8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; +} diff --git a/YogaDev.xcworkspace/contents.xcworkspacedata b/YogaDev.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..3d71e110 --- /dev/null +++ b/YogaDev.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/YogaDev.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/YogaDev.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/YogaDev.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/YogaDev/YogaDev.xcodeproj/project.pbxproj b/YogaDev/YogaDev.xcodeproj/project.pbxproj new file mode 100644 index 00000000..ad2546ff --- /dev/null +++ b/YogaDev/YogaDev.xcodeproj/project.pbxproj @@ -0,0 +1,350 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 6D4C7FA42249476900CBB1EC /* YGMarker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6D4C7F892249476700CBB1EC /* YGMarker.cpp */; }; + 6D4C7FA52249476900CBB1EC /* YGValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6D4C7F8B2249476700CBB1EC /* YGValue.cpp */; }; + 6D4C7FA62249476900CBB1EC /* YGLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6D4C7F902249476700CBB1EC /* YGLayout.cpp */; }; + 6D4C7FA72249476900CBB1EC /* YGNodePrint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6D4C7F922249476700CBB1EC /* YGNodePrint.cpp */; }; + 6D4C7FA82249476900CBB1EC /* YGStyle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6D4C7F992249476800CBB1EC /* YGStyle.cpp */; }; + 6D4C7FA92249476900CBB1EC /* log.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6D4C7F9A2249476800CBB1EC /* log.cpp */; }; + 6D4C7FAA2249476900CBB1EC /* YGNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6D4C7F9B2249476800CBB1EC /* YGNode.cpp */; }; + 6D4C7FAB2249476900CBB1EC /* Yoga.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6D4C7F9C2249476800CBB1EC /* Yoga.cpp */; }; + 6D4C7FAC2249476900CBB1EC /* Utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6D4C7F9D2249476800CBB1EC /* Utils.cpp */; }; + 6D4C7FAD2249476900CBB1EC /* YGEnums.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6D4C7F9E2249476800CBB1EC /* YGEnums.cpp */; }; + 6D4C7FAE2249476900CBB1EC /* YGConfig.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6D4C7FA32249476800CBB1EC /* YGConfig.cpp */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 6D4C7F76224945B200CBB1EC /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 6D4C7F78224945B200CBB1EC /* libYogaDev.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libYogaDev.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 6D4C7F892249476700CBB1EC /* YGMarker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = YGMarker.cpp; path = ../yoga/YGMarker.cpp; sourceTree = ""; }; + 6D4C7F8A2249476700CBB1EC /* Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Utils.h; path = ../yoga/Utils.h; sourceTree = ""; }; + 6D4C7F8B2249476700CBB1EC /* YGValue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = YGValue.cpp; path = ../yoga/YGValue.cpp; sourceTree = ""; }; + 6D4C7F8C2249476700CBB1EC /* instrumentation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = instrumentation.h; path = ../yoga/instrumentation.h; sourceTree = ""; }; + 6D4C7F8D2249476700CBB1EC /* YGStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = YGStyle.h; path = ../yoga/YGStyle.h; sourceTree = ""; }; + 6D4C7F8E2249476700CBB1EC /* YGNodePrint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = YGNodePrint.h; path = ../yoga/YGNodePrint.h; sourceTree = ""; }; + 6D4C7F8F2249476700CBB1EC /* YGMarker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = YGMarker.h; path = ../yoga/YGMarker.h; sourceTree = ""; }; + 6D4C7F902249476700CBB1EC /* YGLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = YGLayout.cpp; path = ../yoga/YGLayout.cpp; sourceTree = ""; }; + 6D4C7F912249476700CBB1EC /* YGEnums.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = YGEnums.h; path = ../yoga/YGEnums.h; sourceTree = ""; }; + 6D4C7F922249476700CBB1EC /* YGNodePrint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = YGNodePrint.cpp; path = ../yoga/YGNodePrint.cpp; sourceTree = ""; }; + 6D4C7F932249476700CBB1EC /* YGMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = YGMacros.h; path = ../yoga/YGMacros.h; sourceTree = ""; }; + 6D4C7F942249476700CBB1EC /* log.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = log.h; path = ../yoga/log.h; sourceTree = ""; }; + 6D4C7F952249476800CBB1EC /* YGFloatOptional.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = YGFloatOptional.h; path = ../yoga/YGFloatOptional.h; sourceTree = ""; }; + 6D4C7F962249476800CBB1EC /* YGNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = YGNode.h; path = ../yoga/YGNode.h; sourceTree = ""; }; + 6D4C7F972249476800CBB1EC /* YGLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = YGLayout.h; path = ../yoga/YGLayout.h; sourceTree = ""; }; + 6D4C7F982249476800CBB1EC /* CompactValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CompactValue.h; path = ../yoga/CompactValue.h; sourceTree = ""; }; + 6D4C7F992249476800CBB1EC /* YGStyle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = YGStyle.cpp; path = ../yoga/YGStyle.cpp; sourceTree = ""; }; + 6D4C7F9A2249476800CBB1EC /* log.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = log.cpp; path = ../yoga/log.cpp; sourceTree = ""; }; + 6D4C7F9B2249476800CBB1EC /* YGNode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = YGNode.cpp; path = ../yoga/YGNode.cpp; sourceTree = ""; }; + 6D4C7F9C2249476800CBB1EC /* Yoga.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Yoga.cpp; path = ../yoga/Yoga.cpp; sourceTree = ""; }; + 6D4C7F9D2249476800CBB1EC /* Utils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Utils.cpp; path = ../yoga/Utils.cpp; sourceTree = ""; }; + 6D4C7F9E2249476800CBB1EC /* YGEnums.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = YGEnums.cpp; path = ../yoga/YGEnums.cpp; sourceTree = ""; }; + 6D4C7F9F2249476800CBB1EC /* Yoga-internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "Yoga-internal.h"; path = "../yoga/Yoga-internal.h"; sourceTree = ""; }; + 6D4C7FA02249476800CBB1EC /* YGValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = YGValue.h; path = ../yoga/YGValue.h; sourceTree = ""; }; + 6D4C7FA12249476800CBB1EC /* Yoga.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Yoga.h; path = ../yoga/Yoga.h; sourceTree = ""; }; + 6D4C7FA22249476800CBB1EC /* YGConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = YGConfig.h; path = ../yoga/YGConfig.h; sourceTree = ""; }; + 6D4C7FA32249476800CBB1EC /* YGConfig.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = YGConfig.cpp; path = ../yoga/YGConfig.cpp; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 6D4C7F75224945B200CBB1EC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 6D4C7F6F224945B200CBB1EC = { + isa = PBXGroup; + children = ( + 6D4C7F982249476800CBB1EC /* CompactValue.h */, + 6D4C7F8C2249476700CBB1EC /* instrumentation.h */, + 6D4C7F9A2249476800CBB1EC /* log.cpp */, + 6D4C7F942249476700CBB1EC /* log.h */, + 6D4C7F9D2249476800CBB1EC /* Utils.cpp */, + 6D4C7F8A2249476700CBB1EC /* Utils.h */, + 6D4C7FA32249476800CBB1EC /* YGConfig.cpp */, + 6D4C7FA22249476800CBB1EC /* YGConfig.h */, + 6D4C7F9E2249476800CBB1EC /* YGEnums.cpp */, + 6D4C7F912249476700CBB1EC /* YGEnums.h */, + 6D4C7F952249476800CBB1EC /* YGFloatOptional.h */, + 6D4C7F902249476700CBB1EC /* YGLayout.cpp */, + 6D4C7F972249476800CBB1EC /* YGLayout.h */, + 6D4C7F932249476700CBB1EC /* YGMacros.h */, + 6D4C7F892249476700CBB1EC /* YGMarker.cpp */, + 6D4C7F8F2249476700CBB1EC /* YGMarker.h */, + 6D4C7F9B2249476800CBB1EC /* YGNode.cpp */, + 6D4C7F962249476800CBB1EC /* YGNode.h */, + 6D4C7F922249476700CBB1EC /* YGNodePrint.cpp */, + 6D4C7F8E2249476700CBB1EC /* YGNodePrint.h */, + 6D4C7F992249476800CBB1EC /* YGStyle.cpp */, + 6D4C7F8D2249476700CBB1EC /* YGStyle.h */, + 6D4C7F8B2249476700CBB1EC /* YGValue.cpp */, + 6D4C7FA02249476800CBB1EC /* YGValue.h */, + 6D4C7F9F2249476800CBB1EC /* Yoga-internal.h */, + 6D4C7F9C2249476800CBB1EC /* Yoga.cpp */, + 6D4C7FA12249476800CBB1EC /* Yoga.h */, + 6D4C7F79224945B200CBB1EC /* Products */, + ); + sourceTree = ""; + }; + 6D4C7F79224945B200CBB1EC /* Products */ = { + isa = PBXGroup; + children = ( + 6D4C7F78224945B200CBB1EC /* libYogaDev.a */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 6D4C7F77224945B200CBB1EC /* YogaDev */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6D4C7F81224945B200CBB1EC /* Build configuration list for PBXNativeTarget "YogaDev" */; + buildPhases = ( + 6D4C7F74224945B200CBB1EC /* Sources */, + 6D4C7F75224945B200CBB1EC /* Frameworks */, + 6D4C7F76224945B200CBB1EC /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = YogaDev; + productName = YogaDev; + productReference = 6D4C7F78224945B200CBB1EC /* libYogaDev.a */; + productType = "com.apple.product-type.library.static"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 6D4C7F70224945B200CBB1EC /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1010; + ORGANIZATIONNAME = "Will Wilson"; + TargetAttributes = { + 6D4C7F77224945B200CBB1EC = { + CreatedOnToolsVersion = 10.1; + }; + }; + }; + buildConfigurationList = 6D4C7F73224945B200CBB1EC /* Build configuration list for PBXProject "YogaDev" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 6D4C7F6F224945B200CBB1EC; + productRefGroup = 6D4C7F79224945B200CBB1EC /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 6D4C7F77224945B200CBB1EC /* YogaDev */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 6D4C7F74224945B200CBB1EC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6D4C7FAD2249476900CBB1EC /* YGEnums.cpp in Sources */, + 6D4C7FAE2249476900CBB1EC /* YGConfig.cpp in Sources */, + 6D4C7FAA2249476900CBB1EC /* YGNode.cpp in Sources */, + 6D4C7FAB2249476900CBB1EC /* Yoga.cpp in Sources */, + 6D4C7FA92249476900CBB1EC /* log.cpp in Sources */, + 6D4C7FA62249476900CBB1EC /* YGLayout.cpp in Sources */, + 6D4C7FAC2249476900CBB1EC /* Utils.cpp in Sources */, + 6D4C7FA82249476900CBB1EC /* YGStyle.cpp in Sources */, + 6D4C7FA42249476900CBB1EC /* YGMarker.cpp in Sources */, + 6D4C7FA52249476900CBB1EC /* YGValue.cpp in Sources */, + 6D4C7FA72249476900CBB1EC /* YGNodePrint.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 6D4C7F7F224945B200CBB1EC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.1; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 6D4C7F80224945B200CBB1EC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.1; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 6D4C7F82224945B200CBB1EC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 6D4C7F83224945B200CBB1EC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 6D4C7F73224945B200CBB1EC /* Build configuration list for PBXProject "YogaDev" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6D4C7F7F224945B200CBB1EC /* Debug */, + 6D4C7F80224945B200CBB1EC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6D4C7F81224945B200CBB1EC /* Build configuration list for PBXNativeTarget "YogaDev" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6D4C7F82224945B200CBB1EC /* Debug */, + 6D4C7F83224945B200CBB1EC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 6D4C7F70224945B200CBB1EC /* Project object */; +} diff --git a/third-party(Yoga).xcconfig b/third-party(Yoga).xcconfig new file mode 100644 index 00000000..220cd415 --- /dev/null +++ b/third-party(Yoga).xcconfig @@ -0,0 +1,12 @@ +// +// folly.xcconfig +// CxxReact +// +// Copyright (c) Facebook, Inc. and its affiliates. +// +// This source code is licensed under the MIT license found in the +// LICENSE file in the root directory of this source tree. +// + +HEADER_SEARCH_PATHS = $(SRCROOT)/../js/react-native-github/third-party/boost_1_63_0 $(SRCROOT)/../js/react-native-github/third-party/folly-2018.10.22.00 $(SRCROOT)/../js/react-native-github/third-party/glog-0.3.5/src +OTHER_CFLAGS = -DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 From f31917aa010ba33667dbc405a1a6f8e13f09f821 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Tue, 26 Mar 2019 08:47:29 -0700 Subject: [PATCH 015/347] removing unused const int Summary: Removed unused const int Reviewed By: davidaurelio Differential Revision: D14368114 fbshipit-source-id: f63b978813a01a37710fac299dc7ec9aff610844 --- java/com/facebook/yoga/YogaNodeJNI.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/java/com/facebook/yoga/YogaNodeJNI.java b/java/com/facebook/yoga/YogaNodeJNI.java index dbe12d55..62306a31 100644 --- a/java/com/facebook/yoga/YogaNodeJNI.java +++ b/java/com/facebook/yoga/YogaNodeJNI.java @@ -11,11 +11,6 @@ import com.facebook.proguard.annotations.DoNotStrip; @DoNotStrip public class YogaNodeJNI extends YogaNodeJNIBase { - /* Those flags needs be in sync with YGJNI.cpp */ - private static final int MARGIN = 1; - private static final int PADDING = 2; - private static final int BORDER = 4; - @DoNotStrip private float mWidth = YogaConstants.UNDEFINED; @DoNotStrip From e91569cdade4db537f5c848526ed3232390ca78d Mon Sep 17 00:00:00 2001 From: Alexander Vasyuk Date: Tue, 26 Mar 2019 20:16:41 -0700 Subject: [PATCH 016/347] Revert D14368114: [yoga] removing unused const int Differential Revision: D14368114 Original commit changeset: f63b978813a0 fbshipit-source-id: 86a517b1483b0635f283702602712c42c3d51e20 --- java/com/facebook/yoga/YogaNodeJNI.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/java/com/facebook/yoga/YogaNodeJNI.java b/java/com/facebook/yoga/YogaNodeJNI.java index 62306a31..dbe12d55 100644 --- a/java/com/facebook/yoga/YogaNodeJNI.java +++ b/java/com/facebook/yoga/YogaNodeJNI.java @@ -11,6 +11,11 @@ import com.facebook.proguard.annotations.DoNotStrip; @DoNotStrip public class YogaNodeJNI extends YogaNodeJNIBase { + /* Those flags needs be in sync with YGJNI.cpp */ + private static final int MARGIN = 1; + private static final int PADDING = 2; + private static final int BORDER = 4; + @DoNotStrip private float mWidth = YogaConstants.UNDEFINED; @DoNotStrip From 68d9209dd9f76a8e7ea8e3879dbcdf1f2e88272d Mon Sep 17 00:00:00 2001 From: Alexander Vasyuk Date: Tue, 26 Mar 2019 20:16:41 -0700 Subject: [PATCH 017/347] Revert D14368107: [yoga] moved all the properties used for layout outputs to YogaNodeJNI Differential Revision: D14368107 Original commit changeset: 75ca330c1e7f fbshipit-source-id: 9a9f5140bf8b1563c9ba85b3fe5f93fc6d8fdf41 --- java/com/facebook/yoga/YogaNodeJNI.java | 168 -------------------- java/com/facebook/yoga/YogaNodeJNIBase.java | 153 +++++++++++++++++- 2 files changed, 152 insertions(+), 169 deletions(-) diff --git a/java/com/facebook/yoga/YogaNodeJNI.java b/java/com/facebook/yoga/YogaNodeJNI.java index dbe12d55..ff5d1149 100644 --- a/java/com/facebook/yoga/YogaNodeJNI.java +++ b/java/com/facebook/yoga/YogaNodeJNI.java @@ -11,50 +11,6 @@ import com.facebook.proguard.annotations.DoNotStrip; @DoNotStrip public class YogaNodeJNI extends YogaNodeJNIBase { - /* Those flags needs be in sync with YGJNI.cpp */ - private static final int MARGIN = 1; - private static final int PADDING = 2; - private static final int BORDER = 4; - - @DoNotStrip - private float mWidth = YogaConstants.UNDEFINED; - @DoNotStrip - private float mHeight = YogaConstants.UNDEFINED; - @DoNotStrip - private float mTop = YogaConstants.UNDEFINED; - @DoNotStrip - private float mLeft = YogaConstants.UNDEFINED; - @DoNotStrip - private float mMarginLeft = 0; - @DoNotStrip - private float mMarginTop = 0; - @DoNotStrip - private float mMarginRight = 0; - @DoNotStrip - private float mMarginBottom = 0; - @DoNotStrip - private float mPaddingLeft = 0; - @DoNotStrip - private float mPaddingTop = 0; - @DoNotStrip - private float mPaddingRight = 0; - @DoNotStrip - private float mPaddingBottom = 0; - @DoNotStrip - private float mBorderLeft = 0; - @DoNotStrip - private float mBorderTop = 0; - @DoNotStrip - private float mBorderRight = 0; - @DoNotStrip - private float mBorderBottom = 0; - @DoNotStrip - private int mLayoutDirection = 0; - @DoNotStrip - private boolean mHasNewLayout = true; - @DoNotStrip - private boolean mDoesLegacyStretchFlagAffectsLayout = false; - public YogaNodeJNI() { super(); } @@ -62,128 +18,4 @@ public class YogaNodeJNI extends YogaNodeJNIBase { public YogaNodeJNI(YogaConfig config) { super(config); } - - @Override - public void reset() { - mHasNewLayout = true; - - mWidth = YogaConstants.UNDEFINED; - mHeight = YogaConstants.UNDEFINED; - mTop = YogaConstants.UNDEFINED; - mLeft = YogaConstants.UNDEFINED; - mMarginLeft = 0; - mMarginTop = 0; - mMarginRight = 0; - mMarginBottom = 0; - mPaddingLeft = 0; - mPaddingTop = 0; - mPaddingRight = 0; - mPaddingBottom = 0; - mBorderLeft = 0; - mBorderTop = 0; - mBorderRight = 0; - mBorderBottom = 0; - mLayoutDirection = 0; - mDoesLegacyStretchFlagAffectsLayout = false; - } - - @Override - public float getLayoutX() { - return mLeft; - } - - @Override - public float getLayoutY() { - return mTop; - } - - @Override - public float getLayoutWidth() { - return mWidth; - } - - @Override - public float getLayoutHeight() { - return mHeight; - } - - @Override - public boolean getDoesLegacyStretchFlagAffectsLayout() { - return mDoesLegacyStretchFlagAffectsLayout; - } - - @Override - public float getLayoutMargin(YogaEdge edge) { - switch (edge) { - case LEFT: - return mMarginLeft; - case TOP: - return mMarginTop; - case RIGHT: - return mMarginRight; - case BOTTOM: - return mMarginBottom; - case START: - return getLayoutDirection() == YogaDirection.RTL ? mMarginRight : mMarginLeft; - case END: - return getLayoutDirection() == YogaDirection.RTL ? mMarginLeft : mMarginRight; - default: - throw new IllegalArgumentException("Cannot get layout margins of multi-edge shorthands"); - } - } - - @Override - public float getLayoutPadding(YogaEdge edge) { - switch (edge) { - case LEFT: - return mPaddingLeft; - case TOP: - return mPaddingTop; - case RIGHT: - return mPaddingRight; - case BOTTOM: - return mPaddingBottom; - case START: - return getLayoutDirection() == YogaDirection.RTL ? mPaddingRight : mPaddingLeft; - case END: - return getLayoutDirection() == YogaDirection.RTL ? mPaddingLeft : mPaddingRight; - default: - throw new IllegalArgumentException("Cannot get layout paddings of multi-edge shorthands"); - } - } - - @Override - public float getLayoutBorder(YogaEdge edge) { - switch (edge) { - case LEFT: - return mBorderLeft; - case TOP: - return mBorderTop; - case RIGHT: - return mBorderRight; - case BOTTOM: - return mBorderBottom; - case START: - return getLayoutDirection() == YogaDirection.RTL ? mBorderRight : mBorderLeft; - case END: - return getLayoutDirection() == YogaDirection.RTL ? mBorderLeft : mBorderRight; - default: - throw new IllegalArgumentException("Cannot get layout border of multi-edge shorthands"); - } - } - - @Override - public YogaDirection getLayoutDirection() { - return YogaDirection.fromInt(mLayoutDirection); - } - - @Override - public boolean hasNewLayout() { - return mHasNewLayout; - } - - @Override - public void markLayoutSeen() { - mHasNewLayout = false; - } } diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index 52184d37..7ddfa228 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -21,6 +21,49 @@ public abstract class YogaNodeJNIBase extends YogaNode { private long mNativePointer; @Nullable private Object mData; + /* Those flags needs be in sync with YGJNI.cpp */ + private static final int MARGIN = 1; + private static final int PADDING = 2; + private static final int BORDER = 4; + + @DoNotStrip + private float mWidth = YogaConstants.UNDEFINED; + @DoNotStrip + private float mHeight = YogaConstants.UNDEFINED; + @DoNotStrip + private float mTop = YogaConstants.UNDEFINED; + @DoNotStrip + private float mLeft = YogaConstants.UNDEFINED; + @DoNotStrip + private float mMarginLeft = 0; + @DoNotStrip + private float mMarginTop = 0; + @DoNotStrip + private float mMarginRight = 0; + @DoNotStrip + private float mMarginBottom = 0; + @DoNotStrip + private float mPaddingLeft = 0; + @DoNotStrip + private float mPaddingTop = 0; + @DoNotStrip + private float mPaddingRight = 0; + @DoNotStrip + private float mPaddingBottom = 0; + @DoNotStrip + private float mBorderLeft = 0; + @DoNotStrip + private float mBorderTop = 0; + @DoNotStrip + private float mBorderRight = 0; + @DoNotStrip + private float mBorderBottom = 0; + @DoNotStrip + private int mLayoutDirection = 0; + @DoNotStrip + private boolean mHasNewLayout = true; + @DoNotStrip private boolean mDoesLegacyStretchFlagAffectsLayout = false; + public YogaNodeJNIBase() { mNativePointer = YogaNative.jni_YGNodeNew(); if (mNativePointer == 0) { @@ -53,9 +96,30 @@ public abstract class YogaNodeJNIBase extends YogaNode { } } public void reset() { + mHasNewLayout = true; + + mWidth = YogaConstants.UNDEFINED; + mHeight = YogaConstants.UNDEFINED; + mTop = YogaConstants.UNDEFINED; + mLeft = YogaConstants.UNDEFINED; + mMarginLeft = 0; + mMarginTop = 0; + mMarginRight = 0; + mMarginBottom = 0; + mPaddingLeft = 0; + mPaddingTop = 0; + mPaddingRight = 0; + mPaddingBottom = 0; + mBorderLeft = 0; + mBorderTop = 0; + mBorderRight = 0; + mBorderBottom = 0; + mLayoutDirection = 0; + mMeasureFunction = null; mBaselineFunction = null; mData = null; + mDoesLegacyStretchFlagAffectsLayout = false; YogaNative.jni_YGNodeReset(mNativePointer); } @@ -155,6 +219,10 @@ public abstract class YogaNodeJNIBase extends YogaNode { YogaNative.jni_YGNodeCalculateLayout(mNativePointer, width, height, nativePointers, nodes); } + public boolean hasNewLayout() { + return mHasNewLayout; + } + public void dirty() { YogaNative.jni_YGNodeMarkDirty(mNativePointer); } @@ -172,6 +240,10 @@ public abstract class YogaNodeJNIBase extends YogaNode { YogaNative.jni_YGNodeCopyStyle(mNativePointer, ((YogaNodeJNIBase) srcNode).mNativePointer); } + public void markLayoutSeen() { + mHasNewLayout = false; + } + public YogaDirection getStyleDirection() { return YogaDirection.fromInt(YogaNative.jni_YGNodeStyleGetDirection(mNativePointer)); } @@ -428,7 +500,86 @@ public abstract class YogaNodeJNIBase extends YogaNode { YogaNative.jni_YGNodeStyleSetAspectRatio(mNativePointer, aspectRatio); } - public abstract boolean getDoesLegacyStretchFlagAffectsLayout(); + public float getLayoutX() { + return mLeft; + } + + public float getLayoutY() { + return mTop; + } + + public float getLayoutWidth() { + return mWidth; + } + + public float getLayoutHeight() { + return mHeight; + } + + public boolean getDoesLegacyStretchFlagAffectsLayout() { + return mDoesLegacyStretchFlagAffectsLayout; + } + + public float getLayoutMargin(YogaEdge edge) { + switch (edge) { + case LEFT: + return mMarginLeft; + case TOP: + return mMarginTop; + case RIGHT: + return mMarginRight; + case BOTTOM: + return mMarginBottom; + case START: + return getLayoutDirection() == YogaDirection.RTL ? mMarginRight : mMarginLeft; + case END: + return getLayoutDirection() == YogaDirection.RTL ? mMarginLeft : mMarginRight; + default: + throw new IllegalArgumentException("Cannot get layout margins of multi-edge shorthands"); + } + } + + public float getLayoutPadding(YogaEdge edge) { + switch (edge) { + case LEFT: + return mPaddingLeft; + case TOP: + return mPaddingTop; + case RIGHT: + return mPaddingRight; + case BOTTOM: + return mPaddingBottom; + case START: + return getLayoutDirection() == YogaDirection.RTL ? mPaddingRight : mPaddingLeft; + case END: + return getLayoutDirection() == YogaDirection.RTL ? mPaddingLeft : mPaddingRight; + default: + throw new IllegalArgumentException("Cannot get layout paddings of multi-edge shorthands"); + } + } + + public float getLayoutBorder(YogaEdge edge) { + switch (edge) { + case LEFT: + return mBorderLeft; + case TOP: + return mBorderTop; + case RIGHT: + return mBorderRight; + case BOTTOM: + return mBorderBottom; + case START: + return getLayoutDirection() == YogaDirection.RTL ? mBorderRight : mBorderLeft; + case END: + return getLayoutDirection() == YogaDirection.RTL ? mBorderLeft : mBorderRight; + default: + throw new IllegalArgumentException("Cannot get layout border of multi-edge shorthands"); + } + } + + public YogaDirection getLayoutDirection() { + return YogaDirection.fromInt(mLayoutDirection); + } public void setMeasureFunction(YogaMeasureFunction measureFunction) { mMeasureFunction = measureFunction; From 2fb81500c1f755086b44ba2ccfd9cb83fbc2ebf5 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Thu, 28 Mar 2019 04:44:34 -0700 Subject: [PATCH 018/347] `gentest`: adapt license Summary: @public Adapts the license header text to the format we currently use. Reviewed By: SidharthGuglani Differential Revision: D14653591 fbshipit-source-id: f79446e4f85623326f770fe73482eab00edd9234 --- csharp/tests/Facebook.Yoga/YGAbsolutePositionTest.cs | 4 ++-- csharp/tests/Facebook.Yoga/YGAlignContentTest.cs | 4 ++-- csharp/tests/Facebook.Yoga/YGAlignItemsTest.cs | 4 ++-- csharp/tests/Facebook.Yoga/YGAlignSelfTest.cs | 4 ++-- csharp/tests/Facebook.Yoga/YGAndroidNewsFeed.cs | 4 ++-- csharp/tests/Facebook.Yoga/YGBorderTest.cs | 4 ++-- csharp/tests/Facebook.Yoga/YGDimensionTest.cs | 4 ++-- csharp/tests/Facebook.Yoga/YGDisplayTest.cs | 4 ++-- csharp/tests/Facebook.Yoga/YGFlexDirectionTest.cs | 4 ++-- csharp/tests/Facebook.Yoga/YGFlexTest.cs | 4 ++-- csharp/tests/Facebook.Yoga/YGFlexWrapTest.cs | 4 ++-- csharp/tests/Facebook.Yoga/YGJustifyContentTest.cs | 4 ++-- csharp/tests/Facebook.Yoga/YGMarginTest.cs | 4 ++-- csharp/tests/Facebook.Yoga/YGMinMaxDimensionTest.cs | 4 ++-- csharp/tests/Facebook.Yoga/YGPaddingTest.cs | 4 ++-- csharp/tests/Facebook.Yoga/YGPercentageTest.cs | 4 ++-- csharp/tests/Facebook.Yoga/YGRoundingTest.cs | 4 ++-- csharp/tests/Facebook.Yoga/YGSizeOverflowTest.cs | 4 ++-- gentest/gentest.js | 4 ++-- javascript/tests/Facebook.Yoga/YGAbsolutePositionTest.js | 4 ++-- javascript/tests/Facebook.Yoga/YGAlignContentTest.js | 4 ++-- javascript/tests/Facebook.Yoga/YGAlignItemsTest.js | 4 ++-- javascript/tests/Facebook.Yoga/YGAlignSelfTest.js | 4 ++-- javascript/tests/Facebook.Yoga/YGAndroidNewsFeed.js | 4 ++-- javascript/tests/Facebook.Yoga/YGBorderTest.js | 4 ++-- javascript/tests/Facebook.Yoga/YGDimensionTest.js | 4 ++-- javascript/tests/Facebook.Yoga/YGDisplayTest.js | 4 ++-- javascript/tests/Facebook.Yoga/YGFlexDirectionTest.js | 4 ++-- javascript/tests/Facebook.Yoga/YGFlexTest.js | 4 ++-- javascript/tests/Facebook.Yoga/YGFlexWrapTest.js | 4 ++-- javascript/tests/Facebook.Yoga/YGJustifyContentTest.js | 4 ++-- javascript/tests/Facebook.Yoga/YGMarginTest.js | 4 ++-- javascript/tests/Facebook.Yoga/YGMinMaxDimensionTest.js | 4 ++-- javascript/tests/Facebook.Yoga/YGPaddingTest.js | 4 ++-- javascript/tests/Facebook.Yoga/YGPercentageTest.js | 4 ++-- javascript/tests/Facebook.Yoga/YGRoundingTest.js | 4 ++-- javascript/tests/Facebook.Yoga/YGSizeOverflowTest.js | 4 ++-- 37 files changed, 74 insertions(+), 74 deletions(-) diff --git a/csharp/tests/Facebook.Yoga/YGAbsolutePositionTest.cs b/csharp/tests/Facebook.Yoga/YGAbsolutePositionTest.cs index 67ca636c..64959e9f 100644 --- a/csharp/tests/Facebook.Yoga/YGAbsolutePositionTest.cs +++ b/csharp/tests/Facebook.Yoga/YGAbsolutePositionTest.cs @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGAbsolutePositionTest.html diff --git a/csharp/tests/Facebook.Yoga/YGAlignContentTest.cs b/csharp/tests/Facebook.Yoga/YGAlignContentTest.cs index 0be39f56..411c1e8b 100644 --- a/csharp/tests/Facebook.Yoga/YGAlignContentTest.cs +++ b/csharp/tests/Facebook.Yoga/YGAlignContentTest.cs @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignContentTest.html diff --git a/csharp/tests/Facebook.Yoga/YGAlignItemsTest.cs b/csharp/tests/Facebook.Yoga/YGAlignItemsTest.cs index 0a21b8c0..41334397 100644 --- a/csharp/tests/Facebook.Yoga/YGAlignItemsTest.cs +++ b/csharp/tests/Facebook.Yoga/YGAlignItemsTest.cs @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignItemsTest.html diff --git a/csharp/tests/Facebook.Yoga/YGAlignSelfTest.cs b/csharp/tests/Facebook.Yoga/YGAlignSelfTest.cs index 5ced0c37..5787cd17 100644 --- a/csharp/tests/Facebook.Yoga/YGAlignSelfTest.cs +++ b/csharp/tests/Facebook.Yoga/YGAlignSelfTest.cs @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignSelfTest.html diff --git a/csharp/tests/Facebook.Yoga/YGAndroidNewsFeed.cs b/csharp/tests/Facebook.Yoga/YGAndroidNewsFeed.cs index 20488272..3e8d7289 100644 --- a/csharp/tests/Facebook.Yoga/YGAndroidNewsFeed.cs +++ b/csharp/tests/Facebook.Yoga/YGAndroidNewsFeed.cs @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGAndroidNewsFeed.html diff --git a/csharp/tests/Facebook.Yoga/YGBorderTest.cs b/csharp/tests/Facebook.Yoga/YGBorderTest.cs index af9afe68..8be708e8 100644 --- a/csharp/tests/Facebook.Yoga/YGBorderTest.cs +++ b/csharp/tests/Facebook.Yoga/YGBorderTest.cs @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGBorderTest.html diff --git a/csharp/tests/Facebook.Yoga/YGDimensionTest.cs b/csharp/tests/Facebook.Yoga/YGDimensionTest.cs index 74ff5bfe..ed93341b 100644 --- a/csharp/tests/Facebook.Yoga/YGDimensionTest.cs +++ b/csharp/tests/Facebook.Yoga/YGDimensionTest.cs @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGDimensionTest.html diff --git a/csharp/tests/Facebook.Yoga/YGDisplayTest.cs b/csharp/tests/Facebook.Yoga/YGDisplayTest.cs index f5a99ec0..1ca11d8f 100644 --- a/csharp/tests/Facebook.Yoga/YGDisplayTest.cs +++ b/csharp/tests/Facebook.Yoga/YGDisplayTest.cs @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGDisplayTest.html diff --git a/csharp/tests/Facebook.Yoga/YGFlexDirectionTest.cs b/csharp/tests/Facebook.Yoga/YGFlexDirectionTest.cs index 50fe5021..78af659f 100644 --- a/csharp/tests/Facebook.Yoga/YGFlexDirectionTest.cs +++ b/csharp/tests/Facebook.Yoga/YGFlexDirectionTest.cs @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexDirectionTest.html diff --git a/csharp/tests/Facebook.Yoga/YGFlexTest.cs b/csharp/tests/Facebook.Yoga/YGFlexTest.cs index 9beb5123..cabd21c2 100644 --- a/csharp/tests/Facebook.Yoga/YGFlexTest.cs +++ b/csharp/tests/Facebook.Yoga/YGFlexTest.cs @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexTest.html diff --git a/csharp/tests/Facebook.Yoga/YGFlexWrapTest.cs b/csharp/tests/Facebook.Yoga/YGFlexWrapTest.cs index c8471a35..4c720b72 100644 --- a/csharp/tests/Facebook.Yoga/YGFlexWrapTest.cs +++ b/csharp/tests/Facebook.Yoga/YGFlexWrapTest.cs @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexWrapTest.html diff --git a/csharp/tests/Facebook.Yoga/YGJustifyContentTest.cs b/csharp/tests/Facebook.Yoga/YGJustifyContentTest.cs index 58c9d678..154a1508 100644 --- a/csharp/tests/Facebook.Yoga/YGJustifyContentTest.cs +++ b/csharp/tests/Facebook.Yoga/YGJustifyContentTest.cs @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGJustifyContentTest.html diff --git a/csharp/tests/Facebook.Yoga/YGMarginTest.cs b/csharp/tests/Facebook.Yoga/YGMarginTest.cs index 09ac898e..3b9cc697 100644 --- a/csharp/tests/Facebook.Yoga/YGMarginTest.cs +++ b/csharp/tests/Facebook.Yoga/YGMarginTest.cs @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGMarginTest.html diff --git a/csharp/tests/Facebook.Yoga/YGMinMaxDimensionTest.cs b/csharp/tests/Facebook.Yoga/YGMinMaxDimensionTest.cs index 105990ce..fd5598c7 100644 --- a/csharp/tests/Facebook.Yoga/YGMinMaxDimensionTest.cs +++ b/csharp/tests/Facebook.Yoga/YGMinMaxDimensionTest.cs @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGMinMaxDimensionTest.html diff --git a/csharp/tests/Facebook.Yoga/YGPaddingTest.cs b/csharp/tests/Facebook.Yoga/YGPaddingTest.cs index f9425095..e12633ed 100644 --- a/csharp/tests/Facebook.Yoga/YGPaddingTest.cs +++ b/csharp/tests/Facebook.Yoga/YGPaddingTest.cs @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGPaddingTest.html diff --git a/csharp/tests/Facebook.Yoga/YGPercentageTest.cs b/csharp/tests/Facebook.Yoga/YGPercentageTest.cs index 7099664c..4caef354 100644 --- a/csharp/tests/Facebook.Yoga/YGPercentageTest.cs +++ b/csharp/tests/Facebook.Yoga/YGPercentageTest.cs @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGPercentageTest.html diff --git a/csharp/tests/Facebook.Yoga/YGRoundingTest.cs b/csharp/tests/Facebook.Yoga/YGRoundingTest.cs index 0dce31aa..52da0e85 100644 --- a/csharp/tests/Facebook.Yoga/YGRoundingTest.cs +++ b/csharp/tests/Facebook.Yoga/YGRoundingTest.cs @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGRoundingTest.html diff --git a/csharp/tests/Facebook.Yoga/YGSizeOverflowTest.cs b/csharp/tests/Facebook.Yoga/YGSizeOverflowTest.cs index b8a1d5af..cab46447 100644 --- a/csharp/tests/Facebook.Yoga/YGSizeOverflowTest.cs +++ b/csharp/tests/Facebook.Yoga/YGSizeOverflowTest.cs @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGSizeOverflowTest.html diff --git a/gentest/gentest.js b/gentest/gentest.js index 6d3f5a46..94fba074 100755 --- a/gentest/gentest.js +++ b/gentest/gentest.js @@ -44,8 +44,8 @@ function printTest(e, LTRContainer, RTLContainer, genericContainer) { '/**', ' * Copyright (c) Facebook, Inc. and its affiliates.', ' *', - ' * This source code is licensed under the MIT license found in the', - ' * LICENSE file in the root directory of this source tree.', + ' * This source code is licensed under the MIT license found in the LICENSE', + ' * file in the root directory of this source tree.', ' */', '', '// @Generated by gentest/gentest.rb from gentest/fixtures/' + document.title + '.html', diff --git a/javascript/tests/Facebook.Yoga/YGAbsolutePositionTest.js b/javascript/tests/Facebook.Yoga/YGAbsolutePositionTest.js index a33e9084..42c4aba8 100644 --- a/javascript/tests/Facebook.Yoga/YGAbsolutePositionTest.js +++ b/javascript/tests/Facebook.Yoga/YGAbsolutePositionTest.js @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGAbsolutePositionTest.html diff --git a/javascript/tests/Facebook.Yoga/YGAlignContentTest.js b/javascript/tests/Facebook.Yoga/YGAlignContentTest.js index 763aa356..39886863 100644 --- a/javascript/tests/Facebook.Yoga/YGAlignContentTest.js +++ b/javascript/tests/Facebook.Yoga/YGAlignContentTest.js @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignContentTest.html diff --git a/javascript/tests/Facebook.Yoga/YGAlignItemsTest.js b/javascript/tests/Facebook.Yoga/YGAlignItemsTest.js index 4cb72a91..0a56758f 100644 --- a/javascript/tests/Facebook.Yoga/YGAlignItemsTest.js +++ b/javascript/tests/Facebook.Yoga/YGAlignItemsTest.js @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignItemsTest.html diff --git a/javascript/tests/Facebook.Yoga/YGAlignSelfTest.js b/javascript/tests/Facebook.Yoga/YGAlignSelfTest.js index c6fca959..3b7f09fd 100644 --- a/javascript/tests/Facebook.Yoga/YGAlignSelfTest.js +++ b/javascript/tests/Facebook.Yoga/YGAlignSelfTest.js @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignSelfTest.html diff --git a/javascript/tests/Facebook.Yoga/YGAndroidNewsFeed.js b/javascript/tests/Facebook.Yoga/YGAndroidNewsFeed.js index 4d348392..0629bfc5 100644 --- a/javascript/tests/Facebook.Yoga/YGAndroidNewsFeed.js +++ b/javascript/tests/Facebook.Yoga/YGAndroidNewsFeed.js @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGAndroidNewsFeed.html diff --git a/javascript/tests/Facebook.Yoga/YGBorderTest.js b/javascript/tests/Facebook.Yoga/YGBorderTest.js index 9f184d0e..b6360ab0 100644 --- a/javascript/tests/Facebook.Yoga/YGBorderTest.js +++ b/javascript/tests/Facebook.Yoga/YGBorderTest.js @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGBorderTest.html diff --git a/javascript/tests/Facebook.Yoga/YGDimensionTest.js b/javascript/tests/Facebook.Yoga/YGDimensionTest.js index 8f594276..fb585f41 100644 --- a/javascript/tests/Facebook.Yoga/YGDimensionTest.js +++ b/javascript/tests/Facebook.Yoga/YGDimensionTest.js @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGDimensionTest.html diff --git a/javascript/tests/Facebook.Yoga/YGDisplayTest.js b/javascript/tests/Facebook.Yoga/YGDisplayTest.js index e8a82209..3cb403ef 100644 --- a/javascript/tests/Facebook.Yoga/YGDisplayTest.js +++ b/javascript/tests/Facebook.Yoga/YGDisplayTest.js @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGDisplayTest.html diff --git a/javascript/tests/Facebook.Yoga/YGFlexDirectionTest.js b/javascript/tests/Facebook.Yoga/YGFlexDirectionTest.js index 92029621..6f7ce207 100644 --- a/javascript/tests/Facebook.Yoga/YGFlexDirectionTest.js +++ b/javascript/tests/Facebook.Yoga/YGFlexDirectionTest.js @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexDirectionTest.html diff --git a/javascript/tests/Facebook.Yoga/YGFlexTest.js b/javascript/tests/Facebook.Yoga/YGFlexTest.js index c16f09cd..623dd2ca 100644 --- a/javascript/tests/Facebook.Yoga/YGFlexTest.js +++ b/javascript/tests/Facebook.Yoga/YGFlexTest.js @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexTest.html diff --git a/javascript/tests/Facebook.Yoga/YGFlexWrapTest.js b/javascript/tests/Facebook.Yoga/YGFlexWrapTest.js index 58b1eceb..3361a55e 100644 --- a/javascript/tests/Facebook.Yoga/YGFlexWrapTest.js +++ b/javascript/tests/Facebook.Yoga/YGFlexWrapTest.js @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexWrapTest.html diff --git a/javascript/tests/Facebook.Yoga/YGJustifyContentTest.js b/javascript/tests/Facebook.Yoga/YGJustifyContentTest.js index b563767b..90776d53 100644 --- a/javascript/tests/Facebook.Yoga/YGJustifyContentTest.js +++ b/javascript/tests/Facebook.Yoga/YGJustifyContentTest.js @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGJustifyContentTest.html diff --git a/javascript/tests/Facebook.Yoga/YGMarginTest.js b/javascript/tests/Facebook.Yoga/YGMarginTest.js index 95d1c262..224e5a15 100644 --- a/javascript/tests/Facebook.Yoga/YGMarginTest.js +++ b/javascript/tests/Facebook.Yoga/YGMarginTest.js @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGMarginTest.html diff --git a/javascript/tests/Facebook.Yoga/YGMinMaxDimensionTest.js b/javascript/tests/Facebook.Yoga/YGMinMaxDimensionTest.js index c85b849a..631f900c 100644 --- a/javascript/tests/Facebook.Yoga/YGMinMaxDimensionTest.js +++ b/javascript/tests/Facebook.Yoga/YGMinMaxDimensionTest.js @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGMinMaxDimensionTest.html diff --git a/javascript/tests/Facebook.Yoga/YGPaddingTest.js b/javascript/tests/Facebook.Yoga/YGPaddingTest.js index 079e5c17..0114782d 100644 --- a/javascript/tests/Facebook.Yoga/YGPaddingTest.js +++ b/javascript/tests/Facebook.Yoga/YGPaddingTest.js @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGPaddingTest.html diff --git a/javascript/tests/Facebook.Yoga/YGPercentageTest.js b/javascript/tests/Facebook.Yoga/YGPercentageTest.js index 8943de18..8134f372 100644 --- a/javascript/tests/Facebook.Yoga/YGPercentageTest.js +++ b/javascript/tests/Facebook.Yoga/YGPercentageTest.js @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGPercentageTest.html diff --git a/javascript/tests/Facebook.Yoga/YGRoundingTest.js b/javascript/tests/Facebook.Yoga/YGRoundingTest.js index bf3b8ad3..24deef17 100644 --- a/javascript/tests/Facebook.Yoga/YGRoundingTest.js +++ b/javascript/tests/Facebook.Yoga/YGRoundingTest.js @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGRoundingTest.html diff --git a/javascript/tests/Facebook.Yoga/YGSizeOverflowTest.js b/javascript/tests/Facebook.Yoga/YGSizeOverflowTest.js index cd031b29..60b6cdbf 100644 --- a/javascript/tests/Facebook.Yoga/YGSizeOverflowTest.js +++ b/javascript/tests/Facebook.Yoga/YGSizeOverflowTest.js @@ -1,8 +1,8 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ // @Generated by gentest/gentest.rb from gentest/fixtures/YGSizeOverflowTest.html From c235301b5279950d6734699cb0bdead7fcc63716 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Fri, 29 Mar 2019 06:26:59 -0700 Subject: [PATCH 019/347] `gentest`: remove empty line after license Summary: @public This gets flagged by the linter. Remove it. Reviewed By: SidharthGuglani Differential Revision: D14682386 fbshipit-source-id: 612508b0906285e6420a553ac7a96d1024f1eac6 --- csharp/tests/Facebook.Yoga/YGAbsolutePositionTest.cs | 1 - csharp/tests/Facebook.Yoga/YGAlignContentTest.cs | 1 - csharp/tests/Facebook.Yoga/YGAlignItemsTest.cs | 1 - csharp/tests/Facebook.Yoga/YGAlignSelfTest.cs | 1 - csharp/tests/Facebook.Yoga/YGAndroidNewsFeed.cs | 1 - csharp/tests/Facebook.Yoga/YGBorderTest.cs | 1 - csharp/tests/Facebook.Yoga/YGDimensionTest.cs | 1 - csharp/tests/Facebook.Yoga/YGDisplayTest.cs | 1 - csharp/tests/Facebook.Yoga/YGFlexDirectionTest.cs | 1 - csharp/tests/Facebook.Yoga/YGFlexTest.cs | 1 - csharp/tests/Facebook.Yoga/YGFlexWrapTest.cs | 1 - csharp/tests/Facebook.Yoga/YGJustifyContentTest.cs | 1 - csharp/tests/Facebook.Yoga/YGMarginTest.cs | 1 - csharp/tests/Facebook.Yoga/YGMinMaxDimensionTest.cs | 1 - csharp/tests/Facebook.Yoga/YGPaddingTest.cs | 1 - csharp/tests/Facebook.Yoga/YGPercentageTest.cs | 1 - csharp/tests/Facebook.Yoga/YGRoundingTest.cs | 1 - csharp/tests/Facebook.Yoga/YGSizeOverflowTest.cs | 1 - gentest/gentest.js | 1 - javascript/tests/Facebook.Yoga/YGAbsolutePositionTest.js | 1 - javascript/tests/Facebook.Yoga/YGAlignContentTest.js | 1 - javascript/tests/Facebook.Yoga/YGAlignItemsTest.js | 1 - javascript/tests/Facebook.Yoga/YGAlignSelfTest.js | 1 - javascript/tests/Facebook.Yoga/YGAndroidNewsFeed.js | 1 - javascript/tests/Facebook.Yoga/YGBorderTest.js | 1 - javascript/tests/Facebook.Yoga/YGDimensionTest.js | 1 - javascript/tests/Facebook.Yoga/YGDisplayTest.js | 1 - javascript/tests/Facebook.Yoga/YGFlexDirectionTest.js | 1 - javascript/tests/Facebook.Yoga/YGFlexTest.js | 1 - javascript/tests/Facebook.Yoga/YGFlexWrapTest.js | 1 - javascript/tests/Facebook.Yoga/YGJustifyContentTest.js | 1 - javascript/tests/Facebook.Yoga/YGMarginTest.js | 1 - javascript/tests/Facebook.Yoga/YGMinMaxDimensionTest.js | 1 - javascript/tests/Facebook.Yoga/YGPaddingTest.js | 1 - javascript/tests/Facebook.Yoga/YGPercentageTest.js | 1 - javascript/tests/Facebook.Yoga/YGRoundingTest.js | 1 - javascript/tests/Facebook.Yoga/YGSizeOverflowTest.js | 1 - 37 files changed, 37 deletions(-) diff --git a/csharp/tests/Facebook.Yoga/YGAbsolutePositionTest.cs b/csharp/tests/Facebook.Yoga/YGAbsolutePositionTest.cs index 64959e9f..bf5da18e 100644 --- a/csharp/tests/Facebook.Yoga/YGAbsolutePositionTest.cs +++ b/csharp/tests/Facebook.Yoga/YGAbsolutePositionTest.cs @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGAbsolutePositionTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGAlignContentTest.cs b/csharp/tests/Facebook.Yoga/YGAlignContentTest.cs index 411c1e8b..013c59be 100644 --- a/csharp/tests/Facebook.Yoga/YGAlignContentTest.cs +++ b/csharp/tests/Facebook.Yoga/YGAlignContentTest.cs @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignContentTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGAlignItemsTest.cs b/csharp/tests/Facebook.Yoga/YGAlignItemsTest.cs index 41334397..3042b36b 100644 --- a/csharp/tests/Facebook.Yoga/YGAlignItemsTest.cs +++ b/csharp/tests/Facebook.Yoga/YGAlignItemsTest.cs @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignItemsTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGAlignSelfTest.cs b/csharp/tests/Facebook.Yoga/YGAlignSelfTest.cs index 5787cd17..0826fab6 100644 --- a/csharp/tests/Facebook.Yoga/YGAlignSelfTest.cs +++ b/csharp/tests/Facebook.Yoga/YGAlignSelfTest.cs @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignSelfTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGAndroidNewsFeed.cs b/csharp/tests/Facebook.Yoga/YGAndroidNewsFeed.cs index 3e8d7289..a55ca044 100644 --- a/csharp/tests/Facebook.Yoga/YGAndroidNewsFeed.cs +++ b/csharp/tests/Facebook.Yoga/YGAndroidNewsFeed.cs @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGAndroidNewsFeed.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGBorderTest.cs b/csharp/tests/Facebook.Yoga/YGBorderTest.cs index 8be708e8..2c091537 100644 --- a/csharp/tests/Facebook.Yoga/YGBorderTest.cs +++ b/csharp/tests/Facebook.Yoga/YGBorderTest.cs @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGBorderTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGDimensionTest.cs b/csharp/tests/Facebook.Yoga/YGDimensionTest.cs index ed93341b..214cc712 100644 --- a/csharp/tests/Facebook.Yoga/YGDimensionTest.cs +++ b/csharp/tests/Facebook.Yoga/YGDimensionTest.cs @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGDimensionTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGDisplayTest.cs b/csharp/tests/Facebook.Yoga/YGDisplayTest.cs index 1ca11d8f..6a35d597 100644 --- a/csharp/tests/Facebook.Yoga/YGDisplayTest.cs +++ b/csharp/tests/Facebook.Yoga/YGDisplayTest.cs @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGDisplayTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGFlexDirectionTest.cs b/csharp/tests/Facebook.Yoga/YGFlexDirectionTest.cs index 78af659f..cf9b310a 100644 --- a/csharp/tests/Facebook.Yoga/YGFlexDirectionTest.cs +++ b/csharp/tests/Facebook.Yoga/YGFlexDirectionTest.cs @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexDirectionTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGFlexTest.cs b/csharp/tests/Facebook.Yoga/YGFlexTest.cs index cabd21c2..5fc5410e 100644 --- a/csharp/tests/Facebook.Yoga/YGFlexTest.cs +++ b/csharp/tests/Facebook.Yoga/YGFlexTest.cs @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGFlexWrapTest.cs b/csharp/tests/Facebook.Yoga/YGFlexWrapTest.cs index 4c720b72..a397ca50 100644 --- a/csharp/tests/Facebook.Yoga/YGFlexWrapTest.cs +++ b/csharp/tests/Facebook.Yoga/YGFlexWrapTest.cs @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexWrapTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGJustifyContentTest.cs b/csharp/tests/Facebook.Yoga/YGJustifyContentTest.cs index 154a1508..6f6a48b5 100644 --- a/csharp/tests/Facebook.Yoga/YGJustifyContentTest.cs +++ b/csharp/tests/Facebook.Yoga/YGJustifyContentTest.cs @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGJustifyContentTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGMarginTest.cs b/csharp/tests/Facebook.Yoga/YGMarginTest.cs index 3b9cc697..9a62a0a3 100644 --- a/csharp/tests/Facebook.Yoga/YGMarginTest.cs +++ b/csharp/tests/Facebook.Yoga/YGMarginTest.cs @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGMarginTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGMinMaxDimensionTest.cs b/csharp/tests/Facebook.Yoga/YGMinMaxDimensionTest.cs index fd5598c7..0d9c78c2 100644 --- a/csharp/tests/Facebook.Yoga/YGMinMaxDimensionTest.cs +++ b/csharp/tests/Facebook.Yoga/YGMinMaxDimensionTest.cs @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGMinMaxDimensionTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGPaddingTest.cs b/csharp/tests/Facebook.Yoga/YGPaddingTest.cs index e12633ed..9b6533cd 100644 --- a/csharp/tests/Facebook.Yoga/YGPaddingTest.cs +++ b/csharp/tests/Facebook.Yoga/YGPaddingTest.cs @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGPaddingTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGPercentageTest.cs b/csharp/tests/Facebook.Yoga/YGPercentageTest.cs index 4caef354..237186db 100644 --- a/csharp/tests/Facebook.Yoga/YGPercentageTest.cs +++ b/csharp/tests/Facebook.Yoga/YGPercentageTest.cs @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGPercentageTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGRoundingTest.cs b/csharp/tests/Facebook.Yoga/YGRoundingTest.cs index 52da0e85..471d8ea4 100644 --- a/csharp/tests/Facebook.Yoga/YGRoundingTest.cs +++ b/csharp/tests/Facebook.Yoga/YGRoundingTest.cs @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGRoundingTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGSizeOverflowTest.cs b/csharp/tests/Facebook.Yoga/YGSizeOverflowTest.cs index cab46447..1f9fae01 100644 --- a/csharp/tests/Facebook.Yoga/YGSizeOverflowTest.cs +++ b/csharp/tests/Facebook.Yoga/YGSizeOverflowTest.cs @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGSizeOverflowTest.html using System; diff --git a/gentest/gentest.js b/gentest/gentest.js index 94fba074..4dd4eaea 100755 --- a/gentest/gentest.js +++ b/gentest/gentest.js @@ -47,7 +47,6 @@ function printTest(e, LTRContainer, RTLContainer, genericContainer) { ' * This source code is licensed under the MIT license found in the LICENSE', ' * file in the root directory of this source tree.', ' */', - '', '// @Generated by gentest/gentest.rb from gentest/fixtures/' + document.title + '.html', '', ]); diff --git a/javascript/tests/Facebook.Yoga/YGAbsolutePositionTest.js b/javascript/tests/Facebook.Yoga/YGAbsolutePositionTest.js index 42c4aba8..0677769f 100644 --- a/javascript/tests/Facebook.Yoga/YGAbsolutePositionTest.js +++ b/javascript/tests/Facebook.Yoga/YGAbsolutePositionTest.js @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGAbsolutePositionTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGAlignContentTest.js b/javascript/tests/Facebook.Yoga/YGAlignContentTest.js index 39886863..4414ed66 100644 --- a/javascript/tests/Facebook.Yoga/YGAlignContentTest.js +++ b/javascript/tests/Facebook.Yoga/YGAlignContentTest.js @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignContentTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGAlignItemsTest.js b/javascript/tests/Facebook.Yoga/YGAlignItemsTest.js index 0a56758f..b5b16681 100644 --- a/javascript/tests/Facebook.Yoga/YGAlignItemsTest.js +++ b/javascript/tests/Facebook.Yoga/YGAlignItemsTest.js @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignItemsTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGAlignSelfTest.js b/javascript/tests/Facebook.Yoga/YGAlignSelfTest.js index 3b7f09fd..7aab341f 100644 --- a/javascript/tests/Facebook.Yoga/YGAlignSelfTest.js +++ b/javascript/tests/Facebook.Yoga/YGAlignSelfTest.js @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignSelfTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGAndroidNewsFeed.js b/javascript/tests/Facebook.Yoga/YGAndroidNewsFeed.js index 0629bfc5..96e7ec04 100644 --- a/javascript/tests/Facebook.Yoga/YGAndroidNewsFeed.js +++ b/javascript/tests/Facebook.Yoga/YGAndroidNewsFeed.js @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGAndroidNewsFeed.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGBorderTest.js b/javascript/tests/Facebook.Yoga/YGBorderTest.js index b6360ab0..16f33c29 100644 --- a/javascript/tests/Facebook.Yoga/YGBorderTest.js +++ b/javascript/tests/Facebook.Yoga/YGBorderTest.js @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGBorderTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGDimensionTest.js b/javascript/tests/Facebook.Yoga/YGDimensionTest.js index fb585f41..ac3937da 100644 --- a/javascript/tests/Facebook.Yoga/YGDimensionTest.js +++ b/javascript/tests/Facebook.Yoga/YGDimensionTest.js @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGDimensionTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGDisplayTest.js b/javascript/tests/Facebook.Yoga/YGDisplayTest.js index 3cb403ef..356a1aa7 100644 --- a/javascript/tests/Facebook.Yoga/YGDisplayTest.js +++ b/javascript/tests/Facebook.Yoga/YGDisplayTest.js @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGDisplayTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGFlexDirectionTest.js b/javascript/tests/Facebook.Yoga/YGFlexDirectionTest.js index 6f7ce207..fe68a6ad 100644 --- a/javascript/tests/Facebook.Yoga/YGFlexDirectionTest.js +++ b/javascript/tests/Facebook.Yoga/YGFlexDirectionTest.js @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexDirectionTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGFlexTest.js b/javascript/tests/Facebook.Yoga/YGFlexTest.js index 623dd2ca..3515e46f 100644 --- a/javascript/tests/Facebook.Yoga/YGFlexTest.js +++ b/javascript/tests/Facebook.Yoga/YGFlexTest.js @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGFlexWrapTest.js b/javascript/tests/Facebook.Yoga/YGFlexWrapTest.js index 3361a55e..50f1cb09 100644 --- a/javascript/tests/Facebook.Yoga/YGFlexWrapTest.js +++ b/javascript/tests/Facebook.Yoga/YGFlexWrapTest.js @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexWrapTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGJustifyContentTest.js b/javascript/tests/Facebook.Yoga/YGJustifyContentTest.js index 90776d53..83652004 100644 --- a/javascript/tests/Facebook.Yoga/YGJustifyContentTest.js +++ b/javascript/tests/Facebook.Yoga/YGJustifyContentTest.js @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGJustifyContentTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGMarginTest.js b/javascript/tests/Facebook.Yoga/YGMarginTest.js index 224e5a15..81f36432 100644 --- a/javascript/tests/Facebook.Yoga/YGMarginTest.js +++ b/javascript/tests/Facebook.Yoga/YGMarginTest.js @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGMarginTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGMinMaxDimensionTest.js b/javascript/tests/Facebook.Yoga/YGMinMaxDimensionTest.js index 631f900c..c52ea6e9 100644 --- a/javascript/tests/Facebook.Yoga/YGMinMaxDimensionTest.js +++ b/javascript/tests/Facebook.Yoga/YGMinMaxDimensionTest.js @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGMinMaxDimensionTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGPaddingTest.js b/javascript/tests/Facebook.Yoga/YGPaddingTest.js index 0114782d..a9f0b458 100644 --- a/javascript/tests/Facebook.Yoga/YGPaddingTest.js +++ b/javascript/tests/Facebook.Yoga/YGPaddingTest.js @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGPaddingTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGPercentageTest.js b/javascript/tests/Facebook.Yoga/YGPercentageTest.js index 8134f372..5ee49bcc 100644 --- a/javascript/tests/Facebook.Yoga/YGPercentageTest.js +++ b/javascript/tests/Facebook.Yoga/YGPercentageTest.js @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGPercentageTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGRoundingTest.js b/javascript/tests/Facebook.Yoga/YGRoundingTest.js index 24deef17..69caba7d 100644 --- a/javascript/tests/Facebook.Yoga/YGRoundingTest.js +++ b/javascript/tests/Facebook.Yoga/YGRoundingTest.js @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGRoundingTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGSizeOverflowTest.js b/javascript/tests/Facebook.Yoga/YGSizeOverflowTest.js index 60b6cdbf..7d94d200 100644 --- a/javascript/tests/Facebook.Yoga/YGSizeOverflowTest.js +++ b/javascript/tests/Facebook.Yoga/YGSizeOverflowTest.js @@ -4,7 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ - // @Generated by gentest/gentest.rb from gentest/fixtures/YGSizeOverflowTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); From 1fc8472d35398fcddfd02d1ad30db719ffde74b9 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Fri, 29 Mar 2019 06:26:59 -0700 Subject: [PATCH 020/347] `gentest`: allow for different default values Summary: @public We use Chrome for generating test cases, which since v67 (or so) for `min-width` and `min-height` has a default value of either `0px` (CSS 2) or `auto` (CSS 3), depending on style properties. Our setup only allowed for a single default value, and our test cases produce *both.* This changes the test gen logic to allow for more than one value. Reviewed By: SidharthGuglani Differential Revision: D14682387 fbshipit-source-id: e76361f5cc0b88f9c2d74a5f3248c66abd6907a7 --- csharp/tests/Facebook.Yoga/YGDisplayTest.cs | 2 - gentest/gentest.js | 53 +++++++++++++------ .../com/facebook/yoga/YGDisplayTest.java | 2 - .../tests/Facebook.Yoga/YGDisplayTest.js | 2 - tests/YGDisplayTest.cpp | 2 - 5 files changed, 36 insertions(+), 25 deletions(-) diff --git a/csharp/tests/Facebook.Yoga/YGDisplayTest.cs b/csharp/tests/Facebook.Yoga/YGDisplayTest.cs index 6a35d597..237686ba 100644 --- a/csharp/tests/Facebook.Yoga/YGDisplayTest.cs +++ b/csharp/tests/Facebook.Yoga/YGDisplayTest.cs @@ -213,8 +213,6 @@ namespace Facebook.Yoga root_child1_child0.FlexShrink = 1; root_child1_child0.FlexBasis = 0.Percent(); root_child1_child0.Width = 20; - root_child1_child0.MinWidth = 0; - root_child1_child0.MinHeight = 0; root_child1.Insert(0, root_child1_child0); YogaNode root_child2 = new YogaNode(config); diff --git a/gentest/gentest.js b/gentest/gentest.js index 4dd4eaea..66a1da8e 100755 --- a/gentest/gentest.js +++ b/gentest/gentest.js @@ -137,7 +137,7 @@ function checkDefaultValues() { {style:'bottom', value:'undefined'}, {style:'display', value:'flex'}, ].forEach(function(item) { - assert(item.value === getDefaultStyleValue(item.style), + assert(isDefaultStyleValue(item.style, item.value), item.style + ' should be ' + item.value); }); } @@ -156,9 +156,11 @@ function setupTestTree(e, parent, node, genericNode, nodeName, parentName, index style == 'width' || style == 'height')) { continue; - } - if (node.style[style] !== getDefaultStyleValue(style)) { + + var DEFAULT_STYLES = Object.create } + + if (!isDefaultStyleValue(style, node.style[style])) { switch (style) { case 'direction': e.YGNodeStyleSetDirection(nodeName, directionValue(e, node.style[style])); @@ -399,21 +401,38 @@ function displayValue(e, value){ } } -function getDefaultStyleValue(style) { - if (style == 'position') { - return 'relative'; +var DEFAULT_STYLES = new Map(); + +function isDefaultStyleValue(style, value) { + let defaultStyle = DEFAULT_STYLES.get(style); + if (defaultStyle == null) { + switch (style) { + case 'position': + defaultStyle = new Set(['relative']);; + break; + + case 'left': + case 'top': + case 'right': + case 'bottom': + case 'start': + case 'end': + defaultStyle = new Set(['undefined']); + break; + + case 'min-height': + case 'min-width': + defaultStyle = new Set(['0', '0px', 'auto']); + break; + + default: + var node = document.getElementById('default'); + defaultStyle = new Set([getComputedStyle(node, null)[style]]); + break; + } + DEFAULT_STYLES.set(style, defaultStyle); } - switch (style) { - case 'left': - case 'top': - case 'right': - case 'bottom': - case 'start': - case 'end': - return 'undefined'; - } - var node = document.getElementById('default'); - return getComputedStyle(node, null).getPropertyValue(style); + return DEFAULT_STYLES.get(style).has(value); } function getRoundedSize(node) { diff --git a/java/tests/com/facebook/yoga/YGDisplayTest.java b/java/tests/com/facebook/yoga/YGDisplayTest.java index 0671d28e..38bf5193 100644 --- a/java/tests/com/facebook/yoga/YGDisplayTest.java +++ b/java/tests/com/facebook/yoga/YGDisplayTest.java @@ -218,8 +218,6 @@ public class YGDisplayTest { root_child1_child0.setFlexShrink(1f); root_child1_child0.setFlexBasisPercent(0f); root_child1_child0.setWidth(20f); - root_child1_child0.setMinWidth(0f); - root_child1_child0.setMinHeight(0f); root_child1.addChildAt(root_child1_child0, 0); final YogaNode root_child2 = createNode(config); diff --git a/javascript/tests/Facebook.Yoga/YGDisplayTest.js b/javascript/tests/Facebook.Yoga/YGDisplayTest.js index 356a1aa7..e5be4a55 100644 --- a/javascript/tests/Facebook.Yoga/YGDisplayTest.js +++ b/javascript/tests/Facebook.Yoga/YGDisplayTest.js @@ -215,8 +215,6 @@ it("display_none_with_child", function () { root_child1_child0.setFlexShrink(1); root_child1_child0.setFlexBasis("0%"); root_child1_child0.setWidth(20); - root_child1_child0.setMinWidth(0); - root_child1_child0.setMinHeight(0); root_child1.insertChild(root_child1_child0, 0); var root_child2 = Yoga.Node.create(config); diff --git a/tests/YGDisplayTest.cpp b/tests/YGDisplayTest.cpp index 52ff9cc8..97a9e9f8 100644 --- a/tests/YGDisplayTest.cpp +++ b/tests/YGDisplayTest.cpp @@ -206,8 +206,6 @@ TEST(YogaTest, display_none_with_child) { YGNodeStyleSetFlexShrink(root_child1_child0, 1); YGNodeStyleSetFlexBasisPercent(root_child1_child0, 0); YGNodeStyleSetWidth(root_child1_child0, 20); - YGNodeStyleSetMinWidth(root_child1_child0, 0); - YGNodeStyleSetMinHeight(root_child1_child0, 0); YGNodeInsertChild(root_child1, root_child1_child0, 0); const YGNodeRef root_child2 = YGNodeNewWithConfig(config); From d44a6d936fc6666fa509a0e4bdff209a8d22d381 Mon Sep 17 00:00:00 2001 From: Pritesh Nandgaonkar Date: Fri, 29 Mar 2019 10:03:46 -0700 Subject: [PATCH 021/347] Release a new version to cocoapods Summary: Xcode 10.2 drops the support of swift version 3.0. Thus updated the swift version and also the yoga dependency. Reviewed By: SidharthGuglani Differential Revision: D14684332 fbshipit-source-id: d42e5979639c9fceec81627d4ac153566c2c0ab1 --- .swift-version | 2 +- YogaKit.podspec | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.swift-version b/.swift-version index 9f55b2cc..5186d070 100644 --- a/.swift-version +++ b/.swift-version @@ -1 +1 @@ -3.0 +4.0 diff --git a/YogaKit.podspec b/YogaKit.podspec index c169700d..91b241c1 100644 --- a/YogaKit.podspec +++ b/YogaKit.podspec @@ -6,10 +6,10 @@ # podspec = Pod::Spec.new do |spec| spec.name = 'YogaKit' - spec.version = '1.12.0' + spec.version = '1.12.0-pre.1' spec.license = { :type => 'MIT', :file => "LICENSE" } spec.homepage = 'https://facebook.github.io/yoga/' - spec.documentation_url = 'https://facebook.github.io/yoga/docs/api/yogakit/' + spec.documentation_url = 'https://facebook.github.io/yoga/docs/' spec.summary = 'Yoga is a cross-platform layout engine which implements Flexbox.' spec.description = 'Yoga is a cross-platform layout engine enabling maximum collaboration within your team by implementing an API many designers are familiar with, and opening it up to developers across different platforms.' @@ -23,12 +23,11 @@ podspec = Pod::Spec.new do |spec| spec.platform = :ios spec.ios.deployment_target = '8.0' spec.ios.frameworks = 'UIKit' - - spec.dependency 'Yoga', '~> 1.9' + spec.dependency 'Yoga', '1.12.0-pre.1' spec.source_files = 'YogaKit/Source/*.{h,m,swift}' spec.public_header_files = 'YogaKit/Source/{YGLayout,UIView+Yoga}.h' spec.private_header_files = 'YogaKit/Source/YGLayout+Private.h' - spec.swift_version = '3.0' + spec.swift_version = '4.0' end # See https://github.com/facebook/yoga/pull/366 From b1a7f2b4d9e0d07355cce400987fa820466efae1 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Fri, 29 Mar 2019 10:17:14 -0700 Subject: [PATCH 022/347] `gentest`: Fix editing messup Summary: @public Messed this one up when fixing the test generation script. Reviewed By: SidharthGuglani Differential Revision: D14684224 fbshipit-source-id: 2696ce9ff7d825d00c7ad1ab1627a5ffe56d123f --- gentest/gentest.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/gentest/gentest.js b/gentest/gentest.js index 66a1da8e..ca370928 100755 --- a/gentest/gentest.js +++ b/gentest/gentest.js @@ -156,9 +156,7 @@ function setupTestTree(e, parent, node, genericNode, nodeName, parentName, index style == 'width' || style == 'height')) { continue; - - - var DEFAULT_STYLES = Object.create } + } if (!isDefaultStyleValue(style, node.style[style])) { switch (style) { From 948ade4b1c4271c3d252a9256bc8599e1a6f31f6 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 1 Apr 2019 06:11:50 -0700 Subject: [PATCH 023/347] moved all the properties used for layout outputs to YogaNodeJNI Summary: Moved layout outputs transfer logic from YogaNodeJNIBase to YogaNodeJNI. This change set is for adding experiment for layout outputs batching using a float array Reviewed By: davidaurelio Differential Revision: D14642995 fbshipit-source-id: 5d0bc7fa18c1985be7e216d7351f5eab2e03861d --- java/com/facebook/yoga/YogaNodeJNI.java | 165 ++++++++++++++++++++ java/com/facebook/yoga/YogaNodeJNIBase.java | 153 +----------------- 2 files changed, 166 insertions(+), 152 deletions(-) diff --git a/java/com/facebook/yoga/YogaNodeJNI.java b/java/com/facebook/yoga/YogaNodeJNI.java index ff5d1149..d2a9357b 100644 --- a/java/com/facebook/yoga/YogaNodeJNI.java +++ b/java/com/facebook/yoga/YogaNodeJNI.java @@ -11,6 +11,45 @@ import com.facebook.proguard.annotations.DoNotStrip; @DoNotStrip public class YogaNodeJNI extends YogaNodeJNIBase { + @DoNotStrip + private float mWidth = YogaConstants.UNDEFINED; + @DoNotStrip + private float mHeight = YogaConstants.UNDEFINED; + @DoNotStrip + private float mTop = YogaConstants.UNDEFINED; + @DoNotStrip + private float mLeft = YogaConstants.UNDEFINED; + @DoNotStrip + private float mMarginLeft = 0; + @DoNotStrip + private float mMarginTop = 0; + @DoNotStrip + private float mMarginRight = 0; + @DoNotStrip + private float mMarginBottom = 0; + @DoNotStrip + private float mPaddingLeft = 0; + @DoNotStrip + private float mPaddingTop = 0; + @DoNotStrip + private float mPaddingRight = 0; + @DoNotStrip + private float mPaddingBottom = 0; + @DoNotStrip + private float mBorderLeft = 0; + @DoNotStrip + private float mBorderTop = 0; + @DoNotStrip + private float mBorderRight = 0; + @DoNotStrip + private float mBorderBottom = 0; + @DoNotStrip + private int mLayoutDirection = 0; + @DoNotStrip + private boolean mHasNewLayout = true; + @DoNotStrip + private boolean mDoesLegacyStretchFlagAffectsLayout = false; + public YogaNodeJNI() { super(); } @@ -18,4 +57,130 @@ public class YogaNodeJNI extends YogaNodeJNIBase { public YogaNodeJNI(YogaConfig config) { super(config); } + + @Override + public void reset() { + super.reset(); + mHasNewLayout = true; + + mWidth = YogaConstants.UNDEFINED; + mHeight = YogaConstants.UNDEFINED; + mTop = YogaConstants.UNDEFINED; + mLeft = YogaConstants.UNDEFINED; + mMarginLeft = 0; + mMarginTop = 0; + mMarginRight = 0; + mMarginBottom = 0; + mPaddingLeft = 0; + mPaddingTop = 0; + mPaddingRight = 0; + mPaddingBottom = 0; + mBorderLeft = 0; + mBorderTop = 0; + mBorderRight = 0; + mBorderBottom = 0; + mLayoutDirection = 0; + + mDoesLegacyStretchFlagAffectsLayout = false; + } + + @Override + public boolean hasNewLayout() { + return mHasNewLayout; + } + + @Override + public void markLayoutSeen() { + mHasNewLayout = false; + } + + @Override + public float getLayoutX() { + return mLeft; + } + + @Override + public float getLayoutY() { + return mTop; + } + + @Override + public float getLayoutWidth() { + return mWidth; + } + + @Override + public float getLayoutHeight() { + return mHeight; + } + + @Override + public boolean getDoesLegacyStretchFlagAffectsLayout() { + return mDoesLegacyStretchFlagAffectsLayout; + } + + @Override + public float getLayoutMargin(YogaEdge edge) { + switch (edge) { + case LEFT: + return mMarginLeft; + case TOP: + return mMarginTop; + case RIGHT: + return mMarginRight; + case BOTTOM: + return mMarginBottom; + case START: + return getLayoutDirection() == YogaDirection.RTL ? mMarginRight : mMarginLeft; + case END: + return getLayoutDirection() == YogaDirection.RTL ? mMarginLeft : mMarginRight; + default: + throw new IllegalArgumentException("Cannot get layout margins of multi-edge shorthands"); + } + } + + @Override + public float getLayoutPadding(YogaEdge edge) { + switch (edge) { + case LEFT: + return mPaddingLeft; + case TOP: + return mPaddingTop; + case RIGHT: + return mPaddingRight; + case BOTTOM: + return mPaddingBottom; + case START: + return getLayoutDirection() == YogaDirection.RTL ? mPaddingRight : mPaddingLeft; + case END: + return getLayoutDirection() == YogaDirection.RTL ? mPaddingLeft : mPaddingRight; + default: + throw new IllegalArgumentException("Cannot get layout paddings of multi-edge shorthands"); + } + } + + @Override + public float getLayoutBorder(YogaEdge edge) { + switch (edge) { + case LEFT: + return mBorderLeft; + case TOP: + return mBorderTop; + case RIGHT: + return mBorderRight; + case BOTTOM: + return mBorderBottom; + case START: + return getLayoutDirection() == YogaDirection.RTL ? mBorderRight : mBorderLeft; + case END: + return getLayoutDirection() == YogaDirection.RTL ? mBorderLeft : mBorderRight; + default: + throw new IllegalArgumentException("Cannot get layout border of multi-edge shorthands"); + } + } + + @Override + public YogaDirection getLayoutDirection() { + return YogaDirection.fromInt(mLayoutDirection); + } } diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index 7ddfa228..52184d37 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -21,49 +21,6 @@ public abstract class YogaNodeJNIBase extends YogaNode { private long mNativePointer; @Nullable private Object mData; - /* Those flags needs be in sync with YGJNI.cpp */ - private static final int MARGIN = 1; - private static final int PADDING = 2; - private static final int BORDER = 4; - - @DoNotStrip - private float mWidth = YogaConstants.UNDEFINED; - @DoNotStrip - private float mHeight = YogaConstants.UNDEFINED; - @DoNotStrip - private float mTop = YogaConstants.UNDEFINED; - @DoNotStrip - private float mLeft = YogaConstants.UNDEFINED; - @DoNotStrip - private float mMarginLeft = 0; - @DoNotStrip - private float mMarginTop = 0; - @DoNotStrip - private float mMarginRight = 0; - @DoNotStrip - private float mMarginBottom = 0; - @DoNotStrip - private float mPaddingLeft = 0; - @DoNotStrip - private float mPaddingTop = 0; - @DoNotStrip - private float mPaddingRight = 0; - @DoNotStrip - private float mPaddingBottom = 0; - @DoNotStrip - private float mBorderLeft = 0; - @DoNotStrip - private float mBorderTop = 0; - @DoNotStrip - private float mBorderRight = 0; - @DoNotStrip - private float mBorderBottom = 0; - @DoNotStrip - private int mLayoutDirection = 0; - @DoNotStrip - private boolean mHasNewLayout = true; - @DoNotStrip private boolean mDoesLegacyStretchFlagAffectsLayout = false; - public YogaNodeJNIBase() { mNativePointer = YogaNative.jni_YGNodeNew(); if (mNativePointer == 0) { @@ -96,30 +53,9 @@ public abstract class YogaNodeJNIBase extends YogaNode { } } public void reset() { - mHasNewLayout = true; - - mWidth = YogaConstants.UNDEFINED; - mHeight = YogaConstants.UNDEFINED; - mTop = YogaConstants.UNDEFINED; - mLeft = YogaConstants.UNDEFINED; - mMarginLeft = 0; - mMarginTop = 0; - mMarginRight = 0; - mMarginBottom = 0; - mPaddingLeft = 0; - mPaddingTop = 0; - mPaddingRight = 0; - mPaddingBottom = 0; - mBorderLeft = 0; - mBorderTop = 0; - mBorderRight = 0; - mBorderBottom = 0; - mLayoutDirection = 0; - mMeasureFunction = null; mBaselineFunction = null; mData = null; - mDoesLegacyStretchFlagAffectsLayout = false; YogaNative.jni_YGNodeReset(mNativePointer); } @@ -219,10 +155,6 @@ public abstract class YogaNodeJNIBase extends YogaNode { YogaNative.jni_YGNodeCalculateLayout(mNativePointer, width, height, nativePointers, nodes); } - public boolean hasNewLayout() { - return mHasNewLayout; - } - public void dirty() { YogaNative.jni_YGNodeMarkDirty(mNativePointer); } @@ -240,10 +172,6 @@ public abstract class YogaNodeJNIBase extends YogaNode { YogaNative.jni_YGNodeCopyStyle(mNativePointer, ((YogaNodeJNIBase) srcNode).mNativePointer); } - public void markLayoutSeen() { - mHasNewLayout = false; - } - public YogaDirection getStyleDirection() { return YogaDirection.fromInt(YogaNative.jni_YGNodeStyleGetDirection(mNativePointer)); } @@ -500,86 +428,7 @@ public abstract class YogaNodeJNIBase extends YogaNode { YogaNative.jni_YGNodeStyleSetAspectRatio(mNativePointer, aspectRatio); } - public float getLayoutX() { - return mLeft; - } - - public float getLayoutY() { - return mTop; - } - - public float getLayoutWidth() { - return mWidth; - } - - public float getLayoutHeight() { - return mHeight; - } - - public boolean getDoesLegacyStretchFlagAffectsLayout() { - return mDoesLegacyStretchFlagAffectsLayout; - } - - public float getLayoutMargin(YogaEdge edge) { - switch (edge) { - case LEFT: - return mMarginLeft; - case TOP: - return mMarginTop; - case RIGHT: - return mMarginRight; - case BOTTOM: - return mMarginBottom; - case START: - return getLayoutDirection() == YogaDirection.RTL ? mMarginRight : mMarginLeft; - case END: - return getLayoutDirection() == YogaDirection.RTL ? mMarginLeft : mMarginRight; - default: - throw new IllegalArgumentException("Cannot get layout margins of multi-edge shorthands"); - } - } - - public float getLayoutPadding(YogaEdge edge) { - switch (edge) { - case LEFT: - return mPaddingLeft; - case TOP: - return mPaddingTop; - case RIGHT: - return mPaddingRight; - case BOTTOM: - return mPaddingBottom; - case START: - return getLayoutDirection() == YogaDirection.RTL ? mPaddingRight : mPaddingLeft; - case END: - return getLayoutDirection() == YogaDirection.RTL ? mPaddingLeft : mPaddingRight; - default: - throw new IllegalArgumentException("Cannot get layout paddings of multi-edge shorthands"); - } - } - - public float getLayoutBorder(YogaEdge edge) { - switch (edge) { - case LEFT: - return mBorderLeft; - case TOP: - return mBorderTop; - case RIGHT: - return mBorderRight; - case BOTTOM: - return mBorderBottom; - case START: - return getLayoutDirection() == YogaDirection.RTL ? mBorderRight : mBorderLeft; - case END: - return getLayoutDirection() == YogaDirection.RTL ? mBorderLeft : mBorderRight; - default: - throw new IllegalArgumentException("Cannot get layout border of multi-edge shorthands"); - } - } - - public YogaDirection getLayoutDirection() { - return YogaDirection.fromInt(mLayoutDirection); - } + public abstract boolean getDoesLegacyStretchFlagAffectsLayout(); public void setMeasureFunction(YogaMeasureFunction measureFunction) { mMeasureFunction = measureFunction; From 5fad8008abe9bbd9ecd2ee4f704085d21d3e0fc2 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 1 Apr 2019 06:11:50 -0700 Subject: [PATCH 024/347] added test for reset method in YogaNodeJNI to verify all layout outputs are reset properly Summary: This diff adds a test for reset method in YogaNodeJNI to verify all layout outputs are reset properly Reviewed By: davidaurelio Differential Revision: D14643926 fbshipit-source-id: fffbcd07ccb6d2df83fc0bf187d992ef194f3bd0 --- java/com/facebook/yoga/YogaNode.java | 2 + java/com/facebook/yoga/YogaNodeJNIBase.java | 5 ++ .../tests/com/facebook/yoga/YogaNodeTest.java | 64 +++++++++++++++++++ 3 files changed, 71 insertions(+) diff --git a/java/com/facebook/yoga/YogaNode.java b/java/com/facebook/yoga/YogaNode.java index c6db5d45..fe850333 100644 --- a/java/com/facebook/yoga/YogaNode.java +++ b/java/com/facebook/yoga/YogaNode.java @@ -211,6 +211,8 @@ public abstract class YogaNode { public abstract boolean isMeasureDefined(); + public abstract boolean isBaselineDefined(); + public abstract void setData(Object data); @Nullable diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index 52184d37..ae4c42ed 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -468,6 +468,11 @@ public abstract class YogaNodeJNIBase extends YogaNode { return mMeasureFunction != null; } + @Override + public boolean isBaselineDefined() { + return mBaselineFunction != null; + } + public void setData(Object data) { mData = data; } diff --git a/java/tests/com/facebook/yoga/YogaNodeTest.java b/java/tests/com/facebook/yoga/YogaNodeTest.java index 7573bbb0..d6d2f742 100644 --- a/java/tests/com/facebook/yoga/YogaNodeTest.java +++ b/java/tests/com/facebook/yoga/YogaNodeTest.java @@ -14,6 +14,7 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.lang.ref.WeakReference; +import java.util.ArrayList; import java.util.concurrent.atomic.AtomicBoolean; import org.junit.Test; import org.junit.runner.RunWith; @@ -312,6 +313,69 @@ public class YogaNodeTest { assertEquals(root.getLayoutDirection(), YogaDirection.RTL); } + @Test + public void testResetApiShouldResetAllLayoutOutputs() { + YogaConfig config = new YogaConfig(); + config.setShouldDiffLayoutWithoutLegacyStretchBehaviour(true); + config.setUseLegacyStretchBehaviour(true); + YogaNode node = createNode(config); + node.setWidth(100); + node.setHeight(100); + node.setMargin(YogaEdge.START, 1); + node.setMargin(YogaEdge.END, 2); + node.setMargin(YogaEdge.TOP, 3); + node.setMargin(YogaEdge.BOTTOM, 4); + node.setPadding(YogaEdge.START, 1); + node.setPadding(YogaEdge.END, 2); + node.setPadding(YogaEdge.TOP, 3); + node.setPadding(YogaEdge.BOTTOM, 4); + node.setBorder(YogaEdge.START, 1); + node.setBorder(YogaEdge.END, 2); + node.setBorder(YogaEdge.TOP, 3); + node.setBorder(YogaEdge.BOTTOM, 4); + node.setDirection(YogaDirection.RTL); + node.markLayoutSeen(); + node.setMeasureFunction(new YogaMeasureFunction(){ + @Override + public long measure(YogaNode node, float width, YogaMeasureMode widthMode, float height, + YogaMeasureMode heightMode) { + return YogaMeasureOutput.make(100, 100); + } + }); + node.setBaselineFunction(new YogaBaselineFunction(){ + + @Override + public float baseline(YogaNode node, float width, float height) { + return height; + } + }); + node.setData(new ArrayList<>()); + + node.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED); + node.reset(); + + assertEquals(0, (int) node.getLayoutHeight()); + assertEquals(0, (int) node.getLayoutWidth()); + assertEquals(0, (int) node.getLayoutMargin(YogaEdge.LEFT)); + assertEquals(0, (int) node.getLayoutMargin(YogaEdge.RIGHT)); + assertEquals(0, (int) node.getLayoutMargin(YogaEdge.TOP)); + assertEquals(0, (int) node.getLayoutMargin(YogaEdge.BOTTOM)); + assertEquals(0, (int) node.getLayoutPadding(YogaEdge.LEFT)); + assertEquals(0, (int) node.getLayoutPadding(YogaEdge.RIGHT)); + assertEquals(0, (int) node.getLayoutPadding(YogaEdge.TOP)); + assertEquals(0, (int) node.getLayoutPadding(YogaEdge.BOTTOM)); + assertEquals(0, (int) node.getLayoutBorder(YogaEdge.LEFT)); + assertEquals(0, (int) node.getLayoutBorder(YogaEdge.RIGHT)); + assertEquals(0, (int) node.getLayoutBorder(YogaEdge.TOP)); + assertEquals(0, (int) node.getLayoutBorder(YogaEdge.BOTTOM)); + assertEquals(node.getLayoutDirection(), YogaDirection.INHERIT); + assertTrue(node.hasNewLayout()); + assertFalse(node.isMeasureDefined()); + assertFalse(node.isBaselineDefined()); + assertFalse(((YogaNodeJNIBase) node).getDoesLegacyStretchFlagAffectsLayout()); + assertEquals(null, node.getData()); + } + private YogaNode createNode() { return mNodeFactory.create(); } From c11faf2d56d782854e017f7ff15cd17e66f0566f Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 1 Apr 2019 06:11:51 -0700 Subject: [PATCH 025/347] Added implementation for YogaNodeJNIBatching and logic for passing array from c++ to java Summary: This diff adds the logic to transfer layout outputs using a float array Reviewed By: davidaurelio Differential Revision: D14368120 fbshipit-source-id: d1f22283bcea051d15657f42c15b90edaa0a8a7a --- .../facebook/yoga/YogaNodeJNIBatching.java | 177 +++++++++++++++ java/jni/YGJNI.cpp | 209 ++++++++++++------ 2 files changed, 320 insertions(+), 66 deletions(-) create mode 100644 java/com/facebook/yoga/YogaNodeJNIBatching.java diff --git a/java/com/facebook/yoga/YogaNodeJNIBatching.java b/java/com/facebook/yoga/YogaNodeJNIBatching.java new file mode 100644 index 00000000..7760fa80 --- /dev/null +++ b/java/com/facebook/yoga/YogaNodeJNIBatching.java @@ -0,0 +1,177 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +package com.facebook.yoga; + +import javax.annotation.Nullable; + +import com.facebook.proguard.annotations.DoNotStrip; + +@DoNotStrip +public class YogaNodeJNIBatching extends YogaNodeJNIBase { + + /* Those flags needs be in sync with YGJNI.cpp */ + private static final byte MARGIN = 1; + private static final byte PADDING = 2; + private static final byte BORDER = 4; + private static final byte DOES_LEGACY_STRETCH_BEHAVIOUR = 8; + private static final byte HAS_NEW_LAYOUT = 16; + + private static final byte LAYOUT_EDGE_SET_FLAG_INDEX = 0; + private static final byte LAYOUT_WIDTH_INDEX = 1; + private static final byte LAYOUT_HEIGHT_INDEX = 2; + private static final byte LAYOUT_LEFT_INDEX = 3; + private static final byte LAYOUT_TOP_INDEX = 4; + private static final byte LAYOUT_DIRECTION_INDEX = 5; + private static final byte LAYOUT_MARGIN_START_INDEX = 6; + private static final byte LAYOUT_PADDING_START_INDEX = 10; + private static final byte LAYOUT_BORDER_START_INDEX = 14; + + @DoNotStrip + private @Nullable float[] arr = null; + + @DoNotStrip + private int mLayoutDirection = 0; + + private boolean mHasNewLayout = true; + + public YogaNodeJNIBatching() { + super(); + } + + public YogaNodeJNIBatching(YogaConfig config) { + super(config); + } + + @Override + public void reset() { + super.reset(); + arr = null; + mHasNewLayout = true; + mLayoutDirection = 0; + } + + @Override + public float getLayoutX() { + return arr != null ? arr[LAYOUT_LEFT_INDEX] : 0; + } + + @Override + public float getLayoutY() { + return arr != null ? arr[LAYOUT_TOP_INDEX] : 0; + } + + @Override + public float getLayoutWidth() { + return arr != null ? arr[LAYOUT_WIDTH_INDEX] : 0; + } + + @Override + public float getLayoutHeight() { + return arr != null ? arr[LAYOUT_HEIGHT_INDEX] : 0; + } + + @Override + public boolean getDoesLegacyStretchFlagAffectsLayout() { + return arr != null && (((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & DOES_LEGACY_STRETCH_BEHAVIOUR) == DOES_LEGACY_STRETCH_BEHAVIOUR); + } + + @Override + public float getLayoutMargin(YogaEdge edge) { + if (arr != null && ((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & MARGIN) == MARGIN) { + switch (edge) { + case LEFT: + return arr[LAYOUT_MARGIN_START_INDEX]; + case TOP: + return arr[LAYOUT_MARGIN_START_INDEX + 1]; + case RIGHT: + return arr[LAYOUT_MARGIN_START_INDEX + 2]; + case BOTTOM: + return arr[LAYOUT_MARGIN_START_INDEX + 3]; + case START: + return getLayoutDirection() == YogaDirection.RTL ? arr[LAYOUT_MARGIN_START_INDEX + 2] : arr[LAYOUT_MARGIN_START_INDEX]; + case END: + return getLayoutDirection() == YogaDirection.RTL ? arr[LAYOUT_MARGIN_START_INDEX] : arr[LAYOUT_MARGIN_START_INDEX + 2]; + default: + throw new IllegalArgumentException("Cannot get layout margins of multi-edge shorthands"); + } + } else { + return 0; + } + } + + @Override + public float getLayoutPadding(YogaEdge edge) { + if (arr != null && ((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & PADDING) == PADDING) { + int paddingStartIndex = LAYOUT_PADDING_START_INDEX - ((((int)arr[LAYOUT_EDGE_SET_FLAG_INDEX] & MARGIN) == MARGIN) ? 0 : 4); + switch (edge) { + case LEFT: + return arr[paddingStartIndex]; + case TOP: + return arr[paddingStartIndex + 1]; + case RIGHT: + return arr[paddingStartIndex + 2]; + case BOTTOM: + return arr[paddingStartIndex + 3]; + case START: + return getLayoutDirection() == YogaDirection.RTL ? arr[paddingStartIndex + 2] : arr[paddingStartIndex]; + case END: + return getLayoutDirection() == YogaDirection.RTL ? arr[paddingStartIndex] : arr[paddingStartIndex + 2]; + default: + throw new IllegalArgumentException("Cannot get layout paddings of multi-edge shorthands"); + } + } else { + return 0; + } + } + + @Override + public float getLayoutBorder(YogaEdge edge) { + if (arr != null && ((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & BORDER) == BORDER) { + int borderStartIndex = LAYOUT_BORDER_START_INDEX - ((((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & MARGIN) == MARGIN) ? 0 : 4) - ((((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & PADDING) == PADDING) ? 0 : 4); + switch (edge) { + case LEFT: + return arr[borderStartIndex]; + case TOP: + return arr[borderStartIndex + 1]; + case RIGHT: + return arr[borderStartIndex + 2]; + case BOTTOM: + return arr[borderStartIndex + 3]; + case START: + return getLayoutDirection() == YogaDirection.RTL ? arr[borderStartIndex + 2] : arr[borderStartIndex]; + case END: + return getLayoutDirection() == YogaDirection.RTL ? arr[borderStartIndex] : arr[borderStartIndex + 2]; + default: + throw new IllegalArgumentException("Cannot get layout border of multi-edge shorthands"); + } + } else { + return 0; + } + } + + @Override + public YogaDirection getLayoutDirection() { + return YogaDirection.fromInt(arr != null ? (int) arr[LAYOUT_DIRECTION_INDEX] : mLayoutDirection); + } + + @Override + public boolean hasNewLayout() { + if (arr != null) { + return (((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX]) & HAS_NEW_LAYOUT) == HAS_NEW_LAYOUT; + } else { + return mHasNewLayout; + } + } + + @Override + public void markLayoutSeen() { + if (arr != null) { + arr[LAYOUT_EDGE_SET_FLAG_INDEX] = ((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX]) & ~(HAS_NEW_LAYOUT); + } + mHasNewLayout = false; + } +} diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp index 7f703c89..fa4e897d 100644 --- a/java/jni/YGJNI.cpp +++ b/java/jni/YGJNI.cpp @@ -62,6 +62,16 @@ enum YGStyleInput { IsReferenceBaseline, }; +const short int LAYOUT_EDGE_SET_FLAG_INDEX = 0; +const short int LAYOUT_WIDTH_INDEX = 1; +const short int LAYOUT_HEIGHT_INDEX = 2; +const short int LAYOUT_LEFT_INDEX = 3; +const short int LAYOUT_TOP_INDEX = 4; +const short int LAYOUT_DIRECTION_INDEX = 5; +const short int LAYOUT_MARGIN_START_INDEX = 6; +const short int LAYOUT_PADDING_START_INDEX = 10; +const short int LAYOUT_BORDER_START_INDEX = 14; + class PtrJNodeMap { using JNodeArray = JArrayClass; std::map ptrsToIdxs_; @@ -97,6 +107,9 @@ union YGNodeContext { void* asVoidPtr; }; +const int DOES_LEGACY_STRETCH_BEHAVIOUR = 8; +const int HAS_NEW_LAYOUT = 16; + class YGNodeEdges { uintptr_t edges_; @@ -127,6 +140,10 @@ public: edges_ |= edge; return *this; } + + int get() { + return edges_; + } }; struct YogaValue { @@ -177,80 +194,140 @@ static void YGTransferLayoutOutputsRecursive( auto edgesSet = YGNodeEdges{root}; - static auto widthField = obj->getClass()->getField("mWidth"); - static auto heightField = obj->getClass()->getField("mHeight"); - static auto leftField = obj->getClass()->getField("mLeft"); - static auto topField = obj->getClass()->getField("mTop"); + if (false) { + bool marginFieldSet = edgesSet.has(YGNodeEdges::MARGIN); + bool paddingFieldSet = edgesSet.has(YGNodeEdges::PADDING); + bool borderFieldSet = edgesSet.has(YGNodeEdges::BORDER); - static auto marginLeftField = - obj->getClass()->getField("mMarginLeft"); - static auto marginTopField = obj->getClass()->getField("mMarginTop"); - static auto marginRightField = - obj->getClass()->getField("mMarginRight"); - static auto marginBottomField = - obj->getClass()->getField("mMarginBottom"); + int fieldFlags = edgesSet.get(); + fieldFlags |= HAS_NEW_LAYOUT; + if (YGNodeLayoutGetDidLegacyStretchFlagAffectLayout(root)) { + fieldFlags |= DOES_LEGACY_STRETCH_BEHAVIOUR; + } - static auto paddingLeftField = - obj->getClass()->getField("mPaddingLeft"); - static auto paddingTopField = - obj->getClass()->getField("mPaddingTop"); - static auto paddingRightField = - obj->getClass()->getField("mPaddingRight"); - static auto paddingBottomField = - obj->getClass()->getField("mPaddingBottom"); + const int arrSize = 6 + (marginFieldSet ? 4 : 0) + + (paddingFieldSet ? 4 : 0) + (borderFieldSet ? 4 : 0); + float arr[18]; + arr[LAYOUT_EDGE_SET_FLAG_INDEX] = fieldFlags; + arr[LAYOUT_WIDTH_INDEX] = YGNodeLayoutGetWidth(root); + arr[LAYOUT_HEIGHT_INDEX] = YGNodeLayoutGetHeight(root); + arr[LAYOUT_LEFT_INDEX] = YGNodeLayoutGetLeft(root); + arr[LAYOUT_TOP_INDEX] = YGNodeLayoutGetTop(root); + arr[LAYOUT_DIRECTION_INDEX] = + static_cast(YGNodeLayoutGetDirection(root)); + if (marginFieldSet) { + arr[LAYOUT_MARGIN_START_INDEX] = YGNodeLayoutGetMargin(root, YGEdgeLeft); + arr[LAYOUT_MARGIN_START_INDEX + 1] = + YGNodeLayoutGetMargin(root, YGEdgeTop); + arr[LAYOUT_MARGIN_START_INDEX + 2] = + YGNodeLayoutGetMargin(root, YGEdgeRight); + arr[LAYOUT_MARGIN_START_INDEX + 3] = + YGNodeLayoutGetMargin(root, YGEdgeBottom); + } + if (paddingFieldSet) { + int paddingStartIndex = + LAYOUT_PADDING_START_INDEX - (marginFieldSet ? 0 : 4); + arr[paddingStartIndex] = YGNodeLayoutGetPadding(root, YGEdgeLeft); + arr[paddingStartIndex + 1] = YGNodeLayoutGetPadding(root, YGEdgeTop); + arr[paddingStartIndex + 2] = YGNodeLayoutGetPadding(root, YGEdgeRight); + arr[paddingStartIndex + 3] = YGNodeLayoutGetPadding(root, YGEdgeBottom); + } - static auto borderLeftField = - obj->getClass()->getField("mBorderLeft"); - static auto borderTopField = obj->getClass()->getField("mBorderTop"); - static auto borderRightField = - obj->getClass()->getField("mBorderRight"); - static auto borderBottomField = - obj->getClass()->getField("mBorderBottom"); + if (borderFieldSet) { + int borderStartIndex = LAYOUT_BORDER_START_INDEX - + (marginFieldSet ? 0 : 4) - (paddingFieldSet ? 0 : 4); + arr[borderStartIndex] = YGNodeLayoutGetBorder(root, YGEdgeLeft); + arr[borderStartIndex + 1] = YGNodeLayoutGetBorder(root, YGEdgeTop); + arr[borderStartIndex + 2] = YGNodeLayoutGetBorder(root, YGEdgeRight); + arr[borderStartIndex + 3] = YGNodeLayoutGetBorder(root, YGEdgeBottom); + } - static auto hasNewLayoutField = - obj->getClass()->getField("mHasNewLayout"); - static auto doesLegacyStretchBehaviour = obj->getClass()->getField( - "mDoesLegacyStretchFlagAffectsLayout"); + static auto arrField = obj->getClass()->getField("arr"); + local_ref arrFinal = make_float_array(arrSize); + arrFinal->setRegion(0, arrSize, arr); + obj->setFieldValue(arrField, arrFinal.get()); - obj->setFieldValue(widthField, YGNodeLayoutGetWidth(root)); - obj->setFieldValue(heightField, YGNodeLayoutGetHeight(root)); - obj->setFieldValue(leftField, YGNodeLayoutGetLeft(root)); - obj->setFieldValue(topField, YGNodeLayoutGetTop(root)); - obj->setFieldValue( - doesLegacyStretchBehaviour, - YGNodeLayoutGetDidLegacyStretchFlagAffectLayout(root)); - obj->setFieldValue(hasNewLayoutField, true); - YGTransferLayoutDirection(root, obj); + } else { + static auto widthField = obj->getClass()->getField("mWidth"); + static auto heightField = obj->getClass()->getField("mHeight"); + static auto leftField = obj->getClass()->getField("mLeft"); + static auto topField = obj->getClass()->getField("mTop"); - if (edgesSet.has(YGNodeEdges::MARGIN)) { - obj->setFieldValue( - marginLeftField, YGNodeLayoutGetMargin(root, YGEdgeLeft)); - obj->setFieldValue(marginTopField, YGNodeLayoutGetMargin(root, YGEdgeTop)); - obj->setFieldValue( - marginRightField, YGNodeLayoutGetMargin(root, YGEdgeRight)); - obj->setFieldValue( - marginBottomField, YGNodeLayoutGetMargin(root, YGEdgeBottom)); - } + static auto marginLeftField = + obj->getClass()->getField("mMarginLeft"); + static auto marginTopField = + obj->getClass()->getField("mMarginTop"); + static auto marginRightField = + obj->getClass()->getField("mMarginRight"); + static auto marginBottomField = + obj->getClass()->getField("mMarginBottom"); - if (edgesSet.has(YGNodeEdges::PADDING)) { - obj->setFieldValue( - paddingLeftField, YGNodeLayoutGetPadding(root, YGEdgeLeft)); - obj->setFieldValue( - paddingTopField, YGNodeLayoutGetPadding(root, YGEdgeTop)); - obj->setFieldValue( - paddingRightField, YGNodeLayoutGetPadding(root, YGEdgeRight)); - obj->setFieldValue( - paddingBottomField, YGNodeLayoutGetPadding(root, YGEdgeBottom)); - } + static auto paddingLeftField = + obj->getClass()->getField("mPaddingLeft"); + static auto paddingTopField = + obj->getClass()->getField("mPaddingTop"); + static auto paddingRightField = + obj->getClass()->getField("mPaddingRight"); + static auto paddingBottomField = + obj->getClass()->getField("mPaddingBottom"); - if (edgesSet.has(YGNodeEdges::BORDER)) { - obj->setFieldValue( - borderLeftField, YGNodeLayoutGetBorder(root, YGEdgeLeft)); - obj->setFieldValue(borderTopField, YGNodeLayoutGetBorder(root, YGEdgeTop)); - obj->setFieldValue( - borderRightField, YGNodeLayoutGetBorder(root, YGEdgeRight)); - obj->setFieldValue( - borderBottomField, YGNodeLayoutGetBorder(root, YGEdgeBottom)); + static auto borderLeftField = + obj->getClass()->getField("mBorderLeft"); + static auto borderTopField = + obj->getClass()->getField("mBorderTop"); + static auto borderRightField = + obj->getClass()->getField("mBorderRight"); + static auto borderBottomField = + obj->getClass()->getField("mBorderBottom"); + + static auto hasNewLayoutField = + obj->getClass()->getField("mHasNewLayout"); + static auto doesLegacyStretchBehaviour = + obj->getClass()->getField( + "mDoesLegacyStretchFlagAffectsLayout"); + + obj->setFieldValue(widthField, YGNodeLayoutGetWidth(root)); + obj->setFieldValue(heightField, YGNodeLayoutGetHeight(root)); + obj->setFieldValue(leftField, YGNodeLayoutGetLeft(root)); + obj->setFieldValue(topField, YGNodeLayoutGetTop(root)); + obj->setFieldValue( + doesLegacyStretchBehaviour, + YGNodeLayoutGetDidLegacyStretchFlagAffectLayout(root)); + obj->setFieldValue(hasNewLayoutField, true); + YGTransferLayoutDirection(root, obj); + + if (edgesSet.has(YGNodeEdges::MARGIN)) { + obj->setFieldValue( + marginLeftField, YGNodeLayoutGetMargin(root, YGEdgeLeft)); + obj->setFieldValue( + marginTopField, YGNodeLayoutGetMargin(root, YGEdgeTop)); + obj->setFieldValue( + marginRightField, YGNodeLayoutGetMargin(root, YGEdgeRight)); + obj->setFieldValue( + marginBottomField, YGNodeLayoutGetMargin(root, YGEdgeBottom)); + } + + if (edgesSet.has(YGNodeEdges::PADDING)) { + obj->setFieldValue( + paddingLeftField, YGNodeLayoutGetPadding(root, YGEdgeLeft)); + obj->setFieldValue( + paddingTopField, YGNodeLayoutGetPadding(root, YGEdgeTop)); + obj->setFieldValue( + paddingRightField, YGNodeLayoutGetPadding(root, YGEdgeRight)); + obj->setFieldValue( + paddingBottomField, YGNodeLayoutGetPadding(root, YGEdgeBottom)); + } + + if (edgesSet.has(YGNodeEdges::BORDER)) { + obj->setFieldValue( + borderLeftField, YGNodeLayoutGetBorder(root, YGEdgeLeft)); + obj->setFieldValue( + borderTopField, YGNodeLayoutGetBorder(root, YGEdgeTop)); + obj->setFieldValue( + borderRightField, YGNodeLayoutGetBorder(root, YGEdgeRight)); + obj->setFieldValue( + borderBottomField, YGNodeLayoutGetBorder(root, YGEdgeBottom)); + } } root->setHasNewLayout(false); From 74ce5afd9e625fadde44afccca732df1e9fc5fef Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 1 Apr 2019 06:11:51 -0700 Subject: [PATCH 026/347] added flag for useBatchingForLayoutOutputs experiment Summary: Using a config flag to switch between different implementations of transferring layout outputs - YogaNodeJNI uses multiple access of java fields to pass all properties like width, height, margin etc... - YogaNodeJNIBatching uses a float array to pass all the data in one java field access Reviewed By: davidaurelio Differential Revision: D14378301 fbshipit-source-id: 0da5b28e6a67ad8fd60eb7efe622d9b2deaf177f --- java/com/facebook/yoga/YogaConfig.java | 1 + java/com/facebook/yoga/YogaNative.java | 4 ++-- java/com/facebook/yoga/YogaNode.java | 4 ++-- java/com/facebook/yoga/YogaNodeJNIBase.java | 4 ++-- java/jni/YGJNI.cpp | 13 ++++++++++--- 5 files changed, 17 insertions(+), 9 deletions(-) diff --git a/java/com/facebook/yoga/YogaConfig.java b/java/com/facebook/yoga/YogaConfig.java index bc2538da..2121d643 100644 --- a/java/com/facebook/yoga/YogaConfig.java +++ b/java/com/facebook/yoga/YogaConfig.java @@ -11,6 +11,7 @@ import com.facebook.soloader.SoLoader; public class YogaConfig { public static int SPACING_TYPE = 1; + public static boolean useBatchingForLayoutOutputs = false; long mNativePointer; private YogaLogger mLogger; diff --git a/java/com/facebook/yoga/YogaNative.java b/java/com/facebook/yoga/YogaNative.java index ef0b44ee..372fb3c0 100644 --- a/java/com/facebook/yoga/YogaNative.java +++ b/java/com/facebook/yoga/YogaNative.java @@ -29,8 +29,8 @@ public class YogaNative { // YGNode related static native int jni_YGNodeGetInstanceCount(); - static native long jni_YGNodeNew(); - static native long jni_YGNodeNewWithConfig(long configPointer); + static native long jni_YGNodeNew(boolean useBatchingForLayoutOutputs); + static native long jni_YGNodeNewWithConfig(long configPointer, boolean useBatchingForLayoutOutputs); static native void jni_YGNodeFree(long nativePointer); static native void jni_YGNodeReset(long nativePointer); static native void jni_YGNodeInsertChild(long nativePointer, long childPointer, int index); diff --git a/java/com/facebook/yoga/YogaNode.java b/java/com/facebook/yoga/YogaNode.java index fe850333..66d743f5 100644 --- a/java/com/facebook/yoga/YogaNode.java +++ b/java/com/facebook/yoga/YogaNode.java @@ -10,11 +10,11 @@ import javax.annotation.Nullable; public abstract class YogaNode { public static YogaNode create() { - return new YogaNodeJNI(); + return YogaConfig.useBatchingForLayoutOutputs ? new YogaNodeJNIBatching() : new YogaNodeJNI(); } public static YogaNode create(YogaConfig config) { - return new YogaNodeJNI(config); + return YogaConfig.useBatchingForLayoutOutputs ? new YogaNodeJNIBatching(config) : new YogaNodeJNI(config); } public abstract void reset(); diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index ae4c42ed..e07bbb86 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -22,14 +22,14 @@ public abstract class YogaNodeJNIBase extends YogaNode { @Nullable private Object mData; public YogaNodeJNIBase() { - mNativePointer = YogaNative.jni_YGNodeNew(); + mNativePointer = YogaNative.jni_YGNodeNew(YogaConfig.useBatchingForLayoutOutputs); if (mNativePointer == 0) { throw new IllegalStateException("Failed to allocate native memory"); } } public YogaNodeJNIBase(YogaConfig config) { - mNativePointer = YogaNative.jni_YGNodeNewWithConfig(config.mNativePointer); + mNativePointer = YogaNative.jni_YGNodeNewWithConfig(config.mNativePointer, YogaConfig.useBatchingForLayoutOutputs); if (mNativePointer == 0) { throw new IllegalStateException("Failed to allocate native memory"); } diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp index fa4e897d..a7fef2e6 100644 --- a/java/jni/YGJNI.cpp +++ b/java/jni/YGJNI.cpp @@ -72,6 +72,8 @@ const short int LAYOUT_MARGIN_START_INDEX = 6; const short int LAYOUT_PADDING_START_INDEX = 10; const short int LAYOUT_BORDER_START_INDEX = 14; +bool useBatchingForLayoutOutputs; + class PtrJNodeMap { using JNodeArray = JArrayClass; std::map ptrsToIdxs_; @@ -194,7 +196,7 @@ static void YGTransferLayoutOutputsRecursive( auto edgesSet = YGNodeEdges{root}; - if (false) { + if (useBatchingForLayoutOutputs) { bool marginFieldSet = edgesSet.has(YGNodeEdges::MARGIN); bool paddingFieldSet = edgesSet.has(YGNodeEdges::PADDING); bool borderFieldSet = edgesSet.has(YGNodeEdges::BORDER); @@ -431,16 +433,21 @@ static int YGJNILogFunc( return result; } -jlong jni_YGNodeNew(alias_ref) { +jlong jni_YGNodeNew(alias_ref thiz, jboolean useBatching) { const YGNodeRef node = YGNodeNew(); node->setContext(YGNodeContext{}.asVoidPtr); node->setPrintFunc(YGPrint); + useBatchingForLayoutOutputs = useBatching; return reinterpret_cast(node); } -jlong jni_YGNodeNewWithConfig(alias_ref, jlong configPointer) { +jlong jni_YGNodeNewWithConfig( + alias_ref, + jlong configPointer, + jboolean useBatching) { const YGNodeRef node = YGNodeNewWithConfig(_jlong2YGConfigRef(configPointer)); node->setContext(YGNodeContext{}.asVoidPtr); + useBatchingForLayoutOutputs = useBatching; return reinterpret_cast(node); } From bfc6319daa4695e0d0cb4c21c0d4ab1357231061 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20B=C3=BCchele?= Date: Tue, 2 Apr 2019 04:11:22 -0700 Subject: [PATCH 027/347] use search instead of hash Summary: The state of the playground was stores in a hash appended to the URL. However, tinyURL ignores the hash part of the URL. For this reason, we are using the search part of the URL instead. Before: `yogalayout.com/playground#ey...` After: `yogalayout.com/playground?ey...` Reviewed By: davidaurelio Differential Revision: D14722638 fbshipit-source-id: ed135f60269e9136bb850c4c661bd88f8ee19323 --- .../src/components/Playground/URLShortener.js | 4 ++-- website/src/components/Playground/index.js | 21 +++++++++++++++---- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/website/src/components/Playground/URLShortener.js b/website/src/components/Playground/URLShortener.js index 2e0194a1..4dc99190 100644 --- a/website/src/components/Playground/URLShortener.js +++ b/website/src/components/Playground/URLShortener.js @@ -28,11 +28,11 @@ export default class URLShortener extends Component<{}, State> { }; componentDidMount() { - window.addEventListener('hashchange', this.onHashChange); + window.addEventListener('popstate', this.onHashChange); } componentWillUnmount() { - window.removeEventListener('hashchange', this.onHashChange); + window.removeEventListener('popstate', this.onHashChange); } onHashChange = () => { diff --git a/website/src/components/Playground/index.js b/website/src/components/Playground/index.js index 327ca962..5a39f236 100644 --- a/website/src/components/Playground/index.js +++ b/website/src/components/Playground/index.js @@ -87,12 +87,18 @@ export default class Playground extends Component { document.addEventListener('keydown', this.onKeyDown); // rehydrate - if (window.location.hash && window.location.hash.length > 1) { + if (window.location.search && window.location.search.length > 1) { try { - const restoredState = JSON.parse(atob(window.location.hash.substr(1))); + const restoredState = JSON.parse( + atob(window.location.search.substr(1)), + ); this.setState({layoutDefinition: this.rehydrate(restoredState)}); } catch (e) { - window.location.hash = ''; + window.history.replaceState( + {}, + null, + window.location.origin + window.location.pathname, + ); } } } @@ -165,7 +171,14 @@ export default class Playground extends Component { }); if (this.props.persist) { - window.location.hash = this.getHash(layoutDefinition); + window.history.replaceState( + {}, + null, + window.location.origin + + window.location.pathname + + '?' + + this.getHash(layoutDefinition), + ); } } From d42d43e90fb13d3af5d9cb1dd4c7562a14649865 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20B=C3=BCchele?= Date: Tue, 2 Apr 2019 05:00:45 -0700 Subject: [PATCH 028/347] use tinyURL Summary: As of today, Google URL shortener is retired. Moving to tinyURL instead. However, tinyURL doesn't support CORS headers, therefore additionally adding a CORS proxy. Reviewed By: davidaurelio Differential Revision: D14722636 fbshipit-source-id: 2ec41bb43287102543f1ac31bb76df57d71ba134 --- .../src/components/Playground/URLShortener.js | 22 ++++++------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/website/src/components/Playground/URLShortener.js b/website/src/components/Playground/URLShortener.js index 4dc99190..77130a0f 100644 --- a/website/src/components/Playground/URLShortener.js +++ b/website/src/components/Playground/URLShortener.js @@ -12,8 +12,6 @@ import React, {Component} from 'react'; import {Tooltip, notification, Button, Input} from 'antd'; import './URLShortener.css'; -const API_KEY = 'AIzaSyCRvdtNY07SGUokChS8oA9EaYJafFL0zMI'; - type State = { shortURL: ?string, loading: boolean, @@ -53,19 +51,13 @@ export default class URLShortener extends Component<{}, State> { }); } - fetch(`https://www.googleapis.com/urlshortener/v1/url?key=${API_KEY}`, { - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - kind: 'urlshortener#url', - longUrl: window.location.href, - }), - }) - .then(res => res.json()) - .then(({id}) => this.setState({shortURL: id, loading: false})) + fetch( + `https://cors-anywhere.herokuapp.com/tinyurl.com/api-create.php?url=${ + window.location.href + }`, + ) + .then(res => res.text()) + .then(shortURL => this.setState({shortURL, loading: false})) .catch(() => this.setState({shortURL: null, loading: false})); }, ); From 498c0ff4bf9b3818e42fd5a6e4a4b0a17a9ec2f2 Mon Sep 17 00:00:00 2001 From: Pritesh Nandgaonkar Date: Tue, 2 Apr 2019 05:05:20 -0700 Subject: [PATCH 029/347] New yoga and yogakit pod released Summary: I have released a new yoga and yogakit pod with 1.12.0-pre.2 Reviewed By: davidaurelio Differential Revision: D14722676 fbshipit-source-id: 7b379ee41d04a15e25dcb2e992f361d9403269c4 --- Yoga.podspec | 4 ++-- YogaKit.podspec | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Yoga.podspec b/Yoga.podspec index de4db9f3..099267f7 100644 --- a/Yoga.podspec +++ b/Yoga.podspec @@ -6,7 +6,7 @@ # Pod::Spec.new do |spec| spec.name = 'Yoga' - spec.version = '1.12.0-pre.1' + spec.version = '1.12.0-pre.2' spec.license = { :type => 'MIT', :file => "LICENSE" } spec.homepage = 'https://yogalayout.com/' spec.documentation_url = 'https://yogalayout.com/docs' @@ -19,7 +19,7 @@ Pod::Spec.new do |spec| :git => 'https://github.com/facebook/yoga.git', :tag => spec.version.to_s, } - spec.platforms = { :ios => "4.3", :osx => "10.7", :tvos => "10.0", :watchos => "2.0" } + spec.platforms = { :ios => "8.0", :osx => "10.7", :tvos => "10.0", :watchos => "2.0" } spec.module_name = 'yoga' spec.requires_arc = false spec.pod_target_xcconfig = { diff --git a/YogaKit.podspec b/YogaKit.podspec index 91b241c1..5051ff9e 100644 --- a/YogaKit.podspec +++ b/YogaKit.podspec @@ -6,7 +6,7 @@ # podspec = Pod::Spec.new do |spec| spec.name = 'YogaKit' - spec.version = '1.12.0-pre.1' + spec.version = '1.12.0-pre.2' spec.license = { :type => 'MIT', :file => "LICENSE" } spec.homepage = 'https://facebook.github.io/yoga/' spec.documentation_url = 'https://facebook.github.io/yoga/docs/' @@ -23,7 +23,7 @@ podspec = Pod::Spec.new do |spec| spec.platform = :ios spec.ios.deployment_target = '8.0' spec.ios.frameworks = 'UIKit' - spec.dependency 'Yoga', '1.12.0-pre.1' + spec.dependency 'Yoga', '1.12.0-pre.2' spec.source_files = 'YogaKit/Source/*.{h,m,swift}' spec.public_header_files = 'YogaKit/Source/{YGLayout,UIView+Yoga}.h' spec.private_header_files = 'YogaKit/Source/YGLayout+Private.h' From e0bc0ebe294b44d63bd5c06a246a4716bf0f5636 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Wed, 3 Apr 2019 08:40:03 -0700 Subject: [PATCH 030/347] Move `YGSetUsedCachedEntries` to internal header MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Summary: @public In order to get out of pre-releases again, we move `YGSetUsedCachedEntries` from `Yoga.h` to `Yoga-internal.h`. This way, it’s obvious that the function is not public, and we can remove it from future versions without breaking semver contracts. Reviewed By: SidharthGuglani Differential Revision: D14726029 fbshipit-source-id: 8d7e747e843bf5c4b5e1d4cfbfa37ca9d240dffb --- java/jni/YGJNI.cpp | 1 + yoga/Yoga-internal.h | 2 ++ yoga/Yoga.h | 2 -- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp index a7fef2e6..18de9246 100644 --- a/java/jni/YGJNI.cpp +++ b/java/jni/YGJNI.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include diff --git a/yoga/Yoga-internal.h b/yoga/Yoga-internal.h index f5cd6136..be815921 100644 --- a/yoga/Yoga-internal.h +++ b/yoga/Yoga-internal.h @@ -29,6 +29,8 @@ void YGNodeCalculateLayoutWithContext( YGDirection ownerDirection, void* layoutContext); +void YGSetUsedCachedEntries(size_t); + YG_EXTERN_C_END namespace facebook { diff --git a/yoga/Yoga.h b/yoga/Yoga.h index 7132a934..753a2f9f 100644 --- a/yoga/Yoga.h +++ b/yoga/Yoga.h @@ -411,8 +411,6 @@ WIN_EXPORT float YGRoundValueToPixelGrid( const bool forceCeil, const bool forceFloor); -void YGSetUsedCachedEntries(size_t); - YG_EXTERN_C_END #ifdef __cplusplus From a1e47e37ae4b788521168f96361755a353f2da9e Mon Sep 17 00:00:00 2001 From: Aditya Sharat Date: Wed, 3 Apr 2019 10:41:23 -0700 Subject: [PATCH 031/347] Add YogaNode.cloneWithoutChildren Summary: Adding flat clone method back to YogaNode for reconciliation. Reviewed By: davidaurelio Differential Revision: D14683019 fbshipit-source-id: 08ed2ffbb16052cb11aa464f67a7ba9a64297985 --- java/com/facebook/yoga/YogaNative.java | 1 + java/com/facebook/yoga/YogaNode.java | 2 ++ java/com/facebook/yoga/YogaNodeJNIBase.java | 17 ++++++++++++++++- java/jni/YGJNI.cpp | 9 +++++++++ 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/java/com/facebook/yoga/YogaNative.java b/java/com/facebook/yoga/YogaNative.java index 372fb3c0..8b81e929 100644 --- a/java/com/facebook/yoga/YogaNative.java +++ b/java/com/facebook/yoga/YogaNative.java @@ -111,4 +111,5 @@ public class YogaNative { static native void jni_YGNodeSetHasBaselineFunc(long nativePointer, boolean hasMeasureFunc); static native void jni_YGNodePrint(long nativePointer); static native void jni_YGNodeSetStyleInputs(long nativePointer, float[] styleInputsArray, int size); + static native long jni_YGNodeClone(long nativePointer); } diff --git a/java/com/facebook/yoga/YogaNode.java b/java/com/facebook/yoga/YogaNode.java index 66d743f5..a01a0bdd 100644 --- a/java/com/facebook/yoga/YogaNode.java +++ b/java/com/facebook/yoga/YogaNode.java @@ -221,4 +221,6 @@ public abstract class YogaNode { public abstract void print(); public abstract void setStyleInputs(float[] styleInputs, int size); + + public abstract YogaNode cloneWithoutChildren(); } diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index e07bbb86..c48162f4 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -12,7 +12,7 @@ import java.util.List; import javax.annotation.Nullable; @DoNotStrip -public abstract class YogaNodeJNIBase extends YogaNode { +public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { @Nullable private YogaNodeJNIBase mOwner; @Nullable private List mChildren; @@ -93,6 +93,21 @@ public abstract class YogaNodeJNIBase extends YogaNode { return YogaNative.jni_YGNodeIsReferenceBaseline(mNativePointer); } + @Override + public YogaNodeJNIBase cloneWithoutChildren() { + try { + YogaNodeJNIBase clonedYogaNode = (YogaNodeJNIBase) super.clone(); + long clonedNativePointer = YogaNative.jni_YGNodeClone(mNativePointer); + clonedYogaNode.mOwner = null; + clonedYogaNode.mNativePointer = clonedNativePointer; + clonedYogaNode.clearChildren(); + return clonedYogaNode; + } catch (CloneNotSupportedException ex) { + // This class implements Cloneable, this should not happen + throw new RuntimeException(ex); + } + } + private void clearChildren() { mChildren = null; YogaNative.jni_YGNodeClearChildren(mNativePointer); diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp index 18de9246..b8725c7e 100644 --- a/java/jni/YGJNI.cpp +++ b/java/jni/YGJNI.cpp @@ -372,6 +372,14 @@ static inline YGConfigRef _jlong2YGConfigRef(jlong addr) { return reinterpret_cast(static_cast(addr)); } +jlong jni_YGNodeClone(alias_ref thiz, jlong nativePointer) { + auto node = _jlong2YGNodeRef(nativePointer); + const YGNodeRef clonedYogaNode = YGNodeClone(node); + clonedYogaNode->setContext(node->getContext()); + + return reinterpret_cast(clonedYogaNode); +} + static YGSize YGJNIMeasureFunc( YGNodeRef node, float width, @@ -1103,6 +1111,7 @@ jint JNI_OnLoad(JavaVM* vm, void*) { YGMakeCriticalNativeMethod(jni_YGNodeStyleSetAspectRatio), YGMakeCriticalNativeMethod(jni_YGNodeGetInstanceCount), YGMakeCriticalNativeMethod(jni_YGNodePrint), + YGMakeNativeMethod(jni_YGNodeClone), YGMakeNativeMethod(jni_YGNodeSetStyleInputs), YGMakeNativeMethod(jni_YGConfigNew), YGMakeNativeMethod(jni_YGConfigFree), From 3d8afa9e90a06b4fa103e5f9c074b844e3238f44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20B=C3=BCchele?= Date: Thu, 4 Apr 2019 08:48:12 -0700 Subject: [PATCH 032/347] fixing playground links Summary: Updating links to playgrounds Reviewed By: davidaurelio Differential Revision: D14775759 fbshipit-source-id: 8c5c30aa63f2ec2787c1a15a72d09f4e642dd672 --- website/contents/contributing/writing-documentation.md | 2 +- website/contents/examples/flexible-text.md | 2 +- website/contents/examples/floating-buttons.md | 2 +- website/contents/examples/overlays.md | 2 +- website/src/components/Playground/index.js | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/website/contents/contributing/writing-documentation.md b/website/contents/contributing/writing-documentation.md index beff55a6..305626f1 100644 --- a/website/contents/contributing/writing-documentation.md +++ b/website/contents/contributing/writing-documentation.md @@ -44,7 +44,7 @@ If you would like to redirect to another page (potentially an external link) the ```markdown --- -path: "/playground#eyJ3aWR0aCI6IjYwMCIsImhlaWdodCI6NTAwLCJjaGlsZHJlbiI6W3t9LHt9LHt9XX0=" +path: "/playground?eyJ3aWR0aCI6IjYwMCIsImhlaWdodCI6NTAwLCJjaGlsZHJlbiI6W3t9LHt9LHt9XX0=" title: "Flex Direction" redirect: true --- diff --git a/website/contents/examples/flexible-text.md b/website/contents/examples/flexible-text.md index dc33e242..cb017448 100644 --- a/website/contents/examples/flexible-text.md +++ b/website/contents/examples/flexible-text.md @@ -1,5 +1,5 @@ --- -path: "/playground#eyJ3aWR0aCI6NTAwLCJoZWlnaHQiOjUwMCwiY2hpbGRyZW4iOlt7IndpZHRoIjoiNjAiLCJoZWlnaHQiOiI2MCIsIm1hcmdpbiI6eyJ0b3AiOiIyMCIsInJpZ2h0IjoiMjAiLCJib3R0b20iOiIyMCIsImxlZnQiOiIyMCJ9fSx7ImhlaWdodCI6IjYwIiwibWFyZ2luIjp7InRvcCI6IjIwIiwicmlnaHQiOiIyMCIsImJvdHRvbSI6IjIwIiwibGVmdCI6IjIwIn0sImZsZXhHcm93IjoiMSJ9LHsid2lkdGgiOiI0MCIsImhlaWdodCI6IjQwIiwibWFyZ2luIjp7InRvcCI6IjIwIiwicmlnaHQiOiIyMCIsImJvdHRvbSI6IjIwIiwibGVmdCI6IjIwIn19XX0=" +path: "/playground?eyJ3aWR0aCI6NTAwLCJoZWlnaHQiOjUwMCwiY2hpbGRyZW4iOlt7IndpZHRoIjoiNjAiLCJoZWlnaHQiOiI2MCIsIm1hcmdpbiI6eyJ0b3AiOiIyMCIsInJpZ2h0IjoiMjAiLCJib3R0b20iOiIyMCIsImxlZnQiOiIyMCJ9fSx7ImhlaWdodCI6IjYwIiwibWFyZ2luIjp7InRvcCI6IjIwIiwicmlnaHQiOiIyMCIsImJvdHRvbSI6IjIwIiwibGVmdCI6IjIwIn0sImZsZXhHcm93IjoiMSJ9LHsid2lkdGgiOiI0MCIsImhlaWdodCI6IjQwIiwibWFyZ2luIjp7InRvcCI6IjIwIiwicmlnaHQiOiIyMCIsImJvdHRvbSI6IjIwIiwibGVmdCI6IjIwIn19XX0=" title: "Flexible Text" redirect: true --- diff --git a/website/contents/examples/floating-buttons.md b/website/contents/examples/floating-buttons.md index 48f15dc5..e3d20b31 100644 --- a/website/contents/examples/floating-buttons.md +++ b/website/contents/examples/floating-buttons.md @@ -1,5 +1,5 @@ --- -path: "/playground#eyJ3aWR0aCI6NTAwLCJoZWlnaHQiOjUwMCwiY2hpbGRyZW4iOlt7IndpZHRoIjoxMDAsImhlaWdodCI6MTAwLCJwb3NpdGlvbiI6eyJ0b3AiOiJhdXRvIiwicmlnaHQiOiIxMCIsImJvdHRvbSI6IjEwIiwibGVmdCI6ImF1dG8ifSwicG9zaXRpb25UeXBlIjoxLCJtaW5XaWR0aCI6bnVsbCwibWF4V2lkdGgiOm51bGwsIm1pbkhlaWdodCI6bnVsbCwibWF4SGVpZ2h0IjpudWxsfSx7IndpZHRoIjoxMDAsImhlaWdodCI6MTAwLCJtaW5XaWR0aCI6bnVsbCwibWF4V2lkdGgiOm51bGwsIm1pbkhlaWdodCI6bnVsbCwibWF4SGVpZ2h0IjpudWxsfSx7IndpZHRoIjoxMDAsImhlaWdodCI6MTAwLCJtaW5XaWR0aCI6bnVsbCwibWF4V2lkdGgiOm51bGwsIm1pbkhlaWdodCI6bnVsbCwibWF4SGVpZ2h0IjpudWxsfSx7IndpZHRoIjoxMDAsImhlaWdodCI6MTAwLCJtaW5XaWR0aCI6bnVsbCwibWF4V2lkdGgiOm51bGwsIm1pbkhlaWdodCI6bnVsbCwibWF4SGVpZ2h0IjpudWxsfV0sIm1pbldpZHRoIjpudWxsLCJtYXhXaWR0aCI6bnVsbCwibWluSGVpZ2h0IjpudWxsLCJtYXhIZWlnaHQiOm51bGx9" +path: "/playground?eyJ3aWR0aCI6NTAwLCJoZWlnaHQiOjUwMCwiY2hpbGRyZW4iOlt7IndpZHRoIjoxMDAsImhlaWdodCI6MTAwLCJwb3NpdGlvbiI6eyJ0b3AiOiJhdXRvIiwicmlnaHQiOiIxMCIsImJvdHRvbSI6IjEwIiwibGVmdCI6ImF1dG8ifSwicG9zaXRpb25UeXBlIjoxLCJtaW5XaWR0aCI6bnVsbCwibWF4V2lkdGgiOm51bGwsIm1pbkhlaWdodCI6bnVsbCwibWF4SGVpZ2h0IjpudWxsfSx7IndpZHRoIjoxMDAsImhlaWdodCI6MTAwLCJtaW5XaWR0aCI6bnVsbCwibWF4V2lkdGgiOm51bGwsIm1pbkhlaWdodCI6bnVsbCwibWF4SGVpZ2h0IjpudWxsfSx7IndpZHRoIjoxMDAsImhlaWdodCI6MTAwLCJtaW5XaWR0aCI6bnVsbCwibWF4V2lkdGgiOm51bGwsIm1pbkhlaWdodCI6bnVsbCwibWF4SGVpZ2h0IjpudWxsfSx7IndpZHRoIjoxMDAsImhlaWdodCI6MTAwLCJtaW5XaWR0aCI6bnVsbCwibWF4V2lkdGgiOm51bGwsIm1pbkhlaWdodCI6bnVsbCwibWF4SGVpZ2h0IjpudWxsfV0sIm1pbldpZHRoIjpudWxsLCJtYXhXaWR0aCI6bnVsbCwibWluSGVpZ2h0IjpudWxsLCJtYXhIZWlnaHQiOm51bGx9" title: "Floating Buttons" redirect: true --- diff --git a/website/contents/examples/overlays.md b/website/contents/examples/overlays.md index 7ef0853c..0b9cf3a2 100644 --- a/website/contents/examples/overlays.md +++ b/website/contents/examples/overlays.md @@ -1,5 +1,5 @@ --- -path: "/playground#eyJ3aWR0aCI6NTAwLCJoZWlnaHQiOjUwMCwiY2hpbGRyZW4iOlt7IndpZHRoIjoxMDAsImhlaWdodCI6MTAwLCJtaW5XaWR0aCI6bnVsbCwibWF4V2lkdGgiOm51bGwsIm1pbkhlaWdodCI6bnVsbCwibWF4SGVpZ2h0IjpudWxsfSx7IndpZHRoIjoxMDAsImhlaWdodCI6MTAwLCJtaW5XaWR0aCI6bnVsbCwibWF4V2lkdGgiOm51bGwsIm1pbkhlaWdodCI6bnVsbCwibWF4SGVpZ2h0IjpudWxsfSx7IndpZHRoIjoiMTAwJSIsImhlaWdodCI6IjEwMCUiLCJwb3NpdGlvblR5cGUiOjEsIm1pbldpZHRoIjpudWxsLCJtYXhXaWR0aCI6bnVsbCwibWluSGVpZ2h0IjpudWxsLCJtYXhIZWlnaHQiOm51bGx9XSwibWluV2lkdGgiOm51bGwsIm1heFdpZHRoIjpudWxsLCJtaW5IZWlnaHQiOm51bGwsIm1heEhlaWdodCI6bnVsbH0=" +path: "/playground?eyJ3aWR0aCI6NTAwLCJoZWlnaHQiOjUwMCwiY2hpbGRyZW4iOlt7IndpZHRoIjoxMDAsImhlaWdodCI6MTAwLCJtaW5XaWR0aCI6bnVsbCwibWF4V2lkdGgiOm51bGwsIm1pbkhlaWdodCI6bnVsbCwibWF4SGVpZ2h0IjpudWxsfSx7IndpZHRoIjoxMDAsImhlaWdodCI6MTAwLCJtaW5XaWR0aCI6bnVsbCwibWF4V2lkdGgiOm51bGwsIm1pbkhlaWdodCI6bnVsbCwibWF4SGVpZ2h0IjpudWxsfSx7IndpZHRoIjoiMTAwJSIsImhlaWdodCI6IjEwMCUiLCJwb3NpdGlvblR5cGUiOjEsIm1pbldpZHRoIjpudWxsLCJtYXhXaWR0aCI6bnVsbCwibWluSGVpZ2h0IjpudWxsLCJtYXhIZWlnaHQiOm51bGx9XSwibWluV2lkdGgiOm51bGwsIm1heFdpZHRoIjpudWxsLCJtaW5IZWlnaHQiOm51bGwsIm1heEhlaWdodCI6bnVsbH0=" title: "Overlays" redirect: true --- diff --git a/website/src/components/Playground/index.js b/website/src/components/Playground/index.js index 5a39f236..53b0e658 100644 --- a/website/src/components/Playground/index.js +++ b/website/src/components/Playground/index.js @@ -264,7 +264,7 @@ export default class Playground extends Component { ) : ( From bc7e504b29620ec458a22b21a22eb5e9656c7bac Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Mon, 8 Apr 2019 03:16:53 -0700 Subject: [PATCH 033/347] Fix bugs around `align-content` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Summary: @public Regenerating the “golden master” tests with chrome surfaced different bugs around `align-content`: - a misunderstanding that values in `align-content` only applied *if there is only one line.* In fact, it applies *every time* a container is set to `flex-wrap: wrap`. Chrome had this wrong, and as such our tests were generated with incorrect parameters. - empty children growing to the cross axis size of the container, even when `align-content` is different from `stretch`. This was implemented incorrectly in Chrome as well. Here, we fix it with an extra check. Reviewed By: SidharthGuglani Differential Revision: D14725402 fbshipit-source-id: a45bebdadb9c694dc0eb7e27cb52b3d247f81c50 --- .../tests/Facebook.Yoga/YGAlignContentTest.cs | 66 +++++++++---------- csharp/tests/Facebook.Yoga/YGFlexWrapTest.cs | 8 +-- .../com/facebook/yoga/YGAlignContentTest.java | 66 +++++++++---------- .../com/facebook/yoga/YGAndroidNewsFeed.java | 18 ++--- .../com/facebook/yoga/YGFlexWrapTest.java | 8 +-- .../tests/Facebook.Yoga/YGAlignContentTest.js | 64 +++++++++--------- .../tests/Facebook.Yoga/YGFlexWrapTest.js | 8 +-- tests/YGAlignContentTest.cpp | 64 +++++++++--------- tests/YGFlexWrapTest.cpp | 8 +-- yoga/Yoga.cpp | 17 +++-- 10 files changed, 164 insertions(+), 163 deletions(-) diff --git a/csharp/tests/Facebook.Yoga/YGAlignContentTest.cs b/csharp/tests/Facebook.Yoga/YGAlignContentTest.cs index 013c59be..dda26398 100644 --- a/csharp/tests/Facebook.Yoga/YGAlignContentTest.cs +++ b/csharp/tests/Facebook.Yoga/YGAlignContentTest.cs @@ -361,39 +361,6 @@ namespace Facebook.Yoga Assert.AreEqual(100f, root.LayoutWidth); Assert.AreEqual(100f, root.LayoutHeight); - Assert.AreEqual(0f, root_child0.LayoutX); - Assert.AreEqual(0f, root_child0.LayoutY); - Assert.AreEqual(50f, root_child0.LayoutWidth); - Assert.AreEqual(10f, root_child0.LayoutHeight); - - Assert.AreEqual(0f, root_child1.LayoutX); - Assert.AreEqual(10f, root_child1.LayoutY); - Assert.AreEqual(50f, root_child1.LayoutWidth); - Assert.AreEqual(10f, root_child1.LayoutHeight); - - Assert.AreEqual(0f, root_child2.LayoutX); - Assert.AreEqual(20f, root_child2.LayoutY); - Assert.AreEqual(50f, root_child2.LayoutWidth); - Assert.AreEqual(10f, root_child2.LayoutHeight); - - Assert.AreEqual(0f, root_child3.LayoutX); - Assert.AreEqual(30f, root_child3.LayoutY); - Assert.AreEqual(50f, root_child3.LayoutWidth); - Assert.AreEqual(10f, root_child3.LayoutHeight); - - Assert.AreEqual(0f, root_child4.LayoutX); - Assert.AreEqual(40f, root_child4.LayoutY); - Assert.AreEqual(50f, root_child4.LayoutWidth); - Assert.AreEqual(10f, root_child4.LayoutHeight); - - root.StyleDirection = YogaDirection.RTL; - root.CalculateLayout(); - - Assert.AreEqual(0f, root.LayoutX); - Assert.AreEqual(0f, root.LayoutY); - Assert.AreEqual(100f, root.LayoutWidth); - Assert.AreEqual(100f, root.LayoutHeight); - Assert.AreEqual(50f, root_child0.LayoutX); Assert.AreEqual(0f, root_child0.LayoutY); Assert.AreEqual(50f, root_child0.LayoutWidth); @@ -418,6 +385,39 @@ namespace Facebook.Yoga Assert.AreEqual(40f, root_child4.LayoutY); Assert.AreEqual(50f, root_child4.LayoutWidth); Assert.AreEqual(10f, root_child4.LayoutHeight); + + root.StyleDirection = YogaDirection.RTL; + root.CalculateLayout(); + + Assert.AreEqual(0f, root.LayoutX); + Assert.AreEqual(0f, root.LayoutY); + Assert.AreEqual(100f, root.LayoutWidth); + Assert.AreEqual(100f, root.LayoutHeight); + + Assert.AreEqual(0f, root_child0.LayoutX); + Assert.AreEqual(0f, root_child0.LayoutY); + Assert.AreEqual(50f, root_child0.LayoutWidth); + Assert.AreEqual(10f, root_child0.LayoutHeight); + + Assert.AreEqual(0f, root_child1.LayoutX); + Assert.AreEqual(10f, root_child1.LayoutY); + Assert.AreEqual(50f, root_child1.LayoutWidth); + Assert.AreEqual(10f, root_child1.LayoutHeight); + + Assert.AreEqual(0f, root_child2.LayoutX); + Assert.AreEqual(20f, root_child2.LayoutY); + Assert.AreEqual(50f, root_child2.LayoutWidth); + Assert.AreEqual(10f, root_child2.LayoutHeight); + + Assert.AreEqual(0f, root_child3.LayoutX); + Assert.AreEqual(30f, root_child3.LayoutY); + Assert.AreEqual(50f, root_child3.LayoutWidth); + Assert.AreEqual(10f, root_child3.LayoutHeight); + + Assert.AreEqual(0f, root_child4.LayoutX); + Assert.AreEqual(40f, root_child4.LayoutY); + Assert.AreEqual(50f, root_child4.LayoutWidth); + Assert.AreEqual(10f, root_child4.LayoutHeight); } [Test] diff --git a/csharp/tests/Facebook.Yoga/YGFlexWrapTest.cs b/csharp/tests/Facebook.Yoga/YGFlexWrapTest.cs index a397ca50..5e3189d6 100644 --- a/csharp/tests/Facebook.Yoga/YGFlexWrapTest.cs +++ b/csharp/tests/Facebook.Yoga/YGFlexWrapTest.cs @@ -529,12 +529,12 @@ namespace Facebook.Yoga Assert.AreEqual(0f, root_child0.LayoutX); Assert.AreEqual(0f, root_child0.LayoutY); Assert.AreEqual(50f, root_child0.LayoutWidth); - Assert.AreEqual(100f, root_child0.LayoutHeight); + Assert.AreEqual(0f, root_child0.LayoutHeight); Assert.AreEqual(50f, root_child1.LayoutX); Assert.AreEqual(0f, root_child1.LayoutY); Assert.AreEqual(50f, root_child1.LayoutWidth); - Assert.AreEqual(100f, root_child1.LayoutHeight); + Assert.AreEqual(0f, root_child1.LayoutHeight); root.StyleDirection = YogaDirection.RTL; root.CalculateLayout(); @@ -547,12 +547,12 @@ namespace Facebook.Yoga Assert.AreEqual(100f, root_child0.LayoutX); Assert.AreEqual(0f, root_child0.LayoutY); Assert.AreEqual(50f, root_child0.LayoutWidth); - Assert.AreEqual(100f, root_child0.LayoutHeight); + Assert.AreEqual(0f, root_child0.LayoutHeight); Assert.AreEqual(50f, root_child1.LayoutX); Assert.AreEqual(0f, root_child1.LayoutY); Assert.AreEqual(50f, root_child1.LayoutWidth); - Assert.AreEqual(100f, root_child1.LayoutHeight); + Assert.AreEqual(0f, root_child1.LayoutHeight); } [Test] diff --git a/java/tests/com/facebook/yoga/YGAlignContentTest.java b/java/tests/com/facebook/yoga/YGAlignContentTest.java index bdc2c60d..098cab51 100644 --- a/java/tests/com/facebook/yoga/YGAlignContentTest.java +++ b/java/tests/com/facebook/yoga/YGAlignContentTest.java @@ -366,39 +366,6 @@ public class YGAlignContentTest { assertEquals(100f, root.getLayoutWidth(), 0.0f); assertEquals(100f, root.getLayoutHeight(), 0.0f); - assertEquals(0f, root_child0.getLayoutX(), 0.0f); - assertEquals(0f, root_child0.getLayoutY(), 0.0f); - assertEquals(50f, root_child0.getLayoutWidth(), 0.0f); - assertEquals(10f, root_child0.getLayoutHeight(), 0.0f); - - assertEquals(0f, root_child1.getLayoutX(), 0.0f); - assertEquals(10f, root_child1.getLayoutY(), 0.0f); - assertEquals(50f, root_child1.getLayoutWidth(), 0.0f); - assertEquals(10f, root_child1.getLayoutHeight(), 0.0f); - - assertEquals(0f, root_child2.getLayoutX(), 0.0f); - assertEquals(20f, root_child2.getLayoutY(), 0.0f); - assertEquals(50f, root_child2.getLayoutWidth(), 0.0f); - assertEquals(10f, root_child2.getLayoutHeight(), 0.0f); - - assertEquals(0f, root_child3.getLayoutX(), 0.0f); - assertEquals(30f, root_child3.getLayoutY(), 0.0f); - assertEquals(50f, root_child3.getLayoutWidth(), 0.0f); - assertEquals(10f, root_child3.getLayoutHeight(), 0.0f); - - assertEquals(0f, root_child4.getLayoutX(), 0.0f); - assertEquals(40f, root_child4.getLayoutY(), 0.0f); - assertEquals(50f, root_child4.getLayoutWidth(), 0.0f); - assertEquals(10f, root_child4.getLayoutHeight(), 0.0f); - - root.setDirection(YogaDirection.RTL); - root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED); - - assertEquals(0f, root.getLayoutX(), 0.0f); - assertEquals(0f, root.getLayoutY(), 0.0f); - assertEquals(100f, root.getLayoutWidth(), 0.0f); - assertEquals(100f, root.getLayoutHeight(), 0.0f); - assertEquals(50f, root_child0.getLayoutX(), 0.0f); assertEquals(0f, root_child0.getLayoutY(), 0.0f); assertEquals(50f, root_child0.getLayoutWidth(), 0.0f); @@ -423,6 +390,39 @@ public class YGAlignContentTest { assertEquals(40f, root_child4.getLayoutY(), 0.0f); assertEquals(50f, root_child4.getLayoutWidth(), 0.0f); assertEquals(10f, root_child4.getLayoutHeight(), 0.0f); + + root.setDirection(YogaDirection.RTL); + root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED); + + assertEquals(0f, root.getLayoutX(), 0.0f); + assertEquals(0f, root.getLayoutY(), 0.0f); + assertEquals(100f, root.getLayoutWidth(), 0.0f); + assertEquals(100f, root.getLayoutHeight(), 0.0f); + + assertEquals(0f, root_child0.getLayoutX(), 0.0f); + assertEquals(0f, root_child0.getLayoutY(), 0.0f); + assertEquals(50f, root_child0.getLayoutWidth(), 0.0f); + assertEquals(10f, root_child0.getLayoutHeight(), 0.0f); + + assertEquals(0f, root_child1.getLayoutX(), 0.0f); + assertEquals(10f, root_child1.getLayoutY(), 0.0f); + assertEquals(50f, root_child1.getLayoutWidth(), 0.0f); + assertEquals(10f, root_child1.getLayoutHeight(), 0.0f); + + assertEquals(0f, root_child2.getLayoutX(), 0.0f); + assertEquals(20f, root_child2.getLayoutY(), 0.0f); + assertEquals(50f, root_child2.getLayoutWidth(), 0.0f); + assertEquals(10f, root_child2.getLayoutHeight(), 0.0f); + + assertEquals(0f, root_child3.getLayoutX(), 0.0f); + assertEquals(30f, root_child3.getLayoutY(), 0.0f); + assertEquals(50f, root_child3.getLayoutWidth(), 0.0f); + assertEquals(10f, root_child3.getLayoutHeight(), 0.0f); + + assertEquals(0f, root_child4.getLayoutX(), 0.0f); + assertEquals(40f, root_child4.getLayoutY(), 0.0f); + assertEquals(50f, root_child4.getLayoutWidth(), 0.0f); + assertEquals(10f, root_child4.getLayoutHeight(), 0.0f); } @Test diff --git a/java/tests/com/facebook/yoga/YGAndroidNewsFeed.java b/java/tests/com/facebook/yoga/YGAndroidNewsFeed.java index 687518a2..ae07ea32 100644 --- a/java/tests/com/facebook/yoga/YGAndroidNewsFeed.java +++ b/java/tests/com/facebook/yoga/YGAndroidNewsFeed.java @@ -59,8 +59,7 @@ public class YGAndroidNewsFeed { root_child0_child0_child0_child0_child0_child0.setAlignContent(YogaAlign.STRETCH); root_child0_child0_child0_child0_child0_child0.setWidth(120f); root_child0_child0_child0_child0_child0_child0.setHeight(120f); - root_child0_child0_child0_child0_child0.addChildAt( - root_child0_child0_child0_child0_child0_child0, 0); + root_child0_child0_child0_child0_child0.addChildAt(root_child0_child0_child0_child0_child0_child0, 0); final YogaNode root_child0_child0_child0_child0_child1 = createNode(config); root_child0_child0_child0_child0_child1.setAlignContent(YogaAlign.STRETCH); @@ -76,14 +75,12 @@ public class YGAndroidNewsFeed { root_child0_child0_child0_child0_child1_child0.setFlexDirection(YogaFlexDirection.ROW); root_child0_child0_child0_child0_child1_child0.setAlignContent(YogaAlign.STRETCH); root_child0_child0_child0_child0_child1_child0.setFlexShrink(1f); - root_child0_child0_child0_child0_child1.addChildAt( - root_child0_child0_child0_child0_child1_child0, 0); + root_child0_child0_child0_child0_child1.addChildAt(root_child0_child0_child0_child0_child1_child0, 0); final YogaNode root_child0_child0_child0_child0_child1_child1 = createNode(config); root_child0_child0_child0_child0_child1_child1.setAlignContent(YogaAlign.STRETCH); root_child0_child0_child0_child0_child1_child1.setFlexShrink(1f); - root_child0_child0_child0_child0_child1.addChildAt( - root_child0_child0_child0_child0_child1_child1, 1); + root_child0_child0_child0_child0_child1.addChildAt(root_child0_child0_child0_child0_child1_child1, 1); final YogaNode root_child0_child0_child1 = createNode(config); root_child0_child0_child1.setAlignContent(YogaAlign.STRETCH); @@ -106,8 +103,7 @@ public class YGAndroidNewsFeed { root_child0_child0_child1_child0_child0_child0.setAlignContent(YogaAlign.STRETCH); root_child0_child0_child1_child0_child0_child0.setWidth(72f); root_child0_child0_child1_child0_child0_child0.setHeight(72f); - root_child0_child0_child1_child0_child0.addChildAt( - root_child0_child0_child1_child0_child0_child0, 0); + root_child0_child0_child1_child0_child0.addChildAt(root_child0_child0_child1_child0_child0_child0, 0); final YogaNode root_child0_child0_child1_child0_child1 = createNode(config); root_child0_child0_child1_child0_child1.setAlignContent(YogaAlign.STRETCH); @@ -123,14 +119,12 @@ public class YGAndroidNewsFeed { root_child0_child0_child1_child0_child1_child0.setFlexDirection(YogaFlexDirection.ROW); root_child0_child0_child1_child0_child1_child0.setAlignContent(YogaAlign.STRETCH); root_child0_child0_child1_child0_child1_child0.setFlexShrink(1f); - root_child0_child0_child1_child0_child1.addChildAt( - root_child0_child0_child1_child0_child1_child0, 0); + root_child0_child0_child1_child0_child1.addChildAt(root_child0_child0_child1_child0_child1_child0, 0); final YogaNode root_child0_child0_child1_child0_child1_child1 = createNode(config); root_child0_child0_child1_child0_child1_child1.setAlignContent(YogaAlign.STRETCH); root_child0_child0_child1_child0_child1_child1.setFlexShrink(1f); - root_child0_child0_child1_child0_child1.addChildAt( - root_child0_child0_child1_child0_child1_child1, 1); + root_child0_child0_child1_child0_child1.addChildAt(root_child0_child0_child1_child0_child1_child1, 1); root.setDirection(YogaDirection.LTR); root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED); diff --git a/java/tests/com/facebook/yoga/YGFlexWrapTest.java b/java/tests/com/facebook/yoga/YGFlexWrapTest.java index 3f46dffd..ea347297 100644 --- a/java/tests/com/facebook/yoga/YGFlexWrapTest.java +++ b/java/tests/com/facebook/yoga/YGFlexWrapTest.java @@ -531,12 +531,12 @@ public class YGFlexWrapTest { assertEquals(0f, root_child0.getLayoutX(), 0.0f); assertEquals(0f, root_child0.getLayoutY(), 0.0f); assertEquals(50f, root_child0.getLayoutWidth(), 0.0f); - assertEquals(100f, root_child0.getLayoutHeight(), 0.0f); + assertEquals(0f, root_child0.getLayoutHeight(), 0.0f); assertEquals(50f, root_child1.getLayoutX(), 0.0f); assertEquals(0f, root_child1.getLayoutY(), 0.0f); assertEquals(50f, root_child1.getLayoutWidth(), 0.0f); - assertEquals(100f, root_child1.getLayoutHeight(), 0.0f); + assertEquals(0f, root_child1.getLayoutHeight(), 0.0f); root.setDirection(YogaDirection.RTL); root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED); @@ -549,12 +549,12 @@ public class YGFlexWrapTest { assertEquals(100f, root_child0.getLayoutX(), 0.0f); assertEquals(0f, root_child0.getLayoutY(), 0.0f); assertEquals(50f, root_child0.getLayoutWidth(), 0.0f); - assertEquals(100f, root_child0.getLayoutHeight(), 0.0f); + assertEquals(0f, root_child0.getLayoutHeight(), 0.0f); assertEquals(50f, root_child1.getLayoutX(), 0.0f); assertEquals(0f, root_child1.getLayoutY(), 0.0f); assertEquals(50f, root_child1.getLayoutWidth(), 0.0f); - assertEquals(100f, root_child1.getLayoutHeight(), 0.0f); + assertEquals(0f, root_child1.getLayoutHeight(), 0.0f); } @Test diff --git a/javascript/tests/Facebook.Yoga/YGAlignContentTest.js b/javascript/tests/Facebook.Yoga/YGAlignContentTest.js index 4414ed66..1ff0eca8 100644 --- a/javascript/tests/Facebook.Yoga/YGAlignContentTest.js +++ b/javascript/tests/Facebook.Yoga/YGAlignContentTest.js @@ -362,38 +362,6 @@ it("align_content_flex_end", function () { console.assert(100 === root.getComputedWidth(), "100 === root.getComputedWidth() (" + root.getComputedWidth() + ")"); console.assert(100 === root.getComputedHeight(), "100 === root.getComputedHeight() (" + root.getComputedHeight() + ")"); - console.assert(0 === root_child0.getComputedLeft(), "0 === root_child0.getComputedLeft() (" + root_child0.getComputedLeft() + ")"); - console.assert(0 === root_child0.getComputedTop(), "0 === root_child0.getComputedTop() (" + root_child0.getComputedTop() + ")"); - console.assert(50 === root_child0.getComputedWidth(), "50 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")"); - console.assert(10 === root_child0.getComputedHeight(), "10 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")"); - - console.assert(0 === root_child1.getComputedLeft(), "0 === root_child1.getComputedLeft() (" + root_child1.getComputedLeft() + ")"); - console.assert(10 === root_child1.getComputedTop(), "10 === root_child1.getComputedTop() (" + root_child1.getComputedTop() + ")"); - console.assert(50 === root_child1.getComputedWidth(), "50 === root_child1.getComputedWidth() (" + root_child1.getComputedWidth() + ")"); - console.assert(10 === root_child1.getComputedHeight(), "10 === root_child1.getComputedHeight() (" + root_child1.getComputedHeight() + ")"); - - console.assert(0 === root_child2.getComputedLeft(), "0 === root_child2.getComputedLeft() (" + root_child2.getComputedLeft() + ")"); - console.assert(20 === root_child2.getComputedTop(), "20 === root_child2.getComputedTop() (" + root_child2.getComputedTop() + ")"); - console.assert(50 === root_child2.getComputedWidth(), "50 === root_child2.getComputedWidth() (" + root_child2.getComputedWidth() + ")"); - console.assert(10 === root_child2.getComputedHeight(), "10 === root_child2.getComputedHeight() (" + root_child2.getComputedHeight() + ")"); - - console.assert(0 === root_child3.getComputedLeft(), "0 === root_child3.getComputedLeft() (" + root_child3.getComputedLeft() + ")"); - console.assert(30 === root_child3.getComputedTop(), "30 === root_child3.getComputedTop() (" + root_child3.getComputedTop() + ")"); - console.assert(50 === root_child3.getComputedWidth(), "50 === root_child3.getComputedWidth() (" + root_child3.getComputedWidth() + ")"); - console.assert(10 === root_child3.getComputedHeight(), "10 === root_child3.getComputedHeight() (" + root_child3.getComputedHeight() + ")"); - - console.assert(0 === root_child4.getComputedLeft(), "0 === root_child4.getComputedLeft() (" + root_child4.getComputedLeft() + ")"); - console.assert(40 === root_child4.getComputedTop(), "40 === root_child4.getComputedTop() (" + root_child4.getComputedTop() + ")"); - console.assert(50 === root_child4.getComputedWidth(), "50 === root_child4.getComputedWidth() (" + root_child4.getComputedWidth() + ")"); - console.assert(10 === root_child4.getComputedHeight(), "10 === root_child4.getComputedHeight() (" + root_child4.getComputedHeight() + ")"); - - root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_RTL); - - console.assert(0 === root.getComputedLeft(), "0 === root.getComputedLeft() (" + root.getComputedLeft() + ")"); - console.assert(0 === root.getComputedTop(), "0 === root.getComputedTop() (" + root.getComputedTop() + ")"); - console.assert(100 === root.getComputedWidth(), "100 === root.getComputedWidth() (" + root.getComputedWidth() + ")"); - console.assert(100 === root.getComputedHeight(), "100 === root.getComputedHeight() (" + root.getComputedHeight() + ")"); - console.assert(50 === root_child0.getComputedLeft(), "50 === root_child0.getComputedLeft() (" + root_child0.getComputedLeft() + ")"); console.assert(0 === root_child0.getComputedTop(), "0 === root_child0.getComputedTop() (" + root_child0.getComputedTop() + ")"); console.assert(50 === root_child0.getComputedWidth(), "50 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")"); @@ -418,6 +386,38 @@ it("align_content_flex_end", function () { console.assert(40 === root_child4.getComputedTop(), "40 === root_child4.getComputedTop() (" + root_child4.getComputedTop() + ")"); console.assert(50 === root_child4.getComputedWidth(), "50 === root_child4.getComputedWidth() (" + root_child4.getComputedWidth() + ")"); console.assert(10 === root_child4.getComputedHeight(), "10 === root_child4.getComputedHeight() (" + root_child4.getComputedHeight() + ")"); + + root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_RTL); + + console.assert(0 === root.getComputedLeft(), "0 === root.getComputedLeft() (" + root.getComputedLeft() + ")"); + console.assert(0 === root.getComputedTop(), "0 === root.getComputedTop() (" + root.getComputedTop() + ")"); + console.assert(100 === root.getComputedWidth(), "100 === root.getComputedWidth() (" + root.getComputedWidth() + ")"); + console.assert(100 === root.getComputedHeight(), "100 === root.getComputedHeight() (" + root.getComputedHeight() + ")"); + + console.assert(0 === root_child0.getComputedLeft(), "0 === root_child0.getComputedLeft() (" + root_child0.getComputedLeft() + ")"); + console.assert(0 === root_child0.getComputedTop(), "0 === root_child0.getComputedTop() (" + root_child0.getComputedTop() + ")"); + console.assert(50 === root_child0.getComputedWidth(), "50 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")"); + console.assert(10 === root_child0.getComputedHeight(), "10 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")"); + + console.assert(0 === root_child1.getComputedLeft(), "0 === root_child1.getComputedLeft() (" + root_child1.getComputedLeft() + ")"); + console.assert(10 === root_child1.getComputedTop(), "10 === root_child1.getComputedTop() (" + root_child1.getComputedTop() + ")"); + console.assert(50 === root_child1.getComputedWidth(), "50 === root_child1.getComputedWidth() (" + root_child1.getComputedWidth() + ")"); + console.assert(10 === root_child1.getComputedHeight(), "10 === root_child1.getComputedHeight() (" + root_child1.getComputedHeight() + ")"); + + console.assert(0 === root_child2.getComputedLeft(), "0 === root_child2.getComputedLeft() (" + root_child2.getComputedLeft() + ")"); + console.assert(20 === root_child2.getComputedTop(), "20 === root_child2.getComputedTop() (" + root_child2.getComputedTop() + ")"); + console.assert(50 === root_child2.getComputedWidth(), "50 === root_child2.getComputedWidth() (" + root_child2.getComputedWidth() + ")"); + console.assert(10 === root_child2.getComputedHeight(), "10 === root_child2.getComputedHeight() (" + root_child2.getComputedHeight() + ")"); + + console.assert(0 === root_child3.getComputedLeft(), "0 === root_child3.getComputedLeft() (" + root_child3.getComputedLeft() + ")"); + console.assert(30 === root_child3.getComputedTop(), "30 === root_child3.getComputedTop() (" + root_child3.getComputedTop() + ")"); + console.assert(50 === root_child3.getComputedWidth(), "50 === root_child3.getComputedWidth() (" + root_child3.getComputedWidth() + ")"); + console.assert(10 === root_child3.getComputedHeight(), "10 === root_child3.getComputedHeight() (" + root_child3.getComputedHeight() + ")"); + + console.assert(0 === root_child4.getComputedLeft(), "0 === root_child4.getComputedLeft() (" + root_child4.getComputedLeft() + ")"); + console.assert(40 === root_child4.getComputedTop(), "40 === root_child4.getComputedTop() (" + root_child4.getComputedTop() + ")"); + console.assert(50 === root_child4.getComputedWidth(), "50 === root_child4.getComputedWidth() (" + root_child4.getComputedWidth() + ")"); + console.assert(10 === root_child4.getComputedHeight(), "10 === root_child4.getComputedHeight() (" + root_child4.getComputedHeight() + ")"); } finally { if (typeof root !== "undefined") { root.freeRecursive(); diff --git a/javascript/tests/Facebook.Yoga/YGFlexWrapTest.js b/javascript/tests/Facebook.Yoga/YGFlexWrapTest.js index 50f1cb09..8ea08d21 100644 --- a/javascript/tests/Facebook.Yoga/YGFlexWrapTest.js +++ b/javascript/tests/Facebook.Yoga/YGFlexWrapTest.js @@ -539,12 +539,12 @@ it("flex_wrap_align_stretch_fits_one_row", function () { console.assert(0 === root_child0.getComputedLeft(), "0 === root_child0.getComputedLeft() (" + root_child0.getComputedLeft() + ")"); console.assert(0 === root_child0.getComputedTop(), "0 === root_child0.getComputedTop() (" + root_child0.getComputedTop() + ")"); console.assert(50 === root_child0.getComputedWidth(), "50 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")"); - console.assert(100 === root_child0.getComputedHeight(), "100 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")"); + console.assert(0 === root_child0.getComputedHeight(), "0 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")"); console.assert(50 === root_child1.getComputedLeft(), "50 === root_child1.getComputedLeft() (" + root_child1.getComputedLeft() + ")"); console.assert(0 === root_child1.getComputedTop(), "0 === root_child1.getComputedTop() (" + root_child1.getComputedTop() + ")"); console.assert(50 === root_child1.getComputedWidth(), "50 === root_child1.getComputedWidth() (" + root_child1.getComputedWidth() + ")"); - console.assert(100 === root_child1.getComputedHeight(), "100 === root_child1.getComputedHeight() (" + root_child1.getComputedHeight() + ")"); + console.assert(0 === root_child1.getComputedHeight(), "0 === root_child1.getComputedHeight() (" + root_child1.getComputedHeight() + ")"); root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_RTL); @@ -556,12 +556,12 @@ it("flex_wrap_align_stretch_fits_one_row", function () { console.assert(100 === root_child0.getComputedLeft(), "100 === root_child0.getComputedLeft() (" + root_child0.getComputedLeft() + ")"); console.assert(0 === root_child0.getComputedTop(), "0 === root_child0.getComputedTop() (" + root_child0.getComputedTop() + ")"); console.assert(50 === root_child0.getComputedWidth(), "50 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")"); - console.assert(100 === root_child0.getComputedHeight(), "100 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")"); + console.assert(0 === root_child0.getComputedHeight(), "0 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")"); console.assert(50 === root_child1.getComputedLeft(), "50 === root_child1.getComputedLeft() (" + root_child1.getComputedLeft() + ")"); console.assert(0 === root_child1.getComputedTop(), "0 === root_child1.getComputedTop() (" + root_child1.getComputedTop() + ")"); console.assert(50 === root_child1.getComputedWidth(), "50 === root_child1.getComputedWidth() (" + root_child1.getComputedWidth() + ")"); - console.assert(100 === root_child1.getComputedHeight(), "100 === root_child1.getComputedHeight() (" + root_child1.getComputedHeight() + ")"); + console.assert(0 === root_child1.getComputedHeight(), "0 === root_child1.getComputedHeight() (" + root_child1.getComputedHeight() + ")"); } finally { if (typeof root !== "undefined") { root.freeRecursive(); diff --git a/tests/YGAlignContentTest.cpp b/tests/YGAlignContentTest.cpp index 0c6f5322..d988b9d7 100644 --- a/tests/YGAlignContentTest.cpp +++ b/tests/YGAlignContentTest.cpp @@ -354,38 +354,6 @@ TEST(YogaTest, align_content_flex_end) { ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root)); ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); - ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0)); - ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0)); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1)); - ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1)); - ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1)); - ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1)); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2)); - ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2)); - ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2)); - ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2)); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3)); - ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child3)); - ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3)); - ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child3)); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child4)); - ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child4)); - ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4)); - ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child4)); - - YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root)); - ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0)); @@ -411,6 +379,38 @@ TEST(YogaTest, align_content_flex_end) { ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4)); ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child4)); + YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); + ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0)); + ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1)); + ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1)); + ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1)); + ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2)); + ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2)); + ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2)); + ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3)); + ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child3)); + ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3)); + ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child3)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child4)); + ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child4)); + ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child4)); + ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child4)); + YGNodeFreeRecursive(root); YGConfigFree(config); diff --git a/tests/YGFlexWrapTest.cpp b/tests/YGFlexWrapTest.cpp index 12d4e353..b4fb2bbc 100644 --- a/tests/YGFlexWrapTest.cpp +++ b/tests/YGFlexWrapTest.cpp @@ -521,12 +521,12 @@ TEST(YogaTest, flex_wrap_align_stretch_fits_one_row) { ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1)); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); @@ -538,12 +538,12 @@ TEST(YogaTest, flex_wrap_align_stretch_fits_one_row) { ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1)); YGNodeFreeRecursive(root); diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 81903991..431a59a8 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -3089,12 +3089,19 @@ static void YGNodelayoutImpl( const float childHeight = !isMainAxisRow ? childMainSize : childCrossSize; + auto alignContent = node->getStyle().alignContent; + auto crossAxisDoesNotGrow = + alignContent != YGAlignStretch && isNodeFlexWrap; const YGMeasureMode childWidthMeasureMode = - YGFloatIsUndefined(childWidth) ? YGMeasureModeUndefined - : YGMeasureModeExactly; + YGFloatIsUndefined(childWidth) || + (!isMainAxisRow && crossAxisDoesNotGrow) + ? YGMeasureModeUndefined + : YGMeasureModeExactly; const YGMeasureMode childHeightMeasureMode = - YGFloatIsUndefined(childHeight) ? YGMeasureModeUndefined - : YGMeasureModeExactly; + YGFloatIsUndefined(childHeight) || + (isMainAxisRow && crossAxisDoesNotGrow) + ? YGMeasureModeUndefined + : YGMeasureModeExactly; YGLayoutNodeInternal( child, @@ -3148,7 +3155,7 @@ static void YGNodelayoutImpl( // STEP 8: MULTI-LINE CONTENT ALIGNMENT // currentLead stores the size of the cross dim - if (performLayout && (lineCount > 1 || YGIsBaselineLayout(node))) { + if (performLayout && (isNodeFlexWrap || YGIsBaselineLayout(node))) { float crossDimLead = 0; float currentLead = leadingPaddingAndBorderCross; if (!YGFloatIsUndefined(availableInnerCrossDim)) { From 7fc6fcb38cf44e556b882b1700be699abbb56a36 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Mon, 8 Apr 2019 10:53:23 -0700 Subject: [PATCH 034/347] v1.14.0 Summary: @public Push version to *1.14.0.* This release contains some bug fixes around `align-content`. Reviewed By: colriot Differential Revision: D14833417 fbshipit-source-id: f653d5fbb36f307c92b14c091c3206290256f036 --- Yoga.podspec | 2 +- YogaKit.podspec | 4 ++-- gradle.properties | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Yoga.podspec b/Yoga.podspec index 099267f7..e89f0998 100644 --- a/Yoga.podspec +++ b/Yoga.podspec @@ -6,7 +6,7 @@ # Pod::Spec.new do |spec| spec.name = 'Yoga' - spec.version = '1.12.0-pre.2' + spec.version = '1.14.0' spec.license = { :type => 'MIT', :file => "LICENSE" } spec.homepage = 'https://yogalayout.com/' spec.documentation_url = 'https://yogalayout.com/docs' diff --git a/YogaKit.podspec b/YogaKit.podspec index 5051ff9e..95f03725 100644 --- a/YogaKit.podspec +++ b/YogaKit.podspec @@ -6,7 +6,7 @@ # podspec = Pod::Spec.new do |spec| spec.name = 'YogaKit' - spec.version = '1.12.0-pre.2' + spec.version = '1.14.0' spec.license = { :type => 'MIT', :file => "LICENSE" } spec.homepage = 'https://facebook.github.io/yoga/' spec.documentation_url = 'https://facebook.github.io/yoga/docs/' @@ -23,7 +23,7 @@ podspec = Pod::Spec.new do |spec| spec.platform = :ios spec.ios.deployment_target = '8.0' spec.ios.frameworks = 'UIKit' - spec.dependency 'Yoga', '1.12.0-pre.2' + spec.dependency 'Yoga', '~> 1.14' spec.source_files = 'YogaKit/Source/*.{h,m,swift}' spec.public_header_files = 'YogaKit/Source/{YGLayout,UIView+Yoga}.h' spec.private_header_files = 'YogaKit/Source/YGLayout+Private.h' diff --git a/gradle.properties b/gradle.properties index 0a3552c8..3444b601 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ org.gradle.jvmargs=-Xmx1536M -VERSION_NAME=1.13.1-SNAPSHOT +VERSION_NAME=1.14.0 POM_URL=https://github.com/facebook/yoga POM_SCM_URL=https://github.com/facebook/yoga.git POM_SCM_CONNECTION=scm:git:https://github.com/facebook/yoga.git From b062d23947c84bae15cbddeefafe9735aa3f436a Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Mon, 8 Apr 2019 10:53:23 -0700 Subject: [PATCH 035/347] Add `-SNAPSHOT` to gradle version Summary: @public needed for snapshot releases off of master. Reviewed By: colriot Differential Revision: D14833415 fbshipit-source-id: f3b1fb1c41318a9b8f634cd16d37d5e2d050398f --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 3444b601..fd8e5a71 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ org.gradle.jvmargs=-Xmx1536M -VERSION_NAME=1.14.0 +VERSION_NAME=1.14.0-SNAPSHOT POM_URL=https://github.com/facebook/yoga POM_SCM_URL=https://github.com/facebook/yoga.git POM_SCM_CONNECTION=scm:git:https://github.com/facebook/yoga.git From c5f105a7b6879b1960820821edd74efd68eadbc0 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Tue, 9 Apr 2019 03:08:48 -0700 Subject: [PATCH 036/347] JNI: set language level to C++11 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Summary: @public compiler flags were pushed to C++14, but we don’t currently have any code that requires it. Setting to `-std=c++11` in order to fix the OSS build. Reviewed By: SidharthGuglani Differential Revision: D14833737 fbshipit-source-id: df2cd7da8c7124e89863c90d7b77bcf86c495618 --- csharp/BUCK | 2 +- java/BUCK | 2 +- lib/fb/BUCK | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/csharp/BUCK b/csharp/BUCK index b878d428..81b570e5 100644 --- a/csharp/BUCK +++ b/csharp/BUCK @@ -12,7 +12,7 @@ load( "yoga_dep", ) -COMPILER_FLAGS = BASE_COMPILER_FLAGS + ["-std=c++14"] +COMPILER_FLAGS = BASE_COMPILER_FLAGS + ["-std=c++11"] fb_native.csharp_library( name = "yogalibnet46", diff --git a/java/BUCK b/java/BUCK index 0ef6bd28..59a1613b 100644 --- a/java/BUCK +++ b/java/BUCK @@ -18,7 +18,7 @@ yoga_cxx_library( "-Wall", "-Werror", "-Os", - "-std=c++14", + "-std=c++11", ], platforms = ANDROID, preprocessor_flags = [ diff --git a/lib/fb/BUCK b/lib/fb/BUCK index d448d50b..39294f76 100644 --- a/lib/fb/BUCK +++ b/lib/fb/BUCK @@ -32,7 +32,7 @@ yoga_cxx_library( "-Wall", "-Werror", "-Wno-unused-parameter", - "-std=c++14", + "-std=c++11", ], platforms = (ANDROID,), visibility = ["PUBLIC"], From fcfb19e9cf6e779f8bdb1e8d94437d2332a52ff6 Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Thu, 11 Apr 2019 05:19:00 -0700 Subject: [PATCH 037/347] Enable black for xplat/yoga Summary: This directory was excluded from Black formatting in D14888843 when Black was turned on for all of `xplat/`. Since there aren't a lot of `.py` files in this directory, the opt-out is being removed, and the outstanding issues fixed. Reviewed By: d16r Differential Revision: D14889104 fbshipit-source-id: 440077c1efcb4c653151bca1da5636212978add5 --- enums.py | 286 ++++++++++++++++++++++++------------------------------- 1 file changed, 126 insertions(+), 160 deletions(-) diff --git a/enums.py b/enums.py index eaa84ca2..4fe43f7b 100644 --- a/enums.py +++ b/enums.py @@ -3,107 +3,57 @@ # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals +from __future__ import absolute_import, division, print_function, unicode_literals + import os + ENUMS = { - 'Direction': [ - 'Inherit', - 'LTR', - 'RTL', + "Direction": ["Inherit", "LTR", "RTL"], + "Unit": ["Undefined", "Point", "Percent", "Auto"], + "FlexDirection": ["Column", "ColumnReverse", "Row", "RowReverse"], + "Justify": [ + "FlexStart", + "Center", + "FlexEnd", + "SpaceBetween", + "SpaceAround", + "SpaceEvenly", ], - 'Unit': [ - 'Undefined', - 'Point', - 'Percent', - 'Auto', + "Overflow": ["Visible", "Hidden", "Scroll"], + "Align": [ + "Auto", + "FlexStart", + "Center", + "FlexEnd", + "Stretch", + "Baseline", + "SpaceBetween", + "SpaceAround", ], - 'FlexDirection': [ - 'Column', - 'ColumnReverse', - 'Row', - 'RowReverse', + "PositionType": ["Relative", "Absolute"], + "Display": ["Flex", "None"], + "Wrap": ["NoWrap", "Wrap", "WrapReverse"], + "MeasureMode": ["Undefined", "Exactly", "AtMost"], + "Dimension": ["Width", "Height"], + "Edge": [ + "Left", + "Top", + "Right", + "Bottom", + "Start", + "End", + "Horizontal", + "Vertical", + "All", ], - 'Justify': [ - 'FlexStart', - 'Center', - 'FlexEnd', - 'SpaceBetween', - 'SpaceAround', - 'SpaceEvenly', - ], - 'Overflow': [ - 'Visible', - 'Hidden', - 'Scroll', - ], - 'Align': [ - 'Auto', - 'FlexStart', - 'Center', - 'FlexEnd', - 'Stretch', - 'Baseline', - 'SpaceBetween', - 'SpaceAround', - ], - 'PositionType': [ - 'Relative', - 'Absolute', - ], - 'Display': [ - 'Flex', - 'None', - ], - 'Wrap': [ - 'NoWrap', - 'Wrap', - 'WrapReverse', - ], - 'MeasureMode': [ - 'Undefined', - 'Exactly', - 'AtMost', - ], - 'Dimension': [ - 'Width', - 'Height', - ], - 'Edge': [ - 'Left', - 'Top', - 'Right', - 'Bottom', - 'Start', - 'End', - 'Horizontal', - 'Vertical', - 'All', - ], - 'NodeType': [ - 'Default', - 'Text', - ], - 'LogLevel': [ - 'Error', - 'Warn', - 'Info', - 'Debug', - 'Verbose', - 'Fatal', - ], - 'ExperimentalFeature': [ + "NodeType": ["Default", "Text"], + "LogLevel": ["Error", "Warn", "Info", "Debug", "Verbose", "Fatal"], + "ExperimentalFeature": [ # Mimic web flex-basis behavior. - 'WebFlexBasis', - ], - 'PrintOptions': [ - ('Layout', 1), - ('Style', 2), - ('Children', 4), + "WebFlexBasis" ], + "PrintOptions": [("Layout", 1), ("Style", 2), ("Children", 4)], } LICENSE = """/** @@ -115,23 +65,25 @@ LICENSE = """/** """ + def to_java_upper(symbol): symbol = str(symbol) - out = '' + out = "" for i in range(0, len(symbol)): c = symbol[i] if str.istitle(c) and i is not 0 and not str.istitle(symbol[i - 1]): - out += '_' + out += "_" out += c.upper() return out + def to_log_lower(symbol): symbol = str(symbol) - out = '' + out = "" for i in range(0, len(symbol)): c = symbol[i] if str.istitle(c) and i is not 0 and not str.istitle(symbol[i - 1]): - out += '-' + out += "-" out += c.lower() return out @@ -139,114 +91,128 @@ def to_log_lower(symbol): root = os.path.dirname(os.path.abspath(__file__)) # write out C & Objective-C headers -with open(root + '/yoga/YGEnums.h', 'w') as f: +with open(root + "/yoga/YGEnums.h", "w") as f: f.write(LICENSE) - f.write('#pragma once\n\n') + f.write("#pragma once\n\n") f.write('#include "YGMacros.h"\n\n') - f.write('YG_EXTERN_C_BEGIN\n\n') + f.write("YG_EXTERN_C_BEGIN\n\n") for name, values in sorted(ENUMS.items()): - f.write('#define YG%sCount %s\n' % (name, len(values))) - f.write('typedef YG_ENUM_BEGIN(YG%s) {\n' % name) + f.write("#define YG%sCount %s\n" % (name, len(values))) + f.write("typedef YG_ENUM_BEGIN(YG%s) {\n" % name) for value in values: if isinstance(value, tuple): - f.write(' YG%s%s = %d,\n' % (name, value[0], value[1])) + f.write(" YG%s%s = %d,\n" % (name, value[0], value[1])) else: - f.write(' YG%s%s,\n' % (name, value)) - f.write('} YG_ENUM_END(YG%s);\n' % name) - f.write('WIN_EXPORT const char *YG%sToString(const YG%s value);\n' % (name, name)) - f.write('\n') - f.write('YG_EXTERN_C_END\n') + f.write(" YG%s%s,\n" % (name, value)) + f.write("} YG_ENUM_END(YG%s);\n" % name) + f.write( + "WIN_EXPORT const char *YG%sToString(const YG%s value);\n" % (name, name) + ) + f.write("\n") + f.write("YG_EXTERN_C_END\n") # write out C body for printing -with open(root + '/yoga/YGEnums.cpp', 'w') as f: +with open(root + "/yoga/YGEnums.cpp", "w") as f: f.write(LICENSE) f.write('#include "YGEnums.h"\n\n') for name, values in sorted(ENUMS.items()): - f.write('const char *YG%sToString(const YG%s value){\n' % (name, name)) - f.write(' switch(value){\n') + f.write("const char *YG%sToString(const YG%s value){\n" % (name, name)) + f.write(" switch(value){\n") for value in values: if isinstance(value, tuple): - f.write(' case YG%s%s:\n' % (name, value[0])) + f.write(" case YG%s%s:\n" % (name, value[0])) f.write(' return "%s";\n' % to_log_lower(value[0])) else: - f.write(' case YG%s%s:\n' % (name, value)) + f.write(" case YG%s%s:\n" % (name, value)) f.write(' return "%s";\n' % to_log_lower(value)) - f.write(' }\n') + f.write(" }\n") f.write(' return "unknown";\n') - f.write('}\n\n') + f.write("}\n\n") # write out java files for name, values in sorted(ENUMS.items()): - with open(root + '/java/com/facebook/yoga/Yoga%s.java' % name, 'w') as f: - f.write(LICENSE.replace('/**', '/*', 1)) - f.write('package com.facebook.yoga;\n\n') - f.write('import com.facebook.proguard.annotations.DoNotStrip;\n\n') - f.write('@DoNotStrip\n') - f.write('public enum Yoga%s {\n' % name) + with open(root + "/java/com/facebook/yoga/Yoga%s.java" % name, "w") as f: + f.write(LICENSE.replace("/**", "/*", 1)) + f.write("package com.facebook.yoga;\n\n") + f.write("import com.facebook.proguard.annotations.DoNotStrip;\n\n") + f.write("@DoNotStrip\n") + f.write("public enum Yoga%s {\n" % name) if len(values) > 0: for value in values: if isinstance(value, tuple): - f.write(' %s(%d)' % (to_java_upper(value[0]), value[1])) + f.write(" %s(%d)" % (to_java_upper(value[0]), value[1])) else: - f.write(' %s(%d)' % (to_java_upper(value), values.index(value))) + f.write(" %s(%d)" % (to_java_upper(value), values.index(value))) if values.index(value) is len(values) - 1: - f.write(';\n') + f.write(";\n") else: - f.write(',\n') + f.write(",\n") else: - f.write('__EMPTY(-1);') - f.write('\n') - f.write(' private int mIntValue;\n') - f.write('\n') - f.write(' Yoga%s(int intValue) {\n' % name) - f.write(' mIntValue = intValue;\n') - f.write(' }\n') - f.write('\n') - f.write(' public int intValue() {\n') - f.write(' return mIntValue;\n') - f.write(' }\n') - f.write('\n') - f.write(' public static Yoga%s fromInt(int value) {\n' % name) - f.write(' switch (value) {\n') + f.write("__EMPTY(-1);") + f.write("\n") + f.write(" private int mIntValue;\n") + f.write("\n") + f.write(" Yoga%s(int intValue) {\n" % name) + f.write(" mIntValue = intValue;\n") + f.write(" }\n") + f.write("\n") + f.write(" public int intValue() {\n") + f.write(" return mIntValue;\n") + f.write(" }\n") + f.write("\n") + f.write(" public static Yoga%s fromInt(int value) {\n" % name) + f.write(" switch (value) {\n") for value in values: if isinstance(value, tuple): - f.write(' case %d: return %s;\n' % (value[1], to_java_upper(value[0]))) + f.write( + " case %d: return %s;\n" % (value[1], to_java_upper(value[0])) + ) else: - f.write(' case %d: return %s;\n' % (values.index(value), to_java_upper(value))) - f.write(' default: throw new IllegalArgumentException("Unknown enum value: " + value);\n') - f.write(' }\n') - f.write(' }\n') - f.write('}\n') + f.write( + " case %d: return %s;\n" + % (values.index(value), to_java_upper(value)) + ) + f.write( + ' default: throw new IllegalArgumentException("Unknown enum value: " + value);\n' + ) + f.write(" }\n") + f.write(" }\n") + f.write("}\n") # write out csharp files for name, values in sorted(ENUMS.items()): - with open(root + '/csharp/Facebook.Yoga/Yoga%s.cs' % name, 'w') as f: + with open(root + "/csharp/Facebook.Yoga/Yoga%s.cs" % name, "w") as f: f.write(LICENSE) - f.write('namespace Facebook.Yoga\n{\n') + f.write("namespace Facebook.Yoga\n{\n") if isinstance(next(iter(values or []), None), tuple): - f.write(' [System.Flags]\n') - f.write(' public enum Yoga%s\n {\n' % name) + f.write(" [System.Flags]\n") + f.write(" public enum Yoga%s\n {\n" % name) for value in values: if isinstance(value, tuple): - f.write(' %s = %d,\n' % (value[0], value[1])) + f.write(" %s = %d,\n" % (value[0], value[1])) else: - f.write(' %s,\n' % value) - f.write(' }\n') - f.write('}\n') + f.write(" %s,\n" % value) + f.write(" }\n") + f.write("}\n") # write out javascript file -with open(root + '/javascript/sources/YGEnums.js', 'w') as f: +with open(root + "/javascript/sources/YGEnums.js", "w") as f: f.write(LICENSE) - f.write('module.exports = {\n\n') + f.write("module.exports = {\n\n") for name, values in sorted(ENUMS.items()): - f.write(' %s_COUNT: %s,\n' % (to_java_upper(name), len(values))) + f.write(" %s_COUNT: %s,\n" % (to_java_upper(name), len(values))) base = 0 for value in values: if isinstance(value, tuple): - f.write(' %s_%s: %d,\n' % (to_java_upper(name), to_java_upper(value[0]), value[1])) + f.write( + " %s_%s: %d,\n" + % (to_java_upper(name), to_java_upper(value[0]), value[1]) + ) base = value[1] + 1 else: - f.write(' %s_%s: %d,\n' % (to_java_upper(name), to_java_upper(value), base)) + f.write( + " %s_%s: %d,\n" % (to_java_upper(name), to_java_upper(value), base) + ) base += 1 - f.write('\n') - f.write('};\n') + f.write("\n") + f.write("};\n") From ffce7165576b0313b2ec2ca6fb39b58fff5d0c34 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 15 Apr 2019 05:20:44 -0700 Subject: [PATCH 038/347] Use only 4 edges for margin, padding, border in YGLayout Summary: We were using four edges for margin, padding and border. This diff changes the array size in YGLayout for margin, padding, border to reduce YGNode size and corresponding changes while we are setting values in YGLayout. Reduces the YGNode size by 24 bytes Reviewed By: davidaurelio Differential Revision: D14892666 fbshipit-source-id: 94013d5183ee869901267c4c9941fd94fa05d848 --- yoga/YGLayout.h | 6 +++--- yoga/Yoga.cpp | 30 +++++++++++++++--------------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/yoga/YGLayout.h b/yoga/YGLayout.h index 4daa28ed..c9c821f8 100644 --- a/yoga/YGLayout.h +++ b/yoga/YGLayout.h @@ -14,9 +14,9 @@ constexpr std::array kYGDefaultDimensionValues = { struct YGLayout { std::array position = {}; std::array dimensions = kYGDefaultDimensionValues; - std::array margin = {}; - std::array border = {}; - std::array padding = {}; + std::array margin = {}; + std::array border = {}; + std::array padding = {}; YGDirection direction : 2; bool didUseLegacyFlag : 1; bool doesLegacyStretchFlagAffectsLayout : 1; diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 431a59a8..e2e1d136 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -665,19 +665,19 @@ struct DimensionProp { edge <= YGEdgeEnd, \ "Cannot get layout properties of multi-edge shorthands"); \ \ - if (edge == YGEdgeLeft) { \ + if (edge == YGEdgeStart) { \ if (node->getLayout().direction == YGDirectionRTL) { \ - return node->getLayout().instanceName[YGEdgeEnd]; \ + return node->getLayout().instanceName[YGEdgeRight]; \ } else { \ - return node->getLayout().instanceName[YGEdgeStart]; \ + return node->getLayout().instanceName[YGEdgeLeft]; \ } \ } \ \ - if (edge == YGEdgeRight) { \ + if (edge == YGEdgeEnd) { \ if (node->getLayout().direction == YGDirectionRTL) { \ - return node->getLayout().instanceName[YGEdgeStart]; \ + return node->getLayout().instanceName[YGEdgeLeft]; \ } else { \ - return node->getLayout().instanceName[YGEdgeEnd]; \ + return node->getLayout().instanceName[YGEdgeRight]; \ } \ } \ \ @@ -2674,12 +2674,13 @@ static void YGNodelayoutImpl( const YGFlexDirection flexColumnDirection = YGResolveFlexDirection(YGFlexDirectionColumn, direction); + const YGEdge startEdge = + direction == YGDirectionLTR ? YGEdgeLeft : YGEdgeRight; + const YGEdge endEdge = direction == YGDirectionLTR ? YGEdgeRight : YGEdgeLeft; node->setLayoutMargin( - node->getLeadingMargin(flexRowDirection, ownerWidth).unwrap(), - YGEdgeStart); + node->getLeadingMargin(flexRowDirection, ownerWidth).unwrap(), startEdge); node->setLayoutMargin( - node->getTrailingMargin(flexRowDirection, ownerWidth).unwrap(), - YGEdgeEnd); + node->getTrailingMargin(flexRowDirection, ownerWidth).unwrap(), endEdge); node->setLayoutMargin( node->getLeadingMargin(flexColumnDirection, ownerWidth).unwrap(), YGEdgeTop); @@ -2687,18 +2688,17 @@ static void YGNodelayoutImpl( node->getTrailingMargin(flexColumnDirection, ownerWidth).unwrap(), YGEdgeBottom); - node->setLayoutBorder(node->getLeadingBorder(flexRowDirection), YGEdgeStart); - node->setLayoutBorder(node->getTrailingBorder(flexRowDirection), YGEdgeEnd); + node->setLayoutBorder(node->getLeadingBorder(flexRowDirection), startEdge); + node->setLayoutBorder(node->getTrailingBorder(flexRowDirection), endEdge); node->setLayoutBorder(node->getLeadingBorder(flexColumnDirection), YGEdgeTop); node->setLayoutBorder( node->getTrailingBorder(flexColumnDirection), YGEdgeBottom); node->setLayoutPadding( node->getLeadingPadding(flexRowDirection, ownerWidth).unwrap(), - YGEdgeStart); + startEdge); node->setLayoutPadding( - node->getTrailingPadding(flexRowDirection, ownerWidth).unwrap(), - YGEdgeEnd); + node->getTrailingPadding(flexRowDirection, ownerWidth).unwrap(), endEdge); node->setLayoutPadding( node->getLeadingPadding(flexColumnDirection, ownerWidth).unwrap(), YGEdgeTop); From 3f7d03b4438f5b0a308e2187b7f7e3067b4f64b8 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Mon, 15 Apr 2019 10:48:49 -0700 Subject: [PATCH 039/347] Define all style getters/setters explicitely Summary: @public For better grepping, we define all `YGNodeStyle...` accessors explicitely. This also replaces all macros with a set of templates that can easily be updated when we switch to style accessors on `YGNode`. Transitioning to a consistent set of templates also allowed to end up with a single *needs update* / *do update* / *mark dirty* block. The new template code also takes full advantage of the properties of `YGOptional` (constructor call with *not a number* creates an empty optional) and `detail::CompactValue` (conversions of *auto* and *undefined* are always well-formed) to get rid of some additional code: Removed `NAN` check: ``` _YGNodeStyleSetFlex: pushq %rbp movq %rsp, %rbp movss 0x34(%rdi), %xmm1 ucomiss %xmm0, %xmm1 jne 0x____ jnp 0x____ ucomiss %xmm0, %xmm0 jnp 0x____ ucomiss %xmm1, %xmm1 jnp 0x____ popq %rbp retq - ucomiss %xmm0, %xmm0 - movd %xmm0, %eax - movl $0x7fc00000, %ecx - cmovnpl %eax, %ecx - movl %ecx, 0x34(%rdi) + movss %xmm0, 0x34(%rdi) popq %rbp jmp 0x____ - nopw %cs:(%rax,%rax) - nop + nopw (%rax,%rax) ``` Removed well-formedness check: ``` _YGNodeStyleGetPosition: pushq %rbp movq %rsp, %rbp movl %esi, %eax movl 0x68(%rdi,%rax,4), %ecx + xorl %eax, %eax movq (%rip), %rcx movl (%rcx), %eax movl 0x4(%rcx), %ecx - movq %rcx, %rdx - shlq $0x20, %rdx + shlq $0x20, %rcx movl %eax, %eax - orq %rdx, %rax - cmpl $0x3, %ecx - je 0x____ - testl %ecx, %ecx - jne 0x____ - movl $0x7fc00000, %ecx - jmp 0x____ - movq %rax, %rcx - movabsq $-0x100000000, %rdx - andq %rax, %rdx - movl %ecx, %eax - orq %rdx, %rax + orq %rcx, %rax popq %rbp retq nopw (%rax,%rax) ``` Reviewed By: SidharthGuglani Differential Revision: D14911973 fbshipit-source-id: db6eef65f8fdaf70875f7fe8799919ca88bd50ee --- yoga/Yoga.cpp | 692 ++++++++++++++++++++++++-------------------------- 1 file changed, 329 insertions(+), 363 deletions(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index e2e1d136..213b7ca2 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -537,121 +537,348 @@ float YGNodeStyleGetFlexShrink(const YGNodeRef node) { namespace { -struct Value { - template - static detail::CompactValue create(float value) { - return detail::CompactValue::ofMaybe(value); +template +void updateNodeProp( + YGNode* node, + T value, + NeedsUpdate&& needsUpdate, + Update&& update) { + if (needsUpdate(node, value)) { + update(node, value); + node->markDirtyAndPropogate(); } -}; - -template <> -inline detail::CompactValue Value::create(float) { - return detail::CompactValue::ofUndefined(); } -template <> -inline detail::CompactValue Value::create(float) { - return detail::CompactValue::ofAuto(); +template +void updateStyleProp(YGNode* node, T value) { + updateNodeProp( + node, + value, + [](YGNode* n, T x) { return (n->getStyle().*Prop) != x; }, + [](YGNode* n, T x) { (n->getStyle().*Prop) = x; }); } -template -struct DimensionProp { - template - static YGValue get(YGNodeRef node) { - YGValue value = (node->getStyle().*P)[idx]; - if (value.unit == YGUnitUndefined || value.unit == YGUnitAuto) { - value.value = YGUndefined; - } - return value; - } +template ()> YGStyle::*Prop> +void updateIndexedStyleProp(YGNode* node, Idx idx, detail::CompactValue value) { + updateNodeProp( + node, + value, + [idx](YGNode* n, detail::CompactValue x) { + return (n->getStyle().*Prop)[idx] != x; + }, + [idx](YGNode* n, detail::CompactValue x) { + (n->getStyle().*Prop)[idx] = x; + }); +} - template - static void set(YGNodeRef node, float newValue) { - auto value = Value::create(newValue); - if ((node->getStyle().*P)[idx] != value) { - (node->getStyle().*P)[idx] = value; - node->markDirtyAndPropogate(); - } - } -}; +template ()> YGStyle::*Prop> +void updateEdgeProp(YGNode* node, YGEdge edge, detail::CompactValue value) { + updateIndexedStyleProp(node, edge, value); +} + +template ()> YGStyle::*Prop> +void updateDimensionProp( + YGNode* node, + YGDimension dimension, + detail::CompactValue value) { + updateIndexedStyleProp(node, dimension, value); +} + +#define YG_UPDATE_STYLE_PROP_BITFIELD(PROP_NAME, node, value) \ + updateNodeProp( \ + node, \ + value, \ + [](YGNode* n, decltype(value) x) { \ + return n->getStyle().PROP_NAME != x; \ + }, \ + [](YGNode* n, decltype(value) x) { n->getStyle().PROP_NAME = x; }) } // namespace -#define YG_NODE_STYLE_PROPERTY_SETTER_UNIT_AUTO_IMPL( \ - type, name, paramName, instanceName) \ - void YGNodeStyleSet##name(const YGNodeRef node, const type paramName) { \ - auto value = detail::CompactValue::ofMaybe(paramName); \ - if (node->getStyle().instanceName != value) { \ - node->getStyle().instanceName = value; \ - node->markDirtyAndPropogate(); \ - } \ - } \ - \ - void YGNodeStyleSet##name##Percent( \ - const YGNodeRef node, const type paramName) { \ - auto value = detail::CompactValue::ofMaybe(paramName); \ - if (node->getStyle().instanceName != value) { \ - node->getStyle().instanceName = value; \ - node->markDirtyAndPropogate(); \ - } \ - } \ - \ - void YGNodeStyleSet##name##Auto(const YGNodeRef node) { \ - if (node->getStyle().instanceName != detail::CompactValue::ofAuto()) { \ - node->getStyle().instanceName = detail::CompactValue::ofAuto(); \ - node->markDirtyAndPropogate(); \ - } \ +void YGNodeStyleSetDirection(const YGNodeRef node, const YGDirection value) { + YG_UPDATE_STYLE_PROP_BITFIELD(direction, node, value); +} +YGDirection YGNodeStyleGetDirection(const YGNodeRef node) { + return node->getStyle().direction; +} + +void YGNodeStyleSetFlexDirection( + const YGNodeRef node, + const YGFlexDirection flexDirection) { + YG_UPDATE_STYLE_PROP_BITFIELD(flexDirection, node, flexDirection); +} +YGFlexDirection YGNodeStyleGetFlexDirection(const YGNodeRef node) { + return node->getStyle().flexDirection; +} + +void YGNodeStyleSetJustifyContent( + const YGNodeRef node, + const YGJustify justifyContent) { + YG_UPDATE_STYLE_PROP_BITFIELD(justifyContent, node, justifyContent); +} +YGJustify YGNodeStyleGetJustifyContent(const YGNodeRef node) { + return node->getStyle().justifyContent; +} + +void YGNodeStyleSetAlignContent( + const YGNodeRef node, + const YGAlign alignContent) { + YG_UPDATE_STYLE_PROP_BITFIELD(alignContent, node, alignContent); +} +YGAlign YGNodeStyleGetAlignContent(const YGNodeRef node) { + return node->getStyle().alignContent; +} + +void YGNodeStyleSetAlignItems(const YGNodeRef node, const YGAlign alignItems) { + YG_UPDATE_STYLE_PROP_BITFIELD(alignItems, node, alignItems); +} +YGAlign YGNodeStyleGetAlignItems(const YGNodeRef node) { + return node->getStyle().alignItems; +} + +void YGNodeStyleSetAlignSelf(const YGNodeRef node, const YGAlign alignSelf) { + YG_UPDATE_STYLE_PROP_BITFIELD(alignSelf, node, alignSelf); +} +YGAlign YGNodeStyleGetAlignSelf(const YGNodeRef node) { + return node->getStyle().alignSelf; +} + +void YGNodeStyleSetPositionType( + const YGNodeRef node, + const YGPositionType positionType) { + YG_UPDATE_STYLE_PROP_BITFIELD(positionType, node, positionType); +} +YGPositionType YGNodeStyleGetPositionType(const YGNodeRef node) { + return node->getStyle().positionType; +} + +void YGNodeStyleSetFlexWrap(const YGNodeRef node, const YGWrap flexWrap) { + YG_UPDATE_STYLE_PROP_BITFIELD(flexWrap, node, flexWrap); +} +YGWrap YGNodeStyleGetFlexWrap(const YGNodeRef node) { + return node->getStyle().flexWrap; +} + +void YGNodeStyleSetOverflow(const YGNodeRef node, const YGOverflow overflow) { + YG_UPDATE_STYLE_PROP_BITFIELD(overflow, node, overflow); +} +YGOverflow YGNodeStyleGetOverflow(const YGNodeRef node) { + return node->getStyle().overflow; +} + +void YGNodeStyleSetDisplay(const YGNodeRef node, const YGDisplay display) { + YG_UPDATE_STYLE_PROP_BITFIELD(display, node, display); +} +YGDisplay YGNodeStyleGetDisplay(const YGNodeRef node) { + return node->getStyle().display; +} + +// TODO(T26792433): Change the API to accept YGFloatOptional. +void YGNodeStyleSetFlex(const YGNodeRef node, const float flex) { + updateStyleProp(node, YGFloatOptional{flex}); +} + +// TODO(T26792433): Change the API to accept YGFloatOptional. +float YGNodeStyleGetFlex(const YGNodeRef node) { + return node->getStyle().flex.isUndefined() ? YGUndefined + : node->getStyle().flex.unwrap(); +} + +// TODO(T26792433): Change the API to accept YGFloatOptional. +void YGNodeStyleSetFlexGrow(const YGNodeRef node, const float flexGrow) { + updateStyleProp( + node, YGFloatOptional{flexGrow}); +} + +// TODO(T26792433): Change the API to accept YGFloatOptional. +void YGNodeStyleSetFlexShrink(const YGNodeRef node, const float flexShrink) { + updateStyleProp( + node, YGFloatOptional{flexShrink}); +} + +YGValue YGNodeStyleGetFlexBasis(const YGNodeRef node) { + YGValue flexBasis = node->getStyle().flexBasis; + if (flexBasis.unit == YGUnitUndefined || flexBasis.unit == YGUnitAuto) { + // TODO(T26792433): Get rid off the use of YGUndefined at client side + flexBasis.value = YGUndefined; + } + return flexBasis; +} + +void YGNodeStyleSetFlexBasis(const YGNodeRef node, const float flexBasis) { + auto value = detail::CompactValue::ofMaybe(flexBasis); + updateStyleProp(node, value); +} + +void YGNodeStyleSetFlexBasisPercent( + const YGNodeRef node, + const float flexBasisPercent) { + auto value = detail::CompactValue::ofMaybe(flexBasisPercent); + updateStyleProp(node, value); +} + +void YGNodeStyleSetFlexBasisAuto(const YGNodeRef node) { + updateStyleProp( + node, detail::CompactValue::ofAuto()); +} + +void YGNodeStyleSetPosition(YGNodeRef node, YGEdge edge, float points) { + auto value = detail::CompactValue::ofMaybe(points); + updateEdgeProp<&YGStyle::position>(node, edge, value); +} +void YGNodeStyleSetPositionPercent(YGNodeRef node, YGEdge edge, float percent) { + auto value = detail::CompactValue::ofMaybe(percent); + updateEdgeProp<&YGStyle::position>(node, edge, value); +} +YGValue YGNodeStyleGetPosition(YGNodeRef node, YGEdge edge) { + return node->getStyle().position[edge]; +} + +void YGNodeStyleSetMargin(YGNodeRef node, YGEdge edge, float points) { + auto value = detail::CompactValue::ofMaybe(points); + updateEdgeProp<&YGStyle::margin>(node, edge, value); +} +void YGNodeStyleSetMarginPercent(YGNodeRef node, YGEdge edge, float percent) { + auto value = detail::CompactValue::ofMaybe(percent); + updateEdgeProp<&YGStyle::margin>(node, edge, value); +} +void YGNodeStyleSetMarginAuto(YGNodeRef node, YGEdge edge) { + updateEdgeProp<&YGStyle::margin>(node, edge, detail::CompactValue::ofAuto()); +} +YGValue YGNodeStyleGetMargin(YGNodeRef node, YGEdge edge) { + return node->getStyle().margin[edge]; +} + +void YGNodeStyleSetPadding(YGNodeRef node, YGEdge edge, float points) { + auto value = detail::CompactValue::ofMaybe(points); + updateEdgeProp<&YGStyle::padding>(node, edge, value); +} +void YGNodeStyleSetPaddingPercent(YGNodeRef node, YGEdge edge, float percent) { + auto value = detail::CompactValue::ofMaybe(percent); + updateEdgeProp<&YGStyle::padding>(node, edge, value); +} +YGValue YGNodeStyleGetPadding(YGNodeRef node, YGEdge edge) { + return node->getStyle().padding[edge]; +} + +// TODO(T26792433): Change the API to accept YGFloatOptional. +void YGNodeStyleSetBorder( + const YGNodeRef node, + const YGEdge edge, + const float border) { + auto value = detail::CompactValue::ofMaybe(border); + updateEdgeProp<&YGStyle::border>(node, edge, value); +} + +float YGNodeStyleGetBorder(const YGNodeRef node, const YGEdge edge) { + if (node->getStyle().border[edge].isUndefined() || + node->getStyle().border[edge].isAuto()) { + // TODO(T26792433): Rather than returning YGUndefined, change the api to + // return YGFloatOptional. + return YGUndefined; } -#define YG_NODE_STYLE_PROPERTY_UNIT_AUTO_IMPL( \ - type, name, paramName, instanceName) \ - YG_NODE_STYLE_PROPERTY_SETTER_UNIT_AUTO_IMPL( \ - float, name, paramName, instanceName) \ - \ - type YGNodeStyleGet##name(const YGNodeRef node) { \ - YGValue value = node->getStyle().instanceName; \ - if (value.unit == YGUnitUndefined || value.unit == YGUnitAuto) { \ - value.value = YGUndefined; \ - } \ - return value; \ - } + auto border = (YGValue) node->getStyle().border[edge]; + return border.value; +} -#define YG_NODE_STYLE_EDGE_PROPERTY_UNIT_AUTO_IMPL(type, name, instanceName) \ - void YGNodeStyleSet##name##Auto(const YGNodeRef node, const YGEdge edge) { \ - if (node->getStyle().instanceName[edge] != \ - detail::CompactValue::ofAuto()) { \ - node->getStyle().instanceName[edge] = detail::CompactValue::ofAuto(); \ - node->markDirtyAndPropogate(); \ - } \ - } +// Yoga specific properties, not compatible with flexbox specification -#define YG_NODE_STYLE_EDGE_PROPERTY_UNIT_IMPL( \ - type, name, paramName, instanceName) \ - void YGNodeStyleSet##name( \ - const YGNodeRef node, const YGEdge edge, const float paramName) { \ - auto value = detail::CompactValue::ofMaybe(paramName); \ - if (node->getStyle().instanceName[edge] != value) { \ - node->getStyle().instanceName[edge] = value; \ - node->markDirtyAndPropogate(); \ - } \ - } \ - \ - void YGNodeStyleSet##name##Percent( \ - const YGNodeRef node, const YGEdge edge, const float paramName) { \ - auto value = detail::CompactValue::ofMaybe(paramName); \ - if (node->getStyle().instanceName[edge] != value) { \ - node->getStyle().instanceName[edge] = value; \ - node->markDirtyAndPropogate(); \ - } \ - } \ - \ - type YGNodeStyleGet##name(const YGNodeRef node, const YGEdge edge) { \ - YGValue value = node->getStyle().instanceName[edge]; \ - if (value.unit == YGUnitUndefined || value.unit == YGUnitAuto) { \ - value.value = YGUndefined; \ - } \ - return value; \ - } +// TODO(T26792433): Change the API to accept YGFloatOptional. +float YGNodeStyleGetAspectRatio(const YGNodeRef node) { + const YGFloatOptional op = node->getStyle().aspectRatio; + return op.isUndefined() ? YGUndefined : op.unwrap(); +} + +// TODO(T26792433): Change the API to accept YGFloatOptional. +void YGNodeStyleSetAspectRatio(const YGNodeRef node, const float aspectRatio) { + updateStyleProp( + node, YGFloatOptional{aspectRatio}); +} + +void YGNodeStyleSetWidth(YGNodeRef node, float points) { + auto value = detail::CompactValue::ofMaybe(points); + updateDimensionProp<&YGStyle::dimensions>(node, YGDimensionWidth, value); +} +void YGNodeStyleSetWidthPercent(YGNodeRef node, float percent) { + auto value = detail::CompactValue::ofMaybe(percent); + updateDimensionProp<&YGStyle::dimensions>(node, YGDimensionWidth, value); +} +void YGNodeStyleSetWidthAuto(YGNodeRef node) { + updateDimensionProp<&YGStyle::dimensions>( + node, YGDimensionWidth, detail::CompactValue::ofAuto()); +} +YGValue YGNodeStyleGetWidth(YGNodeRef node) { + return node->getStyle().dimensions[YGDimensionWidth]; +} + +void YGNodeStyleSetHeight(YGNodeRef node, float points) { + auto value = detail::CompactValue::ofMaybe(points); + updateDimensionProp<&YGStyle::dimensions>(node, YGDimensionHeight, value); +} +void YGNodeStyleSetHeightPercent(YGNodeRef node, float percent) { + auto value = detail::CompactValue::ofMaybe(percent); + updateDimensionProp<&YGStyle::dimensions>(node, YGDimensionHeight, value); +} +void YGNodeStyleSetHeightAuto(YGNodeRef node) { + updateDimensionProp<&YGStyle::dimensions>( + node, YGDimensionHeight, detail::CompactValue::ofAuto()); +} +YGValue YGNodeStyleGetHeight(YGNodeRef node) { + return node->getStyle().dimensions[YGDimensionHeight]; +} + +void YGNodeStyleSetMinWidth(const YGNodeRef node, const float minWidth) { + auto value = detail::CompactValue::ofMaybe(minWidth); + updateDimensionProp<&YGStyle::minDimensions>(node, YGDimensionWidth, value); +} +void YGNodeStyleSetMinWidthPercent(const YGNodeRef node, const float minWidth) { + auto value = detail::CompactValue::ofMaybe(minWidth); + updateDimensionProp<&YGStyle::minDimensions>(node, YGDimensionWidth, value); +} +YGValue YGNodeStyleGetMinWidth(const YGNodeRef node) { + return node->getStyle().minDimensions[YGDimensionWidth]; +}; + +void YGNodeStyleSetMinHeight(const YGNodeRef node, const float minHeight) { + auto value = detail::CompactValue::ofMaybe(minHeight); + updateDimensionProp<&YGStyle::minDimensions>(node, YGDimensionHeight, value); +} +void YGNodeStyleSetMinHeightPercent( + const YGNodeRef node, + const float minHeight) { + auto value = detail::CompactValue::ofMaybe(minHeight); + updateDimensionProp<&YGStyle::minDimensions>(node, YGDimensionHeight, value); +} +YGValue YGNodeStyleGetMinHeight(const YGNodeRef node) { + return node->getStyle().minDimensions[YGDimensionHeight]; +}; + +void YGNodeStyleSetMaxWidth(const YGNodeRef node, const float maxWidth) { + auto value = detail::CompactValue::ofMaybe(maxWidth); + updateDimensionProp<&YGStyle::maxDimensions>(node, YGDimensionWidth, value); +} +void YGNodeStyleSetMaxWidthPercent(const YGNodeRef node, const float maxWidth) { + auto value = detail::CompactValue::ofMaybe(maxWidth); + updateDimensionProp<&YGStyle::maxDimensions>(node, YGDimensionWidth, value); +} +YGValue YGNodeStyleGetMaxWidth(const YGNodeRef node) { + return node->getStyle().maxDimensions[YGDimensionWidth]; +}; + +void YGNodeStyleSetMaxHeight(const YGNodeRef node, const float maxHeight) { + auto value = detail::CompactValue::ofMaybe(maxHeight); + updateDimensionProp<&YGStyle::maxDimensions>(node, YGDimensionHeight, value); +} +void YGNodeStyleSetMaxHeightPercent( + const YGNodeRef node, + const float maxHeight) { + auto value = detail::CompactValue::ofMaybe(maxHeight); + updateDimensionProp<&YGStyle::maxDimensions>(node, YGDimensionHeight, value); +} +YGValue YGNodeStyleGetMaxHeight(const YGNodeRef node) { + return node->getStyle().maxDimensions[YGDimensionHeight]; +}; #define YG_NODE_LAYOUT_PROPERTY_IMPL(type, name, instanceName) \ type YGNodeLayoutGet##name(const YGNodeRef node) { \ @@ -684,267 +911,6 @@ struct DimensionProp { return node->getLayout().instanceName[edge]; \ } -#define YG_NODE_STYLE_SET(node, property, value) \ - if (node->getStyle().property != value) { \ - node->getStyle().property = value; \ - node->markDirtyAndPropogate(); \ - } - -void YGNodeStyleSetDirection(const YGNodeRef node, const YGDirection value) { - YG_NODE_STYLE_SET(node, direction, value); -} -YGDirection YGNodeStyleGetDirection(const YGNodeRef node) { - return node->getStyle().direction; -} - -void YGNodeStyleSetFlexDirection( - const YGNodeRef node, - const YGFlexDirection flexDirection) { - YG_NODE_STYLE_SET(node, flexDirection, flexDirection); -} -YGFlexDirection YGNodeStyleGetFlexDirection(const YGNodeRef node) { - return node->getStyle().flexDirection; -} - -void YGNodeStyleSetJustifyContent( - const YGNodeRef node, - const YGJustify justifyContent) { - YG_NODE_STYLE_SET(node, justifyContent, justifyContent); -} -YGJustify YGNodeStyleGetJustifyContent(const YGNodeRef node) { - return node->getStyle().justifyContent; -} - -void YGNodeStyleSetAlignContent( - const YGNodeRef node, - const YGAlign alignContent) { - YG_NODE_STYLE_SET(node, alignContent, alignContent); -} -YGAlign YGNodeStyleGetAlignContent(const YGNodeRef node) { - return node->getStyle().alignContent; -} - -void YGNodeStyleSetAlignItems(const YGNodeRef node, const YGAlign alignItems) { - YG_NODE_STYLE_SET(node, alignItems, alignItems); -} -YGAlign YGNodeStyleGetAlignItems(const YGNodeRef node) { - return node->getStyle().alignItems; -} - -void YGNodeStyleSetAlignSelf(const YGNodeRef node, const YGAlign alignSelf) { - YG_NODE_STYLE_SET(node, alignSelf, alignSelf); -} -YGAlign YGNodeStyleGetAlignSelf(const YGNodeRef node) { - return node->getStyle().alignSelf; -} - -void YGNodeStyleSetPositionType( - const YGNodeRef node, - const YGPositionType positionType) { - YG_NODE_STYLE_SET(node, positionType, positionType); -} -YGPositionType YGNodeStyleGetPositionType(const YGNodeRef node) { - return node->getStyle().positionType; -} - -void YGNodeStyleSetFlexWrap(const YGNodeRef node, const YGWrap flexWrap) { - YG_NODE_STYLE_SET(node, flexWrap, flexWrap); -} -YGWrap YGNodeStyleGetFlexWrap(const YGNodeRef node) { - return node->getStyle().flexWrap; -} - -void YGNodeStyleSetOverflow(const YGNodeRef node, const YGOverflow overflow) { - YG_NODE_STYLE_SET(node, overflow, overflow); -} -YGOverflow YGNodeStyleGetOverflow(const YGNodeRef node) { - return node->getStyle().overflow; -} - -void YGNodeStyleSetDisplay(const YGNodeRef node, const YGDisplay display) { - YG_NODE_STYLE_SET(node, display, display); -} -YGDisplay YGNodeStyleGetDisplay(const YGNodeRef node) { - return node->getStyle().display; -} - -// TODO(T26792433): Change the API to accept YGFloatOptional. -void YGNodeStyleSetFlex(const YGNodeRef node, const float flex) { - if (node->getStyle().flex != flex) { - node->getStyle().flex = - YGFloatIsUndefined(flex) ? YGFloatOptional() : YGFloatOptional(flex); - node->markDirtyAndPropogate(); - } -} - -// TODO(T26792433): Change the API to accept YGFloatOptional. -float YGNodeStyleGetFlex(const YGNodeRef node) { - return node->getStyle().flex.isUndefined() ? YGUndefined - : node->getStyle().flex.unwrap(); -} - -// TODO(T26792433): Change the API to accept YGFloatOptional. -void YGNodeStyleSetFlexGrow(const YGNodeRef node, const float flexGrow) { - if (node->getStyle().flexGrow != flexGrow) { - node->getStyle().flexGrow = YGFloatIsUndefined(flexGrow) - ? YGFloatOptional() - : YGFloatOptional(flexGrow); - node->markDirtyAndPropogate(); - } -} - -// TODO(T26792433): Change the API to accept YGFloatOptional. -void YGNodeStyleSetFlexShrink(const YGNodeRef node, const float flexShrink) { - if (node->getStyle().flexShrink != flexShrink) { - node->getStyle().flexShrink = YGFloatIsUndefined(flexShrink) - ? YGFloatOptional() - : YGFloatOptional(flexShrink); - node->markDirtyAndPropogate(); - } -} - -YGValue YGNodeStyleGetFlexBasis(const YGNodeRef node) { - YGValue flexBasis = node->getStyle().flexBasis; - if (flexBasis.unit == YGUnitUndefined || flexBasis.unit == YGUnitAuto) { - // TODO(T26792433): Get rid off the use of YGUndefined at client side - flexBasis.value = YGUndefined; - } - return flexBasis; -} - -void YGNodeStyleSetFlexBasis(const YGNodeRef node, const float flexBasis) { - auto value = detail::CompactValue::ofMaybe(flexBasis); - if (node->getStyle().flexBasis != value) { - node->getStyle().flexBasis = value; - node->markDirtyAndPropogate(); - } -} - -void YGNodeStyleSetFlexBasisPercent( - const YGNodeRef node, - const float flexBasisPercent) { - auto value = detail::CompactValue::ofMaybe(flexBasisPercent); - if (node->getStyle().flexBasis != value) { - node->getStyle().flexBasis = value; - node->markDirtyAndPropogate(); - } -} - -void YGNodeStyleSetFlexBasisAuto(const YGNodeRef node) { - if (node->getStyle().flexBasis != detail::CompactValue::ofAuto()) { - node->getStyle().flexBasis = detail::CompactValue::ofAuto(); - node->markDirtyAndPropogate(); - } -} - -YG_NODE_STYLE_EDGE_PROPERTY_UNIT_IMPL(YGValue, Position, position, position); -YG_NODE_STYLE_EDGE_PROPERTY_UNIT_IMPL(YGValue, Margin, margin, margin); -YG_NODE_STYLE_EDGE_PROPERTY_UNIT_AUTO_IMPL(YGValue, Margin, margin); -YG_NODE_STYLE_EDGE_PROPERTY_UNIT_IMPL(YGValue, Padding, padding, padding); - -// TODO(T26792433): Change the API to accept YGFloatOptional. -void YGNodeStyleSetBorder( - const YGNodeRef node, - const YGEdge edge, - const float border) { - auto value = detail::CompactValue::ofMaybe(border); - if (node->getStyle().border[edge] != value) { - node->getStyle().border[edge] = value; - node->markDirtyAndPropogate(); - } -} - -float YGNodeStyleGetBorder(const YGNodeRef node, const YGEdge edge) { - if (node->getStyle().border[edge].isUndefined() || - node->getStyle().border[edge].isAuto()) { - // TODO(T26792433): Rather than returning YGUndefined, change the api to - // return YGFloatOptional. - return YGUndefined; - } - - auto border = (YGValue) node->getStyle().border[edge]; - return border.value; -} - -// Yoga specific properties, not compatible with flexbox specification - -// TODO(T26792433): Change the API to accept YGFloatOptional. -float YGNodeStyleGetAspectRatio(const YGNodeRef node) { - const YGFloatOptional op = node->getStyle().aspectRatio; - return op.isUndefined() ? YGUndefined : op.unwrap(); -} - -// TODO(T26792433): Change the API to accept YGFloatOptional. -void YGNodeStyleSetAspectRatio(const YGNodeRef node, const float aspectRatio) { - if (node->getStyle().aspectRatio != aspectRatio) { - node->getStyle().aspectRatio = YGFloatOptional(aspectRatio); - node->markDirtyAndPropogate(); - } -} - -YG_NODE_STYLE_PROPERTY_UNIT_AUTO_IMPL( - YGValue, - Width, - width, - dimensions[YGDimensionWidth]); -YG_NODE_STYLE_PROPERTY_UNIT_AUTO_IMPL( - YGValue, - Height, - height, - dimensions[YGDimensionHeight]); - -void YGNodeStyleSetMinWidth(const YGNodeRef node, const float minWidth) { - DimensionProp<&YGStyle::minDimensions>::set( - node, minWidth); -} -void YGNodeStyleSetMinWidthPercent(const YGNodeRef node, const float minWidth) { - DimensionProp<&YGStyle::minDimensions>::set( - node, minWidth); -} -YGValue YGNodeStyleGetMinWidth(const YGNodeRef node) { - return DimensionProp<&YGStyle::minDimensions>::get(node); -}; - -void YGNodeStyleSetMinHeight(const YGNodeRef node, const float minHeight) { - DimensionProp<&YGStyle::minDimensions>::set( - node, minHeight); -} -void YGNodeStyleSetMinHeightPercent( - const YGNodeRef node, - const float minHeight) { - DimensionProp<&YGStyle::minDimensions>::set( - node, minHeight); -} -YGValue YGNodeStyleGetMinHeight(const YGNodeRef node) { - return DimensionProp<&YGStyle::minDimensions>::get(node); -}; - -void YGNodeStyleSetMaxWidth(const YGNodeRef node, const float maxWidth) { - DimensionProp<&YGStyle::maxDimensions>::set( - node, maxWidth); -} -void YGNodeStyleSetMaxWidthPercent(const YGNodeRef node, const float maxWidth) { - DimensionProp<&YGStyle::maxDimensions>::set( - node, maxWidth); -} -YGValue YGNodeStyleGetMaxWidth(const YGNodeRef node) { - return DimensionProp<&YGStyle::maxDimensions>::get(node); -}; - -void YGNodeStyleSetMaxHeight(const YGNodeRef node, const float maxHeight) { - DimensionProp<&YGStyle::maxDimensions>::set( - node, maxHeight); -} -void YGNodeStyleSetMaxHeightPercent( - const YGNodeRef node, - const float maxHeight) { - DimensionProp<&YGStyle::maxDimensions>::set( - node, maxHeight); -} -YGValue YGNodeStyleGetMaxHeight(const YGNodeRef node) { - return DimensionProp<&YGStyle::maxDimensions>::get(node); -}; - YG_NODE_LAYOUT_PROPERTY_IMPL(float, Left, position[YGEdgeLeft]); YG_NODE_LAYOUT_PROPERTY_IMPL(float, Top, position[YGEdgeTop]); YG_NODE_LAYOUT_PROPERTY_IMPL(float, Right, position[YGEdgeRight]); From e9bb1efb033b09f78baed881ffe900a086af3113 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Tue, 16 Apr 2019 07:09:36 -0700 Subject: [PATCH 040/347] Code formatting: allow short inline methods on one line Summary: @public This allows short methods defined in class declarations to occupy a single line. The change makes class declarations more readable. Reviewed By: SidharthGuglani Differential Revision: D14950012 fbshipit-source-id: 1321949475184181c6cceb86613f730e430763e2 --- .clang-format | 2 +- java/jni/YGJNI.cpp | 8 +-- tests/YGConfigTest.cpp | 8 +-- yoga/CompactValue.h | 8 +-- yoga/YGConfig.h | 4 +- yoga/YGFloatOptional.h | 24 +++------ yoga/YGLayout.h | 4 +- yoga/YGMarker.h | 8 +-- yoga/YGNode.h | 112 +++++++++++------------------------------ yoga/Yoga-internal.h | 8 +-- 10 files changed, 47 insertions(+), 139 deletions(-) diff --git a/.clang-format b/.clang-format index 52a48cf2..7bb07207 100644 --- a/.clang-format +++ b/.clang-format @@ -9,7 +9,7 @@ AlignTrailingComments: false AllowAllParametersOfDeclarationOnNextLine: false AllowShortBlocksOnASingleLine: false AllowShortCaseLabelsOnASingleLine: false -AllowShortFunctionsOnASingleLine: Empty +AllowShortFunctionsOnASingleLine: Inline AllowShortIfStatementsOnASingleLine: false AllowShortLoopsOnASingleLine: true AlwaysBreakAfterReturnType: None diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp index b8725c7e..066f832f 100644 --- a/java/jni/YGJNI.cpp +++ b/java/jni/YGJNI.cpp @@ -135,18 +135,14 @@ public: node->setContext(context.asVoidPtr); } - bool has(Edge edge) { - return (edges_ & edge) == edge; - } + bool has(Edge edge) { return (edges_ & edge) == edge; } YGNodeEdges& add(Edge edge) { edges_ |= edge; return *this; } - int get() { - return edges_; - } + int get() { return edges_; } }; struct YogaValue { diff --git a/tests/YGConfigTest.cpp b/tests/YGConfigTest.cpp index 9aa33e00..d43cb29f 100644 --- a/tests/YGConfigTest.cpp +++ b/tests/YGConfigTest.cpp @@ -20,12 +20,8 @@ struct ConfigCloningTest : public ::testing::Test { void TearDown() override; static YGNode clonedNode; - static YGNodeRef cloneNode(YGNodeRef, YGNodeRef, int) { - return &clonedNode; - } - static YGNodeRef doNotClone(YGNodeRef, YGNodeRef, int) { - return nullptr; - } + static YGNodeRef cloneNode(YGNodeRef, YGNodeRef, int) { return &clonedNode; } + static YGNodeRef doNotClone(YGNodeRef, YGNodeRef, int) { return nullptr; } }; TEST_F(ConfigCloningTest, uses_values_provided_by_cloning_callback) { diff --git a/yoga/CompactValue.h b/yoga/CompactValue.h index 3cc36a48..20451779 100644 --- a/yoga/CompactValue.h +++ b/yoga/CompactValue.h @@ -134,9 +134,7 @@ public: payload_.repr != ZERO_BITS_PERCENT && std::isnan(payload_.value)); } - bool isAuto() const noexcept { - return payload_.repr == AUTO_BITS; - } + bool isAuto() const noexcept { return payload_.repr == AUTO_BITS; } private: union Payload { @@ -160,9 +158,7 @@ private: Payload payload_; - VISIBLE_FOR_TESTING uint32_t repr() { - return payload_.repr; - } + VISIBLE_FOR_TESTING uint32_t repr() { return payload_.repr; } }; template <> diff --git a/yoga/YGConfig.h b/yoga/YGConfig.h index e0f29c5f..311c1597 100644 --- a/yoga/YGConfig.h +++ b/yoga/YGConfig.h @@ -56,9 +56,7 @@ public: logger_.withContext = logger; loggerUsesContext_ = true; } - void setLogger(std::nullptr_t) { - setLogger(YGLogger{nullptr}); - } + void setLogger(std::nullptr_t) { setLogger(YGLogger{nullptr}); } YGNodeRef cloneNode( YGNodeRef node, diff --git a/yoga/YGFloatOptional.h b/yoga/YGFloatOptional.h index 02d4c856..80a851a0 100644 --- a/yoga/YGFloatOptional.h +++ b/yoga/YGFloatOptional.h @@ -19,23 +19,15 @@ public: constexpr YGFloatOptional() = default; // returns the wrapped value, or a value x with YGIsUndefined(x) == true - constexpr float unwrap() const { - return value_; - } + constexpr float unwrap() const { return value_; } - bool isUndefined() const { - return std::isnan(value_); - } + bool isUndefined() const { return std::isnan(value_); } YGFloatOptional operator+(YGFloatOptional op) const { return YGFloatOptional{value_ + op.value_}; } - bool operator>(YGFloatOptional op) const { - return value_ > op.value_; - } - bool operator<(YGFloatOptional op) const { - return value_ < op.value_; - } + bool operator>(YGFloatOptional op) const { return value_ > op.value_; } + bool operator<(YGFloatOptional op) const { return value_ < op.value_; } bool operator>=(YGFloatOptional op) const { return *this > op || *this == op; } @@ -45,14 +37,10 @@ public: bool operator==(YGFloatOptional op) const { return value_ == op.value_ || (isUndefined() && op.isUndefined()); } - bool operator!=(YGFloatOptional op) const { - return !(*this == op); - } + bool operator!=(YGFloatOptional op) const { return !(*this == op); } bool operator==(float val) const { return value_ == val || (isUndefined() && yoga::isUndefined(val)); } - bool operator!=(float val) const { - return !(*this == val); - } + bool operator!=(float val) const { return !(*this == val); } }; diff --git a/yoga/YGLayout.h b/yoga/YGLayout.h index c9c821f8..0e559d74 100644 --- a/yoga/YGLayout.h +++ b/yoga/YGLayout.h @@ -44,7 +44,5 @@ struct YGLayout { hadOverflow(false) {} bool operator==(YGLayout layout) const; - bool operator!=(YGLayout layout) const { - return !(*this == layout); - } + bool operator!=(YGLayout layout) const { return !(*this == layout); } }; diff --git a/yoga/YGMarker.h b/yoga/YGMarker.h index 25362ff5..89b03684 100644 --- a/yoga/YGMarker.h +++ b/yoga/YGMarker.h @@ -62,16 +62,12 @@ struct MarkerData; template <> struct MarkerData { using type = YGMarkerLayoutData; - static type*& get(YGMarkerData& d) { - return d.layout; - } + static type*& get(YGMarkerData& d) { return d.layout; } }; struct NoMarkerData { using type = YGMarkerNoData; - static type*& get(YGMarkerData& d) { - return d.noData; - } + static type*& get(YGMarkerData& d) { return d.noData; } }; template <> diff --git a/yoga/YGNode.h b/yoga/YGNode.h index b5ff98a5..086e3ca0 100644 --- a/yoga/YGNode.h +++ b/yoga/YGNode.h @@ -85,23 +85,15 @@ public: YGNode& operator=(const YGNode&) = delete; // Getters - void* getContext() const { - return context_; - } + void* getContext() const { return context_; } void print(void*); - bool getHasNewLayout() const { - return hasNewLayout_; - } + bool getHasNewLayout() const { return hasNewLayout_; } - YGNodeType getNodeType() const { - return nodeType_; - } + YGNodeType getNodeType() const { return nodeType_; } - bool hasMeasureFunc() const noexcept { - return measure_.noContext != nullptr; - } + bool hasMeasureFunc() const noexcept { return measure_.noContext != nullptr; } YGSize measure(float, YGMeasureMode, float, YGMeasureMode, void*); @@ -111,52 +103,32 @@ public: float baseline(float width, float height, void* layoutContext); - YGDirtiedFunc getDirtied() const { - return dirtied_; - } + YGDirtiedFunc getDirtied() const { return dirtied_; } // For Performance reasons passing as reference. - YGStyle& getStyle() { - return style_; - } + YGStyle& getStyle() { return style_; } - const YGStyle& getStyle() const { - return style_; - } + const YGStyle& getStyle() const { return style_; } // For Performance reasons passing as reference. - YGLayout& getLayout() { - return layout_; - } + YGLayout& getLayout() { return layout_; } - const YGLayout& getLayout() const { - return layout_; - } + const YGLayout& getLayout() const { return layout_; } - uint32_t getLineIndex() const { - return lineIndex_; - } + uint32_t getLineIndex() const { return lineIndex_; } - bool isReferenceBaseline() { - return isReferenceBaseline_; - } + bool isReferenceBaseline() { return isReferenceBaseline_; } // returns the YGNodeRef that owns this YGNode. An owner is used to identify // the YogaTree that a YGNode belongs to. This method will return the parent // of the YGNode when a YGNode only belongs to one YogaTree or nullptr when // the YGNode is shared between two or more YogaTrees. - YGNodeRef getOwner() const { - return owner_; - } + YGNodeRef getOwner() const { return owner_; } // Deprecated, use getOwner() instead. - YGNodeRef getParent() const { - return getOwner(); - } + YGNodeRef getParent() const { return getOwner(); } - const YGVector& getChildren() const { - return children_; - } + const YGVector& getChildren() const { return children_; } // Applies a callback to all children, after cloning them if they are not // owned. @@ -174,17 +146,11 @@ public: } } - YGNodeRef getChild(uint32_t index) const { - return children_.at(index); - } + YGNodeRef getChild(uint32_t index) const { return children_.at(index); } - YGConfigRef getConfig() const { - return config_; - } + YGConfigRef getConfig() const { return config_; } - bool isDirty() const { - return isDirty_; - } + bool isDirty() const { return isDirty_; } std::array getResolvedDimensions() const { return resolvedDimensions_; @@ -228,9 +194,7 @@ public: const float widthSize) const; // Setters - void setContext(void* context) { - context_ = context; - } + void setContext(void* context) { context_ = context; } void setPrintFunc(YGPrintFunc printFunc) { print_.noContext = printFunc; @@ -240,17 +204,11 @@ public: print_.withContext = printFunc; printUsesContext_ = true; } - void setPrintFunc(std::nullptr_t) { - setPrintFunc(YGPrintFunc{nullptr}); - } + void setPrintFunc(std::nullptr_t) { setPrintFunc(YGPrintFunc{nullptr}); } - void setHasNewLayout(bool hasNewLayout) { - hasNewLayout_ = hasNewLayout; - } + void setHasNewLayout(bool hasNewLayout) { hasNewLayout_ = hasNewLayout; } - void setNodeType(YGNodeType nodeType) { - nodeType_ = nodeType; - } + void setNodeType(YGNodeType nodeType) { nodeType_ = nodeType; } void setStyleFlexDirection(YGFlexDirection direction) { style_.flexDirection = direction; @@ -278,39 +236,25 @@ public: return setBaselineFunc(YGBaselineFunc{nullptr}); } - void setDirtiedFunc(YGDirtiedFunc dirtiedFunc) { - dirtied_ = dirtiedFunc; - } + void setDirtiedFunc(YGDirtiedFunc dirtiedFunc) { dirtied_ = dirtiedFunc; } - void setStyle(const YGStyle& style) { - style_ = style; - } + void setStyle(const YGStyle& style) { style_ = style; } - void setLayout(const YGLayout& layout) { - layout_ = layout; - } + void setLayout(const YGLayout& layout) { layout_ = layout; } - void setLineIndex(uint32_t lineIndex) { - lineIndex_ = lineIndex; - } + void setLineIndex(uint32_t lineIndex) { lineIndex_ = lineIndex; } void setIsReferenceBaseline(bool isReferenceBaseline) { isReferenceBaseline_ = isReferenceBaseline; } - void setOwner(YGNodeRef owner) { - owner_ = owner; - } + void setOwner(YGNodeRef owner) { owner_ = owner; } - void setChildren(const YGVector& children) { - children_ = children; - } + void setChildren(const YGVector& children) { children_ = children; } // TODO: rvalue override for setChildren - void setConfig(YGConfigRef config) { - config_ = config; - } + void setConfig(YGConfigRef config) { config_ = config; } void setDirty(bool isDirty); void setLayoutLastOwnerDirection(YGDirection direction); diff --git a/yoga/Yoga-internal.h b/yoga/Yoga-internal.h index be815921..a5cf3037 100644 --- a/yoga/Yoga-internal.h +++ b/yoga/Yoga-internal.h @@ -112,12 +112,8 @@ public: values_.fill(defaultValue); } - const CompactValue& operator[](size_t i) const noexcept { - return values_[i]; - } - CompactValue& operator[](size_t i) noexcept { - return values_[i]; - } + const CompactValue& operator[](size_t i) const noexcept { return values_[i]; } + CompactValue& operator[](size_t i) noexcept { return values_[i]; } template YGValue get() const noexcept { From e167642672cbcddfa990b12ca2255958d0f2f5fb Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Tue, 23 Apr 2019 08:08:51 -0700 Subject: [PATCH 041/347] `Yoga.h`: clean up `const` / `extern` Summary: @public Remove unnecessary `const` and `extern` specifiers from `Yoga.h`. - Function declarations are `extern` by default - The removed `const` specifiers for pass-by-valye parameters are only meaningful for the *definition* of functions, not for the declaration. In this specific case, I found `const YGNodeRef` particularly confusing, as it is a `typedef` for a pointer type. `const` does not refer to the pointed-to object, but to the parameter itself, i.e. `const YGNodeRef` is `YGNode * const`, and not `const YGNode *`. Reviewed By: SidharthGuglani Differential Revision: D14999097 fbshipit-source-id: 8350870cb67f4a34722f796c4f4a2fc7dde41b99 --- yoga/Yoga.cpp | 2 +- yoga/Yoga.h | 392 +++++++++++++++++++++----------------------------- 2 files changed, 166 insertions(+), 228 deletions(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 213b7ca2..f041a6d3 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -473,7 +473,7 @@ static void YGNodeSetChildrenInternal( } void YGNodeSetChildren( - YGNodeRef const owner, + const YGNodeRef owner, const YGNodeRef c[], const uint32_t count) { const YGVector children = {c, c + count}; diff --git a/yoga/Yoga.h b/yoga/Yoga.h index 753a2f9f..5183710d 100644 --- a/yoga/Yoga.h +++ b/yoga/Yoga.h @@ -38,14 +38,13 @@ typedef YGSize (*YGMeasureFunc)( YGMeasureMode widthMode, float height, YGMeasureMode heightMode); -typedef float ( - *YGBaselineFunc)(YGNodeRef node, const float width, const float height); +typedef float (*YGBaselineFunc)(YGNodeRef node, float width, float height); typedef void (*YGDirtiedFunc)(YGNodeRef node); typedef void (*YGPrintFunc)(YGNodeRef node); typedef void (*YGNodeCleanupFunc)(YGNodeRef node); typedef int (*YGLogger)( - const YGConfigRef config, - const YGNodeRef node, + YGConfigRef config, + YGNodeRef node, YGLogLevel level, const char* format, va_list args); @@ -54,31 +53,31 @@ typedef YGNodeRef ( // YGNode WIN_EXPORT YGNodeRef YGNodeNew(void); -WIN_EXPORT YGNodeRef YGNodeNewWithConfig(const YGConfigRef config); -WIN_EXPORT YGNodeRef YGNodeClone(const YGNodeRef node); -WIN_EXPORT void YGNodeFree(const YGNodeRef node); +WIN_EXPORT YGNodeRef YGNodeNewWithConfig(YGConfigRef config); +WIN_EXPORT YGNodeRef YGNodeClone(YGNodeRef node); +WIN_EXPORT void YGNodeFree(YGNodeRef node); WIN_EXPORT void YGNodeFreeRecursiveWithCleanupFunc( - const YGNodeRef node, + YGNodeRef node, YGNodeCleanupFunc cleanup); -WIN_EXPORT void YGNodeFreeRecursive(const YGNodeRef node); -WIN_EXPORT void YGNodeReset(const YGNodeRef node); +WIN_EXPORT void YGNodeFreeRecursive(YGNodeRef node); +WIN_EXPORT void YGNodeReset(YGNodeRef node); WIN_EXPORT int32_t YGNodeGetInstanceCount(void); WIN_EXPORT void YGNodeInsertChild( - const YGNodeRef node, - const YGNodeRef child, - const uint32_t index); + YGNodeRef node, + YGNodeRef child, + uint32_t index); -WIN_EXPORT void YGNodeRemoveChild(const YGNodeRef node, const YGNodeRef child); -WIN_EXPORT void YGNodeRemoveAllChildren(const YGNodeRef node); -WIN_EXPORT YGNodeRef YGNodeGetChild(const YGNodeRef node, const uint32_t index); -WIN_EXPORT YGNodeRef YGNodeGetOwner(const YGNodeRef node); -WIN_EXPORT YGNodeRef YGNodeGetParent(const YGNodeRef node); -WIN_EXPORT uint32_t YGNodeGetChildCount(const YGNodeRef node); +WIN_EXPORT void YGNodeRemoveChild(YGNodeRef node, YGNodeRef child); +WIN_EXPORT void YGNodeRemoveAllChildren(YGNodeRef node); +WIN_EXPORT YGNodeRef YGNodeGetChild(YGNodeRef node, uint32_t index); +WIN_EXPORT YGNodeRef YGNodeGetOwner(YGNodeRef node); +WIN_EXPORT YGNodeRef YGNodeGetParent(YGNodeRef node); +WIN_EXPORT uint32_t YGNodeGetChildCount(YGNodeRef node); WIN_EXPORT void YGNodeSetChildren( - YGNodeRef const owner, + YGNodeRef owner, const YGNodeRef children[], - const uint32_t count); + uint32_t count); WIN_EXPORT void YGNodeSetIsReferenceBaseline( YGNodeRef node, @@ -87,10 +86,10 @@ WIN_EXPORT void YGNodeSetIsReferenceBaseline( WIN_EXPORT bool YGNodeIsReferenceBaseline(YGNodeRef node); WIN_EXPORT void YGNodeCalculateLayout( - const YGNodeRef node, - const float availableWidth, - const float availableHeight, - const YGDirection ownerDirection); + YGNodeRef node, + float availableWidth, + float availableHeight, + YGDirection ownerDirection); // Mark a node as dirty. Only valid for nodes with a custom measure function // set. @@ -98,36 +97,34 @@ WIN_EXPORT void YGNodeCalculateLayout( // Yoga knows when to mark all other nodes as dirty but because nodes with // measure functions depend on information not known to Yoga they must perform // this dirty marking manually. -WIN_EXPORT void YGNodeMarkDirty(const YGNodeRef node); +WIN_EXPORT void YGNodeMarkDirty(YGNodeRef node); // Marks the current node and all its descendants as dirty. // // Intended to be used for Uoga benchmarks. Don't use in production, as calling // `YGCalculateLayout` will cause the recalculation of each and every node. -WIN_EXPORT void YGNodeMarkDirtyAndPropogateToDescendants(const YGNodeRef node); +WIN_EXPORT void YGNodeMarkDirtyAndPropogateToDescendants(YGNodeRef node); -WIN_EXPORT void YGNodePrint(const YGNodeRef node, const YGPrintOptions options); +WIN_EXPORT void YGNodePrint(YGNodeRef node, YGPrintOptions options); -WIN_EXPORT bool YGFloatIsUndefined(const float value); +WIN_EXPORT bool YGFloatIsUndefined(float value); WIN_EXPORT bool YGNodeCanUseCachedMeasurement( - const YGMeasureMode widthMode, - const float width, - const YGMeasureMode heightMode, - const float height, - const YGMeasureMode lastWidthMode, - const float lastWidth, - const YGMeasureMode lastHeightMode, - const float lastHeight, - const float lastComputedWidth, - const float lastComputedHeight, - const float marginRow, - const float marginColumn, - const YGConfigRef config); + YGMeasureMode widthMode, + float width, + YGMeasureMode heightMode, + float height, + YGMeasureMode lastWidthMode, + float lastWidth, + YGMeasureMode lastHeightMode, + float lastHeight, + float lastComputedWidth, + float lastComputedHeight, + float marginRow, + float marginColumn, + YGConfigRef config); -WIN_EXPORT void YGNodeCopyStyle( - const YGNodeRef dstNode, - const YGNodeRef srcNode); +WIN_EXPORT void YGNodeCopyStyle(YGNodeRef dstNode, YGNodeRef srcNode); WIN_EXPORT void* YGNodeGetContext(YGNodeRef node); WIN_EXPORT void YGNodeSetContext(YGNodeRef node, void* context); @@ -144,167 +141,116 @@ WIN_EXPORT void YGNodeSetHasNewLayout(YGNodeRef node, bool hasNewLayout); YGNodeType YGNodeGetNodeType(YGNodeRef node); void YGNodeSetNodeType(YGNodeRef node, YGNodeType nodeType); WIN_EXPORT bool YGNodeIsDirty(YGNodeRef node); -bool YGNodeLayoutGetDidUseLegacyFlag(const YGNodeRef node); +bool YGNodeLayoutGetDidUseLegacyFlag(YGNodeRef node); -WIN_EXPORT void YGNodeStyleSetDirection( - const YGNodeRef node, - const YGDirection direction); -WIN_EXPORT YGDirection YGNodeStyleGetDirection(const YGNodeRef node); +WIN_EXPORT void YGNodeStyleSetDirection(YGNodeRef node, YGDirection direction); +WIN_EXPORT YGDirection YGNodeStyleGetDirection(YGNodeRef node); WIN_EXPORT void YGNodeStyleSetFlexDirection( - const YGNodeRef node, - const YGFlexDirection flexDirection); -WIN_EXPORT YGFlexDirection YGNodeStyleGetFlexDirection(const YGNodeRef node); + YGNodeRef node, + YGFlexDirection flexDirection); +WIN_EXPORT YGFlexDirection YGNodeStyleGetFlexDirection(YGNodeRef node); WIN_EXPORT void YGNodeStyleSetJustifyContent( - const YGNodeRef node, - const YGJustify justifyContent); -WIN_EXPORT YGJustify YGNodeStyleGetJustifyContent(const YGNodeRef node); + YGNodeRef node, + YGJustify justifyContent); +WIN_EXPORT YGJustify YGNodeStyleGetJustifyContent(YGNodeRef node); WIN_EXPORT void YGNodeStyleSetAlignContent( - const YGNodeRef node, - const YGAlign alignContent); -WIN_EXPORT YGAlign YGNodeStyleGetAlignContent(const YGNodeRef node); + YGNodeRef node, + YGAlign alignContent); +WIN_EXPORT YGAlign YGNodeStyleGetAlignContent(YGNodeRef node); -WIN_EXPORT void YGNodeStyleSetAlignItems( - const YGNodeRef node, - const YGAlign alignItems); -WIN_EXPORT YGAlign YGNodeStyleGetAlignItems(const YGNodeRef node); +WIN_EXPORT void YGNodeStyleSetAlignItems(YGNodeRef node, YGAlign alignItems); +WIN_EXPORT YGAlign YGNodeStyleGetAlignItems(YGNodeRef node); -WIN_EXPORT void YGNodeStyleSetAlignSelf( - const YGNodeRef node, - const YGAlign alignSelf); -WIN_EXPORT YGAlign YGNodeStyleGetAlignSelf(const YGNodeRef node); +WIN_EXPORT void YGNodeStyleSetAlignSelf(YGNodeRef node, YGAlign alignSelf); +WIN_EXPORT YGAlign YGNodeStyleGetAlignSelf(YGNodeRef node); WIN_EXPORT void YGNodeStyleSetPositionType( - const YGNodeRef node, - const YGPositionType positionType); -WIN_EXPORT YGPositionType YGNodeStyleGetPositionType(const YGNodeRef node); + YGNodeRef node, + YGPositionType positionType); +WIN_EXPORT YGPositionType YGNodeStyleGetPositionType(YGNodeRef node); -WIN_EXPORT void YGNodeStyleSetFlexWrap( - const YGNodeRef node, - const YGWrap flexWrap); -WIN_EXPORT YGWrap YGNodeStyleGetFlexWrap(const YGNodeRef node); +WIN_EXPORT void YGNodeStyleSetFlexWrap(YGNodeRef node, YGWrap flexWrap); +WIN_EXPORT YGWrap YGNodeStyleGetFlexWrap(YGNodeRef node); -WIN_EXPORT void YGNodeStyleSetOverflow( - const YGNodeRef node, - const YGOverflow overflow); -WIN_EXPORT YGOverflow YGNodeStyleGetOverflow(const YGNodeRef node); +WIN_EXPORT void YGNodeStyleSetOverflow(YGNodeRef node, YGOverflow overflow); +WIN_EXPORT YGOverflow YGNodeStyleGetOverflow(YGNodeRef node); -WIN_EXPORT void YGNodeStyleSetDisplay( - const YGNodeRef node, - const YGDisplay display); -WIN_EXPORT YGDisplay YGNodeStyleGetDisplay(const YGNodeRef node); +WIN_EXPORT void YGNodeStyleSetDisplay(YGNodeRef node, YGDisplay display); +WIN_EXPORT YGDisplay YGNodeStyleGetDisplay(YGNodeRef node); -WIN_EXPORT void YGNodeStyleSetFlex(const YGNodeRef node, const float flex); -WIN_EXPORT float YGNodeStyleGetFlex(const YGNodeRef node); +WIN_EXPORT void YGNodeStyleSetFlex(YGNodeRef node, float flex); +WIN_EXPORT float YGNodeStyleGetFlex(YGNodeRef node); -WIN_EXPORT void YGNodeStyleSetFlexGrow( - const YGNodeRef node, - const float flexGrow); -WIN_EXPORT float YGNodeStyleGetFlexGrow(const YGNodeRef node); +WIN_EXPORT void YGNodeStyleSetFlexGrow(YGNodeRef node, float flexGrow); +WIN_EXPORT float YGNodeStyleGetFlexGrow(YGNodeRef node); -WIN_EXPORT void YGNodeStyleSetFlexShrink( - const YGNodeRef node, - const float flexShrink); -WIN_EXPORT float YGNodeStyleGetFlexShrink(const YGNodeRef node); +WIN_EXPORT void YGNodeStyleSetFlexShrink(YGNodeRef node, float flexShrink); +WIN_EXPORT float YGNodeStyleGetFlexShrink(YGNodeRef node); -WIN_EXPORT void YGNodeStyleSetFlexBasis( - const YGNodeRef node, - const float flexBasis); -WIN_EXPORT void YGNodeStyleSetFlexBasisPercent( - const YGNodeRef node, - const float flexBasis); -WIN_EXPORT void YGNodeStyleSetFlexBasisAuto(const YGNodeRef node); -WIN_EXPORT YGValue YGNodeStyleGetFlexBasis(const YGNodeRef node); +WIN_EXPORT void YGNodeStyleSetFlexBasis(YGNodeRef node, float flexBasis); +WIN_EXPORT void YGNodeStyleSetFlexBasisPercent(YGNodeRef node, float flexBasis); +WIN_EXPORT void YGNodeStyleSetFlexBasisAuto(YGNodeRef node); +WIN_EXPORT YGValue YGNodeStyleGetFlexBasis(YGNodeRef node); WIN_EXPORT void YGNodeStyleSetPosition( - const YGNodeRef node, - const YGEdge edge, - const float position); + YGNodeRef node, + YGEdge edge, + float position); WIN_EXPORT void YGNodeStyleSetPositionPercent( - const YGNodeRef node, - const YGEdge edge, - const float position); -WIN_EXPORT YGValue -YGNodeStyleGetPosition(const YGNodeRef node, const YGEdge edge); + YGNodeRef node, + YGEdge edge, + float position); +WIN_EXPORT YGValue YGNodeStyleGetPosition(YGNodeRef node, YGEdge edge); -WIN_EXPORT void YGNodeStyleSetMargin( - const YGNodeRef node, - const YGEdge edge, - const float margin); +WIN_EXPORT void YGNodeStyleSetMargin(YGNodeRef node, YGEdge edge, float margin); WIN_EXPORT void YGNodeStyleSetMarginPercent( - const YGNodeRef node, - const YGEdge edge, - const float margin); -WIN_EXPORT void YGNodeStyleSetMarginAuto( - const YGNodeRef node, - const YGEdge edge); -WIN_EXPORT YGValue -YGNodeStyleGetMargin(const YGNodeRef node, const YGEdge edge); + YGNodeRef node, + YGEdge edge, + float margin); +WIN_EXPORT void YGNodeStyleSetMarginAuto(YGNodeRef node, YGEdge edge); +WIN_EXPORT YGValue YGNodeStyleGetMargin(YGNodeRef node, YGEdge edge); WIN_EXPORT void YGNodeStyleSetPadding( - const YGNodeRef node, - const YGEdge edge, - const float padding); + YGNodeRef node, + YGEdge edge, + float padding); WIN_EXPORT void YGNodeStyleSetPaddingPercent( - const YGNodeRef node, - const YGEdge edge, - const float padding); -WIN_EXPORT YGValue -YGNodeStyleGetPadding(const YGNodeRef node, const YGEdge edge); + YGNodeRef node, + YGEdge edge, + float padding); +WIN_EXPORT YGValue YGNodeStyleGetPadding(YGNodeRef node, YGEdge edge); -WIN_EXPORT void YGNodeStyleSetBorder( - const YGNodeRef node, - const YGEdge edge, - const float border); -WIN_EXPORT float YGNodeStyleGetBorder(const YGNodeRef node, const YGEdge edge); +WIN_EXPORT void YGNodeStyleSetBorder(YGNodeRef node, YGEdge edge, float border); +WIN_EXPORT float YGNodeStyleGetBorder(YGNodeRef node, YGEdge edge); -WIN_EXPORT void YGNodeStyleSetWidth(const YGNodeRef node, const float width); -WIN_EXPORT void YGNodeStyleSetWidthPercent( - const YGNodeRef node, - const float width); -WIN_EXPORT void YGNodeStyleSetWidthAuto(const YGNodeRef node); -WIN_EXPORT YGValue YGNodeStyleGetWidth(const YGNodeRef node); +WIN_EXPORT void YGNodeStyleSetWidth(YGNodeRef node, float width); +WIN_EXPORT void YGNodeStyleSetWidthPercent(YGNodeRef node, float width); +WIN_EXPORT void YGNodeStyleSetWidthAuto(YGNodeRef node); +WIN_EXPORT YGValue YGNodeStyleGetWidth(YGNodeRef node); -WIN_EXPORT void YGNodeStyleSetHeight(const YGNodeRef node, const float height); -WIN_EXPORT void YGNodeStyleSetHeightPercent( - const YGNodeRef node, - const float height); -WIN_EXPORT void YGNodeStyleSetHeightAuto(const YGNodeRef node); -WIN_EXPORT YGValue YGNodeStyleGetHeight(const YGNodeRef node); +WIN_EXPORT void YGNodeStyleSetHeight(YGNodeRef node, float height); +WIN_EXPORT void YGNodeStyleSetHeightPercent(YGNodeRef node, float height); +WIN_EXPORT void YGNodeStyleSetHeightAuto(YGNodeRef node); +WIN_EXPORT YGValue YGNodeStyleGetHeight(YGNodeRef node); -WIN_EXPORT void YGNodeStyleSetMinWidth( - const YGNodeRef node, - const float minWidth); -WIN_EXPORT void YGNodeStyleSetMinWidthPercent( - const YGNodeRef node, - const float minWidth); -WIN_EXPORT YGValue YGNodeStyleGetMinWidth(const YGNodeRef node); +WIN_EXPORT void YGNodeStyleSetMinWidth(YGNodeRef node, float minWidth); +WIN_EXPORT void YGNodeStyleSetMinWidthPercent(YGNodeRef node, float minWidth); +WIN_EXPORT YGValue YGNodeStyleGetMinWidth(YGNodeRef node); -WIN_EXPORT void YGNodeStyleSetMinHeight( - const YGNodeRef node, - const float minHeight); -WIN_EXPORT void YGNodeStyleSetMinHeightPercent( - const YGNodeRef node, - const float minHeight); -WIN_EXPORT YGValue YGNodeStyleGetMinHeight(const YGNodeRef node); +WIN_EXPORT void YGNodeStyleSetMinHeight(YGNodeRef node, float minHeight); +WIN_EXPORT void YGNodeStyleSetMinHeightPercent(YGNodeRef node, float minHeight); +WIN_EXPORT YGValue YGNodeStyleGetMinHeight(YGNodeRef node); -WIN_EXPORT void YGNodeStyleSetMaxWidth( - const YGNodeRef node, - const float maxWidth); -WIN_EXPORT void YGNodeStyleSetMaxWidthPercent( - const YGNodeRef node, - const float maxWidth); -WIN_EXPORT YGValue YGNodeStyleGetMaxWidth(const YGNodeRef node); +WIN_EXPORT void YGNodeStyleSetMaxWidth(YGNodeRef node, float maxWidth); +WIN_EXPORT void YGNodeStyleSetMaxWidthPercent(YGNodeRef node, float maxWidth); +WIN_EXPORT YGValue YGNodeStyleGetMaxWidth(YGNodeRef node); -WIN_EXPORT void YGNodeStyleSetMaxHeight( - const YGNodeRef node, - const float maxHeight); -WIN_EXPORT void YGNodeStyleSetMaxHeightPercent( - const YGNodeRef node, - const float maxHeight); -WIN_EXPORT YGValue YGNodeStyleGetMaxHeight(const YGNodeRef node); +WIN_EXPORT void YGNodeStyleSetMaxHeight(YGNodeRef node, float maxHeight); +WIN_EXPORT void YGNodeStyleSetMaxHeightPercent(YGNodeRef node, float maxHeight); +WIN_EXPORT YGValue YGNodeStyleGetMaxHeight(YGNodeRef node); // Yoga specific properties, not compatible with flexbox specification Aspect // ratio control the size of the undefined dimension of a node. Aspect ratio is @@ -321,49 +267,45 @@ WIN_EXPORT YGValue YGNodeStyleGetMaxHeight(const YGNodeRef node); // - On a node with flex grow/shrink aspect ratio controls the size of the node // in the cross axis if unset // - Aspect ratio takes min/max dimensions into account -WIN_EXPORT void YGNodeStyleSetAspectRatio( - const YGNodeRef node, - const float aspectRatio); -WIN_EXPORT float YGNodeStyleGetAspectRatio(const YGNodeRef node); +WIN_EXPORT void YGNodeStyleSetAspectRatio(YGNodeRef node, float aspectRatio); +WIN_EXPORT float YGNodeStyleGetAspectRatio(YGNodeRef node); -WIN_EXPORT float YGNodeLayoutGetLeft(const YGNodeRef node); -WIN_EXPORT float YGNodeLayoutGetTop(const YGNodeRef node); -WIN_EXPORT float YGNodeLayoutGetRight(const YGNodeRef node); -WIN_EXPORT float YGNodeLayoutGetBottom(const YGNodeRef node); -WIN_EXPORT float YGNodeLayoutGetWidth(const YGNodeRef node); -WIN_EXPORT float YGNodeLayoutGetHeight(const YGNodeRef node); -WIN_EXPORT YGDirection YGNodeLayoutGetDirection(const YGNodeRef node); -WIN_EXPORT bool YGNodeLayoutGetHadOverflow(const YGNodeRef node); -bool YGNodeLayoutGetDidLegacyStretchFlagAffectLayout(const YGNodeRef node); +WIN_EXPORT float YGNodeLayoutGetLeft(YGNodeRef node); +WIN_EXPORT float YGNodeLayoutGetTop(YGNodeRef node); +WIN_EXPORT float YGNodeLayoutGetRight(YGNodeRef node); +WIN_EXPORT float YGNodeLayoutGetBottom(YGNodeRef node); +WIN_EXPORT float YGNodeLayoutGetWidth(YGNodeRef node); +WIN_EXPORT float YGNodeLayoutGetHeight(YGNodeRef node); +WIN_EXPORT YGDirection YGNodeLayoutGetDirection(YGNodeRef node); +WIN_EXPORT bool YGNodeLayoutGetHadOverflow(YGNodeRef node); +bool YGNodeLayoutGetDidLegacyStretchFlagAffectLayout(YGNodeRef node); // Get the computed values for these nodes after performing layout. If they were // set using point values then the returned value will be the same as // YGNodeStyleGetXXX. However if they were set using a percentage value then the // returned value is the computed value used during layout. -WIN_EXPORT float YGNodeLayoutGetMargin(const YGNodeRef node, const YGEdge edge); -WIN_EXPORT float YGNodeLayoutGetBorder(const YGNodeRef node, const YGEdge edge); -WIN_EXPORT float YGNodeLayoutGetPadding( - const YGNodeRef node, - const YGEdge edge); +WIN_EXPORT float YGNodeLayoutGetMargin(YGNodeRef node, YGEdge edge); +WIN_EXPORT float YGNodeLayoutGetBorder(YGNodeRef node, YGEdge edge); +WIN_EXPORT float YGNodeLayoutGetPadding(YGNodeRef node, YGEdge edge); -WIN_EXPORT void YGConfigSetLogger(const YGConfigRef config, YGLogger logger); -WIN_EXPORT void YGAssert(const bool condition, const char* message); +WIN_EXPORT void YGConfigSetLogger(YGConfigRef config, YGLogger logger); +WIN_EXPORT void YGAssert(bool condition, const char* message); WIN_EXPORT void YGAssertWithNode( - const YGNodeRef node, - const bool condition, + YGNodeRef node, + bool condition, const char* message); WIN_EXPORT void YGAssertWithConfig( - const YGConfigRef config, - const bool condition, + YGConfigRef config, + bool condition, const char* message); // Set this to number of pixels in 1 point to round calculation results If you // want to avoid rounding - set PointScaleFactor to 0 WIN_EXPORT void YGConfigSetPointScaleFactor( - const YGConfigRef config, - const float pixelsInPoint); + YGConfigRef config, + float pixelsInPoint); void YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviour( - const YGConfigRef config, - const bool shouldDiffLayout); + YGConfigRef config, + bool shouldDiffLayout); // Yoga previously had an error where containers would take the maximum space // possible instead of the minimum like they are supposed to. In practice this @@ -371,45 +313,43 @@ void YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviour( // was such a long-standing bug we must allow legacy users to switch back to // this behaviour. WIN_EXPORT void YGConfigSetUseLegacyStretchBehaviour( - const YGConfigRef config, - const bool useLegacyStretchBehaviour); + YGConfigRef config, + bool useLegacyStretchBehaviour); // YGConfig WIN_EXPORT YGConfigRef YGConfigNew(void); -WIN_EXPORT void YGConfigFree(const YGConfigRef config); -WIN_EXPORT void YGConfigCopy(const YGConfigRef dest, const YGConfigRef src); +WIN_EXPORT void YGConfigFree(YGConfigRef config); +WIN_EXPORT void YGConfigCopy(YGConfigRef dest, YGConfigRef src); WIN_EXPORT int32_t YGConfigGetInstanceCount(void); WIN_EXPORT void YGConfigSetExperimentalFeatureEnabled( - const YGConfigRef config, - const YGExperimentalFeature feature, - const bool enabled); + YGConfigRef config, + YGExperimentalFeature feature, + bool enabled); WIN_EXPORT bool YGConfigIsExperimentalFeatureEnabled( - const YGConfigRef config, - const YGExperimentalFeature feature); + YGConfigRef config, + YGExperimentalFeature feature); // Using the web defaults is the prefered configuration for new projects. Usage // of non web defaults should be considered as legacy. -WIN_EXPORT void YGConfigSetUseWebDefaults( - const YGConfigRef config, - const bool enabled); -WIN_EXPORT bool YGConfigGetUseWebDefaults(const YGConfigRef config); +WIN_EXPORT void YGConfigSetUseWebDefaults(YGConfigRef config, bool enabled); +WIN_EXPORT bool YGConfigGetUseWebDefaults(YGConfigRef config); WIN_EXPORT void YGConfigSetCloneNodeFunc( - const YGConfigRef config, - const YGCloneNodeFunc callback); + YGConfigRef config, + YGCloneNodeFunc callback); // Export only for C# WIN_EXPORT YGConfigRef YGConfigGetDefault(void); -WIN_EXPORT void YGConfigSetContext(const YGConfigRef config, void* context); -WIN_EXPORT void* YGConfigGetContext(const YGConfigRef config); +WIN_EXPORT void YGConfigSetContext(YGConfigRef config, void* context); +WIN_EXPORT void* YGConfigGetContext(YGConfigRef config); WIN_EXPORT float YGRoundValueToPixelGrid( - const float value, - const float pointScaleFactor, - const bool forceCeil, - const bool forceFloor); + float value, + float pointScaleFactor, + bool forceCeil, + bool forceFloor); YG_EXTERN_C_END @@ -419,12 +359,10 @@ YG_EXTERN_C_END #include // Calls f on each node in the tree including the given node argument. -extern void YGTraversePreOrder( - YGNodeRef const node, +void YGTraversePreOrder( + YGNodeRef node, std::function&& f); -extern void YGNodeSetChildren( - YGNodeRef const owner, - const std::vector& children); +void YGNodeSetChildren(YGNodeRef owner, const std::vector& children); #endif From dee93017f783c441f3e1a86e62eda014bf52b587 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Tue, 23 Apr 2019 08:08:51 -0700 Subject: [PATCH 042/347] `YGStyle`: wrap all fields into accessors Summary: @public In order to encapsulate property access on `YGStyle`, as a first measure we wrap all fields with accessors. This will e.g. enable dynamic property storage and instrumentation in the future. All accessors have a `const` version that allows direct access via `const&`. For mutation, bit fields are wrapped with a custom reference object. This style allows for the least amount of changes in client code. Property access simply needs appended parens, eg `style.direction` becomes `style.direction`. Reviewed By: shergin Differential Revision: D14999096 fbshipit-source-id: fbf29f7ddab520513d4618f5e70094c4f6330b30 --- tests/YGStyleAccessorsTest.cpp | 246 +++++++++++++++++++++ yoga/YGNode.cpp | 118 +++++----- yoga/YGNode.h | 15 +- yoga/YGNodePrint.cpp | 77 ++++--- yoga/YGStyle.cpp | 51 ++--- yoga/YGStyle.h | 182 ++++++++++++---- yoga/Yoga.cpp | 381 +++++++++++++++++---------------- 7 files changed, 720 insertions(+), 350 deletions(-) create mode 100644 tests/YGStyleAccessorsTest.cpp diff --git a/tests/YGStyleAccessorsTest.cpp b/tests/YGStyleAccessorsTest.cpp new file mode 100644 index 00000000..9e65ad55 --- /dev/null +++ b/tests/YGStyleAccessorsTest.cpp @@ -0,0 +1,246 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#include +#include +#include + +#include + +#define ACCESSOR_TESTS_1(NAME, X) \ + style.NAME() = X; \ + ASSERT_EQ(style.NAME(), X); +#define ACCESSOR_TESTS_2(NAME, X, ...) \ + ACCESSOR_TESTS_1(NAME, X); \ + ACCESSOR_TESTS_1(NAME, __VA_ARGS__); +#define ACCESSOR_TESTS_3(NAME, X, ...) \ + ACCESSOR_TESTS_1(NAME, X); \ + ACCESSOR_TESTS_2(NAME, __VA_ARGS__); +#define ACCESSOR_TESTS_4(NAME, X, ...) \ + ACCESSOR_TESTS_1(NAME, X); \ + ACCESSOR_TESTS_3(NAME, __VA_ARGS__); +#define ACCESSOR_TESTS_5(NAME, X, ...) \ + ACCESSOR_TESTS_1(NAME, X); \ + ACCESSOR_TESTS_4(NAME, __VA_ARGS__) + +#define ACCESSOR_TESTS_N(a, b, c, d, e, COUNT, ...) ACCESSOR_TESTS_##COUNT +#define ACCESSOR_TESTS(...) ACCESSOR_TESTS_N(__VA_ARGS__, 5, 4, 3, 2, 1) + +#define INDEX_ACCESSOR_TESTS_1(NAME, IDX, X) \ + style.NAME()[IDX] = X; \ + ASSERT_EQ(style.NAME()[IDX], X); + +#define INDEX_ACCESSOR_TESTS_2(NAME, IDX, X, Y) \ + INDEX_ACCESSOR_TESTS_1(NAME, IDX, X) \ + INDEX_ACCESSOR_TESTS_1(NAME, IDX, Y) + +#define INDEX_ACCESSOR_TESTS_3(NAME, IDX, X, ...) \ + INDEX_ACCESSOR_TESTS_1(NAME, IDX, X) \ + INDEX_ACCESSOR_TESTS_2(NAME, IDX, __VA_ARGS__) + +#define INDEX_ACCESSOR_TESTS_4(NAME, IDX, X, ...) \ + INDEX_ACCESSOR_TESTS_1(NAME, IDX, X) \ + INDEX_ACCESSOR_TESTS_3(NAME, IDX, __VA_ARGS__) + +#define INDEX_ACCESSOR_TESTS_5(NAME, IDX, X, ...) \ + INDEX_ACCESSOR_TESTS_1(NAME, IDX, X) \ + INDEX_ACCESSOR_TESTS_4(NAME, IDX, __VA_ARGS__) + +#define INDEX_ACCESSOR_TESTS_N(a, b, c, d, e, COUNT, ...) \ + INDEX_ACCESSOR_TESTS_##COUNT +#define INDEX_ACCESSOR_TESTS(...) \ + INDEX_ACCESSOR_TESTS_N(__VA_ARGS__, 5, 4, 3, 2, 1) + +// test macro for up to 5 values. If more are needed, extend the macros above. +#define ACCESSOR_TEST(NAME, DEFAULT_VAL, ...) \ + TEST(YGStyle, style_##NAME##_access) { \ + auto style = YGStyle{}; \ + ASSERT_EQ(style.NAME(), DEFAULT_VAL); \ + ACCESSOR_TESTS(__VA_ARGS__)(NAME, __VA_ARGS__) \ + } + +#define INDEX_ACCESSOR_TEST(NAME, DEFAULT_VAL, IDX, ...) \ + TEST(YGStyle, style_##NAME##_access) { \ + auto style = YGStyle{}; \ + ASSERT_EQ(style.NAME()[IDX], DEFAULT_VAL); \ + INDEX_ACCESSOR_TESTS(__VA_ARGS__)(NAME, IDX, __VA_ARGS__) \ + } + +namespace facebook { +namespace yoga { + +using CompactValue = detail::CompactValue; + +ACCESSOR_TEST( + direction, + YGDirectionInherit, + YGDirectionLTR, + YGDirectionRTL, + YGDirectionInherit); + +ACCESSOR_TEST( + flexDirection, + YGFlexDirectionColumn, + YGFlexDirectionColumnReverse, + YGFlexDirectionRowReverse, + YGFlexDirectionRow) + +ACCESSOR_TEST( + justifyContent, + YGJustifyFlexStart, + YGJustifyFlexEnd, + YGJustifySpaceAround, + YGJustifyFlexStart, + YGJustifySpaceEvenly) + +ACCESSOR_TEST( + alignContent, + YGAlignFlexStart, + YGAlignAuto, + YGAlignFlexStart, + YGAlignCenter, + YGAlignFlexEnd, + YGAlignStretch) + +ACCESSOR_TEST( + alignItems, + YGAlignStretch, + YGAlignFlexStart, + YGAlignFlexEnd, + YGAlignBaseline, + YGAlignSpaceBetween, + YGAlignSpaceAround) + +ACCESSOR_TEST( + alignSelf, + YGAlignAuto, + YGAlignFlexStart, + YGAlignCenter, + YGAlignAuto, + YGAlignFlexEnd, + YGAlignStretch) + +ACCESSOR_TEST( + positionType, + YGPositionTypeRelative, + YGPositionTypeAbsolute, + YGPositionTypeRelative) + +ACCESSOR_TEST( + flexWrap, + YGWrapNoWrap, + YGWrapWrap, + YGWrapWrapReverse, + YGWrapNoWrap) + +ACCESSOR_TEST( + overflow, + YGOverflowVisible, + YGOverflowHidden, + YGOverflowScroll, + YGOverflowVisible) + +ACCESSOR_TEST(display, YGDisplayFlex, YGDisplayNone, YGDisplayFlex) + +ACCESSOR_TEST( + flex, + YGFloatOptional{}, + YGFloatOptional{123.45f}, + YGFloatOptional{-9.87f}, + YGFloatOptional{}) + +ACCESSOR_TEST( + flexGrow, + YGFloatOptional{}, + YGFloatOptional{123.45f}, + YGFloatOptional{-9.87f}, + YGFloatOptional{}) + +ACCESSOR_TEST( + flexShrink, + YGFloatOptional{}, + YGFloatOptional{123.45f}, + YGFloatOptional{-9.87f}, + YGFloatOptional{}) + +ACCESSOR_TEST( + flexBasis, + CompactValue::ofAuto(), + CompactValue::ofUndefined(), + CompactValue::ofAuto(), + CompactValue::of(7777.77f), + CompactValue::of(-100.0f)) + +INDEX_ACCESSOR_TEST( + position, + CompactValue::ofUndefined(), + YGEdgeBottom, + CompactValue::ofAuto(), + CompactValue::ofUndefined(), + CompactValue::of(7777.77f), + CompactValue::of(-100.0f)) + +INDEX_ACCESSOR_TEST( + margin, + CompactValue::ofUndefined(), + YGEdgeTop, + CompactValue::ofAuto(), + CompactValue::ofUndefined(), + CompactValue::of(7777.77f), + CompactValue::of(-100.0f)) + +INDEX_ACCESSOR_TEST( + padding, + CompactValue::ofUndefined(), + YGEdgeAll, + CompactValue::of(7777.77f), + CompactValue::ofUndefined(), + CompactValue::of(-100.0f)) + +INDEX_ACCESSOR_TEST( + border, + CompactValue::ofUndefined(), + YGEdgeHorizontal, + CompactValue::of(-7777.77f), + CompactValue::ofUndefined()) + +INDEX_ACCESSOR_TEST( + dimensions, + CompactValue::ofAuto(), + YGDimensionWidth, + CompactValue::ofUndefined(), + CompactValue::ofAuto(), + CompactValue::of(7777.77f), + CompactValue::of(-100.0f)) + +INDEX_ACCESSOR_TEST( + minDimensions, + CompactValue::ofUndefined(), + YGDimensionHeight, + CompactValue::ofAuto(), + CompactValue::ofUndefined(), + CompactValue::of(7777.77f), + CompactValue::of(-100.0f)) + +INDEX_ACCESSOR_TEST( + maxDimensions, + CompactValue::ofUndefined(), + YGDimensionHeight, + CompactValue::ofAuto(), + CompactValue::ofUndefined(), + CompactValue::of(7777.77f), + CompactValue::of(-100.0f)) + +ACCESSOR_TEST( + aspectRatio, + YGFloatOptional{}, + YGFloatOptional{-123.45f}, + YGFloatOptional{9876.5f}, + YGFloatOptional{0.0f}, + YGFloatOptional{}); + +} // namespace yoga +} // namespace facebook diff --git a/yoga/YGNode.cpp b/yoga/YGNode.cpp index 2fb4510c..2c68d607 100644 --- a/yoga/YGNode.cpp +++ b/yoga/YGNode.cpp @@ -53,14 +53,14 @@ YGFloatOptional YGNode::getLeadingPosition( const float axisSize) const { if (YGFlexDirectionIsRow(axis)) { auto leadingPosition = YGComputedEdgeValue( - style_.position, YGEdgeStart, CompactValue::ofUndefined()); + style_.position(), YGEdgeStart, CompactValue::ofUndefined()); if (!leadingPosition.isUndefined()) { return YGResolveValue(leadingPosition, axisSize); } } auto leadingPosition = YGComputedEdgeValue( - style_.position, leading[axis], CompactValue::ofUndefined()); + style_.position(), leading[axis], CompactValue::ofUndefined()); return leadingPosition.isUndefined() ? YGFloatOptional{0} @@ -72,14 +72,14 @@ YGFloatOptional YGNode::getTrailingPosition( const float axisSize) const { if (YGFlexDirectionIsRow(axis)) { auto trailingPosition = YGComputedEdgeValue( - style_.position, YGEdgeEnd, CompactValue::ofUndefined()); + style_.position(), YGEdgeEnd, CompactValue::ofUndefined()); if (!trailingPosition.isUndefined()) { return YGResolveValue(trailingPosition, axisSize); } } auto trailingPosition = YGComputedEdgeValue( - style_.position, trailing[axis], CompactValue::ofUndefined()); + style_.position(), trailing[axis], CompactValue::ofUndefined()); return trailingPosition.isUndefined() ? YGFloatOptional{0} @@ -89,45 +89,47 @@ YGFloatOptional YGNode::getTrailingPosition( bool YGNode::isLeadingPositionDefined(const YGFlexDirection axis) const { return (YGFlexDirectionIsRow(axis) && !YGComputedEdgeValue( - style_.position, YGEdgeStart, CompactValue::ofUndefined()) + style_.position(), YGEdgeStart, CompactValue::ofUndefined()) .isUndefined()) || !YGComputedEdgeValue( - style_.position, leading[axis], CompactValue::ofUndefined()) + style_.position(), leading[axis], CompactValue::ofUndefined()) .isUndefined(); } bool YGNode::isTrailingPosDefined(const YGFlexDirection axis) const { return (YGFlexDirectionIsRow(axis) && !YGComputedEdgeValue( - style_.position, YGEdgeEnd, CompactValue::ofUndefined()) + style_.position(), YGEdgeEnd, CompactValue::ofUndefined()) .isUndefined()) || !YGComputedEdgeValue( - style_.position, trailing[axis], CompactValue::ofUndefined()) + style_.position(), trailing[axis], CompactValue::ofUndefined()) .isUndefined(); } YGFloatOptional YGNode::getLeadingMargin( const YGFlexDirection axis, const float widthSize) const { - if (YGFlexDirectionIsRow(axis) && !style_.margin[YGEdgeStart].isUndefined()) { - return YGResolveValueMargin(style_.margin[YGEdgeStart], widthSize); + if (YGFlexDirectionIsRow(axis) && + !style_.margin()[YGEdgeStart].isUndefined()) { + return YGResolveValueMargin(style_.margin()[YGEdgeStart], widthSize); } return YGResolveValueMargin( - YGComputedEdgeValue(style_.margin, leading[axis], CompactValue::ofZero()), + YGComputedEdgeValue( + style_.margin(), leading[axis], CompactValue::ofZero()), widthSize); } YGFloatOptional YGNode::getTrailingMargin( const YGFlexDirection axis, const float widthSize) const { - if (YGFlexDirectionIsRow(axis) && !style_.margin[YGEdgeEnd].isUndefined()) { - return YGResolveValueMargin(style_.margin[YGEdgeEnd], widthSize); + if (YGFlexDirectionIsRow(axis) && !style_.margin()[YGEdgeEnd].isUndefined()) { + return YGResolveValueMargin(style_.margin()[YGEdgeEnd], widthSize); } return YGResolveValueMargin( YGComputedEdgeValue( - style_.margin, trailing[axis], CompactValue::ofZero()), + style_.margin(), trailing[axis], CompactValue::ofZero()), widthSize); } @@ -299,7 +301,7 @@ void YGNode::setPosition( const YGDirection directionRespectingRoot = owner_ != nullptr ? direction : YGDirectionLTR; const YGFlexDirection mainAxis = - YGResolveFlexDirection(style_.flexDirection, directionRespectingRoot); + YGResolveFlexDirection(style_.flexDirection(), directionRespectingRoot); const YGFlexDirection crossAxis = YGFlexDirectionCross(mainAxis, directionRespectingRoot); @@ -325,27 +327,28 @@ void YGNode::setPosition( } YGValue YGNode::marginLeadingValue(const YGFlexDirection axis) const { - if (YGFlexDirectionIsRow(axis) && !style_.margin[YGEdgeStart].isUndefined()) { - return style_.margin[YGEdgeStart]; + if (YGFlexDirectionIsRow(axis) && + !style_.margin()[YGEdgeStart].isUndefined()) { + return style_.margin()[YGEdgeStart]; } else { - return style_.margin[leading[axis]]; + return style_.margin()[leading[axis]]; } } YGValue YGNode::marginTrailingValue(const YGFlexDirection axis) const { - if (YGFlexDirectionIsRow(axis) && !style_.margin[YGEdgeEnd].isUndefined()) { - return style_.margin[YGEdgeEnd]; + if (YGFlexDirectionIsRow(axis) && !style_.margin()[YGEdgeEnd].isUndefined()) { + return style_.margin()[YGEdgeEnd]; } else { - return style_.margin[trailing[axis]]; + return style_.margin()[trailing[axis]]; } } YGValue YGNode::resolveFlexBasisPtr() const { - YGValue flexBasis = style_.flexBasis; + YGValue flexBasis = style_.flexBasis(); if (flexBasis.unit != YGUnitAuto && flexBasis.unit != YGUnitUndefined) { return flexBasis; } - if (!style_.flex.isUndefined() && style_.flex.unwrap() > 0.0f) { + if (!style_.flex().isUndefined() && style_.flex().unwrap() > 0.0f) { return config_->useWebDefaults ? YGValueAuto : YGValueZero; } return YGValueAuto; @@ -353,23 +356,23 @@ YGValue YGNode::resolveFlexBasisPtr() const { void YGNode::resolveDimension() { using namespace yoga; - for (int dim = YGDimensionWidth; dim < enums::count(); dim++) { - if (!getStyle().maxDimensions[dim].isUndefined() && - YGValueEqual( - getStyle().maxDimensions[dim], style_.minDimensions[dim])) { - resolvedDimensions_[dim] = style_.maxDimensions[dim]; + const YGStyle& style = getStyle(); + for (auto dim : {YGDimensionWidth, YGDimensionHeight}) { + if (!style.maxDimensions()[dim].isUndefined() && + YGValueEqual(style.maxDimensions()[dim], style.minDimensions()[dim])) { + resolvedDimensions_[dim] = style.maxDimensions()[dim]; } else { - resolvedDimensions_[dim] = style_.dimensions[dim]; + resolvedDimensions_[dim] = style.dimensions()[dim]; } } } YGDirection YGNode::resolveDirection(const YGDirection ownerDirection) { - if (style_.direction == YGDirectionInherit) { + if (style_.direction() == YGDirectionInherit) { return ownerDirection > YGDirectionInherit ? ownerDirection : YGDirectionLTR; } else { - return style_.direction; + return style_.direction(); } } @@ -401,66 +404,67 @@ void YGNode::markDirtyAndPropogateDownwards() { }); } -float YGNode::resolveFlexGrow() { +float YGNode::resolveFlexGrow() const { // Root nodes flexGrow should always be 0 if (owner_ == nullptr) { return 0.0; } - if (!style_.flexGrow.isUndefined()) { - return style_.flexGrow.unwrap(); + if (!style_.flexGrow().isUndefined()) { + return style_.flexGrow().unwrap(); } - if (!style_.flex.isUndefined() && style_.flex.unwrap() > 0.0f) { - return style_.flex.unwrap(); + if (!style_.flex().isUndefined() && style_.flex().unwrap() > 0.0f) { + return style_.flex().unwrap(); } return kDefaultFlexGrow; } -float YGNode::resolveFlexShrink() { +float YGNode::resolveFlexShrink() const { if (owner_ == nullptr) { return 0.0; } - if (!style_.flexShrink.isUndefined()) { - return style_.flexShrink.unwrap(); + if (!style_.flexShrink().isUndefined()) { + return style_.flexShrink().unwrap(); } - if (!config_->useWebDefaults && !style_.flex.isUndefined() && - style_.flex.unwrap() < 0.0f) { - return -style_.flex.unwrap(); + if (!config_->useWebDefaults && !style_.flex().isUndefined() && + style_.flex().unwrap() < 0.0f) { + return -style_.flex().unwrap(); } return config_->useWebDefaults ? kWebDefaultFlexShrink : kDefaultFlexShrink; } bool YGNode::isNodeFlexible() { return ( - (style_.positionType == YGPositionTypeRelative) && + (style_.positionType() == YGPositionTypeRelative) && (resolveFlexGrow() != 0 || resolveFlexShrink() != 0)); } float YGNode::getLeadingBorder(const YGFlexDirection axis) const { YGValue leadingBorder; - if (YGFlexDirectionIsRow(axis) && !style_.border[YGEdgeStart].isUndefined()) { - leadingBorder = style_.border[YGEdgeStart]; + if (YGFlexDirectionIsRow(axis) && + !style_.border()[YGEdgeStart].isUndefined()) { + leadingBorder = style_.border()[YGEdgeStart]; if (leadingBorder.value >= 0) { return leadingBorder.value; } } - leadingBorder = - YGComputedEdgeValue(style_.border, leading[axis], CompactValue::ofZero()); + leadingBorder = YGComputedEdgeValue( + style_.border(), leading[axis], CompactValue::ofZero()); return YGFloatMax(leadingBorder.value, 0.0f); } float YGNode::getTrailingBorder(const YGFlexDirection flexDirection) const { YGValue trailingBorder; if (YGFlexDirectionIsRow(flexDirection) && - !style_.border[YGEdgeEnd].isUndefined()) { - trailingBorder = style_.border[YGEdgeEnd]; + !style_.border()[YGEdgeEnd].isUndefined()) { + trailingBorder = style_.border()[YGEdgeEnd]; if (trailingBorder.value >= 0.0f) { return trailingBorder.value; } } trailingBorder = YGComputedEdgeValue( - style_.border, trailing[flexDirection], CompactValue::ofZero()); + style_.border(), trailing[flexDirection], CompactValue::ofZero()); return YGFloatMax(trailingBorder.value, 0.0f); } @@ -468,16 +472,16 @@ YGFloatOptional YGNode::getLeadingPadding( const YGFlexDirection axis, const float widthSize) const { const YGFloatOptional paddingEdgeStart = - YGResolveValue(style_.padding[YGEdgeStart], widthSize); + YGResolveValue(style_.padding()[YGEdgeStart], widthSize); if (YGFlexDirectionIsRow(axis) && - !style_.padding[YGEdgeStart].isUndefined() && + !style_.padding()[YGEdgeStart].isUndefined() && !paddingEdgeStart.isUndefined() && paddingEdgeStart.unwrap() >= 0.0f) { return paddingEdgeStart; } YGFloatOptional resolvedValue = YGResolveValue( YGComputedEdgeValue( - style_.padding, leading[axis], CompactValue::ofZero()), + style_.padding(), leading[axis], CompactValue::ofZero()), widthSize); return YGFloatOptionalMax(resolvedValue, YGFloatOptional(0.0f)); } @@ -486,14 +490,14 @@ YGFloatOptional YGNode::getTrailingPadding( const YGFlexDirection axis, const float widthSize) const { const YGFloatOptional paddingEdgeEnd = - YGResolveValue(style_.padding[YGEdgeEnd], widthSize); + YGResolveValue(style_.padding()[YGEdgeEnd], widthSize); if (YGFlexDirectionIsRow(axis) && paddingEdgeEnd >= YGFloatOptional{0.0f}) { return paddingEdgeEnd; } YGFloatOptional resolvedValue = YGResolveValue( YGComputedEdgeValue( - style_.padding, trailing[axis], CompactValue::ofZero()), + style_.padding(), trailing[axis], CompactValue::ofZero()), widthSize); return YGFloatOptionalMax(resolvedValue, YGFloatOptional(0.0f)); @@ -580,8 +584,8 @@ void YGNode::reset() { auto config = getConfig(); *this = YGNode{}; if (config->useWebDefaults) { - setStyleFlexDirection(YGFlexDirectionRow); - setStyleAlignContent(YGAlignStretch); + style_.flexDirection() = YGFlexDirectionRow; + style_.alignContent() = YGAlignStretch; } setConfig(config); } diff --git a/yoga/YGNode.h b/yoga/YGNode.h index 086e3ca0..021c3372 100644 --- a/yoga/YGNode.h +++ b/yoga/YGNode.h @@ -6,6 +6,7 @@ */ #pragma once #include +#include "CompactValue.h" #include "YGConfig.h" #include "YGLayout.h" #include "YGStyle.h" @@ -62,6 +63,8 @@ private: // DO NOT CHANGE THE VISIBILITY OF THIS METHOD! YGNode& operator=(YGNode&&) = default; + using CompactValue = facebook::yoga::detail::CompactValue; + public: YGNode() : hasNewLayout_{true}, @@ -210,14 +213,6 @@ public: void setNodeType(YGNodeType nodeType) { nodeType_ = nodeType; } - void setStyleFlexDirection(YGFlexDirection direction) { - style_.flexDirection = direction; - } - - void setStyleAlignContent(YGAlign alignContent) { - style_.alignContent = alignContent; - } - void setMeasureFunc(YGMeasureFunc measureFunc); void setMeasureFunc(MeasureWithContextFn); void setMeasureFunc(std::nullptr_t) { @@ -296,8 +291,8 @@ public: void cloneChildrenIfNeeded(void*); void markDirtyAndPropogate(); - float resolveFlexGrow(); - float resolveFlexShrink(); + float resolveFlexGrow() const; + float resolveFlexShrink() const; bool isNodeFlexible(); bool didUseLegacyFlag(); bool isLayoutTreeEqualToNode(const YGNode& node) const; diff --git a/yoga/YGNodePrint.cpp b/yoga/YGNodePrint.cpp index cc3ead74..ae730f68 100644 --- a/yoga/YGNodePrint.cpp +++ b/yoga/YGNodePrint.cpp @@ -132,85 +132,92 @@ void YGNodeToString( if (options & YGPrintOptionsStyle) { appendFormatedString(str, "style=\""); - if (node->getStyle().flexDirection != YGNode().getStyle().flexDirection) { + if (node->getStyle().flexDirection() != + YGNode().getStyle().flexDirection()) { appendFormatedString( str, "flex-direction: %s; ", - YGFlexDirectionToString(node->getStyle().flexDirection)); + YGFlexDirectionToString(node->getStyle().flexDirection())); } - if (node->getStyle().justifyContent != YGNode().getStyle().justifyContent) { + if (node->getStyle().justifyContent() != + YGNode().getStyle().justifyContent()) { appendFormatedString( str, "justify-content: %s; ", - YGJustifyToString(node->getStyle().justifyContent)); + YGJustifyToString(node->getStyle().justifyContent())); } - if (node->getStyle().alignItems != YGNode().getStyle().alignItems) { + if (node->getStyle().alignItems() != YGNode().getStyle().alignItems()) { appendFormatedString( str, "align-items: %s; ", - YGAlignToString(node->getStyle().alignItems)); + YGAlignToString(node->getStyle().alignItems())); } - if (node->getStyle().alignContent != YGNode().getStyle().alignContent) { + if (node->getStyle().alignContent() != YGNode().getStyle().alignContent()) { appendFormatedString( str, "align-content: %s; ", - YGAlignToString(node->getStyle().alignContent)); + YGAlignToString(node->getStyle().alignContent())); } - if (node->getStyle().alignSelf != YGNode().getStyle().alignSelf) { + if (node->getStyle().alignSelf() != YGNode().getStyle().alignSelf()) { appendFormatedString( - str, "align-self: %s; ", YGAlignToString(node->getStyle().alignSelf)); + str, + "align-self: %s; ", + YGAlignToString(node->getStyle().alignSelf())); } - appendFloatOptionalIfDefined(str, "flex-grow", node->getStyle().flexGrow); + appendFloatOptionalIfDefined(str, "flex-grow", node->getStyle().flexGrow()); appendFloatOptionalIfDefined( - str, "flex-shrink", node->getStyle().flexShrink); - appendNumberIfNotAuto(str, "flex-basis", node->getStyle().flexBasis); - appendFloatOptionalIfDefined(str, "flex", node->getStyle().flex); + str, "flex-shrink", node->getStyle().flexShrink()); + appendNumberIfNotAuto(str, "flex-basis", node->getStyle().flexBasis()); + appendFloatOptionalIfDefined(str, "flex", node->getStyle().flex()); - if (node->getStyle().flexWrap != YGNode().getStyle().flexWrap) { + if (node->getStyle().flexWrap() != YGNode().getStyle().flexWrap()) { appendFormatedString( - str, "flex-wrap: %s; ", YGWrapToString(node->getStyle().flexWrap)); + str, "flex-wrap: %s; ", YGWrapToString(node->getStyle().flexWrap())); } - if (node->getStyle().overflow != YGNode().getStyle().overflow) { + if (node->getStyle().overflow() != YGNode().getStyle().overflow()) { appendFormatedString( - str, "overflow: %s; ", YGOverflowToString(node->getStyle().overflow)); + str, + "overflow: %s; ", + YGOverflowToString(node->getStyle().overflow())); } - if (node->getStyle().display != YGNode().getStyle().display) { + if (node->getStyle().display() != YGNode().getStyle().display()) { appendFormatedString( - str, "display: %s; ", YGDisplayToString(node->getStyle().display)); + str, "display: %s; ", YGDisplayToString(node->getStyle().display())); } - appendEdges(str, "margin", node->getStyle().margin); - appendEdges(str, "padding", node->getStyle().padding); - appendEdges(str, "border", node->getStyle().border); + appendEdges(str, "margin", node->getStyle().margin()); + appendEdges(str, "padding", node->getStyle().padding()); + appendEdges(str, "border", node->getStyle().border()); appendNumberIfNotAuto( - str, "width", node->getStyle().dimensions[YGDimensionWidth]); + str, "width", node->getStyle().dimensions()[YGDimensionWidth]); appendNumberIfNotAuto( - str, "height", node->getStyle().dimensions[YGDimensionHeight]); + str, "height", node->getStyle().dimensions()[YGDimensionHeight]); appendNumberIfNotAuto( - str, "max-width", node->getStyle().maxDimensions[YGDimensionWidth]); + str, "max-width", node->getStyle().maxDimensions()[YGDimensionWidth]); appendNumberIfNotAuto( - str, "max-height", node->getStyle().maxDimensions[YGDimensionHeight]); + str, "max-height", node->getStyle().maxDimensions()[YGDimensionHeight]); appendNumberIfNotAuto( - str, "min-width", node->getStyle().minDimensions[YGDimensionWidth]); + str, "min-width", node->getStyle().minDimensions()[YGDimensionWidth]); appendNumberIfNotAuto( - str, "min-height", node->getStyle().minDimensions[YGDimensionHeight]); + str, "min-height", node->getStyle().minDimensions()[YGDimensionHeight]); - if (node->getStyle().positionType != YGNode().getStyle().positionType) { + if (node->getStyle().positionType() != YGNode().getStyle().positionType()) { appendFormatedString( str, "position: %s; ", - YGPositionTypeToString(node->getStyle().positionType)); + YGPositionTypeToString(node->getStyle().positionType())); } appendEdgeIfNotUndefined( - str, "left", node->getStyle().position, YGEdgeLeft); + str, "left", node->getStyle().position(), YGEdgeLeft); appendEdgeIfNotUndefined( - str, "right", node->getStyle().position, YGEdgeRight); - appendEdgeIfNotUndefined(str, "top", node->getStyle().position, YGEdgeTop); + str, "right", node->getStyle().position(), YGEdgeRight); appendEdgeIfNotUndefined( - str, "bottom", node->getStyle().position, YGEdgeBottom); + str, "top", node->getStyle().position(), YGEdgeTop); + appendEdgeIfNotUndefined( + str, "bottom", node->getStyle().position(), YGEdgeBottom); appendFormatedString(str, "\" "); if (node->hasMeasureFunc()) { diff --git a/yoga/YGStyle.cpp b/yoga/YGStyle.cpp index 26b0f269..6672c81f 100644 --- a/yoga/YGStyle.cpp +++ b/yoga/YGStyle.cpp @@ -9,43 +9,46 @@ // Yoga specific properties, not compatible with flexbox specification bool operator==(const YGStyle& lhs, const YGStyle& rhs) { - bool areNonFloatValuesEqual = lhs.direction == rhs.direction && - lhs.flexDirection == rhs.flexDirection && - lhs.justifyContent == rhs.justifyContent && - lhs.alignContent == rhs.alignContent && - lhs.alignItems == rhs.alignItems && lhs.alignSelf == rhs.alignSelf && - lhs.positionType == rhs.positionType && lhs.flexWrap == rhs.flexWrap && - lhs.overflow == rhs.overflow && lhs.display == rhs.display && - YGValueEqual(lhs.flexBasis, rhs.flexBasis) && lhs.margin == rhs.margin && - lhs.position == rhs.position && lhs.padding == rhs.padding && - lhs.border == rhs.border && lhs.dimensions == rhs.dimensions && - lhs.minDimensions == rhs.minDimensions && - lhs.maxDimensions == rhs.maxDimensions; + bool areNonFloatValuesEqual = lhs.direction() == rhs.direction() && + lhs.flexDirection() == rhs.flexDirection() && + lhs.justifyContent() == rhs.justifyContent() && + lhs.alignContent() == rhs.alignContent() && + lhs.alignItems() == rhs.alignItems() && + lhs.alignSelf() == rhs.alignSelf() && + lhs.positionType() == rhs.positionType() && + lhs.flexWrap() == rhs.flexWrap() && lhs.overflow() == rhs.overflow() && + lhs.display() == rhs.display() && + YGValueEqual(lhs.flexBasis(), rhs.flexBasis()) && + lhs.margin() == rhs.margin() && lhs.position() == rhs.position() && + lhs.padding() == rhs.padding() && lhs.border() == rhs.border() && + lhs.dimensions() == rhs.dimensions() && + lhs.minDimensions() == rhs.minDimensions() && + lhs.maxDimensions() == rhs.maxDimensions(); areNonFloatValuesEqual = areNonFloatValuesEqual && - lhs.flex.isUndefined() == rhs.flex.isUndefined(); - if (areNonFloatValuesEqual && !lhs.flex.isUndefined() && - !rhs.flex.isUndefined()) { - areNonFloatValuesEqual = areNonFloatValuesEqual && lhs.flex == rhs.flex; + lhs.flex().isUndefined() == rhs.flex().isUndefined(); + if (areNonFloatValuesEqual && !lhs.flex().isUndefined() && + !rhs.flex().isUndefined()) { + areNonFloatValuesEqual = areNonFloatValuesEqual && lhs.flex() == rhs.flex(); } areNonFloatValuesEqual = areNonFloatValuesEqual && - lhs.flexGrow.isUndefined() == rhs.flexGrow.isUndefined(); - if (areNonFloatValuesEqual && !lhs.flexGrow.isUndefined()) { + lhs.flexGrow().isUndefined() == rhs.flexGrow().isUndefined(); + if (areNonFloatValuesEqual && !lhs.flexGrow().isUndefined()) { areNonFloatValuesEqual = - areNonFloatValuesEqual && lhs.flexGrow == rhs.flexGrow; + areNonFloatValuesEqual && lhs.flexGrow() == rhs.flexGrow(); } areNonFloatValuesEqual = areNonFloatValuesEqual && - lhs.flexShrink.isUndefined() == rhs.flexShrink.isUndefined(); - if (areNonFloatValuesEqual && !rhs.flexShrink.isUndefined()) { + lhs.flexShrink().isUndefined() == rhs.flexShrink().isUndefined(); + if (areNonFloatValuesEqual && !rhs.flexShrink().isUndefined()) { areNonFloatValuesEqual = - areNonFloatValuesEqual && lhs.flexShrink == rhs.flexShrink; + areNonFloatValuesEqual && lhs.flexShrink() == rhs.flexShrink(); } - if (!(lhs.aspectRatio.isUndefined() && rhs.aspectRatio.isUndefined())) { + if (!(lhs.aspectRatio().isUndefined() && rhs.aspectRatio().isUndefined())) { areNonFloatValuesEqual = - areNonFloatValuesEqual && lhs.aspectRatio == rhs.aspectRatio; + areNonFloatValuesEqual && lhs.aspectRatio() == rhs.aspectRatio(); } return areNonFloatValuesEqual; diff --git a/yoga/YGStyle.h b/yoga/YGStyle.h index 7e93502a..dd946832 100644 --- a/yoga/YGStyle.h +++ b/yoga/YGStyle.h @@ -20,8 +20,14 @@ #define BITFIELD_ENUM_SIZED(num) #endif -struct YGStyle { -private: +#define BITFIELD_ACCESSORS(FIELD) \ + decltype(FIELD##_) get_##FIELD() const { return FIELD##_; } \ + void set_##FIELD(decltype(FIELD##_) x) { FIELD##_ = x; } + +#define BITFIELD_REF(FIELD) \ + { *this, &YGStyle::get_##FIELD, &YGStyle::set_##FIELD } + +class YGStyle { using CompactValue = facebook::yoga::detail::CompactValue; public: @@ -29,47 +35,149 @@ public: using Edges = facebook::yoga::detail::Values()>; - /* Some platforms don't support enum bitfields, - so please use BITFIELD_ENUM_SIZED(BITS_COUNT) */ - YGDirection direction BITFIELD_ENUM_SIZED(2); - YGFlexDirection flexDirection BITFIELD_ENUM_SIZED(2); - YGJustify justifyContent BITFIELD_ENUM_SIZED(3); - YGAlign alignContent BITFIELD_ENUM_SIZED(3); - YGAlign alignItems BITFIELD_ENUM_SIZED(3); - YGAlign alignSelf BITFIELD_ENUM_SIZED(3); - YGPositionType positionType BITFIELD_ENUM_SIZED(1); - YGWrap flexWrap BITFIELD_ENUM_SIZED(2); - YGOverflow overflow BITFIELD_ENUM_SIZED(2); - YGDisplay display BITFIELD_ENUM_SIZED(1); - YGFloatOptional flex = {}; - YGFloatOptional flexGrow = {}; - YGFloatOptional flexShrink = {}; - CompactValue flexBasis = CompactValue::ofAuto(); - Edges margin = {}; - Edges position = {}; - Edges padding = {}; - Edges border = {}; - Dimensions dimensions{CompactValue::ofAuto()}; - Dimensions minDimensions = {}; - Dimensions maxDimensions = {}; - // Yoga specific properties, not compatible with flexbox specification - YGFloatOptional aspectRatio = {}; + template + struct BitfieldRef { + YGStyle& style; + T (YGStyle::*get)() const; + void (YGStyle::*set)(T); + + operator T() const { return (style.*get)(); } + BitfieldRef& operator=(T x) { + (style.*set)(x); + return *this; + } + }; YGStyle() - : direction(YGDirectionInherit), - flexDirection(YGFlexDirectionColumn), - justifyContent(YGJustifyFlexStart), - alignContent(YGAlignFlexStart), - alignItems(YGAlignStretch), - alignSelf(YGAlignAuto), - positionType(YGPositionTypeRelative), - flexWrap(YGWrapNoWrap), - overflow(YGOverflowVisible), - display(YGDisplayFlex) {} + : direction_(YGDirectionInherit), + flexDirection_(YGFlexDirectionColumn), + justifyContent_(YGJustifyFlexStart), + alignContent_(YGAlignFlexStart), + alignItems_(YGAlignStretch), + alignSelf_(YGAlignAuto), + positionType_(YGPositionTypeRelative), + flexWrap_(YGWrapNoWrap), + overflow_(YGOverflowVisible), + display_(YGDisplayFlex) {} ~YGStyle() = default; + + YGDirection direction() const { return direction_; } + BitfieldRef direction() { return BITFIELD_REF(direction); } + + YGFlexDirection flexDirection() const { return flexDirection_; } + BitfieldRef flexDirection() { + return BITFIELD_REF(flexDirection); + } + + YGJustify justifyContent() const { return justifyContent_; } + BitfieldRef justifyContent() { + return BITFIELD_REF(justifyContent); + } + + YGAlign alignContent() const { return alignContent_; } + BitfieldRef alignContent() { return BITFIELD_REF(alignContent); } + + YGAlign alignItems() const { return alignItems_; } + BitfieldRef alignItems() { return BITFIELD_REF(alignItems); } + + YGAlign alignSelf() const { return alignSelf_; } + BitfieldRef alignSelf() { return BITFIELD_REF(alignSelf); } + + YGPositionType positionType() const { return positionType_; } + BitfieldRef positionType() { + return BITFIELD_REF(positionType); + } + + YGWrap flexWrap() const { return flexWrap_; } + BitfieldRef flexWrap() { return BITFIELD_REF(flexWrap); } + + YGOverflow overflow() const { return overflow_; } + BitfieldRef overflow() { return BITFIELD_REF(overflow); } + + YGDisplay display() const { return display_; } + BitfieldRef display() { return BITFIELD_REF(display); } + + YGFloatOptional flex() const { return flex_; } + YGFloatOptional& flex() { return flex_; } + + YGFloatOptional flexGrow() const { return flexGrow_; } + YGFloatOptional& flexGrow() { return flexGrow_; } + + YGFloatOptional flexShrink() const { return flexShrink_; } + YGFloatOptional& flexShrink() { return flexShrink_; } + + CompactValue flexBasis() const { return flexBasis_; } + CompactValue& flexBasis() { return flexBasis_; } + + const Edges& margin() const { return margin_; } + Edges& margin() { return margin_; } + + const Edges& position() const { return position_; } + Edges& position() { return position_; } + + const Edges& padding() const { return padding_; } + Edges& padding() { return padding_; } + + const Edges& border() const { return border_; } + Edges& border() { return border_; } + + const Dimensions& dimensions() const { return dimensions_; } + Dimensions& dimensions() { return dimensions_; } + + const Dimensions& minDimensions() const { return minDimensions_; } + Dimensions& minDimensions() { return minDimensions_; } + + const Dimensions& maxDimensions() const { return maxDimensions_; } + Dimensions& maxDimensions() { return maxDimensions_; } + + // Yoga specific properties, not compatible with flexbox specification + YGFloatOptional aspectRatio() const { return aspectRatio_; } + YGFloatOptional& aspectRatio() { return aspectRatio_; } + +private: + /* Some platforms don't support enum bitfields, + so please use BITFIELD_ENUM_SIZED(BITS_COUNT) */ + YGDirection direction_ BITFIELD_ENUM_SIZED(2); + YGFlexDirection flexDirection_ BITFIELD_ENUM_SIZED(2); + YGJustify justifyContent_ BITFIELD_ENUM_SIZED(3); + YGAlign alignContent_ BITFIELD_ENUM_SIZED(3); + YGAlign alignItems_ BITFIELD_ENUM_SIZED(3); + YGAlign alignSelf_ BITFIELD_ENUM_SIZED(3); + YGPositionType positionType_ BITFIELD_ENUM_SIZED(1); + YGWrap flexWrap_ BITFIELD_ENUM_SIZED(2); + YGOverflow overflow_ BITFIELD_ENUM_SIZED(2); + YGDisplay display_ BITFIELD_ENUM_SIZED(1); + YGFloatOptional flex_ = {}; + YGFloatOptional flexGrow_ = {}; + YGFloatOptional flexShrink_ = {}; + CompactValue flexBasis_ = CompactValue::ofAuto(); + Edges margin_ = {}; + Edges position_ = {}; + Edges padding_ = {}; + Edges border_ = {}; + Dimensions dimensions_{CompactValue::ofAuto()}; + Dimensions minDimensions_ = {}; + Dimensions maxDimensions_ = {}; + // Yoga specific properties, not compatible with flexbox specification + YGFloatOptional aspectRatio_ = {}; + + BITFIELD_ACCESSORS(direction) + BITFIELD_ACCESSORS(flexDirection) + BITFIELD_ACCESSORS(justifyContent) + BITFIELD_ACCESSORS(alignContent); + BITFIELD_ACCESSORS(alignItems); + BITFIELD_ACCESSORS(alignSelf); + BITFIELD_ACCESSORS(positionType); + BITFIELD_ACCESSORS(flexWrap); + BITFIELD_ACCESSORS(overflow); + BITFIELD_ACCESSORS(display); }; bool operator==(const YGStyle& lhs, const YGStyle& rhs); inline bool operator!=(const YGStyle& lhs, const YGStyle& rhs) { return !(lhs == rhs); } + +#undef BITFIELD_ENUM_SIZED +#undef BITFIELD_ACCESSORS +#undef BITFIELD_REF diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index f041a6d3..bb9c6aea 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -224,8 +224,8 @@ WIN_EXPORT YGNodeRef YGNodeNewWithConfig(const YGConfigRef config) { gNodeInstanceCount++; if (config->useWebDefaults) { - node->setStyleFlexDirection(YGFlexDirectionRow); - node->setStyleAlignContent(YGAlignStretch); + node->getStyle().flexDirection() = YGFlexDirectionRow; + node->getStyle().alignContent() = YGAlignStretch; } node->setConfig(config); return node; @@ -522,61 +522,69 @@ void YGNodeCopyStyle(const YGNodeRef dstNode, const YGNodeRef srcNode) { } } -float YGNodeStyleGetFlexGrow(const YGNodeRef node) { - return node->getStyle().flexGrow.isUndefined() +float YGNodeStyleGetFlexGrow(const YGNodeRef n) { + const YGNode* node = n; + return node->getStyle().flexGrow().isUndefined() ? kDefaultFlexGrow - : node->getStyle().flexGrow.unwrap(); + : node->getStyle().flexGrow().unwrap(); } -float YGNodeStyleGetFlexShrink(const YGNodeRef node) { - return node->getStyle().flexShrink.isUndefined() +float YGNodeStyleGetFlexShrink(const YGNodeRef n) { + const YGNode* node = n; + return node->getStyle().flexShrink().isUndefined() ? (node->getConfig()->useWebDefaults ? kWebDefaultFlexShrink : kDefaultFlexShrink) - : node->getStyle().flexShrink.unwrap(); + : node->getStyle().flexShrink().unwrap(); } namespace { template -void updateNodeProp( +void updateStyle( YGNode* node, T value, NeedsUpdate&& needsUpdate, Update&& update) { - if (needsUpdate(node, value)) { - update(node, value); + if (needsUpdate(node->getStyle(), value)) { + update(node->getStyle(), value); node->markDirtyAndPropogate(); } } -template -void updateStyleProp(YGNode* node, T value) { - updateNodeProp( +template (YGStyle::*Prop)()> +void updateStyle(YGNode* node, T value) { + updateStyle( node, value, - [](YGNode* n, T x) { return (n->getStyle().*Prop) != x; }, - [](YGNode* n, T x) { (n->getStyle().*Prop) = x; }); + [](YGStyle& s, T x) { return (s.*Prop)() != x; }, + [](YGStyle& s, T x) { (s.*Prop)() = x; }); } -template ()> YGStyle::*Prop> +template +void updateStyle(YGNode* node, T value) { + updateStyle( + node, + value, + [](YGStyle& s, T x) { return (s.*Prop)() != x; }, + [](YGStyle& s, T x) { (s.*Prop)() = x; }); +} + +template ()>& (YGStyle::*Prop)()> void updateIndexedStyleProp(YGNode* node, Idx idx, detail::CompactValue value) { - updateNodeProp( + using detail::CompactValue; + updateStyle( node, value, - [idx](YGNode* n, detail::CompactValue x) { - return (n->getStyle().*Prop)[idx] != x; - }, - [idx](YGNode* n, detail::CompactValue x) { - (n->getStyle().*Prop)[idx] = x; - }); + [idx](YGStyle& s, CompactValue x) { return (s.*Prop)()[idx] != x; }, + [idx](YGStyle& s, CompactValue x) { (s.*Prop)()[idx] = x; }); } -template ()> YGStyle::*Prop> +template void updateEdgeProp(YGNode* node, YGEdge edge, detail::CompactValue value) { updateIndexedStyleProp(node, edge, value); } -template ()> YGStyle::*Prop> +template void updateDimensionProp( YGNode* node, YGDimension dimension, @@ -584,141 +592,127 @@ void updateDimensionProp( updateIndexedStyleProp(node, dimension, value); } -#define YG_UPDATE_STYLE_PROP_BITFIELD(PROP_NAME, node, value) \ - updateNodeProp( \ - node, \ - value, \ - [](YGNode* n, decltype(value) x) { \ - return n->getStyle().PROP_NAME != x; \ - }, \ - [](YGNode* n, decltype(value) x) { n->getStyle().PROP_NAME = x; }) - } // namespace void YGNodeStyleSetDirection(const YGNodeRef node, const YGDirection value) { - YG_UPDATE_STYLE_PROP_BITFIELD(direction, node, value); + updateStyle(node, value); } YGDirection YGNodeStyleGetDirection(const YGNodeRef node) { - return node->getStyle().direction; + return node->getStyle().direction(); } void YGNodeStyleSetFlexDirection( const YGNodeRef node, const YGFlexDirection flexDirection) { - YG_UPDATE_STYLE_PROP_BITFIELD(flexDirection, node, flexDirection); + updateStyle(node, flexDirection); } YGFlexDirection YGNodeStyleGetFlexDirection(const YGNodeRef node) { - return node->getStyle().flexDirection; + return node->getStyle().flexDirection(); } void YGNodeStyleSetJustifyContent( const YGNodeRef node, const YGJustify justifyContent) { - YG_UPDATE_STYLE_PROP_BITFIELD(justifyContent, node, justifyContent); + updateStyle(node, justifyContent); } YGJustify YGNodeStyleGetJustifyContent(const YGNodeRef node) { - return node->getStyle().justifyContent; + return node->getStyle().justifyContent(); } void YGNodeStyleSetAlignContent( const YGNodeRef node, const YGAlign alignContent) { - YG_UPDATE_STYLE_PROP_BITFIELD(alignContent, node, alignContent); + updateStyle(node, alignContent); } YGAlign YGNodeStyleGetAlignContent(const YGNodeRef node) { - return node->getStyle().alignContent; + return node->getStyle().alignContent(); } void YGNodeStyleSetAlignItems(const YGNodeRef node, const YGAlign alignItems) { - YG_UPDATE_STYLE_PROP_BITFIELD(alignItems, node, alignItems); + updateStyle(node, alignItems); } YGAlign YGNodeStyleGetAlignItems(const YGNodeRef node) { - return node->getStyle().alignItems; + return node->getStyle().alignItems(); } void YGNodeStyleSetAlignSelf(const YGNodeRef node, const YGAlign alignSelf) { - YG_UPDATE_STYLE_PROP_BITFIELD(alignSelf, node, alignSelf); + updateStyle(node, alignSelf); } YGAlign YGNodeStyleGetAlignSelf(const YGNodeRef node) { - return node->getStyle().alignSelf; + return node->getStyle().alignSelf(); } void YGNodeStyleSetPositionType( const YGNodeRef node, const YGPositionType positionType) { - YG_UPDATE_STYLE_PROP_BITFIELD(positionType, node, positionType); + updateStyle(node, positionType); } YGPositionType YGNodeStyleGetPositionType(const YGNodeRef node) { - return node->getStyle().positionType; + return node->getStyle().positionType(); } void YGNodeStyleSetFlexWrap(const YGNodeRef node, const YGWrap flexWrap) { - YG_UPDATE_STYLE_PROP_BITFIELD(flexWrap, node, flexWrap); + updateStyle(node, flexWrap); } YGWrap YGNodeStyleGetFlexWrap(const YGNodeRef node) { - return node->getStyle().flexWrap; + return node->getStyle().flexWrap(); } void YGNodeStyleSetOverflow(const YGNodeRef node, const YGOverflow overflow) { - YG_UPDATE_STYLE_PROP_BITFIELD(overflow, node, overflow); + updateStyle(node, overflow); } YGOverflow YGNodeStyleGetOverflow(const YGNodeRef node) { - return node->getStyle().overflow; + return node->getStyle().overflow(); } void YGNodeStyleSetDisplay(const YGNodeRef node, const YGDisplay display) { - YG_UPDATE_STYLE_PROP_BITFIELD(display, node, display); + updateStyle(node, display); } YGDisplay YGNodeStyleGetDisplay(const YGNodeRef node) { - return node->getStyle().display; + return node->getStyle().display(); } // TODO(T26792433): Change the API to accept YGFloatOptional. void YGNodeStyleSetFlex(const YGNodeRef node, const float flex) { - updateStyleProp(node, YGFloatOptional{flex}); + updateStyle(node, YGFloatOptional{flex}); } // TODO(T26792433): Change the API to accept YGFloatOptional. float YGNodeStyleGetFlex(const YGNodeRef node) { - return node->getStyle().flex.isUndefined() ? YGUndefined - : node->getStyle().flex.unwrap(); + const auto& style = node->getStyle(); + return style.flex().isUndefined() ? YGUndefined : style.flex().unwrap(); } // TODO(T26792433): Change the API to accept YGFloatOptional. void YGNodeStyleSetFlexGrow(const YGNodeRef node, const float flexGrow) { - updateStyleProp( + updateStyle( node, YGFloatOptional{flexGrow}); } // TODO(T26792433): Change the API to accept YGFloatOptional. void YGNodeStyleSetFlexShrink(const YGNodeRef node, const float flexShrink) { - updateStyleProp( + updateStyle( node, YGFloatOptional{flexShrink}); } YGValue YGNodeStyleGetFlexBasis(const YGNodeRef node) { - YGValue flexBasis = node->getStyle().flexBasis; - if (flexBasis.unit == YGUnitUndefined || flexBasis.unit == YGUnitAuto) { - // TODO(T26792433): Get rid off the use of YGUndefined at client side - flexBasis.value = YGUndefined; - } - return flexBasis; + return static_cast(node)->getStyle().flexBasis(); } void YGNodeStyleSetFlexBasis(const YGNodeRef node, const float flexBasis) { auto value = detail::CompactValue::ofMaybe(flexBasis); - updateStyleProp(node, value); + updateStyle(node, value); } void YGNodeStyleSetFlexBasisPercent( const YGNodeRef node, const float flexBasisPercent) { auto value = detail::CompactValue::ofMaybe(flexBasisPercent); - updateStyleProp(node, value); + updateStyle(node, value); } void YGNodeStyleSetFlexBasisAuto(const YGNodeRef node) { - updateStyleProp( + updateStyle( node, detail::CompactValue::ofAuto()); } @@ -731,7 +725,7 @@ void YGNodeStyleSetPositionPercent(YGNodeRef node, YGEdge edge, float percent) { updateEdgeProp<&YGStyle::position>(node, edge, value); } YGValue YGNodeStyleGetPosition(YGNodeRef node, YGEdge edge) { - return node->getStyle().position[edge]; + return static_cast(node)->getStyle().position()[edge]; } void YGNodeStyleSetMargin(YGNodeRef node, YGEdge edge, float points) { @@ -746,7 +740,7 @@ void YGNodeStyleSetMarginAuto(YGNodeRef node, YGEdge edge) { updateEdgeProp<&YGStyle::margin>(node, edge, detail::CompactValue::ofAuto()); } YGValue YGNodeStyleGetMargin(YGNodeRef node, YGEdge edge) { - return node->getStyle().margin[edge]; + return static_cast(node)->getStyle().margin()[edge]; } void YGNodeStyleSetPadding(YGNodeRef node, YGEdge edge, float points) { @@ -758,7 +752,7 @@ void YGNodeStyleSetPaddingPercent(YGNodeRef node, YGEdge edge, float percent) { updateEdgeProp<&YGStyle::padding>(node, edge, value); } YGValue YGNodeStyleGetPadding(YGNodeRef node, YGEdge edge) { - return node->getStyle().padding[edge]; + return static_cast(node)->getStyle().padding()[edge]; } // TODO(T26792433): Change the API to accept YGFloatOptional. @@ -771,14 +765,14 @@ void YGNodeStyleSetBorder( } float YGNodeStyleGetBorder(const YGNodeRef node, const YGEdge edge) { - if (node->getStyle().border[edge].isUndefined() || - node->getStyle().border[edge].isAuto()) { + const auto& style = node->getStyle(); + if (style.border()[edge].isUndefined() || style.border()[edge].isAuto()) { // TODO(T26792433): Rather than returning YGUndefined, change the api to // return YGFloatOptional. return YGUndefined; } - auto border = (YGValue) node->getStyle().border[edge]; + auto border = (YGValue) style.border()[edge]; return border.value; } @@ -786,13 +780,13 @@ float YGNodeStyleGetBorder(const YGNodeRef node, const YGEdge edge) { // TODO(T26792433): Change the API to accept YGFloatOptional. float YGNodeStyleGetAspectRatio(const YGNodeRef node) { - const YGFloatOptional op = node->getStyle().aspectRatio; + const YGFloatOptional op = node->getStyle().aspectRatio(); return op.isUndefined() ? YGUndefined : op.unwrap(); } // TODO(T26792433): Change the API to accept YGFloatOptional. void YGNodeStyleSetAspectRatio(const YGNodeRef node, const float aspectRatio) { - updateStyleProp( + updateStyle( node, YGFloatOptional{aspectRatio}); } @@ -809,7 +803,9 @@ void YGNodeStyleSetWidthAuto(YGNodeRef node) { node, YGDimensionWidth, detail::CompactValue::ofAuto()); } YGValue YGNodeStyleGetWidth(YGNodeRef node) { - return node->getStyle().dimensions[YGDimensionWidth]; + return static_cast(node) + ->getStyle() + .dimensions()[YGDimensionWidth]; } void YGNodeStyleSetHeight(YGNodeRef node, float points) { @@ -825,7 +821,9 @@ void YGNodeStyleSetHeightAuto(YGNodeRef node) { node, YGDimensionHeight, detail::CompactValue::ofAuto()); } YGValue YGNodeStyleGetHeight(YGNodeRef node) { - return node->getStyle().dimensions[YGDimensionHeight]; + return static_cast(node) + ->getStyle() + .dimensions()[YGDimensionHeight]; } void YGNodeStyleSetMinWidth(const YGNodeRef node, const float minWidth) { @@ -837,7 +835,9 @@ void YGNodeStyleSetMinWidthPercent(const YGNodeRef node, const float minWidth) { updateDimensionProp<&YGStyle::minDimensions>(node, YGDimensionWidth, value); } YGValue YGNodeStyleGetMinWidth(const YGNodeRef node) { - return node->getStyle().minDimensions[YGDimensionWidth]; + return static_cast(node) + ->getStyle() + .minDimensions()[YGDimensionWidth]; }; void YGNodeStyleSetMinHeight(const YGNodeRef node, const float minHeight) { @@ -851,7 +851,9 @@ void YGNodeStyleSetMinHeightPercent( updateDimensionProp<&YGStyle::minDimensions>(node, YGDimensionHeight, value); } YGValue YGNodeStyleGetMinHeight(const YGNodeRef node) { - return node->getStyle().minDimensions[YGDimensionHeight]; + return static_cast(node) + ->getStyle() + .minDimensions()[YGDimensionHeight]; }; void YGNodeStyleSetMaxWidth(const YGNodeRef node, const float maxWidth) { @@ -863,7 +865,9 @@ void YGNodeStyleSetMaxWidthPercent(const YGNodeRef node, const float maxWidth) { updateDimensionProp<&YGStyle::maxDimensions>(node, YGDimensionWidth, value); } YGValue YGNodeStyleGetMaxWidth(const YGNodeRef node) { - return node->getStyle().maxDimensions[YGDimensionWidth]; + return static_cast(node) + ->getStyle() + .maxDimensions()[YGDimensionWidth]; }; void YGNodeStyleSetMaxHeight(const YGNodeRef node, const float maxHeight) { @@ -877,7 +881,9 @@ void YGNodeStyleSetMaxHeightPercent( updateDimensionProp<&YGStyle::maxDimensions>(node, YGDimensionHeight, value); } YGValue YGNodeStyleGetMaxHeight(const YGNodeRef node) { - return node->getStyle().maxDimensions[YGDimensionHeight]; + return static_cast(node) + ->getStyle() + .maxDimensions()[YGDimensionHeight]; }; #define YG_NODE_LAYOUT_PROPERTY_IMPL(type, name, instanceName) \ @@ -983,14 +989,12 @@ static inline float YGNodePaddingAndBorderForAxis( .unwrap(); } -static inline YGAlign YGNodeAlignItem( - const YGNodeRef node, - const YGNodeRef child) { - const YGAlign align = child->getStyle().alignSelf == YGAlignAuto - ? node->getStyle().alignItems - : child->getStyle().alignSelf; +static inline YGAlign YGNodeAlignItem(const YGNode* node, const YGNode* child) { + const YGAlign align = child->getStyle().alignSelf() == YGAlignAuto + ? node->getStyle().alignItems() + : child->getStyle().alignSelf(); if (align == YGAlignBaseline && - YGFlexDirectionIsColumn(node->getStyle().flexDirection)) { + YGFlexDirectionIsColumn(node->getStyle().flexDirection())) { return YGAlignFlexStart; } return align; @@ -1018,7 +1022,7 @@ static float YGBaseline(const YGNodeRef node, void* layoutContext) { if (child->getLineIndex() > 0) { break; } - if (child->getStyle().positionType == YGPositionTypeAbsolute) { + if (child->getStyle().positionType() == YGPositionTypeAbsolute) { continue; } if (YGNodeAlignItem(node, child) == YGAlignBaseline || @@ -1041,17 +1045,17 @@ static float YGBaseline(const YGNodeRef node, void* layoutContext) { } static bool YGIsBaselineLayout(const YGNodeRef node) { - if (YGFlexDirectionIsColumn(node->getStyle().flexDirection)) { + if (YGFlexDirectionIsColumn(node->getStyle().flexDirection())) { return false; } - if (node->getStyle().alignItems == YGAlignBaseline) { + if (node->getStyle().alignItems() == YGAlignBaseline) { return true; } const uint32_t childCount = YGNodeGetChildCount(node); for (uint32_t i = 0; i < childCount; i++) { const YGNodeRef child = YGNodeGetChild(node, i); - if (child->getStyle().positionType == YGPositionTypeRelative && - child->getStyle().alignSelf == YGAlignBaseline) { + if (child->getStyle().positionType() == YGPositionTypeRelative && + child->getStyle().alignSelf() == YGAlignBaseline) { return true; } } @@ -1103,14 +1107,14 @@ static YGFloatOptional YGNodeBoundAxisWithinMinAndMax( if (YGFlexDirectionIsColumn(axis)) { min = YGResolveValue( - node->getStyle().minDimensions[YGDimensionHeight], axisSize); + node->getStyle().minDimensions()[YGDimensionHeight], axisSize); max = YGResolveValue( - node->getStyle().maxDimensions[YGDimensionHeight], axisSize); + node->getStyle().maxDimensions()[YGDimensionHeight], axisSize); } else if (YGFlexDirectionIsRow(axis)) { min = YGResolveValue( - node->getStyle().minDimensions[YGDimensionWidth], axisSize); + node->getStyle().minDimensions()[YGDimensionWidth], axisSize); max = YGResolveValue( - node->getStyle().maxDimensions[YGDimensionWidth], axisSize); + node->getStyle().maxDimensions()[YGDimensionWidth], axisSize); } if (max >= YGFloatOptional{0} && value > max) { @@ -1158,7 +1162,8 @@ static void YGConstrainMaxSizeForMode( YGMeasureMode* mode, float* size) { const YGFloatOptional maxSize = - YGResolveValue(node->getStyle().maxDimensions[dim[axis]], ownerAxisSize) + + YGResolveValue( + node->getStyle().maxDimensions()[dim[axis]], ownerAxisSize) + YGFloatOptional(node->getMarginForAxis(axis, ownerWidth)); switch (*mode) { case YGMeasureModeExactly: @@ -1190,7 +1195,7 @@ static void YGNodeComputeFlexBasisForChild( YGMarkerLayoutData& layoutMarkerData, void* const layoutContext) { const YGFlexDirection mainAxis = - YGResolveFlexDirection(node->getStyle().flexDirection, direction); + YGResolveFlexDirection(node->getStyle().flexDirection(), direction); const bool isMainAxisRow = YGFlexDirectionIsRow(mainAxis); const float mainAxisSize = isMainAxisRow ? width : height; const float mainAxisownerSize = isMainAxisRow ? ownerWidth : ownerHeight; @@ -1225,7 +1230,7 @@ static void YGNodeComputeFlexBasisForChild( child->setLayoutComputedFlexBasis(YGFloatOptionalMax( YGResolveValue( - child->getResolvedDimension(YGDimensionWidth), ownerWidth), + child->getResolvedDimensions()[YGDimensionWidth], ownerWidth), paddingAndBorder)); } else if (!isMainAxisRow && isColumnStyleDimDefined) { // The height is definite, so use that as the flex basis. @@ -1234,7 +1239,7 @@ static void YGNodeComputeFlexBasisForChild( child, YGFlexDirectionColumn, ownerWidth)); child->setLayoutComputedFlexBasis(YGFloatOptionalMax( YGResolveValue( - child->getResolvedDimension(YGDimensionHeight), ownerHeight), + child->getResolvedDimensions()[YGDimensionHeight], ownerHeight), paddingAndBorder)); } else { // Compute the flex basis and hypothetical main size (i.e. the clamped flex @@ -1252,7 +1257,7 @@ static void YGNodeComputeFlexBasisForChild( if (isRowStyleDimDefined) { childWidth = YGResolveValue( - child->getResolvedDimension(YGDimensionWidth), ownerWidth) + child->getResolvedDimensions()[YGDimensionWidth], ownerWidth) .unwrap() + marginRow; childWidthMeasureMode = YGMeasureModeExactly; @@ -1260,7 +1265,7 @@ static void YGNodeComputeFlexBasisForChild( if (isColumnStyleDimDefined) { childHeight = YGResolveValue( - child->getResolvedDimension(YGDimensionHeight), ownerHeight) + child->getResolvedDimensions()[YGDimensionHeight], ownerHeight) .unwrap() + marginColumn; childHeightMeasureMode = YGMeasureModeExactly; @@ -1268,32 +1273,32 @@ static void YGNodeComputeFlexBasisForChild( // The W3C spec doesn't say anything about the 'overflow' property, but all // major browsers appear to implement the following logic. - if ((!isMainAxisRow && node->getStyle().overflow == YGOverflowScroll) || - node->getStyle().overflow != YGOverflowScroll) { + if ((!isMainAxisRow && node->getStyle().overflow() == YGOverflowScroll) || + node->getStyle().overflow() != YGOverflowScroll) { if (YGFloatIsUndefined(childWidth) && !YGFloatIsUndefined(width)) { childWidth = width; childWidthMeasureMode = YGMeasureModeAtMost; } } - if ((isMainAxisRow && node->getStyle().overflow == YGOverflowScroll) || - node->getStyle().overflow != YGOverflowScroll) { + if ((isMainAxisRow && node->getStyle().overflow() == YGOverflowScroll) || + node->getStyle().overflow() != YGOverflowScroll) { if (YGFloatIsUndefined(childHeight) && !YGFloatIsUndefined(height)) { childHeight = height; childHeightMeasureMode = YGMeasureModeAtMost; } } - if (!child->getStyle().aspectRatio.isUndefined()) { + const auto& childStyle = child->getStyle(); + if (!childStyle.aspectRatio().isUndefined()) { if (!isMainAxisRow && childWidthMeasureMode == YGMeasureModeExactly) { childHeight = marginColumn + - (childWidth - marginRow) / child->getStyle().aspectRatio.unwrap(); + (childWidth - marginRow) / childStyle.aspectRatio().unwrap(); childHeightMeasureMode = YGMeasureModeExactly; } else if ( isMainAxisRow && childHeightMeasureMode == YGMeasureModeExactly) { childWidth = marginRow + - (childHeight - marginColumn) * - child->getStyle().aspectRatio.unwrap(); + (childHeight - marginColumn) * childStyle.aspectRatio().unwrap(); childWidthMeasureMode = YGMeasureModeExactly; } } @@ -1310,9 +1315,9 @@ static void YGNodeComputeFlexBasisForChild( childWidthStretch) { childWidth = width; childWidthMeasureMode = YGMeasureModeExactly; - if (!child->getStyle().aspectRatio.isUndefined()) { + if (!childStyle.aspectRatio().isUndefined()) { childHeight = - (childWidth - marginRow) / child->getStyle().aspectRatio.unwrap(); + (childWidth - marginRow) / childStyle.aspectRatio().unwrap(); childHeightMeasureMode = YGMeasureModeExactly; } } @@ -1327,9 +1332,9 @@ static void YGNodeComputeFlexBasisForChild( childHeight = height; childHeightMeasureMode = YGMeasureModeExactly; - if (!child->getStyle().aspectRatio.isUndefined()) { - childWidth = (childHeight - marginColumn) * - child->getStyle().aspectRatio.unwrap(); + if (!childStyle.aspectRatio().isUndefined()) { + childWidth = + (childHeight - marginColumn) * childStyle.aspectRatio().unwrap(); childWidthMeasureMode = YGMeasureModeExactly; } } @@ -1383,7 +1388,7 @@ static void YGNodeAbsoluteLayoutChild( YGMarkerLayoutData& layoutMarkerData, void* const layoutContext) { const YGFlexDirection mainAxis = - YGResolveFlexDirection(node->getStyle().flexDirection, direction); + YGResolveFlexDirection(node->getStyle().flexDirection(), direction); const YGFlexDirection crossAxis = YGFlexDirectionCross(mainAxis, direction); const bool isMainAxisRow = YGFlexDirectionIsRow(mainAxis); @@ -1398,7 +1403,7 @@ static void YGNodeAbsoluteLayoutChild( if (YGNodeIsStyleDimDefined(child, YGFlexDirectionRow, width)) { childWidth = - YGResolveValue(child->getResolvedDimension(YGDimensionWidth), width) + YGResolveValue(child->getResolvedDimensions()[YGDimensionWidth], width) .unwrap() + marginRow; } else { @@ -1418,9 +1423,9 @@ static void YGNodeAbsoluteLayoutChild( } if (YGNodeIsStyleDimDefined(child, YGFlexDirectionColumn, height)) { - childHeight = - YGResolveValue(child->getResolvedDimension(YGDimensionHeight), height) - .unwrap() + + childHeight = YGResolveValue( + child->getResolvedDimensions()[YGDimensionHeight], height) + .unwrap() + marginColumn; } else { // If the child doesn't have a specified height, compute the height based on @@ -1441,15 +1446,15 @@ static void YGNodeAbsoluteLayoutChild( // Exactly one dimension needs to be defined for us to be able to do aspect // ratio calculation. One dimension being the anchor and the other being // flexible. + const auto& childStyle = child->getStyle(); if (YGFloatIsUndefined(childWidth) ^ YGFloatIsUndefined(childHeight)) { - if (!child->getStyle().aspectRatio.isUndefined()) { + if (!childStyle.aspectRatio().isUndefined()) { if (YGFloatIsUndefined(childWidth)) { childWidth = marginRow + - (childHeight - marginColumn) * - child->getStyle().aspectRatio.unwrap(); + (childHeight - marginColumn) * childStyle.aspectRatio().unwrap(); } else if (YGFloatIsUndefined(childHeight)) { childHeight = marginColumn + - (childWidth - marginRow) / child->getStyle().aspectRatio.unwrap(); + (childWidth - marginRow) / childStyle.aspectRatio().unwrap(); } } } @@ -1521,7 +1526,7 @@ static void YGNodeAbsoluteLayoutChild( leading[mainAxis]); } else if ( !child->isLeadingPositionDefined(mainAxis) && - node->getStyle().justifyContent == YGJustifyCenter) { + node->getStyle().justifyContent() == YGJustifyCenter) { child->setLayoutPosition( (node->getLayout().measuredDimensions[dim[mainAxis]] - child->getLayout().measuredDimensions[dim[mainAxis]]) / @@ -1529,7 +1534,7 @@ static void YGNodeAbsoluteLayoutChild( leading[mainAxis]); } else if ( !child->isLeadingPositionDefined(mainAxis) && - node->getStyle().justifyContent == YGJustifyFlexEnd) { + node->getStyle().justifyContent() == YGJustifyFlexEnd) { child->setLayoutPosition( (node->getLayout().measuredDimensions[dim[mainAxis]] - child->getLayout().measuredDimensions[dim[mainAxis]]), @@ -1559,7 +1564,7 @@ static void YGNodeAbsoluteLayoutChild( } else if ( !child->isLeadingPositionDefined(crossAxis) && ((YGNodeAlignItem(node, child) == YGAlignFlexEnd) ^ - (node->getStyle().flexWrap == YGWrapWrapReverse))) { + (node->getStyle().flexWrap() == YGWrapWrapReverse))) { child->setLayoutPosition( (node->getLayout().measuredDimensions[dim[crossAxis]] - child->getLayout().measuredDimensions[dim[crossAxis]]), @@ -1782,13 +1787,13 @@ static float YGNodeCalculateAvailableInnerDim( // We want to make sure our available height does not violate min and max // constraints const YGFloatOptional minDimensionOptional = - YGResolveValue(node->getStyle().minDimensions[dimension], ownerDim); + YGResolveValue(node->getStyle().minDimensions()[dimension], ownerDim); const float minInnerDim = minDimensionOptional.isUndefined() ? 0.0f : minDimensionOptional.unwrap() - paddingAndBorder; const YGFloatOptional maxDimensionOptional = - YGResolveValue(node->getStyle().maxDimensions[dimension], ownerDim); + YGResolveValue(node->getStyle().maxDimensions()[dimension], ownerDim); const float maxInnerDim = maxDimensionOptional.isUndefined() ? FLT_MAX @@ -1839,7 +1844,7 @@ static float YGNodeComputeFlexBasisForChildren( for (auto child : children) { child->resolveDimension(); - if (child->getStyle().display == YGDisplayNone) { + if (child->getStyle().display() == YGDisplayNone) { YGZeroOutLayoutRecursivly(child, layoutContext); child->setHasNewLayout(true); child->setDirty(false); @@ -1858,7 +1863,7 @@ static float YGNodeComputeFlexBasisForChildren( childDirection, mainDim, crossDim, availableInnerWidth); } - if (child->getStyle().positionType == YGPositionTypeAbsolute) { + if (child->getStyle().positionType() == YGPositionTypeAbsolute) { continue; } if (child == singleFlexChild) { @@ -1906,15 +1911,15 @@ static YGCollectFlexItemsRowValues YGCalculateCollectFlexItemsRowValues( float sizeConsumedOnCurrentLineIncludingMinConstraint = 0; const YGFlexDirection mainAxis = YGResolveFlexDirection( - node->getStyle().flexDirection, node->resolveDirection(ownerDirection)); - const bool isNodeFlexWrap = node->getStyle().flexWrap != YGWrapNoWrap; + node->getStyle().flexDirection(), node->resolveDirection(ownerDirection)); + const bool isNodeFlexWrap = node->getStyle().flexWrap() != YGWrapNoWrap; // Add items to the current line until it's full or we run out of items. uint32_t endOfLineIndex = startOfLineIndex; for (; endOfLineIndex < node->getChildren().size(); endOfLineIndex++) { const YGNodeRef child = node->getChild(endOfLineIndex); - if (child->getStyle().display == YGDisplayNone || - child->getStyle().positionType == YGPositionTypeAbsolute) { + if (child->getStyle().display() == YGDisplayNone || + child->getStyle().positionType() == YGPositionTypeAbsolute) { continue; } child->setLineIndex(lineCount); @@ -1997,7 +2002,7 @@ static float YGDistributeFreeSpaceSecondPass( float flexGrowFactor = 0; float deltaFreeSpace = 0; const bool isMainAxisRow = YGFlexDirectionIsRow(mainAxis); - const bool isNodeFlexWrap = node->getStyle().flexWrap != YGWrapNoWrap; + const bool isNodeFlexWrap = node->getStyle().flexWrap() != YGWrapNoWrap; for (auto currentRelativeChild : collectedFlexItemsValues.relativeChildren) { childFlexBasis = YGNodeBoundAxisWithinMinAndMax( @@ -2067,11 +2072,11 @@ static float YGDistributeFreeSpaceSecondPass( YGMeasureMode childCrossMeasureMode; YGMeasureMode childMainMeasureMode = YGMeasureModeExactly; - if (!currentRelativeChild->getStyle().aspectRatio.isUndefined()) { - childCrossSize = isMainAxisRow ? (childMainSize - marginMain) / - currentRelativeChild->getStyle().aspectRatio.unwrap() - : (childMainSize - marginMain) * - currentRelativeChild->getStyle().aspectRatio.unwrap(); + const auto& childStyle = currentRelativeChild->getStyle(); + if (!childStyle.aspectRatio().isUndefined()) { + childCrossSize = isMainAxisRow + ? (childMainSize - marginMain) / childStyle.aspectRatio().unwrap() + : (childMainSize - marginMain) * childStyle.aspectRatio().unwrap(); childCrossMeasureMode = YGMeasureModeExactly; childCrossSize += marginCross; @@ -2335,7 +2340,7 @@ static void YGJustifyMainAxis( const float availableInnerWidth, const bool performLayout, void* const layoutContext) { - const YGStyle& style = node->getStyle(); + const auto& style = node->getStyle(); const float leadingPaddingAndBorderMain = node->getLeadingPaddingAndBorder(mainAxis, ownerWidth).unwrap(); const float trailingPaddingAndBorderMain = @@ -2344,8 +2349,8 @@ static void YGJustifyMainAxis( // remainingFreeSpace is 0 when min main dimension is not given if (measureModeMainDim == YGMeasureModeAtMost && collectedFlexItemsValues.remainingFreeSpace > 0) { - if (!style.minDimensions[dim[mainAxis]].isUndefined() && - !YGResolveValue(style.minDimensions[dim[mainAxis]], mainAxisownerSize) + if (!style.minDimensions()[dim[mainAxis]].isUndefined() && + !YGResolveValue(style.minDimensions()[dim[mainAxis]], mainAxisownerSize) .isUndefined()) { // This condition makes sure that if the size of main dimension(after // considering child nodes main dim, leading and trailing padding etc) @@ -2355,7 +2360,8 @@ static void YGJustifyMainAxis( // `minAvailableMainDim` denotes minimum available space in which child // can be laid out, it will exclude space consumed by padding and border. const float minAvailableMainDim = - YGResolveValue(style.minDimensions[dim[mainAxis]], mainAxisownerSize) + YGResolveValue( + style.minDimensions()[dim[mainAxis]], mainAxisownerSize) .unwrap() - leadingPaddingAndBorderMain - trailingPaddingAndBorderMain; const float occupiedSpaceByChildNodes = @@ -2372,7 +2378,7 @@ static void YGJustifyMainAxis( i < collectedFlexItemsValues.endOfLineIndex; i++) { const YGNodeRef child = node->getChild(i); - if (child->getStyle().positionType == YGPositionTypeRelative) { + if (child->getStyle().positionType() == YGPositionTypeRelative) { if (child->marginLeadingValue(mainAxis).unit == YGUnitAuto) { numberOfAutoMarginsOnCurrentLine++; } @@ -2387,7 +2393,7 @@ static void YGJustifyMainAxis( // each two elements. float leadingMainDim = 0; float betweenMainDim = 0; - const YGJustify justifyContent = node->getStyle().justifyContent; + const YGJustify justifyContent = node->getStyle().justifyContent(); if (numberOfAutoMarginsOnCurrentLine == 0) { switch (justifyContent) { @@ -2436,10 +2442,10 @@ static void YGJustifyMainAxis( const YGNodeRef child = node->getChild(i); const YGStyle& childStyle = child->getStyle(); const YGLayout childLayout = child->getLayout(); - if (childStyle.display == YGDisplayNone) { + if (childStyle.display() == YGDisplayNone) { continue; } - if (childStyle.positionType == YGPositionTypeAbsolute && + if (childStyle.positionType() == YGPositionTypeAbsolute && child->isLeadingPositionDefined(mainAxis)) { if (performLayout) { // In case the child is position absolute and has left/top being @@ -2456,7 +2462,7 @@ static void YGJustifyMainAxis( // Now that we placed the element, we need to update the variables. // We need to do that only for relative elements. Absolute elements do not // take part in that phase. - if (childStyle.positionType == YGPositionTypeRelative) { + if (childStyle.positionType() == YGPositionTypeRelative) { if (child->marginLeadingValue(mainAxis).unit == YGUnitAuto) { collectedFlexItemsValues.mainDim += collectedFlexItemsValues.remainingFreeSpace / @@ -2720,10 +2726,10 @@ static void YGNodelayoutImpl( // STEP 1: CALCULATE VALUES FOR REMAINDER OF ALGORITHM const YGFlexDirection mainAxis = - YGResolveFlexDirection(node->getStyle().flexDirection, direction); + YGResolveFlexDirection(node->getStyle().flexDirection(), direction); const YGFlexDirection crossAxis = YGFlexDirectionCross(mainAxis, direction); const bool isMainAxisRow = YGFlexDirectionIsRow(mainAxis); - const bool isNodeFlexWrap = node->getStyle().flexWrap != YGWrapNoWrap; + const bool isNodeFlexWrap = node->getStyle().flexWrap() != YGWrapNoWrap; const float mainAxisownerSize = isMainAxisRow ? ownerWidth : ownerHeight; const float crossAxisownerSize = isMainAxisRow ? ownerHeight : ownerWidth; @@ -2752,22 +2758,22 @@ static void YGNodelayoutImpl( const float minInnerWidth = YGResolveValue( - node->getStyle().minDimensions[YGDimensionWidth], ownerWidth) + node->getStyle().minDimensions()[YGDimensionWidth], ownerWidth) .unwrap() - paddingAndBorderAxisRow; const float maxInnerWidth = YGResolveValue( - node->getStyle().maxDimensions[YGDimensionWidth], ownerWidth) + node->getStyle().maxDimensions()[YGDimensionWidth], ownerWidth) .unwrap() - paddingAndBorderAxisRow; const float minInnerHeight = YGResolveValue( - node->getStyle().minDimensions[YGDimensionHeight], ownerHeight) + node->getStyle().minDimensions()[YGDimensionHeight], ownerHeight) .unwrap() - paddingAndBorderAxisColumn; const float maxInnerHeight = YGResolveValue( - node->getStyle().maxDimensions[YGDimensionHeight], ownerHeight) + node->getStyle().maxDimensions()[YGDimensionHeight], ownerHeight) .unwrap() - paddingAndBorderAxisColumn; @@ -2971,10 +2977,10 @@ static void YGNodelayoutImpl( if (performLayout) { for (uint32_t i = startOfLineIndex; i < endOfLineIndex; i++) { const YGNodeRef child = node->getChild(i); - if (child->getStyle().display == YGDisplayNone) { + if (child->getStyle().display() == YGDisplayNone) { continue; } - if (child->getStyle().positionType == YGPositionTypeAbsolute) { + if (child->getStyle().positionType() == YGPositionTypeAbsolute) { // If the child is absolutely positioned and has a // top/left/bottom/right set, override all the previously computed // positions to set it correctly. @@ -3019,14 +3025,13 @@ static void YGNodelayoutImpl( child, crossAxis, availableInnerCrossDim)) { float childMainSize = child->getLayout().measuredDimensions[dim[mainAxis]]; - float childCrossSize = - !child->getStyle().aspectRatio.isUndefined() + const auto& childStyle = child->getStyle(); + float childCrossSize = !childStyle.aspectRatio().isUndefined() ? child->getMarginForAxis(crossAxis, availableInnerWidth) .unwrap() + - (isMainAxisRow ? childMainSize / - child->getStyle().aspectRatio.unwrap() - : childMainSize * - child->getStyle().aspectRatio.unwrap()) + (isMainAxisRow + ? childMainSize / childStyle.aspectRatio().unwrap() + : childMainSize * childStyle.aspectRatio().unwrap()) : collectedFlexItemsValues.crossDim; childMainSize += @@ -3055,7 +3060,7 @@ static void YGNodelayoutImpl( const float childHeight = !isMainAxisRow ? childMainSize : childCrossSize; - auto alignContent = node->getStyle().alignContent; + auto alignContent = node->getStyle().alignContent(); auto crossAxisDoesNotGrow = alignContent != YGAlignStretch && isNodeFlexWrap; const YGMeasureMode childWidthMeasureMode = @@ -3127,7 +3132,7 @@ static void YGNodelayoutImpl( if (!YGFloatIsUndefined(availableInnerCrossDim)) { const float remainingAlignContentDim = availableInnerCrossDim - totalLineCrossDim; - switch (node->getStyle().alignContent) { + switch (node->getStyle().alignContent()) { case YGAlignFlexEnd: currentLead += remainingAlignContentDim; break; @@ -3171,10 +3176,10 @@ static void YGNodelayoutImpl( float maxDescentForCurrentLine = 0; for (ii = startIndex; ii < childCount; ii++) { const YGNodeRef child = node->getChild(ii); - if (child->getStyle().display == YGDisplayNone) { + if (child->getStyle().display() == YGDisplayNone) { continue; } - if (child->getStyle().positionType == YGPositionTypeRelative) { + if (child->getStyle().positionType() == YGPositionTypeRelative) { if (child->getLineIndex() != i) { break; } @@ -3213,10 +3218,10 @@ static void YGNodelayoutImpl( if (performLayout) { for (ii = startIndex; ii < endIndex; ii++) { const YGNodeRef child = node->getChild(ii); - if (child->getStyle().display == YGDisplayNone) { + if (child->getStyle().display() == YGDisplayNone) { continue; } - if (child->getStyle().positionType == YGPositionTypeRelative) { + if (child->getStyle().positionType() == YGPositionTypeRelative) { switch (YGNodeAlignItem(node, child)) { case YGAlignFlexStart: { child->setLayoutPosition( @@ -3342,7 +3347,7 @@ static void YGNodelayoutImpl( // If the user didn't specify a width or height for the node, set the // dimensions based on the children. if (measureModeMainDim == YGMeasureModeUndefined || - (node->getStyle().overflow != YGOverflowScroll && + (node->getStyle().overflow() != YGOverflowScroll && measureModeMainDim == YGMeasureModeAtMost)) { // Clamp the size to the min/max size, if specified, and make sure it // doesn't go below the padding and border amount. @@ -3353,7 +3358,7 @@ static void YGNodelayoutImpl( } else if ( measureModeMainDim == YGMeasureModeAtMost && - node->getStyle().overflow == YGOverflowScroll) { + node->getStyle().overflow() == YGOverflowScroll) { node->setLayoutMeasuredDimension( YGFloatMax( YGFloatMin( @@ -3369,7 +3374,7 @@ static void YGNodelayoutImpl( } if (measureModeCrossDim == YGMeasureModeUndefined || - (node->getStyle().overflow != YGOverflowScroll && + (node->getStyle().overflow() != YGOverflowScroll && measureModeCrossDim == YGMeasureModeAtMost)) { // Clamp the size to the min/max size, if specified, and make sure it // doesn't go below the padding and border amount. @@ -3384,7 +3389,7 @@ static void YGNodelayoutImpl( } else if ( measureModeCrossDim == YGMeasureModeAtMost && - node->getStyle().overflow == YGOverflowScroll) { + node->getStyle().overflow() == YGOverflowScroll) { node->setLayoutMeasuredDimension( YGFloatMax( YGFloatMin( @@ -3402,10 +3407,10 @@ static void YGNodelayoutImpl( // As we only wrapped in normal direction yet, we need to reverse the // positions on wrap-reverse. - if (performLayout && node->getStyle().flexWrap == YGWrapWrapReverse) { + if (performLayout && node->getStyle().flexWrap() == YGWrapWrapReverse) { for (uint32_t i = 0; i < childCount; i++) { const YGNodeRef child = YGNodeGetChild(node, i); - if (child->getStyle().positionType == YGPositionTypeRelative) { + if (child->getStyle().positionType() == YGPositionTypeRelative) { child->setLayoutPosition( node->getLayout().measuredDimensions[dim[crossAxis]] - child->getLayout().position[pos[crossAxis]] - @@ -3418,7 +3423,7 @@ static void YGNodelayoutImpl( if (performLayout) { // STEP 10: SIZING AND POSITIONING ABSOLUTE CHILDREN for (auto child : node->getChildren()) { - if (child->getStyle().positionType != YGPositionTypeAbsolute) { + if (child->getStyle().positionType() != YGPositionTypeAbsolute) { continue; } YGNodeAbsoluteLayoutChild( @@ -3443,7 +3448,7 @@ static void YGNodelayoutImpl( if (needsMainTrailingPos || needsCrossTrailingPos) { for (uint32_t i = 0; i < childCount; i++) { const YGNodeRef child = node->getChild(i); - if (child->getStyle().display == YGDisplayNone) { + if (child->getStyle().display() == YGDisplayNone) { continue; } if (needsMainTrailingPos) { @@ -4014,10 +4019,11 @@ void YGNodeCalculateLayoutWithContext( .unwrap(); widthMeasureMode = YGMeasureModeExactly; } else if (!YGResolveValue( - node->getStyle().maxDimensions[YGDimensionWidth], ownerWidth) + node->getStyle().maxDimensions()[YGDimensionWidth], + ownerWidth) .isUndefined()) { width = YGResolveValue( - node->getStyle().maxDimensions[YGDimensionWidth], ownerWidth) + node->getStyle().maxDimensions()[YGDimensionWidth], ownerWidth) .unwrap(); widthMeasureMode = YGMeasureModeAtMost; } else { @@ -4036,12 +4042,13 @@ void YGNodeCalculateLayoutWithContext( .unwrap(); heightMeasureMode = YGMeasureModeExactly; } else if (!YGResolveValue( - node->getStyle().maxDimensions[YGDimensionHeight], + node->getStyle().maxDimensions()[YGDimensionHeight], ownerHeight) .isUndefined()) { - height = YGResolveValue( - node->getStyle().maxDimensions[YGDimensionHeight], ownerHeight) - .unwrap(); + height = + YGResolveValue( + node->getStyle().maxDimensions()[YGDimensionHeight], ownerHeight) + .unwrap(); heightMeasureMode = YGMeasureModeAtMost; } else { height = ownerHeight; From e5d3baca814475c5732c0252f42c67cd813ee747 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Tue, 23 Apr 2019 10:07:09 -0700 Subject: [PATCH 043/347] Introduce `YGNodeConstRef` Summary: @public Introduces `YGNodeConstRef` as `const YGNode*`, i.e. a pointer to a constant `YGNode`. We also use it for all style getters, which will avoid casts to `const YGNode*` in diffs up the stack. We should use this pointer type for all functions that do not modify the underlying node. Reviewed By: SidharthGuglani Differential Revision: D14999095 fbshipit-source-id: 61cc53bb35e787a12ae12e70438d84c0a4983752 --- yoga/Yoga.cpp | 101 +++++++++++++++++++++++--------------------------- yoga/Yoga.h | 51 ++++++++++++------------- 2 files changed, 72 insertions(+), 80 deletions(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index bb9c6aea..8dd49c24 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -522,15 +522,13 @@ void YGNodeCopyStyle(const YGNodeRef dstNode, const YGNodeRef srcNode) { } } -float YGNodeStyleGetFlexGrow(const YGNodeRef n) { - const YGNode* node = n; +float YGNodeStyleGetFlexGrow(const YGNodeConstRef node) { return node->getStyle().flexGrow().isUndefined() ? kDefaultFlexGrow : node->getStyle().flexGrow().unwrap(); } -float YGNodeStyleGetFlexShrink(const YGNodeRef n) { - const YGNode* node = n; +float YGNodeStyleGetFlexShrink(const YGNodeConstRef node) { return node->getStyle().flexShrink().isUndefined() ? (node->getConfig()->useWebDefaults ? kWebDefaultFlexShrink : kDefaultFlexShrink) @@ -597,7 +595,7 @@ void updateDimensionProp( void YGNodeStyleSetDirection(const YGNodeRef node, const YGDirection value) { updateStyle(node, value); } -YGDirection YGNodeStyleGetDirection(const YGNodeRef node) { +YGDirection YGNodeStyleGetDirection(const YGNodeConstRef node) { return node->getStyle().direction(); } @@ -606,7 +604,7 @@ void YGNodeStyleSetFlexDirection( const YGFlexDirection flexDirection) { updateStyle(node, flexDirection); } -YGFlexDirection YGNodeStyleGetFlexDirection(const YGNodeRef node) { +YGFlexDirection YGNodeStyleGetFlexDirection(const YGNodeConstRef node) { return node->getStyle().flexDirection(); } @@ -615,7 +613,7 @@ void YGNodeStyleSetJustifyContent( const YGJustify justifyContent) { updateStyle(node, justifyContent); } -YGJustify YGNodeStyleGetJustifyContent(const YGNodeRef node) { +YGJustify YGNodeStyleGetJustifyContent(const YGNodeConstRef node) { return node->getStyle().justifyContent(); } @@ -624,21 +622,21 @@ void YGNodeStyleSetAlignContent( const YGAlign alignContent) { updateStyle(node, alignContent); } -YGAlign YGNodeStyleGetAlignContent(const YGNodeRef node) { +YGAlign YGNodeStyleGetAlignContent(const YGNodeConstRef node) { return node->getStyle().alignContent(); } void YGNodeStyleSetAlignItems(const YGNodeRef node, const YGAlign alignItems) { updateStyle(node, alignItems); } -YGAlign YGNodeStyleGetAlignItems(const YGNodeRef node) { +YGAlign YGNodeStyleGetAlignItems(const YGNodeConstRef node) { return node->getStyle().alignItems(); } void YGNodeStyleSetAlignSelf(const YGNodeRef node, const YGAlign alignSelf) { updateStyle(node, alignSelf); } -YGAlign YGNodeStyleGetAlignSelf(const YGNodeRef node) { +YGAlign YGNodeStyleGetAlignSelf(const YGNodeConstRef node) { return node->getStyle().alignSelf(); } @@ -647,28 +645,28 @@ void YGNodeStyleSetPositionType( const YGPositionType positionType) { updateStyle(node, positionType); } -YGPositionType YGNodeStyleGetPositionType(const YGNodeRef node) { +YGPositionType YGNodeStyleGetPositionType(const YGNodeConstRef node) { return node->getStyle().positionType(); } void YGNodeStyleSetFlexWrap(const YGNodeRef node, const YGWrap flexWrap) { updateStyle(node, flexWrap); } -YGWrap YGNodeStyleGetFlexWrap(const YGNodeRef node) { +YGWrap YGNodeStyleGetFlexWrap(const YGNodeConstRef node) { return node->getStyle().flexWrap(); } void YGNodeStyleSetOverflow(const YGNodeRef node, const YGOverflow overflow) { updateStyle(node, overflow); } -YGOverflow YGNodeStyleGetOverflow(const YGNodeRef node) { +YGOverflow YGNodeStyleGetOverflow(const YGNodeConstRef node) { return node->getStyle().overflow(); } void YGNodeStyleSetDisplay(const YGNodeRef node, const YGDisplay display) { updateStyle(node, display); } -YGDisplay YGNodeStyleGetDisplay(const YGNodeRef node) { +YGDisplay YGNodeStyleGetDisplay(const YGNodeConstRef node) { return node->getStyle().display(); } @@ -678,9 +676,10 @@ void YGNodeStyleSetFlex(const YGNodeRef node, const float flex) { } // TODO(T26792433): Change the API to accept YGFloatOptional. -float YGNodeStyleGetFlex(const YGNodeRef node) { - const auto& style = node->getStyle(); - return style.flex().isUndefined() ? YGUndefined : style.flex().unwrap(); +float YGNodeStyleGetFlex(const YGNodeConstRef node) { + return node->getStyle().flex().isUndefined() + ? YGUndefined + : node->getStyle().flex().unwrap(); } // TODO(T26792433): Change the API to accept YGFloatOptional. @@ -695,8 +694,13 @@ void YGNodeStyleSetFlexShrink(const YGNodeRef node, const float flexShrink) { node, YGFloatOptional{flexShrink}); } -YGValue YGNodeStyleGetFlexBasis(const YGNodeRef node) { - return static_cast(node)->getStyle().flexBasis(); +YGValue YGNodeStyleGetFlexBasis(const YGNodeConstRef node) { + YGValue flexBasis = node->getStyle().flexBasis(); + if (flexBasis.unit == YGUnitUndefined || flexBasis.unit == YGUnitAuto) { + // TODO(T26792433): Get rid off the use of YGUndefined at client side + flexBasis.value = YGUndefined; + } + return flexBasis; } void YGNodeStyleSetFlexBasis(const YGNodeRef node, const float flexBasis) { @@ -724,8 +728,8 @@ void YGNodeStyleSetPositionPercent(YGNodeRef node, YGEdge edge, float percent) { auto value = detail::CompactValue::ofMaybe(percent); updateEdgeProp<&YGStyle::position>(node, edge, value); } -YGValue YGNodeStyleGetPosition(YGNodeRef node, YGEdge edge) { - return static_cast(node)->getStyle().position()[edge]; +YGValue YGNodeStyleGetPosition(YGNodeConstRef node, YGEdge edge) { + return node->getStyle().position()[edge]; } void YGNodeStyleSetMargin(YGNodeRef node, YGEdge edge, float points) { @@ -739,8 +743,8 @@ void YGNodeStyleSetMarginPercent(YGNodeRef node, YGEdge edge, float percent) { void YGNodeStyleSetMarginAuto(YGNodeRef node, YGEdge edge) { updateEdgeProp<&YGStyle::margin>(node, edge, detail::CompactValue::ofAuto()); } -YGValue YGNodeStyleGetMargin(YGNodeRef node, YGEdge edge) { - return static_cast(node)->getStyle().margin()[edge]; +YGValue YGNodeStyleGetMargin(YGNodeConstRef node, YGEdge edge) { + return node->getStyle().margin()[edge]; } void YGNodeStyleSetPadding(YGNodeRef node, YGEdge edge, float points) { @@ -751,8 +755,8 @@ void YGNodeStyleSetPaddingPercent(YGNodeRef node, YGEdge edge, float percent) { auto value = detail::CompactValue::ofMaybe(percent); updateEdgeProp<&YGStyle::padding>(node, edge, value); } -YGValue YGNodeStyleGetPadding(YGNodeRef node, YGEdge edge) { - return static_cast(node)->getStyle().padding()[edge]; +YGValue YGNodeStyleGetPadding(YGNodeConstRef node, YGEdge edge) { + return node->getStyle().padding()[edge]; } // TODO(T26792433): Change the API to accept YGFloatOptional. @@ -764,22 +768,21 @@ void YGNodeStyleSetBorder( updateEdgeProp<&YGStyle::border>(node, edge, value); } -float YGNodeStyleGetBorder(const YGNodeRef node, const YGEdge edge) { - const auto& style = node->getStyle(); - if (style.border()[edge].isUndefined() || style.border()[edge].isAuto()) { +float YGNodeStyleGetBorder(const YGNodeConstRef node, const YGEdge edge) { + auto border = node->getStyle().border()[edge]; + if (border.isUndefined() || border.isAuto()) { // TODO(T26792433): Rather than returning YGUndefined, change the api to // return YGFloatOptional. return YGUndefined; } - auto border = (YGValue) style.border()[edge]; - return border.value; + return static_cast(border).value; } // Yoga specific properties, not compatible with flexbox specification // TODO(T26792433): Change the API to accept YGFloatOptional. -float YGNodeStyleGetAspectRatio(const YGNodeRef node) { +float YGNodeStyleGetAspectRatio(const YGNodeConstRef node) { const YGFloatOptional op = node->getStyle().aspectRatio(); return op.isUndefined() ? YGUndefined : op.unwrap(); } @@ -802,10 +805,8 @@ void YGNodeStyleSetWidthAuto(YGNodeRef node) { updateDimensionProp<&YGStyle::dimensions>( node, YGDimensionWidth, detail::CompactValue::ofAuto()); } -YGValue YGNodeStyleGetWidth(YGNodeRef node) { - return static_cast(node) - ->getStyle() - .dimensions()[YGDimensionWidth]; +YGValue YGNodeStyleGetWidth(YGNodeConstRef node) { + return node->getStyle().dimensions()[YGDimensionWidth]; } void YGNodeStyleSetHeight(YGNodeRef node, float points) { @@ -820,10 +821,8 @@ void YGNodeStyleSetHeightAuto(YGNodeRef node) { updateDimensionProp<&YGStyle::dimensions>( node, YGDimensionHeight, detail::CompactValue::ofAuto()); } -YGValue YGNodeStyleGetHeight(YGNodeRef node) { - return static_cast(node) - ->getStyle() - .dimensions()[YGDimensionHeight]; +YGValue YGNodeStyleGetHeight(YGNodeConstRef node) { + return node->getStyle().dimensions()[YGDimensionHeight]; } void YGNodeStyleSetMinWidth(const YGNodeRef node, const float minWidth) { @@ -834,10 +833,8 @@ void YGNodeStyleSetMinWidthPercent(const YGNodeRef node, const float minWidth) { auto value = detail::CompactValue::ofMaybe(minWidth); updateDimensionProp<&YGStyle::minDimensions>(node, YGDimensionWidth, value); } -YGValue YGNodeStyleGetMinWidth(const YGNodeRef node) { - return static_cast(node) - ->getStyle() - .minDimensions()[YGDimensionWidth]; +YGValue YGNodeStyleGetMinWidth(const YGNodeConstRef node) { + return node->getStyle().minDimensions()[YGDimensionWidth]; }; void YGNodeStyleSetMinHeight(const YGNodeRef node, const float minHeight) { @@ -850,10 +847,8 @@ void YGNodeStyleSetMinHeightPercent( auto value = detail::CompactValue::ofMaybe(minHeight); updateDimensionProp<&YGStyle::minDimensions>(node, YGDimensionHeight, value); } -YGValue YGNodeStyleGetMinHeight(const YGNodeRef node) { - return static_cast(node) - ->getStyle() - .minDimensions()[YGDimensionHeight]; +YGValue YGNodeStyleGetMinHeight(const YGNodeConstRef node) { + return node->getStyle().minDimensions()[YGDimensionHeight]; }; void YGNodeStyleSetMaxWidth(const YGNodeRef node, const float maxWidth) { @@ -864,10 +859,8 @@ void YGNodeStyleSetMaxWidthPercent(const YGNodeRef node, const float maxWidth) { auto value = detail::CompactValue::ofMaybe(maxWidth); updateDimensionProp<&YGStyle::maxDimensions>(node, YGDimensionWidth, value); } -YGValue YGNodeStyleGetMaxWidth(const YGNodeRef node) { - return static_cast(node) - ->getStyle() - .maxDimensions()[YGDimensionWidth]; +YGValue YGNodeStyleGetMaxWidth(const YGNodeConstRef node) { + return node->getStyle().maxDimensions()[YGDimensionWidth]; }; void YGNodeStyleSetMaxHeight(const YGNodeRef node, const float maxHeight) { @@ -880,10 +873,8 @@ void YGNodeStyleSetMaxHeightPercent( auto value = detail::CompactValue::ofMaybe(maxHeight); updateDimensionProp<&YGStyle::maxDimensions>(node, YGDimensionHeight, value); } -YGValue YGNodeStyleGetMaxHeight(const YGNodeRef node) { - return static_cast(node) - ->getStyle() - .maxDimensions()[YGDimensionHeight]; +YGValue YGNodeStyleGetMaxHeight(const YGNodeConstRef node) { + return node->getStyle().maxDimensions()[YGDimensionHeight]; }; #define YG_NODE_LAYOUT_PROPERTY_IMPL(type, name, instanceName) \ diff --git a/yoga/Yoga.h b/yoga/Yoga.h index 5183710d..c616d965 100644 --- a/yoga/Yoga.h +++ b/yoga/Yoga.h @@ -31,6 +31,7 @@ typedef struct YGSize { typedef struct YGConfig* YGConfigRef; typedef struct YGNode* YGNodeRef; +typedef const struct YGNode* YGNodeConstRef; typedef YGSize (*YGMeasureFunc)( YGNodeRef node, @@ -144,56 +145,56 @@ WIN_EXPORT bool YGNodeIsDirty(YGNodeRef node); bool YGNodeLayoutGetDidUseLegacyFlag(YGNodeRef node); WIN_EXPORT void YGNodeStyleSetDirection(YGNodeRef node, YGDirection direction); -WIN_EXPORT YGDirection YGNodeStyleGetDirection(YGNodeRef node); +WIN_EXPORT YGDirection YGNodeStyleGetDirection(YGNodeConstRef node); WIN_EXPORT void YGNodeStyleSetFlexDirection( YGNodeRef node, YGFlexDirection flexDirection); -WIN_EXPORT YGFlexDirection YGNodeStyleGetFlexDirection(YGNodeRef node); +WIN_EXPORT YGFlexDirection YGNodeStyleGetFlexDirection(YGNodeConstRef node); WIN_EXPORT void YGNodeStyleSetJustifyContent( YGNodeRef node, YGJustify justifyContent); -WIN_EXPORT YGJustify YGNodeStyleGetJustifyContent(YGNodeRef node); +WIN_EXPORT YGJustify YGNodeStyleGetJustifyContent(YGNodeConstRef node); WIN_EXPORT void YGNodeStyleSetAlignContent( YGNodeRef node, YGAlign alignContent); -WIN_EXPORT YGAlign YGNodeStyleGetAlignContent(YGNodeRef node); +WIN_EXPORT YGAlign YGNodeStyleGetAlignContent(YGNodeConstRef node); WIN_EXPORT void YGNodeStyleSetAlignItems(YGNodeRef node, YGAlign alignItems); -WIN_EXPORT YGAlign YGNodeStyleGetAlignItems(YGNodeRef node); +WIN_EXPORT YGAlign YGNodeStyleGetAlignItems(YGNodeConstRef node); WIN_EXPORT void YGNodeStyleSetAlignSelf(YGNodeRef node, YGAlign alignSelf); -WIN_EXPORT YGAlign YGNodeStyleGetAlignSelf(YGNodeRef node); +WIN_EXPORT YGAlign YGNodeStyleGetAlignSelf(YGNodeConstRef node); WIN_EXPORT void YGNodeStyleSetPositionType( YGNodeRef node, YGPositionType positionType); -WIN_EXPORT YGPositionType YGNodeStyleGetPositionType(YGNodeRef node); +WIN_EXPORT YGPositionType YGNodeStyleGetPositionType(YGNodeConstRef node); WIN_EXPORT void YGNodeStyleSetFlexWrap(YGNodeRef node, YGWrap flexWrap); -WIN_EXPORT YGWrap YGNodeStyleGetFlexWrap(YGNodeRef node); +WIN_EXPORT YGWrap YGNodeStyleGetFlexWrap(YGNodeConstRef node); WIN_EXPORT void YGNodeStyleSetOverflow(YGNodeRef node, YGOverflow overflow); -WIN_EXPORT YGOverflow YGNodeStyleGetOverflow(YGNodeRef node); +WIN_EXPORT YGOverflow YGNodeStyleGetOverflow(YGNodeConstRef node); WIN_EXPORT void YGNodeStyleSetDisplay(YGNodeRef node, YGDisplay display); -WIN_EXPORT YGDisplay YGNodeStyleGetDisplay(YGNodeRef node); +WIN_EXPORT YGDisplay YGNodeStyleGetDisplay(YGNodeConstRef node); WIN_EXPORT void YGNodeStyleSetFlex(YGNodeRef node, float flex); -WIN_EXPORT float YGNodeStyleGetFlex(YGNodeRef node); +WIN_EXPORT float YGNodeStyleGetFlex(YGNodeConstRef node); WIN_EXPORT void YGNodeStyleSetFlexGrow(YGNodeRef node, float flexGrow); -WIN_EXPORT float YGNodeStyleGetFlexGrow(YGNodeRef node); +WIN_EXPORT float YGNodeStyleGetFlexGrow(YGNodeConstRef node); WIN_EXPORT void YGNodeStyleSetFlexShrink(YGNodeRef node, float flexShrink); -WIN_EXPORT float YGNodeStyleGetFlexShrink(YGNodeRef node); +WIN_EXPORT float YGNodeStyleGetFlexShrink(YGNodeConstRef node); WIN_EXPORT void YGNodeStyleSetFlexBasis(YGNodeRef node, float flexBasis); WIN_EXPORT void YGNodeStyleSetFlexBasisPercent(YGNodeRef node, float flexBasis); WIN_EXPORT void YGNodeStyleSetFlexBasisAuto(YGNodeRef node); -WIN_EXPORT YGValue YGNodeStyleGetFlexBasis(YGNodeRef node); +WIN_EXPORT YGValue YGNodeStyleGetFlexBasis(YGNodeConstRef node); WIN_EXPORT void YGNodeStyleSetPosition( YGNodeRef node, @@ -203,7 +204,7 @@ WIN_EXPORT void YGNodeStyleSetPositionPercent( YGNodeRef node, YGEdge edge, float position); -WIN_EXPORT YGValue YGNodeStyleGetPosition(YGNodeRef node, YGEdge edge); +WIN_EXPORT YGValue YGNodeStyleGetPosition(YGNodeConstRef node, YGEdge edge); WIN_EXPORT void YGNodeStyleSetMargin(YGNodeRef node, YGEdge edge, float margin); WIN_EXPORT void YGNodeStyleSetMarginPercent( @@ -211,7 +212,7 @@ WIN_EXPORT void YGNodeStyleSetMarginPercent( YGEdge edge, float margin); WIN_EXPORT void YGNodeStyleSetMarginAuto(YGNodeRef node, YGEdge edge); -WIN_EXPORT YGValue YGNodeStyleGetMargin(YGNodeRef node, YGEdge edge); +WIN_EXPORT YGValue YGNodeStyleGetMargin(YGNodeConstRef node, YGEdge edge); WIN_EXPORT void YGNodeStyleSetPadding( YGNodeRef node, @@ -221,36 +222,36 @@ WIN_EXPORT void YGNodeStyleSetPaddingPercent( YGNodeRef node, YGEdge edge, float padding); -WIN_EXPORT YGValue YGNodeStyleGetPadding(YGNodeRef node, YGEdge edge); +WIN_EXPORT YGValue YGNodeStyleGetPadding(YGNodeConstRef node, YGEdge edge); WIN_EXPORT void YGNodeStyleSetBorder(YGNodeRef node, YGEdge edge, float border); -WIN_EXPORT float YGNodeStyleGetBorder(YGNodeRef node, YGEdge edge); +WIN_EXPORT float YGNodeStyleGetBorder(YGNodeConstRef node, YGEdge edge); WIN_EXPORT void YGNodeStyleSetWidth(YGNodeRef node, float width); WIN_EXPORT void YGNodeStyleSetWidthPercent(YGNodeRef node, float width); WIN_EXPORT void YGNodeStyleSetWidthAuto(YGNodeRef node); -WIN_EXPORT YGValue YGNodeStyleGetWidth(YGNodeRef node); +WIN_EXPORT YGValue YGNodeStyleGetWidth(YGNodeConstRef node); WIN_EXPORT void YGNodeStyleSetHeight(YGNodeRef node, float height); WIN_EXPORT void YGNodeStyleSetHeightPercent(YGNodeRef node, float height); WIN_EXPORT void YGNodeStyleSetHeightAuto(YGNodeRef node); -WIN_EXPORT YGValue YGNodeStyleGetHeight(YGNodeRef node); +WIN_EXPORT YGValue YGNodeStyleGetHeight(YGNodeConstRef node); WIN_EXPORT void YGNodeStyleSetMinWidth(YGNodeRef node, float minWidth); WIN_EXPORT void YGNodeStyleSetMinWidthPercent(YGNodeRef node, float minWidth); -WIN_EXPORT YGValue YGNodeStyleGetMinWidth(YGNodeRef node); +WIN_EXPORT YGValue YGNodeStyleGetMinWidth(YGNodeConstRef node); WIN_EXPORT void YGNodeStyleSetMinHeight(YGNodeRef node, float minHeight); WIN_EXPORT void YGNodeStyleSetMinHeightPercent(YGNodeRef node, float minHeight); -WIN_EXPORT YGValue YGNodeStyleGetMinHeight(YGNodeRef node); +WIN_EXPORT YGValue YGNodeStyleGetMinHeight(YGNodeConstRef node); WIN_EXPORT void YGNodeStyleSetMaxWidth(YGNodeRef node, float maxWidth); WIN_EXPORT void YGNodeStyleSetMaxWidthPercent(YGNodeRef node, float maxWidth); -WIN_EXPORT YGValue YGNodeStyleGetMaxWidth(YGNodeRef node); +WIN_EXPORT YGValue YGNodeStyleGetMaxWidth(YGNodeConstRef node); WIN_EXPORT void YGNodeStyleSetMaxHeight(YGNodeRef node, float maxHeight); WIN_EXPORT void YGNodeStyleSetMaxHeightPercent(YGNodeRef node, float maxHeight); -WIN_EXPORT YGValue YGNodeStyleGetMaxHeight(YGNodeRef node); +WIN_EXPORT YGValue YGNodeStyleGetMaxHeight(YGNodeConstRef node); // Yoga specific properties, not compatible with flexbox specification Aspect // ratio control the size of the undefined dimension of a node. Aspect ratio is @@ -268,7 +269,7 @@ WIN_EXPORT YGValue YGNodeStyleGetMaxHeight(YGNodeRef node); // in the cross axis if unset // - Aspect ratio takes min/max dimensions into account WIN_EXPORT void YGNodeStyleSetAspectRatio(YGNodeRef node, float aspectRatio); -WIN_EXPORT float YGNodeStyleGetAspectRatio(YGNodeRef node); +WIN_EXPORT float YGNodeStyleGetAspectRatio(YGNodeConstRef node); WIN_EXPORT float YGNodeLayoutGetLeft(YGNodeRef node); WIN_EXPORT float YGNodeLayoutGetTop(YGNodeRef node); From 2eed95f3e49f6ca89f99a47de0b9ae7f18b2397b Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Fri, 26 Apr 2019 02:10:01 -0700 Subject: [PATCH 044/347] `YGNodeToString`: take const ref to node style Summary: @public Takes a const reference to the style of the printed node once, instead of using repeated calls to `node->getStyle()`. Makes the code a bit shorter, and ensures that we are operating on `const YGStyle&`, which helps selecting the correct methods further up the stack. Reviewed By: SidharthGuglani Differential Revision: D14999094 fbshipit-source-id: 814f06b7e3179ac8cfb43d79fbec48ee4115d6e3 --- yoga/YGNodePrint.cpp | 90 ++++++++++++++++++-------------------------- 1 file changed, 36 insertions(+), 54 deletions(-) diff --git a/yoga/YGNodePrint.cpp b/yoga/YGNodePrint.cpp index ae730f68..301e72a2 100644 --- a/yoga/YGNodePrint.cpp +++ b/yoga/YGNodePrint.cpp @@ -132,92 +132,74 @@ void YGNodeToString( if (options & YGPrintOptionsStyle) { appendFormatedString(str, "style=\""); - if (node->getStyle().flexDirection() != - YGNode().getStyle().flexDirection()) { + const auto& style = node->getStyle(); + if (style.flexDirection() != YGNode().getStyle().flexDirection()) { appendFormatedString( str, "flex-direction: %s; ", - YGFlexDirectionToString(node->getStyle().flexDirection())); + YGFlexDirectionToString(style.flexDirection())); } - if (node->getStyle().justifyContent() != - YGNode().getStyle().justifyContent()) { + if (style.justifyContent() != YGNode().getStyle().justifyContent()) { appendFormatedString( str, "justify-content: %s; ", - YGJustifyToString(node->getStyle().justifyContent())); + YGJustifyToString(style.justifyContent())); } - if (node->getStyle().alignItems() != YGNode().getStyle().alignItems()) { + if (style.alignItems() != YGNode().getStyle().alignItems()) { appendFormatedString( - str, - "align-items: %s; ", - YGAlignToString(node->getStyle().alignItems())); + str, "align-items: %s; ", YGAlignToString(style.alignItems())); } - if (node->getStyle().alignContent() != YGNode().getStyle().alignContent()) { + if (style.alignContent() != YGNode().getStyle().alignContent()) { appendFormatedString( - str, - "align-content: %s; ", - YGAlignToString(node->getStyle().alignContent())); + str, "align-content: %s; ", YGAlignToString(style.alignContent())); } - if (node->getStyle().alignSelf() != YGNode().getStyle().alignSelf()) { + if (style.alignSelf() != YGNode().getStyle().alignSelf()) { appendFormatedString( - str, - "align-self: %s; ", - YGAlignToString(node->getStyle().alignSelf())); + str, "align-self: %s; ", YGAlignToString(style.alignSelf())); } - appendFloatOptionalIfDefined(str, "flex-grow", node->getStyle().flexGrow()); - appendFloatOptionalIfDefined( - str, "flex-shrink", node->getStyle().flexShrink()); - appendNumberIfNotAuto(str, "flex-basis", node->getStyle().flexBasis()); - appendFloatOptionalIfDefined(str, "flex", node->getStyle().flex()); + appendFloatOptionalIfDefined(str, "flex-grow", style.flexGrow()); + appendFloatOptionalIfDefined(str, "flex-shrink", style.flexShrink()); + appendNumberIfNotAuto(str, "flex-basis", style.flexBasis()); + appendFloatOptionalIfDefined(str, "flex", style.flex()); - if (node->getStyle().flexWrap() != YGNode().getStyle().flexWrap()) { + if (style.flexWrap() != YGNode().getStyle().flexWrap()) { appendFormatedString( - str, "flex-wrap: %s; ", YGWrapToString(node->getStyle().flexWrap())); + str, "flex-wrap: %s; ", YGWrapToString(style.flexWrap())); } - if (node->getStyle().overflow() != YGNode().getStyle().overflow()) { + if (style.overflow() != YGNode().getStyle().overflow()) { appendFormatedString( - str, - "overflow: %s; ", - YGOverflowToString(node->getStyle().overflow())); + str, "overflow: %s; ", YGOverflowToString(style.overflow())); } - if (node->getStyle().display() != YGNode().getStyle().display()) { + if (style.display() != YGNode().getStyle().display()) { appendFormatedString( - str, "display: %s; ", YGDisplayToString(node->getStyle().display())); + str, "display: %s; ", YGDisplayToString(style.display())); } - appendEdges(str, "margin", node->getStyle().margin()); - appendEdges(str, "padding", node->getStyle().padding()); - appendEdges(str, "border", node->getStyle().border()); + appendEdges(str, "margin", style.margin()); + appendEdges(str, "padding", style.padding()); + appendEdges(str, "border", style.border()); + appendNumberIfNotAuto(str, "width", style.dimensions()[YGDimensionWidth]); + appendNumberIfNotAuto(str, "height", style.dimensions()[YGDimensionHeight]); appendNumberIfNotAuto( - str, "width", node->getStyle().dimensions()[YGDimensionWidth]); + str, "max-width", style.maxDimensions()[YGDimensionWidth]); appendNumberIfNotAuto( - str, "height", node->getStyle().dimensions()[YGDimensionHeight]); + str, "max-height", style.maxDimensions()[YGDimensionHeight]); appendNumberIfNotAuto( - str, "max-width", node->getStyle().maxDimensions()[YGDimensionWidth]); + str, "min-width", style.minDimensions()[YGDimensionWidth]); appendNumberIfNotAuto( - str, "max-height", node->getStyle().maxDimensions()[YGDimensionHeight]); - appendNumberIfNotAuto( - str, "min-width", node->getStyle().minDimensions()[YGDimensionWidth]); - appendNumberIfNotAuto( - str, "min-height", node->getStyle().minDimensions()[YGDimensionHeight]); + str, "min-height", style.minDimensions()[YGDimensionHeight]); - if (node->getStyle().positionType() != YGNode().getStyle().positionType()) { + if (style.positionType() != YGNode().getStyle().positionType()) { appendFormatedString( - str, - "position: %s; ", - YGPositionTypeToString(node->getStyle().positionType())); + str, "position: %s; ", YGPositionTypeToString(style.positionType())); } - appendEdgeIfNotUndefined( - str, "left", node->getStyle().position(), YGEdgeLeft); - appendEdgeIfNotUndefined( - str, "right", node->getStyle().position(), YGEdgeRight); - appendEdgeIfNotUndefined( - str, "top", node->getStyle().position(), YGEdgeTop); - appendEdgeIfNotUndefined( - str, "bottom", node->getStyle().position(), YGEdgeBottom); + appendEdgeIfNotUndefined(str, "left", style.position(), YGEdgeLeft); + appendEdgeIfNotUndefined(str, "right", style.position(), YGEdgeRight); + appendEdgeIfNotUndefined(str, "top", style.position(), YGEdgeTop); + appendEdgeIfNotUndefined(str, "bottom", style.position(), YGEdgeBottom); appendFormatedString(str, "\" "); if (node->hasMeasureFunc()) { From 98fda9c587854be8cd8bf73e0b6a341e438a719a Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Mon, 29 Apr 2019 09:18:57 -0700 Subject: [PATCH 045/347] `YGFloatOptional`: Move binary operators to free functions Summary: @public Having binary operators as member functions has disadvantages: - the left hand side cannot be converted to `YGFloatOptional` implicitly (which we need for `YGStyle` refs) - Operators are not necessarily commutative. By moving these operators into free functions, and adding overloads for both variants if one operand is `float`, we get these properties. Reviewed By: SidharthGuglani Differential Revision: D15078962 fbshipit-source-id: 2e228a2ef90a8083c91788caa9eedfd4d140677f --- yoga/YGFloatOptional.h | 65 ++++++++++++++++++++++++++++-------------- 1 file changed, 44 insertions(+), 21 deletions(-) diff --git a/yoga/YGFloatOptional.h b/yoga/YGFloatOptional.h index 80a851a0..7ca1fc12 100644 --- a/yoga/YGFloatOptional.h +++ b/yoga/YGFloatOptional.h @@ -22,25 +22,48 @@ public: constexpr float unwrap() const { return value_; } bool isUndefined() const { return std::isnan(value_); } - - YGFloatOptional operator+(YGFloatOptional op) const { - return YGFloatOptional{value_ + op.value_}; - } - bool operator>(YGFloatOptional op) const { return value_ > op.value_; } - bool operator<(YGFloatOptional op) const { return value_ < op.value_; } - bool operator>=(YGFloatOptional op) const { - return *this > op || *this == op; - } - bool operator<=(YGFloatOptional op) const { - return *this < op || *this == op; - } - bool operator==(YGFloatOptional op) const { - return value_ == op.value_ || (isUndefined() && op.isUndefined()); - } - bool operator!=(YGFloatOptional op) const { return !(*this == op); } - - bool operator==(float val) const { - return value_ == val || (isUndefined() && yoga::isUndefined(val)); - } - bool operator!=(float val) const { return !(*this == val); } }; + +// operators take YGFloatOptional by value, as it is a 32bit value + +inline bool operator==(YGFloatOptional lhs, YGFloatOptional rhs) { + return lhs.unwrap() == rhs.unwrap() || + (lhs.isUndefined() && rhs.isUndefined()); +} +inline bool operator!=(YGFloatOptional lhs, YGFloatOptional rhs) { + return !(lhs == rhs); +} + +inline bool operator==(YGFloatOptional lhs, float rhs) { + return lhs == YGFloatOptional{rhs}; +} +inline bool operator!=(YGFloatOptional lhs, float rhs) { + return !(lhs == rhs); +} + +inline bool operator==(float lhs, YGFloatOptional rhs) { + return rhs == lhs; +} +inline bool operator!=(float lhs, YGFloatOptional rhs) { + return !(lhs == rhs); +} + +inline YGFloatOptional operator+(YGFloatOptional lhs, YGFloatOptional rhs) { + return YGFloatOptional{lhs.unwrap() + rhs.unwrap()}; +} + +inline bool operator>(YGFloatOptional lhs, YGFloatOptional rhs) { + return lhs.unwrap() > rhs.unwrap(); +} + +inline bool operator<(YGFloatOptional lhs, YGFloatOptional rhs) { + return lhs.unwrap() < rhs.unwrap(); +} + +inline bool operator>=(YGFloatOptional lhs, YGFloatOptional rhs) { + return lhs > rhs || lhs == rhs; +} + +inline bool operator<=(YGFloatOptional lhs, YGFloatOptional rhs) { + return lhs < rhs || lhs == rhs; +} From cc02a20c9e68780190ee4db0f02650234090cbdd Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Mon, 29 Apr 2019 09:18:57 -0700 Subject: [PATCH 046/347] More constness Summary: @public Some `YGNode*` passed as `const YGNode*`, some const refs to sub-objects introduced. This helps selecting the desired methods in more places, i.e. `const` overloads of accessors on `YGStyle`. Reviewed By: SidharthGuglani Differential Revision: D15078963 fbshipit-source-id: 5013721d6edcc68f42f4504f5c331da647a294bd --- yoga/Yoga.cpp | 44 ++++++++++++++++---------------------------- 1 file changed, 16 insertions(+), 28 deletions(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 8dd49c24..39d0a767 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -972,7 +972,7 @@ static const std::array dim = { {YGDimensionHeight, YGDimensionHeight, YGDimensionWidth, YGDimensionWidth}}; static inline float YGNodePaddingAndBorderForAxis( - const YGNodeRef node, + const YGNodeConstRef node, const YGFlexDirection axis, const float widthSize) { return (node->getLeadingPaddingAndBorder(axis, widthSize) + @@ -1089,7 +1089,7 @@ static inline bool YGNodeIsLayoutDimDefined( } static YGFloatOptional YGNodeBoundAxisWithinMinAndMax( - const YGNodeRef node, + const YGNodeConstRef node, const YGFlexDirection axis, const YGFloatOptional value, const float axisSize) { @@ -1146,7 +1146,7 @@ static void YGNodeSetChildTrailingPosition( } static void YGConstrainMaxSizeForMode( - const YGNodeRef node, + const YGNodeConstRef node, const enum YGFlexDirection axis, const float ownerAxisSize, const float ownerWidth, @@ -1758,7 +1758,7 @@ static void YGZeroOutLayoutRecursivly( } static float YGNodeCalculateAvailableInnerDim( - const YGNodeRef node, + const YGNodeConstRef node, YGFlexDirection axis, float availableDim, float ownerDim) { @@ -2747,25 +2747,19 @@ static void YGNodelayoutImpl( const float marginAxisColumn = node->getMarginForAxis(YGFlexDirectionColumn, ownerWidth).unwrap(); + const auto& minDimensions = node->getStyle().minDimensions(); + const auto& maxDimensions = node->getStyle().maxDimensions(); const float minInnerWidth = - YGResolveValue( - node->getStyle().minDimensions()[YGDimensionWidth], ownerWidth) - .unwrap() - + YGResolveValue(minDimensions[YGDimensionWidth], ownerWidth).unwrap() - paddingAndBorderAxisRow; const float maxInnerWidth = - YGResolveValue( - node->getStyle().maxDimensions()[YGDimensionWidth], ownerWidth) - .unwrap() - + YGResolveValue(maxDimensions[YGDimensionWidth], ownerWidth).unwrap() - paddingAndBorderAxisRow; const float minInnerHeight = - YGResolveValue( - node->getStyle().minDimensions()[YGDimensionHeight], ownerHeight) - .unwrap() - + YGResolveValue(minDimensions[YGDimensionHeight], ownerHeight).unwrap() - paddingAndBorderAxisColumn; const float maxInnerHeight = - YGResolveValue( - node->getStyle().maxDimensions()[YGDimensionHeight], ownerHeight) - .unwrap() - + YGResolveValue(maxDimensions[YGDimensionHeight], ownerHeight).unwrap() - paddingAndBorderAxisColumn; const float minInnerMainDim = isMainAxisRow ? minInnerWidth : minInnerHeight; @@ -4002,6 +3996,7 @@ void YGNodeCalculateLayoutWithContext( node->resolveDimension(); float width = YGUndefined; YGMeasureMode widthMeasureMode = YGMeasureModeUndefined; + const auto& maxDimensions = node->getStyle().maxDimensions(); if (YGNodeIsStyleDimDefined(node, YGFlexDirectionRow, ownerWidth)) { width = (YGResolveValue( @@ -4009,13 +4004,10 @@ void YGNodeCalculateLayoutWithContext( node->getMarginForAxis(YGFlexDirectionRow, ownerWidth)) .unwrap(); widthMeasureMode = YGMeasureModeExactly; - } else if (!YGResolveValue( - node->getStyle().maxDimensions()[YGDimensionWidth], - ownerWidth) + } else if (!YGResolveValue(maxDimensions[YGDimensionWidth], ownerWidth) .isUndefined()) { - width = YGResolveValue( - node->getStyle().maxDimensions()[YGDimensionWidth], ownerWidth) - .unwrap(); + width = + YGResolveValue(maxDimensions[YGDimensionWidth], ownerWidth).unwrap(); widthMeasureMode = YGMeasureModeAtMost; } else { width = ownerWidth; @@ -4032,14 +4024,10 @@ void YGNodeCalculateLayoutWithContext( node->getMarginForAxis(YGFlexDirectionColumn, ownerWidth)) .unwrap(); heightMeasureMode = YGMeasureModeExactly; - } else if (!YGResolveValue( - node->getStyle().maxDimensions()[YGDimensionHeight], - ownerHeight) + } else if (!YGResolveValue(maxDimensions[YGDimensionHeight], ownerHeight) .isUndefined()) { height = - YGResolveValue( - node->getStyle().maxDimensions()[YGDimensionHeight], ownerHeight) - .unwrap(); + YGResolveValue(maxDimensions[YGDimensionHeight], ownerHeight).unwrap(); heightMeasureMode = YGMeasureModeAtMost; } else { height = ownerHeight; From cea862a6bf9665db1ce53f154a5a80bd5f939cf5 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Mon, 29 Apr 2019 09:18:57 -0700 Subject: [PATCH 047/347] Expose the value type used by `YGStyle` as `ValueRepr` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Summary: @public Adds `YGStyle::ValueRepr` to make code depending on the actual type easier to write. So far, we have treated `yoga::detail::CompactValue` as an implementation detail, and that’s what it’s supposed to stay. React Native Fabric has one value conversion overload that depends on that type, though, and used `decltype(YGStyle{}.margin()[0])` until now. That’s problematic for two reasons: - we want to constrain the parameter of `operator[](...)` to enum types, making the `0` unsuitable - we want to return the non-const overload of the operator to return a custom `Ref` type, which is not the type needed by Fabric. Making the storage type explicit allows to write more forward-compatible code. Reviewed By: SidharthGuglani Differential Revision: D15078960 fbshipit-source-id: 932c27ef2f2cdc6ce965b79894268170f0ccdce5 --- yoga/YGStyle.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/yoga/YGStyle.h b/yoga/YGStyle.h index dd946832..953c6ae8 100644 --- a/yoga/YGStyle.h +++ b/yoga/YGStyle.h @@ -7,7 +7,7 @@ #pragma once #include #include -#include +#include #include "CompactValue.h" #include "YGEnums.h" #include "YGFloatOptional.h" @@ -171,6 +171,10 @@ private: BITFIELD_ACCESSORS(flexWrap); BITFIELD_ACCESSORS(overflow); BITFIELD_ACCESSORS(display); + +public: + // for library users needing a type + using ValueRepr = std::remove_reference::type; }; bool operator==(const YGStyle& lhs, const YGStyle& rhs); From 0a4f7bd55825eb9beb4e2c75fe4c5ef6ec801bed Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Wed, 1 May 2019 06:47:30 -0700 Subject: [PATCH 048/347] `YGStyle`: mutable accessors return `Ref` instances Summary: @public Change style property accessors to return `Ref` instances instead of references to `CompactValue`. This will allow to track assignments to properties later on, e.g. for instrumentation or dynamic property storage. Reviewed By: SidharthGuglani Differential Revision: D15078961 fbshipit-source-id: 259f05f7d30f093c04bf333c5bd4fb3601b8e933 --- tests/YGStyleAccessorsTest.cpp | 13 +++- yoga/YGStyle.h | 130 ++++++++++++++++++++----------- yoga/Yoga.cpp | 136 +++++++++++++++++++-------------- 3 files changed, 174 insertions(+), 105 deletions(-) diff --git a/tests/YGStyleAccessorsTest.cpp b/tests/YGStyleAccessorsTest.cpp index 9e65ad55..1123ea6e 100644 --- a/tests/YGStyleAccessorsTest.cpp +++ b/tests/YGStyleAccessorsTest.cpp @@ -8,7 +8,7 @@ #include #include -#include +#include #define ACCESSOR_TESTS_1(NAME, X) \ style.NAME() = X; \ @@ -29,9 +29,14 @@ #define ACCESSOR_TESTS_N(a, b, c, d, e, COUNT, ...) ACCESSOR_TESTS_##COUNT #define ACCESSOR_TESTS(...) ACCESSOR_TESTS_N(__VA_ARGS__, 5, 4, 3, 2, 1) -#define INDEX_ACCESSOR_TESTS_1(NAME, IDX, X) \ - style.NAME()[IDX] = X; \ - ASSERT_EQ(style.NAME()[IDX], X); +#define INDEX_ACCESSOR_TESTS_1(NAME, IDX, X) \ + { \ + style.NAME()[IDX] = X; \ + ASSERT_EQ(style.NAME()[IDX], X); \ + auto asArray = decltype(std::declval().NAME()){X}; \ + style.NAME() = asArray; \ + ASSERT_EQ(static_cast(style.NAME()), asArray); \ + } #define INDEX_ACCESSOR_TESTS_2(NAME, IDX, X, Y) \ INDEX_ACCESSOR_TESTS_1(NAME, IDX, X) \ diff --git a/yoga/YGStyle.h b/yoga/YGStyle.h index 953c6ae8..849fa0e7 100644 --- a/yoga/YGStyle.h +++ b/yoga/YGStyle.h @@ -28,12 +28,47 @@ { *this, &YGStyle::get_##FIELD, &YGStyle::set_##FIELD } class YGStyle { + template + using Values = + facebook::yoga::detail::Values()>; using CompactValue = facebook::yoga::detail::CompactValue; public: - using Dimensions = facebook::yoga::detail::Values<2>; - using Edges = - facebook::yoga::detail::Values()>; + using Dimensions = Values; + using Edges = Values; + + template + struct Ref { + YGStyle& style; + operator T() const { return style.*Prop; } + Ref& operator=(T value) { + style.*Prop = value; + return *this; + } + }; + + template YGStyle::*Prop> + struct IdxRef { + struct Ref { + YGStyle& style; + Idx idx; + operator CompactValue() const { return (style.*Prop)[idx]; } + operator YGValue() const { return (style.*Prop)[idx]; } + Ref& operator=(CompactValue value) { + (style.*Prop)[idx] = value; + return *this; + } + }; + + YGStyle& style; + IdxRef& operator=(const Values& values) { + style.*Prop = values; + return *this; + } + operator const Values&() const { return style.*Prop; } + Ref operator[](Idx idx) { return {style, idx}; } + CompactValue operator[](Idx idx) const { return (style.*Prop)[idx]; } + }; template struct BitfieldRef { @@ -61,6 +96,37 @@ public: display_(YGDisplayFlex) {} ~YGStyle() = default; +private: + /* Some platforms don't support enum bitfields, + so please use BITFIELD_ENUM_SIZED(BITS_COUNT) */ + YGDirection direction_ BITFIELD_ENUM_SIZED(2); + YGFlexDirection flexDirection_ BITFIELD_ENUM_SIZED(2); + YGJustify justifyContent_ BITFIELD_ENUM_SIZED(3); + YGAlign alignContent_ BITFIELD_ENUM_SIZED(3); + YGAlign alignItems_ BITFIELD_ENUM_SIZED(3); + YGAlign alignSelf_ BITFIELD_ENUM_SIZED(3); + YGPositionType positionType_ BITFIELD_ENUM_SIZED(1); + YGWrap flexWrap_ BITFIELD_ENUM_SIZED(2); + YGOverflow overflow_ BITFIELD_ENUM_SIZED(2); + YGDisplay display_ BITFIELD_ENUM_SIZED(1); + YGFloatOptional flex_ = {}; + YGFloatOptional flexGrow_ = {}; + YGFloatOptional flexShrink_ = {}; + CompactValue flexBasis_ = CompactValue::ofAuto(); + Edges margin_ = {}; + Edges position_ = {}; + Edges padding_ = {}; + Edges border_ = {}; + Dimensions dimensions_{CompactValue::ofAuto()}; + Dimensions minDimensions_ = {}; + Dimensions maxDimensions_ = {}; + // Yoga specific properties, not compatible with flexbox specification + YGFloatOptional aspectRatio_ = {}; + +public: + // for library users needing a type + using ValueRepr = std::remove_reference::type; + YGDirection direction() const { return direction_; } BitfieldRef direction() { return BITFIELD_REF(direction); } @@ -98,69 +164,47 @@ public: BitfieldRef display() { return BITFIELD_REF(display); } YGFloatOptional flex() const { return flex_; } - YGFloatOptional& flex() { return flex_; } + Ref flex() { return {*this}; } YGFloatOptional flexGrow() const { return flexGrow_; } - YGFloatOptional& flexGrow() { return flexGrow_; } + Ref flexGrow() { return {*this}; } YGFloatOptional flexShrink() const { return flexShrink_; } - YGFloatOptional& flexShrink() { return flexShrink_; } + Ref flexShrink() { return {*this}; } CompactValue flexBasis() const { return flexBasis_; } - CompactValue& flexBasis() { return flexBasis_; } + Ref flexBasis() { return {*this}; } const Edges& margin() const { return margin_; } - Edges& margin() { return margin_; } + IdxRef margin() { return {*this}; } const Edges& position() const { return position_; } - Edges& position() { return position_; } + IdxRef position() { return {*this}; } const Edges& padding() const { return padding_; } - Edges& padding() { return padding_; } + IdxRef padding() { return {*this}; } const Edges& border() const { return border_; } - Edges& border() { return border_; } + IdxRef border() { return {*this}; } const Dimensions& dimensions() const { return dimensions_; } - Dimensions& dimensions() { return dimensions_; } + IdxRef dimensions() { return {*this}; } const Dimensions& minDimensions() const { return minDimensions_; } - Dimensions& minDimensions() { return minDimensions_; } + IdxRef minDimensions() { + return {*this}; + } const Dimensions& maxDimensions() const { return maxDimensions_; } - Dimensions& maxDimensions() { return maxDimensions_; } + IdxRef maxDimensions() { + return {*this}; + } // Yoga specific properties, not compatible with flexbox specification YGFloatOptional aspectRatio() const { return aspectRatio_; } - YGFloatOptional& aspectRatio() { return aspectRatio_; } + Ref aspectRatio() { return {*this}; } private: - /* Some platforms don't support enum bitfields, - so please use BITFIELD_ENUM_SIZED(BITS_COUNT) */ - YGDirection direction_ BITFIELD_ENUM_SIZED(2); - YGFlexDirection flexDirection_ BITFIELD_ENUM_SIZED(2); - YGJustify justifyContent_ BITFIELD_ENUM_SIZED(3); - YGAlign alignContent_ BITFIELD_ENUM_SIZED(3); - YGAlign alignItems_ BITFIELD_ENUM_SIZED(3); - YGAlign alignSelf_ BITFIELD_ENUM_SIZED(3); - YGPositionType positionType_ BITFIELD_ENUM_SIZED(1); - YGWrap flexWrap_ BITFIELD_ENUM_SIZED(2); - YGOverflow overflow_ BITFIELD_ENUM_SIZED(2); - YGDisplay display_ BITFIELD_ENUM_SIZED(1); - YGFloatOptional flex_ = {}; - YGFloatOptional flexGrow_ = {}; - YGFloatOptional flexShrink_ = {}; - CompactValue flexBasis_ = CompactValue::ofAuto(); - Edges margin_ = {}; - Edges position_ = {}; - Edges padding_ = {}; - Edges border_ = {}; - Dimensions dimensions_{CompactValue::ofAuto()}; - Dimensions minDimensions_ = {}; - Dimensions maxDimensions_ = {}; - // Yoga specific properties, not compatible with flexbox specification - YGFloatOptional aspectRatio_ = {}; - BITFIELD_ACCESSORS(direction) BITFIELD_ACCESSORS(flexDirection) BITFIELD_ACCESSORS(justifyContent) @@ -171,10 +215,6 @@ private: BITFIELD_ACCESSORS(flexWrap); BITFIELD_ACCESSORS(overflow); BITFIELD_ACCESSORS(display); - -public: - // for library users needing a type - using ValueRepr = std::remove_reference::type; }; bool operator==(const YGStyle& lhs, const YGStyle& rhs); diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 39d0a767..745188a4 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -558,36 +558,27 @@ void updateStyle(YGNode* node, T value) { [](YGStyle& s, T x) { (s.*Prop)() = x; }); } -template -void updateStyle(YGNode* node, T value) { +template +void updateStyle(YGNode* node, Ref (YGStyle::*prop)(), T value) { updateStyle( node, value, - [](YGStyle& s, T x) { return (s.*Prop)() != x; }, - [](YGStyle& s, T x) { (s.*Prop)() = x; }); + [prop](YGStyle& s, T x) { return (s.*prop)() != x; }, + [prop](YGStyle& s, T x) { (s.*prop)() = x; }); } -template ()>& (YGStyle::*Prop)()> -void updateIndexedStyleProp(YGNode* node, Idx idx, detail::CompactValue value) { +template +void updateIndexedStyleProp( + YGNode* node, + Ref (YGStyle::*prop)(), + Idx idx, + detail::CompactValue value) { using detail::CompactValue; updateStyle( node, value, - [idx](YGStyle& s, CompactValue x) { return (s.*Prop)()[idx] != x; }, - [idx](YGStyle& s, CompactValue x) { (s.*Prop)()[idx] = x; }); -} - -template -void updateEdgeProp(YGNode* node, YGEdge edge, detail::CompactValue value) { - updateIndexedStyleProp(node, edge, value); -} - -template -void updateDimensionProp( - YGNode* node, - YGDimension dimension, - detail::CompactValue value) { - updateIndexedStyleProp(node, dimension, value); + [idx, prop](YGStyle& s, CompactValue x) { return (s.*prop)()[idx] != x; }, + [idx, prop](YGStyle& s, CompactValue x) { (s.*prop)()[idx] = x; }); } } // namespace @@ -670,9 +661,16 @@ YGDisplay YGNodeStyleGetDisplay(const YGNodeConstRef node) { return node->getStyle().display(); } +// MSVC has trouble inferring the return type of pointer to member functions +// with const and non-const overloads, instead of preferring the non-const +// overload like clang and GCC. For the purposes of updateStyle(), we can help +// MSVC by specifying that return type explicitely. In combination with +// decltype, MSVC will prefer the non-const version. +#define MSVC_HINT(PROP) decltype(YGStyle{}.PROP()) + // TODO(T26792433): Change the API to accept YGFloatOptional. void YGNodeStyleSetFlex(const YGNodeRef node, const float flex) { - updateStyle(node, YGFloatOptional{flex}); + updateStyle(node, &YGStyle::flex, YGFloatOptional{flex}); } // TODO(T26792433): Change the API to accept YGFloatOptional. @@ -684,14 +682,14 @@ float YGNodeStyleGetFlex(const YGNodeConstRef node) { // TODO(T26792433): Change the API to accept YGFloatOptional. void YGNodeStyleSetFlexGrow(const YGNodeRef node, const float flexGrow) { - updateStyle( - node, YGFloatOptional{flexGrow}); + updateStyle( + node, &YGStyle::flexGrow, YGFloatOptional{flexGrow}); } // TODO(T26792433): Change the API to accept YGFloatOptional. void YGNodeStyleSetFlexShrink(const YGNodeRef node, const float flexShrink) { - updateStyle( - node, YGFloatOptional{flexShrink}); + updateStyle( + node, &YGStyle::flexShrink, YGFloatOptional{flexShrink}); } YGValue YGNodeStyleGetFlexBasis(const YGNodeConstRef node) { @@ -705,28 +703,30 @@ YGValue YGNodeStyleGetFlexBasis(const YGNodeConstRef node) { void YGNodeStyleSetFlexBasis(const YGNodeRef node, const float flexBasis) { auto value = detail::CompactValue::ofMaybe(flexBasis); - updateStyle(node, value); + updateStyle(node, &YGStyle::flexBasis, value); } void YGNodeStyleSetFlexBasisPercent( const YGNodeRef node, const float flexBasisPercent) { auto value = detail::CompactValue::ofMaybe(flexBasisPercent); - updateStyle(node, value); + updateStyle(node, &YGStyle::flexBasis, value); } void YGNodeStyleSetFlexBasisAuto(const YGNodeRef node) { - updateStyle( - node, detail::CompactValue::ofAuto()); + updateStyle( + node, &YGStyle::flexBasis, detail::CompactValue::ofAuto()); } void YGNodeStyleSetPosition(YGNodeRef node, YGEdge edge, float points) { auto value = detail::CompactValue::ofMaybe(points); - updateEdgeProp<&YGStyle::position>(node, edge, value); + updateIndexedStyleProp( + node, &YGStyle::position, edge, value); } void YGNodeStyleSetPositionPercent(YGNodeRef node, YGEdge edge, float percent) { auto value = detail::CompactValue::ofMaybe(percent); - updateEdgeProp<&YGStyle::position>(node, edge, value); + updateIndexedStyleProp( + node, &YGStyle::position, edge, value); } YGValue YGNodeStyleGetPosition(YGNodeConstRef node, YGEdge edge) { return node->getStyle().position()[edge]; @@ -734,14 +734,17 @@ YGValue YGNodeStyleGetPosition(YGNodeConstRef node, YGEdge edge) { void YGNodeStyleSetMargin(YGNodeRef node, YGEdge edge, float points) { auto value = detail::CompactValue::ofMaybe(points); - updateEdgeProp<&YGStyle::margin>(node, edge, value); + updateIndexedStyleProp( + node, &YGStyle::margin, edge, value); } void YGNodeStyleSetMarginPercent(YGNodeRef node, YGEdge edge, float percent) { auto value = detail::CompactValue::ofMaybe(percent); - updateEdgeProp<&YGStyle::margin>(node, edge, value); + updateIndexedStyleProp( + node, &YGStyle::margin, edge, value); } void YGNodeStyleSetMarginAuto(YGNodeRef node, YGEdge edge) { - updateEdgeProp<&YGStyle::margin>(node, edge, detail::CompactValue::ofAuto()); + updateIndexedStyleProp( + node, &YGStyle::margin, edge, detail::CompactValue::ofAuto()); } YGValue YGNodeStyleGetMargin(YGNodeConstRef node, YGEdge edge) { return node->getStyle().margin()[edge]; @@ -749,11 +752,13 @@ YGValue YGNodeStyleGetMargin(YGNodeConstRef node, YGEdge edge) { void YGNodeStyleSetPadding(YGNodeRef node, YGEdge edge, float points) { auto value = detail::CompactValue::ofMaybe(points); - updateEdgeProp<&YGStyle::padding>(node, edge, value); + updateIndexedStyleProp( + node, &YGStyle::padding, edge, value); } void YGNodeStyleSetPaddingPercent(YGNodeRef node, YGEdge edge, float percent) { auto value = detail::CompactValue::ofMaybe(percent); - updateEdgeProp<&YGStyle::padding>(node, edge, value); + updateIndexedStyleProp( + node, &YGStyle::padding, edge, value); } YGValue YGNodeStyleGetPadding(YGNodeConstRef node, YGEdge edge) { return node->getStyle().padding()[edge]; @@ -765,7 +770,8 @@ void YGNodeStyleSetBorder( const YGEdge edge, const float border) { auto value = detail::CompactValue::ofMaybe(border); - updateEdgeProp<&YGStyle::border>(node, edge, value); + updateIndexedStyleProp( + node, &YGStyle::border, edge, value); } float YGNodeStyleGetBorder(const YGNodeConstRef node, const YGEdge edge) { @@ -789,21 +795,26 @@ float YGNodeStyleGetAspectRatio(const YGNodeConstRef node) { // TODO(T26792433): Change the API to accept YGFloatOptional. void YGNodeStyleSetAspectRatio(const YGNodeRef node, const float aspectRatio) { - updateStyle( - node, YGFloatOptional{aspectRatio}); + updateStyle( + node, &YGStyle::aspectRatio, YGFloatOptional{aspectRatio}); } void YGNodeStyleSetWidth(YGNodeRef node, float points) { auto value = detail::CompactValue::ofMaybe(points); - updateDimensionProp<&YGStyle::dimensions>(node, YGDimensionWidth, value); + updateIndexedStyleProp( + node, &YGStyle::dimensions, YGDimensionWidth, value); } void YGNodeStyleSetWidthPercent(YGNodeRef node, float percent) { auto value = detail::CompactValue::ofMaybe(percent); - updateDimensionProp<&YGStyle::dimensions>(node, YGDimensionWidth, value); + updateIndexedStyleProp( + node, &YGStyle::dimensions, YGDimensionWidth, value); } void YGNodeStyleSetWidthAuto(YGNodeRef node) { - updateDimensionProp<&YGStyle::dimensions>( - node, YGDimensionWidth, detail::CompactValue::ofAuto()); + updateIndexedStyleProp( + node, + &YGStyle::dimensions, + YGDimensionWidth, + detail::CompactValue::ofAuto()); } YGValue YGNodeStyleGetWidth(YGNodeConstRef node) { return node->getStyle().dimensions()[YGDimensionWidth]; @@ -811,15 +822,20 @@ YGValue YGNodeStyleGetWidth(YGNodeConstRef node) { void YGNodeStyleSetHeight(YGNodeRef node, float points) { auto value = detail::CompactValue::ofMaybe(points); - updateDimensionProp<&YGStyle::dimensions>(node, YGDimensionHeight, value); + updateIndexedStyleProp( + node, &YGStyle::dimensions, YGDimensionHeight, value); } void YGNodeStyleSetHeightPercent(YGNodeRef node, float percent) { auto value = detail::CompactValue::ofMaybe(percent); - updateDimensionProp<&YGStyle::dimensions>(node, YGDimensionHeight, value); + updateIndexedStyleProp( + node, &YGStyle::dimensions, YGDimensionHeight, value); } void YGNodeStyleSetHeightAuto(YGNodeRef node) { - updateDimensionProp<&YGStyle::dimensions>( - node, YGDimensionHeight, detail::CompactValue::ofAuto()); + updateIndexedStyleProp( + node, + &YGStyle::dimensions, + YGDimensionHeight, + detail::CompactValue::ofAuto()); } YGValue YGNodeStyleGetHeight(YGNodeConstRef node) { return node->getStyle().dimensions()[YGDimensionHeight]; @@ -827,11 +843,13 @@ YGValue YGNodeStyleGetHeight(YGNodeConstRef node) { void YGNodeStyleSetMinWidth(const YGNodeRef node, const float minWidth) { auto value = detail::CompactValue::ofMaybe(minWidth); - updateDimensionProp<&YGStyle::minDimensions>(node, YGDimensionWidth, value); + updateIndexedStyleProp( + node, &YGStyle::minDimensions, YGDimensionWidth, value); } void YGNodeStyleSetMinWidthPercent(const YGNodeRef node, const float minWidth) { auto value = detail::CompactValue::ofMaybe(minWidth); - updateDimensionProp<&YGStyle::minDimensions>(node, YGDimensionWidth, value); + updateIndexedStyleProp( + node, &YGStyle::minDimensions, YGDimensionWidth, value); } YGValue YGNodeStyleGetMinWidth(const YGNodeConstRef node) { return node->getStyle().minDimensions()[YGDimensionWidth]; @@ -839,13 +857,15 @@ YGValue YGNodeStyleGetMinWidth(const YGNodeConstRef node) { void YGNodeStyleSetMinHeight(const YGNodeRef node, const float minHeight) { auto value = detail::CompactValue::ofMaybe(minHeight); - updateDimensionProp<&YGStyle::minDimensions>(node, YGDimensionHeight, value); + updateIndexedStyleProp( + node, &YGStyle::minDimensions, YGDimensionHeight, value); } void YGNodeStyleSetMinHeightPercent( const YGNodeRef node, const float minHeight) { auto value = detail::CompactValue::ofMaybe(minHeight); - updateDimensionProp<&YGStyle::minDimensions>(node, YGDimensionHeight, value); + updateIndexedStyleProp( + node, &YGStyle::minDimensions, YGDimensionHeight, value); } YGValue YGNodeStyleGetMinHeight(const YGNodeConstRef node) { return node->getStyle().minDimensions()[YGDimensionHeight]; @@ -853,11 +873,13 @@ YGValue YGNodeStyleGetMinHeight(const YGNodeConstRef node) { void YGNodeStyleSetMaxWidth(const YGNodeRef node, const float maxWidth) { auto value = detail::CompactValue::ofMaybe(maxWidth); - updateDimensionProp<&YGStyle::maxDimensions>(node, YGDimensionWidth, value); + updateIndexedStyleProp( + node, &YGStyle::maxDimensions, YGDimensionWidth, value); } void YGNodeStyleSetMaxWidthPercent(const YGNodeRef node, const float maxWidth) { auto value = detail::CompactValue::ofMaybe(maxWidth); - updateDimensionProp<&YGStyle::maxDimensions>(node, YGDimensionWidth, value); + updateIndexedStyleProp( + node, &YGStyle::maxDimensions, YGDimensionWidth, value); } YGValue YGNodeStyleGetMaxWidth(const YGNodeConstRef node) { return node->getStyle().maxDimensions()[YGDimensionWidth]; @@ -865,13 +887,15 @@ YGValue YGNodeStyleGetMaxWidth(const YGNodeConstRef node) { void YGNodeStyleSetMaxHeight(const YGNodeRef node, const float maxHeight) { auto value = detail::CompactValue::ofMaybe(maxHeight); - updateDimensionProp<&YGStyle::maxDimensions>(node, YGDimensionHeight, value); + updateIndexedStyleProp( + node, &YGStyle::maxDimensions, YGDimensionHeight, value); } void YGNodeStyleSetMaxHeightPercent( const YGNodeRef node, const float maxHeight) { auto value = detail::CompactValue::ofMaybe(maxHeight); - updateDimensionProp<&YGStyle::maxDimensions>(node, YGDimensionHeight, value); + updateIndexedStyleProp( + node, &YGStyle::maxDimensions, YGDimensionHeight, value); } YGValue YGNodeStyleGetMaxHeight(const YGNodeConstRef node) { return node->getStyle().maxDimensions()[YGDimensionHeight]; From 05d205cf89285a534e326830ad44de768e4e62b0 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Wed, 1 May 2019 06:47:31 -0700 Subject: [PATCH 049/347] Deduplicate `updateStyle` overloads Summary: @public The extra overload of `updateStyle` introduced in D15078961 can also handle `BitfieldRef`. That means that we can remove the more specific implementation previously introduced for `BitfieldRef` Reviewed By: SidharthGuglani Differential Revision: D15081069 fbshipit-source-id: 98f1f3478627974c5273c85d268ca07350f303d7 --- yoga/Yoga.cpp | 47 +++++++++++++++++++++-------------------------- 1 file changed, 21 insertions(+), 26 deletions(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 745188a4..6a394971 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -549,15 +549,6 @@ void updateStyle( } } -template (YGStyle::*Prop)()> -void updateStyle(YGNode* node, T value) { - updateStyle( - node, - value, - [](YGStyle& s, T x) { return (s.*Prop)() != x; }, - [](YGStyle& s, T x) { (s.*Prop)() = x; }); -} - template void updateStyle(YGNode* node, Ref (YGStyle::*prop)(), T value) { updateStyle( @@ -583,8 +574,15 @@ void updateIndexedStyleProp( } // namespace +// MSVC has trouble inferring the return type of pointer to member functions +// with const and non-const overloads, instead of preferring the non-const +// overload like clang and GCC. For the purposes of updateStyle(), we can help +// MSVC by specifying that return type explicitely. In combination with +// decltype, MSVC will prefer the non-const version. +#define MSVC_HINT(PROP) decltype(YGStyle{}.PROP()) + void YGNodeStyleSetDirection(const YGNodeRef node, const YGDirection value) { - updateStyle(node, value); + updateStyle(node, &YGStyle::direction, value); } YGDirection YGNodeStyleGetDirection(const YGNodeConstRef node) { return node->getStyle().direction(); @@ -593,7 +591,8 @@ YGDirection YGNodeStyleGetDirection(const YGNodeConstRef node) { void YGNodeStyleSetFlexDirection( const YGNodeRef node, const YGFlexDirection flexDirection) { - updateStyle(node, flexDirection); + updateStyle( + node, &YGStyle::flexDirection, flexDirection); } YGFlexDirection YGNodeStyleGetFlexDirection(const YGNodeConstRef node) { return node->getStyle().flexDirection(); @@ -602,7 +601,8 @@ YGFlexDirection YGNodeStyleGetFlexDirection(const YGNodeConstRef node) { void YGNodeStyleSetJustifyContent( const YGNodeRef node, const YGJustify justifyContent) { - updateStyle(node, justifyContent); + updateStyle( + node, &YGStyle::justifyContent, justifyContent); } YGJustify YGNodeStyleGetJustifyContent(const YGNodeConstRef node) { return node->getStyle().justifyContent(); @@ -611,21 +611,22 @@ YGJustify YGNodeStyleGetJustifyContent(const YGNodeConstRef node) { void YGNodeStyleSetAlignContent( const YGNodeRef node, const YGAlign alignContent) { - updateStyle(node, alignContent); + updateStyle( + node, &YGStyle::alignContent, alignContent); } YGAlign YGNodeStyleGetAlignContent(const YGNodeConstRef node) { return node->getStyle().alignContent(); } void YGNodeStyleSetAlignItems(const YGNodeRef node, const YGAlign alignItems) { - updateStyle(node, alignItems); + updateStyle(node, &YGStyle::alignItems, alignItems); } YGAlign YGNodeStyleGetAlignItems(const YGNodeConstRef node) { return node->getStyle().alignItems(); } void YGNodeStyleSetAlignSelf(const YGNodeRef node, const YGAlign alignSelf) { - updateStyle(node, alignSelf); + updateStyle(node, &YGStyle::alignSelf, alignSelf); } YGAlign YGNodeStyleGetAlignSelf(const YGNodeConstRef node) { return node->getStyle().alignSelf(); @@ -634,40 +635,34 @@ YGAlign YGNodeStyleGetAlignSelf(const YGNodeConstRef node) { void YGNodeStyleSetPositionType( const YGNodeRef node, const YGPositionType positionType) { - updateStyle(node, positionType); + updateStyle( + node, &YGStyle::positionType, positionType); } YGPositionType YGNodeStyleGetPositionType(const YGNodeConstRef node) { return node->getStyle().positionType(); } void YGNodeStyleSetFlexWrap(const YGNodeRef node, const YGWrap flexWrap) { - updateStyle(node, flexWrap); + updateStyle(node, &YGStyle::flexWrap, flexWrap); } YGWrap YGNodeStyleGetFlexWrap(const YGNodeConstRef node) { return node->getStyle().flexWrap(); } void YGNodeStyleSetOverflow(const YGNodeRef node, const YGOverflow overflow) { - updateStyle(node, overflow); + updateStyle(node, &YGStyle::overflow, overflow); } YGOverflow YGNodeStyleGetOverflow(const YGNodeConstRef node) { return node->getStyle().overflow(); } void YGNodeStyleSetDisplay(const YGNodeRef node, const YGDisplay display) { - updateStyle(node, display); + updateStyle(node, &YGStyle::display, display); } YGDisplay YGNodeStyleGetDisplay(const YGNodeConstRef node) { return node->getStyle().display(); } -// MSVC has trouble inferring the return type of pointer to member functions -// with const and non-const overloads, instead of preferring the non-const -// overload like clang and GCC. For the purposes of updateStyle(), we can help -// MSVC by specifying that return type explicitely. In combination with -// decltype, MSVC will prefer the non-const version. -#define MSVC_HINT(PROP) decltype(YGStyle{}.PROP()) - // TODO(T26792433): Change the API to accept YGFloatOptional. void YGNodeStyleSetFlex(const YGNodeRef node, const float flex) { updateStyle(node, &YGStyle::flex, YGFloatOptional{flex}); From 011c1964a08f4cfe179127b1405262aa0383d415 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Wed, 1 May 2019 06:47:31 -0700 Subject: [PATCH 050/347] Track which style properties have been set on `YGStyle` Summary: @public In order to optimise property storage, we have to know how style properties are used in our apps. Here, we add a bitmask that allows us to track which properties are set explicitely, and use that for our analysis. Reviewed By: SidharthGuglani Differential Revision: D14933022 fbshipit-source-id: 1ab8af562b14baba1d02057e527aa36d5c9a7823 --- tests/YGStyleAccessorsTest.cpp | 53 +++++++++++++- yoga/YGStyle.h | 129 ++++++++++++++++++++++++++------- 2 files changed, 151 insertions(+), 31 deletions(-) diff --git a/tests/YGStyleAccessorsTest.cpp b/tests/YGStyleAccessorsTest.cpp index 1123ea6e..5d6e7c7c 100644 --- a/tests/YGStyleAccessorsTest.cpp +++ b/tests/YGStyleAccessorsTest.cpp @@ -4,15 +4,29 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ +#include +#include #include +#include #include #include #include +using AssignedProps = + std::remove_reference::type; + +namespace { +constexpr AssignedProps setBits(int from, int n) { + return n > 0 ? (setBits(from, n - 1) | AssignedProps{1ull << (from + n - 1)}) + : 0; +} +} // namespace + #define ACCESSOR_TESTS_1(NAME, X) \ style.NAME() = X; \ - ASSERT_EQ(style.NAME(), X); + ASSERT_EQ(style.NAME(), X); \ + ASSERT_EQ(style.assignedProps(), AssignedProps{1ull << YGStyle::NAME##Bit}); #define ACCESSOR_TESTS_2(NAME, X, ...) \ ACCESSOR_TESTS_1(NAME, X); \ ACCESSOR_TESTS_1(NAME, __VA_ARGS__); @@ -31,11 +45,20 @@ #define INDEX_ACCESSOR_TESTS_1(NAME, IDX, X) \ { \ + auto style = YGStyle{}; \ style.NAME()[IDX] = X; \ ASSERT_EQ(style.NAME()[IDX], X); \ + ASSERT_EQ( \ + style.assignedProps(), \ + AssignedProps{1ull << (YGStyle::NAME##Bit + IDX)}); \ auto asArray = decltype(std::declval().NAME()){X}; \ style.NAME() = asArray; \ ASSERT_EQ(static_cast(style.NAME()), asArray); \ + ASSERT_EQ( \ + style.assignedProps(), \ + AssignedProps{setBits( \ + YGStyle::NAME##Bit, \ + facebook::yoga::enums::count())}); \ } #define INDEX_ACCESSOR_TESTS_2(NAME, IDX, X, Y) \ @@ -69,8 +92,8 @@ #define INDEX_ACCESSOR_TEST(NAME, DEFAULT_VAL, IDX, ...) \ TEST(YGStyle, style_##NAME##_access) { \ - auto style = YGStyle{}; \ - ASSERT_EQ(style.NAME()[IDX], DEFAULT_VAL); \ + ASSERT_EQ(YGStyle{}.NAME()[IDX], DEFAULT_VAL); \ + ASSERT_EQ(YGStyle{}.assignedProps(), 0); \ INDEX_ACCESSOR_TESTS(__VA_ARGS__)(NAME, IDX, __VA_ARGS__) \ } @@ -247,5 +270,29 @@ ACCESSOR_TEST( YGFloatOptional{0.0f}, YGFloatOptional{}); +TEST(YGStyle, set_properties_default_to_0) { + ASSERT_EQ(YGStyle{}.assignedProps(), AssignedProps{0}); +} + +TEST(YGStyle, set_properties_reflects_all_set_properties) { + auto style = YGStyle{}; + + style.direction() = YGDirectionRTL; + style.justifyContent() = YGJustifySpaceAround; + style.flexWrap() = YGWrapWrap; + style.padding()[YGEdgeVertical] = YGValue{1, YGUnitPoint}; + style.minDimensions()[YGDimensionHeight] = YGValue{1, YGUnitPercent}; + style.aspectRatio() = YGFloatOptional{1.23}; + + ASSERT_EQ( + style.assignedProps(), + AssignedProps{1ull << YGStyle::directionBit | + 1ull << YGStyle::justifyContentBit | + 1ull << YGStyle::flexWrapBit | + 1ull << (YGStyle::paddingBit + YGEdgeVertical) | + 1ull << (YGStyle::minDimensionsBit + YGDimensionHeight) | + 1ull << YGStyle::aspectRatioBit}); +} + } // namespace yoga } // namespace facebook diff --git a/yoga/YGStyle.h b/yoga/YGStyle.h index 849fa0e7..d8e805e1 100644 --- a/yoga/YGStyle.h +++ b/yoga/YGStyle.h @@ -7,6 +7,8 @@ #pragma once #include #include +#include +#include #include #include "CompactValue.h" #include "YGEnums.h" @@ -33,21 +35,28 @@ class YGStyle { facebook::yoga::detail::Values()>; using CompactValue = facebook::yoga::detail::CompactValue; + static constexpr uint64_t allBits(int fromBit, int toBit) { + return fromBit < toBit + ? (uint64_t{1} << fromBit) | allBits(fromBit + 1, toBit) + : 0; + } + public: using Dimensions = Values; using Edges = Values; - template + template struct Ref { YGStyle& style; operator T() const { return style.*Prop; } - Ref& operator=(T value) { + Ref& operator=(T value) { style.*Prop = value; + style.assignedProps_.set(PropBit); return *this; } }; - template YGStyle::*Prop> + template YGStyle::*Prop, int PropBit> struct IdxRef { struct Ref { YGStyle& style; @@ -56,13 +65,16 @@ public: operator YGValue() const { return (style.*Prop)[idx]; } Ref& operator=(CompactValue value) { (style.*Prop)[idx] = value; + style.assignedProps_.set(PropBit + idx); return *this; } }; YGStyle& style; - IdxRef& operator=(const Values& values) { + IdxRef& operator=(const Values& values) { style.*Prop = values; + style.assignedProps_ |= + allBits(PropBit, PropBit + facebook::yoga::enums::count()); return *this; } operator const Values&() const { return style.*Prop; } @@ -70,15 +82,16 @@ public: CompactValue operator[](Idx idx) const { return (style.*Prop)[idx]; } }; - template + template struct BitfieldRef { YGStyle& style; T (YGStyle::*get)() const; void (YGStyle::*set)(T); operator T() const { return (style.*get)(); } - BitfieldRef& operator=(T x) { + BitfieldRef& operator=(T x) { (style.*set)(x); + style.assignedProps_.set(PropBit); return *this; } }; @@ -96,7 +109,39 @@ public: display_(YGDisplayFlex) {} ~YGStyle() = default; + static constexpr int directionBit = 0; + static constexpr int flexDirectionBit = directionBit + 1; + static constexpr int justifyContentBit = flexDirectionBit + 1; + static constexpr int alignContentBit = justifyContentBit + 1; + static constexpr int alignItemsBit = alignContentBit + 1; + static constexpr int alignSelfBit = alignItemsBit + 1; + static constexpr int positionTypeBit = alignSelfBit + 1; + static constexpr int flexWrapBit = positionTypeBit + 1; + static constexpr int overflowBit = flexWrapBit + 1; + static constexpr int displayBit = overflowBit + 1; + static constexpr int flexBit = displayBit + 1; + static constexpr int flexGrowBit = flexBit + 1; + static constexpr int flexShrinkBit = flexGrowBit + 1; + static constexpr int flexBasisBit = flexShrinkBit + 1; + static constexpr int marginBit = flexBasisBit + 1; + static constexpr int positionBit = + marginBit + facebook::yoga::enums::count(); + static constexpr int paddingBit = + positionBit + facebook::yoga::enums::count(); + static constexpr int borderBit = + paddingBit + facebook::yoga::enums::count(); + static constexpr int dimensionsBit = + borderBit + facebook::yoga::enums::count(); + static constexpr int maxDimensionsBit = + dimensionsBit + facebook::yoga::enums::count(); + static constexpr int minDimensionsBit = + maxDimensionsBit + facebook::yoga::enums::count(); + static constexpr int aspectRatioBit = + minDimensionsBit + facebook::yoga::enums::count(); + private: + std::bitset assignedProps_; + /* Some platforms don't support enum bitfields, so please use BITFIELD_ENUM_SIZED(BITS_COUNT) */ YGDirection direction_ BITFIELD_ENUM_SIZED(2); @@ -124,85 +169,113 @@ private: YGFloatOptional aspectRatio_ = {}; public: + const decltype(assignedProps_)& assignedProps() const { + return assignedProps_; + } + // for library users needing a type using ValueRepr = std::remove_reference::type; YGDirection direction() const { return direction_; } - BitfieldRef direction() { return BITFIELD_REF(direction); } + BitfieldRef direction() { + return BITFIELD_REF(direction); + } YGFlexDirection flexDirection() const { return flexDirection_; } - BitfieldRef flexDirection() { + BitfieldRef flexDirection() { return BITFIELD_REF(flexDirection); } YGJustify justifyContent() const { return justifyContent_; } - BitfieldRef justifyContent() { + BitfieldRef justifyContent() { return BITFIELD_REF(justifyContent); } YGAlign alignContent() const { return alignContent_; } - BitfieldRef alignContent() { return BITFIELD_REF(alignContent); } + BitfieldRef alignContent() { + return BITFIELD_REF(alignContent); + } YGAlign alignItems() const { return alignItems_; } - BitfieldRef alignItems() { return BITFIELD_REF(alignItems); } + BitfieldRef alignItems() { + return BITFIELD_REF(alignItems); + } YGAlign alignSelf() const { return alignSelf_; } - BitfieldRef alignSelf() { return BITFIELD_REF(alignSelf); } + BitfieldRef alignSelf() { + return BITFIELD_REF(alignSelf); + } YGPositionType positionType() const { return positionType_; } - BitfieldRef positionType() { + BitfieldRef positionType() { return BITFIELD_REF(positionType); } YGWrap flexWrap() const { return flexWrap_; } - BitfieldRef flexWrap() { return BITFIELD_REF(flexWrap); } + BitfieldRef flexWrap() { return BITFIELD_REF(flexWrap); } YGOverflow overflow() const { return overflow_; } - BitfieldRef overflow() { return BITFIELD_REF(overflow); } + BitfieldRef overflow() { + return BITFIELD_REF(overflow); + } YGDisplay display() const { return display_; } - BitfieldRef display() { return BITFIELD_REF(display); } + BitfieldRef display() { return BITFIELD_REF(display); } YGFloatOptional flex() const { return flex_; } - Ref flex() { return {*this}; } + Ref flex() { return {*this}; } YGFloatOptional flexGrow() const { return flexGrow_; } - Ref flexGrow() { return {*this}; } + Ref flexGrow() { + return {*this}; + } YGFloatOptional flexShrink() const { return flexShrink_; } - Ref flexShrink() { return {*this}; } + Ref flexShrink() { + return {*this}; + } CompactValue flexBasis() const { return flexBasis_; } - Ref flexBasis() { return {*this}; } + Ref flexBasis() { + return {*this}; + } const Edges& margin() const { return margin_; } - IdxRef margin() { return {*this}; } + IdxRef margin() { return {*this}; } const Edges& position() const { return position_; } - IdxRef position() { return {*this}; } + IdxRef position() { + return {*this}; + } const Edges& padding() const { return padding_; } - IdxRef padding() { return {*this}; } + IdxRef padding() { return {*this}; } const Edges& border() const { return border_; } - IdxRef border() { return {*this}; } + IdxRef border() { return {*this}; } const Dimensions& dimensions() const { return dimensions_; } - IdxRef dimensions() { return {*this}; } + IdxRef dimensions() { + return {*this}; + } const Dimensions& minDimensions() const { return minDimensions_; } - IdxRef minDimensions() { + IdxRef + minDimensions() { return {*this}; } const Dimensions& maxDimensions() const { return maxDimensions_; } - IdxRef maxDimensions() { + IdxRef + maxDimensions() { return {*this}; } // Yoga specific properties, not compatible with flexbox specification YGFloatOptional aspectRatio() const { return aspectRatio_; } - Ref aspectRatio() { return {*this}; } + Ref aspectRatio() { + return {*this}; + } private: BITFIELD_ACCESSORS(direction) From a803421739aa3828bef07e5cf13ab811030b4040 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Wed, 1 May 2019 06:47:31 -0700 Subject: [PATCH 051/347] `YGStyle`: Make getters/setters template args of `BitfieldRef` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Summary: @public Makes bitfield getters/setters part of the bitfield ref template. Since we introduced the tracking bit as template parameter in D14933022, every bitfield ref is an individual class anyway, and having function pointers doesn’t potentially lead to less code generation anyway. Furthermore, this change can (in the absence of tracking bits) avoid less specialized templates dealing with refs, and to dynamic dispatch as a consequence. Reviewed By: SidharthGuglani Differential Revision: D15085495 fbshipit-source-id: 0dd70fa05e9d43a29e38a619cddb642c9ca3f7ab --- yoga/YGStyle.h | 81 ++++++++++++++++++++++---------------------------- 1 file changed, 35 insertions(+), 46 deletions(-) diff --git a/yoga/YGStyle.h b/yoga/YGStyle.h index d8e805e1..d900d6c0 100644 --- a/yoga/YGStyle.h +++ b/yoga/YGStyle.h @@ -26,8 +26,12 @@ decltype(FIELD##_) get_##FIELD() const { return FIELD##_; } \ void set_##FIELD(decltype(FIELD##_) x) { FIELD##_ = x; } -#define BITFIELD_REF(FIELD) \ - { *this, &YGStyle::get_##FIELD, &YGStyle::set_##FIELD } +#define BITFIELD_REF(FIELD) \ + BitfieldRef< \ + decltype(FIELD##_), \ + &YGStyle::get_##FIELD, \ + &YGStyle::set_##FIELD, \ + FIELD##Bit> class YGStyle { template @@ -82,15 +86,17 @@ public: CompactValue operator[](Idx idx) const { return (style.*Prop)[idx]; } }; - template + template < + typename T, + T (YGStyle::*Get)() const, + void (YGStyle::*Set)(T), + int PropBit> struct BitfieldRef { YGStyle& style; - T (YGStyle::*get)() const; - void (YGStyle::*set)(T); - operator T() const { return (style.*get)(); } - BitfieldRef& operator=(T x) { - (style.*set)(x); + operator T() const { return (style.*Get)(); } + BitfieldRef& operator=(T x) { + (style.*Set)(x); style.assignedProps_.set(PropBit); return *this; } @@ -168,6 +174,17 @@ private: // Yoga specific properties, not compatible with flexbox specification YGFloatOptional aspectRatio_ = {}; + BITFIELD_ACCESSORS(direction) + BITFIELD_ACCESSORS(flexDirection) + BITFIELD_ACCESSORS(justifyContent) + BITFIELD_ACCESSORS(alignContent); + BITFIELD_ACCESSORS(alignItems); + BITFIELD_ACCESSORS(alignSelf); + BITFIELD_ACCESSORS(positionType); + BITFIELD_ACCESSORS(flexWrap); + BITFIELD_ACCESSORS(overflow); + BITFIELD_ACCESSORS(display); + public: const decltype(assignedProps_)& assignedProps() const { return assignedProps_; @@ -177,50 +194,34 @@ public: using ValueRepr = std::remove_reference::type; YGDirection direction() const { return direction_; } - BitfieldRef direction() { - return BITFIELD_REF(direction); - } + BITFIELD_REF(direction) direction() { return {*this}; } YGFlexDirection flexDirection() const { return flexDirection_; } - BitfieldRef flexDirection() { - return BITFIELD_REF(flexDirection); - } + BITFIELD_REF(flexDirection) flexDirection() { return {*this}; } YGJustify justifyContent() const { return justifyContent_; } - BitfieldRef justifyContent() { - return BITFIELD_REF(justifyContent); - } + BITFIELD_REF(justifyContent) justifyContent() { return {*this}; } YGAlign alignContent() const { return alignContent_; } - BitfieldRef alignContent() { - return BITFIELD_REF(alignContent); - } + BITFIELD_REF(alignContent) alignContent() { return {*this}; } YGAlign alignItems() const { return alignItems_; } - BitfieldRef alignItems() { - return BITFIELD_REF(alignItems); - } + BITFIELD_REF(alignItems) alignItems() { return {*this}; } YGAlign alignSelf() const { return alignSelf_; } - BitfieldRef alignSelf() { - return BITFIELD_REF(alignSelf); - } + BITFIELD_REF(alignSelf) alignSelf() { return {*this}; } YGPositionType positionType() const { return positionType_; } - BitfieldRef positionType() { - return BITFIELD_REF(positionType); - } + BITFIELD_REF(positionType) positionType() { return {*this}; } YGWrap flexWrap() const { return flexWrap_; } - BitfieldRef flexWrap() { return BITFIELD_REF(flexWrap); } + BITFIELD_REF(flexWrap) flexWrap() { return {*this}; } YGOverflow overflow() const { return overflow_; } - BitfieldRef overflow() { - return BITFIELD_REF(overflow); - } + BITFIELD_REF(overflow) overflow() { return {*this}; } YGDisplay display() const { return display_; } - BitfieldRef display() { return BITFIELD_REF(display); } + BITFIELD_REF(display) display() { return {*this}; } YGFloatOptional flex() const { return flex_; } Ref flex() { return {*this}; } @@ -276,18 +277,6 @@ public: Ref aspectRatio() { return {*this}; } - -private: - BITFIELD_ACCESSORS(direction) - BITFIELD_ACCESSORS(flexDirection) - BITFIELD_ACCESSORS(justifyContent) - BITFIELD_ACCESSORS(alignContent); - BITFIELD_ACCESSORS(alignItems); - BITFIELD_ACCESSORS(alignSelf); - BITFIELD_ACCESSORS(positionType); - BITFIELD_ACCESSORS(flexWrap); - BITFIELD_ACCESSORS(overflow); - BITFIELD_ACCESSORS(display); }; bool operator==(const YGStyle& lhs, const YGStyle& rhs); From e51ca9571394b874f622f3a75332bf722952d681 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Wed, 1 May 2019 17:04:17 -0700 Subject: [PATCH 052/347] Add foundations for event system Summary: @public We want to enable tooling, instrumentation, and statistics within Yoga without coupling these functionalities to our core code. This commit introduces the foundations of a simple, global event system. For the time being, we will only support a single subscriber. Should we require more than one, we can add support for it later. Reviewed By: SidharthGuglani Differential Revision: D15153678 fbshipit-source-id: 7d96f4c8def646a6a1b3908f946e7f81a6dba9c3 --- yoga/events.cpp | 41 ++++++++++++++++++++++++++++++++++++ yoga/events.h | 55 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 yoga/events.cpp create mode 100644 yoga/events.h diff --git a/yoga/events.cpp b/yoga/events.cpp new file mode 100644 index 00000000..19092fc5 --- /dev/null +++ b/yoga/events.cpp @@ -0,0 +1,41 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#include "events.h" +#include +#include + +namespace facebook { +namespace yoga { + +namespace { + +// For now, a single subscriber is enough. +// This can be changed as soon as the need for more than one subscriber arises. +std::function& globalEventSubscriber() { + static std::function subscriber = nullptr; + return subscriber; +} + +} // namespace + +void Event::subscribe(std::function&& subscriber) { + if (globalEventSubscriber() != nullptr) { + throw std::logic_error( + "Yoga currently supports only one global event subscriber"); + } + globalEventSubscriber() = std::move(subscriber); +} + +void Event::publish(const YGNode& node, Type eventType, const Data& eventData) { + auto& subscriber = globalEventSubscriber(); + if (subscriber) { + subscriber(node, eventType, eventData); + } +} + +} // namespace yoga +} // namespace facebook diff --git a/yoga/events.h b/yoga/events.h new file mode 100644 index 00000000..c48fab7b --- /dev/null +++ b/yoga/events.h @@ -0,0 +1,55 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#pragma once + +#include + +struct YGConfig; +struct YGNode; + +namespace facebook { +namespace yoga { + +struct Event { + enum Type {}; + class Data; + using Subscriber = void(const YGNode&, Type, Data); + + template + struct TypedData {}; + + class Data { + const void* data_; + + public: + template + Data(const TypedData& data) : data_{&data} {} + + template + const TypedData& get() const { + return *static_cast*>(data_); + }; + }; + + static void subscribe(std::function&& subscriber); + + template + static void publish(const YGNode& node, const TypedData& eventData = {}) { + publish(node, E, Data{eventData}); + } + + template + static void publish(const YGNode* node, const TypedData& eventData = {}) { + publish(*node, eventData); + } + +private: + static void publish(const YGNode&, Type, const Data&); +}; + +} // namespace yoga +} // namespace facebook From 1adbafe95073ffcd2fc31dea578781ee7e219604 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Fri, 3 May 2019 04:56:28 -0700 Subject: [PATCH 053/347] Fix `YGConfig` constructors Summary: @public `YGConfig::YGConfig(YGConfig*)` was not initializing the same fields as the default constructors. Here, we make the default constructor delegate to the more specialized one to remove duplication. Reviewed By: SidharthGuglani Differential Revision: D15164599 fbshipit-source-id: 27247709091b7664386057d09ac67d481877871f --- yoga/YGNode.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/yoga/YGNode.h b/yoga/YGNode.h index 021c3372..e43dc9d8 100644 --- a/yoga/YGNode.h +++ b/yoga/YGNode.h @@ -45,7 +45,7 @@ private: uint32_t lineIndex_ = 0; YGNodeRef owner_ = nullptr; YGVector children_ = {}; - YGConfigRef config_ = nullptr; + YGConfigRef config_; std::array resolvedDimensions_ = { {YGValueUndefined, YGValueUndefined}}; @@ -66,16 +66,17 @@ private: using CompactValue = facebook::yoga::detail::CompactValue; public: - YGNode() + YGNode() : YGNode{nullptr} {} + explicit YGNode(const YGConfigRef newConfig) : hasNewLayout_{true}, isReferenceBaseline_{false}, isDirty_{false}, nodeType_{YGNodeTypeDefault}, measureUsesContext_{false}, baselineUsesContext_{false}, - printUsesContext_{false} {} + printUsesContext_{false}, + config_{newConfig} {}; ~YGNode() = default; // cleanup of owner/children relationships in YGNodeFree - explicit YGNode(const YGConfigRef newConfig) : config_(newConfig){}; YGNode(YGNode&&); From 1e0ebdae2fe16349bbaaf42214e5c4db93712cb2 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Fri, 3 May 2019 05:51:37 -0700 Subject: [PATCH 054/347] Remove API to constrain measure cache size Summary: We conducted an experiment with different measure cache sizes. This has now been deallocatedi (D15183473). Remove the necessary APIs. Reviewed By: SidharthGuglani Differential Revision: D15183486 fbshipit-source-id: a38fa5a3ab0321c2521265f7d1cd6b495efd76cf --- yoga/Yoga-internal.h | 2 -- yoga/Yoga.cpp | 11 +---------- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/yoga/Yoga-internal.h b/yoga/Yoga-internal.h index a5cf3037..dffb8672 100644 --- a/yoga/Yoga-internal.h +++ b/yoga/Yoga-internal.h @@ -29,8 +29,6 @@ void YGNodeCalculateLayoutWithContext( YGDirection ownerDirection, void* layoutContext); -void YGSetUsedCachedEntries(size_t); - YG_EXTERN_C_END namespace facebook { diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 6a394971..f3f68fd0 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -28,15 +28,6 @@ __forceinline const float fmaxf(const float a, const float b) { using namespace facebook::yoga; using detail::Log; -namespace { -size_t usedMeasureCacheEntries = YG_MAX_CACHED_RESULT_COUNT; -} - -void YGSetUsedCachedEntries(size_t n) { - usedMeasureCacheEntries = - n == 0 || n > YG_MAX_CACHED_RESULT_COUNT ? YG_MAX_CACHED_RESULT_COUNT : n; -} - #ifdef ANDROID static int YGAndroidLog( const YGConfigRef config, @@ -3864,7 +3855,7 @@ bool YGLayoutNodeInternal( layoutMarkerData.maxMeasureCache = layout->nextCachedMeasurementsIndex + 1; } - if (layout->nextCachedMeasurementsIndex == usedMeasureCacheEntries) { + if (layout->nextCachedMeasurementsIndex == YG_MAX_CACHED_RESULT_COUNT) { if (gPrintChanges) { Log::log(node, YGLogLevelVerbose, nullptr, "Out of cache entries!\n"); } From af38fd31f896195ce6384e12e541bad71097ced5 Mon Sep 17 00:00:00 2001 From: Adrian Zgorzalek Date: Tue, 7 May 2019 10:18:05 -0700 Subject: [PATCH 055/347] Upgrade prettier to 1.17.0 Summary: Run `js1 upgrade prettier 1.17.0` and `xplat/js/scripts/update-oss-yarn-lockfile.sh` and `hg revert -r .^ xplat/js/rome` allow-large-files Reviewed By: zackargyle, pvdz Differential Revision: D15164375 fbshipit-source-id: 2fe68733dfa93ea64a67d170ba2f80c5af086917 --- website/package.json | 2 +- website/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/website/package.json b/website/package.json index c91a1464..442b13f6 100644 --- a/website/package.json +++ b/website/package.json @@ -32,6 +32,6 @@ "develop": "gatsby develop" }, "devDependencies": { - "prettier": "1.16.4" + "prettier": "1.17.0" } } diff --git a/website/yarn.lock b/website/yarn.lock index 9d696714..509efeca 100644 --- a/website/yarn.lock +++ b/website/yarn.lock @@ -6978,10 +6978,10 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" -prettier@1.16.4: - version "1.16.4" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.4.tgz#73e37e73e018ad2db9c76742e2647e21790c9717" - integrity sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g== +prettier@1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.17.0.tgz#53b303676eed22cc14a9f0cec09b477b3026c008" + integrity sha512-sXe5lSt2WQlCbydGETgfm1YBShgOX4HxQkFPvbxkcwgDvGDeqVau8h+12+lmSVlP3rHPz0oavfddSZg/q+Szjw== pretty-bytes@^4.0.2: version "4.0.2" From 018916403e32dfca3f4e593749180734e24d44aa Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Thu, 9 May 2019 03:21:35 -0700 Subject: [PATCH 056/347] Reduce measure cache size to 8 Summary: @public Reduces measure cache size to a number that is enough for 95% of nodes, according to our (FB-internal) measurements. Node size: 776b -> 584b Reviewed By: SidharthGuglani Differential Revision: D15183567 fbshipit-source-id: 9ae8cc78074271a015e7618b931ba0356de87a0c --- yoga/Yoga-internal.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yoga/Yoga-internal.h b/yoga/Yoga-internal.h index dffb8672..4d32a96b 100644 --- a/yoga/Yoga-internal.h +++ b/yoga/Yoga-internal.h @@ -91,9 +91,9 @@ struct YGCachedMeasurement { } }; -// This value was chosen based on empiracle data. Even the most complicated -// layouts should not require more than 16 entries to fit within the cache. -#define YG_MAX_CACHED_RESULT_COUNT 16 +// This value was chosen based on empirical data: +// 98% of analyzed layouts require less than 8 entries. +#define YG_MAX_CACHED_RESULT_COUNT 8 namespace facebook { namespace yoga { From 88b23ebb3dedc62f4bbed595f7bac108ca42b18f Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Thu, 9 May 2019 04:14:08 -0700 Subject: [PATCH 057/347] Publish events for node allocation and deallocation Summary: @public Publish two events, `NodeAllocation` and `NodeDeallocation`, in the same places where the global node counter is changed. Reviewed By: SidharthGuglani Differential Revision: D15174858 fbshipit-source-id: 6e4e9add88513b9e987189ca5035d76da2a1de55 --- BUCK | 1 + tests/EventsTest.cpp | 118 +++++++++++++++++++++++++++++++++++++++++++ yoga/Yoga.cpp | 10 ++++ yoga/events.cpp | 2 + yoga/events.h | 12 ++++- 5 files changed, 142 insertions(+), 1 deletion(-) create mode 100644 tests/EventsTest.cpp diff --git a/BUCK b/BUCK index d81f4daf..2f038b28 100644 --- a/BUCK +++ b/BUCK @@ -16,6 +16,7 @@ COMPILER_FLAGS = LIBRARY_COMPILER_FLAGS + [ TEST_COMPILER_FLAGS = BASE_COMPILER_FLAGS + GMOCK_OVERRIDE_FLAGS + [ "-std=c++1y", "-DDEBUG", + "-DYG_ENABLE_EVENTS", ] yoga_cxx_library( diff --git a/tests/EventsTest.cpp b/tests/EventsTest.cpp new file mode 100644 index 00000000..5d8d3bdf --- /dev/null +++ b/tests/EventsTest.cpp @@ -0,0 +1,118 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#include +#include +#include +#include + +#include +#include + +namespace facebook { +namespace yoga { +namespace test { + +struct EventArgs { + const YGNode* node; + Event::Type type; + std::unique_ptr> dataPtr; + + template + const Event::TypedData& data() { + return *static_cast*>(dataPtr.get()); + } +}; + +struct EventTest : public ::testing::Test { + static EventArgs lastEvent; + static void SetUpTestCase() noexcept; +}; + +TEST_F(EventTest, new_node_has_event) { + auto c = YGConfigGetDefault(); + auto n = YGNodeNew(); + + ASSERT_EQ(lastEvent.node, n); + ASSERT_EQ(lastEvent.type, Event::NodeAllocation); + ASSERT_EQ(lastEvent.data().config, c); + + YGNodeFree(n); +} + +TEST_F(EventTest, new_node_with_config_event) { + auto c = YGConfigNew(); + auto n = YGNodeNewWithConfig(c); + + ASSERT_EQ(lastEvent.node, n); + ASSERT_EQ(lastEvent.type, Event::NodeAllocation); + ASSERT_EQ(lastEvent.data().config, c); + + YGNodeFree(n); + YGConfigFree(c); +} + +TEST_F(EventTest, clone_node_event) { + auto c = YGConfigNew(); + auto n = YGNodeNewWithConfig(c); + auto clone = YGNodeClone(n); + + ASSERT_EQ(lastEvent.node, clone); + ASSERT_EQ(lastEvent.type, Event::NodeAllocation); + ASSERT_EQ(lastEvent.data().config, c); + + YGNodeFree(n); + YGNodeFree(clone); + YGConfigFree(c); +} + +TEST_F(EventTest, free_node_event) { + auto c = YGConfigNew(); + auto n = YGNodeNewWithConfig(c); + YGNodeFree(n); + + ASSERT_EQ(lastEvent.node, n); + ASSERT_EQ(lastEvent.type, Event::NodeDeallocation); + ASSERT_EQ(lastEvent.data().config, c); + + YGConfigFree(c); +} + +namespace { + +template +EventArgs createArgs(const YGNode& node, const Event::Data& data) { + using Data = Event::TypedData; + auto deleteData = [](void* x) { delete static_cast(x); }; + return {&node, E, {new Data{data.get()}, deleteData}}; +} + +} // namespace + +void EventTest::SetUpTestCase() noexcept { + static bool isSetup = false; + if (isSetup) { + return; + } + isSetup = true; + + Event::subscribe([](const YGNode& node, Event::Type type, Event::Data data) { + switch (type) { + case Event::NodeAllocation: + lastEvent = createArgs(node, data); + break; + case Event::NodeDeallocation: + lastEvent = createArgs(node, data); + break; + } + }); +} + +EventArgs EventTest::lastEvent{}; + +} // namespace test +} // namespace yoga +} // namespace facebook diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index f3f68fd0..72772366 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -13,6 +13,7 @@ #include "YGNode.h" #include "YGNodePrint.h" #include "Yoga-internal.h" +#include "events.h" #include "instrumentation.h" #ifdef _MSC_VER #include @@ -213,6 +214,9 @@ WIN_EXPORT YGNodeRef YGNodeNewWithConfig(const YGConfigRef config) { YGAssertWithConfig( config, node != nullptr, "Could not allocate memory for node"); gNodeInstanceCount++; +#ifdef YG_ENABLE_EVENTS + Event::publish(node, {config}); +#endif if (config->useWebDefaults) { node->getStyle().flexDirection() = YGFlexDirectionRow; @@ -238,6 +242,9 @@ YGNodeRef YGNodeClone(YGNodeRef oldNode) { node != nullptr, "Could not allocate memory for node"); gNodeInstanceCount++; +#ifdef YG_ENABLE_EVENTS + Event::publish(node, {node->getConfig()}); +#endif node->setOwner(nullptr); return node; } @@ -284,6 +291,9 @@ void YGNodeFree(const YGNodeRef node) { } node->clearChildren(); +#ifdef YG_ENABLE_EVENTS + Event::publish(node, {node->getConfig()}); +#endif delete node; gNodeInstanceCount--; } diff --git a/yoga/events.cpp b/yoga/events.cpp index 19092fc5..2548204a 100644 --- a/yoga/events.cpp +++ b/yoga/events.cpp @@ -8,6 +8,8 @@ #include #include +#include + namespace facebook { namespace yoga { diff --git a/yoga/events.h b/yoga/events.h index c48fab7b..bd8cdd4b 100644 --- a/yoga/events.h +++ b/yoga/events.h @@ -15,7 +15,7 @@ namespace facebook { namespace yoga { struct Event { - enum Type {}; + enum Type { NodeAllocation, NodeDeallocation }; class Data; using Subscriber = void(const YGNode&, Type, Data); @@ -51,5 +51,15 @@ private: static void publish(const YGNode&, Type, const Data&); }; +template <> +struct Event::TypedData { + YGConfig* config; +}; + +template <> +struct Event::TypedData { + YGConfig* config; +}; + } // namespace yoga } // namespace facebook From 6e04631862c5e13aa9e6801a98b3901f6930a14c Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Thu, 9 May 2019 04:14:08 -0700 Subject: [PATCH 058/347] Add test utilities for C++ and Java Summary: @public Test utility on top of the new event system that maintains a counter of instantiated nodes. Meant to replace the global node counter. Reviewed By: SidharthGuglani Differential Revision: D15174855 fbshipit-source-id: 6998472f95a09b8da652257a26596164bdcf43d6 --- BUCK | 1 + java/BUCK | 10 ++++- tests/EventsTest.cpp | 32 +++++++-------- testutil/BUCK | 37 +++++++++++++++++ testutil/TestUtil.java | 19 +++++++++ testutil/jni.cpp | 38 +++++++++++++++++ testutil/testutil.cpp | 65 ++++++++++++++++++++++++++++++ testutil/testutil.h | 30 ++++++++++++++ tools/build_defs/oss/yoga_defs.bzl | 3 ++ yoga/events.cpp | 4 ++ yoga/events.h | 2 + 11 files changed, 221 insertions(+), 20 deletions(-) create mode 100644 testutil/BUCK create mode 100644 testutil/TestUtil.java create mode 100644 testutil/jni.cpp create mode 100644 testutil/testutil.cpp create mode 100644 testutil/testutil.h diff --git a/BUCK b/BUCK index 2f038b28..94175002 100644 --- a/BUCK +++ b/BUCK @@ -56,6 +56,7 @@ yoga_cxx_test( visibility = ["PUBLIC"], deps = [ ":yogaForDebug", + yoga_dep("testutil:testutil"), GTEST_TARGET, ], ) diff --git a/java/BUCK b/java/BUCK index 59a1613b..3f29b3c8 100644 --- a/java/BUCK +++ b/java/BUCK @@ -3,7 +3,12 @@ # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID", "CXX_LIBRARY_WHITELIST", "FBJNI_JAVA_TARGET", "FBJNI_TARGET", "INFER_ANNOTATIONS_TARGET", "JNI_TARGET", "JSR_305_TARGET", "JUNIT_TARGET", "PROGRUARD_ANNOTATIONS_TARGET", "SOLOADER_TARGET", "yoga_cxx_library", "yoga_dep", "yoga_java_binary", "yoga_java_library", "yoga_java_test") +load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID", "CXX_LIBRARY_WHITELIST", "FBJNI_JAVA_TARGET", "FBJNI_TARGET", "INFER_ANNOTATIONS_TARGET", "JNI_TARGET", "JSR_305_TARGET", "JUNIT_TARGET", "PROGRUARD_ANNOTATIONS_TARGET", "SOLOADER_TARGET", "yoga_cxx_lib", "yoga_cxx_library", "yoga_dep", "yoga_java_binary", "yoga_java_library", "yoga_java_test") + +CXX_LIBRARY_WHITELIST_FOR_TESTS = CXX_LIBRARY_WHITELIST + [ + yoga_cxx_lib("testutil:jni"), + yoga_cxx_lib("testutil:testutil"), +] yoga_cxx_library( name = "jni", @@ -55,11 +60,12 @@ yoga_java_library( yoga_java_test( name = "tests", srcs = glob(["tests/**/*.java"]), - cxx_library_whitelist = CXX_LIBRARY_WHITELIST, + cxx_library_whitelist = CXX_LIBRARY_WHITELIST_FOR_TESTS, use_cxx_libraries = True, visibility = ["PUBLIC"], deps = [ ":java", + yoga_dep("testutil:java"), JUNIT_TARGET, ], ) diff --git a/tests/EventsTest.cpp b/tests/EventsTest.cpp index 5d8d3bdf..99adf8e8 100644 --- a/tests/EventsTest.cpp +++ b/tests/EventsTest.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include @@ -27,9 +28,12 @@ struct EventArgs { } }; -struct EventTest : public ::testing::Test { +class EventTest : public ::testing::Test { + ScopedEventSubscription subscription = {&EventTest::listen}; + static void listen(const YGNode&, Event::Type, Event::Data); + +public: static EventArgs lastEvent; - static void SetUpTestCase() noexcept; }; TEST_F(EventTest, new_node_has_event) { @@ -92,23 +96,15 @@ EventArgs createArgs(const YGNode& node, const Event::Data& data) { } // namespace -void EventTest::SetUpTestCase() noexcept { - static bool isSetup = false; - if (isSetup) { - return; +void EventTest::listen(const YGNode& node, Event::Type type, Event::Data data) { + switch (type) { + case Event::NodeAllocation: + lastEvent = createArgs(node, data); + break; + case Event::NodeDeallocation: + lastEvent = createArgs(node, data); + break; } - isSetup = true; - - Event::subscribe([](const YGNode& node, Event::Type type, Event::Data data) { - switch (type) { - case Event::NodeAllocation: - lastEvent = createArgs(node, data); - break; - case Event::NodeDeallocation: - lastEvent = createArgs(node, data); - break; - } - }); } EventArgs EventTest::lastEvent{}; diff --git a/testutil/BUCK b/testutil/BUCK new file mode 100644 index 00000000..ba4c0e60 --- /dev/null +++ b/testutil/BUCK @@ -0,0 +1,37 @@ +load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID", "FBJNI_TARGET", "LIBRARY_COMPILER_FLAGS", "SOLOADER_TARGET", "yoga_cxx_library", "yoga_dep", "yoga_java_library") + +yoga_cxx_library( + name = "testutil", + srcs = ["testutil.cpp"], + header_namespace = "yoga/testutil", + exported_headers = ["testutil.h"], + compiler_flags = LIBRARY_COMPILER_FLAGS, + soname = "libyoga_testutil.$(ext)", + visibility = ["PUBLIC"], + deps = [yoga_dep(":yoga")], +) + +yoga_java_library( + name = "java", + srcs = ["TestUtil.java"], + source = "1.7", + target = "1.7", + visibility = ["PUBLIC"], + deps = [ + ":jni", + SOLOADER_TARGET, + ], +) + +yoga_cxx_library( + name = "jni", + srcs = ["jni.cpp"], + compiler_flags = LIBRARY_COMPILER_FLAGS, + platforms = ANDROID, + soname = "libyoga_testutil_jni.$(ext)", + visibility = ["PUBLIC"], + deps = [ + ":testutil", + FBJNI_TARGET, + ], +) diff --git a/testutil/TestUtil.java b/testutil/TestUtil.java new file mode 100644 index 00000000..bddde9ac --- /dev/null +++ b/testutil/TestUtil.java @@ -0,0 +1,19 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +package com.facebook.yoga; + +import com.facebook.soloader.SoLoader; + +class TestUtil { + static { + SoLoader.loadLibrary("yoga_testutil_jni"); + } + + static native void startCountingNodes(); + static native int nodeCount(); + static native int stopCountingNodes(); +} diff --git a/testutil/jni.cpp b/testutil/jni.cpp new file mode 100644 index 00000000..18d7da90 --- /dev/null +++ b/testutil/jni.cpp @@ -0,0 +1,38 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#include +#include + +using namespace facebook; + +namespace { + +void startCountingNodes(jni::alias_ref) { + yoga::test::TestUtil::startCountingNodes(); +} + +jint nodeCount(jni::alias_ref) { + return yoga::test::TestUtil::nodeCount(); +} + +jint stopCountingNodes(jni::alias_ref) { + return yoga::test::TestUtil::stopCountingNodes(); +} + +} // namespace + +jint JNI_OnLoad(JavaVM* vm, void*) { + return jni::initialize(vm, [] { + jni::registerNatives( + "com/facebook/yoga/TestUtil", + { + makeNativeMethod("startCountingNodes", startCountingNodes), + makeNativeMethod("nodeCount", nodeCount), + makeNativeMethod("stopCountingNodes", stopCountingNodes), + }); + }); +} diff --git a/testutil/testutil.cpp b/testutil/testutil.cpp new file mode 100644 index 00000000..f4174b40 --- /dev/null +++ b/testutil/testutil.cpp @@ -0,0 +1,65 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#include "testutil.h" + +#include +#include + +#include + +namespace facebook { +namespace yoga { +namespace test { + +int nodeInstanceCount = 0; + +namespace { + +void yogaEventSubscriber( + const YGNode& node, + Event::Type eventType, + const Event::Data& eventData) { + + switch (eventType) { + case Event::NodeAllocation: + nodeInstanceCount++; + break; + case Event::NodeDeallocation: + nodeInstanceCount--; + break; + default: + break; + } +} +} // namespace + +void TestUtil::startCountingNodes() { + nodeInstanceCount = 0; + Event::subscribe(yogaEventSubscriber); +} + +int TestUtil::nodeCount() { + return nodeInstanceCount; +} + +int TestUtil::stopCountingNodes() { + Event::reset(); + return std::exchange(nodeInstanceCount, 0); +} + +ScopedEventSubscription::ScopedEventSubscription( + std::function&& s) { + Event::subscribe(std::move(s)); +} + +ScopedEventSubscription::~ScopedEventSubscription() { + Event::reset(); +} + +} // namespace test +} // namespace yoga +} // namespace facebook diff --git a/testutil/testutil.h b/testutil/testutil.h new file mode 100644 index 00000000..e97bd025 --- /dev/null +++ b/testutil/testutil.h @@ -0,0 +1,30 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#pragma once + +#include + +#include + +namespace facebook { +namespace yoga { +namespace test { + +struct TestUtil { + static void startCountingNodes(); + static int nodeCount(); + static int stopCountingNodes(); +}; + +struct ScopedEventSubscription { + ScopedEventSubscription(std::function&&); + ~ScopedEventSubscription(); +}; + +} // namespace test +} // namespace yoga +} // namespace facebook diff --git a/tools/build_defs/oss/yoga_defs.bzl b/tools/build_defs/oss/yoga_defs.bzl index f6e04753..4a0dcd6a 100644 --- a/tools/build_defs/oss/yoga_defs.bzl +++ b/tools/build_defs/oss/yoga_defs.bzl @@ -148,6 +148,9 @@ def _single_subdir_glob(dirpath, glob_pattern, exclude = None, prefix = None): def yoga_dep(dep): return "//" + dep +def yoga_cxx_lib(lib): + return yoga_dep(lib) + def yoga_android_aar(*args, **kwargs): native.android_aar(*args, **kwargs) diff --git a/yoga/events.cpp b/yoga/events.cpp index 2548204a..41528e9c 100644 --- a/yoga/events.cpp +++ b/yoga/events.cpp @@ -24,6 +24,10 @@ std::function& globalEventSubscriber() { } // namespace +void Event::reset() { + globalEventSubscriber() = nullptr; +} + void Event::subscribe(std::function&& subscriber) { if (globalEventSubscriber() != nullptr) { throw std::logic_error( diff --git a/yoga/events.h b/yoga/events.h index bd8cdd4b..7b04060a 100644 --- a/yoga/events.h +++ b/yoga/events.h @@ -35,6 +35,8 @@ struct Event { }; }; + static void reset(); + static void subscribe(std::function&& subscriber); template From 9e20dfeea14d4f0297410a86de43e968a9230db8 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Thu, 9 May 2019 04:14:08 -0700 Subject: [PATCH 059/347] Switch tests to test utility for counting nodes Summary: @public replaces the global node counter with the event-based one for all tests. Reviewed By: SidharthGuglani Differential Revision: D15174856 fbshipit-source-id: f4401d502bdbaf3b6e4632a4d985aac260cb35a8 --- java/tests/com/facebook/yoga/YogaNodeTest.java | 4 ++-- tests/YGLayoutDiffingTest.cpp | 17 +++++++++++------ tests/YGPersistenceTest.cpp | 7 +++++-- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/java/tests/com/facebook/yoga/YogaNodeTest.java b/java/tests/com/facebook/yoga/YogaNodeTest.java index d6d2f742..8f894f3c 100644 --- a/java/tests/com/facebook/yoga/YogaNodeTest.java +++ b/java/tests/com/facebook/yoga/YogaNodeTest.java @@ -31,9 +31,9 @@ public class YogaNodeTest { @Test public void testInit() { - final int refCount = YogaNative.jni_YGNodeGetInstanceCount(); + TestUtil.startCountingNodes(); final YogaNode node = createNode(); - assertEquals(refCount + 1, YogaNative.jni_YGNodeGetInstanceCount()); + assertEquals(1, TestUtil.stopCountingNodes()); } @Test diff --git a/tests/YGLayoutDiffingTest.cpp b/tests/YGLayoutDiffingTest.cpp index 96361d16..378b8046 100644 --- a/tests/YGLayoutDiffingTest.cpp +++ b/tests/YGLayoutDiffingTest.cpp @@ -5,10 +5,15 @@ * file in the root directory of this source tree. */ #include +#include #include #include +using facebook::yoga::test::TestUtil; + TEST(YogaTest, assert_layout_trees_are_same) { + TestUtil::startCountingNodes(); + YGConfig* config = YGConfigNew(); YGConfigSetUseLegacyStretchBehaviour(config, true); const YGNodeRef root1 = YGNodeNewWithConfig(config); @@ -30,12 +35,12 @@ TEST(YogaTest, assert_layout_trees_are_same) { YGNodeInsertChild(root1_child0_child0, root1_child0_child0_child0, 0); const int32_t cal1_configInstanceCount = YGConfigGetInstanceCount(); - const int32_t cal1_nodeInstanceCount = YGNodeGetInstanceCount(); + const int32_t cal1_nodeInstanceCount = TestUtil::nodeCount(); YGNodeCalculateLayout(root1, YGUndefined, YGUndefined, YGDirectionLTR); ASSERT_EQ(YGConfigGetInstanceCount(), cal1_configInstanceCount); - ASSERT_EQ(YGNodeGetInstanceCount(), cal1_nodeInstanceCount); + ASSERT_EQ(TestUtil::nodeCount(), cal1_nodeInstanceCount); const YGNodeRef root2 = YGNodeNewWithConfig(config); YGNodeStyleSetWidth(root2, 500); @@ -56,12 +61,12 @@ TEST(YogaTest, assert_layout_trees_are_same) { YGNodeInsertChild(root2_child0_child0, root2_child0_child0_child0, 0); const int32_t cal2_configInstanceCount = YGConfigGetInstanceCount(); - const int32_t cal2_nodeInstanceCount = YGNodeGetInstanceCount(); + const int32_t cal2_nodeInstanceCount = TestUtil::nodeCount(); YGNodeCalculateLayout(root2, YGUndefined, YGUndefined, YGDirectionLTR); ASSERT_EQ(YGConfigGetInstanceCount(), cal2_configInstanceCount); - ASSERT_EQ(YGNodeGetInstanceCount(), cal2_nodeInstanceCount); + ASSERT_EQ(TestUtil::nodeCount(), cal2_nodeInstanceCount); ASSERT_TRUE(YGNodeLayoutGetDidUseLegacyFlag(root1)); ASSERT_TRUE(YGNodeLayoutGetDidUseLegacyFlag(root2)); @@ -70,12 +75,12 @@ TEST(YogaTest, assert_layout_trees_are_same) { YGNodeStyleSetAlignItems(root2, YGAlignFlexEnd); const int32_t cal3_configInstanceCount = YGConfigGetInstanceCount(); - const int32_t cal3_nodeInstanceCount = YGNodeGetInstanceCount(); + const int32_t cal3_nodeInstanceCount = TestUtil::nodeCount(); YGNodeCalculateLayout(root2, YGUndefined, YGUndefined, YGDirectionLTR); ASSERT_EQ(YGConfigGetInstanceCount(), cal3_configInstanceCount); - ASSERT_EQ(YGNodeGetInstanceCount(), cal3_nodeInstanceCount); + ASSERT_EQ(TestUtil::stopCountingNodes(), cal3_nodeInstanceCount); ASSERT_FALSE(root1->isLayoutTreeEqualToNode(*root2)); diff --git a/tests/YGPersistenceTest.cpp b/tests/YGPersistenceTest.cpp index 69bd59b1..fe704a62 100644 --- a/tests/YGPersistenceTest.cpp +++ b/tests/YGPersistenceTest.cpp @@ -5,9 +5,12 @@ * file in the root directory of this source tree. */ #include +#include #include #include +using facebook::yoga::test::TestUtil; + TEST(YogaTest, cloning_shared_root) { const YGConfigRef config = YGConfigNew(); @@ -220,7 +223,7 @@ TEST(YogaTest, cloning_two_levels) { } TEST(YogaTest, cloning_and_freeing) { - const int32_t initialInstanceCount = YGNodeGetInstanceCount(); + TestUtil::startCountingNodes(); const YGConfigRef config = YGConfigNew(); @@ -249,7 +252,7 @@ TEST(YogaTest, cloning_and_freeing) { YGConfigFree(config); - ASSERT_EQ(initialInstanceCount, YGNodeGetInstanceCount()); + ASSERT_EQ(0, TestUtil::stopCountingNodes()); } TEST(YogaTest, mixed_shared_and_owned_children) { From e96a09e5ff50cccc18372fe3452352e67266cfba Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Thu, 9 May 2019 04:14:08 -0700 Subject: [PATCH 060/347] **breaking:** remove `YGNodeGetInstanceCount` Summary: @public `YGNodeGetInstanceCount` was only ever meant for tests, and caused data races in multi-threaded environments. It was completely replaced with event-based counting for tests. Here we remove public API around the counter, and the counter itself. Reviewed By: SidharthGuglani Differential Revision: D15174857 fbshipit-source-id: 228e85da565bac9e8485121e956a2e41910b11c8 --- csharp/Facebook.Yoga/Native.cs | 3 --- csharp/Facebook.Yoga/YogaNode.cs | 5 ----- java/com/facebook/yoga/YogaNative.java | 1 - java/jni/YGJNI.cpp | 5 ----- javascript/sources/global.cc | 13 ------------- yoga/Yoga.cpp | 8 -------- yoga/Yoga.h | 1 - 7 files changed, 36 deletions(-) delete mode 100644 javascript/sources/global.cc diff --git a/csharp/Facebook.Yoga/Native.cs b/csharp/Facebook.Yoga/Native.cs index 7ec1ab18..3c618df0 100644 --- a/csharp/Facebook.Yoga/Native.cs +++ b/csharp/Facebook.Yoga/Native.cs @@ -43,9 +43,6 @@ namespace Facebook.Yoga [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)] public static extern void YGConfigFree(IntPtr node); - [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)] - public static extern int YGNodeGetInstanceCount(); - [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)] public static extern int YGConfigGetInstanceCount(); diff --git a/csharp/Facebook.Yoga/YogaNode.cs b/csharp/Facebook.Yoga/YogaNode.cs index f681ec89..37bb3ebb 100644 --- a/csharp/Facebook.Yoga/YogaNode.cs +++ b/csharp/Facebook.Yoga/YogaNode.cs @@ -673,10 +673,5 @@ namespace Facebook.Yoga return _children != null ? ((IEnumerable)_children).GetEnumerator() : System.Linq.Enumerable.Empty().GetEnumerator(); } - - public static int GetInstanceCount() - { - return Native.YGNodeGetInstanceCount(); - } } } diff --git a/java/com/facebook/yoga/YogaNative.java b/java/com/facebook/yoga/YogaNative.java index 8b81e929..fbda3ca6 100644 --- a/java/com/facebook/yoga/YogaNative.java +++ b/java/com/facebook/yoga/YogaNative.java @@ -28,7 +28,6 @@ public class YogaNative { // YGNode related - static native int jni_YGNodeGetInstanceCount(); static native long jni_YGNodeNew(boolean useBatchingForLayoutOutputs); static native long jni_YGNodeNewWithConfig(long configPointer, boolean useBatchingForLayoutOutputs); static native void jni_YGNodeFree(long nativePointer); diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp index 066f832f..28011661 100644 --- a/java/jni/YGJNI.cpp +++ b/java/jni/YGJNI.cpp @@ -938,10 +938,6 @@ void jni_YGNodeSetStyleInputs( YGNodeSetStyleInputs(_jlong2YGNodeRef(nativePointer), result, size); } -jint jni_YGNodeGetInstanceCount() { - return YGNodeGetInstanceCount(); -} - jlong jni_YGNodeStyleGetMargin(jlong nativePointer, jint edge) { YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); if (!YGNodeEdges{yogaNodeRef}.has(YGNodeEdges::MARGIN)) { @@ -1105,7 +1101,6 @@ jint JNI_OnLoad(JavaVM* vm, void*) { YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMaxHeightPercent), YGMakeCriticalNativeMethod(jni_YGNodeStyleGetAspectRatio), YGMakeCriticalNativeMethod(jni_YGNodeStyleSetAspectRatio), - YGMakeCriticalNativeMethod(jni_YGNodeGetInstanceCount), YGMakeCriticalNativeMethod(jni_YGNodePrint), YGMakeNativeMethod(jni_YGNodeClone), YGMakeNativeMethod(jni_YGNodeSetStyleInputs), diff --git a/javascript/sources/global.cc b/javascript/sources/global.cc deleted file mode 100644 index ae8454ee..00000000 --- a/javascript/sources/global.cc +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#include - -#include "./global.hh" - -unsigned getInstanceCount(void) { - return YGNodeGetInstanceCount(); -} diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 72772366..05fb10d2 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -206,14 +206,12 @@ void YGNodeMarkDirtyAndPropogateToDescendants(const YGNodeRef node) { return node->markDirtyAndPropogateDownwards(); } -int32_t gNodeInstanceCount = 0; int32_t gConfigInstanceCount = 0; WIN_EXPORT YGNodeRef YGNodeNewWithConfig(const YGConfigRef config) { const YGNodeRef node = new YGNode(); YGAssertWithConfig( config, node != nullptr, "Could not allocate memory for node"); - gNodeInstanceCount++; #ifdef YG_ENABLE_EVENTS Event::publish(node, {config}); #endif @@ -241,7 +239,6 @@ YGNodeRef YGNodeClone(YGNodeRef oldNode) { oldNode->getConfig(), node != nullptr, "Could not allocate memory for node"); - gNodeInstanceCount++; #ifdef YG_ENABLE_EVENTS Event::publish(node, {node->getConfig()}); #endif @@ -295,7 +292,6 @@ void YGNodeFree(const YGNodeRef node) { Event::publish(node, {node->getConfig()}); #endif delete node; - gNodeInstanceCount--; } static void YGConfigFreeRecursive(const YGNodeRef root) { @@ -337,10 +333,6 @@ void YGNodeReset(YGNodeRef node) { node->reset(); } -int32_t YGNodeGetInstanceCount(void) { - return gNodeInstanceCount; -} - int32_t YGConfigGetInstanceCount(void) { return gConfigInstanceCount; } diff --git a/yoga/Yoga.h b/yoga/Yoga.h index c616d965..a9dc01dc 100644 --- a/yoga/Yoga.h +++ b/yoga/Yoga.h @@ -62,7 +62,6 @@ WIN_EXPORT void YGNodeFreeRecursiveWithCleanupFunc( YGNodeCleanupFunc cleanup); WIN_EXPORT void YGNodeFreeRecursive(YGNodeRef node); WIN_EXPORT void YGNodeReset(YGNodeRef node); -WIN_EXPORT int32_t YGNodeGetInstanceCount(void); WIN_EXPORT void YGNodeInsertChild( YGNodeRef node, From 5824dbda66b2e0f384afb544e4ad051a6b201c6f Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Thu, 9 May 2019 04:14:08 -0700 Subject: [PATCH 061/347] Publish event when visiting nodes during layout Summary: @public Publish an event when visiting nodes during layouts. Reviewed By: SidharthGuglani Differential Revision: D15206965 fbshipit-source-id: c201f084b1d4186bc64560b8033be965f2549236 --- tests/EventsTest.cpp | 59 ++++++++++++++++++++++++++++++++------------ yoga/Yoga.cpp | 3 +++ yoga/events.h | 2 +- 3 files changed, 47 insertions(+), 17 deletions(-) diff --git a/tests/EventsTest.cpp b/tests/EventsTest.cpp index 99adf8e8..09a67d27 100644 --- a/tests/EventsTest.cpp +++ b/tests/EventsTest.cpp @@ -10,8 +10,10 @@ #include #include +#include #include #include +#include namespace facebook { namespace yoga { @@ -33,16 +35,18 @@ class EventTest : public ::testing::Test { static void listen(const YGNode&, Event::Type, Event::Data); public: - static EventArgs lastEvent; + static std::vector events; + static EventArgs& lastEvent() { return events.back(); } + void TearDown() override; }; TEST_F(EventTest, new_node_has_event) { auto c = YGConfigGetDefault(); auto n = YGNodeNew(); - ASSERT_EQ(lastEvent.node, n); - ASSERT_EQ(lastEvent.type, Event::NodeAllocation); - ASSERT_EQ(lastEvent.data().config, c); + ASSERT_EQ(lastEvent().node, n); + ASSERT_EQ(lastEvent().type, Event::NodeAllocation); + ASSERT_EQ(lastEvent().data().config, c); YGNodeFree(n); } @@ -51,9 +55,9 @@ TEST_F(EventTest, new_node_with_config_event) { auto c = YGConfigNew(); auto n = YGNodeNewWithConfig(c); - ASSERT_EQ(lastEvent.node, n); - ASSERT_EQ(lastEvent.type, Event::NodeAllocation); - ASSERT_EQ(lastEvent.data().config, c); + ASSERT_EQ(lastEvent().node, n); + ASSERT_EQ(lastEvent().type, Event::NodeAllocation); + ASSERT_EQ(lastEvent().data().config, c); YGNodeFree(n); YGConfigFree(c); @@ -64,9 +68,9 @@ TEST_F(EventTest, clone_node_event) { auto n = YGNodeNewWithConfig(c); auto clone = YGNodeClone(n); - ASSERT_EQ(lastEvent.node, clone); - ASSERT_EQ(lastEvent.type, Event::NodeAllocation); - ASSERT_EQ(lastEvent.data().config, c); + ASSERT_EQ(lastEvent().node, clone); + ASSERT_EQ(lastEvent().type, Event::NodeAllocation); + ASSERT_EQ(lastEvent().data().config, c); YGNodeFree(n); YGNodeFree(clone); @@ -78,13 +82,29 @@ TEST_F(EventTest, free_node_event) { auto n = YGNodeNewWithConfig(c); YGNodeFree(n); - ASSERT_EQ(lastEvent.node, n); - ASSERT_EQ(lastEvent.type, Event::NodeDeallocation); - ASSERT_EQ(lastEvent.data().config, c); + ASSERT_EQ(lastEvent().node, n); + ASSERT_EQ(lastEvent().type, Event::NodeDeallocation); + ASSERT_EQ(lastEvent().data().config, c); YGConfigFree(c); } +TEST_F(EventTest, layout_events) { + auto root = YGNodeNew(); + auto child = YGNodeNew(); + YGNodeInsertChild(root, child, 0); + + YGNodeCalculateLayout(root, 123, 456, YGDirectionLTR); + + ASSERT_EQ(events[2].node, root); + ASSERT_EQ(events[2].type, Event::NodeLayout); + + ASSERT_EQ(events[3].node, child); + ASSERT_EQ(events[3].type, Event::NodeLayout); + + YGNodeFreeRecursive(root); +} + namespace { template @@ -99,15 +119,22 @@ EventArgs createArgs(const YGNode& node, const Event::Data& data) { void EventTest::listen(const YGNode& node, Event::Type type, Event::Data data) { switch (type) { case Event::NodeAllocation: - lastEvent = createArgs(node, data); + events.push_back(createArgs(node, data)); break; case Event::NodeDeallocation: - lastEvent = createArgs(node, data); + events.push_back(createArgs(node, data)); + break; + case Event::NodeLayout: + events.push_back(createArgs(node, data)); break; } } -EventArgs EventTest::lastEvent{}; +void EventTest::TearDown() { + events.clear(); +} + +std::vector EventTest::events{}; } // namespace test } // namespace yoga diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 05fb10d2..5f6fa875 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -3667,6 +3667,9 @@ bool YGLayoutNodeInternal( const YGConfigRef config, YGMarkerLayoutData& layoutMarkerData, void* const layoutContext) { +#ifdef YG_ENABLE_EVENTS + Event::publish(node); +#endif YGLayout* layout = &node->getLayout(); gDepth++; diff --git a/yoga/events.h b/yoga/events.h index 7b04060a..e667d2d2 100644 --- a/yoga/events.h +++ b/yoga/events.h @@ -15,7 +15,7 @@ namespace facebook { namespace yoga { struct Event { - enum Type { NodeAllocation, NodeDeallocation }; + enum Type { NodeAllocation, NodeDeallocation, NodeLayout }; class Data; using Subscriber = void(const YGNode&, Type, Data); From 74fc37efc892be4ac72d83301b095174f3d4d568 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Thu, 9 May 2019 07:42:34 -0700 Subject: [PATCH 062/347] move event files to yoga/events folder Summary: Moved events files to yoga/events for better code structure Reviewed By: davidaurelio Differential Revision: D15198566 fbshipit-source-id: 74d451011841d59fae5a1c637f9c33a7d2d1f87e --- BUCK | 8 ++++---- tests/EventsTest.cpp | 2 +- testutil/testutil.cpp | 2 +- testutil/testutil.h | 2 +- yoga/Yoga.cpp | 2 +- yoga/{events.cpp => event/event.cpp} | 2 +- yoga/{events.h => event/event.h} | 0 7 files changed, 9 insertions(+), 9 deletions(-) rename yoga/{events.cpp => event/event.cpp} (98%) rename yoga/{events.h => event/event.h} (100%) diff --git a/BUCK b/BUCK index 94175002..63015d1d 100644 --- a/BUCK +++ b/BUCK @@ -21,9 +21,9 @@ TEST_COMPILER_FLAGS = BASE_COMPILER_FLAGS + GMOCK_OVERRIDE_FLAGS + [ yoga_cxx_library( name = "yoga", - srcs = glob(["yoga/*.cpp"]), + srcs = glob(["yoga/**/*.cpp"]), header_namespace = "", - exported_headers = subdir_glob([("", "yoga/*.h")]), + exported_headers = subdir_glob([("", "yoga/**/*.h")]), compiler_flags = COMPILER_FLAGS, soname = "libyogacore.$(ext)", tests = [":YogaTests"], @@ -35,9 +35,9 @@ yoga_cxx_library( yoga_cxx_library( name = "yogaForDebug", - srcs = glob(["yoga/*.cpp"]), + srcs = glob(["yoga/**/*.cpp"]), header_namespace = "", - exported_headers = subdir_glob([("", "yoga/*.h")]), + exported_headers = subdir_glob([("", "yoga/**/*.h")]), compiler_flags = TEST_COMPILER_FLAGS, soname = "libyogacore.$(ext)", tests = [":YogaTests"], diff --git a/tests/EventsTest.cpp b/tests/EventsTest.cpp index 09a67d27..d4645a3b 100644 --- a/tests/EventsTest.cpp +++ b/tests/EventsTest.cpp @@ -6,7 +6,7 @@ */ #include #include -#include +#include #include #include diff --git a/testutil/testutil.cpp b/testutil/testutil.cpp index f4174b40..bce5e168 100644 --- a/testutil/testutil.cpp +++ b/testutil/testutil.cpp @@ -7,7 +7,7 @@ #include "testutil.h" #include -#include +#include #include diff --git a/testutil/testutil.h b/testutil/testutil.h index e97bd025..ef4a33da 100644 --- a/testutil/testutil.h +++ b/testutil/testutil.h @@ -6,7 +6,7 @@ */ #pragma once -#include +#include #include diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 5f6fa875..a34c791e 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -13,7 +13,7 @@ #include "YGNode.h" #include "YGNodePrint.h" #include "Yoga-internal.h" -#include "events.h" +#include "event/event.h" #include "instrumentation.h" #ifdef _MSC_VER #include diff --git a/yoga/events.cpp b/yoga/event/event.cpp similarity index 98% rename from yoga/events.cpp rename to yoga/event/event.cpp index 41528e9c..bde5fca8 100644 --- a/yoga/events.cpp +++ b/yoga/event/event.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ -#include "events.h" +#include "event.h" #include #include diff --git a/yoga/events.h b/yoga/event/event.h similarity index 100% rename from yoga/events.h rename to yoga/event/event.h From a15bf6e701313e6a2b6202dbacdce92060a46f02 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Fri, 10 May 2019 18:55:53 -0700 Subject: [PATCH 063/347] Publish events for layout pass Summary: Adds `LayoutPassStart` and `LayoutPassEnd` events. The existing `NodeLayout` event in isolation is not as useful as it could be. Having events that mark start and end of a layout pass are a useful addition. Differential Revision: D15305467 fbshipit-source-id: 14af6f65e698fb1e3112eb2ffd87a74d31df4840 --- tests/EventsTest.cpp | 4 ++++ yoga/Yoga.cpp | 18 ++++++++++++++++-- yoga/event/event.h | 8 +++++++- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/tests/EventsTest.cpp b/tests/EventsTest.cpp index d4645a3b..99c19d94 100644 --- a/tests/EventsTest.cpp +++ b/tests/EventsTest.cpp @@ -127,6 +127,10 @@ void EventTest::listen(const YGNode& node, Event::Type type, Event::Data data) { case Event::NodeLayout: events.push_back(createArgs(node, data)); break; + case Event::LayoutPassStart: + break; + case Event::LayoutPassEnd: + break; } } diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index a34c791e..f7322980 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include "Utils.h" #include "YGNode.h" #include "YGNodePrint.h" @@ -4002,7 +4003,13 @@ void YGNodeCalculateLayoutWithContext( const float ownerHeight, const YGDirection ownerDirection, void* layoutContext) { - marker::MarkerSection marker{node}; + +#ifdef YG_ENABLE_EVENTS + Event::publish(node); +#endif + // unique pointer to allow ending the marker early + std::unique_ptr> marker{ + new marker::MarkerSection{node}}; // Increment the generation count. This will force the recursive routine to // visit all dirty nodes at least once. Subsequent visits will be skipped if @@ -4061,7 +4068,7 @@ void YGNodeCalculateLayoutWithContext( true, "initial", node->getConfig(), - marker.data, + marker->data, layoutContext)) { node->setPosition( node->getLayout().direction, ownerWidth, ownerHeight, ownerWidth); @@ -4078,6 +4085,13 @@ void YGNodeCalculateLayoutWithContext( #endif } + // end marker here + marker = nullptr; + +#ifdef YG_ENABLE_EVENTS + Event::publish(node); +#endif + // We want to get rid off `useLegacyStretchBehaviour` from YGConfig. But we // aren't sure whether client's of yoga have gotten rid off this flag or not. // So logging this in YGLayout would help to find out the call sites depending diff --git a/yoga/event/event.h b/yoga/event/event.h index e667d2d2..c86d5bde 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -15,7 +15,13 @@ namespace facebook { namespace yoga { struct Event { - enum Type { NodeAllocation, NodeDeallocation, NodeLayout }; + enum Type { + NodeAllocation, + NodeDeallocation, + NodeLayout, + LayoutPassStart, + LayoutPassEnd + }; class Data; using Subscriber = void(const YGNode&, Type, Data); From afc1108659074fdfa1e51545e65ed8d444096bd4 Mon Sep 17 00:00:00 2001 From: Shawn Presser Date: Tue, 14 May 2019 05:25:35 -0700 Subject: [PATCH 064/347] Fix cmake build / update CMakeLists.txt to use C++11 (#887) Summary: On MacOS, the following steps result in build errors: ``` mkdir build cd build cmake .. make ``` The problem is that yogacore uses C++11 features (`constexpr`) but C++11 isn't specified in CMakeLists.txt. This PR solves the poblem by adding the following code to the bottom of CMakeLists.txt: ``` set_target_properties(yogacore PROPERTIES CXX_STANDARD 11) ``` This solution was derived from https://stackoverflow.com/questions/45688522/how-to-enable-c17-in-cmake Pull Request resolved: https://github.com/facebook/yoga/pull/887 Differential Revision: D15334282 Pulled By: davidaurelio fbshipit-source-id: a599d8a8f555f7f9cd8dc333e12dc2387d5b2d7a --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5a89aced..ed4eff5c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,3 +13,4 @@ file(GLOB yogacore_SRC yoga/*.cpp) add_library(yogacore STATIC ${yogacore_SRC}) target_link_libraries(yogacore android log) +set_target_properties(yogacore PROPERTIES CXX_STANDARD 11) From 0ce42d83e073c3cbe820829555d2daecc7d5fcf8 Mon Sep 17 00:00:00 2001 From: gengjiawen Date: Tue, 14 May 2019 06:10:00 -0700 Subject: [PATCH 065/347] add missing gradle script for windows Summary: Pull Request resolved: https://github.com/facebook/yoga/pull/885 Differential Revision: D15334309 Pulled By: davidaurelio fbshipit-source-id: c594c0216a967c776606443a50f14e81da228d64 --- gradlew.bat | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 gradlew.bat diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 00000000..f9553162 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega From e3156279fc86c078ad4761e87907eda66d09c60b Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Tue, 14 May 2019 07:42:40 -0700 Subject: [PATCH 066/347] Travis: Fix C++ compilation Summary: @public Removes the usage of C++14 features, and enforces C++11 via compiler flags. Reviewed By: SidharthGuglani Differential Revision: D15334938 fbshipit-source-id: 011764b5f226fef6a35e0c7c1dd170a39ae2261e --- testutil/testutil.cpp | 6 +++--- tools/build_defs/oss/yoga_defs.bzl | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/testutil/testutil.cpp b/testutil/testutil.cpp index bce5e168..2a011683 100644 --- a/testutil/testutil.cpp +++ b/testutil/testutil.cpp @@ -9,8 +9,6 @@ #include #include -#include - namespace facebook { namespace yoga { namespace test { @@ -48,7 +46,9 @@ int TestUtil::nodeCount() { int TestUtil::stopCountingNodes() { Event::reset(); - return std::exchange(nodeInstanceCount, 0); + auto prev = nodeInstanceCount; + nodeInstanceCount = 0; + return prev; } ScopedEventSubscription::ScopedEventSubscription( diff --git a/tools/build_defs/oss/yoga_defs.bzl b/tools/build_defs/oss/yoga_defs.bzl index 4a0dcd6a..59e118c2 100644 --- a/tools/build_defs/oss/yoga_defs.bzl +++ b/tools/build_defs/oss/yoga_defs.bzl @@ -58,6 +58,7 @@ BASE_COMPILER_FLAGS = [ "-Wall", "-Werror", "-O2", + "-std=c++11", ] LIBRARY_COMPILER_FLAGS = BASE_COMPILER_FLAGS + [ From d7ff5c068981a4d20392c3785dc92ecefef837b6 Mon Sep 17 00:00:00 2001 From: Yadong Wen Date: Tue, 14 May 2019 13:35:05 -0700 Subject: [PATCH 067/347] Remove c++1y compiler flag Reviewed By: meyering Differential Revision: D15326600 fbshipit-source-id: 837f454ccf27299bc9360174bf54e48e4209bb52 --- BUCK | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/BUCK b/BUCK index 63015d1d..5af52a2f 100644 --- a/BUCK +++ b/BUCK @@ -9,12 +9,7 @@ GMOCK_OVERRIDE_FLAGS = [ "-Wno-inconsistent-missing-override", ] -COMPILER_FLAGS = LIBRARY_COMPILER_FLAGS + [ - "-std=c++1y", -] - TEST_COMPILER_FLAGS = BASE_COMPILER_FLAGS + GMOCK_OVERRIDE_FLAGS + [ - "-std=c++1y", "-DDEBUG", "-DYG_ENABLE_EVENTS", ] @@ -24,7 +19,7 @@ yoga_cxx_library( srcs = glob(["yoga/**/*.cpp"]), header_namespace = "", exported_headers = subdir_glob([("", "yoga/**/*.h")]), - compiler_flags = COMPILER_FLAGS, + compiler_flags = LIBRARY_COMPILER_FLAGS, soname = "libyogacore.$(ext)", tests = [":YogaTests"], visibility = ["PUBLIC"], From cf809b8e8b2f661ff04d75b8a7af2e602990be32 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 15 May 2019 01:14:36 -0700 Subject: [PATCH 068/347] added listener in flipper plugin for yoga Summary: Adds YogaEventListener interface and it's implementation which will be used in flipper for events coming from Yoga After this diff , we will start getting layout calculate events in flipper listener Reviewed By: davidaurelio Differential Revision: D15316928 fbshipit-source-id: da3a53374a52386037b553d460038d988b0162c2 --- java/com/facebook/yoga/YogaEventListener.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 java/com/facebook/yoga/YogaEventListener.java diff --git a/java/com/facebook/yoga/YogaEventListener.java b/java/com/facebook/yoga/YogaEventListener.java new file mode 100644 index 00000000..6d1d486b --- /dev/null +++ b/java/com/facebook/yoga/YogaEventListener.java @@ -0,0 +1,13 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +package com.facebook.yoga; + +public interface YogaEventListener { + + void onLayoutPassEnd(YogaNode node); + +} \ No newline at end of file From a9514513a72632561a3d36292fbe34e12ba2c0d5 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 15 May 2019 08:57:50 -0700 Subject: [PATCH 069/347] use vector for subscribers in event system Summary: Replaced global event subscriber with a vector of subscriber functions Further changes in commit stack support the mutiple subscribers in event system Reviewed By: davidaurelio Differential Revision: D15352451 fbshipit-source-id: 7ca6f0943735bf1f76a906c23e15e14ae3c5f42c --- yoga/event/event.cpp | 23 +++++++++-------------- yoga/event/event.h | 2 ++ 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/yoga/event/event.cpp b/yoga/event/event.cpp index bde5fca8..29b6493e 100644 --- a/yoga/event/event.cpp +++ b/yoga/event/event.cpp @@ -15,31 +15,26 @@ namespace yoga { namespace { -// For now, a single subscriber is enough. -// This can be changed as soon as the need for more than one subscriber arises. -std::function& globalEventSubscriber() { - static std::function subscriber = nullptr; - return subscriber; +Event::Subscribers& eventSubscribers() { + static Event::Subscribers subscribers = {}; + return subscribers; } } // namespace void Event::reset() { - globalEventSubscriber() = nullptr; + eventSubscribers() = {}; } void Event::subscribe(std::function&& subscriber) { - if (globalEventSubscriber() != nullptr) { - throw std::logic_error( - "Yoga currently supports only one global event subscriber"); - } - globalEventSubscriber() = std::move(subscriber); + eventSubscribers().push_back(subscriber); } void Event::publish(const YGNode& node, Type eventType, const Data& eventData) { - auto& subscriber = globalEventSubscriber(); - if (subscriber) { - subscriber(node, eventType, eventData); + for (auto& subscriber : eventSubscribers()) { + if (subscriber) { + subscriber(node, eventType, eventData); + } } } diff --git a/yoga/event/event.h b/yoga/event/event.h index c86d5bde..578d2f3a 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -7,6 +7,7 @@ #pragma once #include +#include struct YGConfig; struct YGNode; @@ -24,6 +25,7 @@ struct Event { }; class Data; using Subscriber = void(const YGNode&, Type, Data); + using Subscribers = std::vector>; template struct TypedData {}; From 1562bce9b433cfd3079ed8683043516b2a025f60 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 15 May 2019 08:57:50 -0700 Subject: [PATCH 070/347] use shared_ptr for subscribers vector in event system Summary: using shared_ptr for vector of subscribers Further changes in commit stack support the mutiple subscribers in event system Reviewed By: davidaurelio Differential Revision: D15352512 fbshipit-source-id: fac7f4268abf9ca4277734aca2f21cd711eb7d6e --- yoga/event/event.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/yoga/event/event.cpp b/yoga/event/event.cpp index 29b6493e..167912a9 100644 --- a/yoga/event/event.cpp +++ b/yoga/event/event.cpp @@ -7,6 +7,7 @@ #include "event.h" #include #include +#include #include @@ -15,23 +16,29 @@ namespace yoga { namespace { -Event::Subscribers& eventSubscribers() { - static Event::Subscribers subscribers = {}; +std::mutex& eventSubscribersMutex() { + static std::mutex subscribersMutex; + return subscribersMutex; +} + +std::shared_ptr& eventSubscribers() { + static auto subscribers = std::make_shared(); return subscribers; } } // namespace void Event::reset() { - eventSubscribers() = {}; + eventSubscribers() = std::make_shared(); } void Event::subscribe(std::function&& subscriber) { - eventSubscribers().push_back(subscriber); + std::lock_guard guard(eventSubscribersMutex()); + eventSubscribers()->push_back(subscriber); } void Event::publish(const YGNode& node, Type eventType, const Data& eventData) { - for (auto& subscriber : eventSubscribers()) { + for (auto& subscriber : *eventSubscribers()) { if (subscriber) { subscriber(node, eventType, eventData); } From 1180afed9c57aea831b3d305199fe4f850678eee Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Thu, 16 May 2019 11:42:31 -0700 Subject: [PATCH 071/347] Fix style property bits Summary: Style bits had overlap, because `dimensionBit` was set with an incorrect increment. Reviewed By: SidharthGuglani Differential Revision: D15335134 fbshipit-source-id: 370e1a73547d76b0e26bc6ab67acb96d33ddf180 --- tests/YGStyleAccessorsTest.cpp | 93 ++++++++++++++++++++++++++++++++++ yoga/YGStyle.h | 4 +- 2 files changed, 96 insertions(+), 1 deletion(-) diff --git a/tests/YGStyleAccessorsTest.cpp b/tests/YGStyleAccessorsTest.cpp index 5d6e7c7c..58c28ce9 100644 --- a/tests/YGStyleAccessorsTest.cpp +++ b/tests/YGStyleAccessorsTest.cpp @@ -294,5 +294,98 @@ TEST(YGStyle, set_properties_reflects_all_set_properties) { 1ull << YGStyle::aspectRatioBit}); } +TEST(YGStyle, directionBit) { + constexpr auto directionBit = YGStyle::directionBit; + ASSERT_EQ(directionBit, 0); +} +TEST(YGStyle, flexDirectionBit) { + constexpr auto flexDirectionBit = YGStyle::flexDirectionBit; + ASSERT_EQ(flexDirectionBit, 1); +} +TEST(YGStyle, justifyContentBit) { + constexpr auto justifyContentBit = YGStyle::justifyContentBit; + ASSERT_EQ(justifyContentBit, 2); +} +TEST(YGStyle, alignContentBit) { + constexpr auto alignContentBit = YGStyle::alignContentBit; + ASSERT_EQ(alignContentBit, 3); +} +TEST(YGStyle, alignItemsBit) { + constexpr auto alignItemsBit = YGStyle::alignItemsBit; + ASSERT_EQ(alignItemsBit, 4); +} +TEST(YGStyle, alignSelfBit) { + constexpr auto alignSelfBit = YGStyle::alignSelfBit; + ASSERT_EQ(alignSelfBit, 5); +} +TEST(YGStyle, positionTypeBit) { + constexpr auto positionTypeBit = YGStyle::positionTypeBit; + ASSERT_EQ(positionTypeBit, 6); +} +TEST(YGStyle, flexWrapBit) { + constexpr auto flexWrapBit = YGStyle::flexWrapBit; + ASSERT_EQ(flexWrapBit, 7); +} +TEST(YGStyle, overflowBit) { + constexpr auto overflowBit = YGStyle::overflowBit; + ASSERT_EQ(overflowBit, 8); +} +TEST(YGStyle, displayBit) { + constexpr auto displayBit = YGStyle::displayBit; + ASSERT_EQ(displayBit, 9); +} +TEST(YGStyle, flexBit) { + constexpr auto flexBit = YGStyle::flexBit; + ASSERT_EQ(flexBit, 10); +} +TEST(YGStyle, flexGrowBit) { + constexpr auto flexGrowBit = YGStyle::flexGrowBit; + ASSERT_EQ(flexGrowBit, 11); +} +TEST(YGStyle, flexShrinkBit) { + constexpr auto flexShrinkBit = YGStyle::flexShrinkBit; + ASSERT_EQ(flexShrinkBit, 12); +} +TEST(YGStyle, flexBasisBit) { + constexpr auto flexBasisBit = YGStyle::flexBasisBit; + ASSERT_EQ(flexBasisBit, 13); +} +TEST(YGStyle, marginBit) { + constexpr auto marginBit = YGStyle::marginBit; + ASSERT_EQ(marginBit, 14); +} +TEST(YGStyle, positionBit) { + constexpr auto positionBit = YGStyle::positionBit; + ASSERT_EQ(positionBit, 23); +} +TEST(YGStyle, paddingBit) { + constexpr auto paddingBit = YGStyle::paddingBit; + ASSERT_EQ(paddingBit, 32); +} +TEST(YGStyle, borderBit) { + constexpr auto borderBit = YGStyle::borderBit; + ASSERT_EQ(borderBit, 41); +} +TEST(YGStyle, dimensionsBit) { + constexpr auto dimensionsBit = YGStyle::dimensionsBit; + ASSERT_EQ(dimensionsBit, 50); +} +TEST(YGStyle, maxDimensionsBit) { + constexpr auto maxDimensionsBit = YGStyle::maxDimensionsBit; + ASSERT_EQ(maxDimensionsBit, 52); +} +TEST(YGStyle, minDimensionsBit) { + constexpr auto minDimensionsBit = YGStyle::minDimensionsBit; + ASSERT_EQ(minDimensionsBit, 54); +} +TEST(YGStyle, aspectRatioBit) { + constexpr auto aspectRatioBit = YGStyle::aspectRatioBit; + ASSERT_EQ(aspectRatioBit, 56); +} +TEST(YGStyle, numStyles) { + constexpr auto numStyles = YGStyle::numStyles; + ASSERT_EQ(numStyles, 57); +} + } // namespace yoga } // namespace facebook diff --git a/yoga/YGStyle.h b/yoga/YGStyle.h index d900d6c0..77c7e038 100644 --- a/yoga/YGStyle.h +++ b/yoga/YGStyle.h @@ -137,7 +137,7 @@ public: static constexpr int borderBit = paddingBit + facebook::yoga::enums::count(); static constexpr int dimensionsBit = - borderBit + facebook::yoga::enums::count(); + borderBit + facebook::yoga::enums::count(); static constexpr int maxDimensionsBit = dimensionsBit + facebook::yoga::enums::count(); static constexpr int minDimensionsBit = @@ -145,6 +145,8 @@ public: static constexpr int aspectRatioBit = minDimensionsBit + facebook::yoga::enums::count(); + static constexpr int numStyles = aspectRatioBit + 1; + private: std::bitset assignedProps_; From 8dc46c0a8774afa78a090dadffeddb77a634cb4a Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Thu, 16 May 2019 11:42:31 -0700 Subject: [PATCH 072/347] `YGNode`: one byte of private storage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Summary: Adds one byte of private storage to `YGNode`, intended to be used by Yoga itself. This is in previously unused alignment space, and won’t cause more memory to be allocated. Reviewed By: SidharthGuglani Differential Revision: D15296732 fbshipit-source-id: 3caf0a3cd506e4e324e51c31869c69be5781d476 --- yoga/YGNode.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/yoga/YGNode.h b/yoga/YGNode.h index e43dc9d8..bbd1b703 100644 --- a/yoga/YGNode.h +++ b/yoga/YGNode.h @@ -5,6 +5,7 @@ * file in the root directory of this source tree. */ #pragma once +#include #include #include "CompactValue.h" #include "YGConfig.h" @@ -27,6 +28,7 @@ private: bool measureUsesContext_ : 1; bool baselineUsesContext_ : 1; bool printUsesContext_ : 1; + uint8_t reserved_ = 0; union { YGMeasureFunc noContext; MeasureWithContextFn withContext; @@ -91,6 +93,9 @@ public: // Getters void* getContext() const { return context_; } + uint8_t& reserved() { return reserved_; } + uint8_t reserved() const { return reserved_; } + void print(void*); bool getHasNewLayout() const { return hasNewLayout_; } From aa71dbb5bd5970940edb8754f4c881617a7f9556 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Sun, 19 May 2019 23:29:28 -0700 Subject: [PATCH 073/347] mutex lock while accessing event subscribers vector for thread safety Summary: Using Mutex lock_guard mechanism when writing to subscribers and when accessing them in publish to make a copy Reviewed By: davidaurelio Differential Revision: D15391679 fbshipit-source-id: 16713ff28ce1762a5ca4c48c152897a92417e80b --- yoga/event/event.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/yoga/event/event.cpp b/yoga/event/event.cpp index 167912a9..e2fe3588 100644 --- a/yoga/event/event.cpp +++ b/yoga/event/event.cpp @@ -34,11 +34,19 @@ void Event::reset() { void Event::subscribe(std::function&& subscriber) { std::lock_guard guard(eventSubscribersMutex()); + eventSubscribers() = + std::make_shared(*eventSubscribers()); eventSubscribers()->push_back(subscriber); } void Event::publish(const YGNode& node, Type eventType, const Data& eventData) { - for (auto& subscriber : *eventSubscribers()) { + std::shared_ptr subscribers; + { + std::lock_guard guard(eventSubscribersMutex()); + subscribers = eventSubscribers(); + } + + for (auto& subscriber : *subscribers) { if (subscriber) { subscriber(node, eventType, eventData); } From 19387925170ac3c7a776c1eaaf3268a2f59d137b Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Mon, 20 May 2019 10:37:59 -0700 Subject: [PATCH 074/347] `YGNode`: Field for web defaults Summary: In order to remove the config pointer from nodes, we have to keep track of whether the node is using web defaults. This information fits into one bit that we can place in padding (i.e. no extra memory needed). This allows us to get rid of config usage withing `YGNode` with some exceptions: - `iterChildrenAfterCloningIfNeeded` -- this function will simply receive the configuration, or the cloning callback. - `setAndPropogateUseLegacyFlag` -- will be removed in D15316863 - in `YGNode::reset` -- will go away utomatically once we remove the config pointer Reviewed By: SidharthGuglani Differential Revision: D15391536 fbshipit-source-id: 0fa0d0805c6862bd741fe4a7d9b637ed534f56a4 --- yoga/YGNode.cpp | 24 +++++++++++++++--------- yoga/YGNode.h | 23 ++++++++++++++++++++--- yoga/Yoga.cpp | 7 +------ 3 files changed, 36 insertions(+), 18 deletions(-) diff --git a/yoga/YGNode.cpp b/yoga/YGNode.cpp index 2c68d607..172da871 100644 --- a/yoga/YGNode.cpp +++ b/yoga/YGNode.cpp @@ -22,6 +22,7 @@ YGNode::YGNode(YGNode&& node) { measureUsesContext_ = node.measureUsesContext_; baselineUsesContext_ = node.baselineUsesContext_; printUsesContext_ = node.printUsesContext_; + useWebDefaults_ = node.useWebDefaults_; measure_ = node.measure_; baseline_ = node.baseline_; print_ = node.print_; @@ -38,6 +39,13 @@ YGNode::YGNode(YGNode&& node) { } } +YGNode::YGNode(const YGNode& node, YGConfigRef config) : YGNode{node} { + config_ = config; + if (config->useWebDefaults) { + useWebDefaults(); + } +} + void YGNode::print(void* printContext) { if (print_.noContext != nullptr) { if (printUsesContext_) { @@ -349,7 +357,7 @@ YGValue YGNode::resolveFlexBasisPtr() const { return flexBasis; } if (!style_.flex().isUndefined() && style_.flex().unwrap() > 0.0f) { - return config_->useWebDefaults ? YGValueAuto : YGValueZero; + return useWebDefaults_ ? YGValueAuto : YGValueZero; } return YGValueAuto; } @@ -425,11 +433,11 @@ float YGNode::resolveFlexShrink() const { if (!style_.flexShrink().isUndefined()) { return style_.flexShrink().unwrap(); } - if (!config_->useWebDefaults && !style_.flex().isUndefined() && + if (!useWebDefaults_ && !style_.flex().isUndefined() && style_.flex().unwrap() < 0.0f) { return -style_.flex().unwrap(); } - return config_->useWebDefaults ? kWebDefaultFlexShrink : kDefaultFlexShrink; + return useWebDefaults_ ? kWebDefaultFlexShrink : kDefaultFlexShrink; } bool YGNode::isNodeFlexible() { @@ -581,11 +589,9 @@ void YGNode::reset() { clearChildren(); - auto config = getConfig(); - *this = YGNode{}; - if (config->useWebDefaults) { - style_.flexDirection() = YGFlexDirectionRow; - style_.alignContent() = YGAlignStretch; + auto webDefaults = useWebDefaults_; + *this = YGNode{getConfig()}; + if (webDefaults) { + useWebDefaults(); } - setConfig(config); } diff --git a/yoga/YGNode.h b/yoga/YGNode.h index bbd1b703..d368bde0 100644 --- a/yoga/YGNode.h +++ b/yoga/YGNode.h @@ -13,6 +13,8 @@ #include "YGStyle.h" #include "Yoga-internal.h" +YGConfigRef YGConfigGetDefault(); + struct YGNode { using MeasureWithContextFn = YGSize (*)(YGNode*, float, YGMeasureMode, float, YGMeasureMode, void*); @@ -28,6 +30,7 @@ private: bool measureUsesContext_ : 1; bool baselineUsesContext_ : 1; bool printUsesContext_ : 1; + bool useWebDefaults_ : 1; uint8_t reserved_ = 0; union { YGMeasureFunc noContext; @@ -58,6 +61,12 @@ private: void setMeasureFunc(decltype(measure_)); void setBaselineFunc(decltype(baseline_)); + void useWebDefaults() { + useWebDefaults_ = true; + style_.flexDirection() = YGFlexDirectionRow; + style_.alignContent() = YGAlignStretch; + } + // DANGER DANGER DANGER! // If the the node assigned to has children, we'd either have to deallocate // them (potentially incorrect) or ignore them (danger of leaks). Only ever @@ -68,8 +77,8 @@ private: using CompactValue = facebook::yoga::detail::CompactValue; public: - YGNode() : YGNode{nullptr} {} - explicit YGNode(const YGConfigRef newConfig) + YGNode() : YGNode{YGConfigGetDefault()} {} + explicit YGNode(const YGConfigRef config) : hasNewLayout_{true}, isReferenceBaseline_{false}, isDirty_{false}, @@ -77,7 +86,12 @@ public: measureUsesContext_{false}, baselineUsesContext_{false}, printUsesContext_{false}, - config_{newConfig} {}; + useWebDefaults_{config->useWebDefaults}, + config_{config} { + if (useWebDefaults_) { + useWebDefaults(); + } + }; ~YGNode() = default; // cleanup of owner/children relationships in YGNodeFree YGNode(YGNode&&); @@ -86,6 +100,9 @@ public: // Should we remove this? YGNode(const YGNode& node) = default; + // for RB fabric + YGNode(const YGNode& node, YGConfigRef config); + // assignment means potential leaks of existing children, or alternatively // freeing unowned memory, double free, or freeing stack memory. YGNode& operator=(const YGNode&) = delete; diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index f7322980..bcca9795 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -210,18 +210,13 @@ void YGNodeMarkDirtyAndPropogateToDescendants(const YGNodeRef node) { int32_t gConfigInstanceCount = 0; WIN_EXPORT YGNodeRef YGNodeNewWithConfig(const YGConfigRef config) { - const YGNodeRef node = new YGNode(); + const YGNodeRef node = new YGNode{config}; YGAssertWithConfig( config, node != nullptr, "Could not allocate memory for node"); #ifdef YG_ENABLE_EVENTS Event::publish(node, {config}); #endif - if (config->useWebDefaults) { - node->getStyle().flexDirection() = YGFlexDirectionRow; - node->getStyle().alignContent() = YGAlignStretch; - } - node->setConfig(config); return node; } From 54e863cef28f2702b37ab9b0089bd0707ce4cd92 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Tue, 21 May 2019 06:02:19 -0700 Subject: [PATCH 075/347] Remove `YGNode::setAndPropogateUseLegacyFlag` Summary: `YGNode::setAndPropogateUseLegacyFlag` was only used for debugging purposes. Here, we replace it with a free function in `Yoga.cpp`. Now that we have events, the diffing functionality should go into a separate debugging package and be implemented in terms of an event listener. Let's do that as soon as we can support multiple listeners. Reviewed By: SidharthGuglani Differential Revision: D15316863 fbshipit-source-id: db929eba7c2de8aa1550e362dd2c175929c0070e --- .../tests/com/facebook/yoga/YogaNodeTest.java | 2 +- yoga/YGNode.cpp | 7 ---- yoga/YGNode.h | 1 - yoga/Yoga.cpp | 37 +++++++++++-------- 4 files changed, 23 insertions(+), 24 deletions(-) diff --git a/java/tests/com/facebook/yoga/YogaNodeTest.java b/java/tests/com/facebook/yoga/YogaNodeTest.java index 8f894f3c..785330a8 100644 --- a/java/tests/com/facebook/yoga/YogaNodeTest.java +++ b/java/tests/com/facebook/yoga/YogaNodeTest.java @@ -254,7 +254,7 @@ public class YogaNodeTest { root_child0_child0_child0.setFlexShrink(1); root_child0_child0.addChildAt(root_child0_child0_child0, 0); root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED); - assertFalse(((YogaNodeJNIBase) root).getDoesLegacyStretchFlagAffectsLayout()); + assertTrue(((YogaNodeJNIBase) root).getDoesLegacyStretchFlagAffectsLayout()); } @Test diff --git a/yoga/YGNode.cpp b/yoga/YGNode.cpp index 172da871..81a4216e 100644 --- a/yoga/YGNode.cpp +++ b/yoga/YGNode.cpp @@ -539,13 +539,6 @@ bool YGNode::didUseLegacyFlag() { return didUseLegacyFlag; } -void YGNode::setAndPropogateUseLegacyFlag(bool useLegacyFlag) { - config_->useLegacyStretchBehaviour = useLegacyFlag; - for_each(children_.begin(), children_.end(), [=](YGNodeRef childNode) { - childNode->getConfig()->useLegacyStretchBehaviour = useLegacyFlag; - }); -} - void YGNode::setLayoutDoesLegacyFlagAffectsLayout( bool doesLegacyFlagAffectsLayout) { layout_.doesLegacyStretchFlagAffectsLayout = doesLegacyFlagAffectsLayout; diff --git a/yoga/YGNode.h b/yoga/YGNode.h index d368bde0..e5f1da3c 100644 --- a/yoga/YGNode.h +++ b/yoga/YGNode.h @@ -292,7 +292,6 @@ public: const float mainSize, const float crossSize, const float ownerWidth); - void setAndPropogateUseLegacyFlag(bool useLegacyFlag); void setLayoutDoesLegacyFlagAffectsLayout(bool doesLegacyFlagAffectsLayout); void setLayoutDidUseLegacyFlag(bool didUseLegacyFlag); void markDirtyAndPropogateDownwards(); diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index bcca9795..c4544ed9 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -3992,6 +3992,13 @@ static void YGRoundToPixelGrid( } } +static void unsetUseLegacyFlagRecursively(YGNodeRef node) { + node->getConfig()->useLegacyStretchBehaviour = false; + for (auto child : node->getChildren()) { + unsetUseLegacyFlagRecursively(child); + } +} + void YGNodeCalculateLayoutWithContext( const YGNodeRef node, const float ownerWidth, @@ -4096,16 +4103,16 @@ void YGNodeCalculateLayoutWithContext( // run experiments. if (node->getConfig()->shouldDiffLayoutWithoutLegacyStretchBehaviour && node->didUseLegacyFlag()) { - const YGNodeRef originalNode = YGNodeDeepClone(node); - originalNode->resolveDimension(); + const YGNodeRef nodeWithoutLegacyFlag = YGNodeDeepClone(node); + nodeWithoutLegacyFlag->resolveDimension(); // Recursively mark nodes as dirty - originalNode->markDirtyAndPropogateDownwards(); + nodeWithoutLegacyFlag->markDirtyAndPropogateDownwards(); gCurrentGenerationCount++; // Rerun the layout, and calculate the diff - originalNode->setAndPropogateUseLegacyFlag(false); + unsetUseLegacyFlagRecursively(nodeWithoutLegacyFlag); YGMarkerLayoutData layoutMarkerData; if (YGLayoutNodeInternal( - originalNode, + nodeWithoutLegacyFlag, width, height, ownerDirection, @@ -4115,37 +4122,37 @@ void YGNodeCalculateLayoutWithContext( ownerHeight, true, "initial", - originalNode->getConfig(), + nodeWithoutLegacyFlag->getConfig(), layoutMarkerData, layoutContext)) { - originalNode->setPosition( - originalNode->getLayout().direction, + nodeWithoutLegacyFlag->setPosition( + nodeWithoutLegacyFlag->getLayout().direction, ownerWidth, ownerHeight, ownerWidth); YGRoundToPixelGrid( - originalNode, - originalNode->getConfig()->pointScaleFactor, + nodeWithoutLegacyFlag, + nodeWithoutLegacyFlag->getConfig()->pointScaleFactor, 0.0f, 0.0f); // Set whether the two layouts are different or not. auto neededLegacyStretchBehaviour = - !originalNode->isLayoutTreeEqualToNode(*node); + !nodeWithoutLegacyFlag->isLayoutTreeEqualToNode(*node); node->setLayoutDoesLegacyFlagAffectsLayout(neededLegacyStretchBehaviour); #ifdef DEBUG - if (originalNode->getConfig()->printTree) { + if (nodeWithoutLegacyFlag->getConfig()->printTree) { YGNodePrint( - originalNode, + nodeWithoutLegacyFlag, (YGPrintOptions)( YGPrintOptionsLayout | YGPrintOptionsChildren | YGPrintOptionsStyle)); } #endif } - YGConfigFreeRecursive(originalNode); - YGNodeFreeRecursive(originalNode); + YGConfigFreeRecursive(nodeWithoutLegacyFlag); + YGNodeFreeRecursive(nodeWithoutLegacyFlag); } } From b74c0d476657bb9f4a76d2253a9cc74c15c4979a Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Wed, 22 May 2019 09:39:28 -0700 Subject: [PATCH 076/347] Remove comparison to `YGUndefined` *and* `0.0f` Summary: Removes a check introduced in D6969537, comparing `totalFlexGrowFactors` and `resolveFlexGrow` to both `0.0` *and* undefined. Reviewed By: SidharthGuglani Differential Revision: D15431425 fbshipit-source-id: 13c8f24e1bc8c49496097a6aa78e20ee5d3964a7 --- yoga/Yoga.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index c4544ed9..93ad4148 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -2859,11 +2859,8 @@ static void YGNodelayoutImpl( availableInnerMainDim = maxInnerMainDim; } else { if (!node->getConfig()->useLegacyStretchBehaviour && - ((YGFloatIsUndefined( - collectedFlexItemsValues.totalFlexGrowFactors) && - collectedFlexItemsValues.totalFlexGrowFactors == 0) || - (YGFloatIsUndefined(node->resolveFlexGrow()) && - node->resolveFlexGrow() == 0))) { + (collectedFlexItemsValues.totalFlexGrowFactors == 0 || + node->resolveFlexGrow() == 0)) { // If we don't have any children to flex or we can't flex the node // itself, space we've used is all space we need. Root node also // should be shrunk to minimum From cea3865c74634359b5bf9504353a2e90e304855a Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Wed, 29 May 2019 07:38:12 -0700 Subject: [PATCH 077/347] Deprecate `YGNode::setConfig` Summary: We want to phase out usage of config pointers on nodes. Setting configs is no longer needed, as a config is unly used during construction. Here we deprecate the setter, as it is no longer working as it used to (e.g. changing `useWebDefaults` after a node is constructed). Reviewed By: SidharthGuglani Differential Revision: D15416474 fbshipit-source-id: a2cc06cad0c5148cecce056ece5f141b3defe9a9 --- yoga/YGMacros.h | 12 ++++++++++++ yoga/YGNode.h | 3 ++- yoga/Yoga.cpp | 12 +++++++----- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/yoga/YGMacros.h b/yoga/YGMacros.h index 9c2989ac..badea8c3 100644 --- a/yoga/YGMacros.h +++ b/yoga/YGMacros.h @@ -30,3 +30,15 @@ #define YG_ENUM_BEGIN(name) enum name #define YG_ENUM_END(name) name #endif + +#ifdef __GNUC__ +#define YG_DEPRECATED __attribute__((deprecated)) +#elif defined(_MSC_VER) +#define YG_DEPRECATED __declspec(deprecated) +#elif __cplusplus >= 201402L +#if defined(__has_cpp_attribute) +#if __has_cpp_attribute(deprecated) +#define YG_DEPRECATED [[deprecated]] +#endif +#endif +#endif diff --git a/yoga/YGNode.h b/yoga/YGNode.h index e5f1da3c..1ef80142 100644 --- a/yoga/YGNode.h +++ b/yoga/YGNode.h @@ -11,6 +11,7 @@ #include "YGConfig.h" #include "YGLayout.h" #include "YGStyle.h" +#include "YGMacros.h" #include "Yoga-internal.h" YGConfigRef YGConfigGetDefault(); @@ -272,7 +273,7 @@ public: // TODO: rvalue override for setChildren - void setConfig(YGConfigRef config) { config_ = config; } + YG_DEPRECATED void setConfig(YGConfigRef config) { config_ = config; } void setDirty(bool isDirty); void setLayoutLastOwnerDirection(YGDirection direction); diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 93ad4148..da24a549 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -253,7 +253,13 @@ static YGConfigRef YGConfigClone(const YGConfig& oldConfig) { } static YGNodeRef YGNodeDeepClone(YGNodeRef oldNode) { - YGNodeRef node = YGNodeClone(oldNode); + auto config = YGConfigClone(*oldNode->getConfig()); + auto node = new YGNode{*oldNode, config}; + node->setOwner(nullptr); +#ifdef YG_ENABLE_EVENTS + Event::publish(node, {node->getConfig()}); +#endif + YGVector vec = YGVector(); vec.reserve(oldNode->getChildren().size()); YGNodeRef childNode = nullptr; @@ -264,10 +270,6 @@ static YGNodeRef YGNodeDeepClone(YGNodeRef oldNode) { } node->setChildren(vec); - if (oldNode->getConfig() != nullptr) { - node->setConfig(YGConfigClone(*(oldNode->getConfig()))); - } - return node; } From f304990656db0c1a08f7481be037216fd38a789d Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Fri, 31 May 2019 01:21:25 -0700 Subject: [PATCH 078/347] Use atomic list for event subscribers Summary: Replace the *copy on write* vector with an atomic pointer to a linked list. This allows to publish without locking a mutex, at the cost of the slower traversal of a linked list (a vector has better locality). At the moment, the typical use case is to have one subscriber, meaning that the afforementioned slower traversal is not a problem. Adding subscribers is implemented as atomic *compare and swap.* Reviewed By: SidharthGuglani Differential Revision: D15546964 fbshipit-source-id: 41bfa41f1ac6be5c9b6bf4288ea3271ee995877e --- yoga/event/event.cpp | 56 ++++++++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/yoga/event/event.cpp b/yoga/event/event.cpp index e2fe3588..02e70dce 100644 --- a/yoga/event/event.cpp +++ b/yoga/event/event.cpp @@ -5,51 +5,57 @@ * file in the root directory of this source tree. */ #include "event.h" +#include #include #include -#include - -#include namespace facebook { namespace yoga { namespace { -std::mutex& eventSubscribersMutex() { - static std::mutex subscribersMutex; - return subscribersMutex; -} +struct Node { + std::function subscriber = nullptr; + Node* next = nullptr; -std::shared_ptr& eventSubscribers() { - static auto subscribers = std::make_shared(); - return subscribers; + Node(std::function&& subscriber) + : subscriber{std::move(subscriber)} {} +}; + +std::atomic subscribers{nullptr}; + +Node* push(Node* newHead) { + Node* oldHead; + do { + oldHead = subscribers.load(std::memory_order_relaxed); + if (newHead != nullptr) { + newHead->next = oldHead; + } + } while (!subscribers.compare_exchange_weak( + oldHead, newHead, std::memory_order_release, std::memory_order_relaxed)); + return oldHead; } } // namespace void Event::reset() { - eventSubscribers() = std::make_shared(); + auto head = push(nullptr); + while (head != nullptr) { + auto current = head; + head = head->next; + delete current; + } } void Event::subscribe(std::function&& subscriber) { - std::lock_guard guard(eventSubscribersMutex()); - eventSubscribers() = - std::make_shared(*eventSubscribers()); - eventSubscribers()->push_back(subscriber); + push(new Node{std::move(subscriber)}); } void Event::publish(const YGNode& node, Type eventType, const Data& eventData) { - std::shared_ptr subscribers; - { - std::lock_guard guard(eventSubscribersMutex()); - subscribers = eventSubscribers(); - } - - for (auto& subscriber : *subscribers) { - if (subscriber) { - subscriber(node, eventType, eventData); - } + for (auto subscriber = subscribers.load(std::memory_order_relaxed); + subscriber != nullptr; + subscriber = subscriber->next) { + subscriber->subscriber(node, eventType, eventData); } } From 0908d3a17318c9dfcfb1aa82bbc48a5b06142226 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Fri, 31 May 2019 09:40:41 -0700 Subject: [PATCH 079/347] Data structure for exclusive writing Summary: Adds a data structure that holds a series of values that can be *borrowed* for exclusive writing. That means, that only a single consumer can write to any value owned by the data structure. In addition, the data structure exposes read access via iteration over all contained values. A typical use case would be a counter with thread-local values that are accumulated by readers in other parts of a programm. The design carefully avoids the use of atomics or locks for reading and writing. This approach avoids cache flushes and bus sync between cores. Borrowing and returning a value go through a central lock to guarantee the consistency of the underlying data structure. Values are allocated in a `std::forward_list`, which typically should avoid two values in the same cache line -- in that case, writing to one value would still cause cache flushing on other cores. An alternative approach would be to allocate values continuously on cache line boundaries (with padding between them). We can still change the code if the current approach turns out to be too naive (non-deterministic). Reviewed By: SidharthGuglani Differential Revision: D15535018 fbshipit-source-id: 212ac88bba9682a4c9d4326b46de0ee2fb5d9a7e --- util/BUCK | 30 ++++++ util/SingleWriterValueList.cpp | 32 ++++++ util/SingleWriterValueList.h | 136 ++++++++++++++++++++++++ util/SingleWriterValueListTest.cpp | 163 +++++++++++++++++++++++++++++ 4 files changed, 361 insertions(+) create mode 100644 util/BUCK create mode 100644 util/SingleWriterValueList.cpp create mode 100644 util/SingleWriterValueList.h create mode 100644 util/SingleWriterValueListTest.cpp diff --git a/util/BUCK b/util/BUCK new file mode 100644 index 00000000..5b0e9e00 --- /dev/null +++ b/util/BUCK @@ -0,0 +1,30 @@ +# Copyright (c) Facebook, Inc. and its affiliates. +# +# This source code is licensed under the MIT license found in the +# LICENSE file in the root directory of this source tree. +load("//tools/build_defs/oss:yoga_defs.bzl", "GTEST_TARGET", "LIBRARY_COMPILER_FLAGS", "yoga_cxx_library", "yoga_cxx_test") + +_TESTS = glob(["*Test.cpp"]) + +yoga_cxx_library( + name = "util", + srcs = glob( + ["*.cpp"], + exclude = _TESTS, + ), + header_namespace = "yoga/util", + exported_headers = glob(["*.h"]), + compiler_flags = LIBRARY_COMPILER_FLAGS, + tests = [":test"], + visibility = ["PUBLIC"], +) + +yoga_cxx_test( + name = "test", + srcs = _TESTS, + compiler_flags = LIBRARY_COMPILER_FLAGS, + deps = [ + ":util", + GTEST_TARGET, + ], +) diff --git a/util/SingleWriterValueList.cpp b/util/SingleWriterValueList.cpp new file mode 100644 index 00000000..753a2ad2 --- /dev/null +++ b/util/SingleWriterValueList.cpp @@ -0,0 +1,32 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#include "SingleWriterValueList.h" + +namespace facebook { +namespace yoga { +namespace detail { + +void* FreeList::getRaw() { + if (free_.size() == 0) + return nullptr; + + auto ptr = free_.top(); + free_.pop(); + return ptr; +} + +void FreeList::put(std::mutex& mutex, void* ptr) { + std::lock_guard lock{mutex}; + free_.push(ptr); +} + +FreeList::FreeList() = default; +FreeList::~FreeList() = default; + +} // namespace detail +} // namespace yoga +} // namespace facebook diff --git a/util/SingleWriterValueList.h b/util/SingleWriterValueList.h new file mode 100644 index 00000000..3207ae3c --- /dev/null +++ b/util/SingleWriterValueList.h @@ -0,0 +1,136 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#include +#include +#include +#include +#include +#include + +namespace facebook { +namespace yoga { + +namespace detail { + +class FreeList { + std::stack free_; + void* getRaw(); + +public: + FreeList(); + ~FreeList(); + + void put(std::mutex&, void*); + + template + T* get() { + return static_cast(getRaw()); + } +}; + +} // namespace detail + +/// SingleWriterValueList is a data structure that holds a list of values. Each +/// value can be borrowed for exclusive writing, and will not be exposed to +/// another borrower until returned. +/// Additionaly, the whole list of values can be accessed for reading via const +/// iterators. Read consistency depends on CPU internals, i.e. whether values +/// are written to memory atomically. +/// +/// A typical usage scenario would be a set of threads, where each thread +/// borrows a value for lock free writing, e.g. as a thread local variable. This +/// avoids the usage of atomics, or locking of shared memory, which both can +/// lead to increased latency due to CPU cache flushes and waits. +/// +/// Values are heap allocated (via forward_list), which typically will avoid +/// multiple values being allocated in the same CPU cache line, which would also +/// lead to cache flushing. +/// +/// SingleWriterValueList never deallocates, to guarantee the validity of +/// references and iterators. However, memory returned by a borrower can be +/// borrowed again. +/// +/// SingleWriterValueList supports return policies as second template parameter, +/// i.e. an optional mutation of values after a borrower returns them. The +/// default policy is to do nothing. SingleWriterValueList::resetPolicy is a +/// convenience method that will move assign the default value of a type. +/// +/// Example: +/// +/// static SingleWriterValueList counters; +/// thread_local auto localCounter = counters.borrow(); +/// +/// /* per thread */ +/// localCounter =+ n; +/// +/// /* anywhere */ +/// std::accumulate(counters.begin(), counters.end(), 0); +/// +template +class SingleWriterValueList { + std::forward_list values_{}; + std::mutex acquireMutex_{}; + detail::FreeList freeValuesList_{}; + + T* allocValue() { + values_.emplace_front(); + return &values_.front(); + } + + void returnRef(T* value) { + if (ReturnPolicy != nullptr) { + ReturnPolicy(*value); + } + freeValuesList_.put(acquireMutex_, value); + } + +public: + using const_iterator = decltype(values_.cbegin()); + + /// RAII representation of a single value, borrowed for exclusive writing. + /// Instances cannot be copied, and will return the borrowed value to the + /// owner upon destruction. + class Borrowed { + T* value_; + SingleWriterValueList* owner_; + + public: + Borrowed(T* value, SingleWriterValueList* owner) + : value_{value}, owner_{owner} {} + ~Borrowed() { + if (owner_ != nullptr && value_ != nullptr) { + owner_->returnRef(value_); + } + } + + Borrowed(Borrowed&& other) = default; + Borrowed& operator=(Borrowed&& other) = default; + + // no copies allowed + Borrowed(const Borrowed&) = delete; + Borrowed& operator=(const Borrowed&) = delete; + + T& get() { return *value_; } + T& operator*() { return get(); } + }; + + Borrowed borrow() { + std::lock_guard lock{acquireMutex_}; + T* value = freeValuesList_.get(); + return {value != nullptr ? value : allocValue(), this}; + } + + const_iterator cbegin() const { return values_.cbegin(); }; + const_iterator cend() const { return values_.cend(); }; + const_iterator begin() const { return cbegin(); }; + const_iterator end() const { return cend(); }; + + static void resetPolicy(T& value) { value = std::move(T{}); } +}; + +} // namespace yoga +} // namespace facebook diff --git a/util/SingleWriterValueListTest.cpp b/util/SingleWriterValueListTest.cpp new file mode 100644 index 00000000..c554e646 --- /dev/null +++ b/util/SingleWriterValueListTest.cpp @@ -0,0 +1,163 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#include +#include + +#include +#include +#include + +namespace facebook { +namespace yoga { + +static_assert( + !std::is_copy_constructible>::value, + "SingleWriterValueList must not be copyable"); +static_assert( + !std::is_copy_assignable>::value, + "SingleWriterValueList must not be copyable"); +static_assert( + !std::is_copy_constructible::Borrowed>::value, + "SingleWriterValueList::Borrowed must not be copyable"); +static_assert( + !std::is_copy_assignable::Borrowed>::value, + "SingleWriterValueList::Borrowed must not be copyable"); +static_assert( + std::is_move_constructible::Borrowed>::value, + "SingleWriterValueList::Borrowed must be movable"); +static_assert( + std::is_move_assignable::Borrowed>::value, + "SingleWriterValueList::Borrowed must be movable"); + +TEST(SingleWriterValueList, borrowsAreExclusive) { + SingleWriterValueList x{}; + + auto a = x.borrow(); + auto b = x.borrow(); + + ASSERT_NE(&a.get(), &b.get()); +} + +TEST(SingleWriterValueList, borrowsSupportDereference) { + SingleWriterValueList x{}; + + auto a = x.borrow(); + *a = 123; + + ASSERT_EQ(*a, 123); +} + +TEST(SingleWriterValueList, borrowsHaveGetMethod) { + SingleWriterValueList x{}; + + auto a = x.borrow(); + a.get() = 123; + + ASSERT_EQ(a.get(), 123); +} + +TEST(SingleWriterValueList, exposesBorrowsViaIterator) { + SingleWriterValueList x{}; + + auto a = x.borrow(); + auto b = x.borrow(); + + *a = 12; + *b = 34; + + int sum = 0; + for (auto& i : x) { + sum += i; + } + ASSERT_EQ(sum, 12 + 34); +} + +TEST(SingleWriterValueList, exposesBorrowsViaConstIterator) { + SingleWriterValueList x{}; + + auto a = x.borrow(); + auto b = x.borrow(); + + *a = 12; + *b = 34; + + ASSERT_EQ(std::accumulate(x.cbegin(), x.cend(), 0), 12 + 34); +} + +TEST(SingleWriterValueList, doesNotDeallocateReturnedBorrows) { + SingleWriterValueList x{}; + + std::unordered_set values; + { + auto a = x.borrow(); + auto b = x.borrow(); + values.insert(&a.get()); + values.insert(&b.get()); + } + + auto it = x.begin(); + + ASSERT_NE(it, x.end()); + ASSERT_NE(values.find(&*it), values.end()); + + ASSERT_NE(++it, x.end()); + ASSERT_NE(values.find(&*it), values.end()); +} + +TEST(SingleWriterValueList, reusesReturnedBorrows) { + SingleWriterValueList x{}; + + int* firstBorrow; + { + auto a = x.borrow(); + firstBorrow = &a.get(); + } + + auto b = x.borrow(); + + ASSERT_EQ(&b.get(), firstBorrow); +} + +TEST(SingleWriterValueList, keepsValuesAfterReturning) { + SingleWriterValueList x{}; + + { + auto a = x.borrow(); + *a = 123; + } + + ASSERT_EQ(*x.begin(), 123); +} + +static void addOne(int& v) { + v += 1; +} + +TEST(SingleWriterValueList, allowsCustomReturnPolicy) { + SingleWriterValueList x{}; + + { + auto a = x.borrow(); + *a = 123; + } + + ASSERT_EQ(*x.begin(), 124); +} + +TEST(SingleWriterValueList, hasConvenienceResetPolicy) { + SingleWriterValueList::resetPolicy> x{}; + + { + auto a = x.borrow(); + *a = 123; + } + + ASSERT_EQ(*x.begin(), 0); +} + +} // namespace yoga +} // namespace facebook From 195c166efed00cdfab42a564d52b9ec4bc7125a3 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Fri, 31 May 2019 15:52:40 -0700 Subject: [PATCH 080/347] Back out "[Yoga] Remove comparison to `YGUndefined` *and* `0.0f`" Summary: Original commit changeset: 13c8f24e1bc8 Reviewed By: fabiomassimo Differential Revision: D15583502 fbshipit-source-id: efc6175f6c4925a383fea723195c073f49e2eff1 --- yoga/Yoga.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index da24a549..d41a1201 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -2861,8 +2861,11 @@ static void YGNodelayoutImpl( availableInnerMainDim = maxInnerMainDim; } else { if (!node->getConfig()->useLegacyStretchBehaviour && - (collectedFlexItemsValues.totalFlexGrowFactors == 0 || - node->resolveFlexGrow() == 0)) { + ((YGFloatIsUndefined( + collectedFlexItemsValues.totalFlexGrowFactors) && + collectedFlexItemsValues.totalFlexGrowFactors == 0) || + (YGFloatIsUndefined(node->resolveFlexGrow()) && + node->resolveFlexGrow() == 0))) { // If we don't have any children to flex or we can't flex the node // itself, space we've used is all space we need. Root node also // should be shrunk to minimum From 8b17459254930f2933af89d11b268834397dd501 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 3 Jun 2019 15:57:59 -0700 Subject: [PATCH 081/347] moved PtrJNode map to YGJtypes.h and passing layout context as data in LayoutPassEnd Event Summary: Move PtrJNodeMap to header file so that it can be accessed in events subscribers outside yoga Reviewed By: davidaurelio Differential Revision: D15602627 fbshipit-source-id: bb5bd5bbf8dcb279f5f87a4fd7287909d4e895d8 --- java/jni/YGJNI.cpp | 28 ---------------------------- java/jni/YGJTypes.h | 33 +++++++++++++++++++++++++++++++++ yoga/Yoga.cpp | 2 +- yoga/event/event.h | 5 +++++ 4 files changed, 39 insertions(+), 29 deletions(-) diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp index 28011661..c0b1a99b 100644 --- a/java/jni/YGJNI.cpp +++ b/java/jni/YGJNI.cpp @@ -75,34 +75,6 @@ const short int LAYOUT_BORDER_START_INDEX = 14; bool useBatchingForLayoutOutputs; -class PtrJNodeMap { - using JNodeArray = JArrayClass; - std::map ptrsToIdxs_; - alias_ref javaNodes_; - -public: - PtrJNodeMap() : ptrsToIdxs_{}, javaNodes_{} {} - PtrJNodeMap( - alias_ref nativePointers, - alias_ref javaNodes) - : javaNodes_{javaNodes} { - auto pin = nativePointers->pinCritical(); - auto ptrs = pin.get(); - for (size_t i = 0, n = pin.size(); i < n; ++i) { - ptrsToIdxs_[(YGNodeRef) ptrs[i]] = i; - } - } - - local_ref ref(YGNodeRef node) { - auto idx = ptrsToIdxs_.find(node); - if (idx == ptrsToIdxs_.end()) { - return local_ref{}; - } else { - return javaNodes_->getElement(idx->second); - } - } -}; - namespace { union YGNodeContext { diff --git a/java/jni/YGJTypes.h b/java/jni/YGJTypes.h index c2c5fc51..e93d74db 100644 --- a/java/jni/YGJTypes.h +++ b/java/jni/YGJTypes.h @@ -6,6 +6,11 @@ */ #include #include +#include +#include + +using namespace facebook::jni; +using namespace std; struct JYogaNode : public facebook::jni::JavaClass { static constexpr auto kJavaDescriptor = "Lcom/facebook/yoga/YogaNodeJNIBase;"; @@ -28,3 +33,31 @@ struct JYogaLogger : public facebook::jni::JavaClass { facebook::jni::alias_ref, jstring); }; + +class PtrJNodeMap { + using JNodeArray = JArrayClass; + std::map ptrsToIdxs_; + alias_ref javaNodes_; + +public: + PtrJNodeMap() : ptrsToIdxs_{}, javaNodes_{} {} + PtrJNodeMap( + alias_ref nativePointers, + alias_ref javaNodes) + : javaNodes_{javaNodes} { + auto pin = nativePointers->pinCritical(); + auto ptrs = pin.get(); + for (size_t i = 0, n = pin.size(); i < n; ++i) { + ptrsToIdxs_[(YGNodeRef) ptrs[i]] = i; + } + } + + local_ref ref(YGNodeRef node) { + auto idx = ptrsToIdxs_.find(node); + if (idx == ptrsToIdxs_.end()) { + return local_ref{}; + } else { + return javaNodes_->getElement(idx->second); + } + } +}; diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index d41a1201..7baab631 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -4093,7 +4093,7 @@ void YGNodeCalculateLayoutWithContext( marker = nullptr; #ifdef YG_ENABLE_EVENTS - Event::publish(node); + Event::publish(node, {layoutContext}); #endif // We want to get rid off `useLegacyStretchBehaviour` from YGConfig. But we diff --git a/yoga/event/event.h b/yoga/event/event.h index 578d2f3a..1a7c881f 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -71,5 +71,10 @@ struct Event::TypedData { YGConfig* config; }; +template <> +struct Event::TypedData { + void* layoutContext; +}; + } // namespace yoga } // namespace facebook From b1e6793460cd3b2125944f0024f2b672b8727595 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 3 Jun 2019 15:57:59 -0700 Subject: [PATCH 082/347] passing layout context and getting local reference from it Summary: We are passing layout context from yoga as event data for Layout Pass End event and it is being then used to get the local reference of node so that we can pass it as method parameter to java layer Reviewed By: davidaurelio Differential Revision: D15602923 fbshipit-source-id: 54b25956af098700cea25c4f7f8ffe0b9117432c --- java/BUCK | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/BUCK b/java/BUCK index 3f29b3c8..18bc6f8e 100644 --- a/java/BUCK +++ b/java/BUCK @@ -13,8 +13,8 @@ CXX_LIBRARY_WHITELIST_FOR_TESTS = CXX_LIBRARY_WHITELIST + [ yoga_cxx_library( name = "jni", srcs = glob(["jni/*.cpp"]), - headers = glob(["jni/*.h"]), - header_namespace = "", + header_namespace = "yoga/java", + exported_headers = glob(["jni/*.h"]), allow_jni_merging = True, compiler_flags = [ "-fno-omit-frame-pointer", From 586eb6102a4ee405ba60ec6289e625167e2f574b Mon Sep 17 00:00:00 2001 From: Joshua Gross Date: Mon, 3 Jun 2019 19:53:49 -0700 Subject: [PATCH 083/347] Revert D15602923: [yoga] passing layout context and getting local reference from it Differential Revision: D15602923 Original commit changeset: 54b25956af09 fbshipit-source-id: 8ce26a7f00d76bd5ade18f32ad14d943118a6f31 --- java/BUCK | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/BUCK b/java/BUCK index 18bc6f8e..3f29b3c8 100644 --- a/java/BUCK +++ b/java/BUCK @@ -13,8 +13,8 @@ CXX_LIBRARY_WHITELIST_FOR_TESTS = CXX_LIBRARY_WHITELIST + [ yoga_cxx_library( name = "jni", srcs = glob(["jni/*.cpp"]), - header_namespace = "yoga/java", - exported_headers = glob(["jni/*.h"]), + headers = glob(["jni/*.h"]), + header_namespace = "", allow_jni_merging = True, compiler_flags = [ "-fno-omit-frame-pointer", From 4a4325afb61f44e7a88d7e1919cbf0108c727729 Mon Sep 17 00:00:00 2001 From: Joshua Gross Date: Mon, 3 Jun 2019 19:53:49 -0700 Subject: [PATCH 084/347] Revert D15602627: [yoga] moved PtrJNode map to YGJtypes.h and passing layout context as data in LayoutPassEnd Event Differential Revision: D15602627 Original commit changeset: bb5bd5bbf8dc fbshipit-source-id: 5ae08826eb706c3794c36738cb9625f82b58641e --- java/jni/YGJNI.cpp | 28 ++++++++++++++++++++++++++++ java/jni/YGJTypes.h | 33 --------------------------------- yoga/Yoga.cpp | 2 +- yoga/event/event.h | 5 ----- 4 files changed, 29 insertions(+), 39 deletions(-) diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp index c0b1a99b..28011661 100644 --- a/java/jni/YGJNI.cpp +++ b/java/jni/YGJNI.cpp @@ -75,6 +75,34 @@ const short int LAYOUT_BORDER_START_INDEX = 14; bool useBatchingForLayoutOutputs; +class PtrJNodeMap { + using JNodeArray = JArrayClass; + std::map ptrsToIdxs_; + alias_ref javaNodes_; + +public: + PtrJNodeMap() : ptrsToIdxs_{}, javaNodes_{} {} + PtrJNodeMap( + alias_ref nativePointers, + alias_ref javaNodes) + : javaNodes_{javaNodes} { + auto pin = nativePointers->pinCritical(); + auto ptrs = pin.get(); + for (size_t i = 0, n = pin.size(); i < n; ++i) { + ptrsToIdxs_[(YGNodeRef) ptrs[i]] = i; + } + } + + local_ref ref(YGNodeRef node) { + auto idx = ptrsToIdxs_.find(node); + if (idx == ptrsToIdxs_.end()) { + return local_ref{}; + } else { + return javaNodes_->getElement(idx->second); + } + } +}; + namespace { union YGNodeContext { diff --git a/java/jni/YGJTypes.h b/java/jni/YGJTypes.h index e93d74db..c2c5fc51 100644 --- a/java/jni/YGJTypes.h +++ b/java/jni/YGJTypes.h @@ -6,11 +6,6 @@ */ #include #include -#include -#include - -using namespace facebook::jni; -using namespace std; struct JYogaNode : public facebook::jni::JavaClass { static constexpr auto kJavaDescriptor = "Lcom/facebook/yoga/YogaNodeJNIBase;"; @@ -33,31 +28,3 @@ struct JYogaLogger : public facebook::jni::JavaClass { facebook::jni::alias_ref, jstring); }; - -class PtrJNodeMap { - using JNodeArray = JArrayClass; - std::map ptrsToIdxs_; - alias_ref javaNodes_; - -public: - PtrJNodeMap() : ptrsToIdxs_{}, javaNodes_{} {} - PtrJNodeMap( - alias_ref nativePointers, - alias_ref javaNodes) - : javaNodes_{javaNodes} { - auto pin = nativePointers->pinCritical(); - auto ptrs = pin.get(); - for (size_t i = 0, n = pin.size(); i < n; ++i) { - ptrsToIdxs_[(YGNodeRef) ptrs[i]] = i; - } - } - - local_ref ref(YGNodeRef node) { - auto idx = ptrsToIdxs_.find(node); - if (idx == ptrsToIdxs_.end()) { - return local_ref{}; - } else { - return javaNodes_->getElement(idx->second); - } - } -}; diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 7baab631..d41a1201 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -4093,7 +4093,7 @@ void YGNodeCalculateLayoutWithContext( marker = nullptr; #ifdef YG_ENABLE_EVENTS - Event::publish(node, {layoutContext}); + Event::publish(node); #endif // We want to get rid off `useLegacyStretchBehaviour` from YGConfig. But we diff --git a/yoga/event/event.h b/yoga/event/event.h index 1a7c881f..578d2f3a 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -71,10 +71,5 @@ struct Event::TypedData { YGConfig* config; }; -template <> -struct Event::TypedData { - void* layoutContext; -}; - } // namespace yoga } // namespace facebook From a4bdd9cd9b459cad7540d7ad7e099105a14e1a73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rain=20=E2=81=A3?= Date: Thu, 6 Jun 2019 19:36:56 -0700 Subject: [PATCH 085/347] standardize C-like MIT copyright headers throughout fbsource Summary: `/*` is the standard throughout open source code. For example, Firefox uses single /*: https://hg.mozilla.org/mozilla-central/file/21d22b2f541258d3d1cf96c7ba5ad73e96e616b5/gfx/ipc/CompositorWidgetVsyncObserver.cpp#l3 In addition, Rust considers `/**` to be a doc comment (similar to Javadoc) and having such a comment at the beginning of the file causes `rustc` to barf. Note that some JavaScript tooling requires `/**`. This is OK since JavaScript files were not covered by the linter in the first place, but it would be good to have that tooling fixed too. Reviewed By: zertosh Differential Revision: D15640366 fbshipit-source-id: b4ed4599071516364d6109720750d6a43304c089 --- YogaKit/Source/UIView+Yoga.h | 2 +- YogaKit/Source/YGLayout+Private.h | 2 +- YogaKit/Source/YGLayout.h | 2 +- benchmark/YGBenchmark.c | 2 +- csharp/Yoga/YGInterop.cpp | 2 +- csharp/Yoga/YGInterop.h | 2 +- csharp/Yoga/dllmain.cpp | 2 +- csharp/Yoga/resource.h | 6 ++++++ csharp/Yoga/stdafx.cpp | 2 +- csharp/Yoga/stdafx.h | 2 +- csharp/Yoga/targetver.h | 2 +- java/jni/YGJNI.cpp | 2 +- java/jni/YGJTypes.cpp | 2 +- java/jni/YGJTypes.h | 2 +- javascript/sources/Config.cc | 2 +- javascript/sources/Config.hh | 2 +- javascript/sources/Layout.hh | 2 +- javascript/sources/Node.cc | 2 +- javascript/sources/Node.hh | 2 +- javascript/sources/Size.hh | 2 +- javascript/sources/Value.hh | 2 +- javascript/sources/global.hh | 2 +- javascript/sources/nbind.cc | 2 +- tests/CompactValueTest.cpp | 2 +- tests/EventsTest.cpp | 2 +- tests/InstrumentationTest.cpp | 2 +- tests/YGAbsolutePositionTest.cpp | 2 +- tests/YGAlignBaselineTest.cpp | 2 +- tests/YGAlignContentTest.cpp | 2 +- tests/YGAlignItemsTest.cpp | 2 +- tests/YGAlignSelfTest.cpp | 2 +- tests/YGAndroidNewsFeed.cpp | 2 +- tests/YGAspectRatioTest.cpp | 2 +- tests/YGBaselineFuncTest.cpp | 2 +- tests/YGBorderTest.cpp | 2 +- tests/YGComputedMarginTest.cpp | 2 +- tests/YGComputedPaddingTest.cpp | 2 +- tests/YGConfigTest.cpp | 2 +- tests/YGDefaultValuesTest.cpp | 2 +- tests/YGDimensionTest.cpp | 2 +- tests/YGDirtiedTest.cpp | 2 +- tests/YGDirtyMarkingTest.cpp | 2 +- tests/YGDisplayTest.cpp | 2 +- tests/YGEdgeTest.cpp | 2 +- tests/YGFlexDirectionTest.cpp | 2 +- tests/YGFlexTest.cpp | 2 +- tests/YGFlexWrapTest.cpp | 2 +- tests/YGFloatOptionalTest.cpp | 2 +- tests/YGHadOverflowTest.cpp | 2 +- tests/YGInfiniteHeightTest.cpp | 2 +- tests/YGJustifyContentTest.cpp | 2 +- tests/YGLayoutDiffingTest.cpp | 2 +- tests/YGLoggerTest.cpp | 2 +- tests/YGMarginTest.cpp | 2 +- tests/YGMeasureCacheTest.cpp | 2 +- tests/YGMeasureModeTest.cpp | 2 +- tests/YGMeasureTest.cpp | 2 +- tests/YGMinMaxDimensionTest.cpp | 2 +- tests/YGNodeCallbackTest.cpp | 2 +- tests/YGNodeChildTest.cpp | 2 +- tests/YGPaddingTest.cpp | 2 +- tests/YGPercentageTest.cpp | 2 +- tests/YGPersistenceTest.cpp | 2 +- tests/YGRelayoutTest.cpp | 2 +- tests/YGRoundingFunctionTest.cpp | 2 +- tests/YGRoundingMeasureFuncTest.cpp | 2 +- tests/YGRoundingTest.cpp | 2 +- tests/YGSizeOverflowTest.cpp | 2 +- tests/YGStyleAccessorsTest.cpp | 2 +- tests/YGStyleTest.cpp | 2 +- tests/YGTraversalTest.cpp | 2 +- tests/YGTreeMutationTest.cpp | 2 +- tests/YGValueTest.cpp | 2 +- tests/YGZeroOutLayoutRecursivlyTest.cpp | 2 +- testutil/TestUtil.java | 2 +- testutil/jni.cpp | 2 +- testutil/testutil.cpp | 2 +- testutil/testutil.h | 2 +- util/SingleWriterValueList.cpp | 2 +- util/SingleWriterValueList.h | 2 +- util/SingleWriterValueListTest.cpp | 2 +- yoga/CompactValue.h | 2 +- yoga/Utils.cpp | 2 +- yoga/Utils.h | 2 +- yoga/YGConfig.cpp | 2 +- yoga/YGConfig.h | 2 +- yoga/YGEnums.cpp | 2 +- yoga/YGEnums.h | 2 +- yoga/YGFloatOptional.h | 2 +- yoga/YGLayout.cpp | 2 +- yoga/YGLayout.h | 2 +- yoga/YGMacros.h | 2 +- yoga/YGMarker.cpp | 2 +- yoga/YGMarker.h | 2 +- yoga/YGNode.cpp | 2 +- yoga/YGNode.h | 2 +- yoga/YGNodePrint.cpp | 2 +- yoga/YGNodePrint.h | 2 +- yoga/YGStyle.cpp | 2 +- yoga/YGStyle.h | 2 +- yoga/YGValue.cpp | 2 +- yoga/YGValue.h | 2 +- yoga/Yoga-internal.h | 2 +- yoga/Yoga.cpp | 2 +- yoga/Yoga.h | 2 +- yoga/event/event.cpp | 2 +- yoga/event/event.h | 2 +- yoga/instrumentation.h | 2 +- yoga/log.cpp | 2 +- yoga/log.h | 2 +- 110 files changed, 115 insertions(+), 109 deletions(-) diff --git a/YogaKit/Source/UIView+Yoga.h b/YogaKit/Source/UIView+Yoga.h index 6b012bb6..092c9dcd 100644 --- a/YogaKit/Source/UIView+Yoga.h +++ b/YogaKit/Source/UIView+Yoga.h @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/YogaKit/Source/YGLayout+Private.h b/YogaKit/Source/YGLayout+Private.h index 601eda18..8075ca42 100644 --- a/YogaKit/Source/YGLayout+Private.h +++ b/YogaKit/Source/YGLayout+Private.h @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/YogaKit/Source/YGLayout.h b/YogaKit/Source/YGLayout.h index c8ee2e84..821fda71 100644 --- a/YogaKit/Source/YGLayout.h +++ b/YogaKit/Source/YGLayout.h @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/benchmark/YGBenchmark.c b/benchmark/YGBenchmark.c index 2b534378..eedf7646 100644 --- a/benchmark/YGBenchmark.c +++ b/benchmark/YGBenchmark.c @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/csharp/Yoga/YGInterop.cpp b/csharp/Yoga/YGInterop.cpp index 30a8979b..fcfd9df2 100644 --- a/csharp/Yoga/YGInterop.cpp +++ b/csharp/Yoga/YGInterop.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/csharp/Yoga/YGInterop.h b/csharp/Yoga/YGInterop.h index 597a2cc8..0169e4c3 100644 --- a/csharp/Yoga/YGInterop.h +++ b/csharp/Yoga/YGInterop.h @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/csharp/Yoga/dllmain.cpp b/csharp/Yoga/dllmain.cpp index 88c48a02..a995726f 100644 --- a/csharp/Yoga/dllmain.cpp +++ b/csharp/Yoga/dllmain.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/csharp/Yoga/resource.h b/csharp/Yoga/resource.h index 3a28c6f4..706e68ed 100644 --- a/csharp/Yoga/resource.h +++ b/csharp/Yoga/resource.h @@ -1,3 +1,9 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ //{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. // Used by Yoga.rc diff --git a/csharp/Yoga/stdafx.cpp b/csharp/Yoga/stdafx.cpp index 1d59258a..d5d02700 100644 --- a/csharp/Yoga/stdafx.cpp +++ b/csharp/Yoga/stdafx.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/csharp/Yoga/stdafx.h b/csharp/Yoga/stdafx.h index 3d3c3aec..2c31d527 100644 --- a/csharp/Yoga/stdafx.h +++ b/csharp/Yoga/stdafx.h @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/csharp/Yoga/targetver.h b/csharp/Yoga/targetver.h index f74769cf..7e6afcdd 100644 --- a/csharp/Yoga/targetver.h +++ b/csharp/Yoga/targetver.h @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp index 28011661..5a2ce90c 100644 --- a/java/jni/YGJNI.cpp +++ b/java/jni/YGJNI.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/java/jni/YGJTypes.cpp b/java/jni/YGJTypes.cpp index 6be24495..032be5c5 100644 --- a/java/jni/YGJTypes.cpp +++ b/java/jni/YGJTypes.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/java/jni/YGJTypes.h b/java/jni/YGJTypes.h index c2c5fc51..21bf3959 100644 --- a/java/jni/YGJTypes.h +++ b/java/jni/YGJTypes.h @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/javascript/sources/Config.cc b/javascript/sources/Config.cc index 675ccfe0..585dd66d 100644 --- a/javascript/sources/Config.cc +++ b/javascript/sources/Config.cc @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/javascript/sources/Config.hh b/javascript/sources/Config.hh index a1b75131..e1ee91e3 100644 --- a/javascript/sources/Config.hh +++ b/javascript/sources/Config.hh @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/javascript/sources/Layout.hh b/javascript/sources/Layout.hh index c222236d..be9564de 100644 --- a/javascript/sources/Layout.hh +++ b/javascript/sources/Layout.hh @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/javascript/sources/Node.cc b/javascript/sources/Node.cc index f49c2279..5cfb66d0 100644 --- a/javascript/sources/Node.cc +++ b/javascript/sources/Node.cc @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/javascript/sources/Node.hh b/javascript/sources/Node.hh index 5bd7956b..861f9c7a 100644 --- a/javascript/sources/Node.hh +++ b/javascript/sources/Node.hh @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/javascript/sources/Size.hh b/javascript/sources/Size.hh index 2bcd28dd..95a4084c 100644 --- a/javascript/sources/Size.hh +++ b/javascript/sources/Size.hh @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/javascript/sources/Value.hh b/javascript/sources/Value.hh index 9191dcf3..406f268c 100644 --- a/javascript/sources/Value.hh +++ b/javascript/sources/Value.hh @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/javascript/sources/global.hh b/javascript/sources/global.hh index 15a21f2e..ea9d476b 100644 --- a/javascript/sources/global.hh +++ b/javascript/sources/global.hh @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/javascript/sources/nbind.cc b/javascript/sources/nbind.cc index 05f56fa9..5a6b459f 100644 --- a/javascript/sources/nbind.cc +++ b/javascript/sources/nbind.cc @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/CompactValueTest.cpp b/tests/CompactValueTest.cpp index 0faf1fca..f8f55ae7 100644 --- a/tests/CompactValueTest.cpp +++ b/tests/CompactValueTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/EventsTest.cpp b/tests/EventsTest.cpp index 99c19d94..44ade6fd 100644 --- a/tests/EventsTest.cpp +++ b/tests/EventsTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/InstrumentationTest.cpp b/tests/InstrumentationTest.cpp index 435aabc7..e4128314 100644 --- a/tests/InstrumentationTest.cpp +++ b/tests/InstrumentationTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGAbsolutePositionTest.cpp b/tests/YGAbsolutePositionTest.cpp index 6e76b454..eea56132 100644 --- a/tests/YGAbsolutePositionTest.cpp +++ b/tests/YGAbsolutePositionTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGAlignBaselineTest.cpp b/tests/YGAlignBaselineTest.cpp index 074223e1..dc56a8a0 100644 --- a/tests/YGAlignBaselineTest.cpp +++ b/tests/YGAlignBaselineTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGAlignContentTest.cpp b/tests/YGAlignContentTest.cpp index d988b9d7..1bb3dce5 100644 --- a/tests/YGAlignContentTest.cpp +++ b/tests/YGAlignContentTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGAlignItemsTest.cpp b/tests/YGAlignItemsTest.cpp index 345b6a29..2a581da8 100644 --- a/tests/YGAlignItemsTest.cpp +++ b/tests/YGAlignItemsTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGAlignSelfTest.cpp b/tests/YGAlignSelfTest.cpp index 8bcacff7..afa3870a 100644 --- a/tests/YGAlignSelfTest.cpp +++ b/tests/YGAlignSelfTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGAndroidNewsFeed.cpp b/tests/YGAndroidNewsFeed.cpp index db3753d6..bb4125df 100644 --- a/tests/YGAndroidNewsFeed.cpp +++ b/tests/YGAndroidNewsFeed.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGAspectRatioTest.cpp b/tests/YGAspectRatioTest.cpp index 217a8689..3d0916b5 100644 --- a/tests/YGAspectRatioTest.cpp +++ b/tests/YGAspectRatioTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGBaselineFuncTest.cpp b/tests/YGBaselineFuncTest.cpp index af22785f..db336951 100644 --- a/tests/YGBaselineFuncTest.cpp +++ b/tests/YGBaselineFuncTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGBorderTest.cpp b/tests/YGBorderTest.cpp index 75571ccc..39318214 100644 --- a/tests/YGBorderTest.cpp +++ b/tests/YGBorderTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGComputedMarginTest.cpp b/tests/YGComputedMarginTest.cpp index 8468dd6b..c87118d7 100644 --- a/tests/YGComputedMarginTest.cpp +++ b/tests/YGComputedMarginTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGComputedPaddingTest.cpp b/tests/YGComputedPaddingTest.cpp index 2a22607f..faedb9e5 100644 --- a/tests/YGComputedPaddingTest.cpp +++ b/tests/YGComputedPaddingTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGConfigTest.cpp b/tests/YGConfigTest.cpp index d43cb29f..a6b02adc 100644 --- a/tests/YGConfigTest.cpp +++ b/tests/YGConfigTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGDefaultValuesTest.cpp b/tests/YGDefaultValuesTest.cpp index e8725f77..f77b1924 100644 --- a/tests/YGDefaultValuesTest.cpp +++ b/tests/YGDefaultValuesTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGDimensionTest.cpp b/tests/YGDimensionTest.cpp index 9baf4006..c4e50718 100644 --- a/tests/YGDimensionTest.cpp +++ b/tests/YGDimensionTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGDirtiedTest.cpp b/tests/YGDirtiedTest.cpp index e7792c62..eec62454 100644 --- a/tests/YGDirtiedTest.cpp +++ b/tests/YGDirtiedTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGDirtyMarkingTest.cpp b/tests/YGDirtyMarkingTest.cpp index 984e7228..6c51a39c 100644 --- a/tests/YGDirtyMarkingTest.cpp +++ b/tests/YGDirtyMarkingTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGDisplayTest.cpp b/tests/YGDisplayTest.cpp index 97a9e9f8..ebd2bcd5 100644 --- a/tests/YGDisplayTest.cpp +++ b/tests/YGDisplayTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGEdgeTest.cpp b/tests/YGEdgeTest.cpp index fb907df6..c41aa78f 100644 --- a/tests/YGEdgeTest.cpp +++ b/tests/YGEdgeTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGFlexDirectionTest.cpp b/tests/YGFlexDirectionTest.cpp index 7dbcc254..976ca82a 100644 --- a/tests/YGFlexDirectionTest.cpp +++ b/tests/YGFlexDirectionTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGFlexTest.cpp b/tests/YGFlexTest.cpp index 5ba49f43..21c7578d 100644 --- a/tests/YGFlexTest.cpp +++ b/tests/YGFlexTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGFlexWrapTest.cpp b/tests/YGFlexWrapTest.cpp index b4fb2bbc..38a9c51e 100644 --- a/tests/YGFlexWrapTest.cpp +++ b/tests/YGFlexWrapTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGFloatOptionalTest.cpp b/tests/YGFloatOptionalTest.cpp index 3e231723..e94af17f 100644 --- a/tests/YGFloatOptionalTest.cpp +++ b/tests/YGFloatOptionalTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGHadOverflowTest.cpp b/tests/YGHadOverflowTest.cpp index f764c8ac..bfdfcbc5 100644 --- a/tests/YGHadOverflowTest.cpp +++ b/tests/YGHadOverflowTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGInfiniteHeightTest.cpp b/tests/YGInfiniteHeightTest.cpp index 99d84e0c..8d5d9153 100644 --- a/tests/YGInfiniteHeightTest.cpp +++ b/tests/YGInfiniteHeightTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGJustifyContentTest.cpp b/tests/YGJustifyContentTest.cpp index 34deb973..e82263c5 100644 --- a/tests/YGJustifyContentTest.cpp +++ b/tests/YGJustifyContentTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGLayoutDiffingTest.cpp b/tests/YGLayoutDiffingTest.cpp index 378b8046..a0280fe8 100644 --- a/tests/YGLayoutDiffingTest.cpp +++ b/tests/YGLayoutDiffingTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGLoggerTest.cpp b/tests/YGLoggerTest.cpp index 8ab4f805..9776d1c2 100644 --- a/tests/YGLoggerTest.cpp +++ b/tests/YGLoggerTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGMarginTest.cpp b/tests/YGMarginTest.cpp index 6eb01a50..e857da09 100644 --- a/tests/YGMarginTest.cpp +++ b/tests/YGMarginTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGMeasureCacheTest.cpp b/tests/YGMeasureCacheTest.cpp index f4c54a53..15da2e5d 100644 --- a/tests/YGMeasureCacheTest.cpp +++ b/tests/YGMeasureCacheTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGMeasureModeTest.cpp b/tests/YGMeasureModeTest.cpp index f0c2062d..d3749c2f 100644 --- a/tests/YGMeasureModeTest.cpp +++ b/tests/YGMeasureModeTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGMeasureTest.cpp b/tests/YGMeasureTest.cpp index f41ec017..7595a745 100644 --- a/tests/YGMeasureTest.cpp +++ b/tests/YGMeasureTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGMinMaxDimensionTest.cpp b/tests/YGMinMaxDimensionTest.cpp index a3bee824..c253bdff 100644 --- a/tests/YGMinMaxDimensionTest.cpp +++ b/tests/YGMinMaxDimensionTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGNodeCallbackTest.cpp b/tests/YGNodeCallbackTest.cpp index eb44d33e..be019d19 100644 --- a/tests/YGNodeCallbackTest.cpp +++ b/tests/YGNodeCallbackTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGNodeChildTest.cpp b/tests/YGNodeChildTest.cpp index b5aa6cfe..6ddcf82f 100644 --- a/tests/YGNodeChildTest.cpp +++ b/tests/YGNodeChildTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGPaddingTest.cpp b/tests/YGPaddingTest.cpp index c6f431b8..bc3847d8 100644 --- a/tests/YGPaddingTest.cpp +++ b/tests/YGPaddingTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGPercentageTest.cpp b/tests/YGPercentageTest.cpp index e3efb7b6..2b9144dd 100644 --- a/tests/YGPercentageTest.cpp +++ b/tests/YGPercentageTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGPersistenceTest.cpp b/tests/YGPersistenceTest.cpp index fe704a62..9ad24111 100644 --- a/tests/YGPersistenceTest.cpp +++ b/tests/YGPersistenceTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGRelayoutTest.cpp b/tests/YGRelayoutTest.cpp index 5df3ed5a..51bd88d5 100644 --- a/tests/YGRelayoutTest.cpp +++ b/tests/YGRelayoutTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGRoundingFunctionTest.cpp b/tests/YGRoundingFunctionTest.cpp index a02175d9..f64e8b47 100644 --- a/tests/YGRoundingFunctionTest.cpp +++ b/tests/YGRoundingFunctionTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGRoundingMeasureFuncTest.cpp b/tests/YGRoundingMeasureFuncTest.cpp index 755e77aa..37c01bed 100644 --- a/tests/YGRoundingMeasureFuncTest.cpp +++ b/tests/YGRoundingMeasureFuncTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGRoundingTest.cpp b/tests/YGRoundingTest.cpp index 84f3da73..1b3af640 100644 --- a/tests/YGRoundingTest.cpp +++ b/tests/YGRoundingTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGSizeOverflowTest.cpp b/tests/YGSizeOverflowTest.cpp index 2d037188..4cfa0a68 100644 --- a/tests/YGSizeOverflowTest.cpp +++ b/tests/YGSizeOverflowTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGStyleAccessorsTest.cpp b/tests/YGStyleAccessorsTest.cpp index 58c28ce9..b1f1e77b 100644 --- a/tests/YGStyleAccessorsTest.cpp +++ b/tests/YGStyleAccessorsTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGStyleTest.cpp b/tests/YGStyleTest.cpp index c5722708..530d8de4 100644 --- a/tests/YGStyleTest.cpp +++ b/tests/YGStyleTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGTraversalTest.cpp b/tests/YGTraversalTest.cpp index a3c54cd5..33af7bd4 100644 --- a/tests/YGTraversalTest.cpp +++ b/tests/YGTraversalTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGTreeMutationTest.cpp b/tests/YGTreeMutationTest.cpp index d35b636e..a41bd540 100644 --- a/tests/YGTreeMutationTest.cpp +++ b/tests/YGTreeMutationTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGValueTest.cpp b/tests/YGValueTest.cpp index 2f2385af..add2e75d 100644 --- a/tests/YGValueTest.cpp +++ b/tests/YGValueTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/tests/YGZeroOutLayoutRecursivlyTest.cpp b/tests/YGZeroOutLayoutRecursivlyTest.cpp index 052f60d5..98efa2e8 100644 --- a/tests/YGZeroOutLayoutRecursivlyTest.cpp +++ b/tests/YGZeroOutLayoutRecursivlyTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/testutil/TestUtil.java b/testutil/TestUtil.java index bddde9ac..9dd30fde 100644 --- a/testutil/TestUtil.java +++ b/testutil/TestUtil.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/testutil/jni.cpp b/testutil/jni.cpp index 18d7da90..06e467ee 100644 --- a/testutil/jni.cpp +++ b/testutil/jni.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/testutil/testutil.cpp b/testutil/testutil.cpp index 2a011683..c8f9e32c 100644 --- a/testutil/testutil.cpp +++ b/testutil/testutil.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/testutil/testutil.h b/testutil/testutil.h index ef4a33da..af42ba85 100644 --- a/testutil/testutil.h +++ b/testutil/testutil.h @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/util/SingleWriterValueList.cpp b/util/SingleWriterValueList.cpp index 753a2ad2..136e5121 100644 --- a/util/SingleWriterValueList.cpp +++ b/util/SingleWriterValueList.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/util/SingleWriterValueList.h b/util/SingleWriterValueList.h index 3207ae3c..21c09d08 100644 --- a/util/SingleWriterValueList.h +++ b/util/SingleWriterValueList.h @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/util/SingleWriterValueListTest.cpp b/util/SingleWriterValueListTest.cpp index c554e646..004caa9d 100644 --- a/util/SingleWriterValueListTest.cpp +++ b/util/SingleWriterValueListTest.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/CompactValue.h b/yoga/CompactValue.h index 20451779..899dcc58 100644 --- a/yoga/CompactValue.h +++ b/yoga/CompactValue.h @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/Utils.cpp b/yoga/Utils.cpp index 38b686c5..8864155b 100644 --- a/yoga/Utils.cpp +++ b/yoga/Utils.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/Utils.h b/yoga/Utils.h index 900ccb1b..d6fbc268 100644 --- a/yoga/Utils.h +++ b/yoga/Utils.h @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/YGConfig.cpp b/yoga/YGConfig.cpp index 773ad24a..4e805823 100644 --- a/yoga/YGConfig.cpp +++ b/yoga/YGConfig.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/YGConfig.h b/yoga/YGConfig.h index 311c1597..aaf6d137 100644 --- a/yoga/YGConfig.h +++ b/yoga/YGConfig.h @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/YGEnums.cpp b/yoga/YGEnums.cpp index ff4b1307..bf5844c5 100644 --- a/yoga/YGEnums.cpp +++ b/yoga/YGEnums.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/YGEnums.h b/yoga/YGEnums.h index f06b0e04..b3c57fb8 100644 --- a/yoga/YGEnums.h +++ b/yoga/YGEnums.h @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/YGFloatOptional.h b/yoga/YGFloatOptional.h index 7ca1fc12..60fcad99 100644 --- a/yoga/YGFloatOptional.h +++ b/yoga/YGFloatOptional.h @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/YGLayout.cpp b/yoga/YGLayout.cpp index 6f55d862..d1144ea6 100644 --- a/yoga/YGLayout.cpp +++ b/yoga/YGLayout.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/YGLayout.h b/yoga/YGLayout.h index 0e559d74..1b30cc8c 100644 --- a/yoga/YGLayout.h +++ b/yoga/YGLayout.h @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/YGMacros.h b/yoga/YGMacros.h index badea8c3..d56f3aeb 100644 --- a/yoga/YGMacros.h +++ b/yoga/YGMacros.h @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/YGMarker.cpp b/yoga/YGMarker.cpp index 21a8d1f6..e0758e23 100644 --- a/yoga/YGMarker.cpp +++ b/yoga/YGMarker.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/YGMarker.h b/yoga/YGMarker.h index 89b03684..625adc2c 100644 --- a/yoga/YGMarker.h +++ b/yoga/YGMarker.h @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/YGNode.cpp b/yoga/YGNode.cpp index 81a4216e..8941487f 100644 --- a/yoga/YGNode.cpp +++ b/yoga/YGNode.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/YGNode.h b/yoga/YGNode.h index 1ef80142..cc11cc88 100644 --- a/yoga/YGNode.h +++ b/yoga/YGNode.h @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/YGNodePrint.cpp b/yoga/YGNodePrint.cpp index 301e72a2..f91d0374 100644 --- a/yoga/YGNodePrint.cpp +++ b/yoga/YGNodePrint.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/YGNodePrint.h b/yoga/YGNodePrint.h index 13cf367b..8df30e2c 100644 --- a/yoga/YGNodePrint.h +++ b/yoga/YGNodePrint.h @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/YGStyle.cpp b/yoga/YGStyle.cpp index 6672c81f..a4a7a047 100644 --- a/yoga/YGStyle.cpp +++ b/yoga/YGStyle.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/YGStyle.h b/yoga/YGStyle.h index 77c7e038..edefcb7c 100644 --- a/yoga/YGStyle.h +++ b/yoga/YGStyle.h @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/YGValue.cpp b/yoga/YGValue.cpp index fcdd0c69..995f2113 100644 --- a/yoga/YGValue.cpp +++ b/yoga/YGValue.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/YGValue.h b/yoga/YGValue.h index 170047ea..0405bc62 100644 --- a/yoga/YGValue.h +++ b/yoga/YGValue.h @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/Yoga-internal.h b/yoga/Yoga-internal.h index 4d32a96b..34c0b077 100644 --- a/yoga/Yoga-internal.h +++ b/yoga/Yoga-internal.h @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index d41a1201..bf02dd99 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/Yoga.h b/yoga/Yoga.h index a9dc01dc..6ec796d8 100644 --- a/yoga/Yoga.h +++ b/yoga/Yoga.h @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/event/event.cpp b/yoga/event/event.cpp index 02e70dce..9fc00120 100644 --- a/yoga/event/event.cpp +++ b/yoga/event/event.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/event/event.h b/yoga/event/event.h index 578d2f3a..1937dafc 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/instrumentation.h b/yoga/instrumentation.h index b8691c18..e15f2fb1 100644 --- a/yoga/instrumentation.h +++ b/yoga/instrumentation.h @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/log.cpp b/yoga/log.cpp index 62b3d4f0..45e5f7b1 100644 --- a/yoga/log.cpp +++ b/yoga/log.cpp @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE diff --git a/yoga/log.h b/yoga/log.h index f25ee1a2..effe23b5 100644 --- a/yoga/log.h +++ b/yoga/log.h @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the LICENSE From c393ed13811d5d6e71559ce837f644c699814c4a Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Thu, 6 Jun 2019 20:59:24 -0700 Subject: [PATCH 086/347] moved PtrJNode map to YGJtypes.h and passing layout context as data in LayoutPassEnd Event Summary: Move PtrJNodeMap to header file so that it can be accessed in events subscribers outside yoga Reviewed By: davidaurelio Differential Revision: D15619629 fbshipit-source-id: 1bf213efd38ec7bcac6a38070f21fa837c5f17da --- java/jni/YGJNI.cpp | 28 ---------------------------- java/jni/YGJTypes.h | 33 +++++++++++++++++++++++++++++++++ yoga/Yoga.cpp | 2 +- yoga/event/event.h | 5 +++++ 4 files changed, 39 insertions(+), 29 deletions(-) diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp index 5a2ce90c..f1283681 100644 --- a/java/jni/YGJNI.cpp +++ b/java/jni/YGJNI.cpp @@ -75,34 +75,6 @@ const short int LAYOUT_BORDER_START_INDEX = 14; bool useBatchingForLayoutOutputs; -class PtrJNodeMap { - using JNodeArray = JArrayClass; - std::map ptrsToIdxs_; - alias_ref javaNodes_; - -public: - PtrJNodeMap() : ptrsToIdxs_{}, javaNodes_{} {} - PtrJNodeMap( - alias_ref nativePointers, - alias_ref javaNodes) - : javaNodes_{javaNodes} { - auto pin = nativePointers->pinCritical(); - auto ptrs = pin.get(); - for (size_t i = 0, n = pin.size(); i < n; ++i) { - ptrsToIdxs_[(YGNodeRef) ptrs[i]] = i; - } - } - - local_ref ref(YGNodeRef node) { - auto idx = ptrsToIdxs_.find(node); - if (idx == ptrsToIdxs_.end()) { - return local_ref{}; - } else { - return javaNodes_->getElement(idx->second); - } - } -}; - namespace { union YGNodeContext { diff --git a/java/jni/YGJTypes.h b/java/jni/YGJTypes.h index 21bf3959..bd8e6c7b 100644 --- a/java/jni/YGJTypes.h +++ b/java/jni/YGJTypes.h @@ -6,6 +6,11 @@ */ #include #include +#include +#include + +using namespace facebook::jni; +using namespace std; struct JYogaNode : public facebook::jni::JavaClass { static constexpr auto kJavaDescriptor = "Lcom/facebook/yoga/YogaNodeJNIBase;"; @@ -28,3 +33,31 @@ struct JYogaLogger : public facebook::jni::JavaClass { facebook::jni::alias_ref, jstring); }; + +class PtrJNodeMap { + using JNodeArray = JArrayClass; + std::map ptrsToIdxs_; + alias_ref javaNodes_; + +public: + PtrJNodeMap() : ptrsToIdxs_{}, javaNodes_{} {} + PtrJNodeMap( + alias_ref nativePointers, + alias_ref javaNodes) + : javaNodes_{javaNodes} { + auto pin = nativePointers->pinCritical(); + auto ptrs = pin.get(); + for (size_t i = 0, n = pin.size(); i < n; ++i) { + ptrsToIdxs_[(YGNodeRef) ptrs[i]] = i; + } + } + + local_ref ref(YGNodeRef node) { + auto idx = ptrsToIdxs_.find(node); + if (idx == ptrsToIdxs_.end()) { + return local_ref{}; + } else { + return javaNodes_->getElement(idx->second); + } + } +}; diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index bf02dd99..763d9bfc 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -4093,7 +4093,7 @@ void YGNodeCalculateLayoutWithContext( marker = nullptr; #ifdef YG_ENABLE_EVENTS - Event::publish(node); + Event::publish(node, {layoutContext}); #endif // We want to get rid off `useLegacyStretchBehaviour` from YGConfig. But we diff --git a/yoga/event/event.h b/yoga/event/event.h index 1937dafc..f0f42797 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -71,5 +71,10 @@ struct Event::TypedData { YGConfig* config; }; +template <> +struct Event::TypedData { + void* layoutContext; +}; + } // namespace yoga } // namespace facebook From 2701d8007853f943a4933e8f78f692f8134e18a4 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Thu, 6 Jun 2019 20:59:24 -0700 Subject: [PATCH 087/347] passing layout context and getting local reference from it Summary: We are passing layout context from yoga as event data for Layout Pass End event and it is being then used to get the local reference of node so that we can pass it as method parameter to java layer Reviewed By: davidaurelio Differential Revision: D15619640 fbshipit-source-id: 5f6c29d9e6acb73a8d87f8e0cb1577d35a271aeb --- java/BUCK | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/BUCK b/java/BUCK index 3f29b3c8..18bc6f8e 100644 --- a/java/BUCK +++ b/java/BUCK @@ -13,8 +13,8 @@ CXX_LIBRARY_WHITELIST_FOR_TESTS = CXX_LIBRARY_WHITELIST + [ yoga_cxx_library( name = "jni", srcs = glob(["jni/*.cpp"]), - headers = glob(["jni/*.h"]), - header_namespace = "", + header_namespace = "yoga/java", + exported_headers = glob(["jni/*.h"]), allow_jni_merging = True, compiler_flags = [ "-fno-omit-frame-pointer", From 755fa07b39eb32f6c46906ec8aa1dad7007e9a9a Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Thu, 6 Jun 2019 20:59:24 -0700 Subject: [PATCH 088/347] add node measure event and passing the callback to java layer Summary: Adds measure event and its listener initial code structure Reviewed By: davidaurelio Differential Revision: D15600738 fbshipit-source-id: d15764e0b64edb170fcb15e0912ecce5f7e53595 --- java/com/facebook/yoga/YogaEventListener.java | 4 +++- tests/EventsTest.cpp | 2 ++ yoga/Yoga.cpp | 4 ++++ yoga/event/event.h | 8 +++++++- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/java/com/facebook/yoga/YogaEventListener.java b/java/com/facebook/yoga/YogaEventListener.java index 6d1d486b..97791224 100644 --- a/java/com/facebook/yoga/YogaEventListener.java +++ b/java/com/facebook/yoga/YogaEventListener.java @@ -10,4 +10,6 @@ public interface YogaEventListener { void onLayoutPassEnd(YogaNode node); -} \ No newline at end of file + void onNodeMeasure(YogaNode node); + +} diff --git a/tests/EventsTest.cpp b/tests/EventsTest.cpp index 44ade6fd..5cb5db02 100644 --- a/tests/EventsTest.cpp +++ b/tests/EventsTest.cpp @@ -131,6 +131,8 @@ void EventTest::listen(const YGNode& node, Event::Type type, Event::Data data) { break; case Event::LayoutPassEnd: break; + case Event::NodeMeasure: + break; } } diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 763d9bfc..c46104be 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -1635,6 +1635,10 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( heightMeasureMode, layoutContext); +#ifdef YG_ENABLE_EVENTS + Event::publish(node, {layoutContext}); +#endif + node->setLayoutMeasuredDimension( YGNodeBoundAxis( node, diff --git a/yoga/event/event.h b/yoga/event/event.h index f0f42797..bff8dbfd 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -21,7 +21,8 @@ struct Event { NodeDeallocation, NodeLayout, LayoutPassStart, - LayoutPassEnd + LayoutPassEnd, + NodeMeasure, }; class Data; using Subscriber = void(const YGNode&, Type, Data); @@ -76,5 +77,10 @@ struct Event::TypedData { void* layoutContext; }; +template <> +struct Event::TypedData { + void* layoutContext; +}; + } // namespace yoga } // namespace facebook From e33123f9552792ff8e2fc3b28197f12a03b426e4 Mon Sep 17 00:00:00 2001 From: Aditya Sharat Date: Fri, 7 Jun 2019 09:22:17 -0700 Subject: [PATCH 089/347] Adds check to unset a YogaNode's parent during reconciliation. Summary: Adds check to unset a YogaNode's parent during reconciliation. Reviewed By: davidaurelio Differential Revision: D15714899 fbshipit-source-id: 6e2c2a28106574d062fec722c9a051acea87d0b6 --- java/com/facebook/yoga/YogaNode.java | 2 ++ java/com/facebook/yoga/YogaNodeJNIBase.java | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/java/com/facebook/yoga/YogaNode.java b/java/com/facebook/yoga/YogaNode.java index a01a0bdd..9a8e1966 100644 --- a/java/com/facebook/yoga/YogaNode.java +++ b/java/com/facebook/yoga/YogaNode.java @@ -42,6 +42,8 @@ public abstract class YogaNode { @Nullable public abstract YogaNode getOwner(); + public abstract void unsetOwner(); + /** @deprecated Use #getOwner() instead. This will be removed in the next version. */ @Deprecated @Nullable diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index c48162f4..0e1f68c8 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -137,6 +137,11 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { return mOwner; } + @Override + public void unsetOwner() { + mOwner = null; + } + /** @deprecated Use #getOwner() instead. This will be removed in the next version. */ @Deprecated @Nullable From af219f8836bf7c10c4c114fe23acd3a3f2b69f92 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 10 Jun 2019 01:43:25 -0700 Subject: [PATCH 090/347] add node layout event and pass it java layer Summary: Listen to NodeLayout event and passes this event callback to java layer along with the information whether layout or measure was done in this pass Reviewed By: davidaurelio Differential Revision: D15696021 fbshipit-source-id: 8c5ca69330a9baca26b77052d4965cc67fe97c75 --- java/com/facebook/yoga/YogaEventListener.java | 2 ++ yoga/Yoga.cpp | 2 +- yoga/event/event.h | 6 ++++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/java/com/facebook/yoga/YogaEventListener.java b/java/com/facebook/yoga/YogaEventListener.java index 97791224..cc7e9ebd 100644 --- a/java/com/facebook/yoga/YogaEventListener.java +++ b/java/com/facebook/yoga/YogaEventListener.java @@ -12,4 +12,6 @@ public interface YogaEventListener { void onNodeMeasure(YogaNode node); + void onNodeLayout(YogaNode node, boolean performLayout); + } diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index c46104be..6c739a06 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -3670,7 +3670,7 @@ bool YGLayoutNodeInternal( YGMarkerLayoutData& layoutMarkerData, void* const layoutContext) { #ifdef YG_ENABLE_EVENTS - Event::publish(node); + Event::publish(node, {performLayout, layoutContext}); #endif YGLayout* layout = &node->getLayout(); diff --git a/yoga/event/event.h b/yoga/event/event.h index bff8dbfd..9dcd73b6 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -82,5 +82,11 @@ struct Event::TypedData { void* layoutContext; }; +template <> +struct Event::TypedData { + bool performLayout; + void* layoutContext; +}; + } // namespace yoga } // namespace facebook From 8ff13c922ae79176221fec023d596b81f762022c Mon Sep 17 00:00:00 2001 From: Aditya Sharat Date: Mon, 10 Jun 2019 06:52:54 -0700 Subject: [PATCH 091/347] Back out "[litho] Adds check to unset a YogaNode's parent during reconciliation." Summary: Removes `unsetOwner` from Yoga. This was temporarily for patching a crash. Reviewed By: colriot Differential Revision: D15737613 fbshipit-source-id: 8ab93ecf7ffb913df6207fe5db47a8cc93eded2c --- java/com/facebook/yoga/YogaNode.java | 2 -- java/com/facebook/yoga/YogaNodeJNIBase.java | 5 ----- 2 files changed, 7 deletions(-) diff --git a/java/com/facebook/yoga/YogaNode.java b/java/com/facebook/yoga/YogaNode.java index 9a8e1966..a01a0bdd 100644 --- a/java/com/facebook/yoga/YogaNode.java +++ b/java/com/facebook/yoga/YogaNode.java @@ -42,8 +42,6 @@ public abstract class YogaNode { @Nullable public abstract YogaNode getOwner(); - public abstract void unsetOwner(); - /** @deprecated Use #getOwner() instead. This will be removed in the next version. */ @Deprecated @Nullable diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index 0e1f68c8..c48162f4 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -137,11 +137,6 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { return mOwner; } - @Override - public void unsetOwner() { - mOwner = null; - } - /** @deprecated Use #getOwner() instead. This will be removed in the next version. */ @Deprecated @Nullable From 204e8492184eb1bf2ccfc341803bf6ecee2ae8dd Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Tue, 11 Jun 2019 01:37:19 -0700 Subject: [PATCH 092/347] rm `YogaEventListener` Reviewed By: SidharthGuglani Differential Revision: D15742456 fbshipit-source-id: b90a221e177e936e141c582500dccf0ac38027c2 --- java/com/facebook/yoga/YogaEventListener.java | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 java/com/facebook/yoga/YogaEventListener.java diff --git a/java/com/facebook/yoga/YogaEventListener.java b/java/com/facebook/yoga/YogaEventListener.java deleted file mode 100644 index cc7e9ebd..00000000 --- a/java/com/facebook/yoga/YogaEventListener.java +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -package com.facebook.yoga; - -public interface YogaEventListener { - - void onLayoutPassEnd(YogaNode node); - - void onNodeMeasure(YogaNode node); - - void onNodeLayout(YogaNode node, boolean performLayout); - -} From 19fd066507362d54553ecee6d295db99d8a7c840 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Tue, 11 Jun 2019 01:37:19 -0700 Subject: [PATCH 093/347] Pass layout context for `Event::LayoutPassStart` Summary: Adds the layout context pointer when publishing `Event::LayoutPassStart`. Reviewed By: SidharthGuglani Differential Revision: D15754425 fbshipit-source-id: 6295ae1ebec9eab72a79c43bc1cb0e05a6d7ae68 --- yoga/Yoga.cpp | 2 +- yoga/event/event.h | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 6c739a06..e8a2e512 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -4013,7 +4013,7 @@ void YGNodeCalculateLayoutWithContext( void* layoutContext) { #ifdef YG_ENABLE_EVENTS - Event::publish(node); + Event::publish(node, {layoutContext}); #endif // unique pointer to allow ending the marker early std::unique_ptr> marker{ diff --git a/yoga/event/event.h b/yoga/event/event.h index 9dcd73b6..e7415566 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -72,6 +72,11 @@ struct Event::TypedData { YGConfig* config; }; +template <> +struct Event::TypedData { + void* layoutContext; +}; + template <> struct Event::TypedData { void* layoutContext; From a130ac2f9c7a7440c036a803d27795c106c5c4e5 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 12 Jun 2019 00:26:21 -0700 Subject: [PATCH 094/347] pass measure callback data from c++ to java Summary: Passing Measure callback data - width, widthMeasureMode, height, heightMeasureMode, measuredWidth and measuredHeight along with NodeMeasure event This data is then propagated to java layer in this diff Reviewed By: davidaurelio Differential Revision: D15697523 fbshipit-source-id: 615463da237175ff88abef3f6528b55333ccd915 --- yoga/Yoga.cpp | 10 +++++++++- yoga/event/event.h | 7 +++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index e8a2e512..1fa81110 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -1636,7 +1636,15 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( layoutContext); #ifdef YG_ENABLE_EVENTS - Event::publish(node, {layoutContext}); + Event::publish( + node, + {layoutContext, + innerWidth, + widthMeasureMode, + innerHeight, + heightMeasureMode, + measuredSize.width, + measuredSize.height}); #endif node->setLayoutMeasuredDimension( diff --git a/yoga/event/event.h b/yoga/event/event.h index e7415566..5a955ea9 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -8,6 +8,7 @@ #include #include +#include "../YGEnums.h" struct YGConfig; struct YGNode; @@ -85,6 +86,12 @@ struct Event::TypedData { template <> struct Event::TypedData { void* layoutContext; + float width; + YGMeasureMode widthMeasureMode; + float height; + YGMeasureMode heightMeasureMode; + float measuredWidth; + float measuredHeight; }; template <> From 6b5bf570c8a922a5cd76c0675ed2f7f05177d380 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Sat, 15 Jun 2019 10:15:49 -0700 Subject: [PATCH 095/347] Count the number measure callback invocations Summary: Counts how many times measure callbacks have been invoked during a layout pass. This is made available via the marker and event APIs. Reviewed By: SidharthGuglani Differential Revision: D15836983 fbshipit-source-id: 3835bef94e497375821c9f2ad8209447b4f11518 --- yoga/YGMarker.h | 1 + yoga/Yoga.cpp | 11 +++++++---- yoga/event/event.h | 2 ++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/yoga/YGMarker.h b/yoga/YGMarker.h index 625adc2c..d9bb1277 100644 --- a/yoga/YGMarker.h +++ b/yoga/YGMarker.h @@ -25,6 +25,7 @@ typedef struct { int maxMeasureCache; int cachedLayouts; int cachedMeasures; + int measureCallbacks; } YGMarkerLayoutData; typedef struct { diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 1fa81110..cbdb9561 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -1581,6 +1581,7 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( const YGMeasureMode heightMeasureMode, const float ownerWidth, const float ownerHeight, + YGMarkerLayoutData& layoutMarkerData, void* const layoutContext) { YGAssertWithNode( node, @@ -1634,6 +1635,7 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( innerHeight, heightMeasureMode, layoutContext); + layoutMarkerData.measureCallbacks += 1; #ifdef YG_ENABLE_EVENTS Event::publish( @@ -2700,6 +2702,7 @@ static void YGNodelayoutImpl( heightMeasureMode, ownerWidth, ownerHeight, + layoutMarkerData, layoutContext); return; } @@ -4101,13 +4104,13 @@ void YGNodeCalculateLayoutWithContext( #endif } +#ifdef YG_ENABLE_EVENTS + Event::publish(node, {layoutContext, &marker->data}); +#endif + // end marker here marker = nullptr; -#ifdef YG_ENABLE_EVENTS - Event::publish(node, {layoutContext}); -#endif - // We want to get rid off `useLegacyStretchBehaviour` from YGConfig. But we // aren't sure whether client's of yoga have gotten rid off this flag or not. // So logging this in YGLayout would help to find out the call sites depending diff --git a/yoga/event/event.h b/yoga/event/event.h index 5a955ea9..c461de3e 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -9,6 +9,7 @@ #include #include #include "../YGEnums.h" +#include "../YGMarker.h" struct YGConfig; struct YGNode; @@ -81,6 +82,7 @@ struct Event::TypedData { template <> struct Event::TypedData { void* layoutContext; + YGMarkerLayoutData* layoutData; }; template <> From a7e8aec3d9bcc874d93a8cd0784611159a1182bd Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Sat, 15 Jun 2019 10:15:49 -0700 Subject: [PATCH 096/347] Allow to end markers early Summary: Adds the ability to `MarkerSection` to end the marker before it goes out of scope. This unlocks two scenarios: - reuse the data associated with a marker after ending it. - end markers in the middle of a function without adding arbitrary blocks. Reviewed By: SidharthGuglani Differential Revision: D15837840 fbshipit-source-id: c0afaeeabd169c65189b5028be54ea7dac3e3b84 --- yoga/Yoga.cpp | 15 ++++++--------- yoga/instrumentation.h | 4 +++- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index cbdb9561..0dfcb6e5 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -4026,9 +4026,7 @@ void YGNodeCalculateLayoutWithContext( #ifdef YG_ENABLE_EVENTS Event::publish(node, {layoutContext}); #endif - // unique pointer to allow ending the marker early - std::unique_ptr> marker{ - new marker::MarkerSection{node}}; + marker::MarkerSection marker{node}; // Increment the generation count. This will force the recursive routine to // visit all dirty nodes at least once. Subsequent visits will be skipped if @@ -4087,7 +4085,7 @@ void YGNodeCalculateLayoutWithContext( true, "initial", node->getConfig(), - marker->data, + marker.data, layoutContext)) { node->setPosition( node->getLayout().direction, ownerWidth, ownerHeight, ownerWidth); @@ -4104,12 +4102,11 @@ void YGNodeCalculateLayoutWithContext( #endif } -#ifdef YG_ENABLE_EVENTS - Event::publish(node, {layoutContext, &marker->data}); -#endif + marker.end(); - // end marker here - marker = nullptr; +#ifdef YG_ENABLE_EVENTS + Event::publish(node, {layoutContext, &marker.data}); +#endif // We want to get rid off `useLegacyStretchBehaviour` from YGConfig. But we // aren't sure whether client's of yoga have gotten rid off this flag or not. diff --git a/yoga/instrumentation.h b/yoga/instrumentation.h index e15f2fb1..369703a1 100644 --- a/yoga/instrumentation.h +++ b/yoga/instrumentation.h @@ -19,11 +19,13 @@ private: public: MarkerSection(YGNodeRef node) : MarkerSection{node, node->getConfig()} {} - ~MarkerSection() { + void end() { if (endMarker_) { endMarker_(MarkerType, node_, markerData(&data), userData_); + endMarker_ = nullptr; } } + ~MarkerSection() { end(); } typename Data::type data = {}; From 9dac56e824c4d7aaa5c2e84f269537ed89293e72 Mon Sep 17 00:00:00 2001 From: Stiopa Koltsov Date: Sat, 15 Jun 2019 12:03:49 -0700 Subject: [PATCH 097/347] Migrate Yoga targets to `raw_headers` Summary: In "regular" header mode, Buck will symlink from `buck-out/` to the actual header file. This works fine with GCC and clang, but not with MSVC. Headers will be treated as different file, sidestepping `#pragma once` directives. As a result, all kinds of symbols get declared twice, leading to compile errors. Reviewed By: davidaurelio Differential Revision: D15781947 fbshipit-source-id: a3b4e211b8b74b9ef44fc39471a3009b2cf47260 --- BUCK | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/BUCK b/BUCK index 5af52a2f..e11649b9 100644 --- a/BUCK +++ b/BUCK @@ -17,9 +17,9 @@ TEST_COMPILER_FLAGS = BASE_COMPILER_FLAGS + GMOCK_OVERRIDE_FLAGS + [ yoga_cxx_library( name = "yoga", srcs = glob(["yoga/**/*.cpp"]), - header_namespace = "", - exported_headers = subdir_glob([("", "yoga/**/*.h")]), compiler_flags = LIBRARY_COMPILER_FLAGS, + public_include_directories = ["."], + raw_headers = glob(["yoga/**/*.h"]), soname = "libyogacore.$(ext)", tests = [":YogaTests"], visibility = ["PUBLIC"], @@ -31,9 +31,9 @@ yoga_cxx_library( yoga_cxx_library( name = "yogaForDebug", srcs = glob(["yoga/**/*.cpp"]), - header_namespace = "", - exported_headers = subdir_glob([("", "yoga/**/*.h")]), compiler_flags = TEST_COMPILER_FLAGS, + public_include_directories = ["."], + raw_headers = glob(["yoga/**/*.h"]), soname = "libyogacore.$(ext)", tests = [":YogaTests"], visibility = ["PUBLIC"], From 2b8217ce8d11f9bbb78da0482313b4f4496cf5e6 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Fri, 21 Jun 2019 02:29:53 -0700 Subject: [PATCH 098/347] Send measure pass duration Summary: Send measure callback duration time to yoga plugin Reviewed By: davidaurelio Differential Revision: D15917548 fbshipit-source-id: 2c947f14ddbc5932cedd0aab8622260478ec29a6 --- yoga/Yoga.cpp | 15 ++++++++++++++- yoga/event/event.h | 1 + 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 0dfcb6e5..3e4ff32e 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include "Utils.h" #include "YGNode.h" #include "YGNodePrint.h" @@ -29,6 +30,8 @@ __forceinline const float fmaxf(const float a, const float b) { using namespace facebook::yoga; using detail::Log; +using std::chrono::duration_cast; +using std::chrono::steady_clock; #ifdef ANDROID static int YGAndroidLog( @@ -1626,6 +1629,10 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( ownerWidth), YGDimensionHeight); } else { +#ifdef YG_ENABLE_EVENTS + auto start = steady_clock::now(); +#endif + // Measure the text under the current constraints. const YGSize measuredSize = marker::MarkerSection::wrap( node, @@ -1635,9 +1642,14 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( innerHeight, heightMeasureMode, layoutContext); + layoutMarkerData.measureCallbacks += 1; #ifdef YG_ENABLE_EVENTS + auto end = steady_clock::now(); + auto measureCallbackDuration = + duration_cast>(end - start); + Event::publish( node, {layoutContext, @@ -1646,7 +1658,8 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( innerHeight, heightMeasureMode, measuredSize.width, - measuredSize.height}); + measuredSize.height, + measureCallbackDuration.count()}); #endif node->setLayoutMeasuredDimension( diff --git a/yoga/event/event.h b/yoga/event/event.h index c461de3e..bb659e15 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -94,6 +94,7 @@ struct Event::TypedData { YGMeasureMode heightMeasureMode; float measuredWidth; float measuredHeight; + float measureCallbackDuration; }; template <> From d667ebd66eb31910b7b3ea29436335bf6ec5053f Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Fri, 21 Jun 2019 04:04:54 -0700 Subject: [PATCH 099/347] Replace relative include Summary: Replaces the relative include to `YGEnums.h` in `yoga/event/event.h` with `#include Reviewed By: SidharthGuglani Differential Revision: D15778634 fbshipit-source-id: 2bceeb58f26c0d9d0df6c0e7ea20b8ddf68a1ee5 --- yoga/event/event.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/yoga/event/event.h b/yoga/event/event.h index bb659e15..58e5e541 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -8,8 +8,8 @@ #include #include -#include "../YGEnums.h" -#include "../YGMarker.h" +#include +#include struct YGConfig; struct YGNode; From 2dc5a16d1feb844833d96720936d15ab4af35410 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 24 Jun 2019 08:29:59 -0700 Subject: [PATCH 100/347] Move event NodeLayout to end of NodeLayout step Summary: Added event NodeLayoutEnd and this is being used now instead of NodeLayout It will be used later to add more information about caches Reviewed By: davidaurelio Differential Revision: D15920935 fbshipit-source-id: c9f5e193bc8cc70d26ff5d84882d483c9b09f67d --- tests/EventsTest.cpp | 8 +++++++- yoga/Yoga.cpp | 8 +++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/tests/EventsTest.cpp b/tests/EventsTest.cpp index 5cb5db02..b940c6b1 100644 --- a/tests/EventsTest.cpp +++ b/tests/EventsTest.cpp @@ -96,12 +96,18 @@ TEST_F(EventTest, layout_events) { YGNodeCalculateLayout(root, 123, 456, YGDirectionLTR); - ASSERT_EQ(events[2].node, root); + ASSERT_EQ(events[2].node, child); ASSERT_EQ(events[2].type, Event::NodeLayout); ASSERT_EQ(events[3].node, child); ASSERT_EQ(events[3].type, Event::NodeLayout); + ASSERT_EQ(events[4].node, child); + ASSERT_EQ(events[4].type, Event::NodeLayout); + + ASSERT_EQ(events[5].node, root); + ASSERT_EQ(events[5].type, Event::NodeLayout); + YGNodeFreeRecursive(root); } diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 3e4ff32e..cfcadf57 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -3693,9 +3693,6 @@ bool YGLayoutNodeInternal( const YGConfigRef config, YGMarkerLayoutData& layoutMarkerData, void* const layoutContext) { -#ifdef YG_ENABLE_EVENTS - Event::publish(node, {performLayout, layoutContext}); -#endif YGLayout* layout = &node->getLayout(); gDepth++; @@ -3929,6 +3926,11 @@ bool YGLayoutNodeInternal( gDepth--; layout->generationCount = gCurrentGenerationCount; + +#ifdef YG_ENABLE_EVENTS + Event::publish(node, {performLayout, layoutContext}); +#endif + return (needToVisitNode || cachedResults == nullptr); } From 39996512fc0cb9db5cc5d9e61da7d5d44827f9f4 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 24 Jun 2019 08:29:59 -0700 Subject: [PATCH 101/347] pass cachedLayout and cachedMeasure measures to plugin Summary: Passing whether layout cache or measure cache was used or not Reviewed By: davidaurelio Differential Revision: D15920937 fbshipit-source-id: a6728e7af07ea228a285f824fbdfddc8130c5990 --- java/com/facebook/yoga/YogaLayoutType.java | 34 ++++++++++++++++++++++ yoga/Yoga.cpp | 11 ++++++- yoga/event/event.h | 9 +++++- 3 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 java/com/facebook/yoga/YogaLayoutType.java diff --git a/java/com/facebook/yoga/YogaLayoutType.java b/java/com/facebook/yoga/YogaLayoutType.java new file mode 100644 index 00000000..b747439f --- /dev/null +++ b/java/com/facebook/yoga/YogaLayoutType.java @@ -0,0 +1,34 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +package com.facebook.yoga; + +public enum YogaLayoutType { + LAYOUT(0), + MEASURE(1), + CACHED_LAYOUT(2), + CACHED_MEASURE(3); + + private final int mIntValue; + + YogaLayoutType(int intValue) { + mIntValue = intValue; + } + + public int intValue() { + return mIntValue; + } + + public static YogaLayoutType fromInt(int value) { + switch (value) { + case 0: return LAYOUT; + case 1: return MEASURE; + case 2: return CACHED_LAYOUT; + case 3: return CACHED_MEASURE; + default: throw new IllegalArgumentException("Unknown enum value: " + value); + } + } +} diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index cfcadf57..375668b7 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -3928,7 +3928,16 @@ bool YGLayoutNodeInternal( layout->generationCount = gCurrentGenerationCount; #ifdef YG_ENABLE_EVENTS - Event::publish(node, {performLayout, layoutContext}); + LayoutType layoutType; + if (performLayout) { + layoutType = !needToVisitNode && cachedResults == &layout->cachedLayout + ? LayoutType::kCachedLayout + : LayoutType::kLayout; + } else { + layoutType = cachedResults != nullptr ? LayoutType::kCachedMeasure + : LayoutType::kMeasure; + } + Event::publish(node, {layoutType, layoutContext}); #endif return (needToVisitNode || cachedResults == nullptr); diff --git a/yoga/event/event.h b/yoga/event/event.h index 58e5e541..4179e9be 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -17,6 +17,13 @@ struct YGNode; namespace facebook { namespace yoga { +enum LayoutType : int { + kLayout = 0, + kMeasure = 1, + kCachedLayout = 2, + kCachedMeasure = 3 +}; + struct Event { enum Type { NodeAllocation, @@ -99,7 +106,7 @@ struct Event::TypedData { template <> struct Event::TypedData { - bool performLayout; + LayoutType layoutType; void* layoutContext; }; From f539d68049c5efdc4127658873c7d5898880ec10 Mon Sep 17 00:00:00 2001 From: Chris Hopman Date: Mon, 24 Jun 2019 17:06:43 -0700 Subject: [PATCH 102/347] Force ordering of :yoga/:yogaForDebug Summary: Due to testutil depending on :yoga, we are always linking against both :yoga and :yogaForDebug in tests. This is only working right now due to luck in how Buck orders the link line. Adding a dependency is silly but it enforces that Buck maintain the ordering that we currently have even when it changes how it does its traversal. Reviewed By: philipjameson Differential Revision: D15973581 fbshipit-source-id: 3d18aff578ee4d56175ce5efae52b56aeb2d9586 --- BUCK | 1 + 1 file changed, 1 insertion(+) diff --git a/BUCK b/BUCK index e11649b9..b6df1dde 100644 --- a/BUCK +++ b/BUCK @@ -38,6 +38,7 @@ yoga_cxx_library( tests = [":YogaTests"], visibility = ["PUBLIC"], deps = [ + ":yoga", yoga_dep("lib/fb:ndklog"), ], ) From cf005df828b3f787bc84f7aabf873276d219f55f Mon Sep 17 00:00:00 2001 From: dattc2 Date: Tue, 25 Jun 2019 12:06:25 -0700 Subject: [PATCH 103/347] make yoga threadsafe (#852) Summary: Continuing https://github.com/facebook/yoga/pull/791 nokia6686 is a former member of our team, so we are trying to pick up what he left and carry out the pull request. # Solution Improved from previous solution with jpap's suggestions. 2. Passing ```gDepth``` and ```gCurrentGenerationCount``` (renamed to **_depth_** and **_generationCount_** respectively) between function calls that stem from ```YGNodeCalculateLayout```. In ```YGNodeCalculateLayout```, pass ```depth``` as value 0, to indicate the root depth. Pull Request resolved: https://github.com/facebook/yoga/pull/852 Reviewed By: SidharthGuglani Differential Revision: D15537450 Pulled By: davidaurelio fbshipit-source-id: 338f51383591ba27702ebe759f6c47c2dede3530 --- yoga/Yoga.cpp | 115 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 78 insertions(+), 37 deletions(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 375668b7..7b470f5d 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -953,7 +953,9 @@ bool YGLayoutNodeInternal( const char* reason, const YGConfigRef config, YGMarkerLayoutData& layoutMarkerData, - void* const layoutContext); + void* const layoutContext, + const uint32_t depth, + const uint32_t generationCount); #ifdef DEBUG static void YGNodePrintInternal( @@ -1197,7 +1199,9 @@ static void YGNodeComputeFlexBasisForChild( const YGDirection direction, const YGConfigRef config, YGMarkerLayoutData& layoutMarkerData, - void* const layoutContext) { + void* const layoutContext, + const uint32_t depth, + const uint32_t generationCount) { const YGFlexDirection mainAxis = YGResolveFlexDirection(node->getStyle().flexDirection(), direction); const bool isMainAxisRow = YGFlexDirectionIsRow(mainAxis); @@ -1220,8 +1224,7 @@ static void YGNodeComputeFlexBasisForChild( if (child->getLayout().computedFlexBasis.isUndefined() || (YGConfigIsExperimentalFeatureEnabled( child->getConfig(), YGExperimentalFeatureWebFlexBasis) && - child->getLayout().computedFlexBasisGeneration != - gCurrentGenerationCount)) { + child->getLayout().computedFlexBasisGeneration != generationCount)) { const YGFloatOptional paddingAndBorder = YGFloatOptional( YGNodePaddingAndBorderForAxis(child, mainAxis, ownerWidth)); child->setLayoutComputedFlexBasis( @@ -1372,13 +1375,15 @@ static void YGNodeComputeFlexBasisForChild( "measure", config, layoutMarkerData, - layoutContext); + layoutContext, + depth, + generationCount); child->setLayoutComputedFlexBasis(YGFloatOptional(YGFloatMax( child->getLayout().measuredDimensions[dim[mainAxis]], YGNodePaddingAndBorderForAxis(child, mainAxis, ownerWidth)))); } - child->setLayoutComputedFlexBasisGeneration(gCurrentGenerationCount); + child->setLayoutComputedFlexBasisGeneration(generationCount); } static void YGNodeAbsoluteLayoutChild( @@ -1390,7 +1395,9 @@ static void YGNodeAbsoluteLayoutChild( const YGDirection direction, const YGConfigRef config, YGMarkerLayoutData& layoutMarkerData, - void* const layoutContext) { + void* const layoutContext, + const uint32_t depth, + const uint32_t generationCount) { const YGFlexDirection mainAxis = YGResolveFlexDirection(node->getStyle().flexDirection(), direction); const YGFlexDirection crossAxis = YGFlexDirectionCross(mainAxis, direction); @@ -1496,7 +1503,9 @@ static void YGNodeAbsoluteLayoutChild( "abs-measure", config, layoutMarkerData, - layoutContext); + layoutContext, + depth, + generationCount); childWidth = child->getLayout().measuredDimensions[YGDimensionWidth] + child->getMarginForAxis(YGFlexDirectionRow, width).unwrap(); childHeight = child->getLayout().measuredDimensions[YGDimensionHeight] + @@ -1516,7 +1525,9 @@ static void YGNodeAbsoluteLayoutChild( "abs-layout", config, layoutMarkerData, - layoutContext); + layoutContext, + depth, + generationCount); if (child->isTrailingPosDefined(mainAxis) && !child->isLeadingPositionDefined(mainAxis)) { @@ -1844,7 +1855,9 @@ static float YGNodeComputeFlexBasisForChildren( const YGConfigRef config, bool performLayout, YGMarkerLayoutData& layoutMarkerData, - void* const layoutContext) { + void* const layoutContext, + const uint32_t depth, + const uint32_t generationCount) { float totalOuterFlexBasis = 0.0f; YGNodeRef singleFlexChild = nullptr; YGVector children = node->getChildren(); @@ -1895,7 +1908,7 @@ static float YGNodeComputeFlexBasisForChildren( continue; } if (child == singleFlexChild) { - child->setLayoutComputedFlexBasisGeneration(gCurrentGenerationCount); + child->setLayoutComputedFlexBasisGeneration(generationCount); child->setLayoutComputedFlexBasis(YGFloatOptional(0)); } else { YGNodeComputeFlexBasisForChild( @@ -1910,7 +1923,9 @@ static float YGNodeComputeFlexBasisForChildren( direction, config, layoutMarkerData, - layoutContext); + layoutContext, + depth, + generationCount); } totalOuterFlexBasis += @@ -2024,7 +2039,9 @@ static float YGDistributeFreeSpaceSecondPass( const bool performLayout, const YGConfigRef config, YGMarkerLayoutData& layoutMarkerData, - void* const layoutContext) { + void* const layoutContext, + const uint32_t depth, + const uint32_t generationCount) { float childFlexBasis = 0; float flexShrinkScaledFactor = 0; float flexGrowFactor = 0; @@ -2190,7 +2207,9 @@ static float YGDistributeFreeSpaceSecondPass( "flex", config, layoutMarkerData, - layoutContext); + layoutContext, + depth, + generationCount); node->setLayoutHadOverflow( node->getLayout().hadOverflow | currentRelativeChild->getLayout().hadOverflow); @@ -2321,7 +2340,9 @@ static void YGResolveFlexibleLength( const bool performLayout, const YGConfigRef config, YGMarkerLayoutData& layoutMarkerData, - void* const layoutContext) { + void* const layoutContext, + const uint32_t depth, + const uint32_t generationCount) { const float originalFreeSpace = collectedFlexItemsValues.remainingFreeSpace; // First pass: detect the flex items whose min/max constraints trigger YGDistributeFreeSpaceFirstPass( @@ -2347,7 +2368,9 @@ static void YGResolveFlexibleLength( performLayout, config, layoutMarkerData, - layoutContext); + layoutContext, + depth, + generationCount); collectedFlexItemsValues.remainingFreeSpace = originalFreeSpace - distributedFreeSpace; @@ -2647,7 +2670,9 @@ static void YGNodelayoutImpl( const bool performLayout, const YGConfigRef config, YGMarkerLayoutData& layoutMarkerData, - void* const layoutContext) { + void* const layoutContext, + const uint32_t depth, + const uint32_t generationCount) { YGAssertWithNode( node, YGFloatIsUndefined(availableWidth) @@ -2828,7 +2853,9 @@ static void YGNodelayoutImpl( config, performLayout, layoutMarkerData, - layoutContext); + layoutContext, + depth, + generationCount); const bool flexBasisOverflows = measureModeMainDim == YGMeasureModeUndefined ? false @@ -2936,7 +2963,9 @@ static void YGNodelayoutImpl( performLayout, config, layoutMarkerData, - layoutContext); + layoutContext, + depth, + generationCount); } node->setLayoutHadOverflow( @@ -3110,7 +3139,9 @@ static void YGNodelayoutImpl( "stretch", config, layoutMarkerData, - layoutContext); + layoutContext, + depth, + generationCount); } } else { const float remainingCrossDim = containerCrossAxis - @@ -3318,7 +3349,9 @@ static void YGNodelayoutImpl( "multiline-stretch", config, layoutMarkerData, - layoutContext); + layoutContext, + depth, + generationCount); } } break; @@ -3458,7 +3491,9 @@ static void YGNodelayoutImpl( direction, config, layoutMarkerData, - layoutContext); + layoutContext, + depth, + generationCount); } // STEP 11: SETTING TRAILING POSITIONS FOR CHILDREN @@ -3486,7 +3521,6 @@ static void YGNodelayoutImpl( } } -uint32_t gDepth = 0; bool gPrintChanges = false; bool gPrintSkips = false; @@ -3692,13 +3726,15 @@ bool YGLayoutNodeInternal( const char* reason, const YGConfigRef config, YGMarkerLayoutData& layoutMarkerData, - void* const layoutContext) { + void* const layoutContext, + uint32_t depth, + const uint32_t generationCount) { YGLayout* layout = &node->getLayout(); - gDepth++; + depth++; const bool needToVisitNode = - (node->isDirty() && layout->generationCount != gCurrentGenerationCount) || + (node->isDirty() && layout->generationCount != generationCount) || layout->lastOwnerDirection != ownerDirection; if (needToVisitNode) { @@ -3800,8 +3836,8 @@ bool YGLayoutNodeInternal( YGLogLevelVerbose, nullptr, "%s%d.{[skipped] ", - YGSpacer(gDepth), - gDepth); + YGSpacer(depth), + depth); node->print(layoutContext); Log::log( node, @@ -3823,8 +3859,8 @@ bool YGLayoutNodeInternal( YGLogLevelVerbose, nullptr, "%s%d.{%s", - YGSpacer(gDepth), - gDepth, + YGSpacer(depth), + depth, needToVisitNode ? "*" : ""); node->print(layoutContext); Log::log( @@ -3851,7 +3887,9 @@ bool YGLayoutNodeInternal( performLayout, config, layoutMarkerData, - layoutContext); + layoutContext, + depth, + generationCount); if (gPrintChanges) { Log::log( @@ -3859,8 +3897,8 @@ bool YGLayoutNodeInternal( YGLogLevelVerbose, nullptr, "%s%d.}%s", - YGSpacer(gDepth), - gDepth, + YGSpacer(depth), + depth, needToVisitNode ? "*" : ""); node->print(layoutContext); Log::log( @@ -3924,8 +3962,7 @@ bool YGLayoutNodeInternal( node->setDirty(false); } - gDepth--; - layout->generationCount = gCurrentGenerationCount; + layout->generationCount = generationCount; #ifdef YG_ENABLE_EVENTS LayoutType layoutType; @@ -4110,7 +4147,9 @@ void YGNodeCalculateLayoutWithContext( "initial", node->getConfig(), marker.data, - layoutContext)) { + layoutContext, + 0, // tree root + gCurrentGenerationCount)) { node->setPosition( node->getLayout().direction, ownerWidth, ownerHeight, ownerWidth); YGRoundToPixelGrid(node, node->getConfig()->pointScaleFactor, 0.0f, 0.0f); @@ -4162,7 +4201,9 @@ void YGNodeCalculateLayoutWithContext( "initial", nodeWithoutLegacyFlag->getConfig(), layoutMarkerData, - layoutContext)) { + layoutContext, + 0, // tree root + gCurrentGenerationCount)) { nodeWithoutLegacyFlag->setPosition( nodeWithoutLegacyFlag->getLayout().direction, ownerWidth, From 2c6a4485f595031db5b8e2ad6095ae8e6b682f73 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Fri, 28 Jun 2019 05:11:45 -0700 Subject: [PATCH 104/347] Remove duplicate declaration of `YGRoundValueToPixelGrid` from `Yoga-internal.h` Summary: @public Removes the declaration of `YGRoundValueToPixelGrid` from `Yoga-internal.h`, as it is already declared in `Yoga.h`. `Yoga.h` is included from `Yoga-internal.h` Reviewed By: SidharthGuglani Differential Revision: D16047832 fbshipit-source-id: 72d9d2510372c983eedacc5d7af406b9346f18e6 --- yoga/Yoga-internal.h | 6 ------ 1 file changed, 6 deletions(-) diff --git a/yoga/Yoga-internal.h b/yoga/Yoga-internal.h index 34c0b077..e08027da 100644 --- a/yoga/Yoga-internal.h +++ b/yoga/Yoga-internal.h @@ -16,12 +16,6 @@ using YGVector = std::vector; YG_EXTERN_C_BEGIN -WIN_EXPORT float YGRoundValueToPixelGrid( - const float value, - const float pointScaleFactor, - const bool forceCeil, - const bool forceFloor); - void YGNodeCalculateLayoutWithContext( YGNodeRef node, float availableWidth, From 73224c62b5e4f8fd02438418e2fc794cf73326c3 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Fri, 28 Jun 2019 09:53:15 -0700 Subject: [PATCH 105/347] Publish two events for measure callbacks Summary: Publishing two events will allow us to replace marker functionality completely with events. This also allows us to remove measuring time spent from Yoga itself. Reviewed By: SidharthGuglani Differential Revision: D16049810 fbshipit-source-id: 98628a92ed3c94d479e9fbcd53fac90c5f524087 --- tests/EventsTest.cpp | 5 ++--- yoga/Yoga.cpp | 3 ++- yoga/event/event.h | 5 +++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/tests/EventsTest.cpp b/tests/EventsTest.cpp index b940c6b1..c34dd547 100644 --- a/tests/EventsTest.cpp +++ b/tests/EventsTest.cpp @@ -134,10 +134,9 @@ void EventTest::listen(const YGNode& node, Event::Type type, Event::Data data) { events.push_back(createArgs(node, data)); break; case Event::LayoutPassStart: - break; case Event::LayoutPassEnd: - break; - case Event::NodeMeasure: + case Event::MeasureCallbackStart: + case Event::MeasureCallbackEnd: break; } } diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 7b470f5d..0888710f 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -1642,6 +1642,7 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( } else { #ifdef YG_ENABLE_EVENTS auto start = steady_clock::now(); + Event::publish(node); #endif // Measure the text under the current constraints. @@ -1661,7 +1662,7 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( auto measureCallbackDuration = duration_cast>(end - start); - Event::publish( + Event::publish( node, {layoutContext, innerWidth, diff --git a/yoga/event/event.h b/yoga/event/event.h index 4179e9be..eb32b457 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -31,7 +31,8 @@ struct Event { NodeLayout, LayoutPassStart, LayoutPassEnd, - NodeMeasure, + MeasureCallbackStart, + MeasureCallbackEnd, }; class Data; using Subscriber = void(const YGNode&, Type, Data); @@ -93,7 +94,7 @@ struct Event::TypedData { }; template <> -struct Event::TypedData { +struct Event::TypedData { void* layoutContext; float width; YGMeasureMode widthMeasureMode; From c6ae314202e2ed74b187d32e3c4c04a02e045175 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Fri, 28 Jun 2019 09:53:15 -0700 Subject: [PATCH 106/347] Stop recording measure callback duration Summary: Removes time measurements for measure callbacks. This functionality should not be part of Yoga/core, and can now be done by event subscribers themselves, as we have two events per measure callback. Reviewed By: SidharthGuglani Differential Revision: D16049812 fbshipit-source-id: e16556f3854e42f4bada39a97a668e718719b22c --- yoga/Yoga.cpp | 11 +---------- yoga/event/event.h | 1 - 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 0888710f..5d6a258b 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -10,7 +10,6 @@ #include #include #include -#include #include "Utils.h" #include "YGNode.h" #include "YGNodePrint.h" @@ -30,8 +29,6 @@ __forceinline const float fmaxf(const float a, const float b) { using namespace facebook::yoga; using detail::Log; -using std::chrono::duration_cast; -using std::chrono::steady_clock; #ifdef ANDROID static int YGAndroidLog( @@ -1641,7 +1638,6 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( YGDimensionHeight); } else { #ifdef YG_ENABLE_EVENTS - auto start = steady_clock::now(); Event::publish(node); #endif @@ -1658,10 +1654,6 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( layoutMarkerData.measureCallbacks += 1; #ifdef YG_ENABLE_EVENTS - auto end = steady_clock::now(); - auto measureCallbackDuration = - duration_cast>(end - start); - Event::publish( node, {layoutContext, @@ -1670,8 +1662,7 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( innerHeight, heightMeasureMode, measuredSize.width, - measuredSize.height, - measureCallbackDuration.count()}); + measuredSize.height}); #endif node->setLayoutMeasuredDimension( diff --git a/yoga/event/event.h b/yoga/event/event.h index eb32b457..69911a2b 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -102,7 +102,6 @@ struct Event::TypedData { YGMeasureMode heightMeasureMode; float measuredWidth; float measuredHeight; - float measureCallbackDuration; }; template <> From cd5324378dab3fef8da28dde2e841e4d8d9d4b80 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Fri, 28 Jun 2019 09:53:15 -0700 Subject: [PATCH 107/347] Move `YG_ENABLE_EVENTS` checks to `event.h` Summary: Instead of checking whether `YG_ENABLE_EVENTS` is defined for every publish, we simply wrap the body of the `publish` function macro that delegates to the method that actually publishes the event. This way we get 1. easier to write code where we publish events 2. more type safety when editing, enabling editors/IDEs to show errors without knowing about `YG_ENABLE_EVENTS` Reviewed By: SidharthGuglani Differential Revision: D16049888 fbshipit-source-id: cbf362d6f7be5053c3f377125d303b7137d6a241 --- yoga/Yoga.cpp | 19 ------------------- yoga/event/event.h | 2 ++ 2 files changed, 2 insertions(+), 19 deletions(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 5d6a258b..d23d7129 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -213,9 +213,7 @@ WIN_EXPORT YGNodeRef YGNodeNewWithConfig(const YGConfigRef config) { const YGNodeRef node = new YGNode{config}; YGAssertWithConfig( config, node != nullptr, "Could not allocate memory for node"); -#ifdef YG_ENABLE_EVENTS Event::publish(node, {config}); -#endif return node; } @@ -235,9 +233,7 @@ YGNodeRef YGNodeClone(YGNodeRef oldNode) { oldNode->getConfig(), node != nullptr, "Could not allocate memory for node"); -#ifdef YG_ENABLE_EVENTS Event::publish(node, {node->getConfig()}); -#endif node->setOwner(nullptr); return node; } @@ -256,9 +252,7 @@ static YGNodeRef YGNodeDeepClone(YGNodeRef oldNode) { auto config = YGConfigClone(*oldNode->getConfig()); auto node = new YGNode{*oldNode, config}; node->setOwner(nullptr); -#ifdef YG_ENABLE_EVENTS Event::publish(node, {node->getConfig()}); -#endif YGVector vec = YGVector(); vec.reserve(oldNode->getChildren().size()); @@ -286,9 +280,7 @@ void YGNodeFree(const YGNodeRef node) { } node->clearChildren(); -#ifdef YG_ENABLE_EVENTS Event::publish(node, {node->getConfig()}); -#endif delete node; } @@ -1637,9 +1629,7 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( ownerWidth), YGDimensionHeight); } else { -#ifdef YG_ENABLE_EVENTS Event::publish(node); -#endif // Measure the text under the current constraints. const YGSize measuredSize = marker::MarkerSection::wrap( @@ -1653,7 +1643,6 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( layoutMarkerData.measureCallbacks += 1; -#ifdef YG_ENABLE_EVENTS Event::publish( node, {layoutContext, @@ -1663,7 +1652,6 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( heightMeasureMode, measuredSize.width, measuredSize.height}); -#endif node->setLayoutMeasuredDimension( YGNodeBoundAxis( @@ -3956,7 +3944,6 @@ bool YGLayoutNodeInternal( layout->generationCount = generationCount; -#ifdef YG_ENABLE_EVENTS LayoutType layoutType; if (performLayout) { layoutType = !needToVisitNode && cachedResults == &layout->cachedLayout @@ -3967,7 +3954,6 @@ bool YGLayoutNodeInternal( : LayoutType::kMeasure; } Event::publish(node, {layoutType, layoutContext}); -#endif return (needToVisitNode || cachedResults == nullptr); } @@ -4076,9 +4062,7 @@ void YGNodeCalculateLayoutWithContext( const YGDirection ownerDirection, void* layoutContext) { -#ifdef YG_ENABLE_EVENTS Event::publish(node, {layoutContext}); -#endif marker::MarkerSection marker{node}; // Increment the generation count. This will force the recursive routine to @@ -4158,10 +4142,7 @@ void YGNodeCalculateLayoutWithContext( } marker.end(); - -#ifdef YG_ENABLE_EVENTS Event::publish(node, {layoutContext, &marker.data}); -#endif // We want to get rid off `useLegacyStretchBehaviour` from YGConfig. But we // aren't sure whether client's of yoga have gotten rid off this flag or not. diff --git a/yoga/event/event.h b/yoga/event/event.h index 69911a2b..1f2cf90f 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -60,7 +60,9 @@ struct Event { template static void publish(const YGNode& node, const TypedData& eventData = {}) { +#ifdef YG_ENABLE_EVENTS publish(node, E, Data{eventData}); +#endif } template From cc27d851101b962518fac1dfbe0fc82dd893866c Mon Sep 17 00:00:00 2001 From: Uladzislau Paulovich Date: Mon, 1 Jul 2019 08:47:58 -0700 Subject: [PATCH 108/347] Remove incorrect constexpr specifier in YGLayout (#25430) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/25430 Pull Request resolved: https://github.com/facebook/litho/pull/561 Pull Request resolved: https://github.com/facebook/yoga/pull/910 * According to C++ standard values which produce undefined behavior cannot be declared as `constexpr`. * Expressions which evaluate to `nan, infinity, etc` are undefined behavior. For more details you can checkout this Stackoverflow answer: https://stackoverflow.com/a/46373136 Reviewed By: davidaurelio Differential Revision: D16055108 fbshipit-source-id: ee85ba63a714b18bfb8aa8c0770652e184454f74 --- yoga/YGLayout.h | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/yoga/YGLayout.h b/yoga/YGLayout.h index 1b30cc8c..74082a76 100644 --- a/yoga/YGLayout.h +++ b/yoga/YGLayout.h @@ -8,12 +8,9 @@ #include "YGFloatOptional.h" #include "Yoga-internal.h" -constexpr std::array kYGDefaultDimensionValues = { - {YGUndefined, YGUndefined}}; - struct YGLayout { std::array position = {}; - std::array dimensions = kYGDefaultDimensionValues; + std::array dimensions = {{YGUndefined, YGUndefined}}; std::array margin = {}; std::array border = {}; std::array padding = {}; @@ -33,7 +30,7 @@ struct YGLayout { uint32_t nextCachedMeasurementsIndex = 0; std::array cachedMeasurements = {}; - std::array measuredDimensions = kYGDefaultDimensionValues; + std::array measuredDimensions = {{YGUndefined, YGUndefined}}; YGCachedMeasurement cachedLayout = YGCachedMeasurement(); From 1c8e8d3aecc521642948e9f0676f57f56509d358 Mon Sep 17 00:00:00 2001 From: James Burnett Date: Thu, 4 Jul 2019 18:56:08 -0700 Subject: [PATCH 109/347] Compile Issues with Recent GCC (#895) Summary: GCC 8.3.0 (and possibly all gcc 7+) identified several warnings for signed unsigned integer comparison. With `-Werror` enabled this broke compiling tests. I suspect the warning is related to google/googletest#683. This diff updates those `ASSERT_EQ` calls that attempt to compare signed and unsigned errors by specifically declaring the literals to be unsigned. There is also an issue with Buck where it will not link to pthreads. facebook/buck#1443. Adding a `prebuilt_cxx_library` for pthread fixes that issue and the tests will compile and run. Finally, there was a warning about a missing return after a switch in `InstrumentationTest.cpp`. I added a `return ""` as a default, but it might be better to throw something. Thoughts? Pull Request resolved: https://github.com/facebook/yoga/pull/895 Reviewed By: davidaurelio Differential Revision: D15393082 Pulled By: davidaurelio fbshipit-source-id: 4f13ec2f016af39537c08fb591b188a6a0ed55ce --- lib/gtest/BUCK | 14 ++++++++++++-- tests/InstrumentationTest.cpp | 1 + tests/YGDefaultValuesTest.cpp | 2 +- tests/YGMeasureModeTest.cpp | 20 ++++++++++---------- tests/YGPersistenceTest.cpp | 28 ++++++++++++++-------------- 5 files changed, 38 insertions(+), 27 deletions(-) diff --git a/lib/gtest/BUCK b/lib/gtest/BUCK index 21dbc8b3..7be6a0bd 100644 --- a/lib/gtest/BUCK +++ b/lib/gtest/BUCK @@ -2,13 +2,21 @@ # # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -load("//tools/build_defs/oss:yoga_defs.bzl", "YOGA_ROOTS", "subdir_glob", "yoga_cxx_library") +load("//tools/build_defs/oss:yoga_defs.bzl", "YOGA_ROOTS", "subdir_glob", "yoga_cxx_library", "yoga_prebuilt_cxx_library") COMPILER_FLAGS = [ "-std=c++14", "-Wno-missing-prototypes", ] +yoga_prebuilt_cxx_library( + name = "pthread", + exported_linker_flags = [ + "-lpthread", + ], + header_only = True, +) + yoga_cxx_library( name = "gtest", srcs = glob(["googletest/googletest/src/*.cc"]), @@ -20,5 +28,7 @@ yoga_cxx_library( ]), compiler_flags = COMPILER_FLAGS, visibility = YOGA_ROOTS, - deps = [], + deps = [ + ":pthread", + ], ) diff --git a/tests/InstrumentationTest.cpp b/tests/InstrumentationTest.cpp index e4128314..63a5f5f4 100644 --- a/tests/InstrumentationTest.cpp +++ b/tests/InstrumentationTest.cpp @@ -282,6 +282,7 @@ const char* markerTypeName(YGMarker type) { case YGMarkerBaselineFn: return "YGMarkerBaselineFn"; } + return ""; } template diff --git a/tests/YGDefaultValuesTest.cpp b/tests/YGDefaultValuesTest.cpp index f77b1924..6237dcb4 100644 --- a/tests/YGDefaultValuesTest.cpp +++ b/tests/YGDefaultValuesTest.cpp @@ -10,7 +10,7 @@ TEST(YogaTest, assert_default_values) { const YGNodeRef root = YGNodeNew(); - ASSERT_EQ(0, YGNodeGetChildCount(root)); + ASSERT_EQ(0u, YGNodeGetChildCount(root)); ASSERT_EQ(NULL, YGNodeGetChild(root, 1)); ASSERT_EQ(YGDirectionInherit, YGNodeStyleGetDirection(root)); diff --git a/tests/YGMeasureModeTest.cpp b/tests/YGMeasureModeTest.cpp index d3749c2f..f2927ce1 100644 --- a/tests/YGMeasureModeTest.cpp +++ b/tests/YGMeasureModeTest.cpp @@ -62,7 +62,7 @@ TEST(YogaTest, exactly_measure_stretched_child_column) { YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); - ASSERT_EQ(1, constraintList.length); + ASSERT_EQ(1u, constraintList.length); ASSERT_FLOAT_EQ(100, constraintList.constraints[0].width); ASSERT_EQ(YGMeasureModeExactly, constraintList.constraints[0].widthMode); @@ -91,7 +91,7 @@ TEST(YogaTest, exactly_measure_stretched_child_row) { YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); - ASSERT_EQ(1, constraintList.length); + ASSERT_EQ(1u, constraintList.length); ASSERT_FLOAT_EQ(100, constraintList.constraints[0].height); ASSERT_EQ(YGMeasureModeExactly, constraintList.constraints[0].heightMode); @@ -118,7 +118,7 @@ TEST(YogaTest, at_most_main_axis_column) { YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); - ASSERT_EQ(1, constraintList.length); + ASSERT_EQ(1u, constraintList.length); ASSERT_FLOAT_EQ(100, constraintList.constraints[0].height); ASSERT_EQ(YGMeasureModeAtMost, constraintList.constraints[0].heightMode); @@ -146,7 +146,7 @@ TEST(YogaTest, at_most_cross_axis_column) { YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); - ASSERT_EQ(1, constraintList.length); + ASSERT_EQ(1u, constraintList.length); ASSERT_FLOAT_EQ(100, constraintList.constraints[0].width); ASSERT_EQ(YGMeasureModeAtMost, constraintList.constraints[0].widthMode); @@ -174,7 +174,7 @@ TEST(YogaTest, at_most_main_axis_row) { YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); - ASSERT_EQ(1, constraintList.length); + ASSERT_EQ(1u, constraintList.length); ASSERT_FLOAT_EQ(100, constraintList.constraints[0].width); ASSERT_EQ(YGMeasureModeAtMost, constraintList.constraints[0].widthMode); @@ -203,7 +203,7 @@ TEST(YogaTest, at_most_cross_axis_row) { YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); - ASSERT_EQ(1, constraintList.length); + ASSERT_EQ(1u, constraintList.length); ASSERT_FLOAT_EQ(100, constraintList.constraints[0].height); ASSERT_EQ(YGMeasureModeAtMost, constraintList.constraints[0].heightMode); @@ -230,7 +230,7 @@ TEST(YogaTest, flex_child) { YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); - ASSERT_EQ(2, constraintList.length); + ASSERT_EQ(2u, constraintList.length); ASSERT_FLOAT_EQ(100, constraintList.constraints[0].height); ASSERT_EQ(YGMeasureModeAtMost, constraintList.constraints[0].heightMode); @@ -261,7 +261,7 @@ TEST(YogaTest, flex_child_with_flex_basis) { YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); - ASSERT_EQ(1, constraintList.length); + ASSERT_EQ(1u, constraintList.length); ASSERT_FLOAT_EQ(100, constraintList.constraints[0].height); ASSERT_EQ(YGMeasureModeExactly, constraintList.constraints[0].heightMode); @@ -290,7 +290,7 @@ TEST(YogaTest, overflow_scroll_column) { YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); - ASSERT_EQ(1, constraintList.length); + ASSERT_EQ(1u, constraintList.length); ASSERT_FLOAT_EQ(100, constraintList.constraints[0].width); ASSERT_EQ(YGMeasureModeAtMost, constraintList.constraints[0].widthMode); @@ -323,7 +323,7 @@ TEST(YogaTest, overflow_scroll_row) { YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); - ASSERT_EQ(1, constraintList.length); + ASSERT_EQ(1u, constraintList.length); ASSERT_TRUE(YGFloatIsUndefined(constraintList.constraints[0].width)); ASSERT_EQ(YGMeasureModeUndefined, constraintList.constraints[0].widthMode); diff --git a/tests/YGPersistenceTest.cpp b/tests/YGPersistenceTest.cpp index 9ad24111..338552c7 100644 --- a/tests/YGPersistenceTest.cpp +++ b/tests/YGPersistenceTest.cpp @@ -46,14 +46,14 @@ TEST(YogaTest, cloning_shared_root) { const YGNodeRef root2 = YGNodeClone(root); YGNodeStyleSetWidth(root2, 100); - ASSERT_EQ(2, YGNodeGetChildCount(root2)); + ASSERT_EQ(2u, YGNodeGetChildCount(root2)); // The children should have referential equality at this point. ASSERT_EQ(root_child0, YGNodeGetChild(root2, 0)); ASSERT_EQ(root_child1, YGNodeGetChild(root2, 1)); YGNodeCalculateLayout(root2, YGUndefined, YGUndefined, YGDirectionLTR); - ASSERT_EQ(2, YGNodeGetChildCount(root2)); + ASSERT_EQ(2u, YGNodeGetChildCount(root2)); // Relayout with no changed input should result in referential equality. ASSERT_EQ(root_child0, YGNodeGetChild(root2, 0)); ASSERT_EQ(root_child1, YGNodeGetChild(root2, 1)); @@ -62,7 +62,7 @@ TEST(YogaTest, cloning_shared_root) { YGNodeStyleSetHeight(root2, 200); YGNodeCalculateLayout(root2, YGUndefined, YGUndefined, YGDirectionLTR); - ASSERT_EQ(2, YGNodeGetChildCount(root2)); + ASSERT_EQ(2u, YGNodeGetChildCount(root2)); // Relayout with changed input should result in cloned children. const YGNodeRef root2_child0 = YGNodeGetChild(root2, 0); const YGNodeRef root2_child1 = YGNodeGetChild(root2, 1); @@ -112,26 +112,26 @@ TEST(YogaTest, mutating_children_of_a_clone_clones_only_after_layout) { const YGConfigRef config = YGConfigNew(); const YGNodeRef root = YGNodeNewWithConfig(config); - ASSERT_EQ(0, YGNodeGetChildCount(root)); + ASSERT_EQ(0u, YGNodeGetChildCount(root)); const YGNodeRef root2 = YGNodeClone(root); - ASSERT_EQ(0, YGNodeGetChildCount(root2)); + ASSERT_EQ(0u, YGNodeGetChildCount(root2)); const YGNodeRef root2_child0 = YGNodeNewWithConfig(config); YGNodeInsertChild(root2, root2_child0, 0); - ASSERT_EQ(0, YGNodeGetChildCount(root)); - ASSERT_EQ(1, YGNodeGetChildCount(root2)); + ASSERT_EQ(0u, YGNodeGetChildCount(root)); + ASSERT_EQ(1u, YGNodeGetChildCount(root2)); const YGNodeRef root3 = YGNodeClone(root2); - ASSERT_EQ(1, YGNodeGetChildCount(root2)); - ASSERT_EQ(1, YGNodeGetChildCount(root3)); + ASSERT_EQ(1u, YGNodeGetChildCount(root2)); + ASSERT_EQ(1u, YGNodeGetChildCount(root3)); ASSERT_EQ(YGNodeGetChild(root2, 0), YGNodeGetChild(root3, 0)); const YGNodeRef root3_child1 = YGNodeNewWithConfig(config); YGNodeInsertChild(root3, root3_child1, 1); - ASSERT_EQ(1, YGNodeGetChildCount(root2)); - ASSERT_EQ(2, YGNodeGetChildCount(root3)); + ASSERT_EQ(1u, YGNodeGetChildCount(root2)); + ASSERT_EQ(2u, YGNodeGetChildCount(root3)); ASSERT_EQ(root3_child1, YGNodeGetChild(root3, 1)); ASSERT_EQ(YGNodeGetChild(root2, 0), YGNodeGetChild(root3, 0)); @@ -139,8 +139,8 @@ TEST(YogaTest, mutating_children_of_a_clone_clones_only_after_layout) { ASSERT_EQ(root3_child1, YGNodeGetChild(root4, 1)); YGNodeRemoveChild(root4, root3_child1); - ASSERT_EQ(2, YGNodeGetChildCount(root3)); - ASSERT_EQ(1, YGNodeGetChildCount(root4)); + ASSERT_EQ(2u, YGNodeGetChildCount(root3)); + ASSERT_EQ(1u, YGNodeGetChildCount(root4)); ASSERT_EQ(YGNodeGetChild(root3, 0), YGNodeGetChild(root4, 0)); YGNodeCalculateLayout(root4, YGUndefined, YGUndefined, YGDirectionLTR); @@ -198,7 +198,7 @@ TEST(YogaTest, cloning_two_levels) { YGNodeRemoveAllChildren(root2); YGNodeInsertChild(root2, root2_child0, 0); YGNodeInsertChild(root2, root2_child1, 1); - ASSERT_EQ(2, YGNodeGetChildCount(root2)); + ASSERT_EQ(2u, YGNodeGetChildCount(root2)); YGNodeCalculateLayout(root2, YGUndefined, YGUndefined, YGDirectionLTR); From 9c82ba783f80ae60c4f09eb2cfca79620784c0dc Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 10 Jul 2019 08:43:41 -0700 Subject: [PATCH 110/347] Adds typed event test data for test cases Summary: We are now using custom TypedEventTestData for test cases as we need to copy some data passed from the yoga event system Reviewed By: davidaurelio Differential Revision: D16090931 fbshipit-source-id: 4d11bdbdd73b67172ad4bba4b294c71f1c24cc10 --- tests/EventsTest.cpp | 59 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 53 insertions(+), 6 deletions(-) diff --git a/tests/EventsTest.cpp b/tests/EventsTest.cpp index c34dd547..ef0c46c9 100644 --- a/tests/EventsTest.cpp +++ b/tests/EventsTest.cpp @@ -14,20 +14,37 @@ #include #include #include +#include +#include namespace facebook { namespace yoga { namespace test { +template +struct TypedEventTestData {}; + +template <> +struct TypedEventTestData { + void* layoutContext; + YGMarkerLayoutData layoutData; +}; + struct EventArgs { const YGNode* node; Event::Type type; std::unique_ptr> dataPtr; + std::unique_ptr> eventTestDataPtr; template const Event::TypedData& data() { return *static_cast*>(dataPtr.get()); } + + template + const TypedEventTestData& eventTestData() { + return *static_cast*>(eventTestDataPtr.get()); + } }; class EventTest : public ::testing::Test { @@ -96,8 +113,8 @@ TEST_F(EventTest, layout_events) { YGNodeCalculateLayout(root, 123, 456, YGDirectionLTR); - ASSERT_EQ(events[2].node, child); - ASSERT_EQ(events[2].type, Event::NodeLayout); + ASSERT_EQ(events[2].node, root); + ASSERT_EQ(events[2].type, Event::LayoutPassStart); ASSERT_EQ(events[3].node, child); ASSERT_EQ(events[3].type, Event::NodeLayout); @@ -105,19 +122,42 @@ TEST_F(EventTest, layout_events) { ASSERT_EQ(events[4].node, child); ASSERT_EQ(events[4].type, Event::NodeLayout); - ASSERT_EQ(events[5].node, root); + ASSERT_EQ(events[5].node, child); ASSERT_EQ(events[5].type, Event::NodeLayout); + ASSERT_EQ(events[6].node, root); + ASSERT_EQ(events[6].type, Event::NodeLayout); + + ASSERT_EQ(events[7].node, root); + ASSERT_EQ(events[7].type, Event::LayoutPassEnd); + YGNodeFreeRecursive(root); } namespace { template -EventArgs createArgs(const YGNode& node, const Event::Data& data) { +EventArgs createArgs(const YGNode& node, const Event::Data data) { using Data = Event::TypedData; auto deleteData = [](void* x) { delete static_cast(x); }; - return {&node, E, {new Data{data.get()}, deleteData}}; + + return {&node, E, {new Data{(data.get())}, deleteData}}; +} + +template +EventArgs createArgs( + const YGNode& node, + const Event::Data data, + TypedEventTestData eventTestData) { + using EventTestData = TypedEventTestData; + auto deleteEventTestData = [](void* x) { + delete static_cast(x); + }; + + EventArgs args = createArgs(node, data); + args.eventTestDataPtr = {new EventTestData{eventTestData}, + deleteEventTestData}; + return args; } } // namespace @@ -134,7 +174,14 @@ void EventTest::listen(const YGNode& node, Event::Type type, Event::Data data) { events.push_back(createArgs(node, data)); break; case Event::LayoutPassStart: - case Event::LayoutPassEnd: + events.push_back(createArgs(node, data)); + break; + case Event::LayoutPassEnd: { + auto& eventData = data.get(); + events.push_back(createArgs( + node, data, {eventData.layoutContext, *eventData.layoutData})); + break; + } case Event::MeasureCallbackStart: case Event::MeasureCallbackEnd: break; From ce517689ff91178489ef45b40196b2e1c9f7caef Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 10 Jul 2019 08:43:41 -0700 Subject: [PATCH 111/347] add tests for layoutPassStart and layoutPassEnd Summary: Add tests for layout pass start and end , same as what we had in InstrumentationTests for marker based approach Reviewed By: davidaurelio Differential Revision: D16073121 fbshipit-source-id: 838f01cb2a41d2d2764ba7ce2f317147f737b287 --- tests/EventsTest.cpp | 115 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) diff --git a/tests/EventsTest.cpp b/tests/EventsTest.cpp index ef0c46c9..e10efa07 100644 --- a/tests/EventsTest.cpp +++ b/tests/EventsTest.cpp @@ -134,6 +134,120 @@ TEST_F(EventTest, layout_events) { YGNodeFreeRecursive(root); } +TEST_F(EventTest, layout_events_single_node) { + auto root = YGNodeNew(); + YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); + + ASSERT_EQ(events[1].node, root); + ASSERT_EQ(events[1].type, Event::LayoutPassStart); + + ASSERT_EQ(events[2].node, root); + ASSERT_EQ(events[2].type, Event::NodeLayout); + + ASSERT_EQ(events[3].node, root); + ASSERT_EQ(events[3].type, Event::LayoutPassEnd); + + YGMarkerLayoutData layoutData = + events[3].eventTestData().layoutData; + + ASSERT_EQ(layoutData.layouts, 1); + ASSERT_EQ(layoutData.measures, 0); + ASSERT_EQ(layoutData.maxMeasureCache, 1); +} + +TEST_F(EventTest, layout_events_counts_multi_node_layout) { + auto root = YGNodeNew(); + auto childA = YGNodeNew(); + YGNodeInsertChild(root, childA, 0); + auto childB = YGNodeNew(); + YGNodeInsertChild(root, childB, 1); + + YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); + + ASSERT_EQ(events[3].node, root); + ASSERT_EQ(events[3].type, Event::LayoutPassStart); + + ASSERT_EQ(events[11].node, root); + ASSERT_EQ(events[11].type, Event::LayoutPassEnd); + + YGMarkerLayoutData layoutData = + events[11].eventTestData().layoutData; + + ASSERT_EQ(layoutData.layouts, 3); + ASSERT_EQ(layoutData.measures, 4); + ASSERT_EQ(layoutData.maxMeasureCache, 3); +} + +TEST_F(EventTest, layout_events_counts_cache_hits_single_node_layout) { + auto root = YGNodeNew(); + + YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); + + YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); + + ASSERT_EQ(events[4].node, root); + ASSERT_EQ(events[4].type, Event::LayoutPassStart); + + ASSERT_EQ(events[6].node, root); + ASSERT_EQ(events[6].type, Event::LayoutPassEnd); + + YGMarkerLayoutData layoutData = + events[6].eventTestData().layoutData; + + ASSERT_EQ(layoutData.layouts, 0); + ASSERT_EQ(layoutData.measures, 0); + ASSERT_EQ(layoutData.cachedLayouts, 1); + ASSERT_EQ(layoutData.cachedMeasures, 0); +} + +TEST_F(EventTest, layout_events_counts_cache_hits_multi_node_layout) { + auto root = YGNodeNew(); + auto childA = YGNodeNew(); + YGNodeInsertChild(root, childA, 0); + auto childB = YGNodeNew(); + YGNodeInsertChild(root, childB, 1); + + YGNodeCalculateLayout(root, 987, 654, YGDirectionLTR); + YGNodeCalculateLayout(root, 123, 456, YGDirectionLTR); + + YGNodeCalculateLayout(root, 987, 654, YGDirectionLTR); + + ASSERT_EQ(lastEvent().node, root); + ASSERT_EQ(lastEvent().type, Event::LayoutPassEnd); + + YGMarkerLayoutData layoutData = + lastEvent().eventTestData().layoutData; + + ASSERT_EQ(layoutData.layouts, 3); + ASSERT_EQ(layoutData.measures, 0); + ASSERT_EQ(layoutData.maxMeasureCache, 5); + ASSERT_EQ(layoutData.cachedLayouts, 0); + ASSERT_EQ(layoutData.cachedMeasures, 4); +} + +TEST_F(EventTest, layout_events_has_max_measure_cache) { + auto root = YGNodeNew(); + auto a = YGNodeNew(); + YGNodeInsertChild(root, a, 0); + auto b = YGNodeNew(); + YGNodeInsertChild(root, b, 1); + YGNodeStyleSetFlexBasis(a, 10.0f); + + for (auto s : {20, 30, 40}) { + YGNodeCalculateLayout(root, s, s, YGDirectionLTR); + } + + ASSERT_EQ(lastEvent().node, root); + ASSERT_EQ(lastEvent().type, Event::LayoutPassEnd); + + YGMarkerLayoutData layoutData = + lastEvent().eventTestData().layoutData; + + ASSERT_EQ(layoutData.layouts, 3); + ASSERT_EQ(layoutData.measures, 3); + ASSERT_EQ(layoutData.maxMeasureCache, 7); +} + namespace { template @@ -182,6 +296,7 @@ void EventTest::listen(const YGNode& node, Event::Type type, Event::Data data) { node, data, {eventData.layoutContext, *eventData.layoutData})); break; } + case Event::MeasureCallbackStart: case Event::MeasureCallbackEnd: break; From eeae39d7076535806e2038dfac798bd0797c7046 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 10 Jul 2019 08:43:41 -0700 Subject: [PATCH 112/347] move YGMarkerLayout to event based system Summary: Using layoutPassStart and LayoutPassEnd events instead of YGMarkerLayout for instrumentation Reviewed By: davidaurelio Differential Revision: D16048789 fbshipit-source-id: 041a35bc2cb1b7281ca83cf9d35041b4011cfeb9 --- tests/InstrumentationTest.cpp | 135 ---------------------------------- yoga/YGMarker.h | 8 -- yoga/Yoga.cpp | 9 +-- 3 files changed, 4 insertions(+), 148 deletions(-) diff --git a/tests/InstrumentationTest.cpp b/tests/InstrumentationTest.cpp index 63a5f5f4..a6bbcc40 100644 --- a/tests/InstrumentationTest.cpp +++ b/tests/InstrumentationTest.cpp @@ -67,136 +67,6 @@ struct MarkerTest : public ::testing::Test { uniquePtr config; }; -TEST_F(MarkerTest, marker_start_works) { - auto root = makeNode(); - - decltype(MarkerSection::data)* dataAddress; - { - MarkerSection marker{root.get()}; - dataAddress = &marker.data; - } - - auto& markerCookie = findLastMarker(YGMarkerLayout); - - ASSERT_EQ(markerCookie.start.marker, YGMarkerLayout) - << "wrong marker type passed to `startMarker`"; - ASSERT_EQ(markerCookie.start.node, root.get()) - << "wrong node pointer passed to `startMarker`"; - ASSERT_EQ(markerCookie.start.markerData.layout, dataAddress) - << "wrong pointer to marker data passed to `startMarker`"; -} - -TEST_F(MarkerTest, marker_end_works) { - auto root = makeNode(); - - { MarkerSection marker{root.get()}; } - - auto& markerCookie = findLastMarker(YGMarkerLayout); - - ASSERT_EQ(markerCookie.end.data.marker, markerCookie.start.marker) - << "marker type passed to `endMarker` differs from type passed to " - "`startMarker`"; - ASSERT_EQ(markerCookie.end.data.node, markerCookie.start.node) - << "node passed to `endMarker` differs from node passed to `startMarker`"; - ASSERT_EQ( - markerCookie.end.data.markerData.layout, - markerCookie.start.markerData.layout) - << "marker data pointer passed to `endMarker` differs from pointer " - "passed to `startMarker`"; - ASSERT_EQ(markerCookie.end.cookie, &markerCookie) - << "pointer returned by `startMarker` was not passed to `endMarker`"; -} - -TEST_F(MarkerTest, layout_marker) { - auto root = makeNode(); - - calculateLayout(root); - - auto& markerCookie = findLastMarker(YGMarkerLayout); - - ASSERT_EQ(markerCookie.start.marker, YGMarkerLayout); - ASSERT_EQ(markerCookie.start.node, root.get()); -} - -TEST_F(MarkerTest, layout_marker_counts_single_node_layout) { - auto root = makeNode(); - - calculateLayout(root); - - auto& markerCookie = findLastMarker(YGMarkerLayout); - - ASSERT_EQ( - markerCookie.end.markerData.layout, - (YGMarkerLayoutData{.layouts = 1, .measures = 0, .maxMeasureCache = 1})); -} - -TEST_F(MarkerTest, layout_marker_counts_multi_node_layout) { - auto root = makeNode(); - auto childA = addChild(root); - auto childB = addChild(root); - - calculateLayout(root); - - auto& markerCookie = findLastMarker(YGMarkerLayout); - - ASSERT_EQ( - markerCookie.end.markerData.layout, - (YGMarkerLayoutData{.layouts = 3, .measures = 4, .maxMeasureCache = 3})); -} - -TEST_F(MarkerTest, layout_marker_counts_cache_hits_single_node_layout) { - auto root = makeNode(); - calculateLayout(root); - - calculateLayout(root); - - auto& markerCookie = findLastMarker(YGMarkerLayout); - - ASSERT_EQ( - markerCookie.end.markerData.layout, - (YGMarkerLayoutData{.layouts = 0, - .measures = 0, - .cachedLayouts = 1, - .cachedMeasures = 0})); -} - -TEST_F(MarkerTest, layout_marker_counts_cache_hits_multi_node_layout) { - auto root = makeNode(); - auto childA = addChild(root); - auto childB = addChild(root); - calculateLayout(root, 987, 654); - calculateLayout(root, 123, 456); - - calculateLayout(root, 987, 654); - - auto& markerCookie = findLastMarker(YGMarkerLayout); - - ASSERT_EQ( - markerCookie.end.markerData.layout, - (YGMarkerLayoutData{.layouts = 3, - .measures = 0, - .maxMeasureCache = 5, - .cachedLayouts = 0, - .cachedMeasures = 4})); -} - -TEST_F(MarkerTest, layout_marker_has_max_measure_cache) { - auto root = makeNode(); - auto a = addChild(root); - auto b = addChild(root); - YGNodeStyleSetFlexBasis(a.get(), 10.0f); - - for (auto s : {20, 30, 40}) { - calculateLayout(root, s, s); - } - - auto& markerCookie = findLastMarker(YGMarkerLayout); - - ASSERT_EQ( - markerCookie.end.markerData.layout, - (YGMarkerLayoutData{.layouts = 3, .measures = 3, .maxMeasureCache = 7})); -} - TEST_F(MarkerTest, measure_functions_get_wrapped) { auto root = makeNode(); YGNodeSetMeasureFunc( @@ -244,9 +114,6 @@ void MarkerTest::endMarker( auto cookie = static_cast(id); cookie->end = {{marker, node, data}, id, {}}; switch (marker) { - case YGMarkerLayout: - cookie->end.markerData.layout = *marker::data(data); - break; case YGMarkerMeasure: case YGMarkerBaselineFn: break; @@ -275,8 +142,6 @@ namespace { const char* markerTypeName(YGMarker type) { switch (type) { - case YGMarkerLayout: - return "YGMarkerLayout"; case YGMarkerMeasure: return "YGMarkerMeasure"; case YGMarkerBaselineFn: diff --git a/yoga/YGMarker.h b/yoga/YGMarker.h index d9bb1277..785f5629 100644 --- a/yoga/YGMarker.h +++ b/yoga/YGMarker.h @@ -14,7 +14,6 @@ typedef struct YGNode* YGNodeRef; typedef struct YGConfig* YGConfigRef; typedef YG_ENUM_BEGIN(YGMarker){ - YGMarkerLayout, YGMarkerMeasure, YGMarkerBaselineFn, } YG_ENUM_END(YGMarker); @@ -33,7 +32,6 @@ typedef struct { } YGMarkerNoData; typedef union { - YGMarkerLayoutData* layout; YGMarkerNoData* noData; } YGMarkerData; @@ -60,12 +58,6 @@ namespace detail { template struct MarkerData; -template <> -struct MarkerData { - using type = YGMarkerLayoutData; - static type*& get(YGMarkerData& d) { return d.layout; } -}; - struct NoMarkerData { using type = YGMarkerNoData; static type*& get(YGMarkerData& d) { return d.noData; } diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index d23d7129..e35c8db9 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -4063,7 +4063,7 @@ void YGNodeCalculateLayoutWithContext( void* layoutContext) { Event::publish(node, {layoutContext}); - marker::MarkerSection marker{node}; + YGMarkerLayoutData markerData = {}; // Increment the generation count. This will force the recursive routine to // visit all dirty nodes at least once. Subsequent visits will be skipped if @@ -4122,7 +4122,7 @@ void YGNodeCalculateLayoutWithContext( true, "initial", node->getConfig(), - marker.data, + markerData, layoutContext, 0, // tree root gCurrentGenerationCount)) { @@ -4141,8 +4141,7 @@ void YGNodeCalculateLayoutWithContext( #endif } - marker.end(); - Event::publish(node, {layoutContext, &marker.data}); + Event::publish(node, {layoutContext, &markerData}); // We want to get rid off `useLegacyStretchBehaviour` from YGConfig. But we // aren't sure whether client's of yoga have gotten rid off this flag or not. @@ -4160,7 +4159,7 @@ void YGNodeCalculateLayoutWithContext( gCurrentGenerationCount++; // Rerun the layout, and calculate the diff unsetUseLegacyFlagRecursively(nodeWithoutLegacyFlag); - YGMarkerLayoutData layoutMarkerData; + YGMarkerLayoutData layoutMarkerData = {}; if (YGLayoutNodeInternal( nodeWithoutLegacyFlag, width, From 0f250490d48b2af459729bb37caf593352979fd2 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 10 Jul 2019 08:43:41 -0700 Subject: [PATCH 113/347] add baseline start and baseline end events Summary: Adds Baseline start and end events to be handled later for instrumentation Reviewed By: davidaurelio Differential Revision: D16048790 fbshipit-source-id: 8409dbb633168753a7bf8fab20bc6551d113ddd6 --- tests/EventsTest.cpp | 3 +++ yoga/Yoga.cpp | 6 ++++++ yoga/event/event.h | 2 ++ 3 files changed, 11 insertions(+) diff --git a/tests/EventsTest.cpp b/tests/EventsTest.cpp index e10efa07..fd8acf86 100644 --- a/tests/EventsTest.cpp +++ b/tests/EventsTest.cpp @@ -300,6 +300,9 @@ void EventTest::listen(const YGNode& node, Event::Type type, Event::Data data) { case Event::MeasureCallbackStart: case Event::MeasureCallbackEnd: break; + case Event::NodeBaselineStart: + case Event::NodeBaselineEnd: + break; } } diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index e35c8db9..d8175295 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -997,12 +997,18 @@ static inline YGAlign YGNodeAlignItem(const YGNode* node, const YGNode* child) { static float YGBaseline(const YGNodeRef node, void* layoutContext) { if (node->hasBaselineFunc()) { + + Event::publish(node); + const float baseline = marker::MarkerSection::wrap( node, &YGNode::baseline, node->getLayout().measuredDimensions[YGDimensionWidth], node->getLayout().measuredDimensions[YGDimensionHeight], layoutContext); + + Event::publish(node); + YGAssertWithNode( node, !YGFloatIsUndefined(baseline), diff --git a/yoga/event/event.h b/yoga/event/event.h index 1f2cf90f..2043cc8c 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -33,6 +33,8 @@ struct Event { LayoutPassEnd, MeasureCallbackStart, MeasureCallbackEnd, + NodeBaselineStart, + NodeBaselineEnd, }; class Data; using Subscriber = void(const YGNode&, Type, Data); From 39e512f691f2e0c0e5972a4121afc97ea9b3dd2e Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 10 Jul 2019 08:43:41 -0700 Subject: [PATCH 114/347] Add tests for measure and baseline events Summary: Add tests for measure and baseline events , same as we had in InstrumentationTests for marker based approach Reviewed By: davidaurelio Differential Revision: D16074402 fbshipit-source-id: 8b11cd6468420428701fd5be5c57700cbd913d23 --- tests/EventsTest.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/tests/EventsTest.cpp b/tests/EventsTest.cpp index fd8acf86..bb86fe71 100644 --- a/tests/EventsTest.cpp +++ b/tests/EventsTest.cpp @@ -248,6 +248,40 @@ TEST_F(EventTest, layout_events_has_max_measure_cache) { ASSERT_EQ(layoutData.maxMeasureCache, 7); } +TEST_F(EventTest, measure_functions_get_wrapped) { + auto root = YGNodeNew(); + YGNodeSetMeasureFunc( + root, [](YGNodeRef, float, YGMeasureMode, float, YGMeasureMode) { + return YGSize{}; + }); + + YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); + + ASSERT_EQ(events[2].node, root); + ASSERT_EQ(events[2].type, Event::MeasureCallbackStart); + + ASSERT_EQ(events[events.size() - 1].node, root); + ASSERT_EQ(events[events.size() - 1].type, Event::LayoutPassEnd); +} + +TEST_F(EventTest, baseline_functions_get_wrapped) { + auto root = YGNodeNew(); + auto child = YGNodeNew(); + YGNodeInsertChild(root, child, 0); + + YGNodeSetBaselineFunc(child, [](YGNodeRef, float, float) { return 0.0f; }); + YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow); + YGNodeStyleSetAlignItems(root, YGAlignBaseline); + + YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); + + ASSERT_EQ(events[5].node, child); + ASSERT_EQ(events[5].type, Event::NodeBaselineStart); + + ASSERT_EQ(events[events.size() - 1].node, root); + ASSERT_EQ(events[events.size() - 1].type, Event::LayoutPassEnd); +} + namespace { template @@ -298,10 +332,16 @@ void EventTest::listen(const YGNode& node, Event::Type type, Event::Data data) { } case Event::MeasureCallbackStart: + events.push_back(createArgs(node, data)); + break; case Event::MeasureCallbackEnd: + events.push_back(createArgs(node, data)); break; case Event::NodeBaselineStart: + events.push_back(createArgs(node, data)); + break; case Event::NodeBaselineEnd: + events.push_back(createArgs(node, data)); break; } } From 1d0668692b0a18eb5b43857e6ec63fc92d7e1f1b Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Fri, 12 Jul 2019 01:40:15 -0700 Subject: [PATCH 115/347] Make tests runnable with Buck/OSS again Summary: Fixes test execution for open source: - adds hamcrest jar and dependency, as required by buck (to not throw `"Unable to locate hamcrest on the classpath. Please add as a test dependency."`) - enables events for OSS, to make tests pass Reviewed By: SidharthGuglani Differential Revision: D16202542 fbshipit-source-id: a56069de162f739b3b989961b5dc00f3d37f5849 --- lib/hamcrest/BUCK | 19 +++++++++++++++++++ lib/hamcrest/hamcrest-2.1.jar | Bin 0 -> 123103 bytes tools/build_defs/oss/yoga_defs.bzl | 1 + 3 files changed, 20 insertions(+) create mode 100644 lib/hamcrest/BUCK create mode 100644 lib/hamcrest/hamcrest-2.1.jar diff --git a/lib/hamcrest/BUCK b/lib/hamcrest/BUCK new file mode 100644 index 00000000..3fe01441 --- /dev/null +++ b/lib/hamcrest/BUCK @@ -0,0 +1,19 @@ +# Copyright (c) Facebook, Inc. and its affiliates. +# +# This source code is licensed under the MIT license found in the +# LICENSE file in the root directory of this source tree. + +load("//tools/build_defs/oss:yoga_defs.bzl", "YOGA_ROOTS", "yoga_java_library", "yoga_prebuilt_jar") + +yoga_prebuilt_jar( + name = "hamcrest-jar", + binary_jar = "hamcrest-2.1.jar", +) + +yoga_java_library( + name = "hamcrest", + visibility = YOGA_ROOTS, + exported_deps = [ + ":hamcrest-jar", + ], +) diff --git a/lib/hamcrest/hamcrest-2.1.jar b/lib/hamcrest/hamcrest-2.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..e323d5e81d08024de75a2f6dead13353895a9bc1 GIT binary patch literal 123103 zcmaI7V|e84()OE7Y+DoCwr$(CZFOvWl8J3k>`ZLin%K$C+UtJz^RD~3*Z%j>{h^QQ z{`9-fsyeGK1!)jaXdoa+NFZm%6j`9J=i9$Nz8Ns+jwacd@`;~Scw%3YQ|89*?Qbq7;`-X4^f$P$NtRsrg@dfvk)y$PJ*>X z<%}T|feA`$cc?{g`zZ2R1ggl+1Qg)|9NXjk{bZ06y5KFaoBB#tKUP0NCnny?d;#B) zrYkW)^5tka!ZemJL57JY$_k}M@R41;44{mIXq3O#HGzk5^-ovI5FamH{1CYdulf${ zx(P~EI-icIry0)0n{4?O&`p}OZDS!vJe0v@02{?i473yLXhWs3mV}UWWPdh=8Q8IQ zvM)MDJYKfgh7kmj8k;L$9WH%X-QtpVJGkyz15uDoD#XStJY8wIu69&s<37z2K6z0~ z^Fu%%q&LSfD`(t$ROC}Btfn@W{&XJ7k2}hi+jc#o$asbE2Hq`6ZTf9}zv$Ay`$ZLx^^NRodTN4K)*<`cQXGE z+WsB`_g9RCp{=o#sk6)f3T~gPOH}bJ; zWzRXI$<}i730v6ut;`sjcI;XW{8Q;!X0E<1m)q10?eJ#T`3#nt`Al~#J*L!B%MzTh zJ>t-;#6aqX`Ergm43+LL*CGDf)A+S_t2OsB6?%UIi7_!sqVfnqoQ&MzS10ICLWWB5 z2i*~=ma49a_Xz2WCJS9b%SMjSHD0(^ma}I2SS-B(Ig$N)CmFTeptxZt9vm1#OgHp{ zGw;Ghjs){p4Sr8g(TCT`jFtQQA)$!0cSo%=riy$iDdT*2munpqeJj||Cu~4}I}#~l zDpzZx%vwgP?rjt4=JpNCFZzIb2|*NT#wcuf%;sv}g1hDd>*H%0OtgNj^-+leU$8EP z$X_0_rL+3?6PB!2NF-)W87)&u~HHVT0_8e~~nE2BxKt)Xar zNFI3+_RbnLB#UP8aCIT>IPNBVfgKt}s@pI)DhDO1kEK?!FOQ?t2E-;T6vzvw z@)TP~9C0M(0mX8hsyqY4V@GCA&z5%1V~r^o5`zwE_QJ&`2e>p|D!@8UQYiy$xgjdO z(}{#B$V%tiWsRikB-%fG9Thci7DxFcimo+)4$?k=|2yi)e<#z}-pTZTv5bf!M|1%U z1cdf=GARD>7s@V9mUiaKE{0An&gzyf7XOAhCUL@UP5?D@iliC^CyfnCGXH>_mQ;2l zlEz?(DhnD>DIio4X+w71l8K_J;+o`-0*!!B6(}-7k1*jShn=GG?cSiymiLs8^WiGL zpWi$DHd6C=>rp{;F$_)xJgqg|rSY#2h~il)!{FY{l!SR*fY|Gg$5?p}^MRj&3ubNuheSty$&|wo>e!L+^goIYbY89l3id}FwB!+eUn5`N#sf!p@IDn|?-yP-PNLv;(-{9Zl%PA=^b<5Vef zrI-g_&MWb;G5dYmv$!T6RqnQbTo|Hsg;80N+IVURt^Ps0YN}aKeQ)dpbup)-i7f9 zrD~c#K(N1^kF}-Xi)5TO`k1sZBYaRZdZ%s3XTpEz+JNUw z|2N1w3EHRZSSHDF&z(5? ztCT#B)yIeIXLePpc|YblUk+E_J@R*dLT!WiR2YEk?_U=MF`lD30PA0$Lm|N7yLozy z_2VPxA6>@?b>!|})5I0`sA#*Hia!<#)ERQ)T}WJE#k%lL)Z&$0v~uUV-1S$l*VD?g z)6Si$fI`bQ7@urL2-{H;x2tMbNyYe(SKOU0fTAOZbhMk}N|w}j(#NmWuZ8&58EV~} zNM0#$(Tbt8uGhl->Zsu+>xPKpyc%%f*wmwj#cTGt!qjD6IxP%sRn>I?qmn;q@Q2J*78!OzF|8yH@(tTWW7#m;vXk8Bjc( zWyQTsM^jDBgP{;BRoIrw?C#N-a`7z>Z|E^%W5Agr3QedgIf1SG%x}J+#~n+hb@;_$ z!dztDj+c_fKih`j{jEZ?DpmE?GU=^vQQ`DvIRQK;vAHM8>dcTN{a1fl^0<_($H{EW z3g=FCN~F0Z6WEaq|Ma-IF6a=Hk^#FgJJx4fXW91-mp_fWy_~ldVmH!2>dbFtyC?mC_Z@<-VvlKx`TmE1|+p&Q~{AEuM)>6}<;JyT>RFC_Bcetbtt z*`)&z!e<^1T|$6BOG;a|Hwiv@bwu}F??h)s_WM}V4i~7{MK!58K1bL#+Z#A<+IKEp zQ_!w-`2;z63(-Mbt#6NFuQb<})KqjvYJ;@vYKjB(kxZAje*^}_pVGtNxU|h(=fs`o z0f!(bFCsv$|%P?_$XH(8Z^u@7Tobm08FqSp1{ZWcDq9@JXtaIy zL;~CuE03~`pa|7jac5ExgGxjySvVYS^+Y46(tiY1FhMb6laqOOn7Jw= z+nj-Hh|{>DWD|Op1(V*a@R%0|@&SCs_J{sIlTVa^+QadeE^tHs*Hq$a;issRKlH9@r*qjzpGiyc|TqSlankcQ!_MICs9aFBc`&Gkhcl!s|Ox2;!_UC&QjCk!|W zMtR5WIv~`-2sQmi5IpNf*J6wYoh#k;pmXZ5ZM9?FTd6UZeF3FwRc%&zhCXvv+MDRY zbnaX)A16gAzTmdQ)hP2SD^^i!8)~u~s(RMYls#;o&UxIa*$`2g?gnkJ7~{=z6!?Eq zPav15GnXyh9) z&CdE*@hZsNXw^j@b|Z;*^%h)ZMcoR^sFpI+fEa6gYaQGWg)4{kny@y#^J;>H|RLi^YAh2$cHH_vg}9}Os0eys`{deum>@e&EGVpmO*?&>Y&JK1$Y zEBekN&2Ib%$|?b~la!`%TVfo9lhzBrb68n2jSgh5GdDnY20y$81cLo$G?Cx7W6LV& z&03TDxrS_e^HLfZPv-HDWl}LkgAU`<`Q_!864`rGJ@x4`NSyxnla7;PAGT zH5Sted~2?nl6{mDYq3!}lP|!K#8lTZ zIk~8akF-MC7Zh973h7SH;(7l z3+)`aNqV|0r=SP4;0`Z`BoXUn0!1>_Vyk$g6Cnzg4#SYf&A<25ZYi+BEwnUm9)eT9;x7L zLI7`pmt=pu{K{2Erw#B4ZxEz1e@kXGuQ*RgkW~`k^ioP%D3ZOnHC5#%k$W%fzU}Cn z9p~6jff6jWI`ru`%zZT~5^_|gBFvi%GH>S#&f@S{`ArHE6mn$nih9^!r*y(S^wD;j znQ8?-91$-g$ujzi5Le_qZDjDZ9|dUFc0W$x?{7SeM*eI8*7fiLuqp6KyJJ*Gzv?y@uZn4QeTfHFdbNg|f!6P0B2c)E}Jc z37(|bG{en%SBN!l0bUhCDq$YITyge0YCpN+-}3*K-Xje13p0*5RtMI+!x8@Iz__mm zOozn*D$TgHV6R*dd#TVtsk+!jC+*4-j~(+48{yjyCoBXE{WDH(1%w;vQADD~D6bu^ zER&1uN-UlXGc26@JhrAu_+;yNP=1R6_pafuc9Kr8E)_z_f^DtN`Vn63OJPG6iZwpr z=54PcoeXta`6t0iC*A~V@Z5{!+;F8|eZN*xuydZ8sf8I+L+w2u5;YvKVqsfW4;M6P z@c3`f038Qv(CK774 z`fVfZVe`tct@l>BOMQvyhN$u;mROS)3YUuphbcMYvAd!j`+t61BH2CoUz9Wh_+)?o zW*a=l?7^==db_KR;qtJx?EP7k)(8DD6I8ai7wXPR_?pq;IqK-UdwD)h(e65h?A&ZK zs1SyQn^sJQ+-g~X@D3~PIi_Atxxmu~IYxx0SD75EO=f32B!b_-bttpmtBdz2vpx*c zPOZe==s*6B+CNfV6C6!sSrFifLhg{5U&Bj_BJPm9b9Xt`hlrKBbSO|lq#WTYlorvRHN?}u+c zKAb%J4nT=hCLfkHFbQXyBnJ+Ofy$f`6rzw=SW4Q!4Nlj3ddt{=1xeYi9*!Vk;h2h2 zG&u_tH~{q^k!;!#w_oyrZUM-)ReDY`a(zTK6W6+s8tWXhNKRQU2>AXHLs9CQAe{ea zA{GG~@~IL8N~9fIa$jVg5?2Y@u?!?vjTQI+lm5&*ni=`V!`_R*BKT5a_aE@@r;VPnL2s? zbs|+aoYq88KNj7HwAGZ@-R8(*lyB#DmnCJOidfu)v&aI2a)8{Fw2nh7DPkjOJxz*) z@xk;0vUGZ2`S+Om9X7MEYQBQH zR@;~!5L1I|`%Q0~jLEXvJ(I&96@;+JuR*XO<XXgaOwlp$ z85zQk9>#1-K17yqq3NyF8YGFZm0q_qVH!B9|h#8HBw*~|e^Eccc`^YtGgmqS}En}(O0 z0hTz34dr`5eDb#m!*2?YGrdh+n4r4`)L}8idD!r+Gxd5H6v5Qv4O<_!lr98uImPBe z9cYvQ4L+3xfSUA4y5umpGR)ch)s@9=#}I@fB*sC)g$4qj?6M!1uLLqLB)X6mtYN=c z$~WeLn>H3F-ZR5H*01zkZN~2Ie#3R0iCpEVcFOmC;UdBl8>LcLHbdOz{Zu69d5Cmcx@^xo`#NG=;U)*N*}GTYF*A{joRQ&&!H zl*5S3>6xFQ?FnWwC%Z58rPf=SiT#Hpj1I;-_$JEhg#Z8L-T%u?<=EHzz4v7*nSGf` zg8!%+!uGaCmUf0lHl}~I0wn+Qjp&!jWa{)EEkcp9uKk<$T1vqXA*T%HZE?7H|qERsqfbyPm1BZOOBFR1rolsk8bXEW_A~^ z??=P*K=KOghTCpvXzPp)OCm@WFHL6Kxq+{+2aigFP{Dhm$JI`zWJH3 z3%V;Xo=i$XhMrWV_YU^mD`XZ$q{11ESXTEZHfOp3C2}uu6_{Mu!3T?Dn5N-(U{&;A z6x+dc>PknNb;)<8zia0s09~-I7i}`(RK_N?dZGCWIlytof;|(GJKvT1csH{yw77#~ zVhv!22PO-1JteTX|{)0S$7Q=N}r5Y zCvfE%*<+o&jnt2BGnP%vLbn4QUtL{%J}F{Pc{On`wqzj+G3l~}+#r}C>hr2a>Olr8L?T#Q{^{^I6eR?}a3NM%iFP61W7q_D72uu%xCN};p(K*|1x zfGB7uMrUKepVZ<6v9H9cEN=dWr>LPc??4WiwON z<8V}VWy}Y=Pp-O#^8IGxm5Fm+2CfVlzk1aL7v}v+HDgoyx2TVXk<(hcGc6js$}ysv$he0NK({wAvr<( z7R%J+y25SvOD5cpl0}lmHA|8Tk(GAi)D1hdkEXKqR|{+6q;WH1>SD5nD*Gg3C&>z0 z>^NLtkr*P?fkJQM?zW26CaZ-~R4g%-JbVky8=D=7OO4A}wd0|LN4q6DmvXy>N=;(3 zM<1%sqp?HXCf_(IsP-85nG2cC8@c>t*#;ml#6m|{Z;N$lYOqM)$enra+WBc5P`#N- zIN!TK>*G5K~*vi}a63ich@jEE1o zEkFkw@-7v*1L=Lcp$Q)3q5_W!)9DrdbuD|7r@nNvbeA0n- z6Vn)*{K5Hl1M5p)Xgxo78zSNGIG=BE48oPVMTi^I8OkK%&*%{~c?_>^^JT@c=_0^j zK!nQ)Daf^Qz!gwMaFT_WbHt+HD-LQqo`CU8$?qnI8+ZRL3#>|}2xWYY$#}mexcL8g zh9#ZlTy1RrI=0HX@^cE9ev@j)i)cvu(x|}vErBwkA{#;~;Q*8ELF{NR*G1N!8mmPY z(H}(iozv6`DE6{%ibIbsgH0P=JE_@^*^ix5x19tf-Jd?6PzHE$sQZdz`8qw&YNqRI z-}6aQS;5fOkvcks;H_ zl#}_&HwdzEhFzDf7h{C{i@N={)a`rNDZ2LE)|#q-430m>N3fmgk>!?Ju2Da37$5J2 zgHem4?ukEg)oJWnsOhuB0hj91_L%9!OgODZnAT4^{w>4Y`RTJvJR7W80I~2;BONdD z*0ZN#V|7s!=&CN`AMF+l!kfiD2(1gGF>OYa`0W^lSCO@VmFBiBS4taJ(n>asFpD57 z?hilxLez_a=0V&QG*C@2(k3r?68Ro92X?|Coq%37nrun<&icJn!C$b*S@M=NrU zaTGjCjF)LAp0=4QMYCr9=+4=Z;~@EyGzg=(gi~2_^Y-PV$Y9Z=o}5hxznL)1AZw{| z@sf^@#3sx4bj^}QF=~l}lteoBVuKps9*xQk@FbaF(HT$`dP}njt7$%iX}*9`zGlcN zg*fwUXP=0MW*f1~@}V253q7m|P$qd3-DLLRl(z&eblu;@Ib7kW=F{fXsM4nLAm%x5__o$n5_{62a;#0d2##q0*= zI?bBPm^;r6xX=up8RnzcP4-PAC2^dQ=yT?$EJv%g4YI3c;^D=7+l3nQ4QFO$Fk`8{2(&qMQ*WT_7>SCn@;04u8+`d_ADd4`HLhlvIe=U ztIHv;8WP{p(G{hR%48b*dXUR0@50wPPo*y>NpGrO@xbrXTHP5z^5nP2jc@HeB9f&N zoxl*j)+HVj*8|>B4v#v$L;IGn7Jr5uMC*D;fL2*fQ6=D;Cq>iDF6v9b$|rW0wEQP8 z+92?U2Vbnfehtfr|B)9FQ)go*OCwVgLFa!fVUgO#mmiM$X^XrZud6loC|)P}nh+vD z6}}4o6LmH6TM>zpc8J@`I-qEj%!V!bMb-Ci&|Tm6dJsZUGHQ~8k9&_`mtbeO%{>kA zm~0L!EF;VLlJ_xti}T3+@@AO7`wiRxS06APhC_SY*Wr@^x5L{>ZyZkT41HMFQ8tM~-B)-cx%#MKc1Za(kL92uuse;0kcKIf^xZ0$Ew+fT`Umh-|8lPAyVO%7fnu~bsfVi>GGU#Cfi6(P><$;!s& zT$BZhV=X()2H5J3EMV{c?@#8jfN2=?sHyP8>W1Gcl!TG0-mi|=J^gJ%>IhVaE27g)tivH4=IwVl4)~v**OB&td_aPa>_Wu zEYaRE6&$gH?|jNejD!a@VMiHMqKT?^O*@HuSwagYF0dnoB(c&`0nwyGjh>MqIY%LddH>z2a3-GJv`VOL zL?7>}rv(1dOg0O-$O|kgQ`M*t-@6iiS1~sd#45vIBsTvBKipUzVGqn^l9AbZE{gCh z)JIXlYk;}iOP>IC=CLuZYYVv1c`<2zG6DgLKH{`>oD91(1zL0Zv^VdO; zl8DIS#844?*H96}*Tx!8H*F7$OCKzT_id%($7HfpRk(Y!t2>KQcjixFkA$y(e9=@I zAekrxIOI~OAi>i9Q03ePl-DY+2Otj}>*Ei<>x1S5>%SriMs8R9Fx||HRz-XPH}3Z_ zk4G)~=1Ne-w|=NSQ6~UKp1ZTZ%(rS02P;R~{rWg1I4te|(Sxbl5rz-VXTWP%zz4!;446-E%Rc{z4*`7M(NLI&f{M4lF z(9BcRtqFkL#V|+*KmkDY`li=DRuG8Wkd%q@os` zqeNHcpK_cJ>dqK}sgO_&MN~F!-Fdfs;M%Sy{PE zkaBs#@QVFGNqY$mAleJwsp(ggppJrzupO>)o2*{eYw!2Jt!QZ|ePj5SVW9t|l>Gmw zlK*25{BOfR$lk@`KkR}WW!rz%lDzKrrbR-cWpauFh{NG*L-c*8Mmk0;STDf!+wAt^ zt{o=U6Sn5N-LoR3GXn(MaZG&fE`z-+Fa%zCubu18a`N8(?;js1J;W-qm>QHnLsUWB zW%lce(_BH^;cOUCw^x$5)6kgY_6ixHdz&e)>rA~Qh(G#nqvCy*= zx6<;fd7~2TB8Lrr!3yVR^5PE%4V~^a3KoWVdol4g@gYU+VS5 z=ovY<4FgW)d#?0FrZfC?AfHihA1@3u1#_h=q41P`y+SV>-~z@U0{pd7ufDT=Wk|T4 z1Y8&U1+9r9lFXFz_iR54`ygle6RI=n#44kP?HRRG9_6@k?jmPok1=YkEF^a=rL$bI zBbIvLj-6xpW%PZu>93XOXReE5SLMx?kgAdkf|2erU%^Yv&?c-- zm@IRRi)htHIn6Z43ln#kmawmX0jwTJD%%66{EZ(nJVeTdI{+KOC}6{wlH&WlASZ-@JO z`n27xkeA(c7YdQ1Sm-(=&b`;Y!aT^(8nI5TRZ1K?n@IVe|dqV{WJvt2i1ZX(4-18CQw4YZ%^ApX$xfB&o> zgMr_g$|&M8$DCMa?`B9MZP1aiJGx4;4(-jWA4^R#!;Is<${lBXTBLq$s^dsBO7 zn7XLUpqFfw>ZLi5SwsFDJ9dVz#O_xqHo{1PI5g}%WF^-uUFK=iTzl%YOATip88n)p zV-n#O#8=4@Xn03bS~-`>H0Weu4sokAT5&mLv%MJ}B@uyumo0JVvG$E^8b)M;k<(=u zpSO7JRI9DxnNq_v+s#>LFRVG$NT~-!xN3ogHGhGala$Spo`A*hf;^#}*or5+DTJ12 zT6g^2XRd9gT4Wv`uw=95qoDlflxKEP&Fh|j5q9d2(+sDD9kzWYyVP5JT266}=AEq) zc2(v#gXFXTnyiud8S1he&*en0T1tpOsgyOd40uP*lwU7zLya_AQyUXf2vmnd@PNC| zL;3q{;+}&|DK5h5EY?j@k+rh6N^f4Hl}OiR9^N4=N&7|%eELzHXJG~t52bK?z71zw^ z2~SYD1jkcR6fwdq!EVnM`r!}R#oZRf*eL0s`=_v;Cs^lyWIMXBZhi?^BTUX(rQR`& zc2s!?L+y!s$ZhjFS-zuwBeI?e)oDl6b2)Lr!ccO7r6(-zafa4O+m_$HHE40Ak$ovf zB6FmL-#D0d#HV+6IF1xXd9UW^QpA-WVumHlCEWIg&3mM{#+k$>$Mgt~2+1Y_pZExq z?M~nj`{BAs0dA39gc>C@DADUlgD5V&gnVeSGB6fzE-yjq_m2H*>u$ztQ`J?xEE0P0 zhY>>Cxh`j}{a(Z_+8_!km~1Yv$56O13cIG_x*966i%iUP)78rl`sVz&)??zFW2A_# z;{tzC#DX)U%>_%rKak2pcTjy$j0#ykQNUL-OZX2@dHg;bmO4a*rl)P=DwU*G$<#_c zG=m-%K4=(4$?4Rji)5m~kMthP`*|US5ot0fZ4wO}GSeIYzvy1#mGLU!YN=SUEYJv7 zmF9gWON;dyIHNS%7Z||hEMAn)R!Y$ZTL7Y75|A=pDpn?r`myUv_pXrsDcDB!g&x8& z__XQ^b_H7De&@^Ic3}E{=bG<+c^+F|p2t5=%)UGidzXI~`k{Y0mE^XPS>T9c?_?gm zddcOGkX2~;9D6c>VQvmCLt!j%q#B8t#nB&;{M%6oTtA7AqY1XfIWKjNV?YTK8>YG{ zo2FLDpKl+J?19EdV8VCxKzULNB=-C;5ehuQP0#Mbha&|NRDrEMY&6e!*f5_^Mw8=E zgAFTx;4IuFxDeq;^~+pweZUGAma4Ii+F(QXH<~LotBmbaG|*RAm1h{IM|%g8!ea)l zd4nr73%7ERt7A39I0|eF0!-bC+|0PL|GXF)_?#Lm8wO0FszrTVv_ES zlv6uyAyLZ_fR>sRSHBH{>t^hNtm=}@p+(V!LHdn+F*?hJiN;ORx_zbh%IwfVv$MLC z)4^Sm9`bWtm|T%ok_eOnV}H3kJ!)sB^I%79hnch$1+S}+qCIx~jZPDUv3?{ejMxCH ziAebIQ34ucsAYRl;T2CDIgyhGl@ZDm=8&&lsw)40vGf2Ny6E}ndXZR< z{Jd)1eG@{kd!mlKf_anZaeQidv!#yy5`#FavvmHvIoxv?2468`{F<*i=dB3&Rx zFNA66F*qf+ka}?o_CpinWSZsFV7^VXEQ>*K?cYfzGvODp0g>Z4(taRmT;c)!;(vPO zA;I~QxGmVH#YfR?vN#rrVhzC?=;|zv26c8hy@a*_Y*=kI#+#--&b{f_@VUeTy+(ZE z1Yv0x#4v7SENH)x-Yg-h2leP;p`#-&L8gFD`JIG~S;y7*rsb zkZT%}@)aO_IPztD5yO0(MpEX_cr1&IGZ<{(j95=&pCwC065aYWBC=QFekPAotQh~< zr-+n|C07}X#mpwbArmWkPJ4@oV?0PQp!2$oHEhz|&QgfBp$U7o6P&z@8i>-iPbls*kGpdEgnSXiKL6+S|#Ze zYgm*CH&uZf>4mlmnPEPqETh#Kwu1K)v(nYS+$=w|rzJ(hrZnfIBX1?a^ z6w3fOdV#Q?4{ zCIuV3-jnWK&f1^XQw{pSIzz-@dmik8ij^eS_?z-ZXiI}ffaoR?F$d-d?N+>D2qRsL zM1;L3idZ3B9HB-^V`;)$ZfL$C-8$+q3dRBVHf`I}=6(jfUK z*ocA|hPDp#GuSjCl^d{eJCiJ*7OS(^tc^d{H&I1OcA+1bVmAQGR%+O!G6sYbreK%; za-_G2Aj8uv?+&yLx(IIYDg#x|ir==v*&RZow%7yi?OTou_4nsi6-}z-c_{C0aci&5 z%>B_f`1$~9LlS+&pOAtND3YD^zaX_!@P3^hzFaK1lvv@|F4g|ldGRx__U;tMMWQu} zFv0CZ17pFR%HFwipocY&g$~@&m^oMw$LYK{kQ^e1m6`x4Jtn>JWpfpQMD?q8`)&~K zn4koZ@fZvPD?5@N4>Q(z=0}6-z68&b<%KL^NM6}T1d)TessdNr53}Qcw$Kmlg`kqP% zkhms0EC5nwjH!=QPLHpv+ErfvxvA(#fS|%NV18E~B3fVspEv#_G?=zMzurJaRa#ye zIIS6pZIPPQq`6w6IzRKH6%bwZ$6rfKIW!Ot&3*@Y;%SC(=DVlmvU5!8mVC8npM}(2 zom=aI#Za_>HBky3ZgVl{sO+W9seT7O;zXl~SJ<`h`$ris+Km`wMVX=S5W~=#?MCJO z$Uq1!+;3Aw`vu<=Xi=VJiFf&+UE)-p0t{~~G~L(G#hy#ENQXr3ULTaR`aCU*=ZyLGVivZ9-J;t=otv3EBogGZd1wZ0KAE60xJL^HVl@hdr7`dTv$-!U=TCkc^qu z6){dg+U18xt*m+me4?UAp3mpi)hx=lB%W2~_!Dl)Gt^nsQ)Dpjoa|~vpcYB0zI5^p ztj<`NJ9;Q=L4h+55K1CSH_O>5(ER5Yn7}SbCgD%20)OFzy4E`kOT`kRHMkqXPzt32 zT8nZw8ScwrFCxH2FbQ?;5N^@4k9<&5KpcQQA~ernVXw&5mwdo_mUd582*o|(2=kYC z5zn*mw!uKhh{racKwkxx*LM`XqUox6Qy<}J`=nn1dc<(~D0%+S7nDQb2{jMjhoO$7 z2juq9ZKEKW}+6Yy6O)D-Jvw-m(Vw<-hg;*=pZ38G+3DDrXVE37PM$+&#AcA_vPMTApBjN zx)-$}cVL>V8qrXA^j0>6p}!|NL$kaHZ}sdH9T$qgsIsU?zPCA$2iB zMUJJU6kM5w25+!NPjhH?_GfGs5eFatJ&CqbJ$c5_B|0&EPU;lyMmT9B{iizJGYH0v zCD?v`tYdu)+8!!DI>Y#dt$`(fDMqiO6v=|bSSwT{A;lTJW;G()@>--lldYVM*~!N_ z4jHPYgFpov(OB0r{I@8TGB4A4Z(mR9gj3w2W)VE*8QgLf!OBjUGF*gO%ftq9LY@u1 zb&9%ks#+cEoWvy0k6qTRG%!Y8Kjb&ls#5{!bPg<0q3>6v9X!@jt(d%|-;rkX_}Sts z7WdWrWaz6`dlqwqstPTz>*#kTjULq8Po>Fgmtd?Jvt*%>U(+4GbFH6fY{_-oem{CU z$w%kHoYm-MsK`{b$UZ}onC>)Pti;uy8wh}Hi9PJ(s38IrM7lFn8G$bi2CHEgn#i4GbcQ_)O|#5H9%)9zZd6`yzlpGR3NKt`3;Dk@)t z@|Q0U2S(-z_`)&~&tg`Ew_zkOc)nbqpAT}&ySf5~NKQKq>bc#OZ3|m{3o4)Xu;(bR zXYkb(by}~J>>yavRjJlT%%AyyCt6-QiriyWUuj|8WC~h!Ccd3)wr#J;)Lg^giMf^J zzv{R{IrH9f^z1`98QyzY{U|DX=B&k(bnj;B17T=LI<76w4cTd?Cs0 z?=*JgN$BwoXmBF#mbXqRw2oji))yAg>Gs<9mxyF8!r(yR4!Xj461v%edBTYllKPQ< zmsG%(46Fo>BNd;V4`7m!D$S3McWTa$#vg*G%v>t7$UFt2n;!lk^35iv?3UIL0BwmF zhBLY$tS*r7nPjJ?YED$f89`7<^A~XaJZV=_A#`Bb;@(=CfuqOY|EH zpx_mT!z)aMSL{0~!)qxcq!wwE;NJzeW1|ekX+1%W@1rH5TmTD0pPFW^r`z508pFBo zg&Y=6%b89t4@-2M^SDIiJW8gM+xW31%B~F{T93vULKe*@V15G4Th#uV`ip>%;pnX7 z_jY(K(~KV3tXmrDT2V{dKSPzYXk_4Q);T&%l1|>joeq?^&y34hLmnV`HGwWg!$x@@&wLazyqrB^ZQ= z$Zas&Y}MVw<%EmxPlO&jz$A!N5b1!yB+J z$u1Te8DgAK(ADDyLo8~nD$L2%*U)1rq110 z&;XTRav682rrIBD{W>Qe{bPK=FC&&p_rI%6qs-s!gj-!Vk0B+u(>oicbft$BmG0M4 zhZWXc*VURPI*O@zx~;gXOD{cGH_=2m^K5*!xUKYZmzzYjT8dVY@d~M`#(f)TJE7Y3 zXFS$z8TYOD*tgEF^+XaZp{HD`0Hxfp(nTaYd)w7V+Oc@?CRzOhbs4*ZumEu?cbloB zW=WO<$AZLn?_Qv4+%fX9pj;d03co9lEjNbS;d}qtj16Na4=F?Tq_-$SxUb(Ey>6_7sX{VpqmY$D>lS_o0$( zNkW@vP#u~WS0hymt;4KaP3McHvZL%{fQ{GAISk^9y*!G|uQVKSaz{B!pwA`PA(#+^ zTYN0@bLJV;6uXhS(R^&HcPzzTp-UmTPg3i)aa^^?DyJLd-)8oNirc$(UtGt1aZU7J61bq9r;Ek^cS$kkuVoaujI&i$G789%lBYVj zb(R4fO$h~}_}`v_!Mhup?o3h|9gTw{{x{!H;1p5(1Ng_DavSQag7YyhJiRAx7anc> zKcBB*da!d%|BQ%W$H|&}C3Gqi#ev9J)wZ0a>kvWv2!?&xUIsnhT>{VNbnl59J=9h` z=Nv*^M_%?-1I$s32P~zUH*i5`)g_dsBsE=7wi*KJ`l~;CzWA*-oSQPDVRj=7`uD+R z&+#qU0wIbk*C2|UaO}U7xzxy#ByTKVg$$mx%m$m6*u(h}y0div3)(zR@S+?69@_lK za*cXVJw0#x*2ChkX2KzI+l!&H;cY%lL#bTW;?-A_c{V>=dKs8;f5-1Qx&g|32qS!c z&Vq+9J**cG|4a(ds^tPzYs1xkDDY6F2Rz%nv3rEC-A2CeMkW;wNaIJsWOx`I=K3RZ z>^4z{WuM75k~Eb{XElL%o3}LE5=L>~m}xQ?oKk2~>{0fgyKaHqyJ-aU{;c{K&FI`f z*Xu{mBLd8Jd(ZJ}(aaE}is^E&r&~W9Sw5vkxCc4LCXX(T_ zALIFTCX^Spa9`_y&;W%%{lLH=&LitdLxmpy9C6pndB>cRpY{n{HtrG?*@W7#ND<7# zN)p9Ykwd8vr*?{yEGW3&$Sw4Ea;h>;Lbnw5_oaK}UlvwoU#pMfU)Sic{|l{u`G;zM zDR2mv_QjbPB0FeKjsLqd}1$`p4|*98B_^8|nf1r0#_Q4C*c zI^+7<-rC*B;dGunKR>7P|M+-=+a@ZVS`!KK7rR#ySowvdlI=)3)^Ds42aNBDAS^y zL~$xL(JJPiV&FrOXM2q%Y@602FaBjZw_A~;7PF@MbCG0RqD_}Qa|(71)p{%4gT-I73N*&T#hTIVOahqtWpRR=0r_6KJ^(F-iT!o@W#jgX`7LM0M zLc?Xa1edrZLG2^C4L0k}RWlCc1g+#Q*(DooCCY{_V*`$Pg5S0FS^p1Z{}f(%v~B&u zl~ioo72CFLvtrx!jBVStQx^ScEN1h%({6_7{trIz8zn?LX?8@}DM}HRFdpI)j zxo^S1S#(d6V7VZz$z_ibfHs<*1(uxh{=3C8mqUyjsC|q$Eh$dI`+mQK2lFA#y}5EL zc#dj!ZzQwTE!{7;f0;+}6w>oJ2Z;7ygM;te5d#ag1rxg<9f8lzit%kPk0 z(q3sp2USN7bLSG(8ACKt=bn}C-~s#ms1k;vEkO?1714t#Sp=vzMfLRO!qcyU#ub6v5s#W>DPkzqfX5n61xY7G}V zB!yUl!DHuGda}0My$lCBX4>P_VE_fvI;lrRCKa>gGv$Z9!H0L-`91||pzo($Vd6;4 zQX{NdLl$gD1&-e!LAdT$hP!;iK(`(8d4*Wc;ND<1DSGY5pV6iLV4=bDKzE5j11a6X zSOR}SB&FYhyGD$^1i{TW+s6G(QOKK&BWfsPRyk@&+~Y;)PJo-%0KeO35o9`<{sjL&;Jl!n+ZBG0eO zAlw%vgzA5+&VSof|7WrGs9!4oN6J+awUO2~01ZbH7RFWtG$zu3l}cKK%7W5JnX$#s zrcq`k^TLchiiLA4U?1ND{!al5b?}4-h<@_Ew_BQCq772yejH!kwP)_}pOvQfcvZD+OH&Lr3R!Dc5b#P?4L|w*`N%t9!@a!np8pAF- zS{$}hY5YPerm~=UBHB2?G#qU)lRV=c&>w%pHa3|iy-LOmf2buADaeO8_G@4~OE#FZX$9!2F@i*=mg?UTxZ zBszX!I%U|tP2yp)7_L!Ec1w8!5h2&|Aois(Jxf#{w^7%pRAX6>Z76K61gx>D>5WhE z{}@(Pv2-Zwnqqq3SV$H7&A5ddS`haTpIS(z_G>jhGqy@aN}E4RH@+q`Qh5&Bj(nPt z+yK(VK9G}4&dg(mrtf%S9(}X9((dv?(ty+wBGaJlmlxt}%@ zNxjJ0Q)1N;yDUt3_AaibrS`hWxJI^5K!KDXs5JmT0Q4Z=bLPdo1@DF1r$IIlF-qqT z6M0}eYt^n@=5QD54twU32<71T1K$!nsRuyLa~BjvpT@>8=rF-*Op}BH=G=>AUk#D| zVleg_-1W11t=YS8*lBZmI8fhmsQZNV(+K|~UZ)3ByI@0|>0=cW=F?D=871wz%wAxz zz#Y}`=R2#L_Eu*F7Oz)oG{02pEzY0GffK}Ve&_D?a>6pLZ>T3_Oevr-_OsHVZ{Hq; z&yZ+S{=x?uSS*D}S=A{chC|IMD2AA+u;RAVK!3Xa##ud?xAkVZ+6o!>$#S^bsRh3O zFm!$pJ<|Z2lQ@Chp%ASZ-9Qd%er0}1dP) zShQQ}!A(QNwk9fIHv;$WPzvw41Nf?r!TZiz{>!=DZQyK-J zji;Z`dGo+q|7E*iwyP%{Qa)Xb@aR;A1@eXNfbmn1PeJ#YHxLx+Qks-6fzne{aCAakW@U+I1e#J zLN4)U+3NvCb5;ymXgB#E>bLu)TB?%VZ`qw{tlnfny1>qQ zn{o@7=@inbK4n9SgutYJYJK@VUVUV1Ox14ct-6Yrh@c$t$#PtHb8+`EHK6hg%Vu*b ztXhwLE8IGj$GsSMPScT-h`TzSNZ z-DJ@qMoe{WMaU}@;|=2`j_id+C$njt6kinXyWk2g`g4^to(f2tOphbZeZjX0;i7Kn;-!hb^}FH_g7Qrz~p8 zjHjl~OWDlSOG?ElsQa1~KXvyBZm-u8Y+tdn^1Z@H8JO4*$48%5^Xkl}+qX!O9xstc z6n5zOcV));P}YMa-7Z*F}KwQjF(3 zdxt~wtOa)`r82SdZxt7uR`yNp*3%SYB6kA>$N5QZ@_`6ni@?5ej{@I5+6|q-mkk(V zwl3c=PE>+Eaf;d1P(0Mq-VKX2n+m1^wdaC2-egmL>cda2J!ORVq zxF=%n@+GkdD?Pfvq64_V{0)TPlwbKS=1U2{U{?cfC7w=x3pvm_ZpPWTPj{q+N0*v=n0Q$yi#@||67OP1x5wh%6?K{Z zx{Y@UQxg#CmZe!iU&@1CU+gS4>uzj6HWn&iuEhyFO_G5T=h$R!61N>?)B4DRc??Tg zxpl7M_O7!EZ);aI2C5jnm+M#59eh+Cn4VQJmWSg)zg901iEW z`$d8!N-<1p8%uaFL9&h9o3xsx*x2!l_zu%g>=vHi{SJO_z(JsA&LiA_ua>Ph!XCuw zpzwOVzIEFG_raZj904()t4^8B4f43o%$WnZ2axmXVgr8*B`;=wuryP!GZ4sD4pVCw z9~=_Yp!rl6{xDz3(!c6)G4#ljcRVjOU3K6UGZ+&3FdmuU5RIrCoT^Z!D-(e-T_+Sp zqTcCuO!)c`yEFwyNnW9l*hrKt$ROeSvHA;=3k9DngXEAVVL+uhyO0tcrB*rCx!5;> zl_BW}9mO|_K)4Yl;)v21!Lv|X+pj1*N{r3-#Wab(f@5MCr z6#?=0VJ?Dz%vThAY6SQ{kO`k8H4ZOiPnDb>_IBr${vrMsZTd@DF6aT9wHC_t0zxr* z60}6ZVQ}S0Bi?O<4je-!zu(!bFQ1pS`v#Gv1Xig7NhpSIZTZEJ02*Eyx?W|n0V5MQ zSH|Q^){K*yg2j{wLO?@5Lg;~{+x=0+qp%(iR&4j7sInyZSE;yX$Gz~DDTNu=OmzRx zu)pH;t5VQcpe}oqEV18;)3K8yVcEA+W`=oBu03ZmLwZA9px%7G=_RQliDI&#^1nHD zk6Ppw{u2C*W)9zHeuHK%YihH<+fKcZ{p&{M#o0>3eq(+yc^%2ejWHcD`M$s51>aS^ zkIQuUmc!uGHgjK)w@9GnCBvJemdG_ut6pKR2Vft#gwSHylZCBPn#)Y2=m;pgjV`JRnmaN%^KQDG(mU7=}q2yn&Hxr>(7i-@B-uTShvqLO%@> zcl;d8+eN;DEARa%AoWsi)6=0aoAwFyhl71_JXWx$S^KINp5^_J;7Z=So@iU(1?QiS zOi!`Vp5rh1NdGH~`2T11Z0GrZ7C$+vdJ3pQXnZPbSFP1SPz#0mg%*~9YDfYWBFaLj zNhHv=k^^Ozjm;u!dd!=dH>e*B{3EbPa{s{m?dM!7zcqjx6PlS_4|6@|^2~4h`+b1c z2if2`(hedA*6w9&CLDLSv*2$NL@T-#$$DiIhu?ndy3eUc@wJ_lj1+4o zXxIR4VT?54=XPC;?wem>X`cF#jXB_J?0_`Ig((c$B%6BKp-k)&> zh$4=H<{G7X>!MC&mR;R;mv;~pa(Atl?SO1hy)aQoy;;us6Ls9exe+gCY|fr3QVoZ$ zJ@`*shewb@^r~2g$4rudiT-|gf$LboS8vXE96~ zHZ!eEsOX8m+~2~Vjo2X$!M#rwh*H+v&Jb?GWyBlBY*$(ml-9}WKO51-4BC8>nKsCa zZ|S#1*Eytm!E!{}MaoD^EmC}RLKuotT*!SQXWG~cXko$JrAnJe(KZJ8@?`J#(DI_` z+01-S@Cmi$%!dH-$XB-HQd%nbFIKn)gTA~c{TjX>>Dl=Vi#)*lzRkUBbq2keS$R)&v}Tqz$e9Ad!`|{vt(9H-oX3>{pSj?eyzzJA9;ck(kJT zvWAhrfI%QrEcGe%2Kh3_aQdD6QdWSR=3{qO zpgGDk#hg6D3%290h+n0Jp%J0H4;MI!Kxson87I5qJebRAL9n?Z&^Yy}f918DNRrW* zYov3}B}R(5WTYII5Ocbk)@qCg^CARlxBshD?y(jCbdV3{6|1J5^D1C8Lr1P;u?y& zqzq2vQ84ROBH57sDZV)hMd+4Umo-OtaV+aR^@s8F4^%o5+=`l!kw|O&)x>b44l}J0 zU#i$$=~Wp6%mK!?qmTtPqY)%z(e?dG{Yh2drNdCdCC|b0SwUw<*0w<}&_0ub1Nhk- zldCJ!qx+Z{nGMUU`cyvdT8wfKP=|U;I5SaUd?41WBfQEUQ|&(WmU6;k0x*r+?M85z z)~@13dYB##p9yOrpRfaU7x_yJ^NF!{@rk;|;wDkT_kPI@9CVT0#|XaN9v1uU46we0 zNZUQjq9*6ddL#x%l+{3BeB{Kjc1(bLg7$9N?Nw-PN24Qo&yp=}IV`prK6LA|Ia+1Z zz^PM}?Mi3KLjq=aHCOAjTzn6*X7Qj-Y3>^@%z;PuY+w~>dEn`Gv0*B&-{eL;?fU7jVlo4MU4FvfCn9#8%6qw zQldo;f_d(O^&Ao7JwX5Ud$LimE$7{X{A`Y#_vu9={6)dmQ2?Zp2;P zBZx>v!BaH;>|j6n0P5R(nwAAgaYBx*z;v@=ZW|vj80q#r8^szU1X!s?9fnUdLUmp# z^yh6oW!0c?UaKR&9M3Kl&mOP#PJQbH?P+0-2NXV<-b8t4Kt6NaK4s9EO6hxk^L|K zlX4bvax(mH-pzkv>)4@5S7{BX6k(v@my9GSsq)o{1CoQp3%)!uF@H1@$!Iri_RNBv zwsAj$IHo+l@_4WrO0?X}Jx}g0GET!h!dU+g;XE$63ce}5hj#t1&- zKbk1F#QaV_cEk`-_`(a=_MH$ zJ9-*Toi?d(VuJMzY9H#%TzoREHI8Z;lUg8ucAam;*}>W|?yy16HPu}Y{ixbXu%tX? zenj|l<)ya3uPUx?p>$5*r$8Yr?v>nUmKMvg)eWNzdIIC0seJ5fKK%-Un0ykPH>8PN z5bSA0hI;9S#RgqHb!MNaC_663yq#o|9&Kz~t<&PmBnV)TRNpATnn!4Z0%+hbD0|R| zQO`Q5%JOPPz@r*?CJx|AIf~Hc0i7k)T`#68@fZ6U!Ck^6Dp7Pf;MJy460WRdN{Db9 zGdRGSH6kz{qXR0Oy>C!zk|Qa~rqtb^f}YxKvIhI>yq);qc{SZ-*^abehwMPlGhx<~ z#YA+c)1sRjiyLE;Xk(4xL-)Yd#K-vtB4*@+Qll?(&2!L-2@48I^`z{7eE^U&GvVbGjJ zD?d4!I8gqlaz7LaDCndz#tvK)b8B%+ckM!3sxNjIEJ|y4Gw^L{7 zJmjT1R!Ga^-$bI?Dorz9;iNpQJQi2cA27ryd_nu@*}s0fN-|SyhH{U69t` z*B(=SZ^-RHebi!^bc?*lm*CfKfz5>wErp+wD{y=md=VdT%cIX0js%?MptDJYNIw&Q zi?T90Mq@zs8dn}8><;?-cOZ-m4vsz+hQ^`1&BR!vH6pf!!~DP|IdPL_i&T=QGMkS{ znAC*dOqWYLH7f3svnJG?6F>^-{Y534@yS_nlA7`gTP;qXXm0ygL*h@(umcYgpC|M* zQ#XPQ0k?TDZ4tN`YIZmT4R%cIo0uJ5^~#&C&o4`zSOO8Jy_=3Cl+XQ{DIVcrs6wJS zddXD;Wi#MImxxxiQbL|$LSCXxmea4kOFh*%GJRO}n`*r%+O4COpH=QR^ki<@Db;%D zW@>6FLh30U^OYOKi{2i2;%=2(i7d~776(wa5B6pLkTR!a+;Ovu!ekBWr z6rA#MJX(uJ-`T$mV8~r}8B*ET0fSS6xk@w-c$2cn5AXhsBF#=p*}zo29E=Nxm|{5g z`EM7}d@FNgeP*};uFJtSdN3C{Ruf$3TeOMEr`^AbjzKmzw!B7$)#CO2xT=VIKBW7( zyAipME1vE#rpeBwBNI+&&W?UO;4c}rsToF@pG2B=hHwRSVH_1cj(Bh#A=l!w20r8l zK4_ymXog@q#7#$i{)_9oACEv*@@t>D_qEUbA3%Tq-ITu)TDA@@p8r2`@PAE;s{aA{ z``d~pEsQ2g8IF0grCe;$(?$|*I+Rh#GS@fTHd9L`o9U9cknnjB+#8UFJ#6luyua$A zgOX`hkLcanb?me4PM;;<@Baa+_`4JaK9q^Fod@9EE)WUX&o8^15Q&U7aK{;1SWni# zD`l8sSZtyRkjN^Kb;}~|FkI#WdJNXTRJl2a@u>L@7blHI>djBuZZZw{d!|3Q!KV>x zG~|f;Y1l8}U3tA`+GchiVYjCE@1|za+4~o{E1O7$B|PcqHK!y2lPeGRs10+h&h%~5 zx^&(k?XFm|$5o#m;=FnN<&~*)#DQ}?ts>ILMV7^N zL^8`AI?mDff9D*0WAs8pL12I#0?$P{_?HW*O>)qv?LX6T@dj=v)s1;`*3=AIu<5^Y zTEk~TazI^|NJI7{_^_S_p2PS?>57l`qRE9C@xPB#1X47$2vC%RCB!(+fH3p@M@WDT zxnRBFS*;EprFp4si=KYnT2`ydzCCBl3W|!1oB`JTG+m2CI%yPj2IgPcLNo1OrUJQ^t3-Tlou3Ek-bXd~2tV3tF z*yh?K_ew9J#(fo7nR7$^d4M0ab%zJE8W7uO_WjKkzD=1M4a? zBt74CKw!aP$iNp;c8_+oVrG<8i~KAk1o1ibFWE?`({{qo7aur>en?q&UDEuO$vwPH zh0v=~Z+B-G_uMCF-F$pk@kF)}gaozJa9hg2HiNpEB#+ZDQD>L59+&$rPqJ?zH-!b{-JREEv-qmOVe2t7DDTI z0##M*o>6AdO$3l2#^cD5VxK9eJ{-A4_4)7o>cbS0i=O_HH!@a1^;X2{ebX~ozAEx{ zDm&xPpW}ChZ;15^u_ioMREkWfAwlmj*o1FPRr&C7XuLzHOx|b1*;p!m#n@|eUSb?9 za0wQ*R%l5)-MWm;of*1^W`+_h$_>21_62YH#wTN^=$C3m-6hz#K2@TrinZE1CA=Ii z4R$!bN3r_m>Gk{Ql_iPljE`1i88vlxYu1|^TFU~KRDhp3L*#@aD_n>jv(l{wJmj+a zu~a<`iEATe%wTM%BMG@*SXazz4Tfzwkwy`Upuz0tjmsoF=+?dF7(%Cc`Z>hazV?ue2;@PLR@uCN;#v z5wzanBVRYs@~zJHQu$HE6H@2Ms>RvOO^sqeqEKs@*VnZo&J>%yF1`_VXV8Mu676md{Zx(L3%Kv$ z_gZPTiLSD5;FYFaZsdB&`Z3A_2`#))1wuY)H|vX4=qRXQ5)T&UB#OZKND3sfW||I& zeS-cJ??GKkK;cQYsoa>rdc@;+eSld7pj|)=$pS7}DKH$&NbyYx2)C6E!3KO9Kh{a*2!muXl)lU$05o zec8_xoJ>reNdF_p{@*^d5_M~5oG&ysLfQocd)l1t+Dh@t5*ifr+CXJs;*c&iyj1nT zLaX}bm;XCdZ$qyz<;`v5|Vc~p@oCLiuwwg)}EzqZ$r@kp?zY8u9y+_m|?5?uZhRw=5vf;UrXkz(+H{%0yl&vof!J6DH3xxaoKDW_r z(91C{^E0aDN7^-Z_^ZSgM)cXP2IU1#J+&4k_=ncQOw0V9;Nv^?fgW`l`YX3vDOK=? zWY0&g=Z9D1$H3q9+hni)$<4Jt>#9X;^K%vo&m8$NqK*}wgStZ^ZR}QQ!CAd=Ew$aY z;`v1?PQwOD4%3l7^5`72ArUDmAuon*&Sk+cUF4oMFC<;g<&-{2@ca=Ul|0z?*Frt9Az zz7Mkx)Wb88h(VAf77@UaFds;UNqNQYNCe^aLi&7(CiFqSvLPH{e~h3kkeN7i)dW;) z2x46CY{r5%>VxP$>sJK`wFQX1mGS}n%W|Asc8PeW>oa)!pz8Ly@x`%ojcu$`<73|? z*(WB=6dVFI5%K&#pY7dBFnO|e)mXp-m(*~A*o0f;UABn-I)$9m*Whl=$Qor+cbmpd z12opfb)2=;wWg_0wb<54`#vdzK~wkq6}2Y)UN`4$Y1iN1!{-S|@}PZUv4lVW1@yM> z0!8okC7Uq-Im23U#T4v?JBR4v+xkET0P*9bPmP_L)>GNePlxNj0&tzH*F9+6vr`-OKixQKZ9W$7Wa4PP@T33D1hPpDk3|%RP>bx{d zNTZdIN_Au(HaTuB%a^Z8(w3$qyHAd$?E#$rO2w1ZEyzDzL~dmXeV#! z-sGtSTy0+_WsaOfJ!O(4M-<~BTUl2HPVHh-v7s}o-DeUV$6B*WiO?yD7`EfPk||E(dwjasVKCb7Fmv1dZhaB5{;MY zgxmHI@_T0S*oyL9_I}3;xqs>-H(10L-?I&&I@Nn!V-V@>Nqxz*s&sLdns<>w4nZ2Th^e%Iv(g--OfOC$5$6Tkk4Dmx7*xx5 zSit&9XFkWQ*T99U!!@gTlUwages4lQ;h_`cJ0$YLNUrc`+JEA6+QhZ#NyHi>IcBL; zo^eT9dl}scY4REzx#d!e?t4Lv4wf>M9~!3|)#(L5_9u_<5v ztz<`nYnd16q2(6<@gF>pNJ=P`VlGJLq4=LzzKyiZ4-0AJa(V6P5vX!v+kSvCQ;}&$ z6(Y=Fy0h0!v>?O9?4s}q+uSx^C1QluM%g*(j)|5J>R%!wSF(8t$WvrByUpOpZ$QeB`il%RG~e%{ zdp*s-JoLwjKqcg8SaR%0?t{sLK4lsEHeX$-K3-`qI%i)fl6Cp{=jY@toe=n(M;KK6 zxCZ`WP3R8$J;3L(W&4dOz)lppKOdfCw_IIFG+}^~3&kEaofLEPfH!nmQsZ0HDtn>Y zPvO6;qddyyCrg1IsZ(E|qX#r3ccl97kz_ySM8J5EpvC$V=s}){55AFXKAkRp@9%H@ zV4USq7E!N`WC1vbOcBep-VW)?ZqJi?CRIcI@=sJRdkHf`P-grYPi zIco~&>2{^5PNk`tjGsj59s&HAoj{{9-(FJ@S4|irgzGtOZTCBZn%J~gZU$neluc&T ztq>mz#IWUxfp^?ZRjZAVkrRg;Tt}zsv!mcG?8+VRHr}I=*y*e6141mUUtuSk5bK+4 ztHM^Py1BpHK`{BMaB0*jrP`m%y)YVAx<}bhI+3T-)R`>t&Jo`^g{Xd6V z6;mfmQ)el=fBN)a{a$_hAH=)Ac8QH&Z>_K@=1aPksEQC3Yu12L3BML3d}|e=T(n9% zKuNW8+rI+L{iW!A+mm_Ufs>_h75BaC6By;*>);?xM4G`aOWOU*eVlvmd+hg2|LgPd z&iot44QmMhL|Y*yY@rs~B*j-RPY#+6(u64hw`^#~8-h^>zTmlwI%~X`h&Gk(L@{#L z*Z%ww?Y#oG*L(5{ZjWYGK=CFfC=9MI=*rZ+eV^H-)cui!&0%c+43;;L2%bzT}xgW0&lcxvkQa+hG?aT}emv`a9LxunRvvLr8iuUN%ce&Mh2;w^Jbit;7d zZjBs2(TLY*_#P}>WQ55=P0**R6j0JHo`6uG)u84B%RSC{abdlnf>?QSZ6I zyk`fr_BL6D_kra7egjogSx&DiZN^qmrvb&zZVw*|li^x0SGn-~N5!QxT2z4e&fmArKI?R~T?0&q4@+guJX0d)hyi zdu21}hwg`ixQi3BU67K-`m7>=;|+pwPuP!X9CkA-j);s!wGRq(w|Ix9%R)W`5BfDA zjxhUHH1ST~5)7s69b*=3QL=K0))YniJ$#N5fcz#lDpGauoAHlOEOq*zWd0+u{64`M zjlMBk9mt*Z3@50YDDfYdS{f{k8-f}&tWBc0=UbtaX=Kw*!9Ngzh)lF`smK_3%B+gm z>PCB&*hld^BvW2@Px2Gqu<%8K zj+U7M9Vbw$(Lly_$d_&liV1#vLX&tW9f91*@BLV#8Ea6Y8HVtbMTzmq`Ba_!w3_s< zKFX`cD8>IPP(a!K2qWXKh)gY(L4H1*UZ9S4*um?vBmezL0ucD5wN~hTc-p(7zD>Y@LWlwN&u`65>X_ggD0kS8ev6)wmS3 zbte=dB)+Df7^!m6>G=aPg+ovSU~F5&x6;Xy;TRRg4}F!;we^uv^igf*{{0L$Z0cG# zEn|19{dOkY=Ut52q}fd|3VIJu`9H3Ku%;G z;|qh@H5QzXbE)aUIpPwWcSfDsm(f8js=Kk@RwesO<5Xd{h703)ja-x-q~tbRls2>0 z8mE5ZzA{;=W==|Yem0E){sEPm(n#%cyAJ_ zQ)05@6pdnvar3i}R%@eTJ(>Pgua=;pF#HSEhuzgr<7#|LFT%SNYbz-`$OnZ5T6)8y zMm-r1Th3!P7(+rs{N^!RaW6f-Ju0n-{Al`9%c=!Zq={51?xeKt*Urt}AF;oRsk(!v z0Lwa_c8}{QxXdgsVy|7 zJ@%m1u)2v$v{CMm#4x(cXwrkwS#NeM-^zIX zIU<|okZU&-V3i48QhZ(h9*k(BjRGerUUGIDo zhKtKGNC?Mbs!PMzRFzuK$1x)qwGXihckPgVe8OX!wl*gGvy2t+vJOffi3q-a;)3h9 z2BK}mJkdYK^P)dL8dhH~r63T5){*0ej2S@;Cqo`X%M)&E9>%bC7ZY!fd5L~eO1m&B zKE+}3JkNcVmE(gbAmVq%*UH#Eumc-9+Z$*2xHw(c#gSi&I>oRkD#;}oCd}1e{4;$? zX^bJ63<{NWfO1HZhpCMLjEve+ z@9qaD_42MYJTq^F|E+F!Sg9 zHeZPc9^+uRM6Mi!OoM^2+6m3?!54{2}TfJm;>aevd_>Tn~ z$9L_<*PuhEabp#6iX(3$FV}Xtfsg$b3Nl}~E%u)8%q}HXU3->gn@E0o{fq~d`bj*~ z?e^m>Yk0767dz2uxjN_2h>}v?!<#q0e#)_9tB4}%XbX4NMqk;bWAQ9SzmgOio;4Vg znrzfU`ip0Di@MwFn{k8ybjBZ74ursz6gcj#3L?mi(t%J8vvpmW%v%E9qwKuDlX%|iu|qvoifCmdm$8^n6L7V z^!uhfGAjN}Nwmr`bDoakyp2)bxzi_eJ0G9WnDx6^6hmKR38p0ar|4VPoJ@4j?-GMk z(wH{O2_;?L%n_tBIA6Q5Zcf}b2i$NoruU8CTKrsD^2rnP(U}sbFM+wtYm|QhG9}wg zelVA5A$nF2mRC$T&_#jXnpi(sQN%r4(;0h3SkANtUw#;ton~AzZwU+@<{I(^b;=<* zBir&L$Xhf;s!v5yD!C{KvLnaiBRS-mjcXPt!61z_YK@ud3n>JK6zdz3gxZIl`=zNr zOOAooV7^!WBzKb4Bqga0LLOx{MpnT+@KjT>qnY+`wJX7e*gTJhj4>EARy_!%H8~{-0A+; zv->~l{9g`kRa+GlB{aWUBG~cBNV7t%l_-*4#R^m5R4RZmE+Ng zDxrcF2jKM}&*AR;hDkSyR6V0@ZgS%67tvlnkB^_NB(Il3(~>Jsk2DwZL(Gb~tBjyB zqEMTfl$lJ028qrc@!&yNimeL5kt{pZDdO-h)QuIns{o^FZ4E($w$;*Ee|@cJn0y#- zuY%udtGZGQKoEvB=aq!AH@IKLA{=Ig8PM!R)0}lisB-!mwE_D{5!`fd)`ORzIh3-c zgFJ194bVzUYX{@lF}3~t&5IKAdxp@tB-63)6Y@jy;?9b_GR1YsUfiG|b5MS7F2$)< zm+fvXa!MkqSTiGnJH^t$G84 z4est3x0YQVGJ`?f7R&6?azwM+62vh=-5#L>7o0{qeX~%aWgB@QE5d+|N9*&@$v`-kqrxU89TI~+dTVl&Fcg@^xD{yFp zfXz+9^H&Owk4e`5kNnLvAqG%C9U{Dz%ND4oeH6+57Byv&>|+>HC;Zp zM(d1)Y?7=L!>pMfNQ9rEvG!0cX63A=7SK4Bjc`z!u)KlqM!q+g|2#9deKQpj{K~Ka zzcOt9d)<94um3&7X6=qDhUM34nYEq@co1eF0#TZiTMNeoL#fh)d8jP~qb#(Uv&EI< zFl+)ptI_}cu6K*)A87DGbPT1*Hw@&MzD@cyysxyKkz>%#^~HiW1Tq0!ehO|`DpdfH=y4wPBD3$Z%FU=K$5~0b0HdK(lDZ9V#w4%q(49TgLulRe~a6r^Crm@hUXeP4sFy(N4q^dui6^w$S zVa0YU^alRE0fn)hd{J_M@{FTLipCcZu==;W*KEBP!VwV-ZEB z2vxD)j^k4``e8^^c2gd4SXX9E)j4fs%=u{WToqkJ0>ixnP2bQm zo8|?$aS;wQo&{WW#gh9j zfNpqP3$~TB&Pb3eFCl5E*;)@%sdfI))*>9md1c+-SR4HUqfr%IWqp-dNq8}^Hd7<@ zMQm%8#)_Jht)p=nt@W@39MY_Hc_<9IZshCCA2z1l^4odb z21X+~N)Jg)OiR>>9aL(^dfYZdE8J9ooo0ssJVLmSO??2`i>4vL5O=L&i9RilhDDX5N(F}7?MA)KC9z<99 z-(JQumSmyVi+t6jC{*TzMtyxey?x7oJwYvd^7PEUeVcyW=uefpe7&4BlPtou2rM zX{Q=R{0dqcmv$P>Lt@et)xmy4-{GN}en7rK4@w~8Tvy;+hsyd=+nosrr=q`kovc@G z1Q!onXOmed>V%Gw$!4qauD$cStp))aE>7|*Q_{k)r{>Q|`J10&!J%{sGz z(C9IO(o828)8_Z`>^@B=Y<+O+QW&vDzjrx=Ew^n)^ z3T#*hUh1Y=b3*OY*otwCh>vbbE#&0FRat(KDv58ha;VEtIp(ny9e!kudY{sqMTyE$ zC3?YZ+_9xjHQ3}#YJ+Q_!K|Zt#HPq`9J?`#K}xkS;teR+wHA6E=Ml-%hCa{tVb1OP zoi3sm;p}Vki}2Yz*mF&EYp7wzpdVr7(ej*{s~h2b99B)S$mg8oVCPasrsa)4FP#i| zf!H;&qa^Z!hK93RCrNm|()n@F4@=UrS76%cLRC;wj+){&L73q?V(zbCwe9)12(RAk zBj!5FLjDm&U1R1aS3He-@%~Q1KB<3Tgt%Rj5q6u)-}Xa*^2&k{n-cCH^j>y#K)Z^5 zgm4)3|A(({iV`H+vP|2yZ5x$#W~FW0wr$(CZQDjw+O{YA^|W5kypLG%6`yhLKKpLq zpjBuNT#QosbJEBrD|xOrzrve0O!Aifd8+n&;NGiS^aO`>K_WcM1reb`X@~*PLffwzbHRi4Un{6&2wH- zBWcN?Ja5rR9E>cHfw^C07~8GClTP;m{$(Jrruf&T23_taCf^IO*5o7~bK*ORpuKT5 zr{fdn`{w(mXRbF{@8{<|J;2CqGJc@jd?+BzJ;#11G&SJGh!kMfFz1t7`nZlh{Cwmx z0MnQUp}YM~Bu?hxXPkY%900mIg%3*J8=~-hEE3)A+*-uUpq^p+s4<+s`~29!Vgi{I z7r4HxGO4vBqI0%PH)som`9lYkYa-k3CGKVgDh%v1DQRBrG{)tga%y> zIy9!tLi9^la3YR&mW1?NtdOgMim_pUkZutsXU9-KuksXe z7QM1vtTiZuxx;~7S^ApqP|*BUJy1>Q@O?sq&fsrhR`gmmX_h@{DG$*^si|t=2N+Nx zwjv;CC7Jt!Gtj$Cue%90u+VJTv80%Qs!Z9Xeg_OI+XTt7-@1Z{n&Inq+Nekck%9wJ zEgor6>+{*&s?5nOk43PIj`lh<>71p8qx;HmV%b2p*w;8dzAGqIl93{CLh*2!lz;rK zypy^yC-ox?Xc`tWddmy}5y9c5IL#k9DdYvJ(ss4PXK*aFbHeJBO%IITG3v&GWs{YK z=)|QO=oTl6D$ro#842ZFmdhIqN(MV#z`4PL45T>m z+Eqp`ZW&@8sQsscb6tJ?&)TH>JFve{uh3z}b8OYDg5E<{(qUa^wr7(ZO)?2Mvbs0QTI@aV$ItVbH`@fxt*0k>kj>D%5B!t? z2ypR6IG%PvT86UxQ1Iix7{eId@$(h$kVCf&?PEJ|yNC`op-)kXA(KTzSuHH^s;q^| z)5JyQm;93N_{8S)TE6+Yqx(EDu%8lkXwM+l(tD5|Ojnoz2JukC0bj5n9SA4^y#3ZR zP}nDrf1PMSeH{1s_E@#hzkV-&Ban?*Qhx-D6B~KDWpiC61`WW-E<$PE$83!}ZLZyV zqxNnlMUu4?Uk{Vy6fiCjq!-K=Fhyf(+NOx&tGjQ=o$rWPz zmj}r|xP<@OY9ws_+bNR$A0#5W5j3Y?cst9S;0A&ra@H@KVLIBwg#;{ds9+>P&2=<_ z8`_2wm}~FTKPOVUZ*x;5gp|zbd=KT{h2QydGP9BmR*;w>FwC8m+m18O*^PhjKAwGj zy8sy=wT0y~|KoRFpEAnu>0IePH=ybSmp87;i5yz-8RB?>M+rD<9q{ zFy_&uJa5oYne2=_M6J#zAfQtu#l09tziZ+p$46(C$3CM zJ{(k#onLX|2r+9(NR2#iD7mw>WX`)TS854ohL|?X@H$8qDaFo7{o`-1RK35|$?%JJ z+a7(Qebs4FJH?U5ZJwwkz@qXlMuDe*XHU~4u0U%?ruyJ1+{)vDaXFIZcfo=u&f+dw zuo1$Z*U<_uXmQHwQdUFJ3QUm4N2bngHp?;0Y6YRLY<;KEuo;)0TWvG)V4c9hMV&$R zo<^`fgHMaSXFg`9kc$qE&_bhC&Y_&6fX5QU7_@Z619ov#)tSSWoXHq!yy#+Q*0vwGS*l6)8s+wJHG>>;;x zP$g2HU{QnA-}_(q`_N|?=$E-jHu{2sNQN-Lrppn#3HN)ax5KZ&P91CUN1F#3=JwO? z#kp^x1ZvUA1?`@MLb}wvbKT?16$*4|dfd|!YRjyWOy2$3Z_Dk*=T>Q-HAI$B$*y0g z`C3KND17&H={HCgm7_+Vx0tbcZ4}fQzBde%yWbfkXzEbjOxNQ*7z3-a|$SMPU-I~ z_Ip$05Y~A{imeRHFQ%KmZ3xgXK0sAR4E)2(^&0qJpm1yFPX|Zj0H4k`eak4cdlNPL z@)m@g1P+8iIDhr;v&0fxqnq}Xxop&B2#3u4Y8fZvWvSw;uU2S5RUKjRejIpCAwfg2 zQ|~KfVUj%8O}H@?9Wfy_jr!ngy~`w4&GDoVST&2cL6cn}Fkc}LQg0Ab9DbSMnV!By zKS}?s*t9phI7K^19%i#3bm{_Z#SR!mxfKTNcOBIM&~uSRNK2=opjOvJL6+dV#{|jv zG!;Cz97Le8>bqSplq$=Z=%zQE)vBYk7WRt7dv&~YNN@><+2VB23gIiFd~lzTKJxuP zXKPkbp}zLdY&H1NC;n@Y{=a7Hf9SIRU8j<*qWzQVjk1l7LishAf>U zT*@uY^LU5Z^V)HyhyCO84?aDhR$naPkez0~0R- zdf%tdk5?M#B_&oPj7Sv~b@6I*bwIJ|rBl8Z)hXyEMdoSySr$wVWoC;>T1Y#aschyZw2FKy6HLE| z;q=l)MlrM2Hn}t#e`Y#SRiBFX?_|P^%{e^t(+umR1!g$7VXcR)v5s_OgY`zBG@)nX z@WmX1Fw(Agu~ZB%=0l=l#yDo_PZMiP<<>hbCLt14x}VbYX{MJ>t%vn@5W-mN4J|@(Fw%Z8JY3qdA^4Gn!qoystwnmplDo6??}#6{j=r#wtl zNV~w>$#DEl7tH)&hiR&lRahVE;m$4D{Vadk$;%9LY|Xa>`JW7&#S--vR=RrkU1(I9 zXA`9?0ByF^=jXwJUcT}@hL|!p^ik9_s)@2Px3DZIXm*S>D4|)kte;3mCFQj;`PRJ< z%+;w&xAvGjh(F~o2>8reYopuJ=&FmfL=l>z{f4NUFF9R#d*C(4z*(yC0~mwzHixDh zf7$TUnfg6>)(5u~TXZzIob8|VWeNw&PrMHJAtY)O7f;zvmm@^( zwg^7C!QWzO2dcr(O5M0cuMY%|d1DBs$MaeEMX1rdSbz)0kM+iRA81N*3ZF5(#+QCH z-V3tyJB6k}dlV5rWj0O_gF`MFRbjQad@}$BDyC9xPomk~ZG|Kf%uG2;_OYUP)nvY* z^v#hyxD>ry7v3n)6UF0YTv1dr23x~FZ!h{whMYpoS8XO6Bp3SVU9kN%IH2huA)qr7 zfh?q^TaP*+?35-i7eI8%4oZRx2#8J)t%7x9>A6H`wLo3rQH6Lt5|mSN+%NRspJ73| ze}BPWu?*uN9GI3tLsop6N#PpA$ue@L&6kr3J~ST+ql14&G{p#%3e zFS|+Vt@gqb1kyx9u1+W;4u79XcnilASW52AE{qWedSYmi$>Ca&kF_FzKwh;)`qd6? zLX?OA<%$RNnq3sy8^FgO9%D?99*^qCKI%NdzQ^$P$Jgusd6n>`I{GurP0t{${4qZ2 z&`q9JuS^boG{`$KAB=;lb!SCAw zI5MVCgAfRz+NVP!-AY94ONe?`JL&{S!n=F?xpjl_uaalIU=2|#_}w^RA;L|g?y;@H z&f2LoUoGtr+TW|QxrjLcT3FF*g>!Yb($Zp?K&nud%;G542;*ae_31KP#!Tb1pKMW5 zo@!O7qJ01OxU!q9uNpC8$~%ZqvA9uW92T)?kCUC1yOVuOryar2nLSyBxRn)0&aKNa z7sIl=RAJ1j+x*C6e}AJlPoc`%sgIaXl`^$Yhwfme>w0x%W+L=w!&IDnYc0e&&4PPe zS^+>HwmA7B#KZwMs1>6mD8{No{h}bP<`g|q6192;v=IH#0%cZB4Be&e2hvB^ppFDj@b=IPkaCw zRPI)~AI63uDuPOpA)GQ~9GXO5?eSzBjyIykSZNXnI(Mu`IAKGtNR0RFy|9rm`pyL* zTJ%C|J4F`tc!!&q>eOqyhOsD!mvAa$31aR#)Av(Pi{b^LWKr|Q9DJyiU>nm%pn_y<-{jQM0;*)8m%vx# z#49CGTfL(|xRb^Zt_nIwctU;gp97-VsXP!jrO7|{X+p-jRCRRB9|U`sbnSY^X@dL`PgbD^mFzBThu z?EN^LP9&6V{=U^)zWBu5$ry)mDxE!*HF^E^X=8eS{HON|Ob_Fausw=ur#;B(5)Rn=y54AyZ#-ZDC1D}#zS(JA> zRv@9vNDE5g-%6cI22xlltZ6{;4ZEl*#rsef89kO;>3uV6%NBxl)+CA77x6Ojw)%xJUJi~sP^imz<^|!2s{D=jz$g_{?SOmAsJSY(^EXg$1x@w?FNL4DbS%d{Z z#qPo3_qHZjT-v=f*fp!`jPwDCbST+L1_~U1I@%Z-413>@TJ{|#=3&Wv6xWN(U1~=r)6Toh3^CWvq_iFwbRdu zo61N!*NLgM<5=caZlWQw44K`-ja%tfmO>9ANZjQUUYm5biiHO$-L)rPZ?17pHn+$l z3-mTxyaotQYf;ipx+X z2nn0|orr*B(Poj!JGt$PZxb@o2M+$>DBn~p9XS+`?G2hB{&kk&_f-DTj>HZmi97z^ zOGws%ExDo1F3H%{#{9fCp}55;MU*6ai$iQOXdE{Xe&W%cX@XVijy}aYA20$p*1PSbv0^ zDNO`*t(5(MHKDh-uEwOvZ=mt8PS7_9Z`1gPru>~+jR{B@SVo!(Qp)o%0%*Bsq)H{aVL__cT#wfnr=!txa7Ya!v51@Udo z9-oV}G5gFyQ>!@$KEG&Khk`DRchJVJ+XnI01C9tf+GO?F8#scfVLo_Qo~Sx^H&XD# z*&EVoOzqjZPqc~PJ@gc*7UQt2#kC8P1o8b}phsDx*%q)Bu3dSP@Xzy&l(=&B{|sO|rnyi&rwy7#bh6b-T2aYT{(7$`CD_V}yIPQVUyw3GTt6Z=KMYrc@9 zPOJbhMFTMLT^uVECP5LHQle+oFvwfX+MD@N7{}%fHHmzK{?FBOsC}F9^T$O&_Op8a zE1&&87SDh3{;K}FDT0lEtxg6S6w;ty)KUt9KcILaMOY(9uN-hAfIwtkYK=^az0;}j zbj(xt?dk=bW5x^@|Dl|MIs10`d+@uT{JeeAWSp)Oq$ztnv-^4L+UwZsIH&XDb@sXz zAZoWf$c83NEeT%~oQIVgWg`UVSBaJ@^piQVKGCF0-Y{rJ^))g#^ z@^g{W+WH{_e=f(v)Kw~g-hTXU6G`gDW@F0Cic8AMbQuvf#w9R;movmnJ5 zC4T3CBhH-F1>AbQeth4k6S_ME z&itv*uqSKQ{`q)%PdsJjB?|GXNfm<148=b`p=3G7VD8gaTs2xhUx3YDB?xe1kp z$wvA4UmTK;OHi$Q?J-<*#8PcI@nK&9%Y=M^iR*D{=855wE$26@f{{J}&@Bk01eMG> z^ZTR{zakYyWxCl4gOq#S>oQ4s#@Bj2n)auVCX^&9Q>MLii;P>P323CW!0DsCtUlvK zVWoRH3u)e{yN2H1VuG=D;UGg)Gc$F?6YHdjsQ9yuxRv-3X$bOYcF$_nvgyL+61A8j z?ke>)aI3To1NnPy$h<%`Alp9;nX4eJD#BKyw-}%HTEYrJSYn{e_At9x;a(S?%)|9C zc$JRkQQ+2Tj#i%?MC1jxqNSwiEtyN_jvhFRSyQ2DNcG60$Z@gti?4P#ak6=i&T014 z5IHUjlyJzbRQ|}?ZB7JT0SlmKDG6MLbEwj}z`S_;A<`Gs4hOEt_^FQ_sX{d<0??IQ zCttWpbE!Nzulh&eUZVP>GPMdI&U9ZG(bk(RFX&)mG93)4(GJy&tc`lE@QFQK29GL4 zdIT>S+zxqMu`OVC=q8$)Kph`7kD+d%d_x`m-x4HLsJy&CDrlJKBIbhAR0N-5d_t`} z(@0i#yzYl6e2hGJ+r_ns$(*W}Bc6d3jdMOhOAv&wV4VS20Ca2sjqt%v79EG_F0p;% z$xBq|jz1we_3pz9o?#b+XCinuzhVf30nwRqCAh}|-DF1{)1ExzHJ=DP;!U;3h?5A} z?;u2R51#Fpci2sag=G4Udc`64pR(V>sxJ$ZOT{Ezv)semR(C}M2W11k`wrt~qqyN} zHS@P_AP=kLC|Fe~*co>r56K$f9A;1_94!a|b!ObVdERw(&Kj)dw8B!!-OZ_CIzGf# zCfJh}Y-x4Ffu%IFC_ZzCXg7Svo7v8)wo6!j`^)6tpjT!R+Bqy`Sdc$Pr zDz}QOIZbxK+SA$QvM^3W*Hg;hR=$ex91!QoOw?+Gc%@|7Wy*m_eJ(dQsOn z>?q|4!vI@$QBPb|W^?Vd=?S*A=33KezCu>0^~q`V;Ccb$K2|zbzx=E%beOn%*$#G= zo(*S`39ILHZJ4%p!Qy>XvuD>K7D>ni$C1T}x}oB?6o5N<-2K|`u; zkh7REwg%#HRW3feuZUcZfcO}ryc{;Sb4)XpOJS#5xk)C=sRV5So})0A#j+~!Gud~!XBYX z80X@?vzL=k%3`;jwiH&_gY^dh#||JLhGPp%g6oVsWC_BNY=tbPs!eHZ#WKjLFDN-M4T>N& zqA(_)p;pgsxk6aE5O7|PlzfGYz-*^{*gg@BrwVPdl{hIz>gPtgrO90>90E*CSl)ON zg1Ab*PQ_H~q#4!o79yh34|Kz&nW($OXL|E^yhE3;^M~>}R7q>G50rn&dsIub8~Xn8 zc9gsn{B?<8v$qnrv31uTHYsnLt6Li2OW3$gf}+`ZMz||f%D5Y0Y zpQhTeR6IQ?D88XkKlw`%eWtw^+NcW7X5m`D4NmU;XCww1D%8&YWGbTjs>?$B^_}jOn8K{E#_6YHItR@ zoksb`z{~s`wrFL|_4rn?m-7$L;0se^l^4WQ`lkGe_*;xL+t7cm(3^g&*;JlDDr z9ir}7?GkCA0*qTM;G@kZ<#S{l&$~r z+Hi@%wf@bV_*ayS7m_1OXg>*R2KND!kHbq~ZFu;)Je1^;Y|zLrGYdQ^=pbdEJ60Ay zU3R(!ZrXbi5wqikTHqycsC9TbCXKI@V?7DO8!iOfwr9vr3IP+Y(uq=K6NcS!FiYabf07WLC6Jv;&zpPD6p}61mglN<%A-xxYj6=r5H?eeE8XO&U2D|p>;a(ixQ^k$dKrFckzttlrYQ|p--4=1K=shA5!$zS$$5Ak3`H#f0)d56gas!_ z4Fb=I%0d2IfusxdEs}R!uGiovh}eZMfJG=%2=iCwpypy`VISnS>xGOFi0VZYcU(w8 zY~m~l!ST8Bqiu3B^bsVV-M`JT{SHpjv_7{CVV1_-Vk58jODBbyrvx&<$ zt|5-UhsHPydfz?@_IyNdBs}f;@KHHw5`1m?TsNQ1eQfWH=DFiAeF>~)Sk|Z2IK-+} zkwkt?2li$}>8dQqWhR-oH^XEXc!DJG`5yrIqc&Xq_156@hhxnaGrcc&ql#Au6FVUl z6^m2QCBg*qj)B;hh+R(8%b&lwPb!>SjjNiak^06xZ6K`BOM85gwpxf*PWM(#sWp4; zWfX0WeQt2O#6v&93m}?529xEP0f;$5I!C?;mDci;9&2$%b%4hY`yBjd z+qzOC=IYhYn4tNwt^cnmYD3%qv|#pKw@WkHub|xnyl_ ze~IKM0m))cAfo}%25B87gxxbXQ(qWE>rRrMKllLnM(5>+iGjs62z>J!#*;+71!Z09 zLEyNhv-k5F?{v1;=Nq^WoFjoT5*8BbYJ6>o+}tao8s)0AJ~|r(ujqy$cy{Q_F+Iv9 z@kKC7H$qjp3om?C2k9NgVe!PtZE*!An^4ue#-~)}t!1U$>izv3X2E}DMY+?~A;ha_ zUbMQUM`U|hck1Mwacm|2*W$Y6YQ%OXP~ zaCOX}93!b^KkM;BkR0n%B{CBxb!1cC11s5I-&kujpeHtKNhW>*?mE4zeB&cc-?q@@ z*{UZKIT8!==MHn2+;t+gL(dEj3ZZ zPtuM;+^`l>EGkd`k17XLcb}|SWGrBwibP)3F3k3X>GM}|yLR5V)W1>B`MG0IgNG8i z!30_;A(aLyzi$v#FwsU1CmEDc*snh7wlz!2d-6<3l`1RL*#@IedSG~iFwJ`qoQ+SI zEwMVPEegJ&_idO_r7s`be6;reYz|UivW>8@cH>@|-zcWpcb{97&TbcJA`*V>&(uuI z+>&PmjVQm7&MsVM^LfszVA0P}g}9Hgle&I~LM|&ZK-cy61Wg@1pV0J-1<|zGEpOo~R3&N{nqmaP1c| zliXbk+&i_z`Liq0iM9MtE`oGNKZ=*t$2*=MM744>$f9-}5+>x!K&jM@aW+8LB| z1E*FZ_TMf*wnwAy7JVy?%ZWf);<(WH6=>%DJJ8JS_h2?NmddDE8suOPtQo{0 z2|Qb0*T9d$ekOGA>{~HVx{(ztI7W4ERYLx|UXT78l}4+A)%5bpC#rL%?Th_?(lZY` zDAz!$ejHJojud^w6#4Q zX;m;hKDD#$IQyFY$9>E3ezTXKAH)ve4_F;+qmR?yBEME3JHr}8!Yqp+o}HuEMXe_| z->&mP&*-?izd{qCP4GC;~el$q{`dO%UbbcyRU~z*6#7YOCG`HFJKrB6HKrmo` zij0aHA~N(5$d!~=L>&`qCb=$Y?r_x$SDy~lPXkbN*^;!pSaK)FDTT%>g~v-+~A&wcJ^1v5*jdGb5jc zbvS5AO>Q8-w*k2rmjiek1*SnV>x2Lv6W}M3<^+&c;=DCEiOy6rTr|czBxHo6Yr!k; zMU8t%DyCGiQpqQoV5acGV$Y3YQL7C~DO3H=csz^wgAEy$Pt~gnimZ}V7 z5|Uacl%e86cR!kbI@fHyPYa~h6YK*GDc6u7?uI=qsa>h7LOnUef?;EcVH@Ds(Z1~Y z%I7?kZeIwSHQ50$j7XBd=gQtCFGNn8p|_-T*V4ys`l;bqv zSRqBEcFR4A2!p@L4~w-^A41ha{n?EcF;uMbZbXL1LZ)|d(CoB_V7&(Vjxe=&^*uOg z_Y}QEiK(l~^d+<*kK3sMb0gcr>4m$(R?DZQl=0?S%!6BN{OCozf@{kKM7#nkVLq{; zBgGmc!IYhQL>}@|^{*3^s{r&DSO}wdATz1uaI`_Ty(ICqZO%A+^2}iuQzH+6x)s?M-)$0T=FSRO z5wt-gM|=X#!QUJV;dwL7LD>d{Fnrz$yHk5MXsvlde+rWu=ZH}~=l6DI3XU;$=hW*z zza(^Fo5=9`c+o%OW#6cH6zf^tFu`~UXR)v_Z1NL(AxZ9@Lb{&+zQgG}XK%*(Tt{yQ ze#5PMN|$7lseotHCA$UJ#gc&6;eHPJHS$5wk7Lh=a&*V95`BZ@kXxJdT#{p>>kmnM zgGOYJqL9L;82ipMX*A&wNJ)JooZ^$6lC^ycWcmpJ3TgWyXQ6rppv3B>@|>nYZym+Hf2c0shHEhH8zfP{mUnF%z&#~XnMD^rQJVaQ^LQ9@MW6kw{X zk$EMK96;pTe;fV?8ocJ;*SzriJ4N_mOSIVPX+80E1}LiIp~lm~r-->j>^HBBHz%oE zQgzJ_jWON)R@#-{R&ld0+&M0;o}1h|dPZAv*k->3Y-tX#j89XrJMx<79@vC6cPl!^y)NNLjUpS+;=vG;h zOjyxx^wo-;1FH3t091T1Lb=jCX&~m+K`hVJ<#u7lCw9xhFF587v&HN8L&^0>;spW(VVV!9Y;k5UpZCHP8`_l zWTB(Dx`g=nr&9HwQ{_K936TH!h%qqMw{iSmbp&q8@@Z;6o?;=i{|DXm@1Oi62>f=i zwKH~ba{o8ggNnYD^Z$+KEmnP1#s0UFzOg6_F!~5!Fm5&%X#}J&F7r%16f5vLnMoC5 zp{Q(*K$ft2(r6~;xVR3>jgsolT8U>;>yD!8?6hf?)19W%p6@N+JYNC1jrW}>(MT~M zS&mTmP48zPS8vtY9+!J#fakxufINh|2s?Cy5!B8sp5U52iPJm7eAgzE&vombq&(rz z^@r~wUcUrE0k{(F~et}B7Rfg0ZTs^;q^-A>4sUB^;v3_!w9dZSF zp)35%3A=`l3vEzeK9Qp?DbE0Mk%b+W)8%1yGx)nVruXr%<`;Gh`a({_O8z%Se_Pyn zmNGpkKSRZ}H%G=IrNk7zabE|}8Cip>Qtdv3>TkbAQ~j>gM8E=XA(eWg=hmEKg+47@ znaRMMLyFDA#;7@I<{8`4dQ(PShnSM3tlZO6JO=0S7KSnt38k7auRf**+prm0(nA+l zfm%4{GQyl%#K<~%N8PbNRoLO$6luaND7%r;qLRXy#P%3Pir+?B%5oJSVEkM)Mi;4z zbOP)9BgyU#W0mpp{OeSd#ZYoO%c`&(#i_*b+}g(agQg=EXGvjFu64&^M0)E^lF76T zQ?_S&%di)kqr1-hG*kHSzSh2p?S0U?x>KVh^N%v&GqYu(+Uer!wi@EWWIk>eI77A15t($|qF ztX0Z)LFF)s);A;lz?!2(qbM};))JH8C1b3kb|{WI0l36^avD;5cj58d6XaXqiXUaa zmcX6pV?gkJ%_xQ2y(v!^D9-I%XF`-0BDN_)CDJfeD*1KCe3G)XZgVu!st z^83@#d zpF2!a>2>VU%Qt{B62{Jn2ubzHWDoAd`8i8#jjI=rLn7%g9>JRTq}9#c(^j_0h=Y_* z>T$OwTh#mdT1oc!9!3uh#yFMEj*Ln95NO!2Arg#fepk<`~P+VesQGoIV1o=66yb zk|VXZ5mA5s(mXrZ^SK%-xw&GkrVjJ)|Q+zKj&cUF)3s`OJdXqJmN;OIU48@L-Xymadr|)2 zpg2I;o|PdpvOG$Ay;4`GA*N*e$0g_TWMtOm^l|gzTqM)5aZ8xgm2ByuN`|SCFb^0H zF()>u5d{p$My@RMxsK3kd^mS?-_wJ!LX_v@wrN0>7q(p!t z2z?wei&e{HLy$ZGH<-vIKhL2M|1|b1ttji?-`k-A8$Z>e2Lp1P1GNh$rS+6u0U35i zkY9GkR4ugmY+KDB^#H|)nxT z>O->m7^E%N4uu%fbXRM3*)*%C_@Gm_;akJ0Ocv=HW{^l67G$LaK&_1Y-=wMG$J!zj4J^!(f z4t4JLqGbAmgO!($ol3F9EMjwQ-~ZTlbZ$STDi+QdUXIlI+!k_S5A#Ye4UF(LiB;_w zqh5NNn?WmNurYa(TxNA%(uQM<16m}jma7%XsF_6R zc*RZNUP$YndlHdXv!GquZEcE<7t{)AG-cH_rKm`Y@|%#JnI9h-9GhVBv=nLuGAJbzPJO(?Om<6|2g^ubXx)G?T2E+!utP06h(b&P) z_I7{syXFAZNl@MvB3|F^6X7V_+VJlLKBGAvdK+LMdxnBO`Uq^3l)*!s1sc4>Verv} z#Fn+K$AWSk42lgu8~U`}*z@!G6C1pZBY8o!zTBAO$GqKOGQL|u+6*(|+uZNEFn(w0 z^$dpYlVXfQGTPl2aqtjwT+{TETpQ?U7=3uQkOV9zu!802@L~N^_&j2dcCyZqyOcm!h6{7e91w0h>N(UR;y#i zl*1Tb>ZjvH#bir>YKl>t61RyxOEFf8;Laycg!oB(=XGn_uB5fbR5uD{5-Ab67O$Tl zC$iX&BV7boolBh{DjLM_n?l@xt_5X8UaUwgtiC3Wvs62K#B#(Cc3E`+*@J|&LJajq zR9b36zRu{U#KuidGFEG~m>g&Mqa_|JYNsv0xL@7oe6oQ89V5G>nU^nNPO-$078KPS zg}VV09qwGkwd?X1Rk`VV>A*-2Gq<p)b)TYE#M&l`ruDnpmFa_x^0*W!zFt z!G(9<8b%W(sAEq?Ucv%WH@@{1+A7oyDs=PJ`kv0(Ulszm>+&dRrqKIQM;Yxs=$R^^ z+C?Z=xU>HQJn~w0PU1o3rO-1>o)Q19~)9Z}6EKeesQqJ0<794zQarj2d!5swy zTeVXgX50vj3#g;qL?YoGEc>hnlBeT@fs9`O=fTPZO(@*ljn z^F~8v>>~3uR7sxa!B()fLzOH}`}!-#Ta!vZ5>C0Bun-li)w%Fv%Qif4mZp6JSmH4A z69h~CVI9~&gEew6WKYzrM9ZKRd1fw(vm1lm>R()=!0)74em0;iA29r@H_#sn!?i3Q zSg{r_uz1S1ny|ft*XAjGcyO$MBeTj_Uw)%%n=BuQv5MP%RwrFz7gzH)fpe7$W#8^~D$SFpk_Ws^u0-ZFC)#za^NfvhLD|Z*05I<`Gp2^jjO^Xt^ zol=trP{f+0V`2uodoSPa-8Auvn?QYCvMuAgSBx9(;LbV2ixwTmrjBPYpwVmY7cABb z8OlSzhtBAV$AeKh?*CgzW*Tm?ACKoqg2*b|XhaEfq)R|jy2m#Cka;>x1{DvoGpY3# zyM^FIT_)%h(&yt(qje;U2j2v$1Ncmi=u_P0Q6zP8L{JecxWX4(Jq5r_pV-Z^#P&<|YY? z=gAWs`Tpvr{d($Ex+3Zp(y8sbe=8fueX=4vXO%E99nfFV_LIinb%BjUP4+XQnd!O% zoSW7rK9tAV>i2YJMe5cP*9Q~TNhe3GTuwkDyAG=oZJk29`!_)rF@x9@)tr!z9A5c# zc@eRLzS!y7ZCU#cWjM3Dx5E?ysFL*{$!Zgij)+4{TK(H`v^cycpd`kD=u311RD0ux zCqn$jJ${vdKGt8`m|rb0zUZ&ktTjbjKk<&Z`9p*`3C9B<>P#WZ`F7KgW`<=6LtTtX zk_KNGO3#RG+G53|!AOyRciR#eRP+f|ke{#ubSeAg{3QZ=ser$N+cFqHjHcD=33Ug3 z;UiX9@BIOBf#C)^hlqMVcO_`nyn%`jjrS?ww*hB4s7C7J677{__2dyJW+`>GbcSia zK~mi2s7Liqv!GM@=U)qUg*#P8zN8C zVWM*6E`h4E{YmI=B{jUKWpJ?SA%!l7mIP&gHn!UtCAAl6#9bOtfjPYTKb*Y?&g}b{n?ke`vvJTR_cXx z=Ba;Nct^L#aYW?hc&AO&X?SF3ol-3nbJqgy=rUBmVM7xqt_kgELr>8m4RWSLw=93g z3i4Xn9$x5$_VTp`?|XeSQj0+(2RvSf=WQO5l~gwjL%eFO$*@|#L<1CR5sldWyQ#(& z*)pd;8&g{z=ssxEjdJlr^ga+A_XjXkTf5EH$lL4NN)+<5c<3Q=*7q$<9@L$QS?Ne+ z4r(6k3+1dTClYf}`ugXj{_W+;NhS9vCHcBGS5#uM{K}p*VuhI(%zZx!)q5Y1y` ztQO3~B&_3k?aA%r>?&}xG)t(=deR@H$vcqvgqyav=|EyrAjG$(>OffZ>alK z0x^?tC~8_mB$73QJ7*vQ)LF{}i31A2FV3)4h+>V)tkoUcIy?Q@Z=1{F>Dd)qu5`31 zy||kq3{PvTB(!R{GcQ(!VNBYR7gzTs_jucd`_^yZ3Bt_z+vmrV4RnSQ7jOO9ji?d{ zEUzs(M0YCt;M^+vHN|9O$rhJ9oJ)9|N#xd#Fbjff`a|90&DQX~X7>kCOgRCLyDZXo zifEL^;1;2Ko(7rymq9mwHe(3(S`UDBNd#3eStN!&l<3#$OQ-lAnJl{XDbEL|@rkXA2pMNra-*+HlUw4nFiQ`+c>($y1<1=%qNJ`vi8 z{I(0$m@-m`UE*fQZvceGlknPj>fJ1)8yV+K&TrYn6il((yf z`oE|;DOJoo$88w!$9a57P%$HLT?ZAeXm6G~{c zU!_~5?sY=nL>HN#ri~|jQ`N7pm!*SGrKH{;azv0!!W~elW z8%QLREN-&tC?PWdebz#^8J_)HaQb*@m?H3a1X;+73L$Dy`@DHV^sx|1{nBhKoUm3; z5(`SD88cRVr^rG{02F^b@kUY-Iyu)NM*7@Ojv%$8>+EA{!v=OM5~^KB z(%+gU?sDzDlD>ZQw|MWH(2#tDTOTbaA0>ID`5?TN9YYe1{&{j`9oWZ^(EA+6USWwt zdLcZrt$-bwRqg7C0iB=iN(k$Ob=1GdSBZ$ch>&4?-!}AsjC_709Ad68Y%#GF#64nk#nZUO3 zGKfz)!e!#ZvMel>^M=X&9F44Pm3#LQ2i>JxRZ_@V%wa!-?;s+D&*JmQQ0^%E&>%KI zpxaUAbFvC`h1!0GTXf$c{M9-II04PepVn#onTaR+&(`_h;jN03xz&H0r?%3nDk3lY zdkn4cFT~r}Bw-@!+MX>SX+!8YT10Vk>-fR%g5v34H8IKR3M3s?J01}3YQ4{-bcdY= z3&u&^FDH+xkCavtV}3R9Fy^Ovs+HHbn?79VyuBS%tASMQXyU_+U1Ro(@$e18;j_m& zI^FW{^#~&H4VdDhbJE!VIOs8?18Pom?a-7@IHZf=W;^}}k58uO@ERsWT_m90=4Mx2^Ns6>=91XQK4o8?CQuH9`LYMV`DGS zPGkXd@1!Z!j4S21%wn>-q(<*6?66U-e^IQo8cE7rPb3>3+4yvTZ0E)4O?iqLMk-C- z^R&xU>0$b(nPZu=n3UA{5jamw~VobNxd}v02l}Fg~M!%uKn^eJIJTKB%M$3%UTkm8SaWRp) z*CI4#t(2MpH)4ROQbZ=3<+kl-V{vdnr1^z>Z;QvF7awjnK5=g%u}BFTol}d-gZ1OWXf+9+$*E5x z#imcZ%~|?0!i3i0jAn~4e<=8y2c~EyKJhncCOAMP$z4)m<}`jP54fjjFBT}Mg4%NQ zZNpbFkd6RX^Jqf=2J}AWhqULMJ<~wet~AlD1rZB|EO5xDFG!k+$CH@}+nkVP`THY= zuowvxf6(&f$6Fu#Z_+&=7I8D7c_3(~*cWo~tU(d>3h@-AyXo|!yt;%@jxEV#7@21D zVN)azFuy*ih|G^P|EwClT~j-K_ok7I*NddC(gVyo3w!Rl}5lA8das!H=rC+$WC90woE~rwQhPK zQYOpA03ahPTmNFq1fWY%WlK|Po<(oYEU~N2e^BupX1ZN-__N4D(Oh-{L6ATRKHh3(_0)8p z;q)t)O5awTQJB@VXT2=)1D7x`G?TSZ7jpiJZom1ci^8Np9Vn5Qao5Mjlc6$l4mZiMRf69Mgx zs9+0{@;VyLC{`&)U#T|<6mPfS+?NQ4tI=F#(Y$c#XP`9%q%?&483PL-VwMTr3MR@Q z)CCo_wpc(j_7)z%bBaE=bo2*i=6>Xm^kMg#n<& zz#;TP7g_!%%z8|y`(F8kP8{0;IvjcFu-1n4F)aUB`4Tz2v=r(=b*DabpEPq(Xi~5$ zmaZve7!QFQA3s1xpsfRjS={E^wz8AQNoRu7nX*7@tongx!r62@%g8fFddzGPM>#D%@hsznkxt?^(YGp_doR#p*BeAMoI z{~d6$R8nR?=qUOZGp+MR!4g)-&~)a2tH*$@NJtgL;x9YAt|m4GCy91Z@g{(|>Uul?Lzjpm5!q#c~6;~ z;SL-*3vCbS<1uUjkhr_|0rr)Q1-@H!R=|J*(=EV+04N!=E>JUYE-EQ6*>VSY`Bd`< zyAmq2*-Y0reCwHr4vJgyh%~xNj~xzrMMZFusOnXLXi=1%YC3xM_oWRHXzB{+c({}G ziU<^1@8`@keAZNbaZ99WpidO0PRnXXkZ3QQ0jh$eV1!+M%dyEf=Z1UK!K={rebn_A zo9UGyiIPtmhHSuQT;OV2;N&&LxOdAeo5(O$^`39kPS|e;qa(RH_+-2LU(EOWza7YK zZ-W+miGa1T^|Gjw@&Rl@`{uA;Xd_o@H{|tHl zQ&yk!zj4stn(a?r{=sM|8|M-?jA}s%K@~(bKz>Z7qCivH*Z@(}iSQm7n!3Q$g@6b9ajqG44|B+EY$@g+|zMAU(^zbQa@Q4TuL-NWq z__Aog5mZrtPIg}!M&?yyfVH@9PZp(8@vS9SF!6@UM)bOMtvkdJPj}>0Q^D%DkZezp zKP}`uQbz*HMwPY!=BnFR_D#farNbZ+chOX*v|X~XJk{E)Yfv9Un?Cpc7+v*Il$`|e zR=hZkZ36AZJZ?|S#kYo~9sTmh6kMZZafNa&7Zr|;dKn#}b>VR34M#w^G*du0(AZ51 zpcdETtY9}fzE)*f1*7H~QD(}$Y(r3L4g6iEO}t9M4v?~1pc2_eb(_BHT;^hLZZ-Vv zn2B}$DJNclbKn@c)#yBmJW)2Rtrqi3&@<&r5s%2U{MvzuOv~c>FuW9MtcHbwNy{TJ z2U9krlL~@FQb7LPybNlE21Q_$wEc2*nr#fHDN%;E0M&85+&-R2gHdZU>MYby1#`#G zpMa!Keq;9;fm7$+v1H4Ixj&C`39viNcTp;MJ!1)(*ebNNWjyLqit*eWm)2|$qF* z@rn5rCgFboOrvoyQW-YA1kMy<4?WtBn49||YsXj*U-`Sx=ah>+*BdvaiH_bCL;{$w?=7v&6j#_64eF3z{*dWBYW6U4SMc@}pq_3R$zQTP z5R~?06eS9NgR&wNoxVRva0$MIIkC!Av4w_A;1i+uR;Oe>p_~L9hM+KeLDMn{j}pn^ zZW}>Acn_zN0F{vPfumIXR^ANeJA$v$N~Eu9NKbn?7F8pn90pRB4Dx(?47MiO?EDAnepfs1-SJ ze}!mi@%kxfDcR$(@7XB{2#SylqOK`2RBf>Z_)4=oyJqCFq3Rf3$*5!XOr^}p)czQ= zh4xIe#VjzF&@i{Du-8mJt(!SKa0(VkXP42J!&G+`~*1>g&vTuhdHXb-7kt90f$uij3rH5sSw)-6%h@0z1VAGgVxu-5zX0k zR!ByH38S;o7;Zh5DgNAm`)|CK4$Wpt9~B?Ew?Fos2EXMlPj$T&M#`+bHxE85R#7ro z;iFw7%T+sJa+htC4VQl_H!B{fplfyg!yr0Pz(4IeD2<e?+v;jY|D?9=wqOWJz06G%FA^_JD6u%_{7Ogu2l0r%msFq^2^E{nLM(l%en{2z%0u%@4jQhbV(v$Dyp6|bq_;b;;Re2!?FkplQ+q<)C7d7%}MC0D?=mJprlG$|RB1bf}qHKe*YIC&_@?mVKp zfcRAv3)Rt*E{6)l-Ync-ImMBLVaz(*mL)w`Q|ZUHOPAFjFn>*9)Q=I|@qC6UvY#_^ z|E5Qz>~3eQq;Fy@Y_4x=W9#^-IsTX9J5lAIdPGLBMu8!WtcyCAs4t z+MDdtJJa}ER3>>-S>xzch^Em2kFEV`=9h!GJ zaa&b(XVWb4{^(li1k&G9kyHwR>SOZFrRwBX6(i#Sn(0Q-AS^PIV}o-nV^g_ivi`S} zysv`&brTjQeGB6&ZROGl7E9Sc;!b6y;;~q=PfZk(p~rBluP~{Pt4?xf@|k}$1R3b0 z!xjNBLfR{YRNqeFtHaxHZxyLw;mcoZCepH6ddgOTOuCEK?AMyE$&{Iup6SsXq*^@g z@qzM925xU%S+o=QVi^yYI!0`lCG{F+XPRhbQB(H&{Y}#0bJ!aql6~%4@>i`u8B`Y3 z>mZhZKQYKRVaX<-pqY=FKN})#_J8Epk z4uqC^^p(I#_T@j?7Q2JmYv7d-7x4S&)3N9_Hy}M=zqPke8fZfW3Zj0Atz049M7mvJ zN782h#L)YOKqJ;3NT2YE#v6R(9huwq#24saZu71h6_f1SYntj*U(C2~{1(d4fAQml zK7!0wjL;cmpAi^edI)Vzkar1kVo3FY^1DY@OLW)9)5v2Z$A6>XW(@Hpl4Qid+L%$A zWLF9Omc#3NH$M0v#*uDviSGST2dPA!UhCW@baDRMWDZ2lJ$QX}$y=m5J-qjARm3!Ua8pDE zh0s{lHVN{RhWrEtB}d9}A(yVLt94w&4vJ6IZx@yo6rTR&%_$N$3A$<>cBuqJO^P!^ z1Cqh?eu;*p3mk*C2-v^(3Vj9=|I-2esn`Ny>tIT6rf+TNVC?8b?`CcFZ~f1D5(4l4 zkWhQX1OXxVPYXV)B0uEyoy`6T6FPr9>EaBbeZcFf4*8b?*n;6WT7<>*$oM2tP`JT` zrNhCalyT0QoMO>qNGg@h896#q-2Lgjem?LW{bKbBVJB$XmZ0GCk6yWAe1B^}$^J$0G*V2;v;Q58ZyZWa>M;T= zQtQF=nsdWzBb0tCyyGb@kY4IB49wbX3|M`0x#)K545e`m7xg3qGkJB{%<-q0bM;dE zkuJNHZrhX1Ytzr>^=C8&*_vKVFsqCVLVu#P=s3e1lo&<8+ZSK6&ohXhlK~s>GSmmi zBuP%B9`Uy&LV7Tl6dW%|2swc@@dT5QQNy@X0ytv;`%Ecb0#F7w2+ytYB#KPE>LrQe zRGHi8GwxzpWRI($@nHz@i!^X|R_>xtzq7u?pQW`(oi`9@&n!_ zJ|68TapP+G<>PA!S)w!YekFc%8}lb&7GdYkh7J*!thg7 zW&tm-iD|c_hu>QD^c7`DQ^f~%ES$Wgr%kco4j3r#Hi)o5WXMI; z0YD=aMY$ab*f8Z&d!dounP8x{SA)Q_IX~sh@>o|=SMTPl^@;;8J_14*>Eszat$qS^*ugd{^&GNjy zJUij!C|!itG@v-j%&|^11Cv9gRpCZb(rPHgw&4$qOUShmAbMs^3%y$*VcQAVvWgN8 z$zMoECXNoku@GkxfA@VMGcIac=jpOY&_DVUQA_FEA6?qPX04?23X3#9C9Ho>*&9?k_xrQYnewyCnYj-y9SJLH zXda7fBRdNz!I43^DXf0iuk{Dd$Y#59AGWq+ZHf6xr_q$|l^T}sZa?tK6-y%KM?4uf zot?-aOh&>r!lQ(t{gzS25Ckw_-v^uFXWyIBAdA^lYdz_=KN{QfJyY^bh{Cl?cmOdM z2aTged5Oq|jA^t;UAOt%E1|v~sAE6PG^|W8k^GnLMeRR2G>+S={pBJtHV&G~I$Z9N zs)wJYxj4yE4Hg<2t~PH@YA?idW|u>mC|Tw;C1J9H!D6`BQft;GYe${m2WO+9x!uZe zRJSo}RO5tL^isQ6F5GD2TvSn5DhP<$#z2mR_Vy+&m5zwJ@93?|H|s)iP*NU7;-N>w zES-UwX7?Rs2Z%umZkN0?d<8b)h9=i!jR1^HUqx+8fwLwT(u3v&Y z#yb}Lwpr(@ztcw^|M?yHvbB>eW#a`LbUK&c9I(Z|F7yoUY9wV2gpxR*iQI^wQl44d zzNYhYuFl(mjHF^5I~0d(L2+rh<~nJ_iF4x>1(}A8F(LQBZ3h*&@<_|%6k>)S`GHPeVWFgAhND(q5F&86>!TABg`GI(W z1dzjAarhLo{jW;~*nv^RpuBHyO}q6BnU?Pvu0g_+XrRV>trg@5bMw`LXR^1;f8|ur z=SN`D%Mst#IrF*LD(|^Xzz^>zb>2ZnB8F3Yq+~PpKAdZE6w9c=49n)lMpry%G(z0; zBdx8F=BX{`PO5f2-QaL^woW5E%!2A{MHgtDnPJW|cBcalr+ArUXnVyoBOQ&R;ux$n zOO}CoCq)0f!ok`o@5CI$d3wlpPt}^ut$H9>crQH0@{0T~y+9LCBV9!61iNKGS#d;) zpzvcp$xtE5VKn?KL52$J4{^b{h+xT7aa*u>z4jW&8tWW;12mcNIaAP1jU$-!b`x_9 z-Z$yVs`TIrSGaL%GZ;79p6PS#p`Nc!o(uLRpy7US4YF1_kqJ%h@YP%J2yc}+0eL=q z5V>uk$hEnIWW^<1!oO=MQ~6{Znazl{Du$6ccbM?WnP@pEBM#?0MH~e0+#Im|%!CKJ zx8o2$=&j3RVq$Xq>?xLxQxlmY3CNtP`Yv)6x3&AqF&wAaE4tG#?797LzPr>jSetZc z8+kP;cdGm>aD*t;cr0@P%S1`I7xktTZA(htY~(D^m?hnyrW0?3fcQqj;EZyc!U2P- zVzY#Op*5CC19ooiXL3}VY6i^W%smV%HI3P8J$HtDAZtmUGOn9ke2~t{K5;lZmHq=f zcxv-01A{ez%w#wPNj%2bKGyMj@Q9rlu;4T8h= zlL{C9ljD=Z$f>-+kYX532G0d4bJS$HAx>eiEuS+{l{XljwI`%HZxwruOs zfb^gdBL1DEQRDR$J`U6-D%W;Clw3Rxnf=E)t+OtT2jlT+3~;yp^`wbwTzsJsN5N?7 z_MVvY=m`cbm9_Vpf%M`=IMvLyy)v|z_dnf6ZO<6uDiBc>$%~YBd1b=!+xOjquRW>Z zxT>Bh4}o%OZ>oCXG89x6j}L^Bv9#mvLMv4Sapy_$aNQ<3M!mgpp)9}>{d4l=15g3$ zn7pKTzGMAS75(8~b)lX=80|Lu!FX7%e)k*lFkYkX0%kGff9l^^U6|svSsJIDz=}ag z=ADVI!l2pPHceH(V23_4F5B7!3iqSdHIb|&$d}r6WeU&FJY#Cy_{1Epxq52A1AIV*jh{*Sj|x*~CP>GLhsEK?d?8;7s)NmC zPWte)^5)Ml^}r2Dk9T`H)I}!nhdGANdR-&vObm1pqxCPrLwAEv05n;I?$XWnktqWH z3%nW+<{!YC4f8uKsBKi<8M@uDsFVTlD#bvF$euxl!r4(|VX<}~7Hzd*l97Lojh=FF zm_p}td|udXiY)v)=wEm1NOK?R=4Z}t{S(0d+in##)^~DtF#cPjVc7v&43!s-1hU7B z(IJL*_lIi7FK8Gs;&3=sblOm47*2!0yp94$vnfgj`M#~NZX(|p+bb#bfx-eRIrkCv zR>jtJW&u5Y;_f?#m%Glx4Ns4QOJAQ4lwVX)gN#91;IqHO=M5PvLbvmw;RwX8VfZ2q z@No34!p4)9yoz>i87_o#^fd=CsJe_ou*Kxqy4P3etgJ4W3tTm1c^$3TsNpYLutr^4 z4bvmX_^Mgm1{$**cGc5u)m;*~If3HEnj5U^BaE(?I{~iV+_{6{s_Sg)Ree~h#R7aQ;X64Tu1oNxP=J zOC8wtew1_%>rl8Q-2W(K9~3+Y`}jc)ZSYq4<2upB>ZyB< z%nljVbw@wV6sWzCd_q-Xx9?TLkAyZ-x?c#or}~CG6E+o4b6+>!@!h+l3*;W@Z;0}Y z?*}#!sgAmdTbv+Se-hNj6s<2|^?vCe+;^gko;3{tNAjxTNe)6@9wQPqj2lE9SopR= zj87PeM)P2taBiGHmO;lng3KhNB^anhoSr<*Gmh_*8>~y-5j-+=3|0s1(J>GiX!kLp zRvu94WlCL!Q5V)m4)51EmJ>3v2U6}kZbVC9*(dTCm*QMXEa+&X@GijA6%V)Tl}P-7 z$=1ib+y&#m@LpEeJ3%lLtA!zZ1dZ?h87eOg{5o8YvbUE1Mub1|G~NAI?+_)Si5m8K zhE;#w|K=T(jIB(BjU5dg%nd%Xk^c15~Busp=8ci_e?d^Qb6&%VmO=PJ^0_^N8WU+-s z6isy6bW{!0iAe%j!oHM9Vq$@R54&?jzMZ*$i?36Rms-Na!o*6!{QfgGDAq6452D{d z4Fx%$>|_ZT`utZEW<VyvK3N^kP_pM_>*3JDr!-UN$J@tbH;C#rX@J7o7-4{Beu9tU=nCdYNyIkWLZXu? zK<%nNw4K}sN&MyIPn8wk5@`JDkMzZ+CxUwrIXfkq%!W}^&*7iQ+((y7=|lE98MXRK3}^ytgF*3nv0 zqs!Clk}(V`NaLN(le>OBv+lbljRhml0$2;9;RJ6;{vaEzr0y zWdvHGb4sTyjqRxMFw`av2=R;U?DhqXFSFeWUs&OAZi;b;!}c7#XKBP(gS$XUdi)uv;)c*i)g^X=Hwloo&olzB z2|=YXp<|FjGIe7j=-0r z?D@*@Ywl|*Rdx7XTLCqZgZBt5PurLSc)~}HM9_W|k`#^`j;gKjZiPAi7eTtcSQ1gc zKg(ZMwalo2&TS)unS!BhpowFZ9tIjgJ5V96*?zQU4AgcoJ<{kDX3@jQGG-hoi$AD@ zP&n!!z$5ssoRj3w*%|u0lMXF9CKTIxdHI>b$kylY#Qtim^7lMLEnh%DAU_c_{@)Sw zKRu4!Kg{)CWk+QxIpR;@2<%v-9tdZZt6GHnpUcAVo{BISYA7h6P~_x;O3W-)@l8a$ z%qG=3ul$1nq2%u%z6rIE5m@TD1orSs+KKP@i5FGvFQ=Ly-L*E`tE8A+6i7n|u>7XAIIeI&w!v zwD0bpkXSM}`zCLvO}oNV^yJTkD5{6cPk1y-T3}_bqqKI(f}Yf_%HZ73>lkWX09F|* zSMPP+b}C{AvG$2X#L+Qr;;t(d#c5q->mg2ErR1MKA6GYGnM*DWPNxC=xg&lQ09#5V zTBkpy-jOl%3g!D|2+1jh6xox23U%ouVI-`Cu0U!&NFhg8OIcP!>i?z5E^>`X&2@#YL|8&rF|I2?) zD(h@z^&j?trW}d@Chsh5Lju(jv45D_R1m;*hK_OVJxbW} z?czD<_SRH_AAXo(6D{-Pt&Xv%fN$Ln!%k>IBx+pSrX6PX?dmktrAk$p%SwV4`M?rK zv}8%{wY~v{gD~`DEzUUEkcMeL_jDqq;%60ulrA@UUCj>!%TBrX1%m>zRSkhsQ_!r8Bp=^R8}I8%*H{k{^dZ;{jVo|>*CLHNdW7)hXT#+U_| z|M29Nh89=Ao{y4{=EOqll?!i z<6nKI))4|d)I$w zxO(^PB#;BqjKIR|3yH~GuS~S4jwF_bHI>3^s6Q25gV1lPpW&#sc2>@HArlh)(bBZj z*fOH}^vgGP9>~D?qkN?o`ZAGXPaBrKSM}A&JOL2+^kLTpo*P{KY>(It9^i%o$S=09 z|1A%-cl^KbTRmzPlhMH8F zF+ZtHduv(p>qtNyyccQ8$?>p~5{;@%RGCzKl$lgUC$#KG8;t6X&A2#`jqJ)*$#nua z$K_o!^7AYX+!cz`dp&%d=MBpp^A)27xT4QR5!~*1-r7p{$CZH5k}tjY39>wD)b`%l z>1lc=#Y|prH+L;n90j=Pifgp^Wn}40r!xf`@fW&_fbk7I%;T6V0f+2oeKpp!iUFNC z-Q(0%;pPNwodBQF3WRLDszXb_x57pz_Ojgor0<(Bi+Cz`#RI_t#F#*dpr$`xPFSF* zibkxlr>TmgiKd-aSaCXf+bqd|)Evj++A2fUu`ZSSIJbvu+*eoR zn%#8|Y;gj~_ZM1V6(V*se`JZ;BRu3|3Tol1VHvQGeqUD*{s_kdHZ|HTpY>E8+Ii^H zwnjsE{519`0SkfExkE;1E5^(WB_7rnz5;=1^Ax9m5D3vdL-y+>E9iyz z(0DP2lF-Qz+k3;5^SZRYLDx`sEB5cop4%(d3tT8M-Dd(7tzPdpdoYNe&i;Bbo3c|@5-KeGj#y1<7xA&GRQ_Y5>P9mdz5(`_0B4j!iCm()zO&a4cpQ#JPQ zuM)#_zkBp3_NrZfW}GBBitX8ce!1|+g?18r_ksG&ydJ~-=jp6FmP|LTuocY{$oIA7 zcKC?@`!(4j{p;V(Q9L{7n2%4~6#6MlEB?RO<^RpTNdN7@zfjh{1kYt{;)?>lOG+L? zqw|(1 z1MqMLRGP+JNJ;&K0kg2aM20f`H9+6jKJ-6P{u-Fgy)Afyb^flX9ivlhyosaQv*(TmzLwPYeks{{vv+BN$RcA?o;XQ%!J${rjXsqTF|w5?oXmTl@S#i`(gt| zCt3PyO&)E>2t|*&T0TM7{fNBb%uiLtJ1aAmw8`j*SmPhMRVQir7?^og`l0CqPA>YP zs^*(=E>4!q4D0o6@{bNe%a$n`rK(fuSkZgW!u`<3@B3lZ@cx)DWPJ-YX3E%Np(i%{N}T1+X?~k;w

{97-iPeXzW)PhWF;22B?ZK+|}!yRwdXSV{}|y@=OxG zwl&(W4~G0+#73o_=ZYKq*y_%j_Qru4Unk!Vvd~n=uXlWH)6vimAzKh@%yuX?yZ5t#p zD(}XcNKv|F>u;M&z8#nE*YqE0;-l`=APNcMBJGqQ_5s8`A~ih(L>uE4tKS1#_Lt1w zA3c@~EjvF)>7IP@+(=p_$7k+lfk$Co;}^W79p&PN@*&hzSwpZ?@LM@yK6fSJUt@cJ z`XeZ3{0jccr+CfCr+>6w=7r`}wgbe!zG{z_y$g$0|6B2T=ol$5}P*5Q{Z6~Vjw7iKFE_> zs9X#pRwyNy+$ZZt~^7)*!UWrtAf!z99*NWQY zoKE{R*Pagy_?q~$TD@F7!Q3BALH@@xX~gZbsItimwodgqiFo3?!tDqO_e4!kSER$H zdlpWf-pquN^fS^=*tLE~QG?%Hg^cD4*JzntzO*xnO?QUqYvrX(pgd8>wWUW|1(+=4 ze={+SB}$R$U54DYg54%u%HEqWe!!;fl0`C!Tfb}|hQCpEGR4!cnGnrE2utt|s8VLp z*hFCcqm+IvW8Je@xlWe0i7dDEi$}p+=r9FnJ6?URY}$A7=7GwcZwsc z2s5qLo6joEh@yJFnV+9d#b9TB#67G70zF(w<{o=mfoB^6T>oM*d7Bl^ZA9_2Y#wrk?zF|kmyH>cFfN+1g)Hr~#fo(zqoK=Wl5QnIStrx5 zyG)6G;gqy;U)qKE4HrB3u}8z+iX8uc4w-)e-bAGyo7wM(-j)>hyId>@Z1Opu zA8wcyT5()O6@TagadS_zxtBq8vMStmjaBhiC3>yzcHc9eDEljR6BHE-#5XdR*_mxk zT!#34yhdH9y^ zj$1f`a_Ozo|Lm-GE2uCP&;i>?81`o8Mi{5S!cb$}12okCVhrodf~jiKXqy|B4rssS zhY`BB5SqnR<1$#vO3q4AoFC6^bHK-y=sgneGvs!Rj`ryCa`QmyJBgrhkJ-u8o^1J);#DVO0ALafb2@8{M4VSPu^Ue4+mf8cnRxiQ*@{_Jf3pQ{;h~8TJJ8 zGyk=v`m1P`19EkP@!H54><=QDK8qx&QR_z7^j;fN*7ee^+zw0k>FQ7gd)1Rjf~oWd zzI?m)>>XW$#5Cr=GmiUhFcw%3$zs5|T`{{rB&rtuqxoizAj18Us zEvmRnsPFvokEr4^dqDMnStH^2U(m+M+`!8CAI-G?#5Ix1>PoZnsPBp~EJV<>EN5Y1 zQxK&g)RmNVl(Id+E_z$T4UyI zbFyFdsVmM?D$Ag5P1tY@GEfyb#lX0n+lj9a2^@W6CB0p4NHZ@asmSeWggB*9DkZCWZ<*v0b_ZV2<)Nn!60L3k$liR78QBk$U zt|j8gcT9nM;NwZLokupRT%h@tYl6lp+@@v9eU#<>0eO6HiZ)w?6TE9=Qb~55slD0% zZ0vj%mU4EGl}L?$5qM$EGDjAW_+agtdagHyME&w%6l&gSvNwkp$?Eodb##iQ>dXr{RCF1ti&5# zX#dv9rCU*KIwzMzu}X9qD>LzS*9}pUzbrG$AxKRCx^>>EkQO~HniBgVs?h( zW!i8e6wk`wNMrbZ7IO$(Z}Q|Q-n#Z1JGxzJvHAaD>>ZdZ?Y4H|?%1}S zbZjRb+qUhFZQHhO+qP}nPWr4}?>^_N{p@zN2=p za=i0)Gy*#!BrX;rYjOT$<976y95Gg1X|TT5Ce?2#=vmm1urW zR3l;P@7H{!SP9n;&=L5T9yn*rs!6><{zXJpdEIZ@6vpm^BOnkto&_3n26Bc>jVp?S zZ6EcBj>GM*>mb7VfctB3mZc6V|_8U!Qco6|VV)ASOTq6sM^}s9BB<_Ydm`)dwOt zY$0~g51eSV7$eqYTHys0NiNLPmaP+j+c!caO26_kv**wxfXitCSrb+t^tjwpLvJ>n zyS6!KB$l#GXKV9VdIH&7FIkW$jfB#9Yma{e8D=e8Bm(>gYx&Ht?|vi>INJ4STxy2N z!VgCF%QUx11kFE|fvgJkxOLk$DnTt{6|nOplGQ`lF>R(3H`>P3tIb|ug2L1{M~0Og z(YGpCn=hbU)6R@8sHtzhA1}I%#)Bf7uZrNrazF$7$`O@9G=*e)@N-*qg!-vx12- zjM;N|fl{Ejl|FR)=vR!b9@-Dyn-zbz_qY#PdnBth86%5uNpcYLz!cie^ooDx?sfYq zf0pn0`LTSO5QNFY_F%V$A^~SC%dyr*!@~MtyduM65-lWvQLd7hXBUbRtRFLYjN0v; zPGZP7mkc9FPatW(^P(mBY9`-)l?mka%5g8JzF-yA!AVU#1-799&8I@TO&pteM5-6> zJZGO5nX+$Dfx#ZGc^eWtST_YKZlKioS0`12;3YL?2%el~pDAKVRMPqb^rx7dNz*vd z5;W@>m-pYvI1US?Sp|e2z~@mk!J6703W!lvvxVe;`^6>3^T3Mo z8cPsKIf9rRvq`6PA90JglD;64r@BN*GA4Wk9+3@h7;aVGBFiWkI89HP!Pc&UXG{&MOsSU9EyYlOaE= z^An&3E*H}HqQz#NZ=T6xCeE|_+}fSoF^eT~0={AYvlZh9H?lYYX1rj4ZvMYKHU8a- z#T|s5jcpu7>}{?8{cNhTrhp9~h!8`HzzmS79IT?rR6>a7viGeKG&5jeH>3)IfSckL z^23M`OEAU0s($_)6LhVuFbF*;SIT~nFU!2fgv<+yO}XCKYMJ4Ac}}DH`kKM_0ebxb z3QOF&;OD)GI#3zxk*dg0lLzb4-%5833JZTLmq{IdR3JmGuU_yXfl+}4cBgh(8Fc4{ zp<6l{THu7L8}23uBdg?D#K#0Ly^%$Q5nYgL>$bwqJP$fBU2?SC=pP-K)B^jGYek7s z`a4H_vski2k(0vI4X=#Dr?bh@MEeh?;aakXCO`G|kDb%s-FXDes^f@Nrfc<6O9A`I z>N;%AP)I$AEKt}YYe<$pOo!KMhrG>NlqU;ZA`F_WxNO?-c4xvT-J`a7T9onQvuhtS z&r}!(u!}+_Q)^DBuxuTMoS23i)ZB{nM>{-rRRS6!4_Pxv>1v3>8G(B=oO0=O$>7I7YoLth@%d^A@H50VK2C^im#9*8AHKewIqo&f&w7mmg?)mh5}r{`R%g96cW; ztmt2?i|UMK-YyvLL_647^(!(&_qbFG#!ZTkNN(nlV$D2dJ)3KN#>eH4E!ogpICR?V z58>R$Fgbud6VHR(t5@tfh)NOAk*u>vl> zw6Umxxm>$;0lHQn1#Yq(V(NF{It0eS%_fA80&plqlt7EZ)c*FCkP5~)wpn*Y-&i66W-A-va$XbdT_7o(s&UNZlBoR~4yDe0F2+H*V1!Z5>Fe~Fna{fs!6)QViF z@~=U9Vfb(b&)06eWufBCCbrWZ6lFYD`IKo>7PWLwM=?q6c7=!2{Y&EM?E)X_0?&QX zwlVeB(zw3C8w_{(qMIOB5B|O+3g#`=a|sqs8HKKgGNBWL4p^?tQJN|M$Sb zo!X5DBq1cg+wXQegX?AcrK6`q%KPuh$;J=3JuXo1OodwL1gPu&gQG|GA>)!a^L8NF zT`AD)K}AnDjo@m&zDR$Fd{n*AH-s1cW$=NJ1}!_8;4(dIBrVdhB*jfpjXpOuMk~x{ zcuY+6)?G|chg8*CV02?{ssj$l^Vq)0)6{DrlQiKN;xUp2FsZHPG@88dsUr13{ka4t zQ}Yx#CU=#d+z=@qOn75s9;ERB5$-ZB%m{HiX{p#kMwQ*9PbJeS#%TRu5!eiD*u+qG zQAHJQ<_dBmw1zA>33hngm8-r7%q{Ms3`~<26#uI;V!CY|Vsmycr1Qq4(REpIJNUwU z5X*_uIHQBKL6`=zN6dsfF$Kiy6~j#CZg2DR~ThRvLEIWI+YYD;H*;=hCiO*QGO-sHi0m*^NM7BzFAkLQ1?UIJ6p+#zof5;6!%ypd85=axRnbyJ=?U}d z_%;j}5|9aqjt3W8^x2!d30k#zlrI zT&0IDTm#O%6F@3lkwc6-i}tNMi4U|i^ulc z*XZJB_gYf%NU^^1Ilru{oHKr#6d`@9@DfQbha3Bi>zG=N2m+)kmeCjl>DX<{kIA#3vVq z#Z$36LQAM)u)h+)^T0~ zn60YmHV-bTw4~`Lp-oDY2s+%4{lu;>y}1s-Hy3L+5|@M#4?Fgd1J133JRX!+$Zg?K zq~RAj0BL*GB44mAa3|NX1AD748oRU=DCXiE-sRg)mlV0>hZ^0aivimgEkG~icTG6r z{gaW8vm@_HtQk@F$Wl zvUO`M$A$e^f=V{~Zly1Edb4#wNx5H#aq5)&A4$aV$k<{IC~bVQie-V!Ba$XD&v(-zV=IDC9_JI(@V?$P3ndyVEPvg>0pgndVv*nYT`P3;>GLa za_#f|>xj9CG5m%m1z1sj|uHCA7tA^n@x zYTL1qt=(|3ReSWBVK7@0JX62Yi1l@2`A^V>ahC$QWV;cjyO(T>^q=QQh7uE2Of-+X z%5g+CoU5X3YR!&lYu0j50msg+kzsn&>V7AXGTt1=(`4HHU&#|eumYnY0_Z7{qVHwZ zOHU%o4}oE)ht=xVr!o^{;YqjKfhFO=QF!)jPO>#EuhWEKlOO^vT46z#daPR^HtaNA zv>IHoy$D4L7{yGDfhIAF?Z)s)(q)3~ox0RD@bfmGs!w}$+o*?(0UUx$g|8*Z`zPRA z;q&^!wy=s{F-o|9(6{1zplb#oJ^ETUkP&tva+r))EY`qwScj-ffDAi``p?2VnX}df zPO^;Z6X$qJN3P>|cJC+lCM^XFJLoiM5YI(Gp3Y9ro}ElBQgMh`U4t(#Sr{+Jo-1_!tdY!$SV5x zJ_nGeAjxBR!x2DFga_*unxuN&{z^8cwD@IVT#8Q5%DF{ddyWOvKppjk`ZtITlSA=E z``IPk+-foA<^c`)K5*X6J{Lfwluq+3)TRS|kq)VaP26Qe~l zADV7?q9U|rdESG=)+znV6V!lRxzXj&%hEt*p7P{tyT$P{i(#F@91K$*L4`renyPfL z7`;=jx6%P(XY3Q5IX@ozM9uFbvXYh7PcuEG$< zGK<4TW$n{)ahiipe}BzehFFO&jD%Z-KB8m{k@R;>SghcbSf$!X)O<-D4$1`r4R6+5 zJ=B`kU%fe2ONYfPt^>P0ARVsJwnOw1!Tv0rM;Ho&P9FM9j(?|c1Z^u`q4VZT=2ry1 z3HJwgu4Ud%6lpDoJVm(j!47D|;Izp@@c^ov*0u?HWUFa$%OGtk5)Z>68_6hjYweoQ zHjI5X@5Lz6Rx&M z9KbE%n%{4A-GYv?QO<568IE8kUagusX7_)53Bio^@fM=t)Wg8vLovSX7k7mv0J#d*fk zAHCB1eYo<;K|mP)MygFPU?+3-WY-+96KB|LqvLDN%}xBu?_bU&WH4>@ra9wm*v>Pg zz;SxTsUNCQWyU9<_Xgrx?X7zOibY2hD$|iOs*_nC7OJ@W$6@0V=gRE^G!hIzBl#}^ zn1H^+KeRPU|DrJhXiYSYjX}xb5T#lub)bbr`$0sI0-iupR*FbE>1Wq!U>zM(*NYQA z`}{d5_?|3xqL?!}g(;|uWLX>z({J4mQyd9jcMlhAKP*?pi2OW(f>6-v4rwREHwPqu zhS;x1>aa$DgZre-C7Om1rqIh_>To5|VbXZa!vmV-(Vc@Yh!CN;F%F>5XlbvweOq~xXENO-INMog!C+SXecXwe+;gT4G!#3_ zI+O$M2*W@cr=-$MhYhat%!`Zh+^nCy=h9C7&(##K zEocK4d&^u8YZmn&biD z@`7vN$RBR;1G4OR4K@>Zm+aP4LPUoiN{js*qo;&R=NR%aO&WJ&RCg;Fs<&GRsFW$X zqk@XgH8ii=T=|s#5)T9KK0K$2Hyu}XX59}+CtXc38!Na!@2sM9q8{8FGY&zg`FLAQ?;UjrOJ?Y((DHS@7BJU0 z7QR?7L@V@&W=n{KG6Wr&5t)Qoee;+Gh&av`q`wA+Od&3oGoBs-+^bo_e$^PDt^5h7 z=fbM@0~49C=3LC8!+2eFDJt_hm%(Bp87Se(_pk1q8@j}gtBv1=#+w%eapYUOvEsWhHfX6)q=r;c) zy7=FGY~m$lH~0YY&Kc}~F580w;}zEDXG1{p`oR|^k%iA6P~w3RlMqs()Hxyyu-D*_ zcEX@>G{S)Kec_dzoDbs3epQ_haJzUjab0BKtFHWTz8x3&DNDmWkPZtxBfTh9$%K-@ zm}nkB*i+XwqvshJ4Kg608Jy1q^-gqs_Z>@=#=iZ&b-(ck1MFTyueZ{JmwZI8y&wZ}HZqoE5-X%3vcF1xj4QIg!b^*O{RGPhERA~Hu`-i&` z`IGM#A>b+`1OUqa11CQGQ!#7;pNkXxRdu{H&nYsiU*$%R^S0Opo`+ zEo3k5=5p+y6KWDkITp%gVeY;NR>!I$AaR~-;JA(ly#U<6XDrA9` zFv3HmJFqwLCe~H3 zj-57kikQDysDcr(B}}ysRVgmY01-H&6+%cSx)Fmm4xch>h<3pvBAa^Eg)_Hwv?B0_ zHs$U)QQpryfz)lQPT_qXRupdNgiv8|GkL2Rs8wC0Wgn=EL7Hla3ut}N6(Y_2$AOpU ze-I#5o=hL{0A=<8xODz&y#1dt`;YSSQrxkf2M_>k{7@z0!r&0se5deX9Jw)c17lAY z2aPh|nKAI`jx;zWCD%0rX1;~V(uJiT=LUaE@LbLIq2Rl_PxEx`ykyap?Dzou>UL?b z&BO}I^OHri1N^UGlrD_`4s}YKN`E5szlwN}3q*eE!l*UiA;=>C_{e+ShLi?Sa!r2+Ea|O;4xMlDjO|cd!6w z33@0Tj%objBkJ5L8 z(bk$+hIIZ5aYM8N&zO&jBZz1&c&{q#h}E9lOhcQM=l-1<^v?pOO4#A)l1bQ{GCckB zPDZ(9X6I&mtgx-?BEj>NPmO{n=>CLrp*U1kjFBcs3uShq!KvcGT|QTf7A*-*8VAhQ z>}@F0d}#t4utE%?OPVC7AQUXJy&5~QA23J4gn#@GS4=K|6>dsX0RC&jg%rtU?INM5 z{Tuy&(u(n509*cp7}@~zhe0c!+ko>*yZ8l+$E`N!(Jw#06ba;10aEqE9}EQ5@2u+B zqmb7?y6-_uhzKojs0&x<_c3POcZeGK<~>p!FS&}CGYZve>Oe>Vn+t!|&Zo&E#NWZQ$OV}>q9_6OYDb1gu(KET>1Sp-XN1;Lfor?f5kJC5_Y z#{XAH^GX+KBN3~9H4q-9A}jKzt_HX|-Uo78FbDRYpaH4-b?jOmEYMF)7xB4Kghx0SE&9G*BXm z1qucvA`~lMi+MSlbE7mXFgAcgcQP5;jW2p-a=G=wvd$%`^%bbQIA3{w^ODAfhNRD( z?WykUNXavgDOtjnk@_OhOoGF-=SfHB&XMN{we8o-P|8oO7@wfo=sE=6pgX9_As(#m z!u{0OZq*?#gYMrTsPLgn0hD-14+B`y73_I?h2f&i+>}b(X#EH5MSGC2y34nP;UxlU zfi)1%3xtXL6_nX3cTy12{p$y=DwW;Edlv$)*o0EM8UFWG2;EU9fr~Dbx7wbvLob4A zQ752B-~g=4n1IZFTG&q}>j>Kz49DQBNdMz)CC+VDtLVXb zm0|M@1CvV4N-1jV7*1!(HgWz@9Neb(koPJE(Y|-F8~umUwPgB)yJlW;Yx0AP?Lzf$7(XLk&yz!TcrrabTeR+yb0#m~awMl!LhS}6@oXalf;Jzj( zlA{5+XMpLcBvW)+ao2q$i$$?Cd6LNyA{4azaMqHNDqo3z(AyIm@A=B^_qX?T%FEha z;hE6_2`T4?ZDviu#X-B+m#~*bD^G^wC8A~T^lIQ@mQ*p0;^kbLaNGMNVFX<2nQO3u zAU?7ToN`PIL=p7qgLc2#wQyh@(;q@S;c zalgl2QRtOWnpYIJ4m#@OA`67MQg06ql_yV=Dp8$8>QK#eBzJ$RJipN%g&ZX~pB1Q6 zohzhe;6LvPyx`Vo7=vr-4(kKMh`59ByC}58*V%HPr5bkX)sF#U9tIt8A~b;N^ur(N zZ@kK^I8Ce@gdZw$99F8)lN}v*!ElMi&R=1@CBMe3i1KnxXkl>8N!IL4&v*tV`69oe z?}$0QLw@x+2C9lg-`Y`LoxW1LLsAWt2rgaf*ivGWH?>g78fX$3*Gm9zv^z>2WQIR* z>I{N%Hs&lg(P-f))iTnhJIB+2#C)IP`s?<7nP$tF{?i z4-@RKO1TTay&{sfS-zvxQM_x9{=FN+`5maL)R}i6{i&|TUb;_%>(jRZ#fl=5tc!5Z zIyLmBii;+N>a%d?qBVO5_noIF9v4497oh3b8L{H{iJXFw4oo!|iz282Llg=QM`1?! zygNS8xRHTE-K|wtpTDU(oV%2>-#~8vmX9W^foB-z8iU7+sUEAbY446?BBHewx49BZ zVlz$!5+mEh#8{y))XgDkbd1SwSni1&ni3;H+%btLe;?;hm+b_qo0Rek_}+5B#AMa$ z5(zlQz*g zEL6q0knNm7_vV3G{Uq6>fbe+D!9%GHJSg;;sb*|M~(kZVfalhi?I3h)&ryvY4Dd+s%sZT6G zHR|Gf{A%?3RT(s^A}1^^g+PGS0=V?`Amm9#c=@{<0Fzz&slN-m^laG&&jh_zplMYCq*?T0|vF9AjxEmgT z(w}7v%P!m=P?Cc**>4@*IOq>2ifiv9D_aRBOv6r0lNM)%$4!<^S_bC@G%&q3!?cl- z_6iv7~Gb0{I*R-6c3wvF4gCu>4Q#rchL-z?NvfujWTZQsz{(!#0eM z!jG2n`o`cE;(&P) z9sjJbb`F9e*axCQt;aPN*|cv3WuVk2d~3Ott>VVgPy?2Sf zd6a8*P)jH+2o^?~OK|oVmG=5W*V*m={q@$uSVGEHPG!rbAEc~yWO(dTn^Cyorz@!5 zxTO(f$;#ejno!U+vLtUV3X!k;j;TeoP8Yz|oWApAeCz9(d5?ovL`sB}Z;y5W7Wrbr z>?K;45|51P29G*i-On1c2iX?odxJ*<1N9|Fl3EA94+Sq=y6SV-tL5mh+q_bji()i0 z#2Jwf@PM$$oVvx(-0k9JrvcZhfUi!PKJi-sVTU{q1wZGxaSx|+;}72i9Sx^C*`Zzg zB8XDDx2>3Le3ca+4d@<$(53qL(je~Sr&Yn)yEx3BgV3czZxV4W&@vm2=dM{V8V6U~ zg-0A681(dSITqJ(jj12v9bR@0FZuxKm`tE9E>UYNQ6H5(X}oB?F~xy{e~rvJ7m@yi zj<-`P-i`SC54JOrh@|QW0Ewpnpo9Nqo+)Vi|IBy(oyFUg^5(I5h&a+?>p7|-L_kQw z00Kb>8*Nx`?c2CprD=#m?}Vdw1!4iQRBfzzR=ph87#x_`C@$6tB@ORB8-Rzy1Nlf$ zM04gf8<73@3H)yO*T0!bL!GMY!{Q3I@%bUL@#bUN^cZ(4Qm5#1NYu#_2H*4!5;x``ftt7IVBs|~n*3HBH)r5P-P3Og!CT(<{6+%jvYV z{4*)jV6O>dk)7f~n^I8=+#&?RT7@EtTFSHe?=`oUX3AyLB1=1I zo_(a=@n~&i!^_E=CMa*+9t&V-yQPf@um+&CYsjZ(#e#ZHVg6l#C#lo0Ug=*R7NyIp zU)7qF(Y7g-+Rdhl6ks?dml@sK&ZlWr(QD&rifBA!3t8320S!41gbk^l6mqo2U}}EM zrr)YDMJC4HmYV2qMo8aBIw1%v9rNjQA52&}XzaGNTH_mVH#Zts&>TR+wFhd~dUKE5 z5dt|EI-M6R2CWtW^I&axNyk%F5|Vup^Uoaig0!pSe$-oK`1*oVE4yy2jN3MAys&1k zq{gP!S90`NL-wCeP&z=8%kbYh&Dph@8=v#y6I89v+vzx^CSsMGUMtSUAB!8=r7!GF zY(cChZNRtC1=Aor0UQl#dpJC*KdU|B#IA-lTR*X{io(?&gO976H5`&Va^5Ax^(OY? ziP4ZU9`iRPHnv^$M#rPs;_&?x!cWS*TRG(PxFlbbc+$}(9_5(f6lGnI)8^3%`58s? zNz4fIdz(?f&FkxkX`0yxYJXkJ%mU)l&7aOr32HlK0yMLjS#6D7_p~CbY%l+ScOje+ z97#b}p2>$>8lskE3+&nvRDs4mXp>u-~BQwFYB~)g^)LPyJBCl0KdL8 zyu9&VyqeS?*<;=a~2!)1^r@D-)0bkSUU1z-3ASd5EtDczyC4Ld`vK9DE*X!3C8Y8f}K;Qn_xI0bb)+BW`VshlWKbW;b^SCE2GY?}`0(|w&RWb0-Hns~5#pkWXIg5g^Biv*rj-J&DDbNVj=@{`t zt+su%$}3hME1DReYioTrSgl|i*dE4OP)syH(C#`Pnyv92D{Kz~y)Pj!n?XphD$M1e zG?ure9-Gb5Ef;XhfeM-j3<`bO-V2!3rLp|tEjTcoEEo5cK6V5LtPiuDuPB^BOz>~a zR`digxVq;GFt~<({p_~}KjKKv{sqyuYl@n;2)_@t5B8e33cn9|=39h}j|{(%w-Msc zgBvisBYbkX!kC;zTOB`#Lll(O_ej}VAg`J|2r*Obp%>w&2rU-HFV+r6M6|Pn2Ja=O zJHulC--98)Br4z2^cB=9u<$~+qp_729(c@aHK6+XX_xv5uO%Mi@&gAoBKj}%Z4*2C zu#RAw0u#${oFM$1o)nktVR?$ZYGgIzBa-YWO)01qwEWrhh+l1iLC^`uq#vmSRryz% zv(X8%3o=Mg3D@vonhlx63)+8lwPsdlX|*+mCxH_kDXQ7W+h`b!Pauuk4rZLTvoP3$ zYS+L>=>&ndqQ`beTF2E{l3Zq7)Y^vCsve}v)zIB$u1EGisH_dXlX2gW&y@Z7#ci8V z*Cp-x?L6ji9tJhDVT`OwDrGhD6d!igO326{rFLEqRY_*}kvbr^Bo>#Hl z(Ds7DX>>dNqqDjlgzX@iK(MJd5aQY%gIH+_Ve<#p5(ldMj>qz}m^9 z74|0bnVx@jBS}qrcpW;}gu8zmQSXJKR?@gKr*}KdMSPV@Uu2bA|IE0w7mM*(4#-kp zqF*C5x|S)h$i*^L8@uv{hU^}7aX7}4TIt<2Ujc@NkwG*ySD2A0N1R>Z`))-n5^#n@~W3p-41$0m*m>@FYFb2Ob<@Kr;G8Om?R%k`EM%& z8GVBwtNos6eMToR%;OJE*@7+G_A@hYGn z8Gg-kTykiHO3v!ut0@42a z54MTvmWtm#0O=?Pz)FPwL_GdKmk32iW4nJd6=fJ~`uPwtK@APTA(Yb_Q40Hn+gI~{ z5~>T>>+{+%ke|eIXu60NdeVTxj}{P369@xo8E34eZDpnpm)XAVk>k@*fKhL%AMk?|$emvo|RN>)90;EWjr|q%ywe=Fj z#a9TAH6Ewacf%5KH*K_n2!Kn+37+=Xb(*S!R~x5H3;vDd4MqcIX8Q?N?ehYkl+Hj4*9w>GrPNus`{i;}F4y~~xHr<+ z&Q)pw7(`NG0kFH@yizhj5iz}A$JlQsB*zPYd5(@{cX@tXWp4peSHFSi!&Z>y88L>9 zK7yoLBxU{%ZrQq(H3X> zI*RX?z+IEEqv^}u?|eM-)H=-z92@gdU&=bm)Lljw#r)>(@!KFm)4A3vf*8XIE4i+J zYM>IyKRm}l6<`TZm+b?P1^-rIB+An09z&PHp$1nUN}KgX$tP(mC)gD4SXFt=zZy$V z8E+s(-R&;MHz;3y1#8%23Cjw0Ntod9MRmgnn$9<1aG0u4N7Y>9chzBM;h+-2Y^@Nh zQo7gmRzYyikw&|MT%GD+w0`Lmxds_SQXxL-tKobhF(PsgQVNEM&cSr4rtPS}X#U=( zHRLu_2@eX?Uk@{sY;nuqm01d7`Pnr+yV7eROyht~KCb13l44^SqyJnzXI9H9qq~86 zQT0iH5|t}%>$kWyfl6Xk7{GqssD_{Dt3o~n_}|O%NTRfuq~*#3oBFwIh!A_ z+^x-xCyq4snCm!v${J!4?;C3Wv)LoKn29-OwhMC0ar}`SyT9@41$XRD7~UOMDm@Hq zn$rzRSDhn37V{nMFRBF9(U1JwJXk^l;#dRa8?5+P5H1nt^c1XP>bFqOIcSj3^ukOc z*YMdDPP<-)m$p)224C<;ctZIQ@de%0&vE$Cl>l(}5!Y$fOelcw980 zE1C!+$lRorrqjeM))HdDxU|3MXzv^vzka7c&Pyja$J@)wcc*c+Q4GFep_8Gt4;$w% zFXry<-%&(VcY|F#Fz&lXeg9+Q;O6cX7XVncX#M%|1N)!1&A&nHe{UO0nvkAKOG`Z` z#%Z^%mk=QQa?P2@>i#q=O>`>>EhZoA!e;`4p7>2dw;X|dA< zPd{8tfnHt-d@Z+!ek+OO^1e%p>J93Wuv*p6V@DVEq4dhKSPBA#$D0xa4U*5Q*jH_DYj3FM3>+y9HhF( zg5;yH=k&@H#-`+o{4KCggSs8u6YnY-FJIJRugoKx6J07aRdxN!s1Ba zNdI7j$(J)~U=~msCjBW_D2!B1GAIfh1VKU;mm=CzO&UldR%%vHtE5yElTt2@V~-zn zL}F4pqA(^4Q!iI2pCn@tRgPAPCX_FxJdy}1pH!w4pHxgTOnNIy;UkZGohzoPUa#i)@ z-bgEl-_Q0{K@96R8_vfp)-#pTc9*ONv$}gO*0{EVWM&VFmRn=x5i^Ls=~pPb9AuF#`oQQ~Nz zy;aHaN>_{5)OT!0u#G4DqpQ)T7}oI57g!e|uVwV4A55$Li-g-RdY?J0wvTFg%**^A zR;`_bMnG0!5whk>^9yuZ%Xrb?nop>GY6ybzXmFzYey;RL$6tiz6|A#`hD@OOQ;Yb= zXk*&97-5~oddz4iU3@x(zl+&~`lEV-i{K|kT83o`mYz~^PsTiI82Yp#^G8k`8zi+| zTB@)&pD+SHi^V*cw}CF-Z5g1nV`kUDsRg!?%ftGgcU?%VwBgT`ckIQwz&Oz^bNPCn z{}Rk<+Xi;>xk5{Sd|MTN1&b-Yq{IPPG~<-6v6++d1HvAWYXfwx*(M9il%ltC%;)-U zb{nte&&yWau0YDXt1iAFXZEh5ub)hNJfplc8?uOj*t|UuS8Gl$Uwg97a2PyZI}jVb z!cSOshRmlCk5+m<&k6d78Qh%6@}yDbXt6pFU&=2xSx7G9?B96KUB zRc;?Nzp78eo)t}W!H7+4skYS*nL(-&a6#dQExF=<&4-k=jtc6I9>88*f~qi`5D?W8 zYeN|5yAyHrsbSXMIdgi3I+!M4@5~1qy%(9W%f7sJ%o}v$O>ZJst)H!-?aGjB`+K3S z#uBLpBWs0Akdh2G(<}C)Y9{~Au6)w~Vj$*8Z?83foDE7i$!p`cv5h<7jmK;5eFS+B zY#_Cn+-j)CksD`MLy-vYj4X5G53s(*%4V{;Q#+s`K*P-OHt--&LhmaP!$zC;Gp2jU z`bq1U^9Wqt`EjTRHY;A1%4y=SWSn849w~1@j}rmj56gM=<P_X#Jn&1l=p}qRAJ0q+2q}LyM8N>RUK2m4YTEA0EqTZ#j zdy75rgpo14TpOt(X~(&^;e?XZ=nER>jS0#fM=B3fuT_Ob-W1qQ9W5}e(AGTko#>NI z2Ct}=2Zi%)$DcN9=5bUmw6$)76Z%R7@~mqe_O9vI#kS1jx0HgG=(f7>NNV7%${Ps` zK{Oae2`n37{+tdS@Cj;J+fl(;^BBI4NK``7u0ESH;EdFfj`uBh+&%lomu-cYZ=#no zTmvcn%sB2J6khXJeOhjQMRUkZI|qvYDF{ss)ksR*Uf`GqVm#yrl~@%+0K2(DovEzQ z(toKo;<3ArR^AA<$k!TA6iV8=>{h#sYS>uMYOwidmouCDM50nl`>?LWxPRh+2SKf= zWjY1289ziCZ4SxS&ZCv5m~C13SU4Z{osnl74|e6QE8D2e{PBu!Jx;vxCaglZ3B4p; z%?4O=Hc2eB;{(JMADmryFYwwye3hKU3XMdi%&~gc?O66E<^mi^#Dm365~hZh%#GRQ zpq;pjbVchX`iS3s;R_koT$hF!f49pvtZB!QEAhV7M;gdoE1P6dM!MtVF?gADJ0Rhz zRtg?;zfZb-4Z|zIXejCFIY z)QaR(5n$Q_i#SOI=eH+T8(>0vVtq&~>0Z?QFx?p*8WU4)!x-bdWu+#?7{(FLCYx>Y z_w15Sah8)VNZcD;=jI4)!^bVetVM1~;K$jRjcIe&RI-H_d=k;R1~ZHp@EnUrXZU`{ z5{OHc0gn}oIG%Qr{*fvc1(|I%!OdIdbYDaPe>HlX^rC)PRnn#kS};GA)-#S~uU z=Ni$&y~?d>3(*WF&~RwWWL-1#-n;A!>|NH$s7u8vq_F{{*2ef}nrp0%^04TvC-7fY zcZqR{#Z(k@{APcgk(oUukLw}QSWW7yZJc|xvR^vXN>DgrAQI&rCaQV&3_2Q*U3ls8z|?0ew-K+@n8_c-Ii%2KgPgem*kOt}-I^>C?iNX8Jt0aS? zK_nMcxUW<_H{9VJ1G)oU$z}Z~#@&UDDMhT$s5liL>B2b-{0yVwQ|XYN0+vH~!-7Gx z>ZcWwY%{0@u6-RY)t%ZOKdh{rgMGDEyGUMsTj*RT7yXcIzl^i=#qPkI4{Fnx2-$Sw z=j6FcYAwzZ3TAE&vVQty$?S~9l{MIwy3A;nQ?FvUQhy<)b)&d!e(4O5ygN4l_O&~# zjvSs{MVZ;vf=h;+dL2XA`Vq0qxmBi1^&Ed^9V5Cp*P)U{%S#qY@2Kz{y_0y?i4tbB zOKtZD-i-rAESBe=9x8_T@y*qBF=Bhfl;-oRI{xdDL--2|BT6OehB>j%rb;EkhB*zY z%+H`{&=!}H?{}zQtGRVGXCppmBO*~(hC8o`vBiy)`Z-8*1nBpk5*c8iX7EFJul zHY)^|DbWL%a9Ckk1;hd%!dQ{W<3j~TOEQc3VSu4CC~8YS5}BA+rK+t7>yie=L7a-g z$QS+(Wp5c2SDSW?CJ+eHxVyW%6WrY;NaOCV3DQ__cXxLuxDzb6yGwBA^fNQxoNu0a z-&1v}cJ11=t9Spp*5&tF(W-|-ZU_pd8!;gIRKYzPgkO{fzord8|5+F2 zm|BUTR^nqn43brfVdLXy$$*>e`{_`q$YT&#zJ;6Z^c|Y3JCWQ@LU`Qn+lqrc)5!{V z?hQsUilHQIHkrwLB7IeI#}S;t1fs$mBiq|gUG1ZOgo#=GIFmcH8T>y@Ldovi}sp&D-3-WI&gxEWu~cm-c`orzY- zE~kC-T#}rX`%8ghAbY!Sk&fj(W1f@S4BU*6Dpw!YF=}b|Td1=)^_e^&k}DWNGa8*U zo(ri-Hig%9j^W-Dzx`|oQ1FlB={!Bj5%F=*gIA)q$CpPu3d25f1`6;DkT>^%281cb zqoGS9QO#q6uddRBA{Vj7>vn6?gIP2*qP-_(<9>|>uvlqR5mzRnLWW&SS;tumBs-U* zs6aiV#5YK^zJ^+wSVfBW=FYbKru|hrbZnfjYP}q-f*Qi2pn)RT`gpLSs3kFGr4&W+ zi{M8eGz~I{*i&W`zvRU69+OOV|{`ucG!>l8g9P5FCfc-fEJoH>?x(mhsLPcBuv zp%DD^s}CVpIHz(i?Q4Jb>0i7#xjYe9gimaLV*#DT7PlZyqtF*KF;6{DeN-H6LM!qxM=%d6mw|3QOI^89@cg_>0E8{EoTW}0!VCOVzRyZX$Q#ajTPPr3+reuSCXhJAyiK&yS?1yhyG7 zficeub$GJ}e&LOjNUc9*3NKesl zMC-=_e8c@0+gx#a;D^(YyKSnY|R&@s0_=_a%BLr+p-(cD>v1XA z#Azvq%zrqGqGtP77S&+UE?}H*+GjQa=qLmCPmsT*3=v{} zk_>;ISr?GnZDKUOcx#7xMhbdWg5%Q)TH9o?6pXuDCm}sGizXYAoPnlA2TopbJDnyL zJ}8k4Y#Hf>UnGLg3}c5m2z7Uiabkg_vFWyAf=Q@2jHs<+WU-0`-vz~je1|`R4}0f) z!GL&8MRyB=X&)jxJ(&6EUXWtQ#Ao3`(^`9jW?u(2E&QbPKmXUP>FLKVm`%> zP)dCa_z}N3UblrV6csp**rt{+PAV>fq=v~oyc>ar(N#-Hd&y&t(pH_|a`h)KOdSzT zpuZMrLyL{81YaYGZ-CS$9IP&=~H=nWd4dlDTgmo!z_Z&2s$^5 zA7FO}m* z`bYgkz{vNC^{p@H%(0$Ngab8&KF-C;|Ijli|xm@g)hIIUYPwi8d?D;ye-GnQtS@?##Yk;lmY~B)8nFzx= z*#`Xj-T%mj<7bNrS2^m)MDrTMZeQ*Gqn+S5);VSkpbXWt=38n=R85SHaO3zq#PmFE zNTs-sxQuB7ll!vHCyp>yEt@5sfTkoF<1QukLcRcJ8<}wgbHJi0zD83~6(%qraZ#Mc z+A6U5qi#fvt4dRZ*rF}s;v%_i*P9=^t4lSGifm)WDwgPb4RA%L1PLooxSr+bJ^ z<^3$5HY%D7qsg@JMOA>wp*8LJHP(Ns3*j{p0=P0VVM%}QH~4Ul zu>w0|U_Fb|frmno46KpgN@{0|YB4yR#3H?vcUXsrMZKs-Zg9mqPgHLdl2~leZ|&+W zGe~Er#3S2naf@XXank!YzoeWe#CG{5e`Ajzj)GU*3a$O@%gc0h#$aUc-}BKa?I98_ z1G-pu^;fsDFJ1=C7AAUY=UGtj8RoF|@R`jKsdFIARVm~yz7!+tq<9R$%-)2=bdNng zF`sG@7vB~?{GAUX9lW2^W>PheA(Ip|5u;d4L;>H8#&=!6T*%$+1cIl5k!R!w!d|yt z3QC(s-zM0I7V)UY^Lrjf0X?fqR|I%1=r1+&UnMXLl7mpDpDhu$lPQ^Cw?bf?TG@ka zNu^pLci~8alKT=_4HVIR^^PxZ;ja6jo(V~}PJCKM)2#i2^d7BRB+N)?bu3)8S~zQ+ zzn#=*@-cjc|I*~sLg?Efd@d^2fb6W*!cvJePle@x)*SOtH~Q!+`IX%<>Gc_LEC|W& zd$xlG5!XIg>JCqqKH84Lc*e~ZYh}){!#0go$Zr&9gHo5p7FD^*IV?-}&0^WbU2zo{Kj|2}$fG4=RwV#i2^YL9e?4@ir(W44Y_##q{mH2>$zLJ?k z8GizB5X(HNg&inTMk4;I`9xa67B%@sJ=8AkpdzJqRp)+jE^wdWZGU%AUA^(~_cXqk zC2~D3NQp2YJRC%ei9v6vB_S`0*^IFod!h&B3bL7XqPLF(mi<0%%S;oy{TsGFC6+f52;2dQkR&%oR5U^vDqZ~jHk0*kL zipyN0r%EKZ4oP056cso!Vxx(z7<5wEiFfL1(;8v?WkI4dRk`L1^zbbN=m935YPkXi zU+Bbp)xa{OlN|jZ3M#AZmjcEyW{{=+k1UK0?JR9TTaM_E071Q$vV*}8B)>_@dv>-^ zPg#_th154-+O@|vZxQnZ^EK84AR4U=2W9Q<>)27h$F57UtZ7<7tuuv@Qk25yF5&}v zySm~hm1_6*%e(_25{%XLb5=E@6}&NA=NlyiVLwR2I$kMYklV^|43tHpRo0&Bkd%L( z9xl((wIbv64p)?N9bAw650VQqOBYTBi{z1cO9XzXI?7=MU|db?h?>l4BgU6UUWrO6ip2xdq31K8WX~ca9Ng#I z_h~sHS)D~zNOVXei>EO@XjfvQo`o=oN5AFWHI2 zi<}9UYZnL6y8iSxk~IK_O05HUxUCP~0{kzoiGP^5w6ll}(9Zh*=9&mrv(^M_Q>}4* zqD=h(qfAJu;nP4VoC-H5n6vmzIiE$CGN3^(f&-@tcxr-570>vn_^M>eP;fRg2e$F# zgLOcE$K_bYGq?GL@8p{E7oV4Vfp1X!swhJ~=q&Ul4~WfbtAqC_FUWn-57P8Z;gfLz z+3MkAaOa`i)tgutmK7yh18Xp>d3RX>&wxI*~d9RU*Xp|x|4RZfh&)- z1>d*Ph5B2JA(wY%pGmi|2*A!`aqFrZ(6_zbqoebo_DHvVH9x!rn5;Kz?~y?=$7V@$ z-}^HAJFK|kv)Gs#cU@L%wr5l4BeCu{wzZ|OQ&sBHrLE+>N9xa+1-XrbEZHMb*(U4f zF#u%PF0`meW1HxYV&|r@>qwa}Z}IxwDH(pvMmh7o8yglR%)YlOJ#%jL*zjY}V+Nl$ zz&Om#a>RgU?aotN$n}i1gs;QS(=80E9Ds#-M%6`kZ`GyeiWNM%s9^maSmw`Kn52W% z!<;I0XZ>(1sO!7TPwNP;-?hapd1!mUn4s@4mV6LJudOh(_vjY2tsfatl{sFBI|nlV zg73Xa9pcyf zxH}6WQ&5X?rxPv_q-Y{VQwn&rqX*$8hQk`1znk%jOE@y$VxBh2y@q#*IypjM9hGyS zF_QsPYxIbK{W z2c**2S7F$hKBeWCF1@1&d|UQ>iJj!dM%a~Lc3*v??~P-9Br?*q&pi{x@d;7Yg$%*w zYzlJOK`y>W35&)zav{oH7-|C@Ree|Hea3+xBwH>LA=nu8xJLWWBT7cApcgtYWV6AL zrTib`*gxm!&S2Gh7gMKy2~{PkYpbGxg{mk&CDD%oxglUsg(=8;;iw6P#Tcs{EL5}( zXDM;w3!Pe*v@WxKrf3mp)sw(z9m`q^j*0nHsWzc-@8bU|PZYo5@AvYFIXVTvq=v-n zC_6~MZ!)u%+KJ#OY|>F?x*?8qAPh>vlA4cSRv8!Qa$KL$XSKQSO1tRw-9dX*xgMb|#-`OngTQ^9^_O9*zX$9B`qcKA`mAtlWj14i2<6 zI0(>NqHO}y%h#zPm~6}vBP*&Y?y=XKC>hPaFZlm?aZQF{(_)g2glW+Ej-B+jR4V+t zY{q8j-m|wshD{Rzm5<&*d1BwtiQRw|)khQyVODnyldV@&_=^U{O`c+JT7avKlt(>o!mN|7UDh@N_Y)2Yt0uP(LW8wBE10Azud z(8iSBXX`6KQUFb_U=Q3~g)*b)ud{>9uU-MU28T2|Dz>Bo>IJ9It@tJBDNS8${vZDn zZZQkf{o-J_@&12ANO4;S7tjBQkm}a|P*v82vlK~4<`+}C6#rNV(G_6CccP6p5Rf@?~*0IB!9;o%*M1vG4q+BiEU|OLf}42;GpRB72J6IQ14-t1FuQe zV%FV#3uD)?LurS@?5JBT`}KT(_dE*Z>FKQ5C(x=t7sKp81P_f_Td?&})PyH-gi-}w z7LY#@(2TLN?>UA>@nt`v+0Ul6A%W?s9cQC{t&&^R;MkM3HOsH5tKo{hy-EM${ak=% zi@hy;G_u#=x>Kvc-KRdWzJk_WME^cxME7PR;e1bsrirDhvq`oFu^~;IUie`A#6zj& zDyhV4yxy@Zgb>oTk${0r_4B1GK^V}hZF|21eYH*ktB)#oJD_vAuXE5qrR^-DgWmO! zCNLJfYE;i9*3`|6Un$U==cRFT7J!#bzv7(uq0jKzWZO*BdW;#Fz`iKAmO4DEriIA~ zkes&55&LJizV2kjv(_rvCXRBe4Jum}j>1w0O2tw*$4z;ng32)MPQ`TS5$g;!#F*o$ zh|4W#kIt9OISH+WM^#p^T^D^OGam_P0%tmjiezKzF`=X&{VnWchDi>Je<(Hrth*$7 zdu-h3G+3sYl`y>}hy`u!kcEZ9ooZ@qN_%6b-!cQpeVx7VeM^jth@GD$wm$`gfksn+ z1B&8hL1^>P+echtnX=K5`k+q_$CXTh3Q&zKdMHsYXRyKG7p98snm#$2sT<8?ghyb8?}4S?o)o* ziFO7&+!_)bPW;+dwFSbKcyM@b769d9tITUqSOD_C@%!;%ODIc_dMC*o5zIyIStqF; z5TlSujbI6gkJb|}t>em5C(~YrOO!jekisK$(z04&T|nq~F-%(k@X_#PB|Q; zm9u7(lPSpZ2tR1vu(0CLF)A()!w^9Cnam;NaBT9>J;mC<;S{Z5o`}0^zAhwcJdNMa z3@I}^$Dez%{zCfmu7NSNA%}d~ugs{)@s}+T70m zFJ3fJ@M+zDZmdQo{$m?+=)D+f2K1qEc)*K9|2t+$xI41A*uclkS^|7uzJeiCx%jk# z@Qr`)?7K?%Iu9Zhp7S6yR(|Wscz$!c|G9EAG^uFtL2joj3X;1T$on0h*Qg~W=({Yh zmm|-2x;1d>?vx^J$oc&Qci*M$XUP^Q!+sQ~-^T!|BEGS09*@yq-(>P!-?HN|P%>w8 z;j?ac;~rvWzPrDDpcNeo&_o6Jjy2H{{-(9=WxC>!l*%x7G*5hPT9phT*lHtS{=w+& z$Mf?ST@q6OGg0^i^H1>M!xBgH(o-+gu5L)-H*YwS=B(<=G6*Higb$e-9u}1mIo;W? z2e*Vh0u=6U)U<#=3KXrbPD+haA?@?UJ@;B`gtMl)3Q*HQnaeXBO5RZbNqsX)VAoFP zAqzgiO7?~xn7|62Mta&BGnk}Zx2bXwqcB==-Fv`HT`QLwBaf8|-fd|QI6*bD>K||R z?#InFOS#$Ch;Vg-^zpM>ZA>BWhLwho9!8zabNd3k{zP*>f$rV>B_jbl#RLGqAEGbp zODM$G_2tcB@Ek%DE7zJAC15gx=|Q$6WTIu|Baj?(z36a z{WMNx3@0RFRl*#iL2B3Rca!hI9|CM3x*u+cYUka7^RvPmM*5M4nX67VKp()RufMgeds;@Q=Cmw+~=H_rZ%NYOA%>?$~9LI!H@ScPe`j?j^U#M zSF#1TePY4hAnWsM`PulSA-4fRw>4bNLen)a0^KY=Rd{3qc)-$ZBzA)Fg=xr^iXHP8 z<)d9nvAAPaO!O|gSA``e@3M>49V4~sYq&miEEGn*6ZI9xc8Kwqi?P$V78>I-)O-9d z70!JJi7HBbqqM~pIBiU;{jz3r^RFP;#X>e?tc}$cu_{LBwC8zo#cjg#FC^;r(yJas z@XDlIZ4;wR$6wWk3|(bLEL)&|+J|pv5vuh%_v#Oz6S9nF)XXzPXu4W2RdQOb-Yp;^ z5Ei_=BpDmj<0Tae%vM4#e1!`-x(YWmQO_7E2)9mARqlnrcyL~u&7&@VfL@_>yJT1s z(z9N(l^;~PCWr*8uqo_XP6i83SP!tiEYdME%MUQ#sriHq0i542@>t2ecM7)Q1eF|d zE|gh62d8}66$=0r>d;<~%w9=3E|lh-$)w)I3^p%l-HXdLR5Xi!^&XFgH`)|%^IXg8 zW7Ng$6Zx6EW7EtgLg1A!=;W)xB9C zLZ7T59r35wZnV#qCV*gC2OFz2vm3b)M~oSS4c75NW*Xrb>E`pmiV>*o%~AG8KQ&m! z4>#fs$Ds+1!)`HvUoF0RG+_SS@6aVAk2alc!Aky$IIE#_(XUu`MiqQtNJJSxdq6o^&=TweOuvFnBE7h^~Pfr7spgCiq|wiFNDJ+E4xOtEe-wMuN-2>p^|p$Z zxP+LtTvSRe^Xm9@C`7E4`27uNiQ*smn{khKEuxJ=*~%KtZdfHXxh37{fFbQQ)FHQi zi}0ogDrc8fe0OIvfeV&AuX-2WpOkH-e^D7p`iz*Sk_~l>6%(S@CnmauoSkJ|m)9ye zK_f=wdy3*^DOlP5Z>&0>^6eA6z<$LWtOUUDKl+t_=HB4bDlR}vJ7;M-MW=tObtY=) z{Y9+3=8hUChYg4L2`&K9kc332p)zMLpR@rNAqU#h^7W7$$IyZmI3d^2@w}~gIl*P% z5mPvmXWi;^NA;lib*$R?0>JVec6)3!I-~x+>)_OTYvHHg3r;se!j9A?0*;=R)lj;Y z-4NXQ<>VUmdN^4?v+;1#4nYT=C?jYNd)`Rv0PkYp(hr@epN4~I2wHHrUjD5WYrq%O zqDseIWvj!7D5_|u_%1h@;A%}3?~0(yln}`S&0~MA)uvmI05TC8_UY5tH=JNl(J@(X zkaLgCWumrZY#c$>uS$YxU^CYl)TvZqK1F!L3rs7=yuB*2OZPdm2d(MFs}(t^dsEey zYlb&%wcspxY(F)OsgKRckB#V@xQ*0Ei`ujO>UpElc$)dV#mh(Arn}0K(a~j_fP{@Y zavfXxS*_HI;}PXoFf;QEll{t^%sefQqD3afWk)#{QT6e&hz`2$Z&ek2){Hz`%pdBr zD5u4%sUObw!z)6^eHSWp^b_S5N|;?VeF{L}+E(Wvj!!|{MhyoPhc(-fjO&P|pd^b; z88|To=%gK;z-w`Q6oe9KxHRK^WX=h!6m$9fiEXuuUjiOOzVa*6DUSI47oAj?;myJJ z^^C#DU$0IqzWfH2OX53KBTW55n;2>PVQ|owLc&Z>c^)O3WIl3~>X)#B>X$IQq6^v{ zP*CVN%Yq98w&dY)5RfaocPL)QE)&imjhm8(gpYukf+EAu?JlD1vomE`27^qVORd8P z`OFxnTeSf+a&*`OvVcG=bx>95l)m#sojFspOnNRkQcCKu$3qK2W>ug`Y=?{jUdyrOf=vAs_bD^h)OaN2feo%CG z<~zC1cqD3|KB46EJbvE~Y;ew&2pfFpSFH)VL5hj8!01Kxt)7CRhRKIyt<=v^uf~eR z%Kd1xpNkYBwSRH5@F-y+p`XuW{v3t8Vv&KsAm@X0^oa!2Sc(>e)748Yzl`lCysN>z zMnuRj;Q~~8!nMuqVnsMe3MtD+aAX3QL3kE%PpvnR4%r$NLkNK z`Ujy8KnWqwvqbT}=_vdQfE zd#|WF{PYH|s3B|rgdulOFnQ4C#P}HBwczBn-}u$!PyZLFO-e+U@tsa=R1X72qQeFs zY)O=K<<+F;q$u)pF-NX&Z)G2Hf7=u4En@_}t1Bv8!Nh0ZR-d9RXHaUJ#dF5@#9_bj z72h7_c1ymdpW;z+r3q{1p*HQVSCfghlKh9@Y`^?UC!N2v&ic=t;JwWwpM%6p(wear zW4nI+)HcBwn!wM^l9t}rb+?tXurgh8k1fxtA&1gF-*O5sjCJHQQBbhlBZ~hxyzMzV zJVmo&$-rszC!6OyGU>@oREdFudH41XyilnH@yV;xw8chmI6oNuln;IymeS&GzALWb ztj~`M9~_Ur0sm|hL;DWvyW%9V&i>iCoo#Wnd-PprL|A66MgL7ZfvXnlGEA6Bv8cXx zBNejm7Ce;6D_UX1MR0yEP&V-tOp<=E)D&*au~II8n)LpKLpKGPMAu`-M(ehQ&cwKA z_5`E(LfdF4DN_CirG=h8rvsEJBonYlNQcq0!g7)0@`E=!hS{1Odl1#J+1V8PB~%yt zB?c`Zc_QircGli;NKLWZq@`CrO=W8-sZ>AUu~R<(bV|D41rJ?+U;+0Ifxn;Y_k8IN zgR7pYR1}rTCPIg$Ax@B&uMPutFOK#|Io6zZluR>S#?#y8T$Lj2<8KmzAk6`!H!YWe zdz)e&0UcF}W$R)6S$27kxIb-m5S|GL6SmvCgnLV*T-DRfq$0=^9Wn-mo=-EuF>weK zbQIn)-sp1k@$=R8?DMxT7;VJ=;iY9a6 z@Wr*x99d?y(7xi-_rn{RuoMfP^&?gaSWw$Q2wqrOK+S4e8M})BzqC{Ap>Uls zIgfN+a;QTvHN2Q--07gylmxMq4xJVSItWnrJqvLy3D)GA<`v(XR?sDw3P!rztfH5= zh5aKVnWV;>ntB}>iZ-t<#b}IA@yA;Qr31A$7|^bT;1GrM#*1q|OUca>&G>H^HVksi zK3x~G0_J9Fkze25s8B!Cr5caFa)Ml+(UTO!b(OT*(gKkarPlrUJfn5o$fi8$EK;+^ z-XnLHQ5e4v^vO}ni7q_}5s}c(8r*-_qFhVzVF`8!`W;X6p_aHOH$~S&^6cX85}0@R z8jByngJ~GB&1w8{E^jLKg5$~~x zHM8v-%`dywy}yo=T%}{cCp+DZfb+wSn83L^qzN5p@+6(P6n`Mn*5!;2U@D~tykLGm zGok3cCo(?Q{@C|@x^q)=^`_+_#j+}(8Fy#Om~aV_1Xj6gTVF1{TCPgZD!I*(O9JDyQXy6-!ruN<5!58umUujfa>su0uAEr~Y{4XGn!7DPZ=; zKx`_kb+ItL?VlcXy{fk_Es%4$hzQQ=>@MtJT_Mst*9w~2s(uh^`l9(_=hBd&)`R=G z{=3K`O5b(u@{R5v>X`hV7*F4q=GqgKI0gKWegS33y>$ybkfwy44cE76_VlHd7&neH zN<(;#wu9r+oE#7&w7}y>>`tN9M}$*&9H>>&(pc!kgpxx}ZLhQ-Px_duS)pWV(U0q~ z8nw&r=xGMZFLG`yKsD6&H921d_nM4{x-5(t@Y(bG&<@VXucPtJ=H%6iWXadNSZr}z zMX_Mj%M+ZD^x5G#{znf=*1p$%ugkxQ<7KfAx;BDM=>cp?|3v}w?+~K^RQOkTiPy77 z6-EbbEX_cS8PQ-omF8UNUXqE(cF7tM6gNI1NjyOZo7+fB5~UKRBZ<*hkb^q=#8 zn1d{3X^63$lQORb4>H`%-d|q-z<1;7m%xw}iVUzC%zQKvX^EycxcNZ%P@6~kErF<< zzv_?aT672i&2y}&15B@MVinSJKU$g!h!-E@Z04H?KT3*}30xP8P?)ng#jYB7A4?Xr zpR{75M<-~my1; zNVWc!4A9P6+6`trW9_##Yd_Y(a2~UQU!{>F`p~{8FHEhQwYSJ4xaFcs>cxq@9}Xa>+tSPH7RGC)I;76k7c&MFKvIR#8#*;CE;$_0G`}k>v z2Qb7CJrO2_lNrs(tsoM)nQ;l&woWOfCYiZzL|DY0R;HLkJP}y>aWEz2yOAWR-8@(v z_uv6L8p$WJm@TmNeHHmfKQzV~tWB@$hhok+YIj?c^d<`>*7B4z8LZ7eXZASoXdFf$ z1irs0wKNh_9cC-UD&rdnLO)9&!4+9#A~W@c&Xl>LF-Ml8<8aA@Unf*50ScmXe1;a2 z1z!`UhT3^lCbP|$=|wE2(Zs#0B96`?Z6hm(Yg_CC=g)t2~T--aOmm{t<`39Z zbc?utSuACevz-3Qeig-J7wfKiC1u}U#*PN7x;~fQ^bKp%)rqivHIKZqiwUULl^}Tw zFu+-!r@iT&*EHz>6w149NAJH9%lryQ$n|sV8brjWk10RfC_`$`fwBB?euj8PGH#sq z0%Xq9L@KC%5Ah4@cMZ9|pqXO^;!RBLn$VxqA*!m|uo#NAMW08Ou-%_t6M;fb=cT;#y0y zxIB>e7TR5X2myai9#kqk7f-NZ0n^^G_9((|N4FbRKkvvCPSjz%4mH_$Iy$l*AA*C{ zbKGX^4JS2bS7E=u;G|i#o>RB`q!a61ute+07)jqZctkdR!sieW*da#rt8`Z=P%GYp zBb>3>O3YrfMFEZNhAwn=gYsL7jbxlr9hqhHw~@Npw47N)?N63plD%M)bUeNb(Y`|T z6p!BKIl+%u>qwHkYnV%4^IHCh!doYXm5IBQlV&4_k}BH&(}#YDpW{oK=odD{254k? zLF>)UMu8I~@l_hY)p&CZCc0R3|3h_I)caHH3K^m{{RiUjJil*5up*QRI#NGHQnV!X zNpQcxEht+M3^;%K{rE;QU zK~pVX+EN0jr#>&6Z{2^Imi>q0r=bq*>*qnN&aoiu_+x_P!_Nt~)K{KE+DQS92h--b61tWkw-IW$)0$ ztc72wn5nM2+)}UFiQ&isH=i%_mCVnOnMp80)|N6opV!AvS6AO2;Wya?b*MMxQ9NxD zE-^3UI=E^rjUsX#dIDn&wJfs#z@LBmdYgH%o_e_h2{Mwr!-$qd`RG(7n}sD`YO-pi zRVDvr@q~33sgE#s%(k?@dAgN~G}&926#0q&@Jj0Vc`-FwaW5u!8Zp1id35qs3ScZ* zrX?2sSwZp>m88+3f1o z9btOW#BZ{l-k4hSW@m7 zscu0mr{OfI+oFj<>=2oCOyjYp;q4&B4+EDmVALH?-8Vx2h&$9#7hUP;5<@~M1)66O z$|mkGZL~cKUIsJ}McZ0!)mq6r$T2eGJJJ291}a^=+1~du0p-Tp@MEnx%Je}@v`n=# zj(ODfzxP3Rl8Ogy!MWNmaP<1G&7Xf8l7g#^jVjR0)W!2(DVyq;!io~Iz=ER@>Ue%k z!4&FfJ`$CXoT$3GG zdkk`SL~B+m+rc^(Dz7mdnCw0p0*7i=Ju<()TRCymPgG@JMAyE;o^CQw}L z8q#wvK5N5xTgQ}y0-;o&uoOhPzhbO>)pA{7Dj56xLdLby>o`$2i>k(X4AVY6!A2gk zz;cLX_)5=GT=q`h*fjj<40plZa9n)q!IHwc(rd zA+~LCzFnNI4gN#YvY$9o+)KM#D*NPpM#%i(<1W<6gTd?5xW+wLFbGlh5 z(n%WU%wn81|7>z&T9>U|W5Fi`rSmO9_Z63P95UaztRRoZ(HLgNNv>DSh|nnm3L+>u zg>N=L_~R8M%(PTyXvW z@nOFXN`oF!sAQ)mHv0Jnx3PU&7 z4{t|>x6f#BkOQTvi9s(pOb6_uY-qt7gmgi8!Ec` zUTdkaHLz?-n^(LMmXoV=qxQJ4N9V+e^ZR0aw!0`~sw{c79r#b-swdhx#go$QqE`sc zwVeo{7Pvn9EME5yb1{U3A~sJX)oci0^%1HvEf9%^Oc*>zF#yVjlUj}Cw<;&NM8|OOC^7Tt$#7rg}~G1aLQ482zMUmhjT<( zet^8^`fo=)5!#l)%gf&6-k9v{jJN!ULqMU`SF-#-2CvV!*aEQ7;!z@QVe2sg_$s>x z%EbPuqd(J@`u07Lg5#x`fh1>g#3dlBdofW1e`aN6R-s`m|C8hyX*@<}!_%-%*3oEX=XcfJW zWhVPzs!;V%1fZ9adxR)@b8XR1+vlI!V0g+AXYtCOwDXeja@9=O#jjZk+8J;e}_rx z($3)N^qbDg@XjAf`#+d;<%O}fP>>28{jh%^pqWTmKd#v1E3ae`PlQfWi=V%QIpme( z`D`JV)#!Y*ryfKua zpEXKVW-i~R+*jjWMIEzs^pWi$fV!qlb0mv`s%09iCBJJ{FY%BZU|m=LL#PqdK%2w? zbpo&o^Y&H%PEb37`bQyma$^~A@9a1aT9Z2Y`lcp-(mK!X1UFjIOs?H#wu5Bn3Ek-c zHmSLD-fH{7X-OoU)=NoTLsRKxNG%;1U6aVE?r`8ZIZ)S1QzDZlhwkbn;-I4^0ck~51Z0>E0J#rky7^6e-x8{qO2JCNG2H1?* zpV$r9X%kajGC?p8;w0x(f^B|Dr)4h^8sjF17Mp7gJG>O0hKHW1h~HtTT{GP><_?CN zDGqSfLPn%G-8J7L<{*T7|ly4+2AL9!pD{ZX;)eivNHxqPQguKS zLx!Owiin4+-xnm|evE)X^liWTEO;;PgqOXcvzY2uVU8BFpW7e<92Nh>L9wh+;4T&% zwJ?e+hW99*bK9x(g*=3I7tcuhy9{#J7|G_WYFyTW6l)4MRS~kcoDra}aOI|aj^2H9 z40`e97P{}WuW=N@(vueV)*-keKx6Q4#o>p(PjU;GPNV8$s~oRlnWdnGe(K~_J#G%H z9s$LL(tveW&TMz>M%3ck9QlY8jG$ey6=a5d(-=>)X(_UE$ z;z3f7E=Q7vUi%+Nd@nx$eGfmx5=j&FGFSSI%bIxN$hQP&d=;mXh#{{$e^%X(_?951 zPe~EWLrxLPC$}t%PD0N1F75|+_BeiQLHZ<6B#DHgi^rGsBZw-0ZTfuJ9h>kZNYy*Ct`a3MiGO8{3=@o|Hr__AF zkY}p0BtA|rpUe#Q+7O^B-X)^I|M9C3Uu{P?Hn3BgUo}p=YmgRkNBJ_!AXfM`g7;~@0A(2XKQY+_-j#1}8b0F4$_Wac;?v0n4(N96D%+NT~Wdr4i3~=DjYvE|!AvC+F__Cg zM3PCL-y)HoLfz?Jvece3wnlposPF#M@4|aS*URti=?$`*JnJZw46P5!q;oALO1GsF z$PcF~iH){CK|tWnauh~`aG%#woeznIOK9OyvV|g=B0I9dLJpVi6Oqp8KDs}%Ttr=p z1D*dnMunU9q9Vc;I>|hATqmkYVT!3{9kPGFm$J`H}M23ks$3bH7heOu`WfiqK zxwWCgSr$hHqx=`Mii7D=#if;WcpEE&B{x+Sv( zhQ0y%N;pZ%uL{(X9iq0G)a$r#DP`B@AbU9HePMS&eCA zUpo&uO{6<&UQ863iSF?MF2;*OsCv*vEcw9sZsP)M=oJUg6--mR1Cv(e!nQ9PjA3bY zUqf`ZT4)C{6E+x;tbTP^UP!Gii5-cQkXZWbNe-Z zG|ZBY){@86f7xqAhlbN8+^&h=2)&9pqps}5Si>?U&_q<6?|{?)*P-DzLN)vZ76>Vi zxngtdOI#W2(3>?dRjh3BJVw_KLUzRxZ*ZzmNw7%2J?P3c-r-4P7eK zwB!{WDYHPmeo=ZBCHayb)Jvx1_buGBuz7n{M2o`(hfH(;SBzEd zNIY47Bi%E?$EUpKP~RZTry!-vYvqSf`}iAC9QkJrY9=A<@BRF*5G62y42werH+uZT zr*Ob((7ICD^VH9WM9cg;0#W%UCCe`6)qpfo#Pv+SZ&8UswIRRyRAF9+kZ&+WK9F^F zgem*WzyEF98jOg4Pf3yg3m*3WRV9BnR&1FB!)Y80C-VQ{_Y#&i|3~G}nVjvP>7=jP ziUPPa7LXOmz;^!GSeTojl7=i|Av#8&10f{^t0p5pHxyYkVb4u~w|bxHR201|H&1+fRnC!I`=`EN z__#$d2`$b`^3ZdY$q=9W#N0>FujL%7&qIB;j-!;X0V{DLyg_U?P{YQ4BtE?wl^fOz zUaERzwuO8&?x8Nk!~%O}dKnokrqqR6oj;-T|(|FrVUQTK}KU&I6w6?|tCPD0QujjF7$eCh8K|J0xUgWUs8$ zMK(n!64@#dU3+9lD5FrwiYO9aqEP>HjePH?OW)uB^z!<&KJW9K^E~G{<8#h)I;%@U z5fKb}!kh^Oab~5`4GkCZ`oc=i%%&6@B0op-G6$HI6}ze&(WrJYoz9*;QggiOp|ReR zG&9ok)Oh^4W;CyZGmICk?^Mw`7dYOr8g02(soO|1)f^dI>XlS>`^Cr-grYbctlC5Y=F3 z;4=&Av#aM6$|N;*v<=}Bmp>R@Yx0X zk;KjiadRB^XX1;_xx*4|-62d!)=n^cYuWoaql#BKQ_0OA*u{t%m83;?%b|8giq2qx zxeSxzqc@Z!$*0xKNGvQL1obB6`~z9tma%7c&I1kM8~FKSuavD5A6kPz{Xxgw%-v%v z)PV*bh3=||3lRU)p%>$JBc zgf72N{dl+*Zyc)uiz(o_Tb&cwyk}5!KqZ{@?a}!DeBK~-2gBCuR!sda=I>UtA3vr! z&dN=l$Rbhc#u4|Wz}LZ%;f-qPi_CRdzuZd9gY90u{uejg3_}*a#{#>)vDWa&p6>pxazlsF==%b34 zJCE2+EqTmX-VDmmh^^y&2#asZ68Mk~wkQy`SH4&54<9v6W5sc3dJ`lmHVOBRi3}DU zKIXv__(0BgY7EE4kfI|@^k{~hG_i7wb*z;oX~>*uftDmKN&Sd4?1yzW4!2n%cL&Ma z#Fb=wFXOQ(g2LNZ$3hg1l8#&)>uh7t_%42k74My4dVzi5iXC`0BbIao!aTJ#bb-}rK82Q5xJW-+H_T}0389)E(t61W-!PtkN5>E0vS=2SBN3jGi6o$u1 zn6c}X-i7tr`ms?p`;oVPMh+xY)D1Amv#uL_ebQR|!kNz|@e~W}ixrvD73u}%7@WR! zgUeOdE?-Xwo7bH&&eb$=VcP%TR!0N1T$s^(Ex*>%+;^s56R%6oza}}#I>FE|1@xtJ zLx;yQSn=J}X_My6l2=S5&0*n^`rSD5_oB#;TJ?+S8RwbZGxKo11RMA6xOs+lF8d1K zb+dlz+}2Y=&bPWhsGl^TW6n79nLau#Jys~|fk|HKf)(<~4MvAZx`EkXeJgf)kc#_u$TLU>9a$?VnB?l@vt*yy7|t3u4brJqN?sEUzg_UY&NS%`7T7W>#6_ zis$ek#BsP*of@AK?}hD5dcCHJ5w)DCU(e*r+KSInnVql$heh^H+2pgmE|(xuj<6I) zexIa_4Ui&A=@uMpWKt*2^61L6xlAJY8aIvEo8p{;sQ(J#H|lI128M&8X5A;HSxoWU zENx?3+8aMw27Vqp;}lx8MmiicHWtTEdccH2;>DR5qVJCkm}uk}{0@>uY4WbbHuBt$ zQ(T9HJ}?sbn0yk9kP-t$#^pK!Hqpe}EOkajk2?!o)dgjV|mjSCzUo zEev%IJBs6Kb}WR~9Nw6I`eI5H0ZHlU!HXB+jj;!BB_@PgkzBrG z8{vGq>_~VS*C^c=p-+Ltbm3lSP8-Uyy(buzCYg)yVotjoB||))7J7qu@k!TnMwuAr z(8N^bsRnBXKi)L@a^jks#8xX=L6i*z%rO2n!}{Y5PO>YaL322Y84B=M6%Wt57%xyb^0RtKif9Nw@lR-ag=_k_)yi)5j53xS@X7M%h5Z_>}KE z{-yb`?kY!(2mjzEX>})LQ)HhVFtw0*`(cvc5c2ZC2zz?IXW zqSl}47JNzqj*gp=>$(Y~l(ft9J!z#~{o+*+dpUXh(~-k6dipY--{BFl>YTh2z8u{! z{m@b@Eh)jaGe+&9qsb}jiMp><7UbdiCMizm?oXdK>2v&Cf+bxs9xzBf*_)Vzf1AQ@ z9qtmIlr8l#^ovbN;S6;`>mj!YYBkh30y6vo3|wI$~4UEJsUjx zAO~k=S*Lg@DU92DZuat(l8r+?}3Dv$24TWicu-bMMEqT3A zde89?ckB}^huf~T%iTk_c%XZNnlGPrDQf!h-0ffQ!n3EXM_hhjdv@`OaKei!&b9h@ zrHtc7AC{V&Sn!6vCxnAXu zohn{4HU2&wz6NW(KomR2@ZDr$gp={jLQbl-zo_C*;?|STKM?7+UAV&O9ae2{Wnl&n z8P_RBLnB@i{_#q2K+7im&b3Tef=YG;iU+4J=LUZ3R>6LMZ2lOX8jIi7K>=akRcpZiCLh<|gQne0E;3_U_zX{}65cj}9ssdO2??_BwEa^mXd;1sqB2B!o&gVSl1=Wegb<%;y?_-)jl@lm;!jJH;{ zmazq%dGE%djl5DfL`al;@Krz(wIoBJ_h)ZGn~D=Kmb!?Ym@Zk2Qu{+VTd-^g-MsbBHrv;gx+F*K>WzcrpGn|l%xdgsU_uQ}H5kF*bQZsl zh}Nky)^2LqW9E*cTwmcObE31sL#V;&xR~)5f;@2V@S!H>GEGuM$(Wt&J(_>+7bz;p z-F1qFA070)Sw+v69-+f*dtR8`&^Ull1kNs(BA*bWMq3?N-8^lt8X6!9`*Bxif5H>h z1iY|8RX@0B1+T|iaAVs^7cPq1IYEiy3k&R;GGXTJ7n-Qg5oE0}XbQv2r`m{1gOnv# zAr}=K_e_dI>FhsEC?vLZhCZQa+MG}@Qi`1>y_J3#rsXM@SZiu~%ah+fjz%o0>?`&f z`?y0Lj&Y}@&!)~+e*9d)aSpzMO|6XATbO2{^E@HiA^1bNdsc;MsQx8dyvNf^xN^O* z`DKZbzV*+>r9&8T+n$#9jMl*BxpN<+!6*g$^10Ts8v;)e=NY7&gMurba-R);x75XZRx?7nqV$?8Hy z$vAE|Ei#DO=L)S96?59>{tiPACR8CKS$?CKM@F_XBK*jFTDF+tMYvCe7V* z56E&Xs1`-qk4@3eh$!bU$x>E@z<;&JU1QH$4dHq5KJvjj%FwD{7UDIylNl#XVMtI5|X6&U0Z7c}qKTHAzw{)h{2EHwl zN#7E88B5CMVL4%_%yH#IS7T_trt&$YuB`HayyiDj>m=2Q{&;DHu>w;aW{OY|`s-!> zWGt_vcwP;byGcE+#h z&soS6ULj%s9LeR&y{5h#eswaTVJPN}PL2B+szjeuxYW1cfVA%Td~qT+?9r=Z*dc;k z#;+#TQ&$D4bClGgtZGgD-Hk`-rA{2gArQ0XQG6vCAFX%~XTV7kra(;CjUy*AAZTlH zC|~wMa%kT!a{q<-dm)Rq#aN#D+FRd{&DneDM#ePW!6&^BNG1UYa zAFtQ&Fyb^UxO2QCNeN%CE2iZ;zLuzI;gp+kF+DmMpO%GGZAK?7=enxy{2en3|3s?Z zNds$x)Y4@8e{7DCySH@Kd^GHvtCakqnEOF6uUGIzP~YM*8Hu#_51Z8c7CAOpQ6~3a z+k7dl3A_?Pf>$gri{-$rIiSeTUr6Z|r&*_c;zGTk-pz=N5VDCv<-)|5XTOFr@<`U` z&hadfRCHFszi{D}a|m!zJYv0e)g1Rkoz9ai(j@PM?qkHPvhg$>7g~l-t)_C$-&zlE@vT}_BX&4U_Gs+-I%Jh$zpvc~4q#xn|BHbMZyT7g#%o|;PY2dH z<8gzQuuq?ETsJ*O>L(DvzE4S&g8$r88I86lwA~I$QX=ygrVq2qP^PYfg$AN_y#$Az z>3dSvFC|JZ|5$x>BNfZDvsbIJBKky1!jrU&Yt}6G315@b%D9Xle4{k!^G!K9)9+{b zol*0iMLzfWm7({zzuKh;FNfT#S;&$~zG(}iL}JgW^6UC`le3Msko`R4C>eKd%A4Xc z-r()76KZxZ67~hozxTL)b>!=DVqxPp!7+H@k|Cm^K=X5E(+i{h3f-dG|b|&_hps~edv+5MA zp74q&CB5)LZHCJ>z7*|G&e1odCLOKU-Y~G~wltK1wHnGOa~n&&QdZ@aoAXU`3OiWG zfAW3!>_LqV|Br^zM~QzLun$Oar8(Y5WFwBez%%Smr?_#LDtDBw;nSk15VuC*%O`>k zQVmCLOr~ZQEqBzq$+E~eTM5|@yVlc`-b??anakZ|ens}<*8u-q#&j+XqIkkjIP$E* z6$sa-#czHRe&bP?5~jf4SJecI>cGLqekyQ=>TG+{XRCILedXd6Dq3_AWHi%;x;Pm+wQt{dJA_ z6?H#dZBBwV0Xy6qW6PX$&)o=sA*lI5;a|v2ohDlf3T0dyfZCyBBD` zczPWlFSfJOx)2PT^nFEIhiGfi>~wYO4p_W&rknhQQdx1IDSy40z6fP_56`X1>myzK z#379C`@PAPh9jZ|1zz$O+|2Piex%-|AT?jXfA)cL#|uiUHn#dJ=|;M7V3DioEpC)m z7Qcu_L(P?N^AUC754^M~L4x+@EvBA+$#PD|-~YzErPS(`N)Si8QstQkX)&Lb!fcr+ z9j;P}GrqSrpd(77&fu5?$H{*%42_0`{`grQT@*&EtNP)ln3lZS^ZYRBs^1Z}}`UX}ENg!on)-uF|rEiD?XHVCP%i1xU1w zmzIOSR)P7YfzXF6fBUW?z`tpKkI$ahAca#(_fQ-fn1~KN$QZ6!ay=kDy@``TP4$%8 zJ5zIW_kP0J`l5ju$1vufN3LS?v8LA@7=QY#mGW6)ey4KTiT+Ht@88-bh8;Y?MxAf8 zwLBjNx}vEhEI;r+f;SlLmvm&En)W+ZDk3->Htu-rFzlYxAl>j2d#!_Bn*WTKJ-;t4 zJt#Ew>ev}C@4Krt_h(;+e~uR-uW|6HClXA!8#8j2?hg6r_wh4qPhr^Mch7rvkhax} zNk5`C$ZzPZENZ>%)jX*#p>yy=8^{KXs-ot8nE-C*{DaH{##K#8CHP+WT2t?AH6dl4y9)5bwKzF?`Iw+Kv$ zi({sOy#mJ6sxz2w&!QZao@gnjej(54kdQc2-nW3Wp1Cq~_vr>=niThTlTOl%wpf@^HKR04W?fKU!@@TllbY5}p~eIYOA2g2*e;dkHETcasloA@7SDycqrdrJ9S z&mD!F7w{nU%&soZXYhr-Z;)+9bVo`vEWy5A4sgWa7_{~LzEg3t(ZuU*UKOa$r{v^H z8YAUOqQXU{d)oH&rG4;2k=m492iW3N@q4oG35)+o^~1V{ph}!Su#$0XnVA8Z#nByN z|MG2HDYz@}*3a*&pT({{?}sr&>K-J?-0#(K)b^(VtlL7V(e)tX`%nXXhS0MlPV#wS zE&QkTMAW)^aLcu|IALi~v4y-e<=9rKaOCjmJfW2mSXMjn`~G%+6Ah~#E|myaMq+G= z#<7;BrK^LM; zmI^#fbU7uAdG3a)Y2y>qO1X}U)iS`oJZ3 zxoF3Fcm#=IawiXxHg?c3v`J(1WPZb^$Mr{!aqlA%I2XtwZeS#K_Ut)geANMi^^2<{fi0|zx`kF2ic87emuZT5NY>yLaE_EQGUv`y9i(BM z$16oc{#OIFA-!L|QY+mUGSeF#J%1L`gnY857b0zT_^d48^sh5@(!m7ZI%o zIcw{CAAW0~#50n`aiNQjul-E_;-$maevR6)(8pNPw0g$U%6P4f3H1JFdb5;4{+9Q9i@d0jYPiaoI=Z}S3jZd!LNW#eyRAfwwGKzE4LP}5qvZ*GgJAmwEYusfx8ATZbFcux zblm@VwW6mm_AK~MOI zRf6C0Sbz)U{}76pRGo1atgDcN; z2M*WhFcuas8npq03;R4WP4E(eU8cAE^INW^1OOmKNmE7z^l0#KCr2b1=3ps$NSUmLAs3x`BZ9L0nJ z$Bn^B6f^VR+isY5{ze|?&&qYrYQZHHJmL!^&)bUfwkKp}T-Q@=msLy~p!3TAMI)|~Hkcisj zm{^-OEbnN!hXtR)7St1D<)0n*2DJtQ{UNI3-A?!Gs0MK%G(np6+iwh_`%e^+!;Vs37a;7V}ga6B$(FZu-5nnkTCW%B}($ z8oEy2oQ0rJXBSZC!1ipos6qnCHWIj&c`Kp1b7MmY&*FEF`A4U2mNe-~4Xi{6wz*oc z%|RmK_n;`bZESPKtd06(bgGKLSjK>{p!bgp7j_p6_!U$r-kr`JGd!)JEEXTY{Q;b7 zTUhW!B0?PTbE8Bzd#-ao$MkyFE%A@gh?(N0jRU`jyftZWb zSUx1M4jMlzs5x}MIhVeBmK(a++ld)f_YjqXHjxCnHFU!j$=w~i?fP>U@b#k_Hb@xVD_rC%bKwBy9koJ)uphl^wq3Gug7}2PK z>^6IY>$cm}2oG<3#t0~^7PL&}?NWm$5&?UK5&bWzF;^s90#^DK5UoI6u%Hnic4H)N z3wqYwc9%)!^pCsg;h?RRfI2`Q05$hwME*<2-&M=J^<@xRxdgUwp(P;iB#;-(3w|dg z;@$v8IHt;F-Y&$Rt)u_W#ZDoRl_scc^m5D&W6TO;Ikt9dK+Ey8oqq8Is3djJxY2uQ zhj9pedpLaB)(ixQM}?l=Q*2a~Y&Q+in{Fjk)A;8jgzV*D|3||xRf7LS4INg%pc;Kb z%shqRbx>vla9xWHX6s@a#1(e}!Vm&)&#)~Dcp?!(^LxN{Q~rz62C`wGks%--I&SnI z2u{HY91d~adkPV)be=36NK*iQ&~d+(AvpACC726)66a0RB_N##kPf|ZwyZ#Kpue}Y zMJ@Sk_FPuGELmzUop@fh4+{$qR3G}B*kcVs++0<0-hCO#QC^@U9H`KS=eDf7k;35p^wJ2_Mm|IwzJtr_=c?(ChK8q|N96%vNk>wnM!+3#FXPQ;B6 zl8ckM9SAw_hXxkoo>m*6Gyv?4^EUw{XU;AJ)Y3Mn0(V=mFoE)Un9Co9U-k_3g)#_u zWf3&)nIo7b11@UgdX3Glm07{o%HDEM4@w`56mbL98w@%y^gi(?Ip!?Dc+S(x(OtpS z$pN#}$u*u6>%dm5fvvEkNsXk&j6|0jGj(pP`4ehscma&L&;?ySzAIJNX>+X*GZJAp z!3xf*VjTw6dmK&B9wrEKs}A9AZeUP^nI@$qb-xY>NC^Z)cMPZ4AT(KU>B*j2iE)BC zw*zO`1f)ZEuhN_l)_?3N*_N)YGXUurfUeP%qQVU!%6YiCJ2`Ck#CyuAw`9FY2dJw+ zPV^cq;>AeallIHYWgibH^&0pAB|lkx7}WkPV0Gx05_}qh+iVJdE$xXDwMw#}H!=b%MKovv_MCwb_bw^wU0@p< z3H>9ax+w&-afchDl7C(nH}&Gmp#C!K5&;C zW}rDhZ|Hb+)Ffux~iXe8ksvLymD8GK{ijw=j>L4&mJ!1RJJ!*&VT3I(G; z+bRKz7F!85BzqnT0soGu2W3D*Gj3Cmi1l3==u@9P);*v>{&wKR5xWTp4fzKZ7#fFd zhglc38xw=T8w+i}qq0FWfyUO_$wd3+Zkg;JX$wk+#?9HGzmD6DzOjh6x6mlewmE>6 z?X9#i&A$!BI{h&^hejXSejkZoy7TATXrUK`Fn7Ap@C`de;k$n!LW4O#YY-YDVF%5X z{1^0Azyv4}dW3(6ICSqX#H|DUP$Kkn`3^BI^)JM&v*u7D^yu>rQ7LV2B4!0a&+_f? zTC(@%F>jshgGvZJX|_Z3%l!*+>)aWX2t5b2L*xfzL$oDt$l-71UDny42VZuGF?oL> zZXJVx$_PE*utQwS{|j-K$u@M$`VP^z@NdMe4eU@Mq5F7ukmX1S^7o3&w%Oo Date: Fri, 12 Jul 2019 01:40:15 -0700 Subject: [PATCH 116/347] Enable events in OSS Summary: - Events are our new approach to instrumentation, and keeping debug code out of the core library - This has run internally at FB for some time now - Enabling for OSS, too, to make Java tests pass Reviewed By: SidharthGuglani Differential Revision: D16202541 fbshipit-source-id: c13f5270f04bba59f9f0a06d9c793da92b73d4ff --- tools/build_defs/oss/yoga_defs.bzl | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/build_defs/oss/yoga_defs.bzl b/tools/build_defs/oss/yoga_defs.bzl index 4c2fe7f0..6232538f 100644 --- a/tools/build_defs/oss/yoga_defs.bzl +++ b/tools/build_defs/oss/yoga_defs.bzl @@ -59,6 +59,7 @@ BASE_COMPILER_FLAGS = [ "-Werror", "-O2", "-std=c++11", + "-DYG_ENABLE_EVENTS", ] LIBRARY_COMPILER_FLAGS = BASE_COMPILER_FLAGS + [ From 838fc3f0196a527fffacd222293032a15aedadbe Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 15 Jul 2019 11:09:05 -0700 Subject: [PATCH 117/347] remove useBatchingForLayoutOutputs config param and start using batching for layout outputs Summary: Removes config param useBatchingForLayoutOutputs and now we are using batching of layout outputs as float array while passing data from c++ to java Reviewed By: davidaurelio Differential Revision: D16221483 fbshipit-source-id: 326c668d4dfd13b2cf031f98a84bfa50b1440513 --- java/com/facebook/yoga/YogaConfig.java | 1 - java/com/facebook/yoga/YogaNative.java | 4 +- java/com/facebook/yoga/YogaNode.java | 4 +- java/com/facebook/yoga/YogaNodeJNIBase.java | 4 +- java/jni/YGJNI.cpp | 192 +++++--------------- 5 files changed, 56 insertions(+), 149 deletions(-) diff --git a/java/com/facebook/yoga/YogaConfig.java b/java/com/facebook/yoga/YogaConfig.java index 2121d643..bc2538da 100644 --- a/java/com/facebook/yoga/YogaConfig.java +++ b/java/com/facebook/yoga/YogaConfig.java @@ -11,7 +11,6 @@ import com.facebook.soloader.SoLoader; public class YogaConfig { public static int SPACING_TYPE = 1; - public static boolean useBatchingForLayoutOutputs = false; long mNativePointer; private YogaLogger mLogger; diff --git a/java/com/facebook/yoga/YogaNative.java b/java/com/facebook/yoga/YogaNative.java index fbda3ca6..5b294898 100644 --- a/java/com/facebook/yoga/YogaNative.java +++ b/java/com/facebook/yoga/YogaNative.java @@ -28,8 +28,8 @@ public class YogaNative { // YGNode related - static native long jni_YGNodeNew(boolean useBatchingForLayoutOutputs); - static native long jni_YGNodeNewWithConfig(long configPointer, boolean useBatchingForLayoutOutputs); + static native long jni_YGNodeNew(); + static native long jni_YGNodeNewWithConfig(long configPointer); static native void jni_YGNodeFree(long nativePointer); static native void jni_YGNodeReset(long nativePointer); static native void jni_YGNodeInsertChild(long nativePointer, long childPointer, int index); diff --git a/java/com/facebook/yoga/YogaNode.java b/java/com/facebook/yoga/YogaNode.java index a01a0bdd..42a5bd8d 100644 --- a/java/com/facebook/yoga/YogaNode.java +++ b/java/com/facebook/yoga/YogaNode.java @@ -10,11 +10,11 @@ import javax.annotation.Nullable; public abstract class YogaNode { public static YogaNode create() { - return YogaConfig.useBatchingForLayoutOutputs ? new YogaNodeJNIBatching() : new YogaNodeJNI(); + return new YogaNodeJNIBatching(); } public static YogaNode create(YogaConfig config) { - return YogaConfig.useBatchingForLayoutOutputs ? new YogaNodeJNIBatching(config) : new YogaNodeJNI(config); + return new YogaNodeJNIBatching(config); } public abstract void reset(); diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index c48162f4..0d9500ce 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -22,14 +22,14 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { @Nullable private Object mData; public YogaNodeJNIBase() { - mNativePointer = YogaNative.jni_YGNodeNew(YogaConfig.useBatchingForLayoutOutputs); + mNativePointer = YogaNative.jni_YGNodeNew(); if (mNativePointer == 0) { throw new IllegalStateException("Failed to allocate native memory"); } } public YogaNodeJNIBase(YogaConfig config) { - mNativePointer = YogaNative.jni_YGNodeNewWithConfig(config.mNativePointer, YogaConfig.useBatchingForLayoutOutputs); + mNativePointer = YogaNative.jni_YGNodeNewWithConfig(config.mNativePointer); if (mNativePointer == 0) { throw new IllegalStateException("Failed to allocate native memory"); } diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp index f1283681..4e75d17c 100644 --- a/java/jni/YGJNI.cpp +++ b/java/jni/YGJNI.cpp @@ -73,8 +73,6 @@ const short int LAYOUT_MARGIN_START_INDEX = 6; const short int LAYOUT_PADDING_START_INDEX = 10; const short int LAYOUT_BORDER_START_INDEX = 14; -bool useBatchingForLayoutOutputs; - namespace { union YGNodeContext { @@ -165,142 +163,57 @@ static void YGTransferLayoutOutputsRecursive( auto edgesSet = YGNodeEdges{root}; - if (useBatchingForLayoutOutputs) { - bool marginFieldSet = edgesSet.has(YGNodeEdges::MARGIN); - bool paddingFieldSet = edgesSet.has(YGNodeEdges::PADDING); - bool borderFieldSet = edgesSet.has(YGNodeEdges::BORDER); + bool marginFieldSet = edgesSet.has(YGNodeEdges::MARGIN); + bool paddingFieldSet = edgesSet.has(YGNodeEdges::PADDING); + bool borderFieldSet = edgesSet.has(YGNodeEdges::BORDER); - int fieldFlags = edgesSet.get(); - fieldFlags |= HAS_NEW_LAYOUT; - if (YGNodeLayoutGetDidLegacyStretchFlagAffectLayout(root)) { - fieldFlags |= DOES_LEGACY_STRETCH_BEHAVIOUR; - } - - const int arrSize = 6 + (marginFieldSet ? 4 : 0) + - (paddingFieldSet ? 4 : 0) + (borderFieldSet ? 4 : 0); - float arr[18]; - arr[LAYOUT_EDGE_SET_FLAG_INDEX] = fieldFlags; - arr[LAYOUT_WIDTH_INDEX] = YGNodeLayoutGetWidth(root); - arr[LAYOUT_HEIGHT_INDEX] = YGNodeLayoutGetHeight(root); - arr[LAYOUT_LEFT_INDEX] = YGNodeLayoutGetLeft(root); - arr[LAYOUT_TOP_INDEX] = YGNodeLayoutGetTop(root); - arr[LAYOUT_DIRECTION_INDEX] = - static_cast(YGNodeLayoutGetDirection(root)); - if (marginFieldSet) { - arr[LAYOUT_MARGIN_START_INDEX] = YGNodeLayoutGetMargin(root, YGEdgeLeft); - arr[LAYOUT_MARGIN_START_INDEX + 1] = - YGNodeLayoutGetMargin(root, YGEdgeTop); - arr[LAYOUT_MARGIN_START_INDEX + 2] = - YGNodeLayoutGetMargin(root, YGEdgeRight); - arr[LAYOUT_MARGIN_START_INDEX + 3] = - YGNodeLayoutGetMargin(root, YGEdgeBottom); - } - if (paddingFieldSet) { - int paddingStartIndex = - LAYOUT_PADDING_START_INDEX - (marginFieldSet ? 0 : 4); - arr[paddingStartIndex] = YGNodeLayoutGetPadding(root, YGEdgeLeft); - arr[paddingStartIndex + 1] = YGNodeLayoutGetPadding(root, YGEdgeTop); - arr[paddingStartIndex + 2] = YGNodeLayoutGetPadding(root, YGEdgeRight); - arr[paddingStartIndex + 3] = YGNodeLayoutGetPadding(root, YGEdgeBottom); - } - - if (borderFieldSet) { - int borderStartIndex = LAYOUT_BORDER_START_INDEX - - (marginFieldSet ? 0 : 4) - (paddingFieldSet ? 0 : 4); - arr[borderStartIndex] = YGNodeLayoutGetBorder(root, YGEdgeLeft); - arr[borderStartIndex + 1] = YGNodeLayoutGetBorder(root, YGEdgeTop); - arr[borderStartIndex + 2] = YGNodeLayoutGetBorder(root, YGEdgeRight); - arr[borderStartIndex + 3] = YGNodeLayoutGetBorder(root, YGEdgeBottom); - } - - static auto arrField = obj->getClass()->getField("arr"); - local_ref arrFinal = make_float_array(arrSize); - arrFinal->setRegion(0, arrSize, arr); - obj->setFieldValue(arrField, arrFinal.get()); - - } else { - static auto widthField = obj->getClass()->getField("mWidth"); - static auto heightField = obj->getClass()->getField("mHeight"); - static auto leftField = obj->getClass()->getField("mLeft"); - static auto topField = obj->getClass()->getField("mTop"); - - static auto marginLeftField = - obj->getClass()->getField("mMarginLeft"); - static auto marginTopField = - obj->getClass()->getField("mMarginTop"); - static auto marginRightField = - obj->getClass()->getField("mMarginRight"); - static auto marginBottomField = - obj->getClass()->getField("mMarginBottom"); - - static auto paddingLeftField = - obj->getClass()->getField("mPaddingLeft"); - static auto paddingTopField = - obj->getClass()->getField("mPaddingTop"); - static auto paddingRightField = - obj->getClass()->getField("mPaddingRight"); - static auto paddingBottomField = - obj->getClass()->getField("mPaddingBottom"); - - static auto borderLeftField = - obj->getClass()->getField("mBorderLeft"); - static auto borderTopField = - obj->getClass()->getField("mBorderTop"); - static auto borderRightField = - obj->getClass()->getField("mBorderRight"); - static auto borderBottomField = - obj->getClass()->getField("mBorderBottom"); - - static auto hasNewLayoutField = - obj->getClass()->getField("mHasNewLayout"); - static auto doesLegacyStretchBehaviour = - obj->getClass()->getField( - "mDoesLegacyStretchFlagAffectsLayout"); - - obj->setFieldValue(widthField, YGNodeLayoutGetWidth(root)); - obj->setFieldValue(heightField, YGNodeLayoutGetHeight(root)); - obj->setFieldValue(leftField, YGNodeLayoutGetLeft(root)); - obj->setFieldValue(topField, YGNodeLayoutGetTop(root)); - obj->setFieldValue( - doesLegacyStretchBehaviour, - YGNodeLayoutGetDidLegacyStretchFlagAffectLayout(root)); - obj->setFieldValue(hasNewLayoutField, true); - YGTransferLayoutDirection(root, obj); - - if (edgesSet.has(YGNodeEdges::MARGIN)) { - obj->setFieldValue( - marginLeftField, YGNodeLayoutGetMargin(root, YGEdgeLeft)); - obj->setFieldValue( - marginTopField, YGNodeLayoutGetMargin(root, YGEdgeTop)); - obj->setFieldValue( - marginRightField, YGNodeLayoutGetMargin(root, YGEdgeRight)); - obj->setFieldValue( - marginBottomField, YGNodeLayoutGetMargin(root, YGEdgeBottom)); - } - - if (edgesSet.has(YGNodeEdges::PADDING)) { - obj->setFieldValue( - paddingLeftField, YGNodeLayoutGetPadding(root, YGEdgeLeft)); - obj->setFieldValue( - paddingTopField, YGNodeLayoutGetPadding(root, YGEdgeTop)); - obj->setFieldValue( - paddingRightField, YGNodeLayoutGetPadding(root, YGEdgeRight)); - obj->setFieldValue( - paddingBottomField, YGNodeLayoutGetPadding(root, YGEdgeBottom)); - } - - if (edgesSet.has(YGNodeEdges::BORDER)) { - obj->setFieldValue( - borderLeftField, YGNodeLayoutGetBorder(root, YGEdgeLeft)); - obj->setFieldValue( - borderTopField, YGNodeLayoutGetBorder(root, YGEdgeTop)); - obj->setFieldValue( - borderRightField, YGNodeLayoutGetBorder(root, YGEdgeRight)); - obj->setFieldValue( - borderBottomField, YGNodeLayoutGetBorder(root, YGEdgeBottom)); - } + int fieldFlags = edgesSet.get(); + fieldFlags |= HAS_NEW_LAYOUT; + if (YGNodeLayoutGetDidLegacyStretchFlagAffectLayout(root)) { + fieldFlags |= DOES_LEGACY_STRETCH_BEHAVIOUR; } + const int arrSize = 6 + (marginFieldSet ? 4 : 0) + (paddingFieldSet ? 4 : 0) + + (borderFieldSet ? 4 : 0); + float arr[18]; + arr[LAYOUT_EDGE_SET_FLAG_INDEX] = fieldFlags; + arr[LAYOUT_WIDTH_INDEX] = YGNodeLayoutGetWidth(root); + arr[LAYOUT_HEIGHT_INDEX] = YGNodeLayoutGetHeight(root); + arr[LAYOUT_LEFT_INDEX] = YGNodeLayoutGetLeft(root); + arr[LAYOUT_TOP_INDEX] = YGNodeLayoutGetTop(root); + arr[LAYOUT_DIRECTION_INDEX] = + static_cast(YGNodeLayoutGetDirection(root)); + if (marginFieldSet) { + arr[LAYOUT_MARGIN_START_INDEX] = YGNodeLayoutGetMargin(root, YGEdgeLeft); + arr[LAYOUT_MARGIN_START_INDEX + 1] = YGNodeLayoutGetMargin(root, YGEdgeTop); + arr[LAYOUT_MARGIN_START_INDEX + 2] = + YGNodeLayoutGetMargin(root, YGEdgeRight); + arr[LAYOUT_MARGIN_START_INDEX + 3] = + YGNodeLayoutGetMargin(root, YGEdgeBottom); + } + if (paddingFieldSet) { + int paddingStartIndex = + LAYOUT_PADDING_START_INDEX - (marginFieldSet ? 0 : 4); + arr[paddingStartIndex] = YGNodeLayoutGetPadding(root, YGEdgeLeft); + arr[paddingStartIndex + 1] = YGNodeLayoutGetPadding(root, YGEdgeTop); + arr[paddingStartIndex + 2] = YGNodeLayoutGetPadding(root, YGEdgeRight); + arr[paddingStartIndex + 3] = YGNodeLayoutGetPadding(root, YGEdgeBottom); + } + + if (borderFieldSet) { + int borderStartIndex = LAYOUT_BORDER_START_INDEX - + (marginFieldSet ? 0 : 4) - (paddingFieldSet ? 0 : 4); + arr[borderStartIndex] = YGNodeLayoutGetBorder(root, YGEdgeLeft); + arr[borderStartIndex + 1] = YGNodeLayoutGetBorder(root, YGEdgeTop); + arr[borderStartIndex + 2] = YGNodeLayoutGetBorder(root, YGEdgeRight); + arr[borderStartIndex + 3] = YGNodeLayoutGetBorder(root, YGEdgeBottom); + } + + static auto arrField = obj->getClass()->getField("arr"); + local_ref arrFinal = make_float_array(arrSize); + arrFinal->setRegion(0, arrSize, arr); + obj->setFieldValue(arrField, arrFinal.get()); + root->setHasNewLayout(false); for (uint32_t i = 0; i < YGNodeGetChildCount(root); i++) { @@ -410,21 +323,16 @@ static int YGJNILogFunc( return result; } -jlong jni_YGNodeNew(alias_ref thiz, jboolean useBatching) { +jlong jni_YGNodeNew(alias_ref thiz) { const YGNodeRef node = YGNodeNew(); node->setContext(YGNodeContext{}.asVoidPtr); node->setPrintFunc(YGPrint); - useBatchingForLayoutOutputs = useBatching; return reinterpret_cast(node); } -jlong jni_YGNodeNewWithConfig( - alias_ref, - jlong configPointer, - jboolean useBatching) { +jlong jni_YGNodeNewWithConfig(alias_ref, jlong configPointer) { const YGNodeRef node = YGNodeNewWithConfig(_jlong2YGConfigRef(configPointer)); node->setContext(YGNodeContext{}.asVoidPtr); - useBatchingForLayoutOutputs = useBatching; return reinterpret_cast(node); } From d676d917e3a08ad6a6f9c62fb63ed9d4889c8bc7 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 15 Jul 2019 11:09:05 -0700 Subject: [PATCH 118/347] moved all yoga node jni batching code to YogaNodeJNIBase and removed subclasses Summary: Removed classes YogaNodeJNI and YogaNodeJNIBatching and all the logic have been moved to base class Reviewed By: davidaurelio Differential Revision: D16221484 fbshipit-source-id: 830819f5bc6010291b8bc0c6d90897cea991909f --- java/com/facebook/yoga/YogaNode.java | 4 +- java/com/facebook/yoga/YogaNodeJNI.java | 186 ------------------ java/com/facebook/yoga/YogaNodeJNIBase.java | 152 +++++++++++++- .../facebook/yoga/YogaNodeJNIBatching.java | 177 ----------------- 4 files changed, 151 insertions(+), 368 deletions(-) delete mode 100644 java/com/facebook/yoga/YogaNodeJNI.java delete mode 100644 java/com/facebook/yoga/YogaNodeJNIBatching.java diff --git a/java/com/facebook/yoga/YogaNode.java b/java/com/facebook/yoga/YogaNode.java index 42a5bd8d..1c75d1d6 100644 --- a/java/com/facebook/yoga/YogaNode.java +++ b/java/com/facebook/yoga/YogaNode.java @@ -10,11 +10,11 @@ import javax.annotation.Nullable; public abstract class YogaNode { public static YogaNode create() { - return new YogaNodeJNIBatching(); + return new YogaNodeJNIBase(); } public static YogaNode create(YogaConfig config) { - return new YogaNodeJNIBatching(config); + return new YogaNodeJNIBase(config); } public abstract void reset(); diff --git a/java/com/facebook/yoga/YogaNodeJNI.java b/java/com/facebook/yoga/YogaNodeJNI.java deleted file mode 100644 index d2a9357b..00000000 --- a/java/com/facebook/yoga/YogaNodeJNI.java +++ /dev/null @@ -1,186 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -package com.facebook.yoga; - -import com.facebook.proguard.annotations.DoNotStrip; - -@DoNotStrip -public class YogaNodeJNI extends YogaNodeJNIBase { - - @DoNotStrip - private float mWidth = YogaConstants.UNDEFINED; - @DoNotStrip - private float mHeight = YogaConstants.UNDEFINED; - @DoNotStrip - private float mTop = YogaConstants.UNDEFINED; - @DoNotStrip - private float mLeft = YogaConstants.UNDEFINED; - @DoNotStrip - private float mMarginLeft = 0; - @DoNotStrip - private float mMarginTop = 0; - @DoNotStrip - private float mMarginRight = 0; - @DoNotStrip - private float mMarginBottom = 0; - @DoNotStrip - private float mPaddingLeft = 0; - @DoNotStrip - private float mPaddingTop = 0; - @DoNotStrip - private float mPaddingRight = 0; - @DoNotStrip - private float mPaddingBottom = 0; - @DoNotStrip - private float mBorderLeft = 0; - @DoNotStrip - private float mBorderTop = 0; - @DoNotStrip - private float mBorderRight = 0; - @DoNotStrip - private float mBorderBottom = 0; - @DoNotStrip - private int mLayoutDirection = 0; - @DoNotStrip - private boolean mHasNewLayout = true; - @DoNotStrip - private boolean mDoesLegacyStretchFlagAffectsLayout = false; - - public YogaNodeJNI() { - super(); - } - - public YogaNodeJNI(YogaConfig config) { - super(config); - } - - @Override - public void reset() { - super.reset(); - mHasNewLayout = true; - - mWidth = YogaConstants.UNDEFINED; - mHeight = YogaConstants.UNDEFINED; - mTop = YogaConstants.UNDEFINED; - mLeft = YogaConstants.UNDEFINED; - mMarginLeft = 0; - mMarginTop = 0; - mMarginRight = 0; - mMarginBottom = 0; - mPaddingLeft = 0; - mPaddingTop = 0; - mPaddingRight = 0; - mPaddingBottom = 0; - mBorderLeft = 0; - mBorderTop = 0; - mBorderRight = 0; - mBorderBottom = 0; - mLayoutDirection = 0; - - mDoesLegacyStretchFlagAffectsLayout = false; - } - - @Override - public boolean hasNewLayout() { - return mHasNewLayout; - } - - @Override - public void markLayoutSeen() { - mHasNewLayout = false; - } - - @Override - public float getLayoutX() { - return mLeft; - } - - @Override - public float getLayoutY() { - return mTop; - } - - @Override - public float getLayoutWidth() { - return mWidth; - } - - @Override - public float getLayoutHeight() { - return mHeight; - } - - @Override - public boolean getDoesLegacyStretchFlagAffectsLayout() { - return mDoesLegacyStretchFlagAffectsLayout; - } - - @Override - public float getLayoutMargin(YogaEdge edge) { - switch (edge) { - case LEFT: - return mMarginLeft; - case TOP: - return mMarginTop; - case RIGHT: - return mMarginRight; - case BOTTOM: - return mMarginBottom; - case START: - return getLayoutDirection() == YogaDirection.RTL ? mMarginRight : mMarginLeft; - case END: - return getLayoutDirection() == YogaDirection.RTL ? mMarginLeft : mMarginRight; - default: - throw new IllegalArgumentException("Cannot get layout margins of multi-edge shorthands"); - } - } - - @Override - public float getLayoutPadding(YogaEdge edge) { - switch (edge) { - case LEFT: - return mPaddingLeft; - case TOP: - return mPaddingTop; - case RIGHT: - return mPaddingRight; - case BOTTOM: - return mPaddingBottom; - case START: - return getLayoutDirection() == YogaDirection.RTL ? mPaddingRight : mPaddingLeft; - case END: - return getLayoutDirection() == YogaDirection.RTL ? mPaddingLeft : mPaddingRight; - default: - throw new IllegalArgumentException("Cannot get layout paddings of multi-edge shorthands"); - } - } - - @Override - public float getLayoutBorder(YogaEdge edge) { - switch (edge) { - case LEFT: - return mBorderLeft; - case TOP: - return mBorderTop; - case RIGHT: - return mBorderRight; - case BOTTOM: - return mBorderBottom; - case START: - return getLayoutDirection() == YogaDirection.RTL ? mBorderRight : mBorderLeft; - case END: - return getLayoutDirection() == YogaDirection.RTL ? mBorderLeft : mBorderRight; - default: - throw new IllegalArgumentException("Cannot get layout border of multi-edge shorthands"); - } - } - - @Override - public YogaDirection getLayoutDirection() { - return YogaDirection.fromInt(mLayoutDirection); - } -} diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index 0d9500ce..3fc4c0ad 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -12,7 +12,24 @@ import java.util.List; import javax.annotation.Nullable; @DoNotStrip -public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { +public class YogaNodeJNIBase extends YogaNode implements Cloneable { + + /* Those flags needs be in sync with YGJNI.cpp */ + private static final byte MARGIN = 1; + private static final byte PADDING = 2; + private static final byte BORDER = 4; + private static final byte DOES_LEGACY_STRETCH_BEHAVIOUR = 8; + private static final byte HAS_NEW_LAYOUT = 16; + + private static final byte LAYOUT_EDGE_SET_FLAG_INDEX = 0; + private static final byte LAYOUT_WIDTH_INDEX = 1; + private static final byte LAYOUT_HEIGHT_INDEX = 2; + private static final byte LAYOUT_LEFT_INDEX = 3; + private static final byte LAYOUT_TOP_INDEX = 4; + private static final byte LAYOUT_DIRECTION_INDEX = 5; + private static final byte LAYOUT_MARGIN_START_INDEX = 6; + private static final byte LAYOUT_PADDING_START_INDEX = 10; + private static final byte LAYOUT_BORDER_START_INDEX = 14; @Nullable private YogaNodeJNIBase mOwner; @Nullable private List mChildren; @@ -21,6 +38,14 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { private long mNativePointer; @Nullable private Object mData; + @DoNotStrip + private @Nullable float[] arr = null; + + @DoNotStrip + private int mLayoutDirection = 0; + + private boolean mHasNewLayout = true; + public YogaNodeJNIBase() { mNativePointer = YogaNative.jni_YGNodeNew(); if (mNativePointer == 0) { @@ -56,6 +81,9 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { mMeasureFunction = null; mBaselineFunction = null; mData = null; + arr = null; + mHasNewLayout = true; + mLayoutDirection = 0; YogaNative.jni_YGNodeReset(mNativePointer); } @@ -443,8 +471,6 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { YogaNative.jni_YGNodeStyleSetAspectRatio(mNativePointer, aspectRatio); } - public abstract boolean getDoesLegacyStretchFlagAffectsLayout(); - public void setMeasureFunction(YogaMeasureFunction measureFunction) { mMeasureFunction = measureFunction; YogaNative.jni_YGNodeSetHasMeasureFunc(mNativePointer, measureFunction != null); @@ -530,4 +556,124 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { private static YogaValue valueFromLong(long raw) { return new YogaValue(Float.intBitsToFloat((int) raw), (int) (raw >> 32)); } + + @Override + public float getLayoutX() { + return arr != null ? arr[LAYOUT_LEFT_INDEX] : 0; + } + + @Override + public float getLayoutY() { + return arr != null ? arr[LAYOUT_TOP_INDEX] : 0; + } + + @Override + public float getLayoutWidth() { + return arr != null ? arr[LAYOUT_WIDTH_INDEX] : 0; + } + + @Override + public float getLayoutHeight() { + return arr != null ? arr[LAYOUT_HEIGHT_INDEX] : 0; + } + + public boolean getDoesLegacyStretchFlagAffectsLayout() { + return arr != null && (((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & DOES_LEGACY_STRETCH_BEHAVIOUR) == DOES_LEGACY_STRETCH_BEHAVIOUR); + } + + @Override + public float getLayoutMargin(YogaEdge edge) { + if (arr != null && ((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & MARGIN) == MARGIN) { + switch (edge) { + case LEFT: + return arr[LAYOUT_MARGIN_START_INDEX]; + case TOP: + return arr[LAYOUT_MARGIN_START_INDEX + 1]; + case RIGHT: + return arr[LAYOUT_MARGIN_START_INDEX + 2]; + case BOTTOM: + return arr[LAYOUT_MARGIN_START_INDEX + 3]; + case START: + return getLayoutDirection() == YogaDirection.RTL ? arr[LAYOUT_MARGIN_START_INDEX + 2] : arr[LAYOUT_MARGIN_START_INDEX]; + case END: + return getLayoutDirection() == YogaDirection.RTL ? arr[LAYOUT_MARGIN_START_INDEX] : arr[LAYOUT_MARGIN_START_INDEX + 2]; + default: + throw new IllegalArgumentException("Cannot get layout margins of multi-edge shorthands"); + } + } else { + return 0; + } + } + + @Override + public float getLayoutPadding(YogaEdge edge) { + if (arr != null && ((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & PADDING) == PADDING) { + int paddingStartIndex = LAYOUT_PADDING_START_INDEX - ((((int)arr[LAYOUT_EDGE_SET_FLAG_INDEX] & MARGIN) == MARGIN) ? 0 : 4); + switch (edge) { + case LEFT: + return arr[paddingStartIndex]; + case TOP: + return arr[paddingStartIndex + 1]; + case RIGHT: + return arr[paddingStartIndex + 2]; + case BOTTOM: + return arr[paddingStartIndex + 3]; + case START: + return getLayoutDirection() == YogaDirection.RTL ? arr[paddingStartIndex + 2] : arr[paddingStartIndex]; + case END: + return getLayoutDirection() == YogaDirection.RTL ? arr[paddingStartIndex] : arr[paddingStartIndex + 2]; + default: + throw new IllegalArgumentException("Cannot get layout paddings of multi-edge shorthands"); + } + } else { + return 0; + } + } + + @Override + public float getLayoutBorder(YogaEdge edge) { + if (arr != null && ((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & BORDER) == BORDER) { + int borderStartIndex = LAYOUT_BORDER_START_INDEX - ((((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & MARGIN) == MARGIN) ? 0 : 4) - ((((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & PADDING) == PADDING) ? 0 : 4); + switch (edge) { + case LEFT: + return arr[borderStartIndex]; + case TOP: + return arr[borderStartIndex + 1]; + case RIGHT: + return arr[borderStartIndex + 2]; + case BOTTOM: + return arr[borderStartIndex + 3]; + case START: + return getLayoutDirection() == YogaDirection.RTL ? arr[borderStartIndex + 2] : arr[borderStartIndex]; + case END: + return getLayoutDirection() == YogaDirection.RTL ? arr[borderStartIndex] : arr[borderStartIndex + 2]; + default: + throw new IllegalArgumentException("Cannot get layout border of multi-edge shorthands"); + } + } else { + return 0; + } + } + + @Override + public YogaDirection getLayoutDirection() { + return YogaDirection.fromInt(arr != null ? (int) arr[LAYOUT_DIRECTION_INDEX] : mLayoutDirection); + } + + @Override + public boolean hasNewLayout() { + if (arr != null) { + return (((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX]) & HAS_NEW_LAYOUT) == HAS_NEW_LAYOUT; + } else { + return mHasNewLayout; + } + } + + @Override + public void markLayoutSeen() { + if (arr != null) { + arr[LAYOUT_EDGE_SET_FLAG_INDEX] = ((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX]) & ~(HAS_NEW_LAYOUT); + } + mHasNewLayout = false; + } } diff --git a/java/com/facebook/yoga/YogaNodeJNIBatching.java b/java/com/facebook/yoga/YogaNodeJNIBatching.java deleted file mode 100644 index 7760fa80..00000000 --- a/java/com/facebook/yoga/YogaNodeJNIBatching.java +++ /dev/null @@ -1,177 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -package com.facebook.yoga; - -import javax.annotation.Nullable; - -import com.facebook.proguard.annotations.DoNotStrip; - -@DoNotStrip -public class YogaNodeJNIBatching extends YogaNodeJNIBase { - - /* Those flags needs be in sync with YGJNI.cpp */ - private static final byte MARGIN = 1; - private static final byte PADDING = 2; - private static final byte BORDER = 4; - private static final byte DOES_LEGACY_STRETCH_BEHAVIOUR = 8; - private static final byte HAS_NEW_LAYOUT = 16; - - private static final byte LAYOUT_EDGE_SET_FLAG_INDEX = 0; - private static final byte LAYOUT_WIDTH_INDEX = 1; - private static final byte LAYOUT_HEIGHT_INDEX = 2; - private static final byte LAYOUT_LEFT_INDEX = 3; - private static final byte LAYOUT_TOP_INDEX = 4; - private static final byte LAYOUT_DIRECTION_INDEX = 5; - private static final byte LAYOUT_MARGIN_START_INDEX = 6; - private static final byte LAYOUT_PADDING_START_INDEX = 10; - private static final byte LAYOUT_BORDER_START_INDEX = 14; - - @DoNotStrip - private @Nullable float[] arr = null; - - @DoNotStrip - private int mLayoutDirection = 0; - - private boolean mHasNewLayout = true; - - public YogaNodeJNIBatching() { - super(); - } - - public YogaNodeJNIBatching(YogaConfig config) { - super(config); - } - - @Override - public void reset() { - super.reset(); - arr = null; - mHasNewLayout = true; - mLayoutDirection = 0; - } - - @Override - public float getLayoutX() { - return arr != null ? arr[LAYOUT_LEFT_INDEX] : 0; - } - - @Override - public float getLayoutY() { - return arr != null ? arr[LAYOUT_TOP_INDEX] : 0; - } - - @Override - public float getLayoutWidth() { - return arr != null ? arr[LAYOUT_WIDTH_INDEX] : 0; - } - - @Override - public float getLayoutHeight() { - return arr != null ? arr[LAYOUT_HEIGHT_INDEX] : 0; - } - - @Override - public boolean getDoesLegacyStretchFlagAffectsLayout() { - return arr != null && (((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & DOES_LEGACY_STRETCH_BEHAVIOUR) == DOES_LEGACY_STRETCH_BEHAVIOUR); - } - - @Override - public float getLayoutMargin(YogaEdge edge) { - if (arr != null && ((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & MARGIN) == MARGIN) { - switch (edge) { - case LEFT: - return arr[LAYOUT_MARGIN_START_INDEX]; - case TOP: - return arr[LAYOUT_MARGIN_START_INDEX + 1]; - case RIGHT: - return arr[LAYOUT_MARGIN_START_INDEX + 2]; - case BOTTOM: - return arr[LAYOUT_MARGIN_START_INDEX + 3]; - case START: - return getLayoutDirection() == YogaDirection.RTL ? arr[LAYOUT_MARGIN_START_INDEX + 2] : arr[LAYOUT_MARGIN_START_INDEX]; - case END: - return getLayoutDirection() == YogaDirection.RTL ? arr[LAYOUT_MARGIN_START_INDEX] : arr[LAYOUT_MARGIN_START_INDEX + 2]; - default: - throw new IllegalArgumentException("Cannot get layout margins of multi-edge shorthands"); - } - } else { - return 0; - } - } - - @Override - public float getLayoutPadding(YogaEdge edge) { - if (arr != null && ((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & PADDING) == PADDING) { - int paddingStartIndex = LAYOUT_PADDING_START_INDEX - ((((int)arr[LAYOUT_EDGE_SET_FLAG_INDEX] & MARGIN) == MARGIN) ? 0 : 4); - switch (edge) { - case LEFT: - return arr[paddingStartIndex]; - case TOP: - return arr[paddingStartIndex + 1]; - case RIGHT: - return arr[paddingStartIndex + 2]; - case BOTTOM: - return arr[paddingStartIndex + 3]; - case START: - return getLayoutDirection() == YogaDirection.RTL ? arr[paddingStartIndex + 2] : arr[paddingStartIndex]; - case END: - return getLayoutDirection() == YogaDirection.RTL ? arr[paddingStartIndex] : arr[paddingStartIndex + 2]; - default: - throw new IllegalArgumentException("Cannot get layout paddings of multi-edge shorthands"); - } - } else { - return 0; - } - } - - @Override - public float getLayoutBorder(YogaEdge edge) { - if (arr != null && ((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & BORDER) == BORDER) { - int borderStartIndex = LAYOUT_BORDER_START_INDEX - ((((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & MARGIN) == MARGIN) ? 0 : 4) - ((((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & PADDING) == PADDING) ? 0 : 4); - switch (edge) { - case LEFT: - return arr[borderStartIndex]; - case TOP: - return arr[borderStartIndex + 1]; - case RIGHT: - return arr[borderStartIndex + 2]; - case BOTTOM: - return arr[borderStartIndex + 3]; - case START: - return getLayoutDirection() == YogaDirection.RTL ? arr[borderStartIndex + 2] : arr[borderStartIndex]; - case END: - return getLayoutDirection() == YogaDirection.RTL ? arr[borderStartIndex] : arr[borderStartIndex + 2]; - default: - throw new IllegalArgumentException("Cannot get layout border of multi-edge shorthands"); - } - } else { - return 0; - } - } - - @Override - public YogaDirection getLayoutDirection() { - return YogaDirection.fromInt(arr != null ? (int) arr[LAYOUT_DIRECTION_INDEX] : mLayoutDirection); - } - - @Override - public boolean hasNewLayout() { - if (arr != null) { - return (((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX]) & HAS_NEW_LAYOUT) == HAS_NEW_LAYOUT; - } else { - return mHasNewLayout; - } - } - - @Override - public void markLayoutSeen() { - if (arr != null) { - arr[LAYOUT_EDGE_SET_FLAG_INDEX] = ((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX]) & ~(HAS_NEW_LAYOUT); - } - mHasNewLayout = false; - } -} From be305b5d0f35bf8b9c43e79910bb912948280657 Mon Sep 17 00:00:00 2001 From: Amir Shalem Date: Wed, 17 Jul 2019 03:29:42 -0700 Subject: [PATCH 119/347] Rename fbjni shared library name to the standard soname Summary: Before we can upgrade to latest fbjni, we need to make sure our shared libraries are named the same. Currently when we compile libfbjni it is named as `liblib_fb_fbjni.so`, where as the regular fbjni is expected to be named as `libfbjni.so` Reviewed By: davidaurelio Differential Revision: D16250801 fbshipit-source-id: 9a7f0f803d7e525985b40a49edcc0e660e9025f5 --- lib/fb/BUCK | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/fb/BUCK b/lib/fb/BUCK index 39294f76..37606023 100644 --- a/lib/fb/BUCK +++ b/lib/fb/BUCK @@ -35,6 +35,7 @@ yoga_cxx_library( "-std=c++11", ], platforms = (ANDROID,), + soname = "libfbjni.$(ext)", visibility = ["PUBLIC"], deps = [ ":ndklog", From 59d680f4e953c60815012c7fa31f23e727471fc3 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Wed, 17 Jul 2019 06:52:55 -0700 Subject: [PATCH 120/347] Upgrade fbjni MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Summary: Upgrades Yoga’s copy of *fbjni* to the latest version. This will enable us - to move from `finalize()` to `PhantomReference` to deallocate native memory, with the potential of making GC more efficient. - to remove the internal dependency to *libfb,* allowing apps without an own dependency to ship less code Reviewed By: passy Differential Revision: D16220924 fbshipit-source-id: e8233fe2b5403946ff51f43cb6def558ded52fda --- java/jni/YGJNI.cpp | 2 +- java/jni/YGJTypes.h | 2 +- lib/fb/BUCK | 1 + lib/fb/src/main/cpp/assert.cpp | 38 -- lib/fb/src/main/cpp/include/fb/ALog.h | 80 ---- lib/fb/src/main/cpp/include/fb/Countable.h | 44 -- .../src/main/cpp/include/fb/ProgramLocation.h | 47 --- lib/fb/src/main/cpp/include/fb/RefPtr.h | 271 ------------ .../main/cpp/include/fb/StaticInitialized.h | 37 -- lib/fb/src/main/cpp/include/fb/ThreadLocal.h | 115 ------ lib/fb/src/main/cpp/include/fb/assert.h | 33 -- lib/fb/src/main/cpp/include/fb/fbjni.h | 21 - .../src/main/cpp/include/fb/fbjni/JThread.h | 36 -- .../cpp/include/fb/fbjni/Registration-inl.h | 206 --------- lib/fb/src/main/cpp/include/fb/log.h | 346 ---------------- lib/fb/src/main/cpp/include/fb/noncopyable.h | 18 - lib/fb/src/main/cpp/include/fb/nonmovable.h | 18 - .../cpp/include/{fb => }/fbjni/ByteBuffer.h | 27 +- .../main/cpp/include/{fb => }/fbjni/Context.h | 8 +- .../main/cpp/include/{fb => }/fbjni/File.h | 4 +- lib/fb/src/main/cpp/include/fbjni/JThread.h | 56 +++ .../include/{fb => }/fbjni/NativeRunnable.h | 4 +- .../cpp/include/fbjni/ReadableByteChannel.h | 22 + .../{fb/fbjni => fbjni/detail}/Boxed.h | 19 +- .../{fb/fbjni => fbjni/detail}/Common.h | 23 +- .../fbjni => fbjni/detail}/CoreClasses-inl.h | 83 ++-- .../{fb/fbjni => fbjni/detail}/CoreClasses.h | 106 +++-- .../{fb => fbjni/detail}/Environment.h | 68 ++- .../{fb/fbjni => fbjni/detail}/Exceptions.h | 31 +- .../{fb/fbjni => fbjni/detail}/Hybrid.h | 95 ++++- .../{fb/fbjni => fbjni/detail}/Iterator-inl.h | 2 +- .../{fb/fbjni => fbjni/detail}/Iterator.h | 0 .../cpp/include/fbjni/detail/JWeakReference.h | 39 ++ .../src/main/cpp/include/fbjni/detail/Log.h | 67 +++ .../{fb/fbjni => fbjni/detail}/Meta-forward.h | 0 .../{fb/fbjni => fbjni/detail}/Meta-inl.h | 93 ++--- .../include/{fb/fbjni => fbjni/detail}/Meta.h | 6 +- .../{fb/fbjni => fbjni/detail}/MetaConvert.h | 35 +- .../detail}/ReferenceAllocators-inl.h | 41 +- .../detail}/ReferenceAllocators.h | 21 +- .../detail}/References-forward.h | 0 .../fbjni => fbjni/detail}/References-inl.h | 47 ++- .../{fb/fbjni => fbjni/detail}/References.h | 31 +- .../include/fbjni/detail/Registration-inl.h | 166 ++++++++ .../{fb/fbjni => fbjni/detail}/Registration.h | 25 +- .../{fb/fbjni => fbjni/detail}/TypeTraits.h | 1 + .../LocalString.h => fbjni/detail/utf8.h} | 36 +- lib/fb/src/main/cpp/include/fbjni/fbjni.h | 22 + lib/fb/src/main/cpp/include/jni/Countable.h | 33 -- .../main/cpp/include/jni/GlobalReference.h | 88 ---- .../src/main/cpp/include/jni/LocalReference.h | 34 -- .../src/main/cpp/include/jni/Registration.h | 24 -- .../src/main/cpp/include/jni/WeakReference.h | 52 --- lib/fb/src/main/cpp/include/jni/jni_helpers.h | 136 ------ .../src/main/cpp/include/{fb => lyra}/lyra.h | 55 ++- .../main/cpp/include/lyra/lyra_exceptions.h | 84 ++++ lib/fb/src/main/cpp/jni/ByteBuffer.cpp | 85 ++-- lib/fb/src/main/cpp/jni/Countable.cpp | 66 --- lib/fb/src/main/cpp/jni/Environment.cpp | 129 ------ lib/fb/src/main/cpp/jni/Exceptions.cpp | 282 ------------- lib/fb/src/main/cpp/jni/Hybrid.cpp | 62 --- lib/fb/src/main/cpp/jni/OnLoad.cpp | 17 +- .../src/main/cpp/jni/ReadableByteChannel.cpp | 21 + lib/fb/src/main/cpp/jni/References.cpp | 38 -- lib/fb/src/main/cpp/jni/WeakReference.cpp | 40 -- .../src/main/cpp/jni/detail/Environment.cpp | 291 +++++++++++++ lib/fb/src/main/cpp/jni/detail/Exceptions.cpp | 390 ++++++++++++++++++ lib/fb/src/main/cpp/jni/detail/Hybrid.cpp | 32 ++ lib/fb/src/main/cpp/jni/detail/References.cpp | 79 ++++ .../jni/{LocalString.cpp => detail/utf8.cpp} | 71 +--- lib/fb/src/main/cpp/jni/fbjni.cpp | 136 +++--- lib/fb/src/main/cpp/jni/jni_helpers.cpp | 194 --------- lib/fb/src/main/cpp/log.cpp | 97 ----- lib/fb/src/main/cpp/lyra/cxa_throw.cpp | 106 +++++ lib/fb/src/main/cpp/lyra/lyra.cpp | 54 ++- lib/fb/src/main/cpp/lyra/lyra_breakpad.cpp | 22 + lib/fb/src/main/cpp/lyra/lyra_exceptions.cpp | 88 ++++ lib/fb/src/main/cpp/onload.cpp | 28 -- .../main/java/com/facebook/jni/Countable.java | 30 -- .../java/com/facebook/jni/CppException.java | 9 +- .../facebook/jni/CppSystemErrorException.java | 9 +- .../com/facebook/jni/DestructorThread.java | 138 +++++++ .../com/facebook/jni/HybridClassBase.java} | 7 +- .../java/com/facebook/jni/HybridData.java | 83 ++-- .../java/com/facebook/jni/IteratorHelper.java | 25 +- .../com/facebook/jni/MapIteratorHelper.java | 23 +- .../java/com/facebook/jni/NativeRunnable.java | 12 +- .../com/facebook/jni/ThreadScopeSupport.java | 15 +- .../com/facebook/jni/UnknownCppException.java | 9 +- .../facebook/jni/annotations/DoNotStrip.java | 23 ++ testutil/jni.cpp | 2 +- 91 files changed, 2512 insertions(+), 3200 deletions(-) delete mode 100644 lib/fb/src/main/cpp/assert.cpp delete mode 100644 lib/fb/src/main/cpp/include/fb/ALog.h delete mode 100644 lib/fb/src/main/cpp/include/fb/Countable.h delete mode 100644 lib/fb/src/main/cpp/include/fb/ProgramLocation.h delete mode 100644 lib/fb/src/main/cpp/include/fb/RefPtr.h delete mode 100644 lib/fb/src/main/cpp/include/fb/StaticInitialized.h delete mode 100644 lib/fb/src/main/cpp/include/fb/ThreadLocal.h delete mode 100644 lib/fb/src/main/cpp/include/fb/assert.h delete mode 100644 lib/fb/src/main/cpp/include/fb/fbjni.h delete mode 100644 lib/fb/src/main/cpp/include/fb/fbjni/JThread.h delete mode 100644 lib/fb/src/main/cpp/include/fb/fbjni/Registration-inl.h delete mode 100644 lib/fb/src/main/cpp/include/fb/log.h delete mode 100644 lib/fb/src/main/cpp/include/fb/noncopyable.h delete mode 100644 lib/fb/src/main/cpp/include/fb/nonmovable.h rename lib/fb/src/main/cpp/include/{fb => }/fbjni/ByteBuffer.h (51%) rename lib/fb/src/main/cpp/include/{fb => }/fbjni/Context.h (72%) rename lib/fb/src/main/cpp/include/{fb => }/fbjni/File.h (82%) create mode 100644 lib/fb/src/main/cpp/include/fbjni/JThread.h rename lib/fb/src/main/cpp/include/{fb => }/fbjni/NativeRunnable.h (92%) create mode 100644 lib/fb/src/main/cpp/include/fbjni/ReadableByteChannel.h rename lib/fb/src/main/cpp/include/{fb/fbjni => fbjni/detail}/Boxed.h (80%) rename lib/fb/src/main/cpp/include/{fb/fbjni => fbjni/detail}/Common.h (78%) rename lib/fb/src/main/cpp/include/{fb/fbjni => fbjni/detail}/CoreClasses-inl.h (87%) rename lib/fb/src/main/cpp/include/{fb/fbjni => fbjni/detail}/CoreClasses.h (88%) rename lib/fb/src/main/cpp/include/{fb => fbjni/detail}/Environment.h (58%) rename lib/fb/src/main/cpp/include/{fb/fbjni => fbjni/detail}/Exceptions.h (79%) rename lib/fb/src/main/cpp/include/{fb/fbjni => fbjni/detail}/Hybrid.h (72%) rename lib/fb/src/main/cpp/include/{fb/fbjni => fbjni/detail}/Iterator-inl.h (98%) rename lib/fb/src/main/cpp/include/{fb/fbjni => fbjni/detail}/Iterator.h (100%) create mode 100644 lib/fb/src/main/cpp/include/fbjni/detail/JWeakReference.h create mode 100644 lib/fb/src/main/cpp/include/fbjni/detail/Log.h rename lib/fb/src/main/cpp/include/{fb/fbjni => fbjni/detail}/Meta-forward.h (100%) rename lib/fb/src/main/cpp/include/{fb/fbjni => fbjni/detail}/Meta-inl.h (85%) rename lib/fb/src/main/cpp/include/{fb/fbjni => fbjni/detail}/Meta.h (98%) rename lib/fb/src/main/cpp/include/{fb/fbjni => fbjni/detail}/MetaConvert.h (68%) rename lib/fb/src/main/cpp/include/{fb/fbjni => fbjni/detail}/ReferenceAllocators-inl.h (73%) rename lib/fb/src/main/cpp/include/{fb/fbjni => fbjni/detail}/ReferenceAllocators.h (75%) rename lib/fb/src/main/cpp/include/{fb/fbjni => fbjni/detail}/References-forward.h (100%) rename lib/fb/src/main/cpp/include/{fb/fbjni => fbjni/detail}/References-inl.h (91%) rename lib/fb/src/main/cpp/include/{fb/fbjni => fbjni/detail}/References.h (96%) create mode 100644 lib/fb/src/main/cpp/include/fbjni/detail/Registration-inl.h rename lib/fb/src/main/cpp/include/{fb/fbjni => fbjni/detail}/Registration.h (90%) rename lib/fb/src/main/cpp/include/{fb/fbjni => fbjni/detail}/TypeTraits.h (99%) rename lib/fb/src/main/cpp/include/{jni/LocalString.h => fbjni/detail/utf8.h} (77%) create mode 100644 lib/fb/src/main/cpp/include/fbjni/fbjni.h delete mode 100644 lib/fb/src/main/cpp/include/jni/Countable.h delete mode 100644 lib/fb/src/main/cpp/include/jni/GlobalReference.h delete mode 100644 lib/fb/src/main/cpp/include/jni/LocalReference.h delete mode 100644 lib/fb/src/main/cpp/include/jni/Registration.h delete mode 100644 lib/fb/src/main/cpp/include/jni/WeakReference.h delete mode 100644 lib/fb/src/main/cpp/include/jni/jni_helpers.h rename lib/fb/src/main/cpp/include/{fb => lyra}/lyra.h (75%) create mode 100644 lib/fb/src/main/cpp/include/lyra/lyra_exceptions.h delete mode 100644 lib/fb/src/main/cpp/jni/Countable.cpp delete mode 100644 lib/fb/src/main/cpp/jni/Environment.cpp delete mode 100644 lib/fb/src/main/cpp/jni/Exceptions.cpp delete mode 100644 lib/fb/src/main/cpp/jni/Hybrid.cpp create mode 100644 lib/fb/src/main/cpp/jni/ReadableByteChannel.cpp delete mode 100644 lib/fb/src/main/cpp/jni/References.cpp delete mode 100644 lib/fb/src/main/cpp/jni/WeakReference.cpp create mode 100644 lib/fb/src/main/cpp/jni/detail/Environment.cpp create mode 100644 lib/fb/src/main/cpp/jni/detail/Exceptions.cpp create mode 100644 lib/fb/src/main/cpp/jni/detail/Hybrid.cpp create mode 100644 lib/fb/src/main/cpp/jni/detail/References.cpp rename lib/fb/src/main/cpp/jni/{LocalString.cpp => detail/utf8.cpp} (78%) delete mode 100644 lib/fb/src/main/cpp/jni/jni_helpers.cpp delete mode 100644 lib/fb/src/main/cpp/log.cpp create mode 100644 lib/fb/src/main/cpp/lyra/cxa_throw.cpp create mode 100644 lib/fb/src/main/cpp/lyra/lyra_breakpad.cpp create mode 100644 lib/fb/src/main/cpp/lyra/lyra_exceptions.cpp delete mode 100644 lib/fb/src/main/cpp/onload.cpp delete mode 100644 lib/fb/src/main/java/com/facebook/jni/Countable.java create mode 100644 lib/fb/src/main/java/com/facebook/jni/DestructorThread.java rename lib/fb/src/main/{cpp/include/fb/visibility.h => java/com/facebook/jni/HybridClassBase.java} (56%) create mode 100644 lib/fb/src/main/java/com/facebook/jni/annotations/DoNotStrip.java diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp index 4e75d17c..6a1a790a 100644 --- a/java/jni/YGJNI.cpp +++ b/java/jni/YGJNI.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ -#include +#include #include #include #include diff --git a/java/jni/YGJTypes.h b/java/jni/YGJTypes.h index bd8e6c7b..dfc0901b 100644 --- a/java/jni/YGJTypes.h +++ b/java/jni/YGJTypes.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ -#include +#include #include #include #include diff --git a/lib/fb/BUCK b/lib/fb/BUCK index 37606023..d078c1b6 100644 --- a/lib/fb/BUCK +++ b/lib/fb/BUCK @@ -32,6 +32,7 @@ yoga_cxx_library( "-Wall", "-Werror", "-Wno-unused-parameter", + "-Wno-unused-variable", "-std=c++11", ], platforms = (ANDROID,), diff --git a/lib/fb/src/main/cpp/assert.cpp b/lib/fb/src/main/cpp/assert.cpp deleted file mode 100644 index be64e787..00000000 --- a/lib/fb/src/main/cpp/assert.cpp +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#include -#include - -#include -#include - -namespace facebook { - -#define ASSERT_BUF_SIZE 4096 -static char sAssertBuf[ASSERT_BUF_SIZE]; -static AssertHandler gAssertHandler; - -void assertInternal(const char* formatstr ...) { - va_list va_args; - va_start(va_args, formatstr); - vsnprintf(sAssertBuf, sizeof(sAssertBuf), formatstr, va_args); - va_end(va_args); - if (gAssertHandler != NULL) { - gAssertHandler(sAssertBuf); - } - FBLOG(LOG_FATAL, "fbassert", "%s", sAssertBuf); - // crash at this specific address so that we can find our crashes easier - *(int*)0xdeadb00c = 0; - // let the compiler know we won't reach the end of the function - __builtin_unreachable(); -} - -void setAssertHandler(AssertHandler assertHandler) { - gAssertHandler = assertHandler; -} - -} // namespace facebook diff --git a/lib/fb/src/main/cpp/include/fb/ALog.h b/lib/fb/src/main/cpp/include/fb/ALog.h deleted file mode 100644 index 6ea846ee..00000000 --- a/lib/fb/src/main/cpp/include/fb/ALog.h +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -/** @file ALog.h - * - * Very simple android only logging. Define LOG_TAG to enable the macros. - */ - -#pragma once - -#ifdef __ANDROID__ - -#include - -namespace facebook { -namespace alog { - -template -inline void log(int level, const char* tag, const char* msg, ARGS... args) noexcept { - __android_log_print(level, tag, msg, args...); -} - -template -inline void log(int level, const char* tag, const char* msg) noexcept { - __android_log_write(level, tag, msg); -} - -template -inline void logv(const char* tag, const char* msg, ARGS... args) noexcept { - log(ANDROID_LOG_VERBOSE, tag, msg, args...); -} - -template -inline void logd(const char* tag, const char* msg, ARGS... args) noexcept { - log(ANDROID_LOG_DEBUG, tag, msg, args...); -} - -template -inline void logi(const char* tag, const char* msg, ARGS... args) noexcept { - log(ANDROID_LOG_INFO, tag, msg, args...); -} - -template -inline void logw(const char* tag, const char* msg, ARGS... args) noexcept { - log(ANDROID_LOG_WARN, tag, msg, args...); -} - -template -inline void loge(const char* tag, const char* msg, ARGS... args) noexcept { - log(ANDROID_LOG_ERROR, tag, msg, args...); -} - -template -inline void logf(const char* tag, const char* msg, ARGS... args) noexcept { - log(ANDROID_LOG_FATAL, tag, msg, args...); -} - - -#ifdef LOG_TAG -# define ALOGV(...) ::facebook::alog::logv(LOG_TAG, __VA_ARGS__) -# define ALOGD(...) ::facebook::alog::logd(LOG_TAG, __VA_ARGS__) -# define ALOGI(...) ::facebook::alog::logi(LOG_TAG, __VA_ARGS__) -# define ALOGW(...) ::facebook::alog::logw(LOG_TAG, __VA_ARGS__) -# define ALOGE(...) ::facebook::alog::loge(LOG_TAG, __VA_ARGS__) -# define ALOGF(...) ::facebook::alog::logf(LOG_TAG, __VA_ARGS__) -#endif - -}} - -#else -# define ALOGV(...) ((void)0) -# define ALOGD(...) ((void)0) -# define ALOGI(...) ((void)0) -# define ALOGW(...) ((void)0) -# define ALOGE(...) ((void)0) -# define ALOGF(...) ((void)0) -#endif diff --git a/lib/fb/src/main/cpp/include/fb/Countable.h b/lib/fb/src/main/cpp/include/fb/Countable.h deleted file mode 100644 index b355ab67..00000000 --- a/lib/fb/src/main/cpp/include/fb/Countable.h +++ /dev/null @@ -1,44 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#pragma once -#include -#include -#include -#include -#include - -namespace facebook { - -class Countable : public noncopyable, public nonmovable { -public: - // RefPtr expects refcount to start at 0 - Countable() : m_refcount(0) {} - virtual ~Countable() - { - FBASSERT(m_refcount == 0); - } - -private: - void ref() { - ++m_refcount; - } - - void unref() { - if (0 == --m_refcount) { - delete this; - } - } - - bool hasOnlyOneRef() const { - return m_refcount == 1; - } - - template friend class RefPtr; - std::atomic m_refcount; -}; - -} diff --git a/lib/fb/src/main/cpp/include/fb/ProgramLocation.h b/lib/fb/src/main/cpp/include/fb/ProgramLocation.h deleted file mode 100644 index 57c44c1d..00000000 --- a/lib/fb/src/main/cpp/include/fb/ProgramLocation.h +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#pragma once -#include -#include -#include - -namespace facebook { - -#define FROM_HERE facebook::ProgramLocation(__FUNCTION__, __FILE__, __LINE__) - -class ProgramLocation { -public: - ProgramLocation() : m_functionName("Unspecified"), m_fileName("Unspecified"), m_lineNumber(0) {} - - ProgramLocation(const char* functionName, const char* fileName, int line) : - m_functionName(functionName), - m_fileName(fileName), - m_lineNumber(line) - {} - - const char* functionName() const { return m_functionName; } - const char* fileName() const { return m_fileName; } - int lineNumber() const { return m_lineNumber; } - - std::string asFormattedString() const { - std::stringstream str; - str << "Function " << m_functionName << " in file " << m_fileName << ":" << m_lineNumber; - return str.str(); - } - - bool operator==(const ProgramLocation& other) const { - // Assumes that the strings are static - return (m_functionName == other.m_functionName) && (m_fileName == other.m_fileName) && m_lineNumber == other.m_lineNumber; - } - -private: - const char* m_functionName; - const char* m_fileName; - int m_lineNumber; -}; - -} diff --git a/lib/fb/src/main/cpp/include/fb/RefPtr.h b/lib/fb/src/main/cpp/include/fb/RefPtr.h deleted file mode 100644 index 8c22a151..00000000 --- a/lib/fb/src/main/cpp/include/fb/RefPtr.h +++ /dev/null @@ -1,271 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#pragma once -#include -#include - -namespace facebook { - -// Reference counting smart pointer. This is designed to work with the -// Countable class or other implementations in the future. It is designed in a -// way to be both efficient and difficult to misuse. Typical usage is very -// simple once you learn the patterns (and the compiler will help!): -// -// By default, the internal pointer is null. -// RefPtr ref; -// -// Object creation requires explicit construction: -// RefPtr ref = createNew(...); -// -// Or if the constructor is not public: -// RefPtr ref = adoptRef(new Foo(...)); -// -// But you can implicitly create from nullptr: -// RefPtr maybeRef = cond ? ref : nullptr; -// -// Move/Copy Construction/Assignment are straightforward: -// RefPtr ref2 = ref; -// ref = std::move(ref2); -// -// Destruction automatically drops the RefPtr's reference as expected. -// -// Upcasting is implicit but downcasting requires an explicit cast: -// struct Bar : public Foo {}; -// RefPtr barRef = static_cast>(ref); -// ref = barRef; -// -template -class RefPtr { -public: - constexpr RefPtr() : - m_ptr(nullptr) - {} - - // Allow implicit construction from a pointer only from nullptr - constexpr RefPtr(std::nullptr_t ptr) : - m_ptr(nullptr) - {} - - RefPtr(const RefPtr& ref) : - m_ptr(ref.m_ptr) - { - refIfNecessary(m_ptr); - } - - // Only allow implicit upcasts. A downcast will result in a compile error - // unless you use static_cast (which will end up invoking the explicit - // operator below). - template - RefPtr(const RefPtr& ref, typename std::enable_if::value, U>::type* = nullptr) : - m_ptr(ref.get()) - { - refIfNecessary(m_ptr); - } - - RefPtr(RefPtr&& ref) : - m_ptr(nullptr) - { - *this = std::move(ref); - } - - // Only allow implicit upcasts. A downcast will result in a compile error - // unless you use static_cast (which will end up invoking the explicit - // operator below). - template - RefPtr(RefPtr&& ref, typename std::enable_if::value, U>::type* = nullptr) : - m_ptr(nullptr) - { - *this = std::move(ref); - } - - ~RefPtr() { - unrefIfNecessary(m_ptr); - m_ptr = nullptr; - } - - RefPtr& operator=(const RefPtr& ref) { - if (m_ptr != ref.m_ptr) { - unrefIfNecessary(m_ptr); - m_ptr = ref.m_ptr; - refIfNecessary(m_ptr); - } - return *this; - } - - // The STL assumes rvalue references are unique and for simplicity's sake, we - // make the same assumption here, that &ref != this. - RefPtr& operator=(RefPtr&& ref) { - unrefIfNecessary(m_ptr); - m_ptr = ref.m_ptr; - ref.m_ptr = nullptr; - return *this; - } - - template - RefPtr& operator=(RefPtr&& ref) { - unrefIfNecessary(m_ptr); - m_ptr = ref.m_ptr; - ref.m_ptr = nullptr; - return *this; - } - - void reset() { - unrefIfNecessary(m_ptr); - m_ptr = nullptr; - } - - T* get() const { - return m_ptr; - } - - T* operator->() const { - return m_ptr; - } - - T& operator*() const { - return *m_ptr; - } - - template - explicit operator RefPtr () const; - - explicit operator bool() const { - return m_ptr ? true : false; - } - - bool isTheLastRef() const { - FBASSERT(m_ptr); - return m_ptr->hasOnlyOneRef(); - } - - // Creates a strong reference from a raw pointer, assuming that is already - // referenced from some other RefPtr. This should be used sparingly. - static inline RefPtr assumeAlreadyReffed(T* ptr) { - return RefPtr(ptr, ConstructionMode::External); - } - - // Creates a strong reference from a raw pointer, assuming that it points to a - // freshly-created object. See the documentation for RefPtr for usage. - static inline RefPtr adoptRef(T* ptr) { - return RefPtr(ptr, ConstructionMode::Adopted); - } - -private: - enum class ConstructionMode { - Adopted, - External - }; - - RefPtr(T* ptr, ConstructionMode mode) : - m_ptr(ptr) - { - FBASSERTMSGF(ptr, "Got null pointer in %s construction mode", mode == ConstructionMode::Adopted ? "adopted" : "external"); - ptr->ref(); - if (mode == ConstructionMode::Adopted) { - FBASSERT(ptr->hasOnlyOneRef()); - } - } - - static inline void refIfNecessary(T* ptr) { - if (ptr) { - ptr->ref(); - } - } - static inline void unrefIfNecessary(T* ptr) { - if (ptr) { - ptr->unref(); - } - } - - template friend class RefPtr; - - T* m_ptr; -}; - -// Creates a strong reference from a raw pointer, assuming that is already -// referenced from some other RefPtr and that it is non-null. This should be -// used sparingly. -template -static inline RefPtr assumeAlreadyReffed(T* ptr) { - return RefPtr::assumeAlreadyReffed(ptr); -} - -// As above, but tolerant of nullptr. -template -static inline RefPtr assumeAlreadyReffedOrNull(T* ptr) { - return ptr ? RefPtr::assumeAlreadyReffed(ptr) : nullptr; -} - -// Creates a strong reference from a raw pointer, assuming that it points to a -// freshly-created object. See the documentation for RefPtr for usage. -template -static inline RefPtr adoptRef(T* ptr) { - return RefPtr::adoptRef(ptr); -} - -template -static inline RefPtr createNew(Args&&... arguments) { - return RefPtr::adoptRef(new T(std::forward(arguments)...)); -} - -template template -RefPtr::operator RefPtr() const { - static_assert(std::is_base_of::value, "Invalid static cast"); - return assumeAlreadyReffedOrNull(static_cast(m_ptr)); -} - -template -inline bool operator==(const RefPtr& a, const RefPtr& b) { - return a.get() == b.get(); -} - -template -inline bool operator!=(const RefPtr& a, const RefPtr& b) { - return a.get() != b.get(); -} - -template -inline bool operator==(const RefPtr& ref, U* ptr) { - return ref.get() == ptr; -} - -template -inline bool operator!=(const RefPtr& ref, U* ptr) { - return ref.get() != ptr; -} - -template -inline bool operator==(U* ptr, const RefPtr& ref) { - return ref.get() == ptr; -} - -template -inline bool operator!=(U* ptr, const RefPtr& ref) { - return ref.get() != ptr; -} - -template -inline bool operator==(const RefPtr& ref, std::nullptr_t ptr) { - return ref.get() == ptr; -} - -template -inline bool operator!=(const RefPtr& ref, std::nullptr_t ptr) { - return ref.get() != ptr; -} - -template -inline bool operator==(std::nullptr_t ptr, const RefPtr& ref) { - return ref.get() == ptr; -} - -template -inline bool operator!=(std::nullptr_t ptr, const RefPtr& ref) { - return ref.get() != ptr; -} - -} diff --git a/lib/fb/src/main/cpp/include/fb/StaticInitialized.h b/lib/fb/src/main/cpp/include/fb/StaticInitialized.h deleted file mode 100644 index c8b84dea..00000000 --- a/lib/fb/src/main/cpp/include/fb/StaticInitialized.h +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#pragma once -#include -#include - -namespace facebook { - -// Class that lets you declare a global but does not add a static constructor -// to the binary. Eventually I'd like to have this auto-initialize in a -// multithreaded environment but for now it's easiest just to use manual -// initialization. -template -class StaticInitialized { -public: - constexpr StaticInitialized() : - m_instance(nullptr) - {} - - template - void initialize(Args&&... arguments) { - FBASSERT(!m_instance); - m_instance = new T(std::forward(arguments)...); - } - - T* operator->() const { - return m_instance; - } -private: - T* m_instance; -}; - -} diff --git a/lib/fb/src/main/cpp/include/fb/ThreadLocal.h b/lib/fb/src/main/cpp/include/fb/ThreadLocal.h deleted file mode 100644 index 4ea9e6ca..00000000 --- a/lib/fb/src/main/cpp/include/fb/ThreadLocal.h +++ /dev/null @@ -1,115 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#pragma once - -#include -#include - -#include - -namespace facebook { - -/////////////////////////////////////////////////////////////////////////////// - -/** - * A thread-local object is a "global" object within a thread. This is useful - * for writing apartment-threaded code, where nothing is actullay shared - * between different threads (hence no locking) but those variables are not - * on stack in local scope. To use it, just do something like this, - * - * ThreadLocal static_object; - * static_object->data_ = ...; - * static_object->doSomething(); - * - * ThreadLocal static_number; - * int value = *static_number; - * - * So, syntax-wise it's similar to pointers. T can be primitive types, and if - * it's a class, there has to be a default constructor. - */ -template -class ThreadLocal { -public: - /** - * Constructor that has to be called from a thread-neutral place. - */ - ThreadLocal() : - m_key(0), - m_cleanup(OnThreadExit) { - initialize(); - } - - /** - * As above but with a custom cleanup function - */ - typedef void (*CleanupFunction)(void* obj); - explicit ThreadLocal(CleanupFunction cleanup) : - m_key(0), - m_cleanup(cleanup) { - FBASSERT(cleanup); - initialize(); - } - - /** - * Access object's member or method through this operator overload. - */ - T *operator->() const { - return get(); - } - - T &operator*() const { - return *get(); - } - - T *get() const { - return (T*)pthread_getspecific(m_key); - } - - T* release() { - T* obj = get(); - pthread_setspecific(m_key, NULL); - return obj; - } - - void reset(T* other = NULL) { - T* old = (T*)pthread_getspecific(m_key); - if (old != other) { - FBASSERT(m_cleanup); - m_cleanup(old); - pthread_setspecific(m_key, other); - } - } - -private: - void initialize() { - int ret = pthread_key_create(&m_key, m_cleanup); - if (ret != 0) { - const char *msg = "(unknown error)"; - switch (ret) { - case EAGAIN: - msg = "PTHREAD_KEYS_MAX (1024) is exceeded"; - break; - case ENOMEM: - msg = "Out-of-memory"; - break; - } - (void) msg; - FBASSERTMSGF(0, "pthread_key_create failed: %d %s", ret, msg); - } - } - - static void OnThreadExit(void *obj) { - if (NULL != obj) { - delete (T*)obj; - } - } - - pthread_key_t m_key; - CleanupFunction m_cleanup; -}; - -} diff --git a/lib/fb/src/main/cpp/include/fb/assert.h b/lib/fb/src/main/cpp/include/fb/assert.h deleted file mode 100644 index f6dce42b..00000000 --- a/lib/fb/src/main/cpp/include/fb/assert.h +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#ifndef FBASSERT_H -#define FBASSERT_H - -#include - -namespace facebook { -#define ENABLE_FBASSERT 1 - -#if ENABLE_FBASSERT -#define FBASSERTMSGF(expr, msg, ...) !(expr) ? facebook::assertInternal("Assert (%s:%d): " msg, __FILE__, __LINE__, ##__VA_ARGS__) : (void) 0 -#else -#define FBASSERTMSGF(expr, msg, ...) -#endif // ENABLE_FBASSERT - -#define FBASSERT(expr) FBASSERTMSGF(expr, "%s", #expr) - -#define FBCRASH(msg, ...) facebook::assertInternal("Fatal error (%s:%d): " msg, __FILE__, __LINE__, ##__VA_ARGS__) -#define FBUNREACHABLE() facebook::assertInternal("This code should be unreachable (%s:%d)", __FILE__, __LINE__) - -FBEXPORT void assertInternal(const char* formatstr, ...) __attribute__((noreturn)); - -// This allows storing the assert message before the current process terminates due to a crash -typedef void (*AssertHandler)(const char* message); -void setAssertHandler(AssertHandler assertHandler); - -} // namespace facebook -#endif // FBASSERT_H diff --git a/lib/fb/src/main/cpp/include/fb/fbjni.h b/lib/fb/src/main/cpp/include/fb/fbjni.h deleted file mode 100644 index 9f0da1ab..00000000 --- a/lib/fb/src/main/cpp/include/fb/fbjni.h +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#pragma once - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include diff --git a/lib/fb/src/main/cpp/include/fb/fbjni/JThread.h b/lib/fb/src/main/cpp/include/fb/fbjni/JThread.h deleted file mode 100644 index 7ef4b63b..00000000 --- a/lib/fb/src/main/cpp/include/fb/fbjni/JThread.h +++ /dev/null @@ -1,36 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#pragma once - -#include "CoreClasses.h" -#include "NativeRunnable.h" - -namespace facebook { -namespace jni { - -class JThread : public JavaClass { - public: - static constexpr const char* kJavaDescriptor = "Ljava/lang/Thread;"; - - void start() { - static auto method = javaClassStatic()->getMethod("start"); - method(self()); - } - - void join() { - static auto method = javaClassStatic()->getMethod("join"); - method(self()); - } - - static local_ref create(std::function&& runnable) { - auto jrunnable = JNativeRunnable::newObjectCxxArgs(std::move(runnable)); - return newInstance(static_ref_cast(jrunnable)); - } -}; - -} -} diff --git a/lib/fb/src/main/cpp/include/fb/fbjni/Registration-inl.h b/lib/fb/src/main/cpp/include/fb/fbjni/Registration-inl.h deleted file mode 100644 index 030baace..00000000 --- a/lib/fb/src/main/cpp/include/fb/fbjni/Registration-inl.h +++ /dev/null @@ -1,206 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#pragma once - -#include "Exceptions.h" -#include "Hybrid.h" - -namespace facebook { -namespace jni { - -namespace detail { - -#ifdef __i386__ -// X86 ABI forces 16 byte stack allignment on calls. Unfortunately -// sometimes Dalvik chooses not to obey the ABI: -// - https://code.google.com/p/android/issues/detail?id=61012 -// - https://android.googlesource.com/platform/ndk/+/81696d2%5E!/ -// Therefore, we tell the compiler to re-align the stack on entry -// to our JNI functions. -#define JNI_ENTRY_POINT __attribute__((force_align_arg_pointer)) -#else -#define JNI_ENTRY_POINT -#endif - -// registration wrapper for legacy JNI-style functions - -template -inline NativeMethodWrapper* exceptionWrapJNIMethod(void (*)(JNIEnv*, C, Args... args)) { - struct funcWrapper { - JNI_ENTRY_POINT static void call(JNIEnv* env, jobject obj, Args... args) { - // Note that if func was declared noexcept, then both gcc and clang are smart - // enough to elide the try/catch. - try { - (*func)(env, static_cast(obj), args...); - } catch (...) { - translatePendingCppExceptionToJavaException(); - } - } - }; - - // This intentionally erases the real type; JNI will do it anyway - return reinterpret_cast(&(funcWrapper::call)); -} - -template -inline NativeMethodWrapper* exceptionWrapJNIMethod(R (*)(JNIEnv*, C, Args... args)) { - struct funcWrapper { - JNI_ENTRY_POINT static R call(JNIEnv* env, jobject obj, Args... args) { - try { - return (*func)(env, static_cast>(obj), args...); - } catch (...) { - translatePendingCppExceptionToJavaException(); - return R{}; - } - } - }; - - // This intentionally erases the real type; JNI will do it anyway - return reinterpret_cast(&(funcWrapper::call)); -} - -// registration wrappers for functions, with autoconversion of arguments. - -template -inline NativeMethodWrapper* exceptionWrapJNIMethod(void (*)(alias_ref, Args... args)) { - struct funcWrapper { - JNI_ENTRY_POINT static void call(JNIEnv*, jobject obj, - typename Convert::type>::jniType... args) { - try { - (*func)(static_cast>(obj), Convert::type>::fromJni(args)...); - } catch (...) { - translatePendingCppExceptionToJavaException(); - } - } - }; - - // This intentionally erases the real type; JNI will do it anyway - return reinterpret_cast(&(funcWrapper::call)); -} - -template -inline NativeMethodWrapper* exceptionWrapJNIMethod(R (*)(alias_ref, Args... args)) { - struct funcWrapper { - - JNI_ENTRY_POINT static typename Convert::type>::jniType call(JNIEnv*, jobject obj, - typename Convert::type>::jniType... args) { - try { - return Convert::type>::toJniRet( - (*func)(static_cast>(obj), Convert::type>::fromJni(args)...)); - } catch (...) { - using jniRet = typename Convert::type>::jniType; - translatePendingCppExceptionToJavaException(); - return jniRet{}; - } - } - }; - - // This intentionally erases the real type; JNI will do it anyway - return reinterpret_cast(&(funcWrapper::call)); -} - -// registration wrappers for non-static methods, with autoconvertion of arguments. - -template -inline NativeMethodWrapper* exceptionWrapJNIMethod( - void (C::*method0)(Args... args)) { - (void)method0; - struct funcWrapper { - JNI_ENTRY_POINT static void call(JNIEnv* env, jobject obj, - typename Convert::type>::jniType... args) { - try { - try { - auto aref = wrap_alias(static_cast(obj)); - // This is usually a noop, but if the hybrid object is a - // base class of other classes which register JNI methods, - // this will get the right type for the registered method. - auto cobj = static_cast(facebook::jni::cthis(aref)); - (cobj->*method)(Convert::type>::fromJni(args)...); - } catch (const std::exception& ex) { - C::mapException(ex); - throw; - } - } catch (...) { - translatePendingCppExceptionToJavaException(); - } - } - }; - - // This intentionally erases the real type; JNI will do it anyway - return reinterpret_cast(&(funcWrapper::call)); -} - -template -inline NativeMethodWrapper* exceptionWrapJNIMethod(R (C::*method0)(Args... args)) { - struct funcWrapper { - - JNI_ENTRY_POINT static typename Convert::type>::jniType call(JNIEnv* env, jobject obj, - typename Convert::type>::jniType... args) { - try { - try { - auto aref = wrap_alias(static_cast(obj)); - // This is usually a noop, but if the hybrid object is a - // base class of other classes which register JNI methods, - // this will get the right type for the registered method. - auto cobj = static_cast(facebook::jni::cthis(aref)); - return Convert::type>::toJniRet( - (cobj->*method)(Convert::type>::fromJni(args)...)); - } catch (const std::exception& ex) { - C::mapException(ex); - throw; - } - } catch (...) { - using jniRet = typename Convert::type>::jniType; - translatePendingCppExceptionToJavaException(); - return jniRet{}; - } - } - }; - - // This intentionally erases the real type; JNI will do it anyway - return reinterpret_cast(&(funcWrapper::call)); -} - -template -inline std::string makeDescriptor(R (*)(JNIEnv*, C, Args... args)) { - return jmethod_traits::descriptor(); -} - -template -inline std::string makeDescriptor(R (*)(alias_ref, Args... args)) { - return jmethod_traits_from_cxx::descriptor(); -} - -template -inline std::string makeDescriptor(R (C::*)(Args... args)) { - return jmethod_traits_from_cxx::descriptor(); -} - -template -template -JNI_ENTRY_POINT R CriticalMethod::call( - alias_ref, - Args... args) noexcept { - static_assert( - IsJniPrimitive() || std::is_void(), - "Critical Native Methods may only return primitive JNI types, or void."); - static_assert( - AreJniPrimitives(), - "Critical Native Methods may only use primitive JNI types as parameters"); - - return func(std::forward(args)...); -} - -template -template -inline std::string CriticalMethod::desc() { - return makeDescriptor(call); -} - -} - -}} diff --git a/lib/fb/src/main/cpp/include/fb/log.h b/lib/fb/src/main/cpp/include/fb/log.h deleted file mode 100644 index e26e716b..00000000 --- a/lib/fb/src/main/cpp/include/fb/log.h +++ /dev/null @@ -1,346 +0,0 @@ -/* - * Copyright (C) 2005 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * FB Wrapper for logging functions. - * - * The android logging API uses the macro "LOG()" for its logic, which means - * that it conflicts with random other places that use LOG for their own - * purposes and doesn't work right half the places you include it - * - * FBLOG uses exactly the same semantics (FBLOGD for debug etc) but because of - * the FB prefix it's strictly better. FBLOGV also gets stripped out based on - * whether NDEBUG is set, but can be overridden by FBLOG_NDEBUG - * - * Most of the rest is a copy of with minor changes. - */ - -// -// C/C++ logging functions. See the logging documentation for API details. -// -// We'd like these to be available from C code (in case we import some from -// somewhere), so this has a C interface. -// -// The output will be correct when the log file is shared between multiple -// threads and/or multiple processes so long as the operating system -// supports O_APPEND. These calls have mutex-protected data structures -// and so are NOT reentrant. Do not use LOG in a signal handler. -// -#pragma once - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef ANDROID -#include -#else -// These declarations are needed for our internal use even on non-Android -// builds. -// (they are borrowed from ) - -/* - * Android log priority values, in ascending priority order. - */ -typedef enum android_LogPriority { - ANDROID_LOG_UNKNOWN = 0, - ANDROID_LOG_DEFAULT, /* only for SetMinPriority() */ - ANDROID_LOG_VERBOSE, - ANDROID_LOG_DEBUG, - ANDROID_LOG_INFO, - ANDROID_LOG_WARN, - ANDROID_LOG_ERROR, - ANDROID_LOG_FATAL, - ANDROID_LOG_SILENT, /* only for SetMinPriority(); must be last */ -} android_LogPriority; - -/* - * Send a simple string to the log. - */ -int __android_log_write(int prio, const char *tag, const char *text); - -/* - * Send a formatted string to the log, used like printf(fmt,...) - */ -int __android_log_print(int prio, const char *tag, const char *fmt, ...) -#if defined(__GNUC__) - __attribute__((format(printf, 3, 4))) -#endif - ; - -#endif - -// --------------------------------------------------------------------- - -/* - * Normally we strip FBLOGV (VERBOSE messages) from release builds. - * You can modify this (for example with "#define FBLOG_NDEBUG 0" - * at the top of your source file) to change that behavior. - */ -#ifndef FBLOG_NDEBUG -#ifdef NDEBUG -#define FBLOG_NDEBUG 1 -#else -#define FBLOG_NDEBUG 0 -#endif -#endif - -/* - * This is the local tag used for the following simplified - * logging macros. You can change this preprocessor definition - * before using the other macros to change the tag. - */ -#ifndef LOG_TAG -#define LOG_TAG NULL -#endif - -// --------------------------------------------------------------------- - -/* - * Simplified macro to send a verbose log message using the current LOG_TAG. - */ -#ifndef FBLOGV -#if FBLOG_NDEBUG -#define FBLOGV(...) ((void)0) -#else -#define FBLOGV(...) ((void)FBLOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__)) -#endif -#endif - -#define CONDITION(cond) (__builtin_expect((cond) != 0, 0)) - -#ifndef FBLOGV_IF -#if FBLOG_NDEBUG -#define FBLOGV_IF(cond, ...) ((void)0) -#else -#define FBLOGV_IF(cond, ...) \ - ((CONDITION(cond)) ? ((void)FBLOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__)) \ - : (void)0) -#endif -#endif - -/* - * Simplified macro to send a debug log message using the current LOG_TAG. - */ -#ifndef FBLOGD -#define FBLOGD(...) ((void)FBLOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__)) -#endif - -#ifndef FBLOGD_IF -#define FBLOGD_IF(cond, ...) \ - ((CONDITION(cond)) ? ((void)FBLOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__)) : (void)0) -#endif - -/* - * Simplified macro to send an info log message using the current LOG_TAG. - */ -#ifndef FBLOGI -#define FBLOGI(...) ((void)FBLOG(LOG_INFO, LOG_TAG, __VA_ARGS__)) -#endif - -#ifndef FBLOGI_IF -#define FBLOGI_IF(cond, ...) \ - ((CONDITION(cond)) ? ((void)FBLOG(LOG_INFO, LOG_TAG, __VA_ARGS__)) : (void)0) -#endif - -/* - * Simplified macro to send a warning log message using the current LOG_TAG. - */ -#ifndef FBLOGW -#define FBLOGW(...) ((void)FBLOG(LOG_WARN, LOG_TAG, __VA_ARGS__)) -#endif - -#ifndef FBLOGW_IF -#define FBLOGW_IF(cond, ...) \ - ((CONDITION(cond)) ? ((void)FBLOG(LOG_WARN, LOG_TAG, __VA_ARGS__)) : (void)0) -#endif - -/* - * Simplified macro to send an error log message using the current LOG_TAG. - */ -#ifndef FBLOGE -#define FBLOGE(...) ((void)FBLOG(LOG_ERROR, LOG_TAG, __VA_ARGS__)) -#endif - -#ifndef FBLOGE_IF -#define FBLOGE_IF(cond, ...) \ - ((CONDITION(cond)) ? ((void)FBLOG(LOG_ERROR, LOG_TAG, __VA_ARGS__)) : (void)0) -#endif - -// --------------------------------------------------------------------- - -/* - * Conditional based on whether the current LOG_TAG is enabled at - * verbose priority. - */ -#ifndef IF_FBLOGV -#if FBLOG_NDEBUG -#define IF_FBLOGV() if (false) -#else -#define IF_FBLOGV() IF_FBLOG(LOG_VERBOSE, LOG_TAG) -#endif -#endif - -/* - * Conditional based on whether the current LOG_TAG is enabled at - * debug priority. - */ -#ifndef IF_FBLOGD -#define IF_FBLOGD() IF_FBLOG(LOG_DEBUG, LOG_TAG) -#endif - -/* - * Conditional based on whether the current LOG_TAG is enabled at - * info priority. - */ -#ifndef IF_FBLOGI -#define IF_FBLOGI() IF_FBLOG(LOG_INFO, LOG_TAG) -#endif - -/* - * Conditional based on whether the current LOG_TAG is enabled at - * warn priority. - */ -#ifndef IF_FBLOGW -#define IF_FBLOGW() IF_FBLOG(LOG_WARN, LOG_TAG) -#endif - -/* - * Conditional based on whether the current LOG_TAG is enabled at - * error priority. - */ -#ifndef IF_FBLOGE -#define IF_FBLOGE() IF_FBLOG(LOG_ERROR, LOG_TAG) -#endif - -// --------------------------------------------------------------------- - -/* - * Log a fatal error. If the given condition fails, this stops program - * execution like a normal assertion, but also generating the given message. - * It is NOT stripped from release builds. Note that the condition test - * is -inverted- from the normal assert() semantics. - */ -#define FBLOG_ALWAYS_FATAL_IF(cond, ...) \ - ((CONDITION(cond)) ? ((void)fb_printAssert(#cond, LOG_TAG, __VA_ARGS__)) \ - : (void)0) - -#define FBLOG_ALWAYS_FATAL(...) \ - (((void)fb_printAssert(NULL, LOG_TAG, __VA_ARGS__))) - -/* - * Versions of LOG_ALWAYS_FATAL_IF and LOG_ALWAYS_FATAL that - * are stripped out of release builds. - */ -#if FBLOG_NDEBUG - -#define FBLOG_FATAL_IF(cond, ...) ((void)0) -#define FBLOG_FATAL(...) ((void)0) - -#else - -#define FBLOG_FATAL_IF(cond, ...) FBLOG_ALWAYS_FATAL_IF(cond, __VA_ARGS__) -#define FBLOG_FATAL(...) FBLOG_ALWAYS_FATAL(__VA_ARGS__) - -#endif - -/* - * Assertion that generates a log message when the assertion fails. - * Stripped out of release builds. Uses the current LOG_TAG. - */ -#define FBLOG_ASSERT(cond, ...) FBLOG_FATAL_IF(!(cond), __VA_ARGS__) -//#define LOG_ASSERT(cond) LOG_FATAL_IF(!(cond), "Assertion failed: " #cond) - -// --------------------------------------------------------------------- - -/* - * Basic log message macro. - * - * Example: - * FBLOG(LOG_WARN, NULL, "Failed with error %d", errno); - * - * The second argument may be NULL or "" to indicate the "global" tag. - */ -#ifndef FBLOG -#define FBLOG(priority, tag, ...) \ - FBLOG_PRI(ANDROID_##priority, tag, __VA_ARGS__) -#endif - -#ifndef FBLOG_BY_DELIMS -#define FBLOG_BY_DELIMS(priority, tag, delims, msg, ...) \ - logPrintByDelims(ANDROID_##priority, tag, delims, msg, ##__VA_ARGS__) -#endif - -/* - * Log macro that allows you to specify a number for the priority. - */ -#ifndef FBLOG_PRI -#define FBLOG_PRI(priority, tag, ...) fb_printLog(priority, tag, __VA_ARGS__) -#endif - -/* - * Log macro that allows you to pass in a varargs ("args" is a va_list). - */ -#ifndef FBLOG_PRI_VA -#define FBLOG_PRI_VA(priority, tag, fmt, args) \ - fb_vprintLog(priority, NULL, tag, fmt, args) -#endif - -/* - * Conditional given a desired logging priority and tag. - */ -#ifndef IF_FBLOG -#define IF_FBLOG(priority, tag) if (fb_testLog(ANDROID_##priority, tag)) -#endif - -typedef void (*LogHandler)(int priority, const char* tag, const char* message); -FBEXPORT void setLogHandler(LogHandler logHandler); - -/* - * =========================================================================== - * - * The stuff in the rest of this file should not be used directly. - */ -FBEXPORT int fb_printLog(int prio, const char* tag, const char* fmt, ...) -#if defined(__GNUC__) - __attribute__((format(printf, 3, 4))) -#endif - ; - -#define fb_vprintLog(prio, cond, tag, fmt...) \ - __android_log_vprint(prio, tag, fmt) - -#define fb_printAssert(cond, tag, fmt...) __android_log_assert(cond, tag, fmt) - -#define fb_writeLog(prio, tag, text) __android_log_write(prio, tag, text) - -#define fb_bWriteLog(tag, payload, len) __android_log_bwrite(tag, payload, len) -#define fb_btWriteLog(tag, type, payload, len) \ - __android_log_btwrite(tag, type, payload, len) - -#define fb_testLog(prio, tag) (1) - -/* - * FB extensions - */ -void logPrintByDelims(int priority, const char* tag, const char* delims, - const char* msg, ...); - -#ifdef __cplusplus -} -#endif diff --git a/lib/fb/src/main/cpp/include/fb/noncopyable.h b/lib/fb/src/main/cpp/include/fb/noncopyable.h deleted file mode 100644 index ec00ada5..00000000 --- a/lib/fb/src/main/cpp/include/fb/noncopyable.h +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#pragma once - -namespace facebook { - -struct noncopyable { - noncopyable(const noncopyable&) = delete; - noncopyable& operator=(const noncopyable&) = delete; -protected: - noncopyable() = default; -}; - -} diff --git a/lib/fb/src/main/cpp/include/fb/nonmovable.h b/lib/fb/src/main/cpp/include/fb/nonmovable.h deleted file mode 100644 index 9b39b8c6..00000000 --- a/lib/fb/src/main/cpp/include/fb/nonmovable.h +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#pragma once - -namespace facebook { - -struct nonmovable { - nonmovable(nonmovable&&) = delete; - nonmovable& operator=(nonmovable&&) = delete; -protected: - nonmovable() = default; -}; - -} diff --git a/lib/fb/src/main/cpp/include/fb/fbjni/ByteBuffer.h b/lib/fb/src/main/cpp/include/fbjni/ByteBuffer.h similarity index 51% rename from lib/fb/src/main/cpp/include/fb/fbjni/ByteBuffer.h rename to lib/fb/src/main/cpp/include/fbjni/ByteBuffer.h index 41c7acc3..55223e46 100644 --- a/lib/fb/src/main/cpp/include/fb/fbjni/ByteBuffer.h +++ b/lib/fb/src/main/cpp/include/fbjni/ByteBuffer.h @@ -6,26 +6,37 @@ */ #pragma once -#include - -#include "CoreClasses.h" -#include "References-forward.h" +#include namespace facebook { namespace jni { +class JBuffer : public JavaClass { +public: + static constexpr const char* kJavaDescriptor = "Ljava/nio/Buffer;"; + + void rewind() const; + bool isDirect() const; + void* getDirectAddress() const; + size_t getDirectCapacity() const; +}; + // JNI's NIO support has some awkward preconditions and error reporting. This // class provides much more user-friendly access. -class FBEXPORT JByteBuffer : public JavaClass { +class JByteBuffer : public JavaClass { public: static constexpr const char* kJavaDescriptor = "Ljava/nio/ByteBuffer;"; static local_ref wrapBytes(uint8_t* data, size_t size); + static local_ref allocateDirect(jint size); - bool isDirect() const; + uint8_t* getDirectBytes() const { + return static_cast(getDirectAddress()); + } - uint8_t* getDirectBytes() const; - size_t getDirectSize() const; + size_t getDirectSize() const { + return getDirectCapacity(); + } }; }} diff --git a/lib/fb/src/main/cpp/include/fb/fbjni/Context.h b/lib/fb/src/main/cpp/include/fbjni/Context.h similarity index 72% rename from lib/fb/src/main/cpp/include/fb/fbjni/Context.h rename to lib/fb/src/main/cpp/include/fbjni/Context.h index cf5bcb2d..331de691 100644 --- a/lib/fb/src/main/cpp/include/fb/fbjni/Context.h +++ b/lib/fb/src/main/cpp/include/fbjni/Context.h @@ -6,8 +6,8 @@ */ #pragma once -#include "CoreClasses.h" -#include "File.h" +#include +#include namespace facebook { namespace jni { @@ -18,12 +18,12 @@ class AContext : public JavaClass { // Define a method that calls into the represented Java class local_ref getCacheDir() { - static auto method = getClass()->getMethod("getCacheDir"); + static const auto method = getClass()->getMethod("getCacheDir"); return method(self()); } local_ref getFilesDir() { - static auto method = getClass()->getMethod("getFilesDir"); + static const auto method = getClass()->getMethod("getFilesDir"); return method(self()); } }; diff --git a/lib/fb/src/main/cpp/include/fb/fbjni/File.h b/lib/fb/src/main/cpp/include/fbjni/File.h similarity index 82% rename from lib/fb/src/main/cpp/include/fb/fbjni/File.h rename to lib/fb/src/main/cpp/include/fbjni/File.h index 857826cc..852202ba 100644 --- a/lib/fb/src/main/cpp/include/fb/fbjni/File.h +++ b/lib/fb/src/main/cpp/include/fbjni/File.h @@ -6,7 +6,7 @@ */ #pragma once -#include "CoreClasses.h" +#include namespace facebook { namespace jni { @@ -17,7 +17,7 @@ class JFile : public JavaClass { // Define a method that calls into the represented Java class std::string getAbsolutePath() { - static auto method = getClass()->getMethod("getAbsolutePath"); + static const auto method = getClass()->getMethod("getAbsolutePath"); return method(self())->toStdString(); } diff --git a/lib/fb/src/main/cpp/include/fbjni/JThread.h b/lib/fb/src/main/cpp/include/fbjni/JThread.h new file mode 100644 index 00000000..a343e022 --- /dev/null +++ b/lib/fb/src/main/cpp/include/fbjni/JThread.h @@ -0,0 +1,56 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#pragma once + +#include +#include + +namespace facebook { +namespace jni { + +class JThread : public JavaClass { + public: + static constexpr const char* kJavaDescriptor = "Ljava/lang/Thread;"; + + void start() { + static const auto method = javaClassStatic()->getMethod("start"); + method(self()); + } + + void join() { + static const auto method = javaClassStatic()->getMethod("join"); + method(self()); + } + + static local_ref create(std::function&& runnable) { + auto jrunnable = JNativeRunnable::newObjectCxxArgs(std::move(runnable)); + return newInstance(static_ref_cast(jrunnable)); + } + + static local_ref create(std::function&& runnable, std::string&& name) { + auto jrunnable = JNativeRunnable::newObjectCxxArgs(std::move(runnable)); + return newInstance(static_ref_cast(jrunnable), make_jstring(std::move(name))); + } + + static local_ref getCurrent() { + static const auto method = javaClassStatic()->getStaticMethod()>("currentThread"); + return method(javaClassStatic()); + } + + int getPriority() { + static const auto method = getClass()->getMethod("getPriority"); + return method(self()); + } + + void setPriority(int priority) { + static const auto method = getClass()->getMethod("setPriority"); + method(self(), priority); + } +}; + +} +} diff --git a/lib/fb/src/main/cpp/include/fb/fbjni/NativeRunnable.h b/lib/fb/src/main/cpp/include/fbjni/NativeRunnable.h similarity index 92% rename from lib/fb/src/main/cpp/include/fb/fbjni/NativeRunnable.h rename to lib/fb/src/main/cpp/include/fbjni/NativeRunnable.h index f459ebf6..7bb915f4 100644 --- a/lib/fb/src/main/cpp/include/fb/fbjni/NativeRunnable.h +++ b/lib/fb/src/main/cpp/include/fbjni/NativeRunnable.h @@ -6,9 +6,7 @@ */ #pragma once -#include "CoreClasses.h" -#include "Hybrid.h" -#include "Registration.h" +#include #include diff --git a/lib/fb/src/main/cpp/include/fbjni/ReadableByteChannel.h b/lib/fb/src/main/cpp/include/fbjni/ReadableByteChannel.h new file mode 100644 index 00000000..f524d26c --- /dev/null +++ b/lib/fb/src/main/cpp/include/fbjni/ReadableByteChannel.h @@ -0,0 +1,22 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#pragma once + +#include +#include + +namespace facebook { +namespace jni { + +class JReadableByteChannel : public JavaClass { +public: + static constexpr const char* kJavaDescriptor = "Ljava/nio/channels/ReadableByteChannel;"; + + int read(alias_ref dest) const; +}; + +}} diff --git a/lib/fb/src/main/cpp/include/fb/fbjni/Boxed.h b/lib/fb/src/main/cpp/include/fbjni/detail/Boxed.h similarity index 80% rename from lib/fb/src/main/cpp/include/fb/fbjni/Boxed.h rename to lib/fb/src/main/cpp/include/fbjni/detail/Boxed.h index 36ab9a31..e231b958 100644 --- a/lib/fb/src/main/cpp/include/fb/fbjni/Boxed.h +++ b/lib/fb/src/main/cpp/include/fbjni/detail/Boxed.h @@ -17,13 +17,13 @@ struct JPrimitive : JavaClass { using typename JavaClass::javaobject; using JavaClass::javaClassStatic; static local_ref valueOf(jprim val) { - static auto cls = javaClassStatic(); - static auto method = + static const auto cls = javaClassStatic(); + static const auto method = cls->template getStaticMethod("valueOf"); return method(cls, val); } jprim value() const { - static auto method = + static const auto method = javaClassStatic()->template getMethod(T::kValueMethod); return method(this->self()); } @@ -55,9 +55,20 @@ DEFINE_BOXED_PRIMITIVE(double, Double) #undef DEFINE_BOXED_PRIMITIVE +template +inline typename std::enable_if< + (std::is_same::value || std::is_same::value) && !std::is_same::value, + local_ref +>::type autobox(T val) { + return JLong::valueOf(val); +} + +struct JVoid : public jni::JavaClass { + static auto constexpr kJavaDescriptor = "Ljava/lang/Void;"; +}; + inline local_ref autobox(alias_ref val) { return make_local(val); } }} - diff --git a/lib/fb/src/main/cpp/include/fb/fbjni/Common.h b/lib/fb/src/main/cpp/include/fbjni/detail/Common.h similarity index 78% rename from lib/fb/src/main/cpp/include/fb/fbjni/Common.h rename to lib/fb/src/main/cpp/include/fbjni/detail/Common.h index 6025f6d6..573fcc75 100644 --- a/lib/fb/src/main/cpp/include/fb/fbjni/Common.h +++ b/lib/fb/src/main/cpp/include/fbjni/detail/Common.h @@ -15,9 +15,6 @@ #include -#include -#include - #ifdef FBJNI_DEBUG_REFS # ifdef __ANDROID__ # include @@ -42,11 +39,11 @@ namespace facebook { namespace jni { -FBEXPORT void throwPendingJniExceptionAsCppException(); -FBEXPORT void throwCppExceptionIf(bool condition); +void throwPendingJniExceptionAsCppException(); +void throwCppExceptionIf(bool condition); -[[noreturn]] FBEXPORT void throwNewJavaException(jthrowable); -[[noreturn]] FBEXPORT void throwNewJavaException(const char* throwableName, const char* msg); +[[noreturn]] void throwNewJavaException(jthrowable); +[[noreturn]] void throwNewJavaException(const char* throwableName, const char* msg); template [[noreturn]] void throwNewJavaException(const char* throwableName, const char* fmt, Args... args); @@ -65,20 +62,10 @@ template * unhelpful way (typically a segfault) while trying to handle an exception * which occurs later. */ -FBEXPORT jint initialize(JavaVM*, std::function&&) noexcept; +jint initialize(JavaVM*, std::function&&) noexcept; namespace internal { -/** - * Retrieve a pointer the JNI environment of the current thread. - * - * @pre The current thread must be attached to the VM - */ -inline JNIEnv* getEnv() noexcept { - // TODO(T6594868) Benchmark against raw JNI access - return Environment::current(); -} - // Define to get extremely verbose logging of references and to enable reference stats #ifdef FBJNI_DEBUG_REFS template diff --git a/lib/fb/src/main/cpp/include/fb/fbjni/CoreClasses-inl.h b/lib/fb/src/main/cpp/include/fbjni/detail/CoreClasses-inl.h similarity index 87% rename from lib/fb/src/main/cpp/include/fb/fbjni/CoreClasses-inl.h rename to lib/fb/src/main/cpp/include/fbjni/detail/CoreClasses-inl.h index e5c86069..d8214fde 100644 --- a/lib/fb/src/main/cpp/include/fb/fbjni/CoreClasses-inl.h +++ b/lib/fb/src/main/cpp/include/fbjni/detail/CoreClasses-inl.h @@ -21,15 +21,15 @@ namespace jni { // jobject ///////////////////////////////////////////////////////////////////////////////////////// inline bool isSameObject(alias_ref lhs, alias_ref rhs) noexcept { - return internal::getEnv()->IsSameObject(lhs.get(), rhs.get()) != JNI_FALSE; + return Environment::current()->IsSameObject(lhs.get(), rhs.get()) != JNI_FALSE; } inline local_ref JObject::getClass() const noexcept { - return adopt_local(internal::getEnv()->GetObjectClass(self())); + return adopt_local(Environment::current()->GetObjectClass(self())); } inline bool JObject::isInstanceOf(alias_ref cls) const noexcept { - return internal::getEnv()->IsInstanceOf(self(), cls.get()) != JNI_FALSE; + return Environment::current()->IsInstanceOf(self(), cls.get()) != JNI_FALSE; } template @@ -47,8 +47,13 @@ inline void JObject::setFieldValue(JField field, T value) noexcept { field.set(self(), value); } +template +inline void JObject::setFieldValue(JField field, alias_ref value) noexcept { + setFieldValue(field, value.get()); +} + inline std::string JObject::toString() const { - static auto method = findClassLocal("java/lang/Object")->getMethod("toString"); + static const auto method = findClassLocal("java/lang/Object")->getMethod("toString"); return method(self())->toStdString(); } @@ -77,13 +82,13 @@ MonitorLock::MonitorLock() noexcept : owned_(nullptr) {} MonitorLock::MonitorLock(alias_ref object) noexcept : owned_(object) { - internal::getEnv()->MonitorEnter(object.get()); + Environment::current()->MonitorEnter(object.get()); } void MonitorLock::reset() noexcept { if (owned_) { - internal::getEnv()->MonitorExit(owned_.get()); - if (internal::getEnv()->ExceptionCheck()) { + Environment::current()->MonitorExit(owned_.get()); + if (Environment::current()->ExceptionCheck()) { abort(); // Lock mismatch } owned_ = nullptr; @@ -126,7 +131,7 @@ namespace detail { template static local_ref newInstance(Args... args) { static auto cls = JC::javaClassStatic(); - static auto constructor = cls->template getConstructor(); + static const auto constructor = cls->template getConstructor(); return cls->newObject(constructor, args...); } } @@ -154,17 +159,18 @@ struct NativeMethod { }; inline local_ref JClass::getSuperclass() const noexcept { - return adopt_local(internal::getEnv()->GetSuperclass(self())); + return adopt_local(Environment::current()->GetSuperclass(self())); } inline void JClass::registerNatives(std::initializer_list methods) { - const auto env = internal::getEnv(); + const auto env = Environment::current(); JNINativeMethod jnimethods[methods.size()]; size_t i = 0; for (auto it = methods.begin(); it < methods.end(); ++it, ++i) { - jnimethods[i].name = it->name; - jnimethods[i].signature = it->descriptor.c_str(); + // The JNI struct members are unnecessarily non-const. + jnimethods[i].name = const_cast(it->name); + jnimethods[i].signature = const_cast(it->descriptor.c_str()); jnimethods[i].fnPtr = reinterpret_cast(it->wrapper); } @@ -173,8 +179,13 @@ inline void JClass::registerNatives(std::initializer_list methods) } inline bool JClass::isAssignableFrom(alias_ref other) const noexcept { - const auto env = internal::getEnv(); - const auto result = env->IsAssignableFrom(self(), other.get()); + const auto env = Environment::current(); + // Ths method has behavior compatible with the + // java.lang.Class#isAssignableFrom method. The order of the + // arguments to the JNI IsAssignableFrom C function is "opposite" + // from what some might expect, which makes this code look a little + // odd, but it is correct. + const auto result = env->IsAssignableFrom(other.get(), self()); return result; } @@ -198,7 +209,7 @@ template inline JMethod JClass::getMethod( const char* name, const char* descriptor) const { - const auto env = internal::getEnv(); + const auto env = Environment::current(); const auto method = env->GetMethodID(self(), name, descriptor); FACEBOOK_JNI_THROW_EXCEPTION_IF(!method); return JMethod{method}; @@ -213,7 +224,7 @@ template inline JStaticMethod JClass::getStaticMethod( const char* name, const char* descriptor) const { - const auto env = internal::getEnv(); + const auto env = Environment::current(); const auto method = env->GetStaticMethodID(self(), name, descriptor); FACEBOOK_JNI_THROW_EXCEPTION_IF(!method); return JStaticMethod{method}; @@ -228,7 +239,7 @@ template inline JNonvirtualMethod JClass::getNonvirtualMethod( const char* name, const char* descriptor) const { - const auto env = internal::getEnv(); + const auto env = Environment::current(); const auto method = env->GetMethodID(self(), name, descriptor); FACEBOOK_JNI_THROW_EXCEPTION_IF(!method); return JNonvirtualMethod{method}; @@ -244,7 +255,7 @@ template inline JField(), T>> JClass::getField( const char* name, const char* descriptor) const { - const auto env = internal::getEnv(); + const auto env = Environment::current(); auto field = env->GetFieldID(self(), name, descriptor); FACEBOOK_JNI_THROW_EXCEPTION_IF(!field); return JField{field}; @@ -260,7 +271,7 @@ template inline JStaticField(), T>> JClass::getStaticField( const char* name, const char* descriptor) const { - const auto env = internal::getEnv(); + const auto env = Environment::current(); auto field = env->GetStaticFieldID(self(), name, descriptor); FACEBOOK_JNI_THROW_EXCEPTION_IF(!field); return JStaticField{field}; @@ -281,11 +292,16 @@ inline void JClass::setStaticFieldValue(JStaticField field, T value) noexcept field.set(self(), value); } +template +inline void JClass::setStaticFieldValue(JStaticField field, alias_ref value) noexcept { + setStaticFieldValue(field, value.get()); +} + template inline local_ref JClass::newObject( JConstructor constructor, Args... args) const { - const auto env = internal::getEnv(); + const auto env = Environment::current(); auto object = env->NewObject(self(), constructor.getId(), detail::callToJni( detail::Convert::type>::toCall(args))...); @@ -338,18 +354,11 @@ struct Convert { }; } -// jthrowable ////////////////////////////////////////////////////////////////////////////////////// - -inline local_ref JThrowable::initCause(alias_ref cause) { - static auto meth = javaClassStatic()->getMethod("initCause"); - return meth(self(), cause.get()); -} - // jtypeArray ////////////////////////////////////////////////////////////////////////////////////// namespace detail { inline size_t JArray::size() const noexcept { - const auto env = internal::getEnv(); + const auto env = Environment::current(); return env->GetArrayLength(self()); } } @@ -409,8 +418,8 @@ std::string JArrayClass::get_instantiated_base_name() { template auto JArrayClass::newArray(size_t size) -> local_ref { - static auto elementClass = findClassStatic(jtype_traits::base_name().c_str()); - const auto env = internal::getEnv(); + static const auto elementClass = findClassStatic(jtype_traits::base_name().c_str()); + const auto env = Environment::current(); auto rawArray = env->NewObjectArray(size, elementClass.get(), nullptr); FACEBOOK_JNI_THROW_EXCEPTION_IF(!rawArray); return adopt_local(static_cast(rawArray)); @@ -418,13 +427,13 @@ auto JArrayClass::newArray(size_t size) -> local_ref { template inline void JArrayClass::setElement(size_t idx, const T& value) { - const auto env = internal::getEnv(); + const auto env = Environment::current(); env->SetObjectArrayElement(this->self(), idx, value); } template inline local_ref JArrayClass::getElement(size_t idx) { - const auto env = internal::getEnv(); + const auto env = Environment::current(); auto rawElement = env->GetObjectArrayElement(this->self(), idx); return adopt_local(static_cast(rawElement)); } @@ -434,12 +443,16 @@ inline detail::ElementProxy> JArrayClass::operator[](size_t in return detail::ElementProxy>(this, index); } +template +local_ref::javaobject> adopt_local_array(jobjectArray ref) { + return adopt_local(static_cast::javaobject>(ref)); +} + // jarray ///////////////////////////////////////////////////////////////////////////////////////// template auto JPrimitiveArray::getRegion(jsize start, jsize length) -> std::unique_ptr { - using T = typename jtype_traits::entry_type; auto buf = std::unique_ptr{new T[length]}; getRegion(start, length, buf.get()); return buf; @@ -510,7 +523,7 @@ class PinnedCriticalAlloc { jboolean* isCopy) { (void)start; (void)length; - const auto env = internal::getEnv(); + const auto env = Environment::current(); *elements = static_cast(env->GetPrimitiveArrayCritical(array.get(), isCopy)); FACEBOOK_JNI_THROW_EXCEPTION_IF(!elements); *size = array->size(); @@ -523,7 +536,7 @@ class PinnedCriticalAlloc { jint mode) { (void)start; (void)size; - const auto env = internal::getEnv(); + const auto env = Environment::current(); env->ReleasePrimitiveArrayCritical(array.get(), elements, mode); } }; diff --git a/lib/fb/src/main/cpp/include/fb/fbjni/CoreClasses.h b/lib/fb/src/main/cpp/include/fbjni/detail/CoreClasses.h similarity index 88% rename from lib/fb/src/main/cpp/include/fb/fbjni/CoreClasses.h rename to lib/fb/src/main/cpp/include/fbjni/detail/CoreClasses.h index 09fa8b82..53b4118b 100644 --- a/lib/fb/src/main/cpp/include/fb/fbjni/CoreClasses.h +++ b/lib/fb/src/main/cpp/include/fbjni/detail/CoreClasses.h @@ -20,14 +20,19 @@ #include -#include - namespace facebook { namespace jni { class JClass; class JObject; +namespace detail { + +/// Lookup a class by name. This should only be used internally. +jclass findClass(JNIEnv* env, const char* name); + +} + /// Lookup a class by name. Note this functions returns an alias_ref that /// points to a leaked global reference. This is appropriate for classes /// that are never unloaded (which is any class in an Android app and most @@ -37,7 +42,7 @@ class JObject; /// in a "static auto" variable, or a static global. /// /// @return Returns a leaked global reference to the class -FBEXPORT alias_ref findClassStatic(const char* name); +alias_ref findClassStatic(const char* name); /// Lookup a class by name. Note this functions returns a local reference, /// which means that it must not be stored in a static variable. @@ -46,12 +51,12 @@ FBEXPORT alias_ref findClassStatic(const char* name); /// (like caching method ids). /// /// @return Returns a global reference to the class -FBEXPORT local_ref findClassLocal(const char* name); +local_ref findClassLocal(const char* name); /// Check to see if two references refer to the same object. Comparison with nullptr /// returns true if and only if compared to another nullptr. A weak reference that /// refers to a reclaimed object count as nullptr. -FBEXPORT bool isSameObject(alias_ref lhs, alias_ref rhs) noexcept; +bool isSameObject(alias_ref lhs, alias_ref rhs) noexcept; // Together, these classes allow convenient use of any class with the fbjni // helpers. To use: @@ -70,7 +75,7 @@ FBEXPORT bool isSameObject(alias_ref lhs, alias_ref rhs) noexc // constexpr static auto kJavaDescriptor = "Lcom/example/package/MyClass;"; // // void foo() { -// static auto method = javaClassStatic()->getMethod("foo"); +// static const auto method = javaClassStatic()->getMethod("foo"); // method(self()); // } // @@ -94,7 +99,7 @@ static local_ref newInstance(Args... args); class MonitorLock; -class FBEXPORT JObject : detail::JObjectBase { +class JObject : detail::JObjectBase { public: static constexpr auto kJavaDescriptor = "Ljava/lang/Object;"; @@ -115,10 +120,12 @@ public: template local_ref getFieldValue(JField field) const noexcept; - /// Set the value of field. Any Java type is accepted, including the primitive types - /// and raw reference types. + /// Set the value of field. Any Java type is accepted. template void setFieldValue(JField field, T value) noexcept; + template(), T>::type> + void setFieldValue(JField field, alias_ref value) noexcept; /// Convenience method to create a std::string representing the object std::string toString() const; @@ -190,7 +197,7 @@ struct JTypeFor { // jthrowable) to be used as javaobject. This should only be necessary for // built-in jni types and not user-defined ones. template -class FBEXPORT JavaClass : public Base { +class JavaClass : public Base { using JObjType = typename detail::JTypeFor; public: using _javaobject = typename JObjType::_javaobject; @@ -218,7 +225,7 @@ protected: /// Wrapper to provide functionality to jclass references struct NativeMethod; -class FBEXPORT JClass : public JavaClass { +class JClass : public JavaClass { public: /// Java type descriptor static constexpr const char* kJavaDescriptor = "Ljava/lang/Class;"; @@ -295,10 +302,12 @@ class FBEXPORT JClass : public JavaClass { template local_ref getStaticFieldValue(JStaticField field) noexcept; - /// Set the value of field. Any Java type is accepted, including the primitive types - /// and raw reference types. + /// Set the value of field. Any Java type is accepted. template void setStaticFieldValue(JStaticField field, T value) noexcept; + template(), T>::type> + void setStaticFieldValue(JStaticField field, alias_ref value) noexcept; /// Allocates a new object and invokes the specified constructor template @@ -330,27 +339,23 @@ private: void registerNatives(const char* name, std::initializer_list methods); /// Wrapper to provide functionality to jstring references -class FBEXPORT JString : public JavaClass { +class JString : public JavaClass { public: /// Java type descriptor static constexpr const char* kJavaDescriptor = "Ljava/lang/String;"; /// Convenience method to convert a jstring object to a std::string std::string toStdString() const; + + /// Convenience method to convert a jstring object to a std::u16string + std::u16string toU16String() const; }; -/// Convenience functions to convert a std::string or const char* into a @ref local_ref to a -/// jstring -FBEXPORT local_ref make_jstring(const char* modifiedUtf8); -FBEXPORT local_ref make_jstring(const std::string& modifiedUtf8); - -/// Wrapper to provide functionality to jthrowable references -class FBEXPORT JThrowable : public JavaClass { - public: - static constexpr const char* kJavaDescriptor = "Ljava/lang/Throwable;"; - - local_ref initCause(alias_ref cause); -}; +/// Convenience functions to convert a const char*, std::string, or std::u16string +/// into a @ref local_ref to a jstring. +local_ref make_jstring(const char* modifiedUtf8); +local_ref make_jstring(const std::string& modifiedUtf8); +local_ref make_jstring(const std::u16string& utf16); namespace detail { template @@ -378,7 +383,7 @@ class ElementProxy { } namespace detail { -class FBEXPORT JArray : public JavaClass { +class JArray : public JavaClass { public: // This cannot be used in a scope that derives a descriptor (like in a method // signature). Use a more derived type instead (like JArrayInt or @@ -390,7 +395,7 @@ class FBEXPORT JArray : public JavaClass { // This is used so that the JArrayClass javaobject extends jni's // jobjectArray. This class should not be used directly. A general Object[] // should use JArrayClass. -class FBEXPORT JTypeArray : public JavaClass { +class JTypeArray : public JavaClass { // This cannot be used in a scope that derives a descriptor (like in a method // signature). static constexpr const char* kJavaDescriptor = nullptr; @@ -440,9 +445,7 @@ template using jtypeArray = typename JArrayClass::javaobject; template -local_ref::javaobject> adopt_local_array(jobjectArray ref) { - return adopt_local(static_cast::javaobject>(ref)); -} +local_ref::javaobject> adopt_local_array(jobjectArray ref); template local_ref adopt_local(detail::ElementProxy elementProxy) { @@ -460,7 +463,7 @@ template class PinnedCriticalAlloc; /// This is an empty holder by itself. Construct a PinnedPrimitiveArray to actually interact with /// the elements of the array. template -class FBEXPORT JPrimitiveArray : +class JPrimitiveArray : public JavaClass, detail::JArray, JArrayType> { static_assert(is_jni_primitive_array(), ""); public: @@ -500,14 +503,14 @@ private: void releaseElements(T* elements, jint mode); }; -FBEXPORT local_ref make_boolean_array(jsize size); -FBEXPORT local_ref make_byte_array(jsize size); -FBEXPORT local_ref make_char_array(jsize size); -FBEXPORT local_ref make_short_array(jsize size); -FBEXPORT local_ref make_int_array(jsize size); -FBEXPORT local_ref make_long_array(jsize size); -FBEXPORT local_ref make_float_array(jsize size); -FBEXPORT local_ref make_double_array(jsize size); +local_ref make_boolean_array(jsize size); +local_ref make_byte_array(jsize size); +local_ref make_char_array(jsize size); +local_ref make_short_array(jsize size); +local_ref make_int_array(jsize size); +local_ref make_long_array(jsize size); +local_ref make_float_array(jsize size); +local_ref make_double_array(jsize size); using JArrayBoolean = JPrimitiveArray; using JArrayByte = JPrimitiveArray; @@ -569,6 +572,29 @@ class PinnedPrimitiveArray { friend class JPrimitiveArray::array_type>; }; +struct JStackTraceElement : JavaClass { + static auto constexpr kJavaDescriptor = "Ljava/lang/StackTraceElement;"; + + static local_ref create(const std::string& declaringClass, const std::string& methodName, const std::string& file, int line); + + std::string getClassName() const; + std::string getMethodName() const; + std::string getFileName() const; + int getLineNumber() const; +}; + +/// Wrapper to provide functionality to jthrowable references +class JThrowable : public JavaClass { + public: + static constexpr const char* kJavaDescriptor = "Ljava/lang/Throwable;"; + + using JStackTrace = JArrayClass; + + local_ref initCause(alias_ref cause); + local_ref getStackTrace(); + void setStackTrace(alias_ref>); +}; + #pragma push_macro("PlainJniRefMap") #undef PlainJniRefMap #define PlainJniRefMap(rtype, jtype) \ diff --git a/lib/fb/src/main/cpp/include/fb/Environment.h b/lib/fb/src/main/cpp/include/fbjni/detail/Environment.h similarity index 58% rename from lib/fb/src/main/cpp/include/fb/Environment.h rename to lib/fb/src/main/cpp/include/fbjni/detail/Environment.h index 53b14c80..5453e54b 100644 --- a/lib/fb/src/main/cpp/include/fb/Environment.h +++ b/lib/fb/src/main/cpp/include/fbjni/detail/Environment.h @@ -9,24 +9,69 @@ #include #include -#include namespace facebook { namespace jni { // Keeps a thread-local reference to the current thread's JNIEnv. struct Environment { - // May be null if this thread isn't attached to the JVM - FBEXPORT static JNIEnv* current(); + // Throws a std::runtime_error if this thread isn't attached to the JVM + // TODO(T6594868) Benchmark against raw JNI access + static JNIEnv* current(); static void initialize(JavaVM* vm); // There are subtle issues with calling the next functions directly. It is // much better to always use a ThreadScope to manage attaching/detaching for // you. - FBEXPORT static JNIEnv* ensureCurrentThreadIsAttached(); - FBEXPORT static void detachCurrentThread(); + static JNIEnv* ensureCurrentThreadIsAttached(); }; +namespace detail { + +// This will return null the thread isn't attached to the VM, or if +// fbjni has never been initialized with a VM at all. You probably +// shouldn't be using this. +JNIEnv* currentOrNull(); + +/** + * If there's thread-local data, it's a pointer to one of these. The + * instance is a member of JniEnvCacher or ThreadScope, and lives on + * the stack. + */ +struct TLData { + // This is modified only by JniEnvCacher, and is guaranteed to be + // valid if set, and refer to an env which originated from a JNI + // call into C++. + JNIEnv* env; + // This is modified only by ThreadScope, and is set only if an + // instance of ThreadScope which attached is on the stack. + bool attached; +}; + +/** + * RAII object which manages a cached JNIEnv* value. A Value is only + * cached if it is guaranteed safe, which means when C++ is called + * from a registered fbjni function. + */ +class JniEnvCacher { +public: + JniEnvCacher(JNIEnv* env); + JniEnvCacher(JniEnvCacher&) = delete; + JniEnvCacher(JniEnvCacher&&) = default; + JniEnvCacher& operator=(JniEnvCacher&) = delete; + JniEnvCacher& operator=(JniEnvCacher&&) = delete; + ~JniEnvCacher(); + +private: + // If this flag is set, then, this object needs to clear the cache. + bool thisCached_; + + // The thread local pointer may point here. + detail::TLData data_; +}; + +} + /** * RAII Object that attaches a thread to the JVM. Failing to detach from a thread before it * exits will cause a crash, as will calling Detach an extra time, and this guard class helps @@ -48,8 +93,11 @@ struct Environment { * class or instance to the new thread; this bypasses the need for the class loader. * (See http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/invocation.html#attach_current_thread) * If you need access to the application's classes, you can use ThreadScope::WithClassLoader. + * - If fbjni has never been initialized, there will be no JavaVM object to attach with. + * In that case, a std::runtime_error will be thrown. This is only likely to happen in a + * standalone C++ application, or if Environment::initialize is not used. */ -class FBEXPORT ThreadScope { +class ThreadScope { public: ThreadScope(); ThreadScope(ThreadScope&) = delete; @@ -67,8 +115,14 @@ class FBEXPORT ThreadScope { static void WithClassLoader(std::function&& runnable); static void OnLoad(); + private: - bool attachedWithThisScope_; + // If this flag is set, then this object needs to detach. + bool thisAttached_; + + // The thread local pointer may point here. + detail::TLData data_; }; + } } diff --git a/lib/fb/src/main/cpp/include/fb/fbjni/Exceptions.h b/lib/fb/src/main/cpp/include/fbjni/detail/Exceptions.h similarity index 79% rename from lib/fb/src/main/cpp/include/fb/fbjni/Exceptions.h rename to lib/fb/src/main/cpp/include/fbjni/detail/Exceptions.h index fe28154f..94b642b9 100644 --- a/lib/fb/src/main/cpp/include/fb/fbjni/Exceptions.h +++ b/lib/fb/src/main/cpp/include/fbjni/detail/Exceptions.h @@ -23,12 +23,15 @@ #include -#include - #include "Common.h" #include "References.h" #include "CoreClasses.h" +#if defined(__ANDROID__) && defined(__ARM_ARCH_5TE__) && !defined(FBJNI_NO_EXCEPTION_PTR) +// ARMv5 NDK does not support exception_ptr so we cannot use that when building for it. +#define FBJNI_NO_EXCEPTION_PTR +#endif + namespace facebook { namespace jni { @@ -57,10 +60,10 @@ class JCppException : public JavaClass { * * Note: the what() method of this class is not thread-safe (t6900503). */ -class FBEXPORT JniException : public std::exception { +class JniException : public std::exception { public: JniException(); - ~JniException(); + ~JniException() override; explicit JniException(alias_ref throwable); @@ -70,7 +73,7 @@ class FBEXPORT JniException : public std::exception { local_ref getThrowable() const noexcept; - virtual const char* what() const noexcept; + const char* what() const noexcept override; void setJavaException() const noexcept; @@ -105,11 +108,23 @@ template } // Identifies any pending C++ exception and throws it as a Java exception. If the exception can't -// be thrown, it aborts the program. This is a noexcept function at C++ level. -FBEXPORT void translatePendingCppExceptionToJavaException() noexcept; +// be thrown, it aborts the program. +void translatePendingCppExceptionToJavaException(); + +#ifndef FBJNI_NO_EXCEPTION_PTR +local_ref getJavaExceptionForCppException(std::exception_ptr ptr); +#endif + +/*** + * The stack returned may include build ids. It may be beneficial to + * call lyra::setLibraryIdentifierFunction before calling this if + * build ids are desirable. + */ +local_ref getJavaExceptionForCppBackTrace(); + +local_ref getJavaExceptionForCppBackTrace(const char* msg); // For convenience, some exception names in java.lang are available here. - const char* const gJavaLangIllegalArgumentException = "java/lang/IllegalArgumentException"; }} diff --git a/lib/fb/src/main/cpp/include/fb/fbjni/Hybrid.h b/lib/fb/src/main/cpp/include/fbjni/detail/Hybrid.h similarity index 72% rename from lib/fb/src/main/cpp/include/fb/fbjni/Hybrid.h rename to lib/fb/src/main/cpp/include/fbjni/detail/Hybrid.h index 8db5b0b9..430d7ca3 100644 --- a/lib/fb/src/main/cpp/include/fb/fbjni/Hybrid.h +++ b/lib/fb/src/main/cpp/include/fbjni/detail/Hybrid.h @@ -9,9 +9,6 @@ #include #include -#include -#include - #include "CoreClasses.h" namespace facebook { @@ -24,13 +21,45 @@ public: virtual ~BaseHybridClass() {} }; -struct FBEXPORT HybridData : public JavaClass { +struct HybridData : public JavaClass { constexpr static auto kJavaDescriptor = "Lcom/facebook/jni/HybridData;"; - void setNativePointer(std::unique_ptr new_value); - BaseHybridClass* getNativePointer(); static local_ref create(); }; +class HybridDestructor : public JavaClass { + public: + static auto constexpr kJavaDescriptor = "Lcom/facebook/jni/HybridData$Destructor;"; + + detail::BaseHybridClass* getNativePointer(); + + void setNativePointer(std::unique_ptr new_value); +}; + +template +detail::BaseHybridClass* getNativePointer(T t) { + return getHolder(t)->getNativePointer(); +} + +template +void setNativePointer(T t, std::unique_ptr new_value) { + getHolder(t)->setNativePointer(std::move(new_value)); +} + +template +local_ref getHolder(T t) { + static auto holderField = t->getClass()->template getField("mDestructor"); + return t->getFieldValue(holderField); +} + +// JavaClass for HybridClassBase +struct HybridClassBase : public JavaClass { + constexpr static auto kJavaDescriptor = "Lcom/facebook/jni/HybridClassBase;"; + + static bool isHybridClassBase(alias_ref jclass) { + return HybridClassBase::javaClassStatic()->isAssignableFrom(jclass); + } +}; + template struct HybridTraits { // This static assert should actually always fail if we don't use one of the @@ -65,7 +94,7 @@ struct HybridTraits< // convert to HybridClass* from jhybridobject template -struct FBEXPORT Convert< +struct Convert< T, typename std::enable_if< std::is_base_of::type>::value>::type> { typedef typename std::remove_pointer::type::jhybridobject jniType; @@ -90,7 +119,7 @@ struct RefReprType -class FBEXPORT HybridClass : public detail::HybridTraits::CxxBase { +class HybridClass : public detail::HybridTraits::CxxBase { public: struct JavaPart : JavaClass::JavaBase> { // At this point, T is incomplete, and so we cannot access @@ -107,6 +136,7 @@ public: T* cthis(); friend class HybridClass; + friend T; }; using jhybridobject = typename JavaPart::javaobject; @@ -136,7 +166,7 @@ protected: static local_ref makeHybridData(std::unique_ptr cxxPart) { auto hybridData = detail::HybridData::create(); - hybridData->setNativePointer(std::move(cxxPart)); + setNativePointer(hybridData, std::move(cxxPart)); return hybridData; } @@ -145,6 +175,11 @@ protected: return makeHybridData(std::unique_ptr(new T(std::forward(args)...))); } + template + static void setCxxInstance(alias_ref o, Args&&... args) { + setNativePointer(o, std::unique_ptr(new T(std::forward(args)...))); + } + public: // Factory method for creating a hybrid object where the arguments // are used to initialize the C++ part directly without passing them @@ -158,11 +193,23 @@ public: // C++ object fails, or any JNI methods throw. template static local_ref newObjectCxxArgs(Args&&... args) { - auto hybridData = makeCxxInstance(std::forward(args)...); - return JavaPart::newInstance(hybridData); + static bool isHybrid = detail::HybridClassBase::isHybridClassBase(javaClassStatic()); + auto cxxPart = std::unique_ptr(new T(std::forward(args)...)); + + local_ref result; + if (isHybrid) { + result = JavaPart::newInstance(); + setNativePointer(result, std::move(cxxPart)); + } + else { + auto hybridData = makeHybridData(std::move(cxxPart)); + result = JavaPart::newInstance(hybridData); + } + + return result; } - // TODO? Create reusable interface for Allocatable classes and use it to + // TODO? Create reusable interface for Allocatable classes and use it to // strengthen type-checking (and possibly provide a default // implementation of allocate().) template @@ -194,17 +241,23 @@ public: template inline T* HybridClass::JavaPart::cthis() { - static auto field = - HybridClass::JavaPart::javaClassStatic()->template getField("mHybridData"); - auto hybridData = this->getFieldValue(field); - if (!hybridData) { - throwNewJavaException("java/lang/NullPointerException", "java.lang.NullPointerException"); + detail::BaseHybridClass* result = 0; + static bool isHybrid = detail::HybridClassBase::isHybridClassBase(this->getClass()); + if (isHybrid) { + result = getNativePointer(this); + } else { + static auto field = + HybridClass::JavaPart::javaClassStatic()->template getField("mHybridData"); + auto hybridData = this->getFieldValue(field); + if (!hybridData) { + throwNewJavaException("java/lang/NullPointerException", "java.lang.NullPointerException"); + } + + result = getNativePointer(hybridData); } + // I'd like to use dynamic_cast here, but -fno-rtti is the default. - T* value = static_cast(hybridData->getNativePointer()); - // This would require some serious programmer error. - FBASSERTMSGF(value != 0, "Incorrect C++ type in hybrid field"); - return value; + return static_cast(result); }; template diff --git a/lib/fb/src/main/cpp/include/fb/fbjni/Iterator-inl.h b/lib/fb/src/main/cpp/include/fbjni/detail/Iterator-inl.h similarity index 98% rename from lib/fb/src/main/cpp/include/fb/fbjni/Iterator-inl.h rename to lib/fb/src/main/cpp/include/fbjni/detail/Iterator-inl.h index f7c62dcc..d0df3455 100644 --- a/lib/fb/src/main/cpp/include/fb/fbjni/Iterator-inl.h +++ b/lib/fb/src/main/cpp/include/fbjni/detail/Iterator-inl.h @@ -32,7 +32,7 @@ struct IteratorHelper : public JavaClass> { value_type next() { static auto elementField = JavaBase_::javaClassStatic()->template getField("mElement"); - return dynamic_ref_cast(JavaBase_::getFieldValue(elementField)); + return dynamic_ref_cast>(JavaBase_::getFieldValue(elementField)); } static void reset(value_type& v) { diff --git a/lib/fb/src/main/cpp/include/fb/fbjni/Iterator.h b/lib/fb/src/main/cpp/include/fbjni/detail/Iterator.h similarity index 100% rename from lib/fb/src/main/cpp/include/fb/fbjni/Iterator.h rename to lib/fb/src/main/cpp/include/fbjni/detail/Iterator.h diff --git a/lib/fb/src/main/cpp/include/fbjni/detail/JWeakReference.h b/lib/fb/src/main/cpp/include/fbjni/detail/JWeakReference.h new file mode 100644 index 00000000..4a95fd35 --- /dev/null +++ b/lib/fb/src/main/cpp/include/fbjni/detail/JWeakReference.h @@ -0,0 +1,39 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#pragma once + +#include "CoreClasses.h" + +namespace facebook { +namespace jni { + +/** + * Wrap Java's WeakReference instead of using JNI WeakGlobalRefs. + * A WeakGlobalRef can yield a strong reference even after the object has been + * finalized. See comment in the djinni library. + * https://github.com/dropbox/djinni/blob/master/support-lib/jni/djinni_support.hpp + */ +template +class JWeakReference : public JavaClass> { + + typedef JavaClass> JavaBase_; + + public: + static constexpr const char* kJavaDescriptor = "Ljava/lang/ref/WeakReference;"; + + static local_ref> newInstance(alias_ref object) { + return JavaBase_::newInstance(static_ref_cast(object)); + } + + local_ref get() const { + static const auto method = JavaBase_::javaClassStatic()->template getMethod("get"); + return static_ref_cast(method(JavaBase_::self())); + } +}; + +} +} diff --git a/lib/fb/src/main/cpp/include/fbjni/detail/Log.h b/lib/fb/src/main/cpp/include/fbjni/detail/Log.h new file mode 100644 index 00000000..26b34aa3 --- /dev/null +++ b/lib/fb/src/main/cpp/include/fbjni/detail/Log.h @@ -0,0 +1,67 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +/** @file ALog.h + * + * Very simple (android only) logging. Define LOG_TAG to enable the macros. + */ + +#pragma once + +#ifdef __ANDROID__ + +#include + +namespace facebook { +namespace jni { +namespace log_ { +// the weird name of this namespace is to avoid a conflict with the +// function named log. + +inline void loge(const char* tag, const char* msg) noexcept { + __android_log_write(ANDROID_LOG_ERROR, tag, msg); +} + +template +inline void loge(const char* tag, const char* msg, ARGS... args) noexcept { + __android_log_print(ANDROID_LOG_ERROR, tag, msg, args...); +} + +inline void logf(const char* tag, const char* msg) noexcept { + __android_log_write(ANDROID_LOG_FATAL, tag, msg); +} + +template +inline void logf(const char* tag, const char* msg, ARGS... args) noexcept { + __android_log_print(ANDROID_LOG_FATAL, tag, msg, args...); +} + +template +[[noreturn]] +inline void logassert(const char* tag, const char* msg, ARGS... args) noexcept { + __android_log_assert(0, tag, msg, args...); +} + + +#ifdef LOG_TAG +# define FBJNI_LOGE(...) ::facebook::jni::log_::loge(LOG_TAG, __VA_ARGS__) +# define FBJNI_LOGF(...) ::facebook::jni::log_::logf(LOG_TAG, __VA_ARGS__) +# define FBJNI_ASSERT(cond) do { if (!(cond)) ::facebook::jni::log_::logassert(LOG_TAG, "%s", #cond); } while(0) +#else +# define FBJNI_LOGE(...) ::facebook::jni::log_::loge("log", __VA_ARGS__) +# define FBJNI_LOGF(...) ::facebook::jni::log_::logf("log", __VA_ARGS__) +# define FBJNI_ASSERT(cond) do { if (!(cond)) ::facebook::jni::log_::logassert("log", "%s", #cond); } while(0) +#endif + +}}} + +#else +#include + +# define FBJNI_LOGE(...) ((void)0) +# define FBJNI_LOGF(...) (abort()) +# define FBJNI_ASSERT(cond) ((void)0) +#endif diff --git a/lib/fb/src/main/cpp/include/fb/fbjni/Meta-forward.h b/lib/fb/src/main/cpp/include/fbjni/detail/Meta-forward.h similarity index 100% rename from lib/fb/src/main/cpp/include/fb/fbjni/Meta-forward.h rename to lib/fb/src/main/cpp/include/fbjni/detail/Meta-forward.h diff --git a/lib/fb/src/main/cpp/include/fb/fbjni/Meta-inl.h b/lib/fb/src/main/cpp/include/fbjni/detail/Meta-inl.h similarity index 85% rename from lib/fb/src/main/cpp/include/fb/fbjni/Meta-inl.h rename to lib/fb/src/main/cpp/include/fbjni/detail/Meta-inl.h index dfa2c375..a2754374 100644 --- a/lib/fb/src/main/cpp/include/fb/fbjni/Meta-inl.h +++ b/lib/fb/src/main/cpp/include/fbjni/detail/Meta-inl.h @@ -14,10 +14,6 @@ #include "References.h" #include "Boxed.h" -#if defined(__ANDROID__) -#include -#endif - namespace facebook { namespace jni { @@ -63,31 +59,10 @@ local_ref::javaobject> makeArgsArray(Args... args) { return arr; } - -inline bool needsSlowPath(alias_ref obj) { -#if defined(__ANDROID__) - // On Android 6.0, art crashes when attempting to call a function on a Proxy. - // So, when we detect that case we must use the safe, slow workaround. That is, - // we resolve the method id to the corresponding java.lang.reflect.Method object - // and make the call via it's invoke() method. - static auto android_sdk = ([] { - char sdk_version_str[PROP_VALUE_MAX]; - __system_property_get("ro.build.version.sdk", sdk_version_str); - return atoi(sdk_version_str); - })(); - static auto is_bad_android = android_sdk == 23; - if (!is_bad_android) return false; - static auto proxy_class = findClassStatic("java/lang/reflect/Proxy"); - return obj->isInstanceOf(proxy_class); -#else - return false; -#endif -} - } template -inline void JMethod::operator()(alias_ref self, Args... args) { +inline void JMethod::operator()(alias_ref self, Args... args) const { const auto env = Environment::current(); env->CallVoidMethod( self.get(), @@ -98,10 +73,10 @@ inline void JMethod::operator()(alias_ref self, Args... #pragma push_macro("DEFINE_PRIMITIVE_CALL") #undef DEFINE_PRIMITIVE_CALL -#define DEFINE_PRIMITIVE_CALL(TYPE, METHOD, CLASS) \ +#define DEFINE_PRIMITIVE_CALL(TYPE, METHOD) \ template \ -inline TYPE JMethod::operator()(alias_ref self, Args... args) { \ - const auto env = internal::getEnv(); \ +inline TYPE JMethod::operator()(alias_ref self, Args... args) const { \ + const auto env = Environment::current(); \ auto result = env->Call ## METHOD ## Method( \ self.get(), \ getId(), \ @@ -110,14 +85,14 @@ inline TYPE JMethod::operator()(alias_ref self, Args... return result; \ } -DEFINE_PRIMITIVE_CALL(jboolean, Boolean, JBoolean) -DEFINE_PRIMITIVE_CALL(jbyte, Byte, JByte) -DEFINE_PRIMITIVE_CALL(jchar, Char, JCharacter) -DEFINE_PRIMITIVE_CALL(jshort, Short, JShort) -DEFINE_PRIMITIVE_CALL(jint, Int, JInteger) -DEFINE_PRIMITIVE_CALL(jlong, Long, JLong) -DEFINE_PRIMITIVE_CALL(jfloat, Float, JFloat) -DEFINE_PRIMITIVE_CALL(jdouble, Double, JDouble) +DEFINE_PRIMITIVE_CALL(jboolean, Boolean) +DEFINE_PRIMITIVE_CALL(jbyte, Byte) +DEFINE_PRIMITIVE_CALL(jchar, Char) +DEFINE_PRIMITIVE_CALL(jshort, Short) +DEFINE_PRIMITIVE_CALL(jint, Int) +DEFINE_PRIMITIVE_CALL(jlong, Long) +DEFINE_PRIMITIVE_CALL(jfloat, Float) +DEFINE_PRIMITIVE_CALL(jdouble, Double) #pragma pop_macro("DEFINE_PRIMITIVE_CALL") /// JMethod specialization for references that wraps the return value in a @ref local_ref @@ -132,13 +107,13 @@ class JMethod : public JMethodBase { JMethod(const JMethod& other) noexcept = default; /// Invoke a method and return a local reference wrapping the result - local_ref operator()(alias_ref self, Args... args); + local_ref operator()(alias_ref self, Args... args) const; friend class JClass; }; template -inline auto JMethod::operator()(alias_ref self, Args... args) -> local_ref { +inline auto JMethod::operator()(alias_ref self, Args... args) const -> local_ref { const auto env = Environment::current(); auto result = env->CallObjectMethod( self.get(), @@ -149,8 +124,8 @@ inline auto JMethod::operator()(alias_ref self, Args... arg } template -inline void JStaticMethod::operator()(alias_ref cls, Args... args) { - const auto env = internal::getEnv(); +inline void JStaticMethod::operator()(alias_ref cls, Args... args) const { + const auto env = Environment::current(); env->CallStaticVoidMethod( cls.get(), getId(), @@ -162,8 +137,8 @@ inline void JStaticMethod::operator()(alias_ref cls, Args #undef DEFINE_PRIMITIVE_STATIC_CALL #define DEFINE_PRIMITIVE_STATIC_CALL(TYPE, METHOD) \ template \ -inline TYPE JStaticMethod::operator()(alias_ref cls, Args... args) { \ - const auto env = internal::getEnv(); \ +inline TYPE JStaticMethod::operator()(alias_ref cls, Args... args) const { \ + const auto env = Environment::current(); \ auto result = env->CallStatic ## METHOD ## Method( \ cls.get(), \ getId(), \ @@ -194,8 +169,8 @@ class JStaticMethod : public JMethodBase { JStaticMethod(const JStaticMethod& other) noexcept = default; /// Invoke a method and return a local reference wrapping the result - local_ref operator()(alias_ref cls, Args... args) { - const auto env = internal::getEnv(); + local_ref operator()(alias_ref cls, Args... args) const { + const auto env = Environment::current(); auto result = env->CallStaticObjectMethod( cls.get(), getId(), @@ -209,8 +184,8 @@ class JStaticMethod : public JMethodBase { template inline void -JNonvirtualMethod::operator()(alias_ref self, alias_ref cls, Args... args) { - const auto env = internal::getEnv(); +JNonvirtualMethod::operator()(alias_ref self, alias_ref cls, Args... args) const { + const auto env = Environment::current(); env->CallNonvirtualVoidMethod( self.get(), cls.get(), @@ -224,8 +199,8 @@ JNonvirtualMethod::operator()(alias_ref self, alias_ref< #define DEFINE_PRIMITIVE_NON_VIRTUAL_CALL(TYPE, METHOD) \ template \ inline TYPE \ -JNonvirtualMethod::operator()(alias_ref self, alias_ref cls, Args... args) { \ - const auto env = internal::getEnv(); \ +JNonvirtualMethod::operator()(alias_ref self, alias_ref cls, Args... args) const { \ + const auto env = Environment::current(); \ auto result = env->CallNonvirtual ## METHOD ## Method( \ self.get(), \ cls.get(), \ @@ -256,8 +231,8 @@ class JNonvirtualMethod : public JMethodBase { JNonvirtualMethod(const JNonvirtualMethod& other) noexcept = default; /// Invoke a method and return a local reference wrapping the result - local_ref operator()(alias_ref self, alias_ref cls, Args... args){ - const auto env = internal::getEnv(); + local_ref operator()(alias_ref self, alias_ref cls, Args... args) const { + const auto env = Environment::current(); auto result = env->CallNonvirtualObjectMethod( self.get(), cls.get(), @@ -306,13 +281,13 @@ inline jfieldID JField::getId() const noexcept { #define DEFINE_FIELD_PRIMITIVE_GET_SET(TYPE, METHOD) \ template<> \ inline TYPE JField::get(jobject object) const noexcept { \ - const auto env = internal::getEnv(); \ + const auto env = Environment::current(); \ return env->Get ## METHOD ## Field(object, field_id_); \ } \ \ template<> \ inline void JField::set(jobject object, TYPE value) noexcept { \ - const auto env = internal::getEnv(); \ + const auto env = Environment::current(); \ env->Set ## METHOD ## Field(object, field_id_, value); \ } @@ -328,12 +303,12 @@ DEFINE_FIELD_PRIMITIVE_GET_SET(jdouble, Double) template inline T JField::get(jobject object) const noexcept { - return static_cast(internal::getEnv()->GetObjectField(object, field_id_)); + return static_cast(Environment::current()->GetObjectField(object, field_id_)); } template inline void JField::set(jobject object, T value) noexcept { - internal::getEnv()->SetObjectField(object, field_id_, static_cast(value)); + Environment::current()->SetObjectField(object, field_id_, static_cast(value)); } // JStaticField ///////////////////////////////////////////////////////////////////////////////// @@ -358,13 +333,13 @@ inline jfieldID JStaticField::getId() const noexcept { #define DEFINE_STATIC_FIELD_PRIMITIVE_GET_SET(TYPE, METHOD) \ template<> \ inline TYPE JStaticField::get(jclass jcls) const noexcept { \ - const auto env = internal::getEnv(); \ + const auto env = Environment::current(); \ return env->GetStatic ## METHOD ## Field(jcls, field_id_); \ } \ \ template<> \ inline void JStaticField::set(jclass jcls, TYPE value) noexcept { \ - const auto env = internal::getEnv(); \ + const auto env = Environment::current(); \ env->SetStatic ## METHOD ## Field(jcls, field_id_, value); \ } @@ -380,13 +355,13 @@ DEFINE_STATIC_FIELD_PRIMITIVE_GET_SET(jdouble, Double) template inline T JStaticField::get(jclass jcls) const noexcept { - const auto env = internal::getEnv(); + const auto env = Environment::current(); return static_cast(env->GetStaticObjectField(jcls, field_id_)); } template inline void JStaticField::set(jclass jcls, T value) noexcept { - internal::getEnv()->SetStaticObjectField(jcls, field_id_, value); + Environment::current()->SetStaticObjectField(jcls, field_id_, value); } diff --git a/lib/fb/src/main/cpp/include/fb/fbjni/Meta.h b/lib/fb/src/main/cpp/include/fbjni/detail/Meta.h similarity index 98% rename from lib/fb/src/main/cpp/include/fb/fbjni/Meta.h rename to lib/fb/src/main/cpp/include/fbjni/detail/Meta.h index 418dffbd..b0e95fbe 100644 --- a/lib/fb/src/main/cpp/include/fb/fbjni/Meta.h +++ b/lib/fb/src/main/cpp/include/fbjni/detail/Meta.h @@ -80,7 +80,7 @@ class JMethod : public JMethodBase { JMethod() noexcept {}; \ JMethod(const JMethod& other) noexcept = default; \ \ - TYPE operator()(alias_ref self, Args... args); \ + TYPE operator()(alias_ref self, Args... args) const; \ \ friend class JClass; \ } @@ -130,7 +130,7 @@ class JStaticMethod : public JMethodBase { \ JStaticMethod() noexcept {}; \ JStaticMethod(const JStaticMethod& other) noexcept = default; \ \ - TYPE operator()(alias_ref cls, Args... args); \ + TYPE operator()(alias_ref cls, Args... args) const; \ \ friend class JClass; \ } @@ -170,7 +170,7 @@ class JNonvirtualMethod : public JMethodBase { \ JNonvirtualMethod() noexcept {}; \ JNonvirtualMethod(const JNonvirtualMethod& other) noexcept = default; \ \ - TYPE operator()(alias_ref self, alias_ref cls, Args... args); \ + TYPE operator()(alias_ref self, alias_ref cls, Args... args) const; \ \ friend class JClass; \ } diff --git a/lib/fb/src/main/cpp/include/fb/fbjni/MetaConvert.h b/lib/fb/src/main/cpp/include/fbjni/detail/MetaConvert.h similarity index 68% rename from lib/fb/src/main/cpp/include/fb/fbjni/MetaConvert.h rename to lib/fb/src/main/cpp/include/fbjni/detail/MetaConvert.h index 690a6164..df15bfba 100644 --- a/lib/fb/src/main/cpp/include/fb/fbjni/MetaConvert.h +++ b/lib/fb/src/main/cpp/include/fbjni/detail/MetaConvert.h @@ -66,6 +66,25 @@ struct Convert { } }; +// Sometimes (64-bit Android) jlong is "long long", but int64_t is "long". +// Allow int64_t to work as jlong. +template +struct Convert::value || std::is_same::value) && !std::is_same::value + >::type> { + typedef jlong jniType; + static T fromJni(jniType t) { + return t; + } + static jniType toJniRet(T t) { + return t; + } + static jniType toCall(T t) { + return t; + } +}; + // convert to alias_ref from T template struct Convert> { @@ -99,7 +118,21 @@ template struct Convert> { typedef JniType jniType; // No automatic synthesis of global_ref - static jniType toJniRet(global_ref t) { + static jniType toJniRet(global_ref&& t) { + // If this gets called, ownership the global_ref was passed in here. (It's + // probably a copy of a persistent global_ref made when a function was + // declared to return a global_ref, but it could moved out or otherwise not + // referenced elsewhere. Doesn't matter.) Either way, the only safe way + // to return it is to make a local_ref, release it, and return the + // underlying local jobject. + auto ret = make_local(t); + return ret.release(); + } + static jniType toJniRet(const global_ref& t) { + // If this gets called, the function was declared to return const&. We + // have a ref to a global_ref whose lifetime will exceed this call, so we + // can just get the underlying jobject and return it to java without + // needing to make a local_ref. return t.get(); } static jniType toCall(global_ref t) { diff --git a/lib/fb/src/main/cpp/include/fb/fbjni/ReferenceAllocators-inl.h b/lib/fb/src/main/cpp/include/fbjni/detail/ReferenceAllocators-inl.h similarity index 73% rename from lib/fb/src/main/cpp/include/fb/fbjni/ReferenceAllocators-inl.h rename to lib/fb/src/main/cpp/include/fbjni/detail/ReferenceAllocators-inl.h index 907ff603..e630a992 100644 --- a/lib/fb/src/main/cpp/include/fb/fbjni/ReferenceAllocators-inl.h +++ b/lib/fb/src/main/cpp/include/fbjni/detail/ReferenceAllocators-inl.h @@ -10,6 +10,8 @@ #include #include +#include "Environment.h" + namespace facebook { namespace jni { @@ -18,7 +20,8 @@ namespace internal { // Statistics mostly provided for test (only updated if FBJNI_DEBUG_REFS is defined) struct ReferenceStats { - std::atomic_uint locals_deleted, globals_deleted, weaks_deleted; + std::atomic_uint locals_created, globals_created, weaks_created, + locals_deleted, globals_deleted, weaks_deleted; void reset() noexcept; }; @@ -32,7 +35,10 @@ extern ReferenceStats g_reference_stats; inline jobject LocalReferenceAllocator::newReference(jobject original) const { internal::dbglog("Local new: %p", original); - auto ref = internal::getEnv()->NewLocalRef(original); + #ifdef FBJNI_DEBUG_REFS + ++internal::g_reference_stats.locals_created; + #endif + auto ref = Environment::current()->NewLocalRef(original); FACEBOOK_JNI_THROW_PENDING_EXCEPTION(); return ref; } @@ -45,15 +51,12 @@ inline void LocalReferenceAllocator::deleteReference(jobject reference) const no ++internal::g_reference_stats.locals_deleted; #endif assert(verifyReference(reference)); - internal::getEnv()->DeleteLocalRef(reference); + Environment::current()->DeleteLocalRef(reference); } } inline bool LocalReferenceAllocator::verifyReference(jobject reference) const noexcept { - if (!reference || !internal::doesGetObjectRefTypeWork()) { - return true; - } - return internal::getEnv()->GetObjectRefType(reference) == JNILocalRefType; + return isObjectRefType(reference, JNILocalRefType); } @@ -61,7 +64,10 @@ inline bool LocalReferenceAllocator::verifyReference(jobject reference) const no inline jobject GlobalReferenceAllocator::newReference(jobject original) const { internal::dbglog("Global new: %p", original); - auto ref = internal::getEnv()->NewGlobalRef(original); + #ifdef FBJNI_DEBUG_REFS + ++internal::g_reference_stats.globals_created; + #endif + auto ref = Environment::current()->NewGlobalRef(original); FACEBOOK_JNI_THROW_PENDING_EXCEPTION(); return ref; } @@ -74,15 +80,12 @@ inline void GlobalReferenceAllocator::deleteReference(jobject reference) const n ++internal::g_reference_stats.globals_deleted; #endif assert(verifyReference(reference)); - internal::getEnv()->DeleteGlobalRef(reference); + Environment::current()->DeleteGlobalRef(reference); } } inline bool GlobalReferenceAllocator::verifyReference(jobject reference) const noexcept { - if (!reference || !internal::doesGetObjectRefTypeWork()) { - return true; - } - return internal::getEnv()->GetObjectRefType(reference) == JNIGlobalRefType; + return isObjectRefType(reference, JNIGlobalRefType); } @@ -90,7 +93,10 @@ inline bool GlobalReferenceAllocator::verifyReference(jobject reference) const n inline jobject WeakGlobalReferenceAllocator::newReference(jobject original) const { internal::dbglog("Weak global new: %p", original); - auto ref = internal::getEnv()->NewWeakGlobalRef(original); + #ifdef FBJNI_DEBUG_REFS + ++internal::g_reference_stats.weaks_created; + #endif + auto ref = Environment::current()->NewWeakGlobalRef(original); FACEBOOK_JNI_THROW_PENDING_EXCEPTION(); return ref; } @@ -103,15 +109,12 @@ inline void WeakGlobalReferenceAllocator::deleteReference(jobject reference) con ++internal::g_reference_stats.weaks_deleted; #endif assert(verifyReference(reference)); - internal::getEnv()->DeleteWeakGlobalRef(reference); + Environment::current()->DeleteWeakGlobalRef(reference); } } inline bool WeakGlobalReferenceAllocator::verifyReference(jobject reference) const noexcept { - if (!reference || !internal::doesGetObjectRefTypeWork()) { - return true; - } - return internal::getEnv()->GetObjectRefType(reference) == JNIWeakGlobalRefType; + return isObjectRefType(reference, JNIWeakGlobalRefType); } }} diff --git a/lib/fb/src/main/cpp/include/fb/fbjni/ReferenceAllocators.h b/lib/fb/src/main/cpp/include/fbjni/detail/ReferenceAllocators.h similarity index 75% rename from lib/fb/src/main/cpp/include/fb/fbjni/ReferenceAllocators.h rename to lib/fb/src/main/cpp/include/fbjni/detail/ReferenceAllocators.h index e20eef9b..55028ecd 100644 --- a/lib/fb/src/main/cpp/include/fb/fbjni/ReferenceAllocators.h +++ b/lib/fb/src/main/cpp/include/fbjni/detail/ReferenceAllocators.h @@ -13,14 +13,12 @@ #pragma once -#include - #include "Common.h" namespace facebook { namespace jni { /// Allocator that handles local references -class FBEXPORT LocalReferenceAllocator { +class LocalReferenceAllocator { public: jobject newReference(jobject original) const; void deleteReference(jobject reference) const noexcept; @@ -28,7 +26,7 @@ class FBEXPORT LocalReferenceAllocator { }; /// Allocator that handles global references -class FBEXPORT GlobalReferenceAllocator { +class GlobalReferenceAllocator { public: jobject newReference(jobject original) const; void deleteReference(jobject reference) const noexcept; @@ -36,23 +34,20 @@ class FBEXPORT GlobalReferenceAllocator { }; /// Allocator that handles weak global references -class FBEXPORT WeakGlobalReferenceAllocator { +class WeakGlobalReferenceAllocator { public: jobject newReference(jobject original) const; void deleteReference(jobject reference) const noexcept; bool verifyReference(jobject reference) const noexcept; }; -/// @cond INTERNAL -namespace internal { - /** - * @return true iff env->GetObjectRefType is expected to work properly. + * @return Helper based on GetObjectRefType. Since this isn't defined + * on all versions of Java or Android, if the type can't be + * determined, this returns true. If reference is nullptr, returns + * true. */ -FBEXPORT bool doesGetObjectRefTypeWork(); - -} -/// @endcond +bool isObjectRefType(jobject reference, jobjectRefType refType); }} diff --git a/lib/fb/src/main/cpp/include/fb/fbjni/References-forward.h b/lib/fb/src/main/cpp/include/fbjni/detail/References-forward.h similarity index 100% rename from lib/fb/src/main/cpp/include/fb/fbjni/References-forward.h rename to lib/fb/src/main/cpp/include/fbjni/detail/References-forward.h diff --git a/lib/fb/src/main/cpp/include/fb/fbjni/References-inl.h b/lib/fb/src/main/cpp/include/fbjni/detail/References-inl.h similarity index 91% rename from lib/fb/src/main/cpp/include/fb/fbjni/References-inl.h rename to lib/fb/src/main/cpp/include/fbjni/detail/References-inl.h index d3329f41..eb2d834e 100644 --- a/lib/fb/src/main/cpp/include/fb/fbjni/References-inl.h +++ b/lib/fb/src/main/cpp/include/fbjni/detail/References-inl.h @@ -173,6 +173,29 @@ operator!=(const T1& a, const T2& b) { return !(a == b); } +template +inline enable_if_t(), bool> +operator==(const T1& a, std::nullptr_t) { + return getPlainJniReference(a) == nullptr; +} + +template +inline enable_if_t(), bool> +operator==(std::nullptr_t, const T1& a) { + return nullptr == getPlainJniReference(a); +} + +template +inline enable_if_t(), bool> +operator!=(const T1& a, std::nullptr_t) { + return !(a == nullptr); +} + +template +inline enable_if_t(), bool> +operator!=(std::nullptr_t, const T1& a) { + return !(nullptr == getPlainJniReference(a)); +} // base_owned_ref /////////////////////////////////////////////////////////////////////// @@ -181,10 +204,11 @@ inline base_owned_ref::base_owned_ref() noexcept : base_owned_ref(nullptr) {} -template -inline base_owned_ref::base_owned_ref(std::nullptr_t array) noexcept - : base_owned_ref(static_cast(nullptr)) { - (void)array; +template +inline base_owned_ref::base_owned_ref(std::nullptr_t t) noexcept + : base_owned_ref(static_cast(nullptr)) +{ + (void)t; } template @@ -484,22 +508,25 @@ template auto dynamic_ref_cast(const RefType& ref) -> enable_if_t(), decltype(static_ref_cast(ref))> { - if (! ref) { + if (!ref) { return decltype(static_ref_cast(ref))(); } - std::string target_class_name{jtype_traits::base_name()}; + static alias_ref target_class = findClassStatic(jtype_traits::base_name().c_str()); + if (!target_class) { + throwNewJavaException("java/lang/ClassCastException", + "Could not find class %s.", + jtype_traits::base_name().c_str()); - // If not found, will throw an exception. - alias_ref target_class = findClassStatic(target_class_name.c_str()); + } local_ref source_class = ref->getClass(); - if ( ! source_class->isAssignableFrom(target_class)) { + if (!target_class->isAssignableFrom(source_class)) { throwNewJavaException("java/lang/ClassCastException", "Tried to cast from %s to %s.", source_class->toString().c_str(), - target_class_name.c_str()); + jtype_traits::base_name().c_str()); } return static_ref_cast(ref); diff --git a/lib/fb/src/main/cpp/include/fb/fbjni/References.h b/lib/fb/src/main/cpp/include/fbjni/detail/References.h similarity index 96% rename from lib/fb/src/main/cpp/include/fb/fbjni/References.h rename to lib/fb/src/main/cpp/include/fbjni/detail/References.h index 00492501..0984134e 100644 --- a/lib/fb/src/main/cpp/include/fb/fbjni/References.h +++ b/lib/fb/src/main/cpp/include/fbjni/detail/References.h @@ -4,6 +4,7 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ + /** @file References.h * * Functionality similar to smart pointers, but for references into the VM. Four main reference @@ -73,8 +74,6 @@ #include -#include - #include "ReferenceAllocators.h" #include "TypeTraits.h" #include "References-forward.h" @@ -250,6 +249,26 @@ template enable_if_t() && IsNonWeakReference(), bool> operator!=(const T1& a, const T2& b); +/** + * Compare references against nullptr + */ +template +enable_if_t(), bool> +operator==(const T1& a, std::nullptr_t); + +template +enable_if_t(), bool> +operator==(std::nullptr_t, const T1& a); + +template +enable_if_t(), bool> +operator!=(const T1& a, std::nullptr_t); + +template +enable_if_t(), bool> +operator!=(std::nullptr_t, const T1& a); + + template class base_owned_ref { public: @@ -336,7 +355,7 @@ class weak_ref : public base_owned_ref { : base_owned_ref{} {} /// Create a null reference - explicit weak_ref(std::nullptr_t) noexcept + /* implicit */ weak_ref(std::nullptr_t) noexcept : base_owned_ref{nullptr} {} /// Copy constructor (note creates a new reference) @@ -405,7 +424,7 @@ class basic_strong_ref : public base_owned_ref { : base_owned_ref{} {} /// Create a null reference - explicit basic_strong_ref(std::nullptr_t) noexcept + /* implicit */ basic_strong_ref(std::nullptr_t) noexcept : base_owned_ref{nullptr} {} /// Copy constructor (note creates a new reference) @@ -492,7 +511,7 @@ class alias_ref { alias_ref() noexcept; /// Create a null reference - alias_ref(std::nullptr_t) noexcept; + /* implicit */ alias_ref(std::nullptr_t) noexcept; /// Copy constructor alias_ref(const alias_ref& other) noexcept; @@ -553,7 +572,7 @@ class alias_ref { * This is useful when you have a call which is initiated from C++-land, and therefore * doesn't automatically get a local JNI frame managed for you by the JNI framework. */ -class FBEXPORT JniLocalScope { +class JniLocalScope { public: JniLocalScope(JNIEnv* p_env, jint capacity); ~JniLocalScope(); diff --git a/lib/fb/src/main/cpp/include/fbjni/detail/Registration-inl.h b/lib/fb/src/main/cpp/include/fbjni/detail/Registration-inl.h new file mode 100644 index 00000000..d8e2b043 --- /dev/null +++ b/lib/fb/src/main/cpp/include/fbjni/detail/Registration-inl.h @@ -0,0 +1,166 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#pragma once + +#include "Exceptions.h" +#include "Hybrid.h" + +namespace facebook { +namespace jni { + +namespace detail { + +#ifdef __i386__ +// X86 ABI forces 16 byte stack allignment on calls. Unfortunately +// sometimes Dalvik chooses not to obey the ABI: +// - https://code.google.com/p/android/issues/detail?id=61012 +// - https://android.googlesource.com/platform/ndk/+/81696d2%5E!/ +// Therefore, we tell the compiler to re-align the stack on entry +// to our JNI functions. +#define JNI_ENTRY_POINT __attribute__((force_align_arg_pointer)) +#else +#define JNI_ENTRY_POINT +#endif + +template +struct CreateDefault { + static R create() { + return R{}; + } +}; + +template <> +struct CreateDefault { + static void create() {} +}; + +template +using Converter = Convert::type>; + +template +struct WrapForVoidReturn { + static typename Converter::jniType call(Args&&... args) { + return Converter::toJniRet(func(std::forward(args)...)); + } +}; + +template +struct WrapForVoidReturn { + static void call(Args&&... args) { + func(std::forward(args)...); + } +}; + +// registration wrapper for legacy JNI-style functions +template +struct BareJniWrapper { + JNI_ENTRY_POINT static R call(JNIEnv* env, jobject obj, Args... args) { + detail::JniEnvCacher jec(env); + try { + return (*func)(env, static_cast>(obj), args...); + } catch (...) { + translatePendingCppExceptionToJavaException(); + return CreateDefault::create(); + } + } +}; + +// registration wrappers for functions, with autoconversion of arguments. +template +struct FunctionWrapper { + using jniRet = typename Converter::jniType; + JNI_ENTRY_POINT static jniRet call(JNIEnv* env, jobject obj, typename Converter::jniType... args) { + detail::JniEnvCacher jec(env); + try { + return WrapForVoidReturn, Args...>::call( + static_cast>(obj), Converter::fromJni(args)...); + } catch (...) { + translatePendingCppExceptionToJavaException(); + return CreateDefault::create(); + } + } +}; + +// registration wrappers for non-static methods, with autoconvertion of arguments. +template +struct MethodWrapper { + using jhybrid = typename C::jhybridobject; + static R dispatch(alias_ref ref, Args&&... args) { + try { + // This is usually a noop, but if the hybrid object is a + // base class of other classes which register JNI methods, + // this will get the right type for the registered method. + auto cobj = static_cast(ref->cthis()); + return (cobj->*method)(std::forward(args)...); + } catch (const std::exception& ex) { + C::mapException(ex); + throw; + } + } + + JNI_ENTRY_POINT static typename Converter::jniType call( + JNIEnv* env, jobject obj, typename Converter::jniType... args) { + return FunctionWrapper, Args&&...), dispatch, jhybrid, R, Args...>::call(env, obj, args...); + } +}; + +template +inline NativeMethodWrapper* exceptionWrapJNIMethod(R (*)(JNIEnv*, C, Args... args)) { + // This intentionally erases the real type; JNI will do it anyway + return reinterpret_cast(&(BareJniWrapper::call)); +} + +template +inline NativeMethodWrapper* exceptionWrapJNIMethod(R (*)(alias_ref, Args... args)) { + // This intentionally erases the real type; JNI will do it anyway + return reinterpret_cast(&(FunctionWrapper::call)); +} + +template +inline NativeMethodWrapper* exceptionWrapJNIMethod(R (C::*method0)(Args... args)) { + (void)method0; + // This intentionally erases the real type; JNI will do it anyway + return reinterpret_cast(&(MethodWrapper::call)); +} + +template +inline std::string makeDescriptor(R (*)(JNIEnv*, C, Args... args)) { + return jmethod_traits::descriptor(); +} + +template +inline std::string makeDescriptor(R (*)(alias_ref, Args... args)) { + return jmethod_traits_from_cxx::descriptor(); +} + +template +inline std::string makeDescriptor(R (C::*)(Args... args)) { + return jmethod_traits_from_cxx::descriptor(); +} + +template +template +JNI_ENTRY_POINT R CriticalMethod::call(alias_ref, Args... args) noexcept { + static_assert( + IsJniPrimitive() || std::is_void(), + "Critical Native Methods may only return primitive JNI types, or void."); + static_assert( + AreJniPrimitives(), + "Critical Native Methods may only use primitive JNI types as parameters"); + + return func(std::forward(args)...); +} + +template +template +inline std::string CriticalMethod::desc() { + return makeDescriptor(call); +} + +} + +}} diff --git a/lib/fb/src/main/cpp/include/fb/fbjni/Registration.h b/lib/fb/src/main/cpp/include/fbjni/detail/Registration.h similarity index 90% rename from lib/fb/src/main/cpp/include/fb/fbjni/Registration.h rename to lib/fb/src/main/cpp/include/fbjni/detail/Registration.h index 0c2d6eac..0808a070 100644 --- a/lib/fb/src/main/cpp/include/fb/fbjni/Registration.h +++ b/lib/fb/src/main/cpp/include/fbjni/detail/Registration.h @@ -17,28 +17,14 @@ namespace detail { // This uses the real JNI function as a non-type template parameter to // cause a (static member) function to exist with the same signature, // but with try/catch exception translation. -template -NativeMethodWrapper* exceptionWrapJNIMethod(void (*func0)(JNIEnv*, jobject, Args... args)); - -// Same as above, but for non-void return types. template NativeMethodWrapper* exceptionWrapJNIMethod(R (*func0)(JNIEnv*, jobject, Args... args)); // Automatically wrap object argument, and don't take env explicitly. -template -NativeMethodWrapper* exceptionWrapJNIMethod(void (*func0)(alias_ref, Args... args)); - -// Automatically wrap object argument, and don't take env explicitly, -// non-void return type. template NativeMethodWrapper* exceptionWrapJNIMethod(R (*func0)(alias_ref, Args... args)); -// Extract C++ instance from object, and invoke given method on it. -template -NativeMethodWrapper* exceptionWrapJNIMethod(void (C::*method0)(Args... args)); - // Extract C++ instance from object, and invoke given method on it, -// non-void return type template NativeMethodWrapper* exceptionWrapJNIMethod(R (C::*method0)(Args... args)); @@ -57,15 +43,15 @@ std::string makeDescriptor(R (*func)(alias_ref, Args... args)); template std::string makeDescriptor(R (C::*method0)(Args... args)); -template +template struct CriticalMethod; -template -struct CriticalMethod { - template +template +struct CriticalMethod { + template static R call(alias_ref, Args... args) noexcept; - template + template inline static std::string desc(); }; @@ -91,6 +77,7 @@ struct CriticalMethod { #define makeNativeMethodN(a, b, c, count, ...) makeNativeMethod ## count #define makeNativeMethod(...) makeNativeMethodN(__VA_ARGS__, 3, 2)(__VA_ARGS__) + // FAST CALLS / CRITICAL CALLS // Android up to and including v7 supports "fast calls" by prefixing the method // signature with an exclamation mark. diff --git a/lib/fb/src/main/cpp/include/fb/fbjni/TypeTraits.h b/lib/fb/src/main/cpp/include/fbjni/detail/TypeTraits.h similarity index 99% rename from lib/fb/src/main/cpp/include/fb/fbjni/TypeTraits.h rename to lib/fb/src/main/cpp/include/fbjni/detail/TypeTraits.h index 95c146fc..e5ffaed9 100644 --- a/lib/fb/src/main/cpp/include/fb/fbjni/TypeTraits.h +++ b/lib/fb/src/main/cpp/include/fbjni/detail/TypeTraits.h @@ -86,6 +86,7 @@ constexpr bool AreJniPrimitives() { return are_jni_primitives::value; } + /// Metafunction to determine whether a type is a JNI array of primitives or not template struct is_jni_primitive_array : diff --git a/lib/fb/src/main/cpp/include/jni/LocalString.h b/lib/fb/src/main/cpp/include/fbjni/detail/utf8.h similarity index 77% rename from lib/fb/src/main/cpp/include/jni/LocalString.h rename to lib/fb/src/main/cpp/include/fbjni/detail/utf8.h index 34316531..ccadeccf 100644 --- a/lib/fb/src/main/cpp/include/jni/LocalString.h +++ b/lib/fb/src/main/cpp/include/fbjni/detail/utf8.h @@ -10,8 +10,6 @@ #include -#include - namespace facebook { namespace jni { @@ -42,28 +40,18 @@ std::string utf16toUTF8(const uint16_t* utf16Bytes, size_t len) noexcept; // - http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html // - https://docs.oracle.com/javase/6/docs/api/java/io/DataInput.html#modified-utf-8 -class FBEXPORT LocalString { -public: - // Assumes UTF8 encoding and make a required convertion to modified UTF-8 when the string - // contains unicode supplementary characters. - explicit LocalString(const std::string& str); - explicit LocalString(const char* str); - jstring string() const { - return m_string; - } - ~LocalString(); -private: - jstring m_string; -}; - -// JString to UTF16 extractor using RAII idiom +// JString to UTF16 extractor using RAII idiom. Note that the +// ctor/dtor use GetStringCritical/ReleaseStringCritical, so this +// class is subject to the restrictions imposed by those functions. class JStringUtf16Extractor { public: JStringUtf16Extractor(JNIEnv* env, jstring javaString) : env_(env) , javaString_(javaString) + , length_(0) , utf16String_(nullptr) { if (env_ && javaString_) { + length_ = env_->GetStringLength(javaString_); utf16String_ = env_->GetStringCritical(javaString_, nullptr); } } @@ -74,18 +62,20 @@ public: } } - operator const jchar* () const { + const jsize length() const { + return length_; + } + + const jchar* chars() const { return utf16String_; } private: JNIEnv* env_; jstring javaString_; + jsize length_; const jchar* utf16String_; }; -// The string from JNI is converted to standard UTF-8 if the string contains supplementary -// characters. -FBEXPORT std::string fromJString(JNIEnv* env, jstring str); - -} } +} +} diff --git a/lib/fb/src/main/cpp/include/fbjni/fbjni.h b/lib/fb/src/main/cpp/include/fbjni/fbjni.h new file mode 100644 index 00000000..764c67e2 --- /dev/null +++ b/lib/fb/src/main/cpp/include/fbjni/fbjni.h @@ -0,0 +1,22 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#pragma once + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/lib/fb/src/main/cpp/include/jni/Countable.h b/lib/fb/src/main/cpp/include/jni/Countable.h deleted file mode 100644 index b2708aae..00000000 --- a/lib/fb/src/main/cpp/include/jni/Countable.h +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#pragma once - -#include - -#include -#include -#include - -namespace facebook { -namespace jni { - -FBEXPORT const RefPtr& countableFromJava(JNIEnv* env, jobject obj); - -template RefPtr extractRefPtr(JNIEnv* env, jobject obj) { - return static_cast>(countableFromJava(env, obj)); -} - -template RefPtr extractPossiblyNullRefPtr(JNIEnv* env, jobject obj) { - return obj ? extractRefPtr(env, obj) : nullptr; -} - -FBEXPORT void setCountableForJava(JNIEnv* env, jobject obj, RefPtr&& countable); - -void CountableOnLoad(JNIEnv* env); - -} } - diff --git a/lib/fb/src/main/cpp/include/jni/GlobalReference.h b/lib/fb/src/main/cpp/include/jni/GlobalReference.h deleted file mode 100644 index 9ebdfcd5..00000000 --- a/lib/fb/src/main/cpp/include/jni/GlobalReference.h +++ /dev/null @@ -1,88 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#pragma once - -#include -#include - -#include - -#include - -namespace facebook { namespace jni { - -template -class GlobalReference { - static_assert(std::is_convertible::value, - "GlobalReference instantiated with type that is not " - "convertible to jobject"); - - public: - explicit GlobalReference(T globalReference) : - reference_(globalReference? Environment::current()->NewGlobalRef(globalReference) : nullptr) { - } - - ~GlobalReference() { - reset(); - } - - GlobalReference() : - reference_(nullptr) { - } - - // enable move constructor and assignment - GlobalReference(GlobalReference&& rhs) : - reference_(std::move(rhs.reference_)) { - rhs.reference_ = nullptr; - } - - GlobalReference& operator=(GlobalReference&& rhs) { - if (this != &rhs) { - reset(); - reference_ = std::move(rhs.reference_); - rhs.reference_ = nullptr; - } - return *this; - } - - GlobalReference(const GlobalReference& rhs) : - reference_{} { - reset(rhs.get()); - } - - GlobalReference& operator=(const GlobalReference& rhs) { - if (this == &rhs) { - return *this; - } - reset(rhs.get()); - return *this; - } - - explicit operator bool() const { - return (reference_ != nullptr); - } - - T get() const { - return reinterpret_cast(reference_); - } - - void reset(T globalReference = nullptr) { - if (reference_) { - Environment::current()->DeleteGlobalRef(reference_); - } - if (globalReference) { - reference_ = Environment::current()->NewGlobalRef(globalReference); - } else { - reference_ = nullptr; - } - } - - private: - jobject reference_; -}; - -}} diff --git a/lib/fb/src/main/cpp/include/jni/LocalReference.h b/lib/fb/src/main/cpp/include/jni/LocalReference.h deleted file mode 100644 index b565ee74..00000000 --- a/lib/fb/src/main/cpp/include/jni/LocalReference.h +++ /dev/null @@ -1,34 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#pragma once - -#include -#include - -#include - -#include - -namespace facebook { -namespace jni { - -template -struct LocalReferenceDeleter { - static_assert(std::is_convertible::value, - "LocalReferenceDeleter instantiated with type that is not convertible to jobject"); - void operator()(T localReference) { - if (localReference != nullptr) { - Environment::current()->DeleteLocalRef(localReference); - } - } - }; - -template -using LocalReference = - std::unique_ptr::type, LocalReferenceDeleter>; - -} } diff --git a/lib/fb/src/main/cpp/include/jni/Registration.h b/lib/fb/src/main/cpp/include/jni/Registration.h deleted file mode 100644 index 553ddaf8..00000000 --- a/lib/fb/src/main/cpp/include/jni/Registration.h +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#pragma once -#include -#include -#include - -namespace facebook { -namespace jni { - -static inline void registerNatives(JNIEnv* env, jclass cls, std::initializer_list methods) { - auto result = env->RegisterNatives(cls, methods.begin(), methods.size()); - FBASSERT(result == 0); -} - -static inline void registerNatives(JNIEnv* env, const char* cls, std::initializer_list list) { - registerNatives(env, env->FindClass(cls), list); -} - -} } diff --git a/lib/fb/src/main/cpp/include/jni/WeakReference.h b/lib/fb/src/main/cpp/include/jni/WeakReference.h deleted file mode 100644 index 70630b10..00000000 --- a/lib/fb/src/main/cpp/include/jni/WeakReference.h +++ /dev/null @@ -1,52 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#pragma once -#include -#include -#include -#include -#include - - -namespace facebook { -namespace jni { - -class FBEXPORT WeakReference : public Countable { -public: - typedef RefPtr Ptr; - WeakReference(jobject strongRef); - ~WeakReference(); - jweak weakRef() { - return m_weakReference; - } - -private: - jweak m_weakReference; -}; - -// This class is intended to take a weak reference and turn it into a strong -// local reference. Consequently, it should only be allocated on the stack. -class FBEXPORT ResolvedWeakReference : public noncopyable { -public: - ResolvedWeakReference(jobject weakRef); - ResolvedWeakReference(const RefPtr& weakRef); - ~ResolvedWeakReference(); - - operator jobject () { - return m_strongReference; - } - - explicit operator bool () { - return m_strongReference != nullptr; - } - -private: - jobject m_strongReference; -}; - -} } - diff --git a/lib/fb/src/main/cpp/include/jni/jni_helpers.h b/lib/fb/src/main/cpp/include/jni/jni_helpers.h deleted file mode 100644 index cf6504a4..00000000 --- a/lib/fb/src/main/cpp/include/jni/jni_helpers.h +++ /dev/null @@ -1,136 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#pragma once - -#include - -#include - -namespace facebook { - -/** - * Instructs the JNI environment to throw an exception. - * - * @param pEnv JNI environment - * @param szClassName class name to throw - * @param szFmt sprintf-style format string - * @param ... sprintf-style args - * @return 0 on success; a negative value on failure - */ -FBEXPORT jint throwException(JNIEnv* pEnv, const char* szClassName, const char* szFmt, va_list va_args); - -/** - * Instructs the JNI environment to throw a NoClassDefFoundError. - * - * @param pEnv JNI environment - * @param szFmt sprintf-style format string - * @param ... sprintf-style args - * @return 0 on success; a negative value on failure - */ -FBEXPORT jint throwNoClassDefError(JNIEnv* pEnv, const char* szFmt, ...); - -/** - * Instructs the JNI environment to throw a RuntimeException. - * - * @param pEnv JNI environment - * @param szFmt sprintf-style format string - * @param ... sprintf-style args - * @return 0 on success; a negative value on failure - */ -FBEXPORT jint throwRuntimeException(JNIEnv* pEnv, const char* szFmt, ...); - -/** - * Instructs the JNI environment to throw a IllegalArgumentException. - * - * @param pEnv JNI environment - * @param szFmt sprintf-style format string - * @param ... sprintf-style args - * @return 0 on success; a negative value on failure - */ -FBEXPORT jint throwIllegalArgumentException(JNIEnv* pEnv, const char* szFmt, ...); - -/** - * Instructs the JNI environment to throw a IllegalStateException. - * - * @param pEnv JNI environment - * @param szFmt sprintf-style format string - * @param ... sprintf-style args - * @return 0 on success; a negative value on failure - */ -FBEXPORT jint throwIllegalStateException(JNIEnv* pEnv, const char* szFmt, ...); - -/** - * Instructs the JNI environment to throw an IOException. - * - * @param pEnv JNI environment - * @param szFmt sprintf-style format string - * @param ... sprintf-style args - * @return 0 on success; a negative value on failure - */ -FBEXPORT jint throwIOException(JNIEnv* pEnv, const char* szFmt, ...); - -/** - * Instructs the JNI environment to throw an AssertionError. - * - * @param pEnv JNI environment - * @param szFmt sprintf-style format string - * @param ... sprintf-style args - * @return 0 on success; a negative value on failure - */ -FBEXPORT jint throwAssertionError(JNIEnv* pEnv, const char* szFmt, ...); - -/** - * Instructs the JNI environment to throw an OutOfMemoryError. - * - * @param pEnv JNI environment - * @param szFmt sprintf-style format string - * @param ... sprintf-style args - * @return 0 on success; a negative value on failure - */ -FBEXPORT jint throwOutOfMemoryError(JNIEnv* pEnv, const char* szFmt, ...); - -/** - * Finds the specified class. If it's not found, instructs the JNI environment to throw an - * exception. - * - * @param pEnv JNI environment - * @param szClassName the classname to find in JNI format (e.g. "java/lang/String") - * @return the class or NULL if not found (in which case a pending exception will be queued). This - * returns a global reference (JNIEnv::NewGlobalRef). - */ -FBEXPORT jclass findClassOrThrow(JNIEnv *pEnv, const char* szClassName); - -/** - * Finds the specified field of the specified class. If it's not found, instructs the JNI - * environment to throw an exception. - * - * @param pEnv JNI environment - * @param clazz the class to lookup the field in - * @param szFieldName the name of the field to find - * @param szSig the signature of the field - * @return the field or NULL if not found (in which case a pending exception will be queued) - */ -FBEXPORT jfieldID getFieldIdOrThrow(JNIEnv* pEnv, jclass clazz, const char* szFieldName, const char* szSig); - -/** - * Finds the specified method of the specified class. If it's not found, instructs the JNI - * environment to throw an exception. - * - * @param pEnv JNI environment - * @param clazz the class to lookup the method in - * @param szMethodName the name of the method to find - * @param szSig the signature of the method - * @return the method or NULL if not found (in which case a pending exception will be queued) - */ -FBEXPORT jmethodID getMethodIdOrThrow( - JNIEnv* pEnv, - jclass clazz, - const char* szMethodName, - const char* szSig); - -} // namespace facebook - diff --git a/lib/fb/src/main/cpp/include/fb/lyra.h b/lib/fb/src/main/cpp/include/lyra/lyra.h similarity index 75% rename from lib/fb/src/main/cpp/include/fb/lyra.h rename to lib/fb/src/main/cpp/include/lyra/lyra.h index 0d199e6e..02e6078d 100644 --- a/lib/fb/src/main/cpp/include/fb/lyra.h +++ b/lib/fb/src/main/cpp/include/lyra/lyra.h @@ -7,12 +7,9 @@ #pragma once #include -#include #include #include -#include - namespace facebook { namespace lyra { @@ -20,17 +17,21 @@ constexpr size_t kDefaultLimit = 64; using InstructionPointer = const void*; -class FBEXPORT StackTraceElement { +class StackTraceElement { public: StackTraceElement(InstructionPointer absoluteProgramCounter, InstructionPointer libraryBase, - InstructionPointer functionAddress, std::string libraryName, + InstructionPointer functionAddress, + std::string libraryName, std::string functionName) : absoluteProgramCounter_{absoluteProgramCounter}, libraryBase_{libraryBase}, functionAddress_{functionAddress}, libraryName_{std::move(libraryName)}, - functionName_{std::move(functionName)} {} + functionName_{std::move(functionName)}, + hasBuildId_{false}, + buildId_{} + {} InstructionPointer libraryBase() const noexcept { return libraryBase_; } @@ -67,14 +68,28 @@ class FBEXPORT StackTraceElement { return absoluteabsoluteProgramCounter - absoluteSymbol; } + std::string buildId() const; private: const InstructionPointer absoluteProgramCounter_; const InstructionPointer libraryBase_; const InstructionPointer functionAddress_; const std::string libraryName_; const std::string functionName_; + + mutable bool hasBuildId_; + mutable std::string buildId_; }; +/** + * If a library identifier function is set, it is passed a libraryName + * for the frame, and returns a library build id string, which will be + * included in the logged stack trace. The most common use for this + * will be correlating stack traces with breakpad identifiers. + */ +typedef std::string (*LibraryIdentifierFunctionType)(const std::string&); + +void setLibraryIdentifierFunction(LibraryIdentifierFunctionType func); + /** * Populate the vector with the current stack trace * @@ -91,8 +106,7 @@ class FBEXPORT StackTraceElement { * * @param skip The number of frames to skip before capturing the trace */ -FBEXPORT void getStackTrace(std::vector& stackTrace, - size_t skip = 0); +void getStackTrace(std::vector& stackTrace, size_t skip = 0); /** * Creates a vector and populates it with the current stack trace @@ -108,7 +122,7 @@ FBEXPORT void getStackTrace(std::vector& stackTrace, * * @limit The maximum number of frames captured */ -FBEXPORT inline std::vector getStackTrace( +inline std::vector getStackTrace( size_t skip = 0, size_t limit = kDefaultLimit) { auto stackTrace = std::vector{}; @@ -125,15 +139,15 @@ FBEXPORT inline std::vector getStackTrace( * * @param stackTrace The input stack trace */ -FBEXPORT void getStackTraceSymbols(std::vector& symbols, - const std::vector& trace); +void getStackTraceSymbols(std::vector& symbols, + const std::vector& trace); /** * Symbolicates a stack trace into a new vector * * @param stackTrace The input stack trace */ -FBEXPORT inline std::vector getStackTraceSymbols( +inline std::vector getStackTraceSymbols( const std::vector& trace) { auto symbols = std::vector{}; getStackTraceSymbols(symbols, trace); @@ -152,7 +166,7 @@ FBEXPORT inline std::vector getStackTraceSymbols( * * @param limit The maximum number of frames captured */ -FBEXPORT inline std::vector getStackTraceSymbols( +inline std::vector getStackTraceSymbols( size_t skip = 0, size_t limit = kDefaultLimit) { return getStackTraceSymbols(getStackTrace(skip + 1, limit)); @@ -161,12 +175,21 @@ FBEXPORT inline std::vector getStackTraceSymbols( /** * Formatting a stack trace element */ -FBEXPORT std::ostream& operator<<(std::ostream& out, const StackTraceElement& elm); +std::ostream& operator<<(std::ostream& out, const StackTraceElement& elm); /** * Formatting a stack trace */ -FBEXPORT std::ostream& operator<<(std::ostream& out, - const std::vector& trace); +std::ostream& operator<<(std::ostream& out, + const std::vector& trace); + +/** + * Log stack trace + * + * Makes it possible to log a trace without using a temporary stream when the + * underlying log API is not stream based. + */ +void logStackTrace(const std::vector& trace); + } } diff --git a/lib/fb/src/main/cpp/include/lyra/lyra_exceptions.h b/lib/fb/src/main/cpp/include/lyra/lyra_exceptions.h new file mode 100644 index 00000000..a40f1d8b --- /dev/null +++ b/lib/fb/src/main/cpp/include/lyra/lyra_exceptions.h @@ -0,0 +1,84 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#pragma once + +#include +#include +#include + +#include + +namespace facebook { +namespace lyra { + +namespace detail { + struct ExceptionTraceHolder { + ExceptionTraceHolder(); + // Need some virtual function to make this a polymorphic type. + virtual ~ExceptionTraceHolder(); + ExceptionTraceHolder(const ExceptionTraceHolder&) = delete; + ExceptionTraceHolder(ExceptionTraceHolder&&) = default; + + std::vector stackTrace_; + }; + + template + struct Holder : E, ExceptionTraceHolder { + Holder(E&& e) : E{std::forward(e)}, ExceptionTraceHolder{} {} + }; + template + struct Holder : E { + Holder(E&& e) : E{std::forward(e)} {} + }; +} + +/** + * Retrieves the stack trace of an exception + */ +const std::vector& getExceptionTrace(std::exception_ptr ptr); + +/** + * Throw an exception and store the stack trace. This works like + * std::throw_with_nested in that it will actually throw a type that is + * publicly derived from both E and detail::ExceptionTraceHolder. + */ +template +[[noreturn]] void fbthrow(E&& exception) { + throw detail::Holder::value>{std::forward(exception)}; +} + +/** + * Ensure that a terminate handler that logs traces is installed. + * setLibraryIdentifierFunction should be called first if the stack + * trace should log build ids for libraries. + */ +void ensureRegisteredTerminateHandler(); + +/** + * Helper to convert an exception to a string + */ +std::string toString(std::exception_ptr exceptionPointer); + +/** + * lyra's cxa_throw will delegate to the original cxa throw. That pointer must + * be set before lyra::cxa_throw is called. + * + * One example use would be to statically compile against something that overrides __cxa_throw. + * That would look something like: + * + * [[noreturn]] void __cxa_throw(void* obj, const std::type_info* type, void (*destructor) (void*)) { + * static auto initializer = lyra::original_cxa_throw = lookupOriginalCxaThrow(); + * lyra::cxa_throw(obj, type, destructor); + * } + */ +[[gnu::noreturn]] extern void (*original_cxa_throw)(void*, const std::type_info*, void (*) (void*)); +[[noreturn]] void cxa_throw(void* obj, const std::type_info* type, void (*destructor) (void *)); + +void enableCxaThrowHookBacktraces(bool enable); + +} +} diff --git a/lib/fb/src/main/cpp/jni/ByteBuffer.cpp b/lib/fb/src/main/cpp/jni/ByteBuffer.cpp index 9d7cbda9..df62e956 100644 --- a/lib/fb/src/main/cpp/jni/ByteBuffer.cpp +++ b/lib/fb/src/main/cpp/jni/ByteBuffer.cpp @@ -4,21 +4,51 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ -#include +#include #include -#include - namespace facebook { namespace jni { -namespace { -local_ref createEmpty() { - static auto cls = JByteBuffer::javaClassStatic(); - static auto meth = cls->getStaticMethod("allocateDirect"); - return meth(cls, 0); +void JBuffer::rewind() const { + static auto meth = javaClassStatic()->getMethod()>("rewind"); + meth(self()); } + +void* JBuffer::getDirectAddress() const { + if (!self()) { + throwNewJavaException("java/lang/NullPointerException", "java.lang.NullPointerException"); + } + void* addr = Environment::current()->GetDirectBufferAddress(self()); + FACEBOOK_JNI_THROW_PENDING_EXCEPTION(); + if (!addr) { + throw std::runtime_error( + isDirect() ? + "Attempt to get direct bytes of non-direct buffer." : + "Error getting direct bytes of buffer."); + } + return addr; +} + +size_t JBuffer::getDirectCapacity() const { + if (!self()) { + throwNewJavaException("java/lang/NullPointerException", "java.lang.NullPointerException"); + } + int size = Environment::current()->GetDirectBufferCapacity(self()); + FACEBOOK_JNI_THROW_PENDING_EXCEPTION(); + if (size < 0) { + throw std::runtime_error( + isDirect() ? + "Attempt to get direct size of non-direct buffer." : + "Error getting direct size of buffer."); + } + return static_cast(size); +} + +bool JBuffer::isDirect() const { + static auto meth = javaClassStatic()->getMethod("isDirect"); + return meth(self()); } local_ref JByteBuffer::wrapBytes(uint8_t* data, size_t size) { @@ -26,7 +56,7 @@ local_ref JByteBuffer::wrapBytes(uint8_t* data, size_t size) { // dalvik returns an invalid result and Android's art aborts if size == 0. // Workaround this by using a slow path through Java in that case. if (!size) { - return createEmpty(); + return allocateDirect(0); } auto res = adopt_local(static_cast(Environment::current()->NewDirectByteBuffer(data, size))); FACEBOOK_JNI_THROW_PENDING_EXCEPTION(); @@ -36,39 +66,10 @@ local_ref JByteBuffer::wrapBytes(uint8_t* data, size_t size) { return res; } -uint8_t* JByteBuffer::getDirectBytes() const { - if (!self()) { - throwNewJavaException("java/lang/NullPointerException", "java.lang.NullPointerException"); - } - void* bytes = Environment::current()->GetDirectBufferAddress(self()); - FACEBOOK_JNI_THROW_PENDING_EXCEPTION(); - if (!bytes) { - throw std::runtime_error( - isDirect() ? - "Attempt to get direct bytes of non-direct byte buffer." : - "Error getting direct bytes of byte buffer."); - } - return static_cast(bytes); -} - -size_t JByteBuffer::getDirectSize() const { - if (!self()) { - throwNewJavaException("java/lang/NullPointerException", "java.lang.NullPointerException"); - } - int size = Environment::current()->GetDirectBufferCapacity(self()); - FACEBOOK_JNI_THROW_PENDING_EXCEPTION(); - if (size < 0) { - throw std::runtime_error( - isDirect() ? - "Attempt to get direct size of non-direct byte buffer." : - "Error getting direct size of byte buffer."); - } - return static_cast(size); -} - -bool JByteBuffer::isDirect() const { - static auto meth = javaClassStatic()->getMethod("isDirect"); - return meth(self()); +local_ref JByteBuffer::allocateDirect(jint size) { + static auto cls = JByteBuffer::javaClassStatic(); + static auto meth = cls->getStaticMethod("allocateDirect"); + return meth(cls, size); } }} diff --git a/lib/fb/src/main/cpp/jni/Countable.cpp b/lib/fb/src/main/cpp/jni/Countable.cpp deleted file mode 100644 index bbb6f23d..00000000 --- a/lib/fb/src/main/cpp/jni/Countable.cpp +++ /dev/null @@ -1,66 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#include -#include -#include -#include - -namespace facebook { -namespace jni { - -static jfieldID gCountableNativePtr; - -static RefPtr* rawCountableFromJava(JNIEnv* env, jobject obj) { - FBASSERT(obj); - return reinterpret_cast*>(env->GetLongField(obj, gCountableNativePtr)); -} - -const RefPtr& countableFromJava(JNIEnv* env, jobject obj) { - FBASSERT(obj); - return *rawCountableFromJava(env, obj); -} - -void setCountableForJava(JNIEnv* env, jobject obj, RefPtr&& countable) { - int oldValue = env->GetLongField(obj, gCountableNativePtr); - FBASSERTMSGF(oldValue == 0, "Cannot reinitialize object; expected nullptr, got %x", oldValue); - - FBASSERT(countable); - uintptr_t fieldValue = (uintptr_t) new RefPtr(std::move(countable)); - env->SetLongField(obj, gCountableNativePtr, fieldValue); -} - -/** - * NB: THREAD SAFETY (this comment also exists at Countable.java) - * - * This method deletes the corresponding native object on whatever thread the method is called - * on. In the common case when this is called by Countable#finalize(), this will be called on the - * system finalizer thread. If you manually call dispose on the Java object, the native object - * will be deleted synchronously on that thread. - */ -void dispose(JNIEnv* env, jobject obj) { - // Grab the pointer - RefPtr* countable = rawCountableFromJava(env, obj); - if (!countable) { - // That was easy. - return; - } - - // Clear out the old value to avoid double-frees - env->SetLongField(obj, gCountableNativePtr, 0); - - delete countable; -} - -void CountableOnLoad(JNIEnv* env) { - jclass countable = env->FindClass("com/facebook/jni/Countable"); - gCountableNativePtr = env->GetFieldID(countable, "mInstance", "J"); - registerNatives(env, countable, { - { "dispose", "()V", (void*) dispose }, - }); -} - -} } diff --git a/lib/fb/src/main/cpp/jni/Environment.cpp b/lib/fb/src/main/cpp/jni/Environment.cpp deleted file mode 100644 index 8d37cb52..00000000 --- a/lib/fb/src/main/cpp/jni/Environment.cpp +++ /dev/null @@ -1,129 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#include -#include -#include -#include -#include -#include -#include - -#include - -namespace facebook { -namespace jni { - -namespace { -StaticInitialized> g_env; -JavaVM* g_vm = nullptr; - -struct JThreadScopeSupport : JavaClass { - static auto constexpr kJavaDescriptor = "Lcom/facebook/jni/ThreadScopeSupport;"; - - // These reinterpret_casts are a totally dangerous pattern. Don't use them. Use HybridData instead. - static void runStdFunction(std::function&& func) { - static auto method = javaClassStatic()->getStaticMethod("runStdFunction"); - method(javaClassStatic(), reinterpret_cast(&func)); - } - - static void runStdFunctionImpl(alias_ref, jlong ptr) { - (*reinterpret_cast*>(ptr))(); - } - - static void OnLoad() { - // We need the javaClassStatic so that the class lookup is cached and that - // runStdFunction can be called from a ThreadScope-attached thread. - javaClassStatic()->registerNatives({ - makeNativeMethod("runStdFunctionImpl", runStdFunctionImpl), - }); - } -}; -} - -/* static */ -JNIEnv* Environment::current() { - JNIEnv* env = g_env->get(); - if ((env == nullptr) && (g_vm != nullptr)) { - if (g_vm->GetEnv((void**) &env, JNI_VERSION_1_6) != JNI_OK) { - FBLOGE("Error retrieving JNI Environment, thread is probably not attached to JVM"); - // TODO(cjhopman): This should throw an exception. - env = nullptr; - } else { - g_env->reset(env); - } - } - return env; -} - -/* static */ -void Environment::detachCurrentThread() { - auto env = g_env->get(); - if (env) { - FBASSERT(g_vm); - g_vm->DetachCurrentThread(); - g_env->reset(); - } -} - -struct EnvironmentInitializer { - EnvironmentInitializer(JavaVM* vm) { - FBASSERT(!g_vm); - FBASSERT(vm); - g_vm = vm; - g_env.initialize([] (void*) {}); - } -}; - -/* static */ -void Environment::initialize(JavaVM* vm) { - static EnvironmentInitializer init(vm); -} - -/* static */ -JNIEnv* Environment::ensureCurrentThreadIsAttached() { - auto env = g_env->get(); - if (!env) { - FBASSERT(g_vm); - g_vm->AttachCurrentThread(&env, nullptr); - g_env->reset(env); - } - return env; -} - -ThreadScope::ThreadScope() - : attachedWithThisScope_(false) { - JNIEnv* env = nullptr; - if (g_vm->GetEnv((void**) &env, JNI_VERSION_1_6) != JNI_EDETACHED) { - return; - } - env = facebook::jni::Environment::ensureCurrentThreadIsAttached(); - FBASSERT(env); - attachedWithThisScope_ = true; -} - -ThreadScope::~ThreadScope() { - if (attachedWithThisScope_) { - Environment::detachCurrentThread(); - } -} - -/* static */ -void ThreadScope::OnLoad() { - // These classes are required for ScopeWithClassLoader. Ensure they are looked up when loading. - JThreadScopeSupport::OnLoad(); -} - -/* static */ -void ThreadScope::WithClassLoader(std::function&& runnable) { - // TODO(cjhopman): If the classloader is already available in this scope, we - // shouldn't have to jump through java. - ThreadScope ts; - JThreadScopeSupport::runStdFunction(std::move(runnable)); -} - -} } - diff --git a/lib/fb/src/main/cpp/jni/Exceptions.cpp b/lib/fb/src/main/cpp/jni/Exceptions.cpp deleted file mode 100644 index 73166c04..00000000 --- a/lib/fb/src/main/cpp/jni/Exceptions.cpp +++ /dev/null @@ -1,282 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include - - -namespace facebook { -namespace jni { - -namespace { -class JRuntimeException : public JavaClass { - public: - static auto constexpr kJavaDescriptor = "Ljava/lang/RuntimeException;"; - - static local_ref create(const char* str) { - return newInstance(make_jstring(str)); - } - - static local_ref create() { - return newInstance(); - } -}; - -class JIOException : public JavaClass { - public: - static auto constexpr kJavaDescriptor = "Ljava/io/IOException;"; - - static local_ref create(const char* str) { - return newInstance(make_jstring(str)); - } -}; - -class JOutOfMemoryError : public JavaClass { - public: - static auto constexpr kJavaDescriptor = "Ljava/lang/OutOfMemoryError;"; - - static local_ref create(const char* str) { - return newInstance(make_jstring(str)); - } -}; - -class JArrayIndexOutOfBoundsException : public JavaClass { - public: - static auto constexpr kJavaDescriptor = "Ljava/lang/ArrayIndexOutOfBoundsException;"; - - static local_ref create(const char* str) { - return newInstance(make_jstring(str)); - } -}; - -class JUnknownCppException : public JavaClass { - public: - static auto constexpr kJavaDescriptor = "Lcom/facebook/jni/UnknownCppException;"; - - static local_ref create() { - return newInstance(); - } - - static local_ref create(const char* str) { - return newInstance(make_jstring(str)); - } -}; - -class JCppSystemErrorException : public JavaClass { - public: - static auto constexpr kJavaDescriptor = "Lcom/facebook/jni/CppSystemErrorException;"; - - static local_ref create(const std::system_error& e) { - return newInstance(make_jstring(e.what()), e.code().value()); - } -}; - -// Exception throwing & translating functions ////////////////////////////////////////////////////// - -// Functions that throw Java exceptions - -void setJavaExceptionAndAbortOnFailure(alias_ref throwable) { - auto env = Environment::current(); - if (throwable) { - env->Throw(throwable.get()); - } - if (env->ExceptionCheck() != JNI_TRUE) { - std::abort(); - } -} - -} - -// Functions that throw C++ exceptions - -// TODO(T6618159) Take a stack dump here to save context if it results in a crash when propagated -void throwPendingJniExceptionAsCppException() { - JNIEnv* env = Environment::current(); - if (env->ExceptionCheck() == JNI_FALSE) { - return; - } - - auto throwable = adopt_local(env->ExceptionOccurred()); - if (!throwable) { - throw std::runtime_error("Unable to get pending JNI exception."); - } - env->ExceptionClear(); - - throw JniException(throwable); -} - -void throwCppExceptionIf(bool condition) { - if (!condition) { - return; - } - - auto env = Environment::current(); - if (env->ExceptionCheck() == JNI_TRUE) { - throwPendingJniExceptionAsCppException(); - return; - } - - throw JniException(); -} - -void throwNewJavaException(jthrowable throwable) { - throw JniException(wrap_alias(throwable)); -} - -void throwNewJavaException(const char* throwableName, const char* msg) { - // If anything of the fbjni calls fail, an exception of a suitable - // form will be thrown, which is what we want. - auto throwableClass = findClassLocal(throwableName); - auto throwable = throwableClass->newObject( - throwableClass->getConstructor(), - make_jstring(msg).release()); - throwNewJavaException(throwable.get()); -} - -// Translate C++ to Java Exception - -namespace { - -// The implementation std::rethrow_if_nested uses a dynamic_cast to determine -// if the exception is a nested_exception. If the exception is from a library -// built with -fno-rtti, then that will crash. This avoids that. -void rethrow_if_nested() { - try { - throw; - } catch (const std::nested_exception& e) { - e.rethrow_nested(); - } catch (...) { - } -} - -// For each exception in the chain of the currently handled exception, func -// will be called with that exception as the currently handled exception (in -// reverse order, i.e. innermost first). -void denest(std::function func) { - try { - throw; - } catch (const std::exception& e) { - try { - rethrow_if_nested(); - } catch (...) { - denest(func); - } - func(); - } catch (...) { - func(); - } -} -} - -void translatePendingCppExceptionToJavaException() noexcept { - local_ref previous; - auto func = [&previous] () { - local_ref current; - try { - throw; - } catch(const JniException& ex) { - current = ex.getThrowable(); - } catch(const std::ios_base::failure& ex) { - current = JIOException::create(ex.what()); - } catch(const std::bad_alloc& ex) { - current = JOutOfMemoryError::create(ex.what()); - } catch(const std::out_of_range& ex) { - current = JArrayIndexOutOfBoundsException::create(ex.what()); - } catch(const std::system_error& ex) { - current = JCppSystemErrorException::create(ex); - } catch(const std::runtime_error& ex) { - current = JRuntimeException::create(ex.what()); - } catch(const std::exception& ex) { - current = JCppException::create(ex.what()); - } catch(const char* msg) { - current = JUnknownCppException::create(msg); - } catch(...) { - current = JUnknownCppException::create(); - } - if (previous) { - current->initCause(previous); - } - previous = current; - }; - - try { - denest(func); - setJavaExceptionAndAbortOnFailure(previous); - } catch (std::exception& e) { - FBLOGE("unexpected exception in translatePendingCppExceptionToJavaException: %s", e.what()); - // std::terminate will print the message of the pending exception e - std::terminate(); - } catch (...) { - FBLOGE("unexpected exception in translatePendingCppExceptionToJavaException"); - std::terminate(); - } -} - -// JniException //////////////////////////////////////////////////////////////////////////////////// - -const std::string JniException::kExceptionMessageFailure_ = "Unable to get exception message."; - -JniException::JniException() : JniException(JRuntimeException::create()) { } - -JniException::JniException(alias_ref throwable) : isMessageExtracted_(false) { - throwable_ = make_global(throwable); -} - -JniException::JniException(JniException &&rhs) - : throwable_(std::move(rhs.throwable_)), - what_(std::move(rhs.what_)), - isMessageExtracted_(rhs.isMessageExtracted_) { -} - -JniException::JniException(const JniException &rhs) - : what_(rhs.what_), isMessageExtracted_(rhs.isMessageExtracted_) { - throwable_ = make_global(rhs.throwable_); -} - -JniException::~JniException() { - ThreadScope ts; - throwable_.reset(); -} - -local_ref JniException::getThrowable() const noexcept { - return make_local(throwable_); -} - -// TODO 6900503: consider making this thread-safe. -void JniException::populateWhat() const noexcept { - ThreadScope ts; - try { - what_ = throwable_->toString(); - isMessageExtracted_ = true; - } catch(...) { - what_ = kExceptionMessageFailure_; - } -} - -const char* JniException::what() const noexcept { - if (!isMessageExtracted_) { - populateWhat(); - } - return what_.c_str(); -} - -void JniException::setJavaException() const noexcept { - setJavaExceptionAndAbortOnFailure(throwable_); -} - -}} diff --git a/lib/fb/src/main/cpp/jni/Hybrid.cpp b/lib/fb/src/main/cpp/jni/Hybrid.cpp deleted file mode 100644 index c04560a5..00000000 --- a/lib/fb/src/main/cpp/jni/Hybrid.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#include "fb/fbjni.h" - - -namespace facebook { -namespace jni { - -namespace detail { - -void HybridData::setNativePointer(std::unique_ptr new_value) { - static auto pointerField = getClass()->getField("mNativePointer"); - auto* old_value = reinterpret_cast(getFieldValue(pointerField)); - if (new_value) { - // Modify should only ever be called once with a non-null - // new_value. If this happens again it's a programmer error, so - // blow up. - FBASSERTMSGF(old_value == 0, "Attempt to set C++ native pointer twice"); - } else if (old_value == 0) { - return; - } - // delete on a null pointer is defined to be a noop. - delete old_value; - // This releases ownership from the unique_ptr, and passes the pointer, and - // ownership of it, to HybridData which is managed by the java GC. The - // finalizer on hybridData calls resetNative which will delete the object, if - // resetNative has not already been called. - setFieldValue(pointerField, reinterpret_cast(new_value.release())); -} - -BaseHybridClass* HybridData::getNativePointer() { - static auto pointerField = getClass()->getField("mNativePointer"); - auto* value = reinterpret_cast(getFieldValue(pointerField)); - if (!value) { - throwNewJavaException("java/lang/NullPointerException", "java.lang.NullPointerException"); - } - return value; -} - -local_ref HybridData::create() { - return newInstance(); -} - -} - -namespace { -void resetNative(alias_ref jthis) { - jthis->setNativePointer(nullptr); -} -} - -void HybridDataOnLoad() { - registerNatives("com/facebook/jni/HybridData", { - makeNativeMethod("resetNative", resetNative), - }); -} - -}} diff --git a/lib/fb/src/main/cpp/jni/OnLoad.cpp b/lib/fb/src/main/cpp/jni/OnLoad.cpp index a95393f8..db041f5c 100644 --- a/lib/fb/src/main/cpp/jni/OnLoad.cpp +++ b/lib/fb/src/main/cpp/jni/OnLoad.cpp @@ -4,16 +4,15 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ -#include -#include -#include -#include +#include +#include using namespace facebook::jni; -void initialize_fbjni() { - CountableOnLoad(Environment::current()); - HybridDataOnLoad(); - JNativeRunnable::OnLoad(); - ThreadScope::OnLoad(); +JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) { + return facebook::jni::initialize(vm, [] { + HybridDataOnLoad(); + JNativeRunnable::OnLoad(); + ThreadScope::OnLoad(); + }); } diff --git a/lib/fb/src/main/cpp/jni/ReadableByteChannel.cpp b/lib/fb/src/main/cpp/jni/ReadableByteChannel.cpp new file mode 100644 index 00000000..2b030b15 --- /dev/null +++ b/lib/fb/src/main/cpp/jni/ReadableByteChannel.cpp @@ -0,0 +1,21 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#include + +namespace facebook { +namespace jni { + +int JReadableByteChannel::read(alias_ref dest) const { + if (!self()) { + throwNewJavaException("java/lang/NullPointerException", "java.lang.NullPointerException"); + } + static auto method = javaClassStatic()->getMethod)>("read"); + return method(self(), dest); +} + +}} + diff --git a/lib/fb/src/main/cpp/jni/References.cpp b/lib/fb/src/main/cpp/jni/References.cpp deleted file mode 100644 index 71284b0e..00000000 --- a/lib/fb/src/main/cpp/jni/References.cpp +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#include - -namespace facebook { -namespace jni { - -JniLocalScope::JniLocalScope(JNIEnv* env, jint capacity) - : env_(env) { - hasFrame_ = false; - auto pushResult = env->PushLocalFrame(capacity); - FACEBOOK_JNI_THROW_EXCEPTION_IF(pushResult < 0); - hasFrame_ = true; -} - -JniLocalScope::~JniLocalScope() { - if (hasFrame_) { - env_->PopLocalFrame(nullptr); - } -} - -namespace internal { - -// Default implementation always returns true. -// Platform-specific sources can override this. -bool doesGetObjectRefTypeWork() __attribute__ ((weak)); -bool doesGetObjectRefTypeWork() { - return true; -} - -} - -} -} diff --git a/lib/fb/src/main/cpp/jni/WeakReference.cpp b/lib/fb/src/main/cpp/jni/WeakReference.cpp deleted file mode 100644 index 5552a763..00000000 --- a/lib/fb/src/main/cpp/jni/WeakReference.cpp +++ /dev/null @@ -1,40 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#include -#include - -namespace facebook { -namespace jni { - -WeakReference::WeakReference(jobject strongRef) : - m_weakReference(Environment::current()->NewWeakGlobalRef(strongRef)) -{ -} - -WeakReference::~WeakReference() { - auto env = Environment::current(); - FBASSERTMSGF(env, "Attempt to delete jni::WeakReference from non-JNI thread"); - env->DeleteWeakGlobalRef(m_weakReference); -} - -ResolvedWeakReference::ResolvedWeakReference(jobject weakRef) : - m_strongReference(Environment::current()->NewLocalRef(weakRef)) -{ -} - -ResolvedWeakReference::ResolvedWeakReference(const RefPtr& weakRef) : - m_strongReference(Environment::current()->NewLocalRef(weakRef->weakRef())) -{ -} - -ResolvedWeakReference::~ResolvedWeakReference() { - if (m_strongReference) - Environment::current()->DeleteLocalRef(m_strongReference); -} - -} } - diff --git a/lib/fb/src/main/cpp/jni/detail/Environment.cpp b/lib/fb/src/main/cpp/jni/detail/Environment.cpp new file mode 100644 index 00000000..6b35358a --- /dev/null +++ b/lib/fb/src/main/cpp/jni/detail/Environment.cpp @@ -0,0 +1,291 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#include + +#include +#include + +namespace facebook { +namespace jni { + +namespace { + +JavaVM* g_vm = nullptr; + +struct EnvironmentInitializer { + EnvironmentInitializer(JavaVM* vm) { + FBJNI_ASSERT(!g_vm); + FBJNI_ASSERT(vm); + g_vm = vm; + } +}; + +int getEnv(JNIEnv** env) { + FBJNI_ASSERT(g_vm); + // g_vm->GetEnv() might not clear the env* in failure cases. + *env = nullptr; + jint ret = g_vm->GetEnv((void**)env, JNI_VERSION_1_6); + // Other possibilites are that JNI_VERSION_1_6 is invalid, or some + // unknown return was received. + FBJNI_ASSERT(ret == JNI_OK || ret == JNI_EDETACHED); + return ret; +} + +// Some jni.h define the first arg to AttachCurrentThread as void**, +// and some as JNIEnv**. This hack allows both to work. + +template +struct AttachTraits; + +template <> +struct AttachTraits { + using EnvType = JNIEnv*; +}; + +template <> +struct AttachTraits { + using EnvType = void*; +}; + +JNIEnv* attachCurrentThread() { + JavaVMAttachArgs args{JNI_VERSION_1_6, nullptr, nullptr}; + using AttachEnvType = + typename AttachTraits::EnvType; + AttachEnvType env; + auto result = g_vm->AttachCurrentThread(&env, &args); + FBJNI_ASSERT(result == JNI_OK); + return reinterpret_cast(env); +} + +} + +/* static */ +void Environment::initialize(JavaVM* vm) { + static EnvironmentInitializer init(vm); +} + +namespace { + +pthread_key_t makeKey() { + pthread_key_t key; + int ret = pthread_key_create(&key, nullptr); + if (ret != 0) { + FBJNI_LOGF("pthread_key_create failed: %d", ret); + } + return key; +} + +pthread_key_t getTLKey() { + static pthread_key_t key = makeKey(); + return key; +} + +inline detail::TLData* getTLData(pthread_key_t key) { + return reinterpret_cast(pthread_getspecific(key)); +} + +inline void setTLData(pthread_key_t key, detail::TLData* data) { + int ret = pthread_setspecific(key, data); + if (ret != 0) { + (void) ret; + FBJNI_LOGF("pthread_setspecific failed: %d", ret); + } +} + +// This returns non-nullptr iff the env was cached from java. So it +// can return nullptr for a thread which has been registered. +inline JNIEnv* cachedOrNull() { + detail::TLData* pdata = getTLData(getTLKey()); + return (pdata ? pdata->env : nullptr); +} + +} + +namespace detail { + +// This will return a cached env if there is one, or get one from JNI +// if the thread has already been attached some other way. If it +// returns nullptr, then the thread has never been registered, or the +// VM has never been set up for fbjni. + +JNIEnv* currentOrNull() { + if (!g_vm) { + return nullptr; + } + + detail::TLData* pdata = getTLData(getTLKey()); + if (pdata && pdata->env) { + return pdata->env; + } + + JNIEnv* env; + if (getEnv(&env) != JNI_OK) { + // If there's a ThreadScope on the stack, we should have gotten a + // JNIEnv and not ended up here. + FBJNI_ASSERT(!pdata || !pdata->attached); + } + return env; +} + +// To understand JniEnvCacher and ThreadScope, it is helpful to +// realize that if a flagged JniEnvCacher is on the stack, then a +// flagged ThreadScope cannot be after it. If a flagged ThreadCacher +// is on the stack, then a JniEnvCacher *can* be after it. So, +// ThreadScope's setup and teardown can both assume they are the +// first/last interesting objects, but this is not true of +// JniEnvCacher. + +JniEnvCacher::JniEnvCacher(JNIEnv* env) + : thisCached_(false) +{ + FBJNI_ASSERT(env); + + pthread_key_t key = getTLKey(); + detail::TLData* pdata = getTLData(key); + if (pdata && pdata->env) { + return; + } + + if (!pdata) { + pdata = &data_; + setTLData(key, pdata); + pdata->attached = false; + } else { + FBJNI_ASSERT(!pdata->env); + } + + pdata->env = env; + + thisCached_ = true; +} + +JniEnvCacher::~JniEnvCacher() { + if (!thisCached_) { + return; + } + + pthread_key_t key = getTLKey(); + TLData* pdata = getTLData(key); + FBJNI_ASSERT(pdata); + FBJNI_ASSERT(pdata->env != nullptr); + pdata->env = nullptr; + if (!pdata->attached) { + setTLData(key, nullptr); + } +} + +} + +ThreadScope::ThreadScope() + : thisAttached_(false) +{ + if (g_vm == nullptr) { + throw std::runtime_error("fbjni is uninitialized; no thread can be attached."); + } + + JNIEnv* env; + + // Check if the thread is attached somehow. + auto result = getEnv(&env); + if (result == JNI_OK) { + return; + } + + // At this point, it appears there's no thread attached and no env is + // cached, or we would have returned already. So there better not + // be TLData. + + pthread_key_t key = getTLKey(); + detail::TLData* pdata = getTLData(key); + FBJNI_ASSERT(pdata == nullptr); + setTLData(key, &data_); + + attachCurrentThread(); + + data_.env = nullptr; + data_.attached = true; + + thisAttached_ = true; +} + +ThreadScope::~ThreadScope() { + if (!thisAttached_) { + return; + } + + pthread_key_t key = getTLKey(); + detail::TLData* pdata = getTLData(key); + FBJNI_ASSERT(pdata); + FBJNI_ASSERT(pdata->env == nullptr); + FBJNI_ASSERT(pdata->attached); + FBJNI_ASSERT(g_vm); + g_vm->DetachCurrentThread(); + setTLData(key, nullptr); +} + +/* static */ +JNIEnv* Environment::current() { + FBJNI_ASSERT(g_vm); + JNIEnv* env = detail::currentOrNull(); + if (env == nullptr) { + throw std::runtime_error("Unable to retrieve jni environment. Is the thread attached?"); + } + return env; +} + +/* static */ +JNIEnv* Environment::ensureCurrentThreadIsAttached() { + FBJNI_ASSERT(g_vm); + JNIEnv* env = detail::currentOrNull(); + if (env == nullptr) { + env = attachCurrentThread(); + FBJNI_ASSERT(env); + } + return env; +} + +namespace { +struct JThreadScopeSupport : JavaClass { + static auto constexpr kJavaDescriptor = "Lcom/facebook/jni/ThreadScopeSupport;"; + + // These reinterpret_casts are a totally dangerous pattern. Don't use them. Use HybridData instead. + static void runStdFunction(std::function&& func) { + static const auto method = javaClassStatic()->getStaticMethod("runStdFunction"); + method(javaClassStatic(), reinterpret_cast(&func)); + } + + static void runStdFunctionImpl(alias_ref, jlong ptr) { + (*reinterpret_cast*>(ptr))(); + } + + static void OnLoad() { + // We need the javaClassStatic so that the class lookup is cached and that + // runStdFunction can be called from a ThreadScope-attached thread. + javaClassStatic()->registerNatives({ + makeNativeMethod("runStdFunctionImpl", runStdFunctionImpl), + }); + } +}; +} + +/* static */ +void ThreadScope::OnLoad() { + // These classes are required for ScopeWithClassLoader. Ensure they are looked up when loading. + JThreadScopeSupport::OnLoad(); +} + +/* static */ +void ThreadScope::WithClassLoader(std::function&& runnable) { + if (cachedOrNull() == nullptr) { + ThreadScope ts; + JThreadScopeSupport::runStdFunction(std::move(runnable)); + } else { + runnable(); + } +} + +} } diff --git a/lib/fb/src/main/cpp/jni/detail/Exceptions.cpp b/lib/fb/src/main/cpp/jni/detail/Exceptions.cpp new file mode 100644 index 00000000..77082c6f --- /dev/null +++ b/lib/fb/src/main/cpp/jni/detail/Exceptions.cpp @@ -0,0 +1,390 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#include +#include + +#ifndef FBJNI_NO_EXCEPTION_PTR +#include +#include +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace facebook { +namespace jni { + +namespace { +class JRuntimeException : public JavaClass { + public: + static auto constexpr kJavaDescriptor = "Ljava/lang/RuntimeException;"; + + static local_ref create(const char* str) { + return newInstance(make_jstring(str)); + } + + static local_ref create() { + return newInstance(); + } +}; + +class JIOException : public JavaClass { + public: + static auto constexpr kJavaDescriptor = "Ljava/io/IOException;"; + + static local_ref create(const char* str) { + return newInstance(make_jstring(str)); + } +}; + +class JOutOfMemoryError : public JavaClass { + public: + static auto constexpr kJavaDescriptor = "Ljava/lang/OutOfMemoryError;"; + + static local_ref create(const char* str) { + return newInstance(make_jstring(str)); + } +}; + +class JArrayIndexOutOfBoundsException : public JavaClass { + public: + static auto constexpr kJavaDescriptor = "Ljava/lang/ArrayIndexOutOfBoundsException;"; + + static local_ref create(const char* str) { + return newInstance(make_jstring(str)); + } +}; + +class JUnknownCppException : public JavaClass { + public: + static auto constexpr kJavaDescriptor = "Lcom/facebook/jni/UnknownCppException;"; + + static local_ref create() { + return newInstance(); + } + + static local_ref create(const char* str) { + return newInstance(make_jstring(str)); + } +}; + +class JCppSystemErrorException : public JavaClass { + public: + static auto constexpr kJavaDescriptor = "Lcom/facebook/jni/CppSystemErrorException;"; + + static local_ref create(const std::system_error& e) { + return newInstance(make_jstring(e.what()), e.code().value()); + } +}; + +// Exception throwing & translating functions ////////////////////////////////////////////////////// + +// Functions that throw Java exceptions + +void setJavaExceptionAndAbortOnFailure(alias_ref throwable) { + auto env = Environment::current(); + if (throwable) { + env->Throw(throwable.get()); + } + if (env->ExceptionCheck() != JNI_TRUE) { + FBJNI_LOGF("Failed to set Java exception"); + } +} + +} + +// Functions that throw C++ exceptions + +// TODO(T6618159) Inject the c++ stack into the exception's stack trace. One +// issue: when a java exception is created, it captures the full java stack +// across jni boundaries. lyra will only capture the c++ stack to the jni +// boundary. So, as we pass the java exception up to c++, we need to capture +// the c++ stack and then insert it into the correct place in the java stack +// trace. Then, as the exception propagates across the boundaries, we will +// slowly fill in the c++ parts of the trace. +void throwPendingJniExceptionAsCppException() { + JNIEnv* env = Environment::current(); + if (env->ExceptionCheck() == JNI_FALSE) { + return; + } + + auto throwable = env->ExceptionOccurred(); + if (!throwable) { + throw std::runtime_error("Unable to get pending JNI exception."); + } + env->ExceptionClear(); + + throw JniException(adopt_local(throwable)); +} + +void throwCppExceptionIf(bool condition) { + if (!condition) { + return; + } + + auto env = Environment::current(); + if (env->ExceptionCheck() == JNI_TRUE) { + throwPendingJniExceptionAsCppException(); + return; + } + + throw JniException(); +} + +void throwNewJavaException(jthrowable throwable) { + throw JniException(wrap_alias(throwable)); +} + +void throwNewJavaException(const char* throwableName, const char* msg) { + // If anything of the fbjni calls fail, an exception of a suitable + // form will be thrown, which is what we want. + auto throwableClass = findClassLocal(throwableName); + auto throwable = throwableClass->newObject( + throwableClass->getConstructor(), + make_jstring(msg).release()); + throwNewJavaException(throwable.get()); +} + +// jthrowable ////////////////////////////////////////////////////////////////////////////////////// + +local_ref JThrowable::initCause(alias_ref cause) { + static auto meth = javaClassStatic()->getMethod)>("initCause"); + return meth(self(), cause); +} + +auto JThrowable::getStackTrace() -> local_ref { + static auto meth = javaClassStatic()->getMethod("getStackTrace"); + return meth(self()); +} + +void JThrowable::setStackTrace(alias_ref stack) { + static auto meth = javaClassStatic()->getMethod)>("setStackTrace"); + return meth(self(), stack); +} + +auto JStackTraceElement::create( + const std::string& declaringClass, const std::string& methodName, const std::string& file, int line) + -> local_ref { + return newInstance(declaringClass, methodName, file, line); +} + +std::string JStackTraceElement::getClassName() const { + static auto meth = javaClassStatic()->getMethod()>("getClassName"); + return meth(self())->toStdString(); +} + +std::string JStackTraceElement::getMethodName() const { + static auto meth = javaClassStatic()->getMethod()>("getMethodName"); + return meth(self())->toStdString(); +} + +std::string JStackTraceElement::getFileName() const { + static auto meth = javaClassStatic()->getMethod()>("getFileName"); + return meth(self())->toStdString(); +} + +int JStackTraceElement::getLineNumber() const { + static auto meth = javaClassStatic()->getMethod("getLineNumber"); + return meth(self()); +} + +// Translate C++ to Java Exception + +namespace { + +// For each exception in the chain of the exception_ptr argument, func +// will be called with that exception (in reverse order, i.e. innermost first). +#ifndef FBJNI_NO_EXCEPTION_PTR +void denest(const std::function& func, std::exception_ptr ptr) { + FBJNI_ASSERT(ptr); + try { + std::rethrow_exception(ptr); + } catch (const std::nested_exception& e) { + denest(func, e.nested_ptr()); + } catch (...) { + // ignored. + } + func(ptr); + } +#endif + +} // namespace + +#ifndef FBJNI_NO_EXCEPTION_PTR +local_ref createJStackTraceElement(const lyra::StackTraceElement& cpp) { + return JStackTraceElement::create( + "|lyra|{" + cpp.libraryName() + "}", cpp.functionName(), cpp.buildId(), cpp.libraryOffset()); +} + +void addCppStacktraceToJavaException(alias_ref java, std::exception_ptr cpp) { + auto cppStack = lyra::getStackTraceSymbols( + (cpp == nullptr) ? + lyra::getStackTrace() + : lyra::getExceptionTrace(cpp)); + + auto javaStack = java->getStackTrace(); + auto newStack = JThrowable::JStackTrace::newArray(javaStack->size() + cppStack.size()); + size_t i = 0; + for (size_t j = 0; j < cppStack.size(); j++, i++) { + (*newStack)[i] = createJStackTraceElement(cppStack[j]); + } + for (size_t j = 0; j < javaStack->size(); j++, i++) { + (*newStack)[i] = (*javaStack)[j]; + } + java->setStackTrace(newStack); +} + +local_ref convertCppExceptionToJavaException(std::exception_ptr ptr) { + FBJNI_ASSERT(ptr); + local_ref current; + bool addCppStack = true; + try { + std::rethrow_exception(ptr); + addCppStack = false; + } catch (const JniException& ex) { + current = ex.getThrowable(); + } catch (const std::ios_base::failure& ex) { + current = JIOException::create(ex.what()); + } catch (const std::bad_alloc& ex) { + current = JOutOfMemoryError::create(ex.what()); + } catch (const std::out_of_range& ex) { + current = JArrayIndexOutOfBoundsException::create(ex.what()); + } catch (const std::system_error& ex) { + current = JCppSystemErrorException::create(ex); + } catch (const std::runtime_error& ex) { + current = JRuntimeException::create(ex.what()); + } catch (const std::exception& ex) { + current = JCppException::create(ex.what()); + } catch (const char* msg) { + current = JUnknownCppException::create(msg); + } catch (...) { + current = JUnknownCppException::create(); + } + + if (addCppStack) { + addCppStacktraceToJavaException(current, ptr); + } + return current; + } +#endif + +local_ref getJavaExceptionForCppBackTrace() { + return getJavaExceptionForCppBackTrace(nullptr); +} + +local_ref getJavaExceptionForCppBackTrace(const char* msg) { + local_ref current = + msg ? JUnknownCppException::create(msg) : JUnknownCppException::create(); +#ifndef FBJNI_NO_EXCEPTION_PTR + addCppStacktraceToJavaException(current, nullptr); +#endif + return current; +} + + +#ifndef FBJNI_NO_EXCEPTION_PTR +local_ref getJavaExceptionForCppException(std::exception_ptr ptr) { + FBJNI_ASSERT(ptr); + local_ref previous; + auto func = [&previous] (std::exception_ptr ptr) { + auto current = convertCppExceptionToJavaException(ptr); + if (previous) { + current->initCause(previous); + } + previous = current; + }; + denest(func, ptr); + return previous; +} +#endif + +void translatePendingCppExceptionToJavaException() { + try { +#ifndef FBJNI_NO_EXCEPTION_PTR + auto exc = getJavaExceptionForCppException(std::current_exception()); +#else + auto exc = JUnknownCppException::create(); +#endif + setJavaExceptionAndAbortOnFailure(exc); + } catch (...) { +#ifndef FBJNI_NO_EXCEPTION_PTR + FBJNI_LOGE( + "Unexpected error in translatePendingCppExceptionToJavaException(): %s", + lyra::toString(std::current_exception()).c_str()); +#else + FBJNI_LOGE( + "Unexpected error in translatePendingCppExceptionToJavaException()"); +#endif + std::terminate(); + } +} + +// JniException //////////////////////////////////////////////////////////////////////////////////// + +const std::string JniException::kExceptionMessageFailure_ = "Unable to get exception message."; + +JniException::JniException() : JniException(JRuntimeException::create()) { } + +JniException::JniException(alias_ref throwable) : isMessageExtracted_(false) { + throwable_ = make_global(throwable); +} + +JniException::JniException(JniException &&rhs) + : throwable_(std::move(rhs.throwable_)), + what_(std::move(rhs.what_)), + isMessageExtracted_(rhs.isMessageExtracted_) { +} + +JniException::JniException(const JniException &rhs) + : what_(rhs.what_), isMessageExtracted_(rhs.isMessageExtracted_) { + throwable_ = make_global(rhs.throwable_); +} + +JniException::~JniException() { + try { + ThreadScope ts; + throwable_.reset(); + } catch (...) { + FBJNI_LOGE("Exception in ~JniException()"); + std::terminate(); + } +} + +local_ref JniException::getThrowable() const noexcept { + return make_local(throwable_); +} + +// TODO 6900503: consider making this thread-safe. +void JniException::populateWhat() const noexcept { + try { + ThreadScope ts; + what_ = throwable_->toString(); + isMessageExtracted_ = true; + } catch(...) { + what_ = kExceptionMessageFailure_; + } +} + +const char* JniException::what() const noexcept { + if (!isMessageExtracted_) { + populateWhat(); + } + return what_.c_str(); +} + +void JniException::setJavaException() const noexcept { + setJavaExceptionAndAbortOnFailure(throwable_); +} + +}} diff --git a/lib/fb/src/main/cpp/jni/detail/Hybrid.cpp b/lib/fb/src/main/cpp/jni/detail/Hybrid.cpp new file mode 100644 index 00000000..12bcabc5 --- /dev/null +++ b/lib/fb/src/main/cpp/jni/detail/Hybrid.cpp @@ -0,0 +1,32 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#include + +namespace facebook { +namespace jni { + +namespace detail { + +local_ref HybridData::create() { + return newInstance(); +} + +} + +namespace { +void deleteNative(alias_ref, jlong ptr) { + delete reinterpret_cast(ptr); +} +} + +void HybridDataOnLoad() { + registerNatives("com/facebook/jni/HybridData$Destructor", { + makeNativeMethod("deleteNative", deleteNative), + }); +} + +}} diff --git a/lib/fb/src/main/cpp/jni/detail/References.cpp b/lib/fb/src/main/cpp/jni/detail/References.cpp new file mode 100644 index 00000000..fa30832c --- /dev/null +++ b/lib/fb/src/main/cpp/jni/detail/References.cpp @@ -0,0 +1,79 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#include + +namespace facebook { +namespace jni { + +JniLocalScope::JniLocalScope(JNIEnv* env, jint capacity) : env_(env) { + hasFrame_ = false; + auto pushResult = env->PushLocalFrame(capacity); + FACEBOOK_JNI_THROW_EXCEPTION_IF(pushResult < 0); + hasFrame_ = true; +} + +JniLocalScope::~JniLocalScope() { + if (hasFrame_) { + env_->PopLocalFrame(nullptr); + } +} + +namespace { + +#ifdef __ANDROID__ + +int32_t getAndroidApiLevel() { + // This is called from the static local initializer in + // isObjectRefType(), and creating fbjni references can call + // isObjectRefType(). So, to avoid recursively entering the block + // where the static is initialized (which is undefined behavior), we + // avoid using standard fbjni references here. + + JNIEnv* env = Environment::current(); + jclass cls = detail::findClass(env, "android/os/Build$VERSION"); + jfieldID field = env->GetStaticFieldID( + cls, "SDK_INT", jtype_traits::descriptor().c_str()); + if (!field) { + env->DeleteLocalRef(cls); + } + FACEBOOK_JNI_THROW_EXCEPTION_IF(!field); + int32_t ret = env->GetStaticIntField(cls, field); + env->DeleteLocalRef(cls); + return ret; +} + +bool doesGetObjectRefTypeWork() { + auto level = getAndroidApiLevel(); + return level >= 14; +} + +#else + +bool doesGetObjectRefTypeWork() { + auto jni_version = Environment::current()->GetVersion(); + return jni_version >= JNI_VERSION_1_6; +} + +#endif + +} // namespace + +bool isObjectRefType(jobject reference, jobjectRefType refType) { + // null-check first so that we short-circuit during (safe) global + // constructors, where we won't have an Environment::current() yet + if (!reference) { + return true; + } + + static bool getObjectRefTypeWorks = doesGetObjectRefTypeWork(); + + return !getObjectRefTypeWorks || + Environment::current()->GetObjectRefType(reference) == refType; +} + +} // namespace jni +} // namespace facebook diff --git a/lib/fb/src/main/cpp/jni/LocalString.cpp b/lib/fb/src/main/cpp/jni/detail/utf8.cpp similarity index 78% rename from lib/fb/src/main/cpp/jni/LocalString.cpp rename to lib/fb/src/main/cpp/jni/detail/utf8.cpp index 9233ec02..9483c911 100644 --- a/lib/fb/src/main/cpp/jni/LocalString.cpp +++ b/lib/fb/src/main/cpp/jni/detail/utf8.cpp @@ -4,11 +4,9 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ -#include -#include -#include +#include -#include +#include namespace facebook { namespace jni { @@ -22,7 +20,9 @@ const uint16_t kUtf16HighSubHighBoundary = 0xDC00; const uint16_t kUtf16LowSubHighBoundary = 0xE000; inline void encode3ByteUTF8(char32_t code, uint8_t* out) { - FBASSERTMSGF((code & 0xffff0000) == 0, "3 byte utf-8 encodings only valid for up to 16 bits"); + if ((code & 0xffff0000) != 0) { + FBJNI_LOGF("3 byte utf-8 encodings only valid for up to 16 bits"); + } out[0] = 0xE0 | (code >> 12); out[1] = 0x80 | ((code >> 6) & 0x3F); @@ -36,7 +36,9 @@ inline char32_t decode3ByteUTF8(const uint8_t* in) { } inline void encode4ByteUTF8(char32_t code, std::string& out, size_t offset) { - FBASSERTMSGF((code & 0xfff80000) == 0, "4 byte utf-8 encodings only valid for up to 21 bits"); + if ((code & 0xfff80000) != 0) { + FBJNI_LOGF("4 byte utf-8 encodings only valid for up to 21 bits"); + } out[offset] = (char) (0xF0 | (code >> 18)); out[offset + 1] = (char) (0x80 | ((code >> 12) & 0x3F)); @@ -100,9 +102,13 @@ void utf8ToModifiedUTF8(const uint8_t* utf8, size_t len, uint8_t* modified, size { size_t j = 0; for (size_t i = 0; i < len; ) { - FBASSERTMSGF(j < modifiedBufLen, "output buffer is too short"); + if (j >= modifiedBufLen) { + FBJNI_LOGF("output buffer is too short"); + } if (utf8[i] == 0) { - FBASSERTMSGF(j + 1 < modifiedBufLen, "output buffer is too short"); + if (j + 1 >= modifiedBufLen) { + FBJNI_LOGF("output buffer is too short"); + } modified[j] = 0xc0; modified[j + 1] = 0x80; i += 1; @@ -142,14 +148,18 @@ void utf8ToModifiedUTF8(const uint8_t* utf8, size_t len, uint8_t* modified, size } // encode each as a 3 byte surrogate value - FBASSERTMSGF(j + 5 < modifiedBufLen, "output buffer is too short"); + if (j + 5 >= modifiedBufLen) { + FBJNI_LOGF("output buffer is too short"); + } encode3ByteUTF8(first, modified + j); encode3ByteUTF8(second, modified + j + 3); i += 4; j += 6; } - FBASSERTMSGF(j < modifiedBufLen, "output buffer is too short"); + if (j >= modifiedBufLen) { + FBJNI_LOGF("output buffer is too short"); + } modified[j++] = '\0'; } @@ -264,46 +274,5 @@ std::string utf16toUTF8(const uint16_t* utf16String, size_t utf16StringLen) noex } } - -LocalString::LocalString(const std::string& str) -{ - size_t modlen = detail::modifiedLength(str); - if (modlen == str.size()) { - // no supplementary characters, build jstring from input buffer - m_string = Environment::current()->NewStringUTF(str.data()); - return; - } - auto modified = std::vector(modlen + 1); // allocate extra byte for \0 - detail::utf8ToModifiedUTF8( - reinterpret_cast(str.data()), str.size(), - reinterpret_cast(modified.data()), modified.size()); - m_string = Environment::current()->NewStringUTF(modified.data()); } - -LocalString::LocalString(const char* str) -{ - size_t len; - size_t modlen = detail::modifiedLength(reinterpret_cast(str), &len); - if (modlen == len) { - // no supplementary characters, build jstring from input buffer - m_string = Environment::current()->NewStringUTF(str); - return; - } - auto modified = std::vector(modlen + 1); // allocate extra byte for \0 - detail::utf8ToModifiedUTF8( - reinterpret_cast(str), len, - reinterpret_cast(modified.data()), modified.size()); - m_string = Environment::current()->NewStringUTF(modified.data()); } - -LocalString::~LocalString() { - Environment::current()->DeleteLocalRef(m_string); -} - -std::string fromJString(JNIEnv* env, jstring str) { - auto utf16String = JStringUtf16Extractor(env, str); - auto length = env->GetStringLength(str); - return detail::utf16toUTF8(utf16String, length); -} - -} } diff --git a/lib/fb/src/main/cpp/jni/fbjni.cpp b/lib/fb/src/main/cpp/jni/fbjni.cpp index c556fabb..39cc02c1 100644 --- a/lib/fb/src/main/cpp/jni/fbjni.cpp +++ b/lib/fb/src/main/cpp/jni/fbjni.cpp @@ -4,36 +4,35 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ -#include +#include #include #include -#include -#include + +#include namespace facebook { namespace jni { jint initialize(JavaVM* vm, std::function&& init_fn) noexcept { - static std::once_flag flag{}; // TODO (t7832883): DTRT when we have exception pointers static auto error_msg = std::string{"Failed to initialize fbjni"}; - static auto error_occured = false; - - std::call_once(flag, [vm] { - try { - Environment::initialize(vm); - } catch (std::exception& ex) { - error_occured = true; + static bool error_occured = [vm] { + bool retVal = false; try { - error_msg = std::string{"Failed to initialize fbjni: "} + ex.what(); + Environment::initialize(vm); + } catch (std::exception& ex) { + retVal = true; + try { + error_msg = std::string{"Failed to initialize fbjni: "} + ex.what(); + } catch (...) { + // Ignore, we already have a fall back message + } } catch (...) { - // Ignore, we already have a fall back message + retVal = true; } - } catch (...) { - error_occured = true; - } - }); + return retVal; + }(); try { if (error_occured) { @@ -42,7 +41,7 @@ jint initialize(JavaVM* vm, std::function&& init_fn) noexcept { init_fn(); } catch (const std::exception& e) { - FBLOGE("error %s", e.what()); + FBJNI_LOGE("error %s", e.what()); translatePendingCppExceptionToJavaException(); } catch (...) { translatePendingCppExceptionToJavaException(); @@ -52,43 +51,54 @@ jint initialize(JavaVM* vm, std::function&& init_fn) noexcept { return JNI_VERSION_1_6; } -alias_ref findClassStatic(const char* name) { - const auto env = internal::getEnv(); +namespace detail { + +jclass findClass(JNIEnv* env, const char* name) { if (!env) { throw std::runtime_error("Unable to retrieve JNIEnv*."); } - auto cls = env->FindClass(name); + jclass cls = env->FindClass(name); FACEBOOK_JNI_THROW_EXCEPTION_IF(!cls); - auto leaking_ref = (jclass)env->NewGlobalRef(cls); - FACEBOOK_JNI_THROW_EXCEPTION_IF(!leaking_ref); - return wrap_alias(leaking_ref); + return cls; +} + } local_ref findClassLocal(const char* name) { - const auto env = internal::getEnv(); - if (!env) { - throw std::runtime_error("Unable to retrieve JNIEnv*."); - } - auto cls = env->FindClass(name); - FACEBOOK_JNI_THROW_EXCEPTION_IF(!cls); - return adopt_local(cls); + return adopt_local(detail::findClass(detail::currentOrNull(), name)); +} + +alias_ref findClassStatic(const char* name) { + JNIEnv* env = detail::currentOrNull(); + auto cls = adopt_local(detail::findClass(env, name)); + auto leaking_ref = (jclass)env->NewGlobalRef(cls.get()); + FACEBOOK_JNI_THROW_EXCEPTION_IF(!leaking_ref); + return wrap_alias(leaking_ref); } // jstring ///////////////////////////////////////////////////////////////////////////////////////// std::string JString::toStdString() const { - const auto env = internal::getEnv(); + const auto env = Environment::current(); auto utf16String = JStringUtf16Extractor(env, self()); - auto length = env->GetStringLength(self()); - return detail::utf16toUTF8(utf16String, length); + return detail::utf16toUTF8(utf16String.chars(), utf16String.length()); +} + +std::u16string JString::toU16String() const { + const auto env = Environment::current(); + auto utf16String = JStringUtf16Extractor(env, self()); + if (!utf16String.chars() || utf16String.length() == 0) { + return {}; + } + return std::u16string(reinterpret_cast(utf16String.chars()), utf16String.length()); } local_ref make_jstring(const char* utf8) { if (!utf8) { return {}; } - const auto env = internal::getEnv(); + const auto env = Environment::current(); size_t len; size_t modlen = detail::modifiedLength(reinterpret_cast(utf8), &len); jstring result; @@ -111,6 +121,18 @@ local_ref make_jstring(const char* utf8) { return adopt_local(result); } +local_ref make_jstring(const std::u16string& utf16) { + if (utf16.empty()) { + return {}; + } + const auto env = Environment::current(); + static_assert( + sizeof(jchar) == sizeof(std::u16string::value_type), + "Expecting jchar to be the same size as std::u16string::CharT"); + jstring result = env->NewString(reinterpret_cast(utf16.c_str()), utf16.size()); + FACEBOOK_JNI_THROW_PENDING_EXCEPTION(); + return adopt_local(result); +} // JniPrimitiveArrayFunctions ////////////////////////////////////////////////////////////////////// @@ -119,50 +141,44 @@ local_ref make_jstring(const char* utf8) { #define DEFINE_PRIMITIVE_METHODS(TYPE, NAME, SMALLNAME) \ \ template<> \ -FBEXPORT \ TYPE* JPrimitiveArray::getElements(jboolean* isCopy) { \ - auto env = internal::getEnv(); \ + auto env = Environment::current(); \ TYPE* res = env->Get ## NAME ## ArrayElements(self(), isCopy); \ FACEBOOK_JNI_THROW_PENDING_EXCEPTION(); \ return res; \ } \ \ template<> \ -FBEXPORT \ void JPrimitiveArray::releaseElements( \ TYPE* elements, jint mode) { \ - auto env = internal::getEnv(); \ + auto env = Environment::current(); \ env->Release ## NAME ## ArrayElements(self(), elements, mode); \ FACEBOOK_JNI_THROW_PENDING_EXCEPTION(); \ } \ \ template<> \ -FBEXPORT \ void JPrimitiveArray::getRegion( \ jsize start, jsize length, TYPE* buf) { \ - auto env = internal::getEnv(); \ + auto env = Environment::current(); \ env->Get ## NAME ## ArrayRegion(self(), start, length, buf); \ FACEBOOK_JNI_THROW_PENDING_EXCEPTION(); \ } \ \ template<> \ -FBEXPORT \ void JPrimitiveArray::setRegion( \ jsize start, jsize length, const TYPE* elements) { \ - auto env = internal::getEnv(); \ + auto env = Environment::current(); \ env->Set ## NAME ## ArrayRegion(self(), start, length, elements); \ FACEBOOK_JNI_THROW_PENDING_EXCEPTION(); \ } \ \ -FBEXPORT \ local_ref make_ ## SMALLNAME ## _array(jsize size) { \ - auto array = internal::getEnv()->New ## NAME ## Array(size); \ + auto array = Environment::current()->New ## NAME ## Array(size); \ FACEBOOK_JNI_THROW_EXCEPTION_IF(!array); \ return adopt_local(array); \ } \ \ template<> \ -FBEXPORT \ local_ref JArray ## NAME::newArray(size_t count) { \ return make_ ## SMALLNAME ## _array(count); \ } \ @@ -178,13 +194,37 @@ DEFINE_PRIMITIVE_METHODS(jfloat, Float, float) DEFINE_PRIMITIVE_METHODS(jdouble, Double, double) #pragma pop_macro("DEFINE_PRIMITIVE_METHODS") +namespace detail { + +detail::BaseHybridClass* HybridDestructor::getNativePointer() { + static auto pointerField = javaClassStatic()->getField("mNativePointer"); + auto* value = reinterpret_cast(getFieldValue(pointerField)); + if (!value) { + throwNewJavaException("java/lang/NullPointerException", "java.lang.NullPointerException"); + } + return value; +} + +void HybridDestructor::setNativePointer( + std::unique_ptr new_value) { + static auto pointerField = javaClassStatic()->getField("mNativePointer"); + auto old_value = std::unique_ptr( + reinterpret_cast(getFieldValue(pointerField))); + if (new_value && old_value) { + FBJNI_LOGF("Attempt to set C++ native pointer twice"); + } + setFieldValue(pointerField, reinterpret_cast(new_value.release())); +} + +} + // Internal debug ///////////////////////////////////////////////////////////////////////////////// namespace internal { -FBEXPORT ReferenceStats g_reference_stats; +ReferenceStats g_reference_stats; -FBEXPORT void facebook::jni::internal::ReferenceStats::reset() noexcept { +void facebook::jni::internal::ReferenceStats::reset() noexcept { locals_deleted = globals_deleted = weaks_deleted = 0; } diff --git a/lib/fb/src/main/cpp/jni/jni_helpers.cpp b/lib/fb/src/main/cpp/jni/jni_helpers.cpp deleted file mode 100644 index c45217bf..00000000 --- a/lib/fb/src/main/cpp/jni/jni_helpers.cpp +++ /dev/null @@ -1,194 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#include -#include -#include - -#include - -#define MSG_SIZE 1024 - -namespace facebook { - -/** - * Instructs the JNI environment to throw an exception. - * - * @param pEnv JNI environment - * @param szClassName class name to throw - * @param szFmt sprintf-style format string - * @param ... sprintf-style args - * @return 0 on success; a negative value on failure - */ -jint throwException(JNIEnv* pEnv, const char* szClassName, const char* szFmt, va_list va_args) { - char szMsg[MSG_SIZE]; - vsnprintf(szMsg, MSG_SIZE, szFmt, va_args); - jclass exClass = pEnv->FindClass(szClassName); - return pEnv->ThrowNew(exClass, szMsg); -} - -/** - * Instructs the JNI environment to throw a NoClassDefFoundError. - * - * @param pEnv JNI environment - * @param szFmt sprintf-style format string - * @param ... sprintf-style args - * @return 0 on success; a negative value on failure - */ -jint throwNoClassDefError(JNIEnv* pEnv, const char* szFmt, ...) { - va_list va_args; - va_start(va_args, szFmt); - jint ret = throwException(pEnv, "java/lang/NoClassDefFoundError", szFmt, va_args); - va_end(va_args); - return ret; -} - -/** - * Instructs the JNI environment to throw a RuntimeException. - * - * @param pEnv JNI environment - * @param szFmt sprintf-style format string - * @param ... sprintf-style args - * @return 0 on success; a negative value on failure - */ -jint throwRuntimeException(JNIEnv* pEnv, const char* szFmt, ...) { - va_list va_args; - va_start(va_args, szFmt); - jint ret = throwException(pEnv, "java/lang/RuntimeException", szFmt, va_args); - va_end(va_args); - return ret; -} - -/** - * Instructs the JNI environment to throw an IllegalArgumentException. - * - * @param pEnv JNI environment - * @param szFmt sprintf-style format string - * @param ... sprintf-style args - * @return 0 on success; a negative value on failure - */ -jint throwIllegalArgumentException(JNIEnv* pEnv, const char* szFmt, ...) { - va_list va_args; - va_start(va_args, szFmt); - jint ret = throwException(pEnv, "java/lang/IllegalArgumentException", szFmt, va_args); - va_end(va_args); - return ret; -} - -/** - * Instructs the JNI environment to throw an IllegalStateException. - * - * @param pEnv JNI environment - * @param szFmt sprintf-style format string - * @param ... sprintf-style args - * @return 0 on success; a negative value on failure - */ -jint throwIllegalStateException(JNIEnv* pEnv, const char* szFmt, ...) { - va_list va_args; - va_start(va_args, szFmt); - jint ret = throwException(pEnv, "java/lang/IllegalStateException", szFmt, va_args); - va_end(va_args); - return ret; -} - -/** - * Instructs the JNI environment to throw an OutOfMemoryError. - * - * @param pEnv JNI environment - * @param szFmt sprintf-style format string - * @param ... sprintf-style args - * @return 0 on success; a negative value on failure - */ -jint throwOutOfMemoryError(JNIEnv* pEnv, const char* szFmt, ...) { - va_list va_args; - va_start(va_args, szFmt); - jint ret = throwException(pEnv, "java/lang/OutOfMemoryError", szFmt, va_args); - va_end(va_args); - return ret; -} - -/** - * Instructs the JNI environment to throw an AssertionError. - * - * @param pEnv JNI environment - * @param szFmt sprintf-style format string - * @param ... sprintf-style args - * @return 0 on success; a negative value on failure - */ -jint throwAssertionError(JNIEnv* pEnv, const char* szFmt, ...) { - va_list va_args; - va_start(va_args, szFmt); - jint ret = throwException(pEnv, "java/lang/AssertionError", szFmt, va_args); - va_end(va_args); - return ret; -} - -/** - * Instructs the JNI environment to throw an IOException. - * - * @param pEnv JNI environment - * @param szFmt sprintf-style format string - * @param ... sprintf-style args - * @return 0 on success; a negative value on failure - */ -jint throwIOException(JNIEnv* pEnv, const char* szFmt, ...) { - va_list va_args; - va_start(va_args, szFmt); - jint ret = throwException(pEnv, "java/io/IOException", szFmt, va_args); - va_end(va_args); - return ret; -} - -/** - * Finds the specified class. If it's not found, instructs the JNI environment to throw an - * exception. - * - * @param pEnv JNI environment - * @param szClassName the classname to find in JNI format (e.g. "java/lang/String") - * @return the class or NULL if not found (in which case a pending exception will be queued). This - * returns a global reference (JNIEnv::NewGlobalRef). - */ -jclass findClassOrThrow(JNIEnv* pEnv, const char* szClassName) { - jclass clazz = pEnv->FindClass(szClassName); - if (!clazz) { - return NULL; - } - return (jclass) pEnv->NewGlobalRef(clazz); -} - -/** - * Finds the specified field of the specified class. If it's not found, instructs the JNI - * environment to throw an exception. - * - * @param pEnv JNI environment - * @param clazz the class to lookup the field in - * @param szFieldName the name of the field to find - * @param szSig the signature of the field - * @return the field or NULL if not found (in which case a pending exception will be queued) - */ -jfieldID getFieldIdOrThrow(JNIEnv* pEnv, jclass clazz, const char* szFieldName, const char* szSig) { - return pEnv->GetFieldID(clazz, szFieldName, szSig); -} - -/** - * Finds the specified method of the specified class. If it's not found, instructs the JNI - * environment to throw an exception. - * - * @param pEnv JNI environment - * @param clazz the class to lookup the method in - * @param szMethodName the name of the method to find - * @param szSig the signature of the method - * @return the method or NULL if not found (in which case a pending exception will be queued) - */ -jmethodID getMethodIdOrThrow( - JNIEnv* pEnv, - jclass clazz, - const char* szMethodName, - const char* szSig) { - return pEnv->GetMethodID(clazz, szMethodName, szSig); -} - -} // namespace facebook diff --git a/lib/fb/src/main/cpp/log.cpp b/lib/fb/src/main/cpp/log.cpp deleted file mode 100644 index 8d22bcbc..00000000 --- a/lib/fb/src/main/cpp/log.cpp +++ /dev/null @@ -1,97 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#include -#include -#include -#include - -#define LOG_BUFFER_SIZE 4096 -static LogHandler gLogHandler; - -void setLogHandler(LogHandler logHandler) { - gLogHandler = logHandler; -} - -int fb_printLog(int prio, const char *tag, const char *fmt, ...) { - char logBuffer[LOG_BUFFER_SIZE]; - - va_list va_args; - va_start(va_args, fmt); - int result = vsnprintf(logBuffer, sizeof(logBuffer), fmt, va_args); - va_end(va_args); - if (gLogHandler != NULL) { - gLogHandler(prio, tag, logBuffer); - } - __android_log_write(prio, tag, logBuffer); - return result; -} - -void logPrintByDelims(int priority, const char* tag, const char* delims, - const char* msg, ...) -{ - va_list ap; - char buf[32768]; - char* context; - char* tok; - - va_start(ap, msg); - vsnprintf(buf, sizeof(buf), msg, ap); - va_end(ap); - - tok = strtok_r(buf, delims, &context); - - if (!tok) { - return; - } - - do { - __android_log_write(priority, tag, tok); - } while ((tok = strtok_r(NULL, delims, &context))); -} - -#ifndef ANDROID - -// Implementations of the basic android logging functions for non-android platforms. - -static char logTagChar(int prio) { - switch (prio) { - default: - case ANDROID_LOG_UNKNOWN: - case ANDROID_LOG_DEFAULT: - case ANDROID_LOG_SILENT: - return ' '; - case ANDROID_LOG_VERBOSE: - return 'V'; - case ANDROID_LOG_DEBUG: - return 'D'; - case ANDROID_LOG_INFO: - return 'I'; - case ANDROID_LOG_WARN: - return 'W'; - case ANDROID_LOG_ERROR: - return 'E'; - case ANDROID_LOG_FATAL: - return 'F'; - } -} - -int __android_log_write(int prio, const char *tag, const char *text) { - return fprintf(stderr, "[%c/%.16s] %s\n", logTagChar(prio), tag, text); -} - -int __android_log_print(int prio, const char *tag, const char *fmt, ...) { - va_list ap; - va_start(ap, fmt); - - int res = fprintf(stderr, "[%c/%.16s] ", logTagChar(prio), tag); - res += vfprintf(stderr, "%s\n", ap); - - va_end(ap); - return res; -} - -#endif diff --git a/lib/fb/src/main/cpp/lyra/cxa_throw.cpp b/lib/fb/src/main/cpp/lyra/cxa_throw.cpp new file mode 100644 index 00000000..bfdc241d --- /dev/null +++ b/lib/fb/src/main/cpp/lyra/cxa_throw.cpp @@ -0,0 +1,106 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#include +#include +#include +#include +#include + +#include + +namespace facebook { +namespace lyra { + +namespace { +std::atomic enableBacktraces{true}; +} + +void enableCxaThrowHookBacktraces(bool enable) { + enableBacktraces.store(enable, std::memory_order_relaxed); +} + +[[gnu::noreturn]] void (*original_cxa_throw)(void*, const std::type_info*, void (*) (void *)); + +#if defined(_LIBCPP_VERSION) +[[noreturn]] void cxa_throw(void* obj, const std::type_info* type, void (*destructor) (void *)) { + // lyra doesn't have support yet for libc++. + original_cxa_throw(obj, type, destructor); +} +#else + +using namespace detail; + +namespace { + +const auto traceHolderType = + static_cast(&typeid(ExceptionTraceHolder)); + +// lyra's __cxa_throw attaches stack trace information to thrown exceptions. It basically does: +// 1. capture stack trace +// 2. construct a new type_info struct that: +// a. holds the ExceptionTraceHolder +// b. supports upcasting to lyra::ExceptionTraceHolder* (by just returning the holder member) +// c. acts like the original exception type_info otherwise +// 3. call original __cxa_throw() with original exception pointer, the +// HijackedExceptionTypeInfo, and HijackedExceptionTypeInfo::destructor +// (which will both delete the constructed type info and call the original +// destructor). +struct HijackedExceptionTypeInfo : public abi::__class_type_info { + HijackedExceptionTypeInfo(void* obj, const std::type_info* base, void(*destructor)(void*)) + : abi::__class_type_info{base->name()}, base_{base}, orig_dest_{destructor} { + } + + bool __is_pointer_p() const override { + return base_->__is_pointer_p(); + } + + bool __is_function_p() const override { + return base_->__is_function_p(); + } + + bool __do_catch(const type_info *__thr_type, void **__thr_obj, unsigned __outer) const override { + return base_->__do_catch(__thr_type, __thr_obj, __outer); + } + + bool __do_upcast(const abi::__class_type_info *__target, void **__obj_ptr) const override { + if (__target == traceHolderType) { + *__obj_ptr = (void*)&stack_; + return true; + } + return base_->__do_upcast(__target, __obj_ptr); + } + + static void destructor(void* obj) { + auto exc_ptr = reinterpret_cast(&obj); + auto info = reinterpret_cast(exc_ptr->__cxa_exception_type()); + auto mutable_info = static_cast(const_cast(info)); + mutable_info->orig_dest_(obj); + delete mutable_info; + } + + private: + const std::type_info* base_; + void (*orig_dest_)(void*); + ExceptionTraceHolder stack_; +}; + +} // namespace + +[[noreturn]] void cxa_throw(void* obj, const std::type_info* type, void (*destructor) (void *)) { + if (enableBacktraces.load(std::memory_order_relaxed)) { + if (!type->__do_upcast(traceHolderType, &obj)) { + type = new HijackedExceptionTypeInfo(obj, type, destructor); + destructor = HijackedExceptionTypeInfo::destructor; + } + } + original_cxa_throw(obj, type, destructor); +} + +#endif // libc++ + +} // namespace lyra +} // namespace facebook diff --git a/lib/fb/src/main/cpp/lyra/lyra.cpp b/lib/fb/src/main/cpp/lyra/lyra.cpp index 4d125da7..599a360f 100644 --- a/lib/fb/src/main/cpp/lyra/lyra.cpp +++ b/lib/fb/src/main/cpp/lyra/lyra.cpp @@ -4,15 +4,20 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ -#include +#include +#include #include +#include +#include #include #include #include #include +#include + using namespace std; namespace facebook { @@ -67,6 +72,27 @@ void captureBacktrace(size_t skip, vector& stackTrace) { BacktraceState state = {skip, stackTrace}; _Unwind_Backtrace(unwindCallback, &state); } + +// this is a pointer to a function +std::atomic gLibraryIdentifierFunction{nullptr}; + +} + +void setLibraryIdentifierFunction(LibraryIdentifierFunctionType func) { + gLibraryIdentifierFunction.store(func, std::memory_order_relaxed); +} + +std::string StackTraceElement::buildId() const { + if (!hasBuildId_) { + auto getBuildId = gLibraryIdentifierFunction.load(std::memory_order_relaxed); + if (getBuildId) { + buildId_ = getBuildId(libraryName()); + } else { + buildId_ = ""; + } + hasBuildId_ = true; + } + return buildId_; } void getStackTrace(vector& stackTrace, size_t skip) { @@ -93,7 +119,6 @@ void getStackTraceSymbols(vector& symbols, ostream& operator<<(ostream& out, const StackTraceElement& elm) { IosFlagsSaver flags{out}; - // TODO(t10748683): Add build id to the output out << "{dso=" << elm.libraryName() << " offset=" << hex << showbase << elm.libraryOffset(); @@ -101,7 +126,7 @@ ostream& operator<<(ostream& out, const StackTraceElement& elm) { out << " func=" << elm.functionName() << "()+" << elm.functionOffset(); } - out << " build-id=" << hex << setw(8) << 0 + out << " build-id=" << hex << setw(8) << elm.buildId() << "}"; return out; @@ -120,5 +145,28 @@ ostream& operator<<(ostream& out, const vector& trace) { return out; } + +void logStackTrace(const vector& trace) { + auto i = 0; + FBJNI_LOGE("Backtrace:"); + for (auto& elm : trace) { + if (!elm.functionName().empty()) { + FBJNI_LOGE(" #%02d |lyra|{dso=%s offset=%#x func=%s+%#x build-id=%s}", + i++, + elm.libraryName().c_str(), + elm.libraryOffset(), + elm.functionName().c_str(), + elm.functionOffset(), + elm.buildId().c_str()); + } else { + FBJNI_LOGE(" #%02d |lyra|{dso=%s offset=%#x build-id=%s}", + i++, + elm.libraryName().c_str(), + elm.libraryOffset(), + elm.buildId().c_str()); + } + } +} + } } diff --git a/lib/fb/src/main/cpp/lyra/lyra_breakpad.cpp b/lib/fb/src/main/cpp/lyra/lyra_breakpad.cpp new file mode 100644 index 00000000..b54731a1 --- /dev/null +++ b/lib/fb/src/main/cpp/lyra/lyra_breakpad.cpp @@ -0,0 +1,22 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#include + +namespace facebook { +namespace lyra { + +/** + * This can be overridden by an implementation capable of looking up + * the breakpad id for logging purposes. +*/ +__attribute__((weak)) +std::string getBreakpadId(const std::string& library) { + return ""; +} + +} +} diff --git a/lib/fb/src/main/cpp/lyra/lyra_exceptions.cpp b/lib/fb/src/main/cpp/lyra/lyra_exceptions.cpp new file mode 100644 index 00000000..c07e6fdb --- /dev/null +++ b/lib/fb/src/main/cpp/lyra/lyra_exceptions.cpp @@ -0,0 +1,88 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#include + +#include +#include +#include +#include + +#include + +namespace facebook { +namespace lyra { + +using namespace detail; + +namespace { +std::terminate_handler gTerminateHandler; + +const ExceptionTraceHolder* getExceptionTraceHolder(std::exception_ptr ptr) { + try { + std::rethrow_exception(ptr); + } catch (const ExceptionTraceHolder& holder) { + return &holder; + } catch (...) { + return nullptr; + } +} + +void logExceptionAndAbort() { + if (auto ptr = std::current_exception()) { + FBJNI_LOGE("Uncaught exception: %s", toString(ptr).c_str()); + auto trace = getExceptionTraceHolder(ptr); + if (trace) { + logStackTrace(getStackTraceSymbols(trace->stackTrace_)); + } + } + if (gTerminateHandler) { + gTerminateHandler(); + } else { + FBJNI_LOGF("Uncaught exception and no gTerminateHandler set"); + } +} + +const std::vector emptyTrace; +} // namespace + +ExceptionTraceHolder::~ExceptionTraceHolder() {} + +detail::ExceptionTraceHolder::ExceptionTraceHolder() { + // TODO(cjhopman): This should be done more safely (i.e. use preallocated space, etc.). + stackTrace_.reserve(128); + getStackTrace(stackTrace_, 1); +} + + +void ensureRegisteredTerminateHandler() { + static auto initializer = (gTerminateHandler = std::set_terminate(logExceptionAndAbort)); + (void)initializer; +} + +const std::vector& getExceptionTrace(std::exception_ptr ptr) { + auto holder = getExceptionTraceHolder(ptr); + return holder ? holder->stackTrace_ : emptyTrace; +} + +std::string toString(std::exception_ptr ptr) { + if (!ptr) { + return "No exception"; + } + + try { + std::rethrow_exception(ptr); + } catch (std::exception& e) { + std::stringstream ss; + ss << typeid(e).name() << ": " << e.what(); + return ss.str(); + } catch (...) { + return "Unknown exception"; + } +} + +} +} diff --git a/lib/fb/src/main/cpp/onload.cpp b/lib/fb/src/main/cpp/onload.cpp deleted file mode 100644 index c451bcba..00000000 --- a/lib/fb/src/main/cpp/onload.cpp +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#include -#ifndef DISABLE_CPUCAP -#include -#endif -#include - -using namespace facebook::jni; - -void initialize_xplatinit(); -void initialize_fbjni(); - -JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) { - return facebook::jni::initialize(vm, [] { - initialize_fbjni(); -#ifndef DISABLE_XPLAT - initialize_xplatinit(); -#endif -#ifndef DISABLE_CPUCAP - initialize_cpucapabilities(); -#endif - }); -} diff --git a/lib/fb/src/main/java/com/facebook/jni/Countable.java b/lib/fb/src/main/java/com/facebook/jni/Countable.java deleted file mode 100644 index f8e343da..00000000 --- a/lib/fb/src/main/java/com/facebook/jni/Countable.java +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -package com.facebook.jni; - -import com.facebook.proguard.annotations.DoNotStrip; - -/** - * A Java Object that has native memory allocated corresponding to this instance. - * - * NB: THREAD SAFETY (this comment also exists at Countable.cpp) - * - * {@link #dispose} deletes the corresponding native object on whatever thread the method is called - * on. In the common case when this is called by Countable#finalize(), this will be called on the - * system finalizer thread. If you manually call dispose on the Java object, the native object - * will be deleted synchronously on that thread. - */ -@DoNotStrip -public class Countable { - - // Private C++ instance - @DoNotStrip - private long mInstance = 0; - - public native void dispose(); - - protected void finalize() throws Throwable { - dispose(); - super.finalize(); - } -} diff --git a/lib/fb/src/main/java/com/facebook/jni/CppException.java b/lib/fb/src/main/java/com/facebook/jni/CppException.java index 16766cc0..360d29ed 100644 --- a/lib/fb/src/main/java/com/facebook/jni/CppException.java +++ b/lib/fb/src/main/java/com/facebook/jni/CppException.java @@ -1,13 +1,12 @@ -/* +/** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - package com.facebook.jni; -import com.facebook.proguard.annotations.DoNotStrip; +import com.facebook.jni.annotations.DoNotStrip; @DoNotStrip public class CppException extends RuntimeException { diff --git a/lib/fb/src/main/java/com/facebook/jni/CppSystemErrorException.java b/lib/fb/src/main/java/com/facebook/jni/CppSystemErrorException.java index 865246e5..c95a7ec5 100644 --- a/lib/fb/src/main/java/com/facebook/jni/CppSystemErrorException.java +++ b/lib/fb/src/main/java/com/facebook/jni/CppSystemErrorException.java @@ -1,13 +1,12 @@ -/* +/** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - package com.facebook.jni; -import com.facebook.proguard.annotations.DoNotStrip; +import com.facebook.jni.annotations.DoNotStrip; @DoNotStrip public class CppSystemErrorException extends CppException { diff --git a/lib/fb/src/main/java/com/facebook/jni/DestructorThread.java b/lib/fb/src/main/java/com/facebook/jni/DestructorThread.java new file mode 100644 index 00000000..5cd86a90 --- /dev/null +++ b/lib/fb/src/main/java/com/facebook/jni/DestructorThread.java @@ -0,0 +1,138 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +package com.facebook.jni; + +import java.lang.ref.PhantomReference; +import java.lang.ref.ReferenceQueue; +import java.util.concurrent.atomic.AtomicReference; + +/** + * A thread which invokes the "destruct" routine for objects after they have been garbage collected. + * + *

An object which needs to be destructed should create a static subclass of {@link Destructor}. + * Once the referent object is garbage collected, the DestructorThread will callback to the {@link + * Destructor#destruct()} method. + * + *

The underlying thread in DestructorThread starts when the first Destructor is constructed and + * then runs indefinitely. + */ +public class DestructorThread { + + /** + * N.B The Destructor SHOULD NOT refer back to its referent object either explicitly or + * implicitly (for example, as a non-static inner class). This will create a reference cycle where + * the referent object will never be garbage collected. + */ + public abstract static class Destructor extends PhantomReference { + + private Destructor next; + private Destructor previous; + + public Destructor(Object referent) { + super(referent, sReferenceQueue); + sDestructorStack.push(this); + } + + private Destructor() { + super(null, sReferenceQueue); + } + + /** Callback which is invoked when the original object has been garbage collected. */ + protected abstract void destruct(); + } + + /** A list to keep all active Destructors in memory confined to the Destructor thread. */ + private static final DestructorList sDestructorList; + /** A thread safe stack where new Destructors are placed before being add to sDestructorList. */ + private static final DestructorStack sDestructorStack; + + private static final ReferenceQueue sReferenceQueue; + private static final Thread sThread; + + static { + sDestructorStack = new DestructorStack(); + sReferenceQueue = new ReferenceQueue(); + sDestructorList = new DestructorList(); + sThread = + new Thread("HybridData DestructorThread") { + @Override + public void run() { + while (true) { + try { + Destructor current = (Destructor) sReferenceQueue.remove(); + current.destruct(); + + // If current is in the sDestructorStack, + // transfer all the Destructors in the stack to the list. + if (current.previous == null) { + sDestructorStack.transferAllToList(); + } + + DestructorList.drop(current); + } catch (InterruptedException e) { + // Continue. This thread should never be terminated. + } + } + } + }; + + sThread.start(); + } + + private static class Terminus extends Destructor { + @Override + protected void destruct() { + throw new IllegalStateException("Cannot destroy Terminus Destructor."); + } + } + + /** This is a thread safe, lock-free Treiber-like Stack of Destructors. */ + private static class DestructorStack { + private final AtomicReference mHead = new AtomicReference<>(); + + public void push(Destructor newHead) { + Destructor oldHead; + do { + oldHead = mHead.get(); + newHead.next = oldHead; + } while (!mHead.compareAndSet(oldHead, newHead)); + } + + public void transferAllToList() { + Destructor current = mHead.getAndSet(null); + while (current != null) { + Destructor next = current.next; + sDestructorList.enqueue(current); + current = next; + } + } + } + + /** A doubly-linked list of Destructors. */ + private static class DestructorList { + private final Destructor mHead; + + public DestructorList() { + mHead = new Terminus(); + mHead.next = new Terminus(); + mHead.next.previous = mHead; + } + + public void enqueue(Destructor current) { + current.next = mHead.next; + mHead.next = current; + + current.next.previous = current; + current.previous = mHead; + } + + private static void drop(Destructor current) { + current.next.previous = current.previous; + current.previous.next = current.next; + } + } +} diff --git a/lib/fb/src/main/cpp/include/fb/visibility.h b/lib/fb/src/main/java/com/facebook/jni/HybridClassBase.java similarity index 56% rename from lib/fb/src/main/cpp/include/fb/visibility.h rename to lib/fb/src/main/java/com/facebook/jni/HybridClassBase.java index 310fbe11..6699ecbd 100644 --- a/lib/fb/src/main/cpp/include/fb/visibility.h +++ b/lib/fb/src/main/java/com/facebook/jni/HybridClassBase.java @@ -4,6 +4,9 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ -#pragma once +package com.facebook.jni; -#define FBEXPORT __attribute__((visibility("default"))) +import com.facebook.jni.annotations.DoNotStrip; + +@DoNotStrip +public abstract class HybridClassBase extends HybridData {} diff --git a/lib/fb/src/main/java/com/facebook/jni/HybridData.java b/lib/fb/src/main/java/com/facebook/jni/HybridData.java index 35803a56..f083604d 100644 --- a/lib/fb/src/main/java/com/facebook/jni/HybridData.java +++ b/lib/fb/src/main/java/com/facebook/jni/HybridData.java @@ -1,44 +1,77 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ package com.facebook.jni; -import com.facebook.proguard.annotations.DoNotStrip; +import com.facebook.jni.annotations.DoNotStrip; +import com.facebook.soloader.SoLoader; /** * This object holds a native C++ member for hybrid Java/C++ objects. * - * NB: THREAD SAFETY + *

NB: THREAD SAFETY * - * {@link #dispose} deletes the corresponding native object on whatever thread - * the method is called on. In the common case when this is called by - * HybridData#finalize(), this will be called on the system finalizer - * thread. If you manually call resetNative() on the Java object, the C++ - * object will be deleted synchronously on that thread. + *

{@link #resetNative} deletes the corresponding native object synchronously on whatever thread + * the method is called on. Otherwise, deletion will occur on the {@link DestructorThread} thread. */ @DoNotStrip public class HybridData { - // Private C++ instance - @DoNotStrip - private long mNativePointer = 0; + static { + SoLoader.loadLibrary("fbjni"); + } + + @DoNotStrip private Destructor mDestructor = new Destructor(this); /** - * To explicitly delete the instance, call resetNative(). If the C++ - * instance is referenced after this is called, a NullPointerException will - * be thrown. resetNative() may be called multiple times safely. Because - * {@link #finalize} calls resetNative, the instance will not leak if this is - * not called, but timing of deletion and the thread the C++ dtor is called - * on will be at the whim of the Java GC. If you want to control the thread - * and timing of the destructor, you should call resetNative() explicitly. + * To explicitly delete the instance, call resetNative(). If the C++ instance is referenced after + * this is called, a NullPointerException will be thrown. resetNative() may be called multiple + * times safely. Because the {@link DestructorThread} also calls resetNative, the instance will + * not leak if this is not called, but timing of deletion and the thread the C++ dtor is called on + * will be at the whim of the Java GC. If you want to control the thread and timing of the + * destructor, you should call resetNative() explicitly. */ - public native void resetNative(); - - protected void finalize() throws Throwable { - resetNative(); - super.finalize(); + public synchronized void resetNative() { + mDestructor.destruct(); } + /** + * N.B. Thread safety. If you call isValid from a different thread than {@link #resetNative()} + * then be sure to do so while synchronizing on the hybrid. For example: + * + *


+   * synchronized(hybrid) {
+   *   if (hybrid.isValid) {
+   *     // Do stuff.
+   *   }
+   * }
+   * 
+ */ public boolean isValid() { - return mNativePointer != 0; + return mDestructor.mNativePointer != 0; + } + + public static class Destructor extends DestructorThread.Destructor { + + // Private C++ instance + @DoNotStrip private long mNativePointer; + + Destructor(Object referent) { + super(referent); + } + + @Override + protected void destruct() { + // When invoked from the DestructorThread instead of resetNative, + // the DestructorThread has exclusive ownership of the HybridData + // so synchronization is not necessary. + deleteNative(mNativePointer); + mNativePointer = 0; + } + + static native void deleteNative(long pointer); } } diff --git a/lib/fb/src/main/java/com/facebook/jni/IteratorHelper.java b/lib/fb/src/main/java/com/facebook/jni/IteratorHelper.java index 88e2de63..a0854dad 100644 --- a/lib/fb/src/main/java/com/facebook/jni/IteratorHelper.java +++ b/lib/fb/src/main/java/com/facebook/jni/IteratorHelper.java @@ -1,31 +1,26 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - package com.facebook.jni; -import com.facebook.proguard.annotations.DoNotStrip; - +import com.facebook.jni.annotations.DoNotStrip; +import java.util.Iterator; import javax.annotation.Nullable; -import java.util.Iterator; - /** - * To iterate over an Iterator from C++ requires two calls per entry: hasNext() - * and next(). This helper reduces it to one call and one field get per entry. - * It does not use a generic argument, since in C++, the types will be erased, - * anyway. This is *not* a {@link java.util.Iterator}. + * To iterate over an Iterator from C++ requires two calls per entry: hasNext() and next(). This + * helper reduces it to one call and one field get per entry. It does not use a generic argument, + * since in C++, the types will be erased, anyway. This is *not* a {@link java.util.Iterator}. */ @DoNotStrip public class IteratorHelper { private final Iterator mIterator; // This is private, but accessed via JNI. - @DoNotStrip - private @Nullable Object mElement; + @DoNotStrip private @Nullable Object mElement; @DoNotStrip public IteratorHelper(Iterator iterator) { @@ -38,8 +33,8 @@ public class IteratorHelper { } /** - * Moves the helper to the next entry in the map, if any. Returns true iff - * there is an entry to read. + * Moves the helper to the next entry in the map, if any. Returns true iff there is an entry to + * read. */ @DoNotStrip boolean hasNext() { diff --git a/lib/fb/src/main/java/com/facebook/jni/MapIteratorHelper.java b/lib/fb/src/main/java/com/facebook/jni/MapIteratorHelper.java index e57cb9f1..2dd1c9bc 100644 --- a/lib/fb/src/main/java/com/facebook/jni/MapIteratorHelper.java +++ b/lib/fb/src/main/java/com/facebook/jni/MapIteratorHelper.java @@ -1,24 +1,21 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - package com.facebook.jni; -import javax.annotation.Nullable; - +import com.facebook.jni.annotations.DoNotStrip; import java.util.Iterator; import java.util.Map; - -import com.facebook.proguard.annotations.DoNotStrip; +import javax.annotation.Nullable; /** - * To iterate over a Map from C++ requires four calls per entry: hasNext(), - * next(), getKey(), getValue(). This helper reduces it to one call and two - * field gets per entry. It does not use a generic argument, since in C++, the - * types will be erased, anyway. This is *not* a {@link java.util.Iterator}. + * To iterate over a Map from C++ requires four calls per entry: hasNext(), next(), getKey(), + * getValue(). This helper reduces it to one call and two field gets per entry. It does not use a + * generic argument, since in C++, the types will be erased, anyway. This is *not* a {@link + * java.util.Iterator}. */ @DoNotStrip public class MapIteratorHelper { @@ -32,8 +29,8 @@ public class MapIteratorHelper { } /** - * Moves the helper to the next entry in the map, if any. Returns true iff - * there is an entry to read. + * Moves the helper to the next entry in the map, if any. Returns true iff there is an entry to + * read. */ @DoNotStrip boolean hasNext() { diff --git a/lib/fb/src/main/java/com/facebook/jni/NativeRunnable.java b/lib/fb/src/main/java/com/facebook/jni/NativeRunnable.java index 10a2517a..0e32bd55 100644 --- a/lib/fb/src/main/java/com/facebook/jni/NativeRunnable.java +++ b/lib/fb/src/main/java/com/facebook/jni/NativeRunnable.java @@ -1,18 +1,14 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - package com.facebook.jni; -import com.facebook.jni.HybridData; -import com.facebook.proguard.annotations.DoNotStrip; +import com.facebook.jni.annotations.DoNotStrip; -/** - * A Runnable that has a native run implementation. - */ +/** A Runnable that has a native run implementation. */ @DoNotStrip public class NativeRunnable implements Runnable { diff --git a/lib/fb/src/main/java/com/facebook/jni/ThreadScopeSupport.java b/lib/fb/src/main/java/com/facebook/jni/ThreadScopeSupport.java index bda99d62..52f74ff1 100644 --- a/lib/fb/src/main/java/com/facebook/jni/ThreadScopeSupport.java +++ b/lib/fb/src/main/java/com/facebook/jni/ThreadScopeSupport.java @@ -1,11 +1,20 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ package com.facebook.jni; -import com.facebook.proguard.annotations.DoNotStrip; +import com.facebook.jni.annotations.DoNotStrip; +import com.facebook.soloader.SoLoader; @DoNotStrip public class ThreadScopeSupport { + static { + SoLoader.loadLibrary("fbjni"); + } + // This is just used for ThreadScope::withClassLoader to have a java function // in the stack so that jni has access to the correct classloader. @DoNotStrip diff --git a/lib/fb/src/main/java/com/facebook/jni/UnknownCppException.java b/lib/fb/src/main/java/com/facebook/jni/UnknownCppException.java index de34f281..77dc3ef1 100644 --- a/lib/fb/src/main/java/com/facebook/jni/UnknownCppException.java +++ b/lib/fb/src/main/java/com/facebook/jni/UnknownCppException.java @@ -1,13 +1,12 @@ -/* +/** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - package com.facebook.jni; -import com.facebook.proguard.annotations.DoNotStrip; +import com.facebook.jni.annotations.DoNotStrip; @DoNotStrip public class UnknownCppException extends CppException { diff --git a/lib/fb/src/main/java/com/facebook/jni/annotations/DoNotStrip.java b/lib/fb/src/main/java/com/facebook/jni/annotations/DoNotStrip.java new file mode 100644 index 00000000..c7649556 --- /dev/null +++ b/lib/fb/src/main/java/com/facebook/jni/annotations/DoNotStrip.java @@ -0,0 +1,23 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +package com.facebook.jni.annotations; + +import static java.lang.annotation.RetentionPolicy.CLASS; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +/** + * Add this annotation to a class, method, or field to instruct Proguard to not strip it out. + * + * This is useful for methods called via reflection that could appear as unused to Proguard. + */ +@Target({ ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.CONSTRUCTOR }) +@Retention(CLASS) +public @interface DoNotStrip { +} diff --git a/testutil/jni.cpp b/testutil/jni.cpp index 06e467ee..8a6a3b40 100644 --- a/testutil/jni.cpp +++ b/testutil/jni.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ -#include +#include #include using namespace facebook; From 6d916ab063a866c065b41429f7495fb20892e600 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Wed, 17 Jul 2019 06:52:55 -0700 Subject: [PATCH 121/347] Do not depend on libfb Reviewed By: SidharthGuglani Differential Revision: D16220913 fbshipit-source-id: c6851d8dbda572aa50117b92353460f8a5b6df36 --- testutil/BUCK | 1 + 1 file changed, 1 insertion(+) diff --git a/testutil/BUCK b/testutil/BUCK index ba4c0e60..421ffb30 100644 --- a/testutil/BUCK +++ b/testutil/BUCK @@ -26,6 +26,7 @@ yoga_java_library( yoga_cxx_library( name = "jni", srcs = ["jni.cpp"], + allow_jni_merging = False, compiler_flags = LIBRARY_COMPILER_FLAGS, platforms = ANDROID, soname = "libyoga_testutil_jni.$(ext)", From 7c891db9af275fe15c6b57baa73caebcfef6b0ab Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 17 Jul 2019 08:08:01 -0700 Subject: [PATCH 122/347] move YGMarkerMeasure and YGMarkerBaselineFn to event based system Summary: Using yoga event listener for adding systrace sections for measure and baseline events Reviewed By: davidaurelio Differential Revision: D16048795 fbshipit-source-id: 3c2161328250184929ed1a3357b8c42ec8ca2e29 --- tests/InstrumentationTest.cpp | 40 ----------------------------------- yoga/YGMarker.h | 13 ++---------- yoga/Yoga.cpp | 8 ++----- 3 files changed, 4 insertions(+), 57 deletions(-) diff --git a/tests/InstrumentationTest.cpp b/tests/InstrumentationTest.cpp index a6bbcc40..62902e31 100644 --- a/tests/InstrumentationTest.cpp +++ b/tests/InstrumentationTest.cpp @@ -67,35 +67,6 @@ struct MarkerTest : public ::testing::Test { uniquePtr config; }; -TEST_F(MarkerTest, measure_functions_get_wrapped) { - auto root = makeNode(); - YGNodeSetMeasureFunc( - root.get(), [](YGNodeRef, float, YGMeasureMode, float, YGMeasureMode) { - return YGSize{}; - }); - - calculateLayout(root); - auto& markerCookie = findLastMarker(YGMarkerMeasure); - - ASSERT_EQ(markerCookie.start.marker, YGMarkerMeasure) - << "have " << markerCookies.size() << " recorded markers"; -} - -TEST_F(MarkerTest, baseline_functions_get_wrapped) { - auto root = makeNode(); - auto child = addChild(root); - YGNodeSetBaselineFunc( - child.get(), [](YGNodeRef, float, float) { return 0.0f; }); - YGNodeStyleSetFlexDirection(root.get(), YGFlexDirectionRow); - YGNodeStyleSetAlignItems(root.get(), YGAlignBaseline); - - calculateLayout(root); - auto& markerCookie = findLastMarker(YGMarkerBaselineFn); - - ASSERT_EQ(markerCookie.start.marker, YGMarkerBaselineFn) - << "have " << markerCookies.size() << " recorded markers"; -} - void* MarkerTest::startMarker( YGMarker marker, YGNodeRef node, @@ -113,11 +84,6 @@ void MarkerTest::endMarker( void* id) { auto cookie = static_cast(id); cookie->end = {{marker, node, data}, id, {}}; - switch (marker) { - case YGMarkerMeasure: - case YGMarkerBaselineFn: - break; - }; } uniquePtr MarkerTest::makeNode() { @@ -141,12 +107,6 @@ void MarkerTest::calculateLayout( namespace { const char* markerTypeName(YGMarker type) { - switch (type) { - case YGMarkerMeasure: - return "YGMarkerMeasure"; - case YGMarkerBaselineFn: - return "YGMarkerBaselineFn"; - } return ""; } diff --git a/yoga/YGMarker.h b/yoga/YGMarker.h index 785f5629..025e246a 100644 --- a/yoga/YGMarker.h +++ b/yoga/YGMarker.h @@ -13,10 +13,8 @@ YG_EXTERN_C_BEGIN typedef struct YGNode* YGNodeRef; typedef struct YGConfig* YGConfigRef; -typedef YG_ENUM_BEGIN(YGMarker){ - YGMarkerMeasure, - YGMarkerBaselineFn, -} YG_ENUM_END(YGMarker); +typedef YG_ENUM_BEGIN(YGMarker) {} +YG_ENUM_END(YGMarker); typedef struct { int layouts; @@ -62,13 +60,6 @@ struct NoMarkerData { using type = YGMarkerNoData; static type*& get(YGMarkerData& d) { return d.noData; } }; - -template <> -struct MarkerData : NoMarkerData {}; - -template <> -struct MarkerData : NoMarkerData {}; - } // namespace detail template diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index d8175295..e3cc78bc 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -1000,9 +1000,7 @@ static float YGBaseline(const YGNodeRef node, void* layoutContext) { Event::publish(node); - const float baseline = marker::MarkerSection::wrap( - node, - &YGNode::baseline, + const float baseline = node->baseline( node->getLayout().measuredDimensions[YGDimensionWidth], node->getLayout().measuredDimensions[YGDimensionHeight], layoutContext); @@ -1638,9 +1636,7 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( Event::publish(node); // Measure the text under the current constraints. - const YGSize measuredSize = marker::MarkerSection::wrap( - node, - &YGNode::measure, + const YGSize measuredSize = node->measure( innerWidth, widthMeasureMode, innerHeight, From 5e40e4b682decf9d8632cc323677b09ca878032c Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 17 Jul 2019 08:08:01 -0700 Subject: [PATCH 123/347] remove YGMarker code Summary: Removes code for now unused marker based approach Reviewed By: davidaurelio Differential Revision: D16048800 fbshipit-source-id: 228e0e906252782ee0bed543728b666d1f9cc854 --- tests/EventsTest.cpp | 13 ++- tests/InstrumentationTest.cpp | 164 ---------------------------------- yoga/YGConfig.h | 2 - yoga/YGMarker.cpp | 14 --- yoga/YGMarker.h | 74 --------------- yoga/Yoga.cpp | 23 +++-- yoga/event/event.h | 12 ++- yoga/instrumentation.h | 65 -------------- 8 files changed, 27 insertions(+), 340 deletions(-) delete mode 100644 tests/InstrumentationTest.cpp delete mode 100644 yoga/YGMarker.cpp delete mode 100644 yoga/YGMarker.h delete mode 100644 yoga/instrumentation.h diff --git a/tests/EventsTest.cpp b/tests/EventsTest.cpp index bb86fe71..18128cc0 100644 --- a/tests/EventsTest.cpp +++ b/tests/EventsTest.cpp @@ -15,7 +15,6 @@ #include #include #include -#include namespace facebook { namespace yoga { @@ -27,7 +26,7 @@ struct TypedEventTestData {}; template <> struct TypedEventTestData { void* layoutContext; - YGMarkerLayoutData layoutData; + LayoutData layoutData; }; struct EventArgs { @@ -147,7 +146,7 @@ TEST_F(EventTest, layout_events_single_node) { ASSERT_EQ(events[3].node, root); ASSERT_EQ(events[3].type, Event::LayoutPassEnd); - YGMarkerLayoutData layoutData = + LayoutData layoutData = events[3].eventTestData().layoutData; ASSERT_EQ(layoutData.layouts, 1); @@ -170,7 +169,7 @@ TEST_F(EventTest, layout_events_counts_multi_node_layout) { ASSERT_EQ(events[11].node, root); ASSERT_EQ(events[11].type, Event::LayoutPassEnd); - YGMarkerLayoutData layoutData = + LayoutData layoutData = events[11].eventTestData().layoutData; ASSERT_EQ(layoutData.layouts, 3); @@ -191,7 +190,7 @@ TEST_F(EventTest, layout_events_counts_cache_hits_single_node_layout) { ASSERT_EQ(events[6].node, root); ASSERT_EQ(events[6].type, Event::LayoutPassEnd); - YGMarkerLayoutData layoutData = + LayoutData layoutData = events[6].eventTestData().layoutData; ASSERT_EQ(layoutData.layouts, 0); @@ -215,7 +214,7 @@ TEST_F(EventTest, layout_events_counts_cache_hits_multi_node_layout) { ASSERT_EQ(lastEvent().node, root); ASSERT_EQ(lastEvent().type, Event::LayoutPassEnd); - YGMarkerLayoutData layoutData = + LayoutData layoutData = lastEvent().eventTestData().layoutData; ASSERT_EQ(layoutData.layouts, 3); @@ -240,7 +239,7 @@ TEST_F(EventTest, layout_events_has_max_measure_cache) { ASSERT_EQ(lastEvent().node, root); ASSERT_EQ(lastEvent().type, Event::LayoutPassEnd); - YGMarkerLayoutData layoutData = + LayoutData layoutData = lastEvent().eventTestData().layoutData; ASSERT_EQ(layoutData.layouts, 3); diff --git a/tests/InstrumentationTest.cpp b/tests/InstrumentationTest.cpp deleted file mode 100644 index 62902e31..00000000 --- a/tests/InstrumentationTest.cpp +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -bool operator==(const YGMarkerLayoutData&, const YGMarkerLayoutData&); -void PrintTo(const YGMarkerLayoutData, std::ostream*); - -namespace facebook { -namespace yoga { -namespace marker { -namespace test { - -template -using uniquePtr = std::unique_ptr>; - -struct MarkerTest : public ::testing::Test { - struct Data { - YGMarker marker; - YGNodeRef node; - YGMarkerData markerData; - }; - - struct EndData { - Data data; - void* cookie; - union { - YGMarkerLayoutData layout; - } markerData; - }; - - struct MarkerCookie { - Data start; - EndData end; - }; - - // std::deque will keep pointers stable on reallocation, whereas std::vector - // does not - static std::deque markerCookies; - - static void* startMarker(YGMarker, YGNodeRef, YGMarkerData); - static void endMarker(YGMarker, YGNodeRef, YGMarkerData, void*); - uniquePtr makeNode(); - uniquePtr addChild(uniquePtr& owner); - static void calculateLayout( - uniquePtr& node, - float width = YGUndefined, - float height = YGUndefined); - static MarkerCookie& findMarker(YGMarker); - static MarkerCookie& findLastMarker(YGMarker); - - void SetUp() override; - void TearDown() override; - uniquePtr config; -}; - -void* MarkerTest::startMarker( - YGMarker marker, - YGNodeRef node, - YGMarkerData data) { - markerCookies.emplace_back(); - MarkerCookie* cookie = &markerCookies.back(); - cookie->start = {marker, node, data}; - return cookie; -} - -void MarkerTest::endMarker( - YGMarker marker, - YGNodeRef node, - YGMarkerData data, - void* id) { - auto cookie = static_cast(id); - cookie->end = {{marker, node, data}, id, {}}; -} - -uniquePtr MarkerTest::makeNode() { - auto n = uniquePtr{YGNodeNewWithConfig(config.get()), &YGNodeFree}; - return n; -} - -uniquePtr MarkerTest::addChild(uniquePtr& owner) { - auto n = makeNode(); - YGNodeInsertChild(owner.get(), n.get(), YGNodeGetChildCount(owner.get())); - return n; -} - -void MarkerTest::calculateLayout( - uniquePtr& node, - float width, - float height) { - YGNodeCalculateLayout(node.get(), width, height, YGDirectionLTR); -} - -namespace { - -const char* markerTypeName(YGMarker type) { - return ""; -} - -template -MarkerTest::MarkerCookie& find(It begin, It end, YGMarker type) { - auto result = std::find_if(begin, end, [type](MarkerTest::MarkerCookie& c) { - return c.start.marker == type; - }); - if (result == end) { - throw std::runtime_error{std::string{"No marker recorded for type: "} + - markerTypeName(type)}; - } - return *result; -} - -} // namespace - -MarkerTest::MarkerCookie& MarkerTest::findMarker(YGMarker markerType) { - return find(markerCookies.begin(), markerCookies.end(), markerType); -} - -MarkerTest::MarkerCookie& MarkerTest::findLastMarker(YGMarker markerType) { - return find(markerCookies.rbegin(), markerCookies.rend(), markerType); -} - -void MarkerTest::SetUp() { - config = uniquePtr{YGConfigNew(), &YGConfigFree}; - YGConfigSetMarkerCallbacks(config.get(), {startMarker, endMarker}); -} - -void MarkerTest::TearDown() { - markerCookies.resize(0); -} - -decltype(MarkerTest::markerCookies) MarkerTest::markerCookies = {}; - -} // namespace test -} // namespace marker -} // namespace yoga -} // namespace facebook - -bool operator==(const YGMarkerLayoutData& lhs, const YGMarkerLayoutData& rhs) { - return lhs.layouts == rhs.layouts && lhs.measures == rhs.measures && - lhs.maxMeasureCache == rhs.maxMeasureCache && - lhs.cachedLayouts == rhs.cachedLayouts && - lhs.cachedMeasures == rhs.cachedMeasures; -} - -void PrintTo(const YGMarkerLayoutData data, std::ostream* os) { - *os << "YGMarkerLayoutData{ layouts = " << data.layouts - << ", measures = " << data.measures - << ", maxMeasureCache = " << data.maxMeasureCache - << ", cachedLayouts = " << data.cachedLayouts - << ", cachedMeasures = " << data.cachedMeasures << " }"; -} diff --git a/yoga/YGConfig.h b/yoga/YGConfig.h index aaf6d137..b1bce612 100644 --- a/yoga/YGConfig.h +++ b/yoga/YGConfig.h @@ -5,7 +5,6 @@ * file in the root directory of this source tree. */ #pragma once -#include "YGMarker.h" #include "Yoga-internal.h" #include "Yoga.h" @@ -44,7 +43,6 @@ public: std::array()> experimentalFeatures = {}; void* context = nullptr; - YGMarkerCallbacks markerCallbacks = {nullptr, nullptr}; YGConfig(YGLogger logger); void log(YGConfig*, YGNode*, YGLogLevel, void*, const char*, va_list); diff --git a/yoga/YGMarker.cpp b/yoga/YGMarker.cpp deleted file mode 100644 index e0758e23..00000000 --- a/yoga/YGMarker.cpp +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#include "YGMarker.h" -#include "YGConfig.h" - -void YGConfigSetMarkerCallbacks( - YGConfigRef config, - YGMarkerCallbacks markerCallbacks) { - config->markerCallbacks = markerCallbacks; -} diff --git a/yoga/YGMarker.h b/yoga/YGMarker.h deleted file mode 100644 index 025e246a..00000000 --- a/yoga/YGMarker.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#pragma once - -#include "YGMacros.h" - -YG_EXTERN_C_BEGIN - -typedef struct YGNode* YGNodeRef; -typedef struct YGConfig* YGConfigRef; - -typedef YG_ENUM_BEGIN(YGMarker) {} -YG_ENUM_END(YGMarker); - -typedef struct { - int layouts; - int measures; - int maxMeasureCache; - int cachedLayouts; - int cachedMeasures; - int measureCallbacks; -} YGMarkerLayoutData; - -typedef struct { - bool _unused; -} YGMarkerNoData; - -typedef union { - YGMarkerNoData* noData; -} YGMarkerData; - -typedef struct { - // accepts marker type, a node ref, and marker data (depends on marker type) - // can return a handle or id that Yoga will pass to endMarker - void* (*startMarker)(YGMarker, YGNodeRef, YGMarkerData); - // accepts marker type, a node ref, marker data, and marker id as returned by - // startMarker - void (*endMarker)(YGMarker, YGNodeRef, YGMarkerData, void* id); -} YGMarkerCallbacks; - -void YGConfigSetMarkerCallbacks(YGConfigRef, YGMarkerCallbacks); - -YG_EXTERN_C_END - -#ifdef __cplusplus - -namespace facebook { -namespace yoga { -namespace marker { -namespace detail { - -template -struct MarkerData; - -struct NoMarkerData { - using type = YGMarkerNoData; - static type*& get(YGMarkerData& d) { return d.noData; } -}; -} // namespace detail - -template -typename detail::MarkerData::type* data(YGMarkerData d) { - return detail::MarkerData::get(d); -} - -} // namespace marker -} // namespace yoga -} // namespace facebook - -#endif // __cplusplus diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index e3cc78bc..caffe000 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -15,7 +15,6 @@ #include "YGNodePrint.h" #include "Yoga-internal.h" #include "event/event.h" -#include "instrumentation.h" #ifdef _MSC_VER #include @@ -941,7 +940,7 @@ bool YGLayoutNodeInternal( const bool performLayout, const char* reason, const YGConfigRef config, - YGMarkerLayoutData& layoutMarkerData, + LayoutData& layoutMarkerData, void* const layoutContext, const uint32_t depth, const uint32_t generationCount); @@ -1191,7 +1190,7 @@ static void YGNodeComputeFlexBasisForChild( const YGMeasureMode heightMode, const YGDirection direction, const YGConfigRef config, - YGMarkerLayoutData& layoutMarkerData, + LayoutData& layoutMarkerData, void* const layoutContext, const uint32_t depth, const uint32_t generationCount) { @@ -1387,7 +1386,7 @@ static void YGNodeAbsoluteLayoutChild( const float height, const YGDirection direction, const YGConfigRef config, - YGMarkerLayoutData& layoutMarkerData, + LayoutData& layoutMarkerData, void* const layoutContext, const uint32_t depth, const uint32_t generationCount) { @@ -1588,7 +1587,7 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( const YGMeasureMode heightMeasureMode, const float ownerWidth, const float ownerHeight, - YGMarkerLayoutData& layoutMarkerData, + LayoutData& layoutMarkerData, void* const layoutContext) { YGAssertWithNode( node, @@ -1836,7 +1835,7 @@ static float YGNodeComputeFlexBasisForChildren( YGFlexDirection mainAxis, const YGConfigRef config, bool performLayout, - YGMarkerLayoutData& layoutMarkerData, + LayoutData& layoutMarkerData, void* const layoutContext, const uint32_t depth, const uint32_t generationCount) { @@ -2020,7 +2019,7 @@ static float YGDistributeFreeSpaceSecondPass( const YGMeasureMode measureModeCrossDim, const bool performLayout, const YGConfigRef config, - YGMarkerLayoutData& layoutMarkerData, + LayoutData& layoutMarkerData, void* const layoutContext, const uint32_t depth, const uint32_t generationCount) { @@ -2321,7 +2320,7 @@ static void YGResolveFlexibleLength( const YGMeasureMode measureModeCrossDim, const bool performLayout, const YGConfigRef config, - YGMarkerLayoutData& layoutMarkerData, + LayoutData& layoutMarkerData, void* const layoutContext, const uint32_t depth, const uint32_t generationCount) { @@ -2651,7 +2650,7 @@ static void YGNodelayoutImpl( const float ownerHeight, const bool performLayout, const YGConfigRef config, - YGMarkerLayoutData& layoutMarkerData, + LayoutData& layoutMarkerData, void* const layoutContext, const uint32_t depth, const uint32_t generationCount) { @@ -3707,7 +3706,7 @@ bool YGLayoutNodeInternal( const bool performLayout, const char* reason, const YGConfigRef config, - YGMarkerLayoutData& layoutMarkerData, + LayoutData& layoutMarkerData, void* const layoutContext, uint32_t depth, const uint32_t generationCount) { @@ -4065,7 +4064,7 @@ void YGNodeCalculateLayoutWithContext( void* layoutContext) { Event::publish(node, {layoutContext}); - YGMarkerLayoutData markerData = {}; + LayoutData markerData = {}; // Increment the generation count. This will force the recursive routine to // visit all dirty nodes at least once. Subsequent visits will be skipped if @@ -4161,7 +4160,7 @@ void YGNodeCalculateLayoutWithContext( gCurrentGenerationCount++; // Rerun the layout, and calculate the diff unsetUseLegacyFlagRecursively(nodeWithoutLegacyFlag); - YGMarkerLayoutData layoutMarkerData = {}; + LayoutData layoutMarkerData = {}; if (YGLayoutNodeInternal( nodeWithoutLegacyFlag, width, diff --git a/yoga/event/event.h b/yoga/event/event.h index 2043cc8c..dc49cefc 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -9,7 +9,6 @@ #include #include #include -#include struct YGConfig; struct YGNode; @@ -24,6 +23,15 @@ enum LayoutType : int { kCachedMeasure = 3 }; +struct LayoutData { + int layouts; + int measures; + int maxMeasureCache; + int cachedLayouts; + int cachedMeasures; + int measureCallbacks; +}; + struct Event { enum Type { NodeAllocation, @@ -94,7 +102,7 @@ struct Event::TypedData { template <> struct Event::TypedData { void* layoutContext; - YGMarkerLayoutData* layoutData; + LayoutData* layoutData; }; template <> diff --git a/yoga/instrumentation.h b/yoga/instrumentation.h deleted file mode 100644 index 369703a1..00000000 --- a/yoga/instrumentation.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#include "YGConfig.h" -#include "YGMarker.h" -#include "YGNode.h" - -namespace facebook { -namespace yoga { -namespace marker { - -template -class MarkerSection { -private: - using Data = detail::MarkerData; - -public: - MarkerSection(YGNodeRef node) : MarkerSection{node, node->getConfig()} {} - void end() { - if (endMarker_) { - endMarker_(MarkerType, node_, markerData(&data), userData_); - endMarker_ = nullptr; - } - } - ~MarkerSection() { end(); } - - typename Data::type data = {}; - - template - static Ret wrap( - YGNodeRef node, - Ret (YGNode::*method)(Args...), - Args... args) { - MarkerSection section{node}; - return (node->*method)(std::forward(args)...); - } - -private: - decltype(YGMarkerCallbacks{}.endMarker) endMarker_; - YGNodeRef node_; - void* userData_; - - MarkerSection(YGNodeRef node, YGConfigRef config) - : MarkerSection{node, config ? &config->markerCallbacks : nullptr} {} - MarkerSection(YGNodeRef node, YGMarkerCallbacks* callbacks) - : endMarker_{callbacks ? callbacks->endMarker : nullptr}, - node_{node}, - userData_{ - callbacks && callbacks->startMarker - ? callbacks->startMarker(MarkerType, node, markerData(&data)) - : nullptr} {} - - static YGMarkerData markerData(typename Data::type* d) { - YGMarkerData markerData = {}; - Data::get(markerData) = d; - return markerData; - } -}; - -} // namespace marker -} // namespace yoga -} // namespace facebook From e6dfe043889c03e3a9407e1686e1024c6dfb9142 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Thu, 18 Jul 2019 05:17:52 -0700 Subject: [PATCH 124/347] Pass reason for measure pass along with measurecallbackend event (#566) Summary: Pull Request resolved: https://github.com/facebook/litho/pull/566 Pull Request resolved: https://github.com/facebook/react-native/pull/25702 Pass reason for each measure callback to the flipper plugin Reviewed By: davidaurelio Differential Revision: D16221771 fbshipit-source-id: 2e72e1ebb3c7e633d189e7a7a81d655ac9531e51 --- CMakeLists.txt | 2 +- java/com/facebook/yoga/LayoutPassReason.java | 40 +++++++++++++++++++ yoga/Yoga.cpp | 41 +++++++++++--------- yoga/event/event.cpp | 21 ++++++++++ yoga/event/event.h | 13 +++++++ 5 files changed, 98 insertions(+), 19 deletions(-) create mode 100644 java/com/facebook/yoga/LayoutPassReason.java diff --git a/CMakeLists.txt b/CMakeLists.txt index ed4eff5c..3ba4477e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,7 @@ cmake_minimum_required(VERSION 3.4.1) set(CMAKE_VERBOSE_MAKEFILE on) -file(GLOB yogacore_SRC yoga/*.cpp) +file(GLOB_RECURSE yogacore_SRC yoga/*.cpp) add_library(yogacore STATIC ${yogacore_SRC}) target_link_libraries(yogacore android log) diff --git a/java/com/facebook/yoga/LayoutPassReason.java b/java/com/facebook/yoga/LayoutPassReason.java new file mode 100644 index 00000000..dc72ad4f --- /dev/null +++ b/java/com/facebook/yoga/LayoutPassReason.java @@ -0,0 +1,40 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +package com.facebook.yoga; + +public enum LayoutPassReason { + INITIAL(0), + MEASURE(1), + ABS_MEASURE(2), + FLEX(3), + ABS_LAYOUT(4), + STRETCH(5), + MULTILINE_STRETCH(6); + + private final int mIntValue; + + LayoutPassReason(int intValue) { + mIntValue = intValue; + } + + public int intValue() { + return mIntValue; + } + + public static LayoutPassReason fromInt(int value) { + switch (value) { + case 0: return INITIAL; + case 1: return MEASURE; + case 2: return ABS_MEASURE; + case 3: return FLEX; + case 4: return ABS_LAYOUT; + case 5: return STRETCH; + case 6: return MULTILINE_STRETCH; + default: throw new IllegalArgumentException("Unknown enum value: " + value); + } + } +} diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index caffe000..dae5bb41 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -938,7 +938,7 @@ bool YGLayoutNodeInternal( const float ownerWidth, const float ownerHeight, const bool performLayout, - const char* reason, + const LayoutPassReason reason, const YGConfigRef config, LayoutData& layoutMarkerData, void* const layoutContext, @@ -1364,7 +1364,7 @@ static void YGNodeComputeFlexBasisForChild( ownerWidth, ownerHeight, false, - "measure", + kMeasureChild, config, layoutMarkerData, layoutContext, @@ -1492,7 +1492,7 @@ static void YGNodeAbsoluteLayoutChild( childWidth, childHeight, false, - "abs-measure", + kAbsMeasureChild, config, layoutMarkerData, layoutContext, @@ -1514,7 +1514,7 @@ static void YGNodeAbsoluteLayoutChild( childWidth, childHeight, true, - "abs-layout", + kAbsLayout, config, layoutMarkerData, layoutContext, @@ -1588,7 +1588,8 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( const float ownerWidth, const float ownerHeight, LayoutData& layoutMarkerData, - void* const layoutContext) { + void* const layoutContext, + const LayoutPassReason reason) { YGAssertWithNode( node, node->hasMeasureFunc(), @@ -1652,7 +1653,8 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( innerHeight, heightMeasureMode, measuredSize.width, - measuredSize.height}); + measuredSize.height, + reason}); node->setLayoutMeasuredDimension( YGNodeBoundAxis( @@ -2185,7 +2187,7 @@ static float YGDistributeFreeSpaceSecondPass( availableInnerWidth, availableInnerHeight, performLayout && !requiresStretchLayout, - "flex", + kFlex, config, layoutMarkerData, layoutContext, @@ -2653,7 +2655,8 @@ static void YGNodelayoutImpl( LayoutData& layoutMarkerData, void* const layoutContext, const uint32_t depth, - const uint32_t generationCount) { + const uint32_t generationCount, + const LayoutPassReason reason) { YGAssertWithNode( node, YGFloatIsUndefined(availableWidth) @@ -2722,7 +2725,8 @@ static void YGNodelayoutImpl( ownerWidth, ownerHeight, layoutMarkerData, - layoutContext); + layoutContext, + reason); return; } @@ -3117,7 +3121,7 @@ static void YGNodelayoutImpl( availableInnerWidth, availableInnerHeight, true, - "stretch", + kStretch, config, layoutMarkerData, layoutContext, @@ -3327,7 +3331,7 @@ static void YGNodelayoutImpl( availableInnerWidth, availableInnerHeight, true, - "multiline-stretch", + kMultilineStretch, config, layoutMarkerData, layoutContext, @@ -3704,7 +3708,7 @@ bool YGLayoutNodeInternal( const float ownerWidth, const float ownerHeight, const bool performLayout, - const char* reason, + const LayoutPassReason reason, const YGConfigRef config, LayoutData& layoutMarkerData, void* const layoutContext, @@ -3831,7 +3835,7 @@ bool YGLayoutNodeInternal( availableHeight, cachedResults->computedWidth, cachedResults->computedHeight, - reason); + LayoutPassReason(reason)); } } else { if (gPrintChanges) { @@ -3853,7 +3857,7 @@ bool YGLayoutNodeInternal( YGMeasureModeName(heightMeasureMode, performLayout), availableWidth, availableHeight, - reason); + LayoutPassToString(reason)); } YGNodelayoutImpl( @@ -3870,7 +3874,8 @@ bool YGLayoutNodeInternal( layoutMarkerData, layoutContext, depth, - generationCount); + generationCount, + reason); if (gPrintChanges) { Log::log( @@ -3891,7 +3896,7 @@ bool YGLayoutNodeInternal( YGMeasureModeName(heightMeasureMode, performLayout), layout->measuredDimensions[YGDimensionWidth], layout->measuredDimensions[YGDimensionHeight], - reason); + LayoutPassToString(reason)); } layout->lastOwnerDirection = ownerDirection; @@ -4121,7 +4126,7 @@ void YGNodeCalculateLayoutWithContext( ownerWidth, ownerHeight, true, - "initial", + kInitial, node->getConfig(), markerData, layoutContext, @@ -4171,7 +4176,7 @@ void YGNodeCalculateLayoutWithContext( ownerWidth, ownerHeight, true, - "initial", + kInitial, nodeWithoutLegacyFlag->getConfig(), layoutMarkerData, layoutContext, diff --git a/yoga/event/event.cpp b/yoga/event/event.cpp index 9fc00120..86031476 100644 --- a/yoga/event/event.cpp +++ b/yoga/event/event.cpp @@ -12,6 +12,27 @@ namespace facebook { namespace yoga { +const char* LayoutPassToString(const LayoutPassReason value) { + switch (value) { + case kInitial: + return "initial"; + case kMeasureChild: + return "measure"; + case kAbsMeasureChild: + return "abs_measure"; + case kFlex: + return "flex"; + case kAbsLayout: + return "abs_layout"; + case kStretch: + return "stretch"; + case kMultilineStretch: + return "multiline_stretch"; + default: + return "unknown"; + } +} + namespace { struct Node { diff --git a/yoga/event/event.h b/yoga/event/event.h index dc49cefc..8e6bc972 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -32,6 +32,18 @@ struct LayoutData { int measureCallbacks; }; +enum LayoutPassReason : int { + kInitial = 0, + kMeasureChild = 1, + kAbsMeasureChild = 2, + kFlex = 3, + kAbsLayout = 4, + kStretch = 5, + kMultilineStretch = 6 +}; + +const char* LayoutPassToString(const LayoutPassReason value); + struct Event { enum Type { NodeAllocation, @@ -114,6 +126,7 @@ struct Event::TypedData { YGMeasureMode heightMeasureMode; float measuredWidth; float measuredHeight; + const LayoutPassReason reason; }; template <> From 2fb857d73d6226bfbfd456ca9979488dae40aecc Mon Sep 17 00:00:00 2001 From: Uladzislau Paulovich Date: Thu, 18 Jul 2019 06:17:08 -0700 Subject: [PATCH 125/347] yoga | Fix error about implicit conversion to bit-field Summary: `YGStyle` puts Yoga enums (which are signed integers by default) into bitfields: https://fburl.com/7fowlunu Mixing signed values and bit-fields can be error-prone and it also fails to build on Windows with `clang-cl` due to `-Wbitfield-constant-conversion` warning being treated as error: ``` stderr: In file included from xplat\yoga\yoga\YGLayout.cpp:8: In file included from xplat\yoga\yoga/Utils.h:8: In file included from xplat\yoga\yoga/YGNode.h:13: xplat\yoga\yoga/YGStyle.h(110,9): error: implicit truncation from 'YGAlign' to bit-field changes value from 4 to -4 [-Werror,-Wbitfield-constant-conversion] alignItems_(YGAlignStretch), ``` This diff fixes the problem by making all enums unsigned integers. This change can be problematic only if values of the enums are serialized somewhere. CC: David Aurelio Reviewed By: davidaurelio Differential Revision: D16336729 fbshipit-source-id: ee4dabd7bd1ee429e644bd322b375ec2694cc742 --- yoga/YGStyle.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/yoga/YGStyle.h b/yoga/YGStyle.h index edefcb7c..ce381604 100644 --- a/yoga/YGStyle.h +++ b/yoga/YGStyle.h @@ -102,6 +102,11 @@ public: } }; +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wbitfield-constant-conversion" +#endif + YGStyle() : direction_(YGDirectionInherit), flexDirection_(YGFlexDirectionColumn), @@ -113,6 +118,11 @@ public: flexWrap_(YGWrapNoWrap), overflow_(YGOverflowVisible), display_(YGDisplayFlex) {} + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + ~YGStyle() = default; static constexpr int directionBit = 0; From c99fc9c4da9f39aea8c1273d27355a561b363682 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Thu, 18 Jul 2019 07:01:26 -0700 Subject: [PATCH 126/347] using enum struct for LayoutPassReason and LayoutType Summary: Using enum struct for using enums in form ENUM_NAME::ENUM_VALUE for better code readablility Reviewed By: davidaurelio Differential Revision: D16356562 fbshipit-source-id: cbe7adadad78eb5d0756c44679c0e102b7d31ec6 --- yoga/Yoga.cpp | 22 +++++++++++----------- yoga/event/event.cpp | 16 ++++++++-------- yoga/event/event.h | 6 +++--- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index dae5bb41..c3580bb0 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -1364,7 +1364,7 @@ static void YGNodeComputeFlexBasisForChild( ownerWidth, ownerHeight, false, - kMeasureChild, + LayoutPassReason::kMeasureChild, config, layoutMarkerData, layoutContext, @@ -1492,7 +1492,7 @@ static void YGNodeAbsoluteLayoutChild( childWidth, childHeight, false, - kAbsMeasureChild, + LayoutPassReason::kAbsMeasureChild, config, layoutMarkerData, layoutContext, @@ -1514,7 +1514,7 @@ static void YGNodeAbsoluteLayoutChild( childWidth, childHeight, true, - kAbsLayout, + LayoutPassReason::kAbsLayout, config, layoutMarkerData, layoutContext, @@ -2187,7 +2187,7 @@ static float YGDistributeFreeSpaceSecondPass( availableInnerWidth, availableInnerHeight, performLayout && !requiresStretchLayout, - kFlex, + LayoutPassReason::kFlex, config, layoutMarkerData, layoutContext, @@ -3121,7 +3121,7 @@ static void YGNodelayoutImpl( availableInnerWidth, availableInnerHeight, true, - kStretch, + LayoutPassReason::kStretch, config, layoutMarkerData, layoutContext, @@ -3331,7 +3331,7 @@ static void YGNodelayoutImpl( availableInnerWidth, availableInnerHeight, true, - kMultilineStretch, + LayoutPassReason::kMultilineStretch, config, layoutMarkerData, layoutContext, @@ -3835,7 +3835,7 @@ bool YGLayoutNodeInternal( availableHeight, cachedResults->computedWidth, cachedResults->computedHeight, - LayoutPassReason(reason)); + LayoutPassReasonToString(reason)); } } else { if (gPrintChanges) { @@ -3857,7 +3857,7 @@ bool YGLayoutNodeInternal( YGMeasureModeName(heightMeasureMode, performLayout), availableWidth, availableHeight, - LayoutPassToString(reason)); + LayoutPassReasonToString(reason)); } YGNodelayoutImpl( @@ -3896,7 +3896,7 @@ bool YGLayoutNodeInternal( YGMeasureModeName(heightMeasureMode, performLayout), layout->measuredDimensions[YGDimensionWidth], layout->measuredDimensions[YGDimensionHeight], - LayoutPassToString(reason)); + LayoutPassReasonToString(reason)); } layout->lastOwnerDirection = ownerDirection; @@ -4126,7 +4126,7 @@ void YGNodeCalculateLayoutWithContext( ownerWidth, ownerHeight, true, - kInitial, + LayoutPassReason::kInitial, node->getConfig(), markerData, layoutContext, @@ -4176,7 +4176,7 @@ void YGNodeCalculateLayoutWithContext( ownerWidth, ownerHeight, true, - kInitial, + LayoutPassReason::kInitial, nodeWithoutLegacyFlag->getConfig(), layoutMarkerData, layoutContext, diff --git a/yoga/event/event.cpp b/yoga/event/event.cpp index 86031476..326214fc 100644 --- a/yoga/event/event.cpp +++ b/yoga/event/event.cpp @@ -12,21 +12,21 @@ namespace facebook { namespace yoga { -const char* LayoutPassToString(const LayoutPassReason value) { +const char* LayoutPassReasonToString(const LayoutPassReason value) { switch (value) { - case kInitial: + case LayoutPassReason::kInitial: return "initial"; - case kMeasureChild: + case LayoutPassReason::kMeasureChild: return "measure"; - case kAbsMeasureChild: + case LayoutPassReason::kAbsMeasureChild: return "abs_measure"; - case kFlex: + case LayoutPassReason::kFlex: return "flex"; - case kAbsLayout: + case LayoutPassReason::kAbsLayout: return "abs_layout"; - case kStretch: + case LayoutPassReason::kStretch: return "stretch"; - case kMultilineStretch: + case LayoutPassReason::kMultilineStretch: return "multiline_stretch"; default: return "unknown"; diff --git a/yoga/event/event.h b/yoga/event/event.h index 8e6bc972..618574e8 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -16,7 +16,7 @@ struct YGNode; namespace facebook { namespace yoga { -enum LayoutType : int { +enum struct LayoutType : int { kLayout = 0, kMeasure = 1, kCachedLayout = 2, @@ -32,7 +32,7 @@ struct LayoutData { int measureCallbacks; }; -enum LayoutPassReason : int { +enum struct LayoutPassReason : int { kInitial = 0, kMeasureChild = 1, kAbsMeasureChild = 2, @@ -42,7 +42,7 @@ enum LayoutPassReason : int { kMultilineStretch = 6 }; -const char* LayoutPassToString(const LayoutPassReason value); +const char* LayoutPassReasonToString(const LayoutPassReason value); struct Event { enum Type { From a53c14dc756b428991ed371c992f398d7f923462 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Fri, 19 Jul 2019 10:33:47 -0700 Subject: [PATCH 127/347] Add internal experiments API Summary: Adds internal API that we can use to conduct experiments. Reviewed By: SidharthGuglani Differential Revision: D16340463 fbshipit-source-id: 07a8bb7dbc4a02c5c95f1ad29b18845ab43752cf --- tests/InternalTest.cpp | 48 +++++++++++++++++++++++++++++++++ yoga/internal/experiments-inl.h | 31 +++++++++++++++++++++ yoga/internal/experiments.cpp | 37 +++++++++++++++++++++++++ yoga/internal/experiments.h | 25 +++++++++++++++++ 4 files changed, 141 insertions(+) create mode 100644 tests/InternalTest.cpp create mode 100644 yoga/internal/experiments-inl.h create mode 100644 yoga/internal/experiments.cpp create mode 100644 yoga/internal/experiments.h diff --git a/tests/InternalTest.cpp b/tests/InternalTest.cpp new file mode 100644 index 00000000..8646aebc --- /dev/null +++ b/tests/InternalTest.cpp @@ -0,0 +1,48 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#include +#include + +using namespace facebook::yoga::internal; + +struct YogaInternalTest : public testing::Test { + void SetUp() override; +}; + +TEST_F(YogaInternalTest, experiments_are_initially_disabled) { + ASSERT_EQ(isEnabled(Experiment::kDoubleMeasureCallbacks), false); +} + +TEST_F(YogaInternalTest, experiments_are_can_be_enabled) { + enable(Experiment::kDoubleMeasureCallbacks); + ASSERT_EQ(isEnabled(Experiment::kDoubleMeasureCallbacks), true); +} + +TEST_F(YogaInternalTest, experiments_are_can_be_disabled) { + enable(Experiment::kDoubleMeasureCallbacks); + disable(Experiment::kDoubleMeasureCallbacks); + + ASSERT_EQ(isEnabled(Experiment::kDoubleMeasureCallbacks), false); +} + +TEST_F(YogaInternalTest, experiments_are_can_be_toggled_on) { + disable(Experiment::kDoubleMeasureCallbacks); + + ASSERT_EQ(toggle(Experiment::kDoubleMeasureCallbacks), false); + ASSERT_EQ(isEnabled(Experiment::kDoubleMeasureCallbacks), true); +} + +TEST_F(YogaInternalTest, experiments_are_can_be_toggled_off) { + enable(Experiment::kDoubleMeasureCallbacks); + + ASSERT_EQ(toggle(Experiment::kDoubleMeasureCallbacks), true); + ASSERT_EQ(isEnabled(Experiment::kDoubleMeasureCallbacks), false); +} + +void YogaInternalTest::SetUp() { + disableAllExperiments(); +} diff --git a/yoga/internal/experiments-inl.h b/yoga/internal/experiments-inl.h new file mode 100644 index 00000000..ebbeccbc --- /dev/null +++ b/yoga/internal/experiments-inl.h @@ -0,0 +1,31 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#pragma once + +#include "experiments.h" + +#include + +namespace facebook { +namespace yoga { +namespace internal { + +namespace detail { +extern std::bitset enabledExperiments; +} // namespace detail + +inline bool isEnabled(Experiment experiment) { + return detail::enabledExperiments.test(static_cast(experiment)); +} + +inline void disableAllExperiments() { + detail::enabledExperiments = 0; +} + +} // namespace internal +} // namespace yoga +} // namespace facebook diff --git a/yoga/internal/experiments.cpp b/yoga/internal/experiments.cpp new file mode 100644 index 00000000..4b67eee5 --- /dev/null +++ b/yoga/internal/experiments.cpp @@ -0,0 +1,37 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#include "experiments.h" +#include "experiments-inl.h" + +namespace facebook { +namespace yoga { +namespace internal { + +namespace detail { + +std::bitset enabledExperiments = 0; + +} // namespace detail + +void enable(Experiment experiment) { + detail::enabledExperiments.set(static_cast(experiment)); +} + +void disable(Experiment experiment) { + detail::enabledExperiments.reset(static_cast(experiment)); +} + +bool toggle(Experiment experiment) { + auto bit = static_cast(experiment); + auto previousState = detail::enabledExperiments.test(bit); + detail::enabledExperiments.flip(bit); + return previousState; +} + +} // namespace internal +} // namespace yoga +} // namespace facebook diff --git a/yoga/internal/experiments.h b/yoga/internal/experiments.h new file mode 100644 index 00000000..7fd4cb37 --- /dev/null +++ b/yoga/internal/experiments.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#pragma once + +#include + +namespace facebook { +namespace yoga { +namespace internal { + +enum struct Experiment : size_t { + kDoubleMeasureCallbacks, +}; + +void enable(Experiment); +void disable(Experiment); +bool toggle(Experiment); + +} // namespace internal +} // namespace yoga +} // namespace facebook From 4e4ef06de12647a62c8ec25751d90ef5d870f3c7 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Fri, 19 Jul 2019 10:33:47 -0700 Subject: [PATCH 128/347] Implement double measure experiment Reviewed By: SidharthGuglani Differential Revision: D16340462 fbshipit-source-id: b157d8137c72f83a3bea46f30d0f46f65055f9ef --- yoga/Yoga.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index c3580bb0..e87fa325 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -15,6 +15,7 @@ #include "YGNodePrint.h" #include "Yoga-internal.h" #include "event/event.h" +#include "internal/experiments-inl.h" #ifdef _MSC_VER #include @@ -1656,6 +1657,15 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( measuredSize.height, reason}); + if (internal::isEnabled(internal::Experiment::kDoubleMeasureCallbacks)) { + node->measure( + innerWidth, + widthMeasureMode, + innerHeight, + heightMeasureMode, + layoutContext); + } + node->setLayoutMeasuredDimension( YGNodeBoundAxis( node, From 8c0eed3c755d4cd4e9ae11aa78c6768e7aa396be Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Fri, 19 Jul 2019 17:16:46 -0700 Subject: [PATCH 129/347] Add PhantomRef based YogaNode subclass Summary: Adds a subclass of `YogaNodeJNIBase` that uses `PhantomReference` for deallocating native memory rather than `Object#finalize()`. This should help making garbage collection more efficient. Reviewed By: amir-shalem Differential Revision: D16182667 fbshipit-source-id: d310fdb6af184168c43462b24f5e18ab5d0d7ad0 --- java/BUCK | 1 + java/com/facebook/yoga/YogaNode.java | 4 +- java/com/facebook/yoga/YogaNodeJNIBase.java | 34 ++++----------- .../facebook/yoga/YogaNodeJNIFinalizer.java | 34 +++++++++++++++ .../facebook/yoga/YogaNodeJNIPhantomRefs.java | 41 +++++++++++++++++++ lib/fb/BUCK | 3 +- 6 files changed, 88 insertions(+), 29 deletions(-) create mode 100644 java/com/facebook/yoga/YogaNodeJNIFinalizer.java create mode 100644 java/com/facebook/yoga/YogaNodeJNIPhantomRefs.java diff --git a/java/BUCK b/java/BUCK index 18bc6f8e..e25d42fd 100644 --- a/java/BUCK +++ b/java/BUCK @@ -50,6 +50,7 @@ yoga_java_library( visibility = ["PUBLIC"], deps = [ ":jni", + FBJNI_JAVA_TARGET, INFER_ANNOTATIONS_TARGET, JSR_305_TARGET, PROGRUARD_ANNOTATIONS_TARGET, diff --git a/java/com/facebook/yoga/YogaNode.java b/java/com/facebook/yoga/YogaNode.java index 1c75d1d6..9abb1412 100644 --- a/java/com/facebook/yoga/YogaNode.java +++ b/java/com/facebook/yoga/YogaNode.java @@ -10,11 +10,11 @@ import javax.annotation.Nullable; public abstract class YogaNode { public static YogaNode create() { - return new YogaNodeJNIBase(); + return new YogaNodeJNIFinalizer(); } public static YogaNode create(YogaConfig config) { - return new YogaNodeJNIBase(config); + return new YogaNodeJNIFinalizer(config); } public abstract void reset(); diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index 3fc4c0ad..a2f7845e 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -12,7 +12,7 @@ import java.util.List; import javax.annotation.Nullable; @DoNotStrip -public class YogaNodeJNIBase extends YogaNode implements Cloneable { +public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { /* Those flags needs be in sync with YGJNI.cpp */ private static final byte MARGIN = 1; @@ -35,7 +35,7 @@ public class YogaNodeJNIBase extends YogaNode implements Cloneable { @Nullable private List mChildren; @Nullable private YogaMeasureFunction mMeasureFunction; @Nullable private YogaBaselineFunction mBaselineFunction; - private long mNativePointer; + protected long mNativePointer; @Nullable private Object mData; @DoNotStrip @@ -46,37 +46,21 @@ public class YogaNodeJNIBase extends YogaNode implements Cloneable { private boolean mHasNewLayout = true; - public YogaNodeJNIBase() { - mNativePointer = YogaNative.jni_YGNodeNew(); - if (mNativePointer == 0) { + private YogaNodeJNIBase(long nativePointer) { + if (nativePointer == 0) { throw new IllegalStateException("Failed to allocate native memory"); } + mNativePointer = nativePointer; } - public YogaNodeJNIBase(YogaConfig config) { - mNativePointer = YogaNative.jni_YGNodeNewWithConfig(config.mNativePointer); - if (mNativePointer == 0) { - throw new IllegalStateException("Failed to allocate native memory"); - } + YogaNodeJNIBase() { + this(YogaNative.jni_YGNodeNew()); } - @Override - protected void finalize() throws Throwable { - try { - freeNatives(); - } finally { - super.finalize(); - } + YogaNodeJNIBase(YogaConfig config) { + this(YogaNative.jni_YGNodeNewWithConfig(config.mNativePointer)); } - /* frees the native underlying YGNode. Useful for testing. */ - public void freeNatives() { - if (mNativePointer > 0) { - long nativePointer = mNativePointer; - mNativePointer = 0; - YogaNative.jni_YGNodeFree(nativePointer); - } - } public void reset() { mMeasureFunction = null; mBaselineFunction = null; diff --git a/java/com/facebook/yoga/YogaNodeJNIFinalizer.java b/java/com/facebook/yoga/YogaNodeJNIFinalizer.java new file mode 100644 index 00000000..cee7b0e8 --- /dev/null +++ b/java/com/facebook/yoga/YogaNodeJNIFinalizer.java @@ -0,0 +1,34 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +package com.facebook.yoga; + +public class YogaNodeJNIFinalizer extends YogaNodeJNIBase { + public YogaNodeJNIFinalizer() { + super(); + } + + public YogaNodeJNIFinalizer(YogaConfig config) { + super(config); + } + + @Override + protected void finalize() throws Throwable { + try { + freeNatives(); + } finally { + super.finalize(); + } + } + + public void freeNatives() { + if (mNativePointer != 0) { + long nativePointer = mNativePointer; + mNativePointer = 0; + YogaNative.jni_YGNodeFree(nativePointer); + } + } +} diff --git a/java/com/facebook/yoga/YogaNodeJNIPhantomRefs.java b/java/com/facebook/yoga/YogaNodeJNIPhantomRefs.java new file mode 100644 index 00000000..a87defd8 --- /dev/null +++ b/java/com/facebook/yoga/YogaNodeJNIPhantomRefs.java @@ -0,0 +1,41 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +package com.facebook.yoga; + +import com.facebook.jni.DestructorThread; + +public class YogaNodeJNIPhantomRefs extends YogaNodeJNIBase { + public YogaNodeJNIPhantomRefs() { + super(); + registerPhantomRef(this, mNativePointer); + } + + public YogaNodeJNIPhantomRefs(YogaConfig config) { + super(config); + registerPhantomRef(this, mNativePointer); + } + + @Override + public YogaNodeJNIPhantomRefs cloneWithoutChildren() { + YogaNodeJNIPhantomRefs clone = (YogaNodeJNIPhantomRefs) super.cloneWithoutChildren(); + registerPhantomRef(clone, clone.mNativePointer); + return clone; + } + + private static final void registerPhantomRef(YogaNode node, final long nativePointer) { + new DestructorThread.Destructor(node) { + private long mNativePointer = nativePointer; + @Override + protected void destruct() { + if (mNativePointer != 0) { + YogaNative.jni_YGNodeFree(mNativePointer); + mNativePointer = 0; + } + } + }; + } +} diff --git a/lib/fb/BUCK b/lib/fb/BUCK index d078c1b6..df65844d 100644 --- a/lib/fb/BUCK +++ b/lib/fb/BUCK @@ -2,7 +2,7 @@ # # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID", "FBJNI_JAVA_TARGET", "JNI_TARGET", "YOGA_ROOTS", "subdir_glob", "yoga_cxx_library", "yoga_prebuilt_cxx_library") +load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID", "JNI_TARGET", "YOGA_ROOTS", "subdir_glob", "yoga_cxx_library", "yoga_prebuilt_cxx_library") yoga_prebuilt_cxx_library( name = "ndklog", @@ -40,7 +40,6 @@ yoga_cxx_library( visibility = ["PUBLIC"], deps = [ ":ndklog", - FBJNI_JAVA_TARGET, JNI_TARGET, ], ) From ae956f06fb3cbdb9bba5da67a6da1c130c082901 Mon Sep 17 00:00:00 2001 From: Min ho Kim Date: Tue, 23 Jul 2019 03:19:41 -0700 Subject: [PATCH 130/347] Fix typos (#25770) Summary: Fix typos mostly in comments and some string literals. ## Changelog [General] [Fixed] - Fix typos Pull Request resolved: https://github.com/facebook/react-native/pull/25770 Differential Revision: D16437857 Pulled By: cpojer fbshipit-source-id: ffeb4d6b175e341381352091134f7c97d78c679f --- yoga/Utils.h | 6 +++--- yoga/Yoga.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/yoga/Utils.h b/yoga/Utils.h index d6fbc268..899e832a 100644 --- a/yoga/Utils.h +++ b/yoga/Utils.h @@ -30,7 +30,7 @@ // // - endOfLineIndex: Its the end index of the last flex item which was examined // and it may or may not be part of the current line(as it may be absolutely -// positioned or inculding it may have caused to overshoot availableInnerDim) +// positioned or including it may have caused to overshoot availableInnerDim) // // - relativeChildren: Maintain a vector of the child nodes that can shrink // and/or grow. @@ -71,8 +71,8 @@ YGFloatOptional YGFloatOptionalMax( float YGFloatMin(const float a, const float b); -// This custom float comparision function compares the array of float with -// YGFloatsEqual, as the default float comparision operator will not work(Look +// This custom float comparison function compares the array of float with +// YGFloatsEqual, as the default float comparison operator will not work(Look // at the comments of YGFloatsEqual function). template bool YGFloatArrayEqual( diff --git a/yoga/Yoga.h b/yoga/Yoga.h index 6ec796d8..493e556c 100644 --- a/yoga/Yoga.h +++ b/yoga/Yoga.h @@ -330,7 +330,7 @@ WIN_EXPORT bool YGConfigIsExperimentalFeatureEnabled( YGConfigRef config, YGExperimentalFeature feature); -// Using the web defaults is the prefered configuration for new projects. Usage +// Using the web defaults is the preferred configuration for new projects. Usage // of non web defaults should be considered as legacy. WIN_EXPORT void YGConfigSetUseWebDefaults(YGConfigRef config, bool enabled); WIN_EXPORT bool YGConfigGetUseWebDefaults(YGConfigRef config); From a2aa1b7fca7e3573fba3d1978b29403fc0820da6 Mon Sep 17 00:00:00 2001 From: Samuel Susla Date: Mon, 29 Jul 2019 11:12:42 -0700 Subject: [PATCH 131/347] Fix onDismiss in Modal Summary: # Disclaimer: I might be missing something as the solution I implemented here seems like something that was considered by original author. If this solution isn't good, I have a plan B. # Problem: `onDismiss` prop isn't being called once the modal is dismissed, this diff fixes it. Also I've noticed that `onDismiss` is meant to only work on iOS, why is that? By landing this diff, it'll be called on Android as well so we need to change the docs (https://facebook.github.io/react-native/docs/modal.html#ondismiss). ## Video that shows the problem Following code is in playground.js P70222409 which just increments number everytime onDismiss is called {F166303269} Reviewed By: shergin Differential Revision: D16109536 fbshipit-source-id: 3fba56f5671912387b217f03b613dffd89614c9d --- ReactYoga.xcodeproj/project.pbxproj | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/ReactYoga.xcodeproj/project.pbxproj b/ReactYoga.xcodeproj/project.pbxproj index 4ad3260d..715c686a 100644 --- a/ReactYoga.xcodeproj/project.pbxproj +++ b/ReactYoga.xcodeproj/project.pbxproj @@ -859,9 +859,6 @@ 597633381F4E021D005BE8A4 /* RCTShadowView+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 597633351F4E021D005BE8A4 /* RCTShadowView+Internal.h */; }; 597633391F4E021D005BE8A4 /* RCTShadowView+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 597633351F4E021D005BE8A4 /* RCTShadowView+Internal.h */; }; 598FD1921F816A2A006C54CB /* RAMBundleRegistry.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = C6D380181F71D75B00621378 /* RAMBundleRegistry.h */; }; - 598FD1951F817335006C54CB /* RCTModalManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 91076A881F743AB00081B4FA /* RCTModalManager.h */; }; - 598FD1961F817335006C54CB /* RCTModalManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 91076A871F743AB00081B4FA /* RCTModalManager.m */; }; - 598FD1971F817336006C54CB /* RCTModalManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 91076A881F743AB00081B4FA /* RCTModalManager.h */; }; 599FAA361FB274980058CCF6 /* RCTSurface.h in Headers */ = {isa = PBXBuildFile; fileRef = 599FAA2A1FB274970058CCF6 /* RCTSurface.h */; }; 599FAA371FB274980058CCF6 /* RCTSurface.h in Headers */ = {isa = PBXBuildFile; fileRef = 599FAA2A1FB274970058CCF6 /* RCTSurface.h */; }; 599FAA381FB274980058CCF6 /* RCTSurface.mm in Sources */ = {isa = PBXBuildFile; fileRef = 599FAA2B1FB274970058CCF6 /* RCTSurface.mm */; }; @@ -999,7 +996,6 @@ 8507BBBF21EDACC200AEAFCA /* JSCExecutorFactory.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8507BBBC21EDACC200AEAFCA /* JSCExecutorFactory.mm */; }; 8507BBC021EDACC200AEAFCA /* JSCExecutorFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 8507BBBD21EDACC200AEAFCA /* JSCExecutorFactory.h */; }; 8507BBC121EDACC200AEAFCA /* JSCExecutorFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 8507BBBD21EDACC200AEAFCA /* JSCExecutorFactory.h */; }; - 916F9C2D1F743F57002E5920 /* RCTModalManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 91076A871F743AB00081B4FA /* RCTModalManager.m */; }; A2440AA21DF8D854006E7BFC /* RCTReloadCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = A2440AA01DF8D854006E7BFC /* RCTReloadCommand.h */; }; A2440AA31DF8D854006E7BFC /* RCTReloadCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = A2440AA11DF8D854006E7BFC /* RCTReloadCommand.m */; }; A2440AA41DF8D865006E7BFC /* RCTReloadCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = A2440AA01DF8D854006E7BFC /* RCTReloadCommand.h */; }; @@ -2059,8 +2055,6 @@ 83F15A171B7CC46900F10295 /* UIView+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIView+Private.h"; sourceTree = ""; }; 8507BBBC21EDACC200AEAFCA /* JSCExecutorFactory.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = JSCExecutorFactory.mm; sourceTree = ""; }; 8507BBBD21EDACC200AEAFCA /* JSCExecutorFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCExecutorFactory.h; sourceTree = ""; }; - 91076A871F743AB00081B4FA /* RCTModalManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RCTModalManager.m; sourceTree = ""; }; - 91076A881F743AB00081B4FA /* RCTModalManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RCTModalManager.h; sourceTree = ""; }; A2440AA01DF8D854006E7BFC /* RCTReloadCommand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTReloadCommand.h; sourceTree = ""; }; A2440AA11DF8D854006E7BFC /* RCTReloadCommand.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTReloadCommand.m; sourceTree = ""; }; AC70D2E81DE489E4002E6351 /* RCTJavaScriptLoader.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RCTJavaScriptLoader.mm; sourceTree = ""; }; @@ -2405,8 +2399,6 @@ 83392EB21B6634E10013B15F /* RCTModalHostViewController.m */, 83A1FE8D1B62643A00BE0E65 /* RCTModalHostViewManager.h */, 83A1FE8E1B62643A00BE0E65 /* RCTModalHostViewManager.m */, - 91076A881F743AB00081B4FA /* RCTModalManager.h */, - 91076A871F743AB00081B4FA /* RCTModalManager.m */, 58114A121AAE854800E7D092 /* RCTPicker.h */, 58114A131AAE854800E7D092 /* RCTPicker.m */, 58114A141AAE854800E7D092 /* RCTPickerManager.h */, @@ -3028,7 +3020,6 @@ 3D7BFD301EA8E3FA008DFB7A /* RCTSRWebSocket.h in Headers */, 59EDBCA81FDF4E0C003573DE /* RCTScrollableProtocol.h in Headers */, 3D302F6C1DF828F800D6DDAE /* RCTAnimationType.h in Headers */, - 598FD1951F817335006C54CB /* RCTModalManager.h in Headers */, 657734871EE834E000A0E9EA /* RCTInspectorDevServerHelper.h in Headers */, 3D302F6D1DF828F800D6DDAE /* RCTAutoInsetsProtocol.h in Headers */, 3D302F6E1DF828F800D6DDAE /* RCTBorderDrawing.h in Headers */, @@ -3189,7 +3180,6 @@ 3D80DA2D1DF820620028D040 /* RCTFrameUpdate.h in Headers */, 3D80DA2E1DF820620028D040 /* RCTImageSource.h in Headers */, 3D80DA2F1DF820620028D040 /* RCTInvalidating.h in Headers */, - 598FD1971F817336006C54CB /* RCTModalManager.h in Headers */, 599FAA3A1FB274980058CCF6 /* RCTSurfaceDelegate.h in Headers */, 3D80DA301DF820620028D040 /* RCTJavaScriptExecutor.h in Headers */, 3DCE53281FEAB23100613583 /* RCTDatePicker.h in Headers */, @@ -4002,7 +3992,6 @@ 2D3B5EA81D9B08D300451313 /* RCTUtils.m in Sources */, 599FAA451FB274980058CCF6 /* RCTSurfaceRootView.mm in Sources */, 2D3B5EC81D9B095800451313 /* RCTActivityIndicatorViewManager.m in Sources */, - 598FD1961F817335006C54CB /* RCTModalManager.m in Sources */, 3DCD185D1DF978E7007FE5A1 /* RCTReloadCommand.m in Sources */, 130443DB1E401ADD00D93A67 /* RCTConvert+Transform.m in Sources */, 3D0B84301EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.m in Sources */, @@ -4254,7 +4243,6 @@ 391E86A41C623EC800009732 /* RCTTouchEvent.m in Sources */, 1450FF861BCFF28A00208362 /* RCTProfile.m in Sources */, 13AB90C11B6FA36700713B4F /* RCTComponentData.m in Sources */, - 916F9C2D1F743F57002E5920 /* RCTModalManager.m in Sources */, F1EFDA50201F661000EE6E4C /* RCTUIUtils.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; From 8c270e68cc5032ab8bdd4eb297f9f3b075156981 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 31 Jul 2019 06:38:30 -0700 Subject: [PATCH 132/347] add subdirectories of yoga also to js sources Summary: Update build file to include subdirectories of yoga also in sources Reviewed By: davidaurelio Differential Revision: D16560253 fbshipit-source-id: 5dee4379912e003d4a1fa611882fbf736321615c --- javascript/binding.gyp | 1 + 1 file changed, 1 insertion(+) diff --git a/javascript/binding.gyp b/javascript/binding.gyp index a453164b..6f72fb61 100644 --- a/javascript/binding.gyp +++ b/javascript/binding.gyp @@ -7,6 +7,7 @@ "sources": [ " Date: Wed, 31 Jul 2019 06:38:30 -0700 Subject: [PATCH 133/347] remove getInstanceCount usages Summary: This diffs removes the usages of getInstanceCount as it has been removed from yoga. We will add event support in js later to handle these test cases Reviewed By: davidaurelio Differential Revision: D16560269 fbshipit-source-id: 52590c426faf87209f8635602b401fd5760af8ab --- javascript/binding.gyp | 1 - javascript/sources/entry-common.js | 3 --- javascript/sources/global.hh | 9 --------- javascript/sources/nbind.cc | 5 ----- javascript/tests/Facebook.Yoga/YGComputedBorderTest.js | 2 +- javascript/tests/Facebook.Yoga/YGComputedMarginTest.js | 2 +- javascript/tests/Facebook.Yoga/YGComputedPaddingTest.js | 2 +- javascript/tests/Facebook.Yoga/YGDirtiedTest.js | 8 ++++---- javascript/tests/Facebook.Yoga/YGMeasureCacheTest.js | 2 +- javascript/tests/Facebook.Yoga/YGMeasureTest.js | 2 +- 10 files changed, 9 insertions(+), 27 deletions(-) delete mode 100644 javascript/sources/global.hh diff --git a/javascript/binding.gyp b/javascript/binding.gyp index 6f72fb61..da48de18 100644 --- a/javascript/binding.gyp +++ b/javascript/binding.gyp @@ -10,7 +10,6 @@ " { Layout: bind('Layout', Layout), Size: bind('Size', Size), Value: bind('Value', Value), - getInstanceCount(...args) { - return lib.getInstanceCount(...args); - }, ...CONSTANTS, }; }; diff --git a/javascript/sources/global.hh b/javascript/sources/global.hh deleted file mode 100644 index ea9d476b..00000000 --- a/javascript/sources/global.hh +++ /dev/null @@ -1,9 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#pragma once - -unsigned getInstanceCount(void); diff --git a/javascript/sources/nbind.cc b/javascript/sources/nbind.cc index 5a6b459f..5b51bdcf 100644 --- a/javascript/sources/nbind.cc +++ b/javascript/sources/nbind.cc @@ -11,14 +11,9 @@ #include "./Size.hh" #include "./Value.hh" #include "./Config.hh" -#include "./global.hh" #include -NBIND_GLOBAL() { - function(getInstanceCount); -} - NBIND_CLASS(Size) { construct<>(); construct(); diff --git a/javascript/tests/Facebook.Yoga/YGComputedBorderTest.js b/javascript/tests/Facebook.Yoga/YGComputedBorderTest.js index 3e585d0b..4ee0f48d 100644 --- a/javascript/tests/Facebook.Yoga/YGComputedBorderTest.js +++ b/javascript/tests/Facebook.Yoga/YGComputedBorderTest.js @@ -27,5 +27,5 @@ it("border_start", function () { root.freeRecursive(); (typeof gc !== "undefined") && gc(); - console.assert(0 === Yoga.getInstanceCount(), "0 === Yoga.getInstanceCount() (" + Yoga.getInstanceCount() + ")"); + // TODO Add event support in js and check instace allocation and de allocation using that }); diff --git a/javascript/tests/Facebook.Yoga/YGComputedMarginTest.js b/javascript/tests/Facebook.Yoga/YGComputedMarginTest.js index 0a40bbb4..c25cdb0f 100644 --- a/javascript/tests/Facebook.Yoga/YGComputedMarginTest.js +++ b/javascript/tests/Facebook.Yoga/YGComputedMarginTest.js @@ -27,5 +27,5 @@ it("margin_start", function () { root.freeRecursive(); (typeof gc !== "undefined") && gc(); - console.assert(0 === Yoga.getInstanceCount(), "0 === Yoga.getInstanceCount() (" + Yoga.getInstanceCount() + ")"); + // TODO Add event support in js and check instace allocation and de allocation using that }); diff --git a/javascript/tests/Facebook.Yoga/YGComputedPaddingTest.js b/javascript/tests/Facebook.Yoga/YGComputedPaddingTest.js index deaf0e01..daca4aa4 100644 --- a/javascript/tests/Facebook.Yoga/YGComputedPaddingTest.js +++ b/javascript/tests/Facebook.Yoga/YGComputedPaddingTest.js @@ -27,5 +27,5 @@ it("padding_start", function () { root.freeRecursive(); (typeof gc !== "undefined") && gc(); - console.assert(0 === Yoga.getInstanceCount(), "0 === Yoga.getInstanceCount() (" + Yoga.getInstanceCount() + ")"); + // TODO Add event support in js and check instace allocation and de allocation using that }); diff --git a/javascript/tests/Facebook.Yoga/YGDirtiedTest.js b/javascript/tests/Facebook.Yoga/YGDirtiedTest.js index 20320c43..c920c514 100644 --- a/javascript/tests/Facebook.Yoga/YGDirtiedTest.js +++ b/javascript/tests/Facebook.Yoga/YGDirtiedTest.js @@ -34,7 +34,7 @@ it("dirtied", function() { root.freeRecursive(); typeof gc !== "undefined" && gc(); - console.assert(0 === Yoga.getInstanceCount(), "0 === Yoga.getInstanceCount() (" + Yoga.getInstanceCount() + ")"); + // TODO Add event support in js and check instace allocation and de allocation using that }); it("dirtied_propagation", function() { @@ -75,7 +75,7 @@ it("dirtied_propagation", function() { root.freeRecursive(); typeof gc !== "undefined" && gc(); - console.assert(0 === Yoga.getInstanceCount(), "0 === Yoga.getInstanceCount() (" + Yoga.getInstanceCount() + ")"); + // TODO Add event support in js and check instace allocation and de allocation using that }); it("dirtied_hierarchy", function() { @@ -122,7 +122,7 @@ it("dirtied_hierarchy", function() { root.freeRecursive(); typeof gc !== "undefined" && gc(); - console.assert(0 === Yoga.getInstanceCount(), "0 === Yoga.getInstanceCount() (" + Yoga.getInstanceCount() + ")"); + // TODO Add event support in js and check instace allocation and de allocation using that }); it("dirtied_reset", function() { @@ -164,5 +164,5 @@ it("dirtied_reset", function() { root.freeRecursive(); typeof gc !== "undefined" && gc(); - console.assert(0 === Yoga.getInstanceCount(), "0 === Yoga.getInstanceCount() (" + Yoga.getInstanceCount() + ")"); + // TODO Add event support in js and check instace allocation and de allocation using that }); diff --git a/javascript/tests/Facebook.Yoga/YGMeasureCacheTest.js b/javascript/tests/Facebook.Yoga/YGMeasureCacheTest.js index 3bd578da..4a19e2a6 100644 --- a/javascript/tests/Facebook.Yoga/YGMeasureCacheTest.js +++ b/javascript/tests/Facebook.Yoga/YGMeasureCacheTest.js @@ -29,5 +29,5 @@ it("measure_once_single_flexible_child", function () { root.freeRecursive(); (typeof gc !== "undefined") && gc(); - console.assert(0 === Yoga.getInstanceCount(), "0 === Yoga.getInstanceCount() (" + Yoga.getInstanceCount() + ")"); + // TODO Add event support in js and check instace allocation and de allocation using that }); diff --git a/javascript/tests/Facebook.Yoga/YGMeasureTest.js b/javascript/tests/Facebook.Yoga/YGMeasureTest.js index bb3b3c37..186f842b 100644 --- a/javascript/tests/Facebook.Yoga/YGMeasureTest.js +++ b/javascript/tests/Facebook.Yoga/YGMeasureTest.js @@ -27,5 +27,5 @@ it("dont_measure_single_grow_shrink_child", function () { root.freeRecursive(); (typeof gc !== "undefined") && gc(); - console.assert(0 === Yoga.getInstanceCount(), "0 === Yoga.getInstanceCount() (" + Yoga.getInstanceCount() + ")"); + // TODO Add event support in js and check instace allocation and de allocation using that }); From 5a25805cb5c0f502c914d9d832cdc4bf445b086f Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 31 Jul 2019 06:38:30 -0700 Subject: [PATCH 134/347] Update flow-copy-source to use latest version Summary: Fixes vulnerability in mem dependency by updating the version of flow-copy-source in javascript/yarn.lock https://github.com/sindresorhus/mem/commit/da4e4398cb27b602de3bd55f746efa9b4a31702b Reviewed By: danielbuechele Differential Revision: D16542191 fbshipit-source-id: e900ac2d358883fc269688b93faad3ffbec10f0d --- javascript/package.json | 2 +- javascript/yarn.lock | 496 +++++++++++++++++++--------------------- 2 files changed, 233 insertions(+), 265 deletions(-) diff --git a/javascript/package.json b/javascript/package.json index 1b42283a..3966d210 100644 --- a/javascript/package.json +++ b/javascript/package.json @@ -43,7 +43,7 @@ "babel-preset-es2015": "^6.24.1", "babel-preset-stage-3": "^6.24.1", "cross-env": "^4.0.0", - "flow-copy-source": "^1.2.1", + "flow-copy-source": "^2.0.7", "mocha": "^3.2.0" } } diff --git a/javascript/yarn.lock b/javascript/yarn.lock index 84e1ad2a..f3b8cc48 100644 --- a/javascript/yarn.lock +++ b/javascript/yarn.lock @@ -10,14 +10,22 @@ ansi-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107" -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" +ansi-styles@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + anymatch@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" @@ -25,6 +33,14 @@ anymatch@^1.3.0: arrify "^1.0.0" micromatch "^2.1.5" +anymatch@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.0.3.tgz#2fb624fe0e84bccab00afee3d0006ed310f22f09" + integrity sha512-c6IvoeBECQlMVuYUjSwimnhmztImpErfxJzWZhIQinIvQWoGOnB0dLIgifbPHQt5heS6mNlaZG16f06H3C8t1g== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + aproba@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0" @@ -687,6 +703,11 @@ binary-extensions@^1.0.0: version "1.8.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" +binary-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" + integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== + block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" @@ -718,6 +739,13 @@ braces@^1.8.2: preserve "^0.2.0" repeat-element "^1.1.2" +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + browser-stdout@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" @@ -726,13 +754,10 @@ buffer-shims@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" -builtin-modules@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== caseless@~0.11.0: version "0.11.0" @@ -763,33 +788,46 @@ chokidar@^1.6.1: optionalDependencies: fsevents "^1.0.0" -chokidar@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" +chokidar@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.0.2.tgz#0d1cd6d04eb2df0327446188cd13736a3367d681" + integrity sha512-c4PR2egjNjI1um6bamCQ6bUNPDiyofNQruHvKgHQ4gDUP/ITSVSzNsiI5OWtHOsX323i5ha/kk4YmOZ1Ktg7KA== dependencies: - anymatch "^1.3.0" - async-each "^1.0.0" - glob-parent "^2.0.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^2.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" + anymatch "^3.0.1" + braces "^3.0.2" + glob-parent "^5.0.0" + is-binary-path "^2.1.0" + is-glob "^4.0.1" + normalize-path "^3.0.0" + readdirp "^3.1.1" optionalDependencies: - fsevents "^1.0.0" + fsevents "^2.0.6" -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + combined-stream@^1.0.5, combined-stream@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" @@ -829,7 +867,7 @@ cross-env@^4.0.0: cross-spawn "^5.1.0" is-windows "^1.0.0" -cross-spawn@^5.0.1, cross-spawn@^5.1.0: +cross-spawn@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" dependencies: @@ -861,9 +899,10 @@ debug@^2.6.8: dependencies: ms "2.0.0" -decamelize@^1.1.1: +decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= deep-extend@~0.4.0: version "0.4.1" @@ -893,16 +932,15 @@ ecc-jsbn@~0.1.1: dependencies: jsbn "~0.1.0" +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + emscripten-library-decorator@~0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/emscripten-library-decorator/-/emscripten-library-decorator-0.2.2.tgz#d035f023e2a84c68305cc842cdeea38e67683c40" -error-ex@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" - dependencies: - is-arrayish "^0.2.1" - escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -911,18 +949,6 @@ esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" @@ -963,21 +989,30 @@ fill-range@^2.1.0: repeat-element "^1.1.2" repeat-string "^1.5.2" -find-up@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: - locate-path "^2.0.0" + to-regex-range "^5.0.1" -flow-copy-source@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/flow-copy-source/-/flow-copy-source-1.2.1.tgz#705c2fa8fb29a281118e1c4b66218dec24b745ec" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== dependencies: - chokidar "^1.7.0" - fs-extra "^3.0.1" + locate-path "^3.0.0" + +flow-copy-source@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/flow-copy-source/-/flow-copy-source-2.0.7.tgz#3b5634ac552c539a40093ed09d9e645e67f95212" + integrity sha512-/9oYivwSRgIyRMWqRkzJgulUCRPqMA8JSt7l0uoW0Xmtp8ItJpURnBczJUvnAKnHp0TNttNILCeuqW2w9cwTFg== + dependencies: + chokidar "^3.0.0" + fs-extra "^8.1.0" glob "^7.0.0" kefir "^3.7.3" - yargs "^8.0.2" + yargs "^13.1.0" for-in@^0.1.5: version "0.1.6" @@ -1001,12 +1036,13 @@ form-data@~2.1.1: combined-stream "^1.0.5" mime-types "^2.1.12" -fs-extra@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== dependencies: - graceful-fs "^4.1.2" - jsonfile "^3.0.0" + graceful-fs "^4.2.0" + jsonfile "^4.0.0" universalify "^0.1.0" fs-readdir-recursive@^1.0.0: @@ -1024,6 +1060,11 @@ fsevents@^1.0.0: nan "^2.3.0" node-pre-gyp "^0.6.29" +fsevents@^2.0.6: + version "2.0.7" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.0.7.tgz#382c9b443c6cbac4c57187cdda23aa3bf1ccfc2a" + integrity sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ== + fstream-ignore@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" @@ -1078,13 +1119,10 @@ generate-object-property@^1.1.0: dependencies: is-property "^1.0.0" -get-caller-file@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== getpass@^0.1.1: version "0.1.6" @@ -1105,6 +1143,13 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" +glob-parent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954" + integrity sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg== + dependencies: + is-glob "^4.0.1" + glob@7.0.5: version "7.0.5" resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95" @@ -1135,6 +1180,11 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.6: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" +graceful-fs@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b" + integrity sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg== + "graceful-readlink@>= 1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" @@ -1186,10 +1236,6 @@ home-or-tmp@^2.0.0: os-homedir "^1.0.0" os-tmpdir "^1.0.1" -hosted-git-info@^2.1.4: - version "2.5.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" - http-signature@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" @@ -1219,30 +1265,23 @@ invariant@^2.2.0, invariant@^2.2.2: dependencies: loose-envify "^1.0.0" -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" dependencies: binary-extensions "^1.0.0" +is-binary-path@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-buffer@^1.0.2: version "1.1.4" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b" -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - dependencies: - builtin-modules "^1.0.0" - is-dotfile@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" @@ -1261,6 +1300,11 @@ is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + is-finite@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" @@ -1283,6 +1327,13 @@ is-glob@^2.0.0, is-glob@^2.0.1: dependencies: is-extglob "^1.0.0" +is-glob@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + is-my-json-valid@^2.12.4: version "2.15.0" resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b" @@ -1298,6 +1349,11 @@ is-number@^2.0.2, is-number@^2.1.0: dependencies: kind-of "^3.0.2" +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" @@ -1310,10 +1366,6 @@ is-property@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -1382,9 +1434,10 @@ json5@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" -jsonfile@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= optionalDependencies: graceful-fs "^4.1.6" @@ -1412,26 +1465,12 @@ kind-of@^3.0.2: dependencies: is-buffer "^1.0.2" -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== dependencies: - invert-kv "^1.0.0" - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - dependencies: - p-locate "^2.0.0" + p-locate "^3.0.0" path-exists "^3.0.0" lodash._baseassign@^3.0.0: @@ -1502,12 +1541,6 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" -mem@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" - dependencies: - mimic-fn "^1.0.0" - micromatch@^2.1.5: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" @@ -1536,10 +1569,6 @@ mime-types@^2.1.12, mime-types@~2.1.7: dependencies: mime-db "~1.25.0" -mimic-fn@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" - minimatch@^3.0.0, minimatch@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" @@ -1638,24 +1667,14 @@ node-pre-gyp@^0.6.29: dependencies: abbrev "1" -normalize-package-data@^2.3.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" - dependencies: - hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - normalize-path@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - dependencies: - path-key "^2.0.0" +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== "npmlog@0 || 1 || 2 || 3 || 4": version "4.1.2" @@ -1710,14 +1729,6 @@ os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" -os-locale@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" - dependencies: - execa "^0.7.0" - lcid "^1.0.0" - mem "^1.1.0" - os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -1737,25 +1748,24 @@ output-file-sync@^1.1.0: mkdirp "^0.5.1" object-assign "^4.1.0" -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - -p-limit@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c" +p-limit@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" + integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== dependencies: - p-try "^1.0.0" + p-try "^2.0.0" -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== dependencies: - p-limit "^1.1.0" + p-limit "^2.0.0" -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== parse-glob@^3.0.4: version "3.0.4" @@ -1766,12 +1776,6 @@ parse-glob@^3.0.4: is-extglob "^1.0.0" is-glob "^2.0.0" -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - dependencies: - error-ex "^1.2.0" - path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -1780,19 +1784,10 @@ path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" -path-key@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - dependencies: - pify "^2.0.0" - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" +picomatch@^2.0.4: + version "2.0.7" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6" + integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA== pinkie-promise@^2.0.0: version "2.0.1" @@ -1844,21 +1839,6 @@ rc@~1.1.6: minimist "^1.2.0" strip-json-comments "~1.0.4" -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2: version "2.2.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e" @@ -1892,6 +1872,13 @@ readdirp@^2.0.0: readable-stream "^2.0.2" set-immediate-shim "^1.0.1" +readdirp@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.1.1.tgz#b158123ac343c8b0f31d65680269cc0fc1025db1" + integrity sha512-XXdSXZrQuvqoETj50+JAitxz1UPdt5dupjT6T5nVB+WvjMv2XKYj+s7hPeAVCXvmJrL36O4YYyWlIC3an2ePiQ== + dependencies: + picomatch "^2.0.4" + regenerate@^1.2.1: version "1.3.3" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" @@ -1980,9 +1967,10 @@ require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== resolve@~1.1.7: version "1.1.7" @@ -1994,10 +1982,6 @@ rimraf@2, rimraf@~2.5.1, rimraf@~2.5.4: dependencies: glob "^7.0.5" -"semver@2 || 3 || 4 || 5": - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" @@ -2044,20 +2028,6 @@ source-map@^0.5.0, source-map@^0.5.6: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" -spdx-correct@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" - dependencies: - spdx-license-ids "^1.0.2" - -spdx-expression-parse@~1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" - -spdx-license-ids@^1.0.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" - sshpk@^1.7.0: version "1.10.1" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0" @@ -2081,12 +2051,14 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== dependencies: + emoji-regex "^7.0.1" is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" + strip-ansi "^5.1.0" string_decoder@~0.10.x: version "0.10.31" @@ -2102,19 +2074,12 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: - ansi-regex "^3.0.0" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + ansi-regex "^4.1.0" strip-json-comments@~1.0.4: version "1.0.4" @@ -2163,6 +2128,13 @@ to-fast-properties@^1.0.1, to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + tough-cookie@~2.3.0: version "2.3.2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" @@ -2207,13 +2179,6 @@ v8flags@^2.0.10: dependencies: user-home "^1.1.1" -validate-npm-package-license@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" - dependencies: - spdx-correct "~1.0.0" - spdx-expression-parse "~1.0.0" - verror@1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" @@ -2236,12 +2201,14 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.1" -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" wrappy@1: version "1.0.2" @@ -2251,34 +2218,35 @@ xtend@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" -yargs-parser@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" +yargs-parser@^13.1.1: + version "13.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" + integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== dependencies: - camelcase "^4.1.0" + camelcase "^5.0.0" + decamelize "^1.2.0" -yargs@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" +yargs@^13.1.0: + version "13.3.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" + integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== 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" + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" require-directory "^2.1.1" - require-main-filename "^1.0.1" + require-main-filename "^2.0.0" set-blocking "^2.0.0" - string-width "^2.0.0" + string-width "^3.0.0" which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^7.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.1" From 825da1e8685e115b403b3661c59f19d05f7e6f93 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 31 Jul 2019 14:33:36 -0700 Subject: [PATCH 135/347] create two layout pass reason flexLayout and flexMeasure instead of flex Summary: We had flex as a reason for both layout and measure. Now creating separating reason flexLayout and flexMeasure in this diff. Also changed ordering of items in Enum to group layout and measure reasons Reviewed By: davidaurelio Differential Revision: D16562350 fbshipit-source-id: 75501f9d4dde0974009193b3991a8acc97b02ad0 --- java/com/facebook/yoga/LayoutPassReason.java | 26 +++++++++++--------- yoga/Yoga.cpp | 6 +++-- yoga/event/event.cpp | 14 ++++++----- yoga/event/event.h | 13 +++++----- 4 files changed, 33 insertions(+), 26 deletions(-) diff --git a/java/com/facebook/yoga/LayoutPassReason.java b/java/com/facebook/yoga/LayoutPassReason.java index dc72ad4f..6406a95c 100644 --- a/java/com/facebook/yoga/LayoutPassReason.java +++ b/java/com/facebook/yoga/LayoutPassReason.java @@ -8,12 +8,13 @@ package com.facebook.yoga; public enum LayoutPassReason { INITIAL(0), - MEASURE(1), - ABS_MEASURE(2), - FLEX(3), - ABS_LAYOUT(4), - STRETCH(5), - MULTILINE_STRETCH(6); + ABS_LAYOUT(1), + STRETCH(2), + MULTILINE_STRETCH(3), + FLEX_LAYOUT(4), + MEASURE(5), + ABS_MEASURE(6), + FLEX_MEASURE(7); private final int mIntValue; @@ -28,12 +29,13 @@ public enum LayoutPassReason { public static LayoutPassReason fromInt(int value) { switch (value) { case 0: return INITIAL; - case 1: return MEASURE; - case 2: return ABS_MEASURE; - case 3: return FLEX; - case 4: return ABS_LAYOUT; - case 5: return STRETCH; - case 6: return MULTILINE_STRETCH; + case 1: return ABS_LAYOUT; + case 2: return STRETCH; + case 3: return MULTILINE_STRETCH; + case 4: return FLEX_LAYOUT; + case 5: return MEASURE; + case 6: return ABS_MEASURE; + case 7: return FLEX_MEASURE; default: throw new IllegalArgumentException("Unknown enum value: " + value); } } diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index e87fa325..d187bcd0 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -2185,6 +2185,7 @@ static float YGDistributeFreeSpaceSecondPass( const YGMeasureMode childHeightMeasureMode = !isMainAxisRow ? childMainMeasureMode : childCrossMeasureMode; + const bool isLayoutPass = performLayout && !requiresStretchLayout; // Recursively call the layout algorithm for this child with the updated // main size. YGLayoutNodeInternal( @@ -2196,8 +2197,9 @@ static float YGDistributeFreeSpaceSecondPass( childHeightMeasureMode, availableInnerWidth, availableInnerHeight, - performLayout && !requiresStretchLayout, - LayoutPassReason::kFlex, + isLayoutPass, + isLayoutPass ? LayoutPassReason::kFlexLayout + : LayoutPassReason::kFlexMeasure, config, layoutMarkerData, layoutContext, diff --git a/yoga/event/event.cpp b/yoga/event/event.cpp index 326214fc..48e8f41d 100644 --- a/yoga/event/event.cpp +++ b/yoga/event/event.cpp @@ -16,18 +16,20 @@ const char* LayoutPassReasonToString(const LayoutPassReason value) { switch (value) { case LayoutPassReason::kInitial: return "initial"; - case LayoutPassReason::kMeasureChild: - return "measure"; - case LayoutPassReason::kAbsMeasureChild: - return "abs_measure"; - case LayoutPassReason::kFlex: - return "flex"; case LayoutPassReason::kAbsLayout: return "abs_layout"; case LayoutPassReason::kStretch: return "stretch"; case LayoutPassReason::kMultilineStretch: return "multiline_stretch"; + case LayoutPassReason::kFlexLayout: + return "flex_layout"; + case LayoutPassReason::kMeasureChild: + return "measure"; + case LayoutPassReason::kAbsMeasureChild: + return "abs_measure"; + case LayoutPassReason::kFlexMeasure: + return "flex_measure"; default: return "unknown"; } diff --git a/yoga/event/event.h b/yoga/event/event.h index 618574e8..65d13f59 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -34,12 +34,13 @@ struct LayoutData { enum struct LayoutPassReason : int { kInitial = 0, - kMeasureChild = 1, - kAbsMeasureChild = 2, - kFlex = 3, - kAbsLayout = 4, - kStretch = 5, - kMultilineStretch = 6 + kAbsLayout = 1, + kStretch = 2, + kMultilineStretch = 3, + kFlexLayout = 4, + kMeasureChild = 5, + kAbsMeasureChild = 6, + kFlexMeasure = 7 }; const char* LayoutPassReasonToString(const LayoutPassReason value); From 095c991b85a62aeb19d546b094d970fe06fc3e97 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 31 Jul 2019 14:33:36 -0700 Subject: [PATCH 136/347] Added counts for measure callbacks reasons in an array inside qpl annotations Summary: Added an array to maintain the counts of each of the reason of measure callbacks and this is now added as qpl metadata in Layout Calculation qpl event Reviewed By: davidaurelio Differential Revision: D16516379 fbshipit-source-id: 201c5d2463f0a921841a0bbfec8f4d5e007000c8 --- yoga/Yoga.cpp | 7 +++++++ yoga/event/event.h | 24 ++++++++++++++---------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index d187bcd0..bc440cbb 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -1645,6 +1645,13 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( layoutContext); layoutMarkerData.measureCallbacks += 1; + if (reason == LayoutPassReason::kMeasureChild) { + layoutMarkerData.measureChildMeasureCallbacks += 1; + } else if (reason == LayoutPassReason::kFlexMeasure) { + layoutMarkerData.flexMeasureMeasureCallbacks += 1; + } else if (reason == LayoutPassReason::kAbsMeasureChild) { + layoutMarkerData.absMeasureChildMeasureCallbacks += 1; + } Event::publish( node, diff --git a/yoga/event/event.h b/yoga/event/event.h index 65d13f59..e27e53d3 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -23,15 +23,6 @@ enum struct LayoutType : int { kCachedMeasure = 3 }; -struct LayoutData { - int layouts; - int measures; - int maxMeasureCache; - int cachedLayouts; - int cachedMeasures; - int measureCallbacks; -}; - enum struct LayoutPassReason : int { kInitial = 0, kAbsLayout = 1, @@ -40,7 +31,20 @@ enum struct LayoutPassReason : int { kFlexLayout = 4, kMeasureChild = 5, kAbsMeasureChild = 6, - kFlexMeasure = 7 + kFlexMeasure = 7, + COUNT +}; + +struct LayoutData { + int layouts; + int measures; + int maxMeasureCache; + int cachedLayouts; + int cachedMeasures; + int measureCallbacks; + int measureChildMeasureCallbacks; + int absMeasureChildMeasureCallbacks; + int flexMeasureMeasureCallbacks; }; const char* LayoutPassReasonToString(const LayoutPassReason value); From 947230958daff92028e2f2e5b7086f1c6dd176b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20B=C3=BCchele?= Date: Thu, 1 Aug 2019 04:10:21 -0700 Subject: [PATCH 137/347] make npm module Summary: We want to use the yoga playground as a standalone package as well. This adds a webpack config to bundle the playground for npm. The package can then be distributed as `yoga-playground` via npm Reviewed By: fabiomassimo Differential Revision: D16583334 fbshipit-source-id: 84807ddd8983ba9f0fb43570b518c975f35544ab --- website/.gitignore | 1 + website/src/components/DocsSidebar.js | 4 +- website/src/components/Playground/.npmignore | 3 + .../src/components/Playground/package.json | 19 + .../Playground/{ => src}/CodeComponentKit.js | 0 .../Playground/{ => src}/CodeGenerators.css | 0 .../Playground/{ => src}/CodeGenerators.js | 0 .../Playground/{ => src}/CodeJavaScript.js | 0 .../Playground/{ => src}/CodeLitho.js | 0 .../Playground/{ => src}/CodeReactNative.js | 0 .../Playground/{ => src}/EditValue.js | 0 .../Playground/{ => src}/Editor.css | 0 .../components/Playground/{ => src}/Editor.js | 0 .../Playground/{ => src}/InfoText.css | 0 .../Playground/{ => src}/InfoText.js | 0 .../Playground/{ => src}/LayoutRecord.js | 0 .../Playground/{ => src}/PositionGuide.css | 0 .../Playground/{ => src}/PositionGuide.js | 0 .../Playground/{ => src}/PositionRecord.js | 0 .../Playground/{ => src}/Sidebar.css | 0 .../Playground/{ => src}/Sidebar.js | 0 .../Playground/{ => src}/URLShortener.css | 0 .../Playground/{ => src}/URLShortener.js | 0 .../Playground/{ => src}/YogaEnumSelect.css | 0 .../Playground/{ => src}/YogaEnumSelect.js | 0 .../Playground/{ => src}/YogaNode.css | 0 .../Playground/{ => src}/YogaNode.js | 0 .../{ => src}/YogaPositionEditor.css | 0 .../{ => src}/YogaPositionEditor.js | 0 .../components/Playground/{ => src}/index.css | 0 .../components/Playground/{ => src}/index.js | 0 .../components/Playground/webpack.config.js | 63 + website/src/components/Playground/yarn.lock | 2960 +++++++++++++++++ website/src/pages/index.js | 7 +- website/src/pages/playground/index.js | 2 +- website/src/templates/withPlayground.js | 4 +- 36 files changed, 3053 insertions(+), 10 deletions(-) create mode 100644 website/src/components/Playground/.npmignore create mode 100644 website/src/components/Playground/package.json rename website/src/components/Playground/{ => src}/CodeComponentKit.js (100%) rename website/src/components/Playground/{ => src}/CodeGenerators.css (100%) rename website/src/components/Playground/{ => src}/CodeGenerators.js (100%) rename website/src/components/Playground/{ => src}/CodeJavaScript.js (100%) rename website/src/components/Playground/{ => src}/CodeLitho.js (100%) rename website/src/components/Playground/{ => src}/CodeReactNative.js (100%) rename website/src/components/Playground/{ => src}/EditValue.js (100%) rename website/src/components/Playground/{ => src}/Editor.css (100%) rename website/src/components/Playground/{ => src}/Editor.js (100%) rename website/src/components/Playground/{ => src}/InfoText.css (100%) rename website/src/components/Playground/{ => src}/InfoText.js (100%) rename website/src/components/Playground/{ => src}/LayoutRecord.js (100%) rename website/src/components/Playground/{ => src}/PositionGuide.css (100%) rename website/src/components/Playground/{ => src}/PositionGuide.js (100%) rename website/src/components/Playground/{ => src}/PositionRecord.js (100%) rename website/src/components/Playground/{ => src}/Sidebar.css (100%) rename website/src/components/Playground/{ => src}/Sidebar.js (100%) rename website/src/components/Playground/{ => src}/URLShortener.css (100%) rename website/src/components/Playground/{ => src}/URLShortener.js (100%) rename website/src/components/Playground/{ => src}/YogaEnumSelect.css (100%) rename website/src/components/Playground/{ => src}/YogaEnumSelect.js (100%) rename website/src/components/Playground/{ => src}/YogaNode.css (100%) rename website/src/components/Playground/{ => src}/YogaNode.js (100%) rename website/src/components/Playground/{ => src}/YogaPositionEditor.css (100%) rename website/src/components/Playground/{ => src}/YogaPositionEditor.js (100%) rename website/src/components/Playground/{ => src}/index.css (100%) rename website/src/components/Playground/{ => src}/index.js (100%) create mode 100644 website/src/components/Playground/webpack.config.js create mode 100644 website/src/components/Playground/yarn.lock diff --git a/website/.gitignore b/website/.gitignore index 248335d2..f1cbaee1 100644 --- a/website/.gitignore +++ b/website/.gitignore @@ -6,3 +6,4 @@ node_modules public/ .DS_Store yarn-error.log +src/components/Playground/dist diff --git a/website/src/components/DocsSidebar.js b/website/src/components/DocsSidebar.js index a056d641..b8f221ee 100644 --- a/website/src/components/DocsSidebar.js +++ b/website/src/components/DocsSidebar.js @@ -10,10 +10,10 @@ import React, {Component} from 'react'; import ReactDOM from 'react-dom'; -import EditValue from '../components/Playground/EditValue'; +import EditValue from '../components/Playground/src/EditValue'; import Link from 'gatsby-link'; import './DocsSidebar.css'; -import type {LayoutRecordT} from './Playground/LayoutRecord'; +import type {LayoutRecordT} from './Playground/src/LayoutRecord'; const TAG_PATTERN = /<\/controls>/gi; diff --git a/website/src/components/Playground/.npmignore b/website/src/components/Playground/.npmignore new file mode 100644 index 00000000..3c8a2517 --- /dev/null +++ b/website/src/components/Playground/.npmignore @@ -0,0 +1,3 @@ +src +webpack.config.js +node_modules diff --git a/website/src/components/Playground/package.json b/website/src/components/Playground/package.json new file mode 100644 index 00000000..eb6acf5f --- /dev/null +++ b/website/src/components/Playground/package.json @@ -0,0 +1,19 @@ +{ + "name": "yoga-playground", + "version": "1.0.0", + "main": "dist/index.js", + "author": "Daniel BĂĽchele", + "license": "MIT", + "scripts": { + "build": "webpack && cp ../../../node_modules/antd/dist/antd.min.css dist/antd.min.css" + }, + "devDependencies": { + "@babel/plugin-proposal-class-properties": "^7.5.5", + "@babel/plugin-transform-flow-strip-types": "^7.4.4", + "@babel/preset-react": "^7.0.0", + "babel-loader": "^8.0.6", + "css-loader": "^3.1.0", + "mini-css-extract-plugin": "^0.8.0", + "webpack": "^4.38.0" + } +} diff --git a/website/src/components/Playground/CodeComponentKit.js b/website/src/components/Playground/src/CodeComponentKit.js similarity index 100% rename from website/src/components/Playground/CodeComponentKit.js rename to website/src/components/Playground/src/CodeComponentKit.js diff --git a/website/src/components/Playground/CodeGenerators.css b/website/src/components/Playground/src/CodeGenerators.css similarity index 100% rename from website/src/components/Playground/CodeGenerators.css rename to website/src/components/Playground/src/CodeGenerators.css diff --git a/website/src/components/Playground/CodeGenerators.js b/website/src/components/Playground/src/CodeGenerators.js similarity index 100% rename from website/src/components/Playground/CodeGenerators.js rename to website/src/components/Playground/src/CodeGenerators.js diff --git a/website/src/components/Playground/CodeJavaScript.js b/website/src/components/Playground/src/CodeJavaScript.js similarity index 100% rename from website/src/components/Playground/CodeJavaScript.js rename to website/src/components/Playground/src/CodeJavaScript.js diff --git a/website/src/components/Playground/CodeLitho.js b/website/src/components/Playground/src/CodeLitho.js similarity index 100% rename from website/src/components/Playground/CodeLitho.js rename to website/src/components/Playground/src/CodeLitho.js diff --git a/website/src/components/Playground/CodeReactNative.js b/website/src/components/Playground/src/CodeReactNative.js similarity index 100% rename from website/src/components/Playground/CodeReactNative.js rename to website/src/components/Playground/src/CodeReactNative.js diff --git a/website/src/components/Playground/EditValue.js b/website/src/components/Playground/src/EditValue.js similarity index 100% rename from website/src/components/Playground/EditValue.js rename to website/src/components/Playground/src/EditValue.js diff --git a/website/src/components/Playground/Editor.css b/website/src/components/Playground/src/Editor.css similarity index 100% rename from website/src/components/Playground/Editor.css rename to website/src/components/Playground/src/Editor.css diff --git a/website/src/components/Playground/Editor.js b/website/src/components/Playground/src/Editor.js similarity index 100% rename from website/src/components/Playground/Editor.js rename to website/src/components/Playground/src/Editor.js diff --git a/website/src/components/Playground/InfoText.css b/website/src/components/Playground/src/InfoText.css similarity index 100% rename from website/src/components/Playground/InfoText.css rename to website/src/components/Playground/src/InfoText.css diff --git a/website/src/components/Playground/InfoText.js b/website/src/components/Playground/src/InfoText.js similarity index 100% rename from website/src/components/Playground/InfoText.js rename to website/src/components/Playground/src/InfoText.js diff --git a/website/src/components/Playground/LayoutRecord.js b/website/src/components/Playground/src/LayoutRecord.js similarity index 100% rename from website/src/components/Playground/LayoutRecord.js rename to website/src/components/Playground/src/LayoutRecord.js diff --git a/website/src/components/Playground/PositionGuide.css b/website/src/components/Playground/src/PositionGuide.css similarity index 100% rename from website/src/components/Playground/PositionGuide.css rename to website/src/components/Playground/src/PositionGuide.css diff --git a/website/src/components/Playground/PositionGuide.js b/website/src/components/Playground/src/PositionGuide.js similarity index 100% rename from website/src/components/Playground/PositionGuide.js rename to website/src/components/Playground/src/PositionGuide.js diff --git a/website/src/components/Playground/PositionRecord.js b/website/src/components/Playground/src/PositionRecord.js similarity index 100% rename from website/src/components/Playground/PositionRecord.js rename to website/src/components/Playground/src/PositionRecord.js diff --git a/website/src/components/Playground/Sidebar.css b/website/src/components/Playground/src/Sidebar.css similarity index 100% rename from website/src/components/Playground/Sidebar.css rename to website/src/components/Playground/src/Sidebar.css diff --git a/website/src/components/Playground/Sidebar.js b/website/src/components/Playground/src/Sidebar.js similarity index 100% rename from website/src/components/Playground/Sidebar.js rename to website/src/components/Playground/src/Sidebar.js diff --git a/website/src/components/Playground/URLShortener.css b/website/src/components/Playground/src/URLShortener.css similarity index 100% rename from website/src/components/Playground/URLShortener.css rename to website/src/components/Playground/src/URLShortener.css diff --git a/website/src/components/Playground/URLShortener.js b/website/src/components/Playground/src/URLShortener.js similarity index 100% rename from website/src/components/Playground/URLShortener.js rename to website/src/components/Playground/src/URLShortener.js diff --git a/website/src/components/Playground/YogaEnumSelect.css b/website/src/components/Playground/src/YogaEnumSelect.css similarity index 100% rename from website/src/components/Playground/YogaEnumSelect.css rename to website/src/components/Playground/src/YogaEnumSelect.css diff --git a/website/src/components/Playground/YogaEnumSelect.js b/website/src/components/Playground/src/YogaEnumSelect.js similarity index 100% rename from website/src/components/Playground/YogaEnumSelect.js rename to website/src/components/Playground/src/YogaEnumSelect.js diff --git a/website/src/components/Playground/YogaNode.css b/website/src/components/Playground/src/YogaNode.css similarity index 100% rename from website/src/components/Playground/YogaNode.css rename to website/src/components/Playground/src/YogaNode.css diff --git a/website/src/components/Playground/YogaNode.js b/website/src/components/Playground/src/YogaNode.js similarity index 100% rename from website/src/components/Playground/YogaNode.js rename to website/src/components/Playground/src/YogaNode.js diff --git a/website/src/components/Playground/YogaPositionEditor.css b/website/src/components/Playground/src/YogaPositionEditor.css similarity index 100% rename from website/src/components/Playground/YogaPositionEditor.css rename to website/src/components/Playground/src/YogaPositionEditor.css diff --git a/website/src/components/Playground/YogaPositionEditor.js b/website/src/components/Playground/src/YogaPositionEditor.js similarity index 100% rename from website/src/components/Playground/YogaPositionEditor.js rename to website/src/components/Playground/src/YogaPositionEditor.js diff --git a/website/src/components/Playground/index.css b/website/src/components/Playground/src/index.css similarity index 100% rename from website/src/components/Playground/index.css rename to website/src/components/Playground/src/index.css diff --git a/website/src/components/Playground/index.js b/website/src/components/Playground/src/index.js similarity index 100% rename from website/src/components/Playground/index.js rename to website/src/components/Playground/src/index.js diff --git a/website/src/components/Playground/webpack.config.js b/website/src/components/Playground/webpack.config.js new file mode 100644 index 00000000..7a22c0c9 --- /dev/null +++ b/website/src/components/Playground/webpack.config.js @@ -0,0 +1,63 @@ +const path = require('path'); +const MiniCssExtractPlugin = require('mini-css-extract-plugin'); + +module.exports = { + mode: 'production', + entry: './src/index.js', + output: { + path: path.resolve(__dirname, 'dist'), + filename: 'index.js', + libraryExport: 'default', + libraryTarget: 'commonjs2' + }, + externals: { + // Don't bundle react or react-dom + react: { + commonjs: "react", + commonjs2: "react", + amd: "React", + root: "React" + }, + "react-dom": { + commonjs: "react-dom", + commonjs2: "react-dom", + amd: "ReactDOM", + root: "ReactDOM" + } + }, + plugins: [ + new MiniCssExtractPlugin({ + filename: 'index.css', + }), + ], + module: { + rules: [ + { + test: /\.js$/, + exclude: /node_modules/, + use: { + loader: 'babel-loader', + options: { + "presets": ["@babel/preset-react"], + "plugins": ["@babel/plugin-transform-flow-strip-types", "@babel/plugin-proposal-class-properties"] + } + } + }, + { + test: /\.css$/, + use: [ + { + loader: MiniCssExtractPlugin.loader, + options: { + // you can specify a publicPath here + // by default it uses publicPath in webpackOptions.output + publicPath: '../', + hmr: process.env.NODE_ENV === 'development', + }, + }, + 'css-loader', + ], + } + ] + } +}; diff --git a/website/src/components/Playground/yarn.lock b/website/src/components/Playground/yarn.lock new file mode 100644 index 00000000..9002e096 --- /dev/null +++ b/website/src/components/Playground/yarn.lock @@ -0,0 +1,2960 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" + integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/generator@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.5.5.tgz#873a7f936a3c89491b43536d12245b626664e3cf" + integrity sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ== + dependencies: + "@babel/types" "^7.5.5" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + trim-right "^1.0.1" + +"@babel/helper-builder-react-jsx@^7.3.0": + version "7.3.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz#a1ac95a5d2b3e88ae5e54846bf462eeb81b318a4" + integrity sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw== + dependencies: + "@babel/types" "^7.3.0" + esutils "^2.0.0" + +"@babel/helper-create-class-features-plugin@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.5.5.tgz#401f302c8ddbc0edd36f7c6b2887d8fa1122e5a4" + integrity sha512-ZsxkyYiRA7Bg+ZTRpPvB6AbOFKTFFK4LrvTet8lInm0V468MWCaSYJE+I7v2z2r8KNLtYiV+K5kTCnR7dvyZjg== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-member-expression-to-functions" "^7.5.5" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.5.5" + "@babel/helper-split-export-declaration" "^7.4.4" + +"@babel/helper-function-name@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" + integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== + dependencies: + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-get-function-arity@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" + integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-member-expression-to-functions@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz#1fb5b8ec4453a93c439ee9fe3aeea4a84b76b590" + integrity sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA== + dependencies: + "@babel/types" "^7.5.5" + +"@babel/helper-optimise-call-expression@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" + integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-plugin-utils@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" + integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== + +"@babel/helper-replace-supers@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz#f84ce43df031222d2bad068d2626cb5799c34bc2" + integrity sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.5.5" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/traverse" "^7.5.5" + "@babel/types" "^7.5.5" + +"@babel/helper-split-export-declaration@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" + integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== + dependencies: + "@babel/types" "^7.4.4" + +"@babel/highlight@^7.0.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" + integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.4.4", "@babel/parser@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.5.tgz#02f077ac8817d3df4a832ef59de67565e71cca4b" + integrity sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g== + +"@babel/plugin-proposal-class-properties@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz#a974cfae1e37c3110e71f3c6a2e48b8e71958cd4" + integrity sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.5.5" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-flow@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz#a765f061f803bc48f240c26f8747faf97c26bf7c" + integrity sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-jsx@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7" + integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-flow-strip-types@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.4.4.tgz#d267a081f49a8705fc9146de0768c6b58dccd8f7" + integrity sha512-WyVedfeEIILYEaWGAUWzVNyqG4sfsNooMhXWsu/YzOvVGcsnPb5PguysjJqI3t3qiaYj0BR8T2f5njdjTGe44Q== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.2.0" + +"@babel/plugin-transform-react-display-name@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz#ebfaed87834ce8dc4279609a4f0c324c156e3eb0" + integrity sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-react-jsx-self@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz#461e21ad9478f1031dd5e276108d027f1b5240ba" + integrity sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@babel/plugin-transform-react-jsx-source@^7.0.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.5.0.tgz#583b10c49cf057e237085bcbd8cc960bd83bd96b" + integrity sha512-58Q+Jsy4IDCZx7kqEZuSDdam/1oW8OdDX8f+Loo6xyxdfg1yF0GE2XNJQSTZCaMol93+FBzpWiPEwtbMloAcPg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@babel/plugin-transform-react-jsx@^7.0.0": + version "7.3.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz#f2cab99026631c767e2745a5368b331cfe8f5290" + integrity sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg== + dependencies: + "@babel/helper-builder-react-jsx" "^7.3.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@babel/preset-react@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.0.0.tgz#e86b4b3d99433c7b3e9e91747e2653958bc6b3c0" + integrity sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-self" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + +"@babel/template@^7.1.0": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237" + integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.4.4" + "@babel/types" "^7.4.4" + +"@babel/traverse@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.5.5.tgz#f664f8f368ed32988cd648da9f72d5ca70f165bb" + integrity sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.5.5" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/parser" "^7.5.5" + "@babel/types" "^7.5.5" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + +"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.5.5.tgz#97b9f728e182785909aa4ab56264f090a028d18a" + integrity sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw== + dependencies: + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + +"@webassemblyjs/ast@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" + integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ== + dependencies: + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" + +"@webassemblyjs/floating-point-hex-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" + integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ== + +"@webassemblyjs/helper-api-error@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" + integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA== + +"@webassemblyjs/helper-buffer@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" + integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q== + +"@webassemblyjs/helper-code-frame@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" + integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ== + dependencies: + "@webassemblyjs/wast-printer" "1.8.5" + +"@webassemblyjs/helper-fsm@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" + integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow== + +"@webassemblyjs/helper-module-context@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" + integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g== + dependencies: + "@webassemblyjs/ast" "1.8.5" + mamacro "^0.0.3" + +"@webassemblyjs/helper-wasm-bytecode@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" + integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ== + +"@webassemblyjs/helper-wasm-section@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" + integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + +"@webassemblyjs/ieee754@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" + integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" + integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" + integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw== + +"@webassemblyjs/wasm-edit@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" + integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/helper-wasm-section" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-opt" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + "@webassemblyjs/wast-printer" "1.8.5" + +"@webassemblyjs/wasm-gen@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" + integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" + +"@webassemblyjs/wasm-opt@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" + integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + +"@webassemblyjs/wasm-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" + integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" + +"@webassemblyjs/wast-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" + integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/floating-point-hex-parser" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-code-frame" "1.8.5" + "@webassemblyjs/helper-fsm" "1.8.5" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" + integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +acorn@^6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.1.tgz#3ed8422d6dec09e6121cc7a843ca86a330a86b51" + integrity sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q== + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.1.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" + integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== + +ajv@^6.1.0: + version "6.10.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" + integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +aproba@^1.0.3, aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +atob@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +babel-loader@^8.0.6: + version "8.0.6" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb" + integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw== + dependencies: + find-cache-dir "^2.0.0" + loader-utils "^1.0.2" + mkdirp "^0.5.1" + pify "^4.0.1" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-js@^1.0.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" + integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +bluebird@^3.5.5: + version "3.5.5" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" + integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg= + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +cacache@^11.3.2: + version "11.3.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.3.tgz#8bd29df8c6a718a6ebd2d010da4d7972ae3bbadc" + integrity sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +chalk@^2.0.0, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chokidar@^2.0.2: + version "2.1.6" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.6.tgz#b6cad653a929e244ce8a834244164d241fa954c5" + integrity sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chownr@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" + integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== + +chrome-trace-event@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + dependencies: + tslib "^1.9.0" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +commander@^2.20.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" + integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +console-browserify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA= + dependencies: + date-now "^0.1.4" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +create-ecdh@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +css-loader@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.1.0.tgz#6f008b993b8ce812e6bab57f3cbfdc7a7cf28685" + integrity sha512-MuL8WsF/KSrHCBCYaozBKlx+r7vIfUaDTEreo7wR7Vv3J6N0z6fqWjRk3e/6wjneitXN1r/Y9FTK1psYNOBdJQ== + dependencies: + camelcase "^5.3.1" + cssesc "^3.0.0" + icss-utils "^4.1.1" + loader-utils "^1.2.3" + normalize-path "^3.0.0" + postcss "^7.0.17" + postcss-modules-extract-imports "^2.0.0" + postcss-modules-local-by-default "^3.0.2" + postcss-modules-scope "^2.1.0" + postcss-modules-values "^3.0.0" + postcss-value-parser "^4.0.0" + schema-utils "^2.0.0" + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cyclist@~0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" + integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= + +date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= + +debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +des.js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw= + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +elliptic@^6.0.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.0.tgz#2b8ed4c891b7de3200e14412a5b8248c7af505ca" + integrity sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" + integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + tapable "^1.0.0" + +errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + dependencies: + prr "~1.0.1" + +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" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +eslint-scope@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + dependencies: + estraverse "^4.1.0" + +estraverse@^4.1.0, estraverse@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= + +esutils@^2.0.0, esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= + +events@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" + integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + +figgy-pudding@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" + integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +find-cache-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-minipass@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" + integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ== + dependencies: + minipass "^2.2.1" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.9" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" + integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== + dependencies: + nan "^2.12.1" + node-pre-gyp "^0.12.0" + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob@^7.1.3, glob@^7.1.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b" + integrity sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +hash-base@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-utils@^4.0.0, icss-utils@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" + integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== + dependencies: + postcss "^7.0.14" + +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore-walk@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== + dependencies: + minimatch "^3.0.4" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== + +loader-runner@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +lodash@^4.17.13: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +make-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +mamacro@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" + integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA== + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +memory-fs@^0.4.0, memory-fs@~0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mini-css-extract-plugin@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.0.tgz#81d41ec4fe58c713a96ad7c723cdb2d0bd4d70e1" + integrity sha512-MNpRGbNA52q6U92i0qbVpQNsgk7LExy41MdAlG84FeytfDOtRIf/mCHdEgG8rpTKOaNKiqUnZdlptF469hxqOw== + dependencies: + loader-utils "^1.1.0" + normalize-url "1.9.1" + schema-utils "^1.0.0" + webpack-sources "^1.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +minipass@^2.2.1, minipass@^2.3.5: + version "2.3.5" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" + integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" + integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== + dependencies: + minipass "^2.2.1" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nan@^2.12.1: + version "2.14.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +needle@^2.2.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" + integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + +neo-async@^2.5.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + +node-libs-browser@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-pre-gyp@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" + integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +npm-bundled@^1.0.1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" + integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== + +npm-packlist@^1.1.6: + version "1.4.4" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44" + integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +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" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-tmpdir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-limit@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" + integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== + dependencies: + p-try "^2.0.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pako@~1.0.5: + version "1.0.10" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" + integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== + +parallel-transform@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" + integrity sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY= + dependencies: + cyclist "~0.2.2" + inherits "^2.0.3" + readable-stream "^2.1.5" + +parse-asn1@^5.0.0: + version "5.1.4" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc" + integrity sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw== + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +pbkdf2@^3.0.3: + version "3.0.17" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" + integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-modules-extract-imports@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" + integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== + dependencies: + postcss "^7.0.5" + +postcss-modules-local-by-default@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz#e8a6561be914aaf3c052876377524ca90dbb7915" + integrity sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ== + dependencies: + icss-utils "^4.1.1" + postcss "^7.0.16" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.0" + +postcss-modules-scope@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.1.0.tgz#ad3f5bf7856114f6fcab901b0502e2a2bc39d4eb" + integrity sha512-91Rjps0JnmtUB0cujlc8KIKCsJXWjzuxGeT/+Q2i2HXKZ7nBUeF9YQTZZTNvHVoNYj1AthsjnGLtqDUE0Op79A== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" + +postcss-modules-values@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" + integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== + dependencies: + icss-utils "^4.0.0" + postcss "^7.0.6" + +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" + integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== + dependencies: + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-value-parser@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.0.tgz#99a983d365f7b2ad8d0f9b8c3094926eab4b936d" + integrity sha512-ESPktioptiSUchCKgggAkzdmkgzKfmp0EU8jXH+5kbIUB+unr0Y4CY9SRMvibuvYUBjNh1ACLbxqYNpdTQOteQ== + +postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.17, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.17" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.17.tgz#4da1bdff5322d4a0acaab4d87f3e782436bad31f" + integrity sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2: + version "5.2.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +schema-utils@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.0.1.tgz#1eec2e059556af841b7f3a83b61af13d7a3f9196" + integrity sha512-HJFKJ4JixDpRur06QHwi8uu2kZbng318ahWEKgBjc0ZklcE4FDvmm2wghb448q0IRaABxIESt8vqPFvwgMB80A== + dependencies: + ajv "^6.1.0" + ajv-keywords "^3.1.0" + +semver@^5.3.0, semver@^5.6.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" + integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== + +serialize-javascript@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65" + integrity sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA== + +set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +signal-exit@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-resolve@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== + dependencies: + atob "^2.1.1" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@~0.5.12: + version "0.5.12" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" + integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2": + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string_decoder@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" + integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== + dependencies: + safe-buffer "~5.1.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +tapable@^1.0.0, tapable@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tar@^4: + version "4.4.10" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" + integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.3.5" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + +terser-webpack-plugin@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz#69aa22426299f4b5b3775cbed8cb2c5d419aa1d4" + integrity sha512-W2YWmxPjjkUcOWa4pBEv4OP4er1aeQJlSo2UhtCFQCuRXEHjOFscO8VyWHj9JLlA0RzQb8Y2/Ta78XZvT54uGg== + dependencies: + cacache "^11.3.2" + find-cache-dir "^2.0.0" + is-wsl "^1.1.0" + loader-utils "^1.2.3" + schema-utils "^1.0.0" + serialize-javascript "^1.7.0" + source-map "^0.6.1" + terser "^4.0.0" + webpack-sources "^1.3.0" + worker-farm "^1.7.0" + +terser@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.1.2.tgz#b2656c8a506f7ce805a3f300a2ff48db022fa391" + integrity sha512-jvNoEQSPXJdssFwqPSgWjsOrb+ELoE+ILpHPKXC83tIxOlh2U75F1KuB2luLD/3a6/7K3Vw5pDn+hvu0C4AzSw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +timers-browserify@^2.0.4: + version "2.0.10" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" + integrity sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg== + dependencies: + setimmediate "^1.0.4" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= + +tslib@^1.9.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" + integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" + integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q== + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +vm-browserify@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" + integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw== + +watchpack@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" + integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== + dependencies: + chokidar "^2.0.2" + graceful-fs "^4.1.2" + neo-async "^2.5.0" + +webpack-sources@^1.1.0, webpack-sources@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85" + integrity sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^4.38.0: + version "4.38.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.38.0.tgz#6d77108404b08883c78f4e7e45a43c4e5c47c931" + integrity sha512-lbuFsVOq8PZY+1Ytz/mYOvYOo+d4IJ31hHk/7iyoeWtwN33V+5HYotSH+UIb9tq914ey0Hot7z6HugD+je3sWw== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/wasm-edit" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + acorn "^6.2.0" + ajv "^6.1.0" + ajv-keywords "^3.1.0" + chrome-trace-event "^1.0.0" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.0" + json-parse-better-errors "^1.0.2" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" + micromatch "^3.1.8" + mkdirp "~0.5.0" + neo-async "^2.5.0" + node-libs-browser "^2.0.0" + schema-utils "^1.0.0" + tapable "^1.1.0" + terser-webpack-plugin "^1.1.0" + watchpack "^1.5.0" + webpack-sources "^1.3.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" + integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== diff --git a/website/src/pages/index.js b/website/src/pages/index.js index db4257cf..54a230da 100644 --- a/website/src/pages/index.js +++ b/website/src/pages/index.js @@ -12,7 +12,7 @@ import {Button} from 'antd'; import React from 'react'; import Page from '../components/Page'; import Padded from '../components/Padded'; -import Playground from '../components/Playground'; +import Playground from '../components/Playground/src'; import {Row, Col} from 'antd'; import './index.css'; import ReactNativeLogo from './logos/reactnative.png'; @@ -144,10 +144,7 @@ const AboutSectionOne = () => (

React Native

- +

React-PDF

diff --git a/website/src/pages/playground/index.js b/website/src/pages/playground/index.js index 8826d2d4..02871d5f 100644 --- a/website/src/pages/playground/index.js +++ b/website/src/pages/playground/index.js @@ -10,7 +10,7 @@ import React from 'react'; import Page from '../../components/Page'; -import Playground from '../../components/Playground'; +import Playground from '../../components/Playground/src'; import {Row, Col} from 'antd'; import './index.css'; diff --git a/website/src/templates/withPlayground.js b/website/src/templates/withPlayground.js index ddc80bb7..bd943e75 100644 --- a/website/src/templates/withPlayground.js +++ b/website/src/templates/withPlayground.js @@ -10,9 +10,9 @@ import React, {Component} from 'react'; import Page from '../components/Page'; -import Playground from '../components/Playground'; +import Playground from '../components/Playground/src'; import DocsSidebar from '../components/DocsSidebar'; -import EditValue from '../components/Playground/EditValue'; +import EditValue from '../components/Playground/src/EditValue'; import Link from 'gatsby-link'; import {Button, Icon, Row, Col} from 'antd'; import './index.css'; From dadf0473b796f4aa96c6c74795f2c03534b2a7ac Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Wed, 7 Aug 2019 16:17:00 -0700 Subject: [PATCH 138/347] Add portable bit field implementation Summary: @public Our usage of C++ bit fields has lead to quite some problems with different compiler setups. Problems include sign bits, alignment, etc. Here we introduce a portable implementation as a variadic template, allowing the user to store a number of booleans and enums (defined with `YG_ENUM_SEQ_DECL`) in an unsigned integer type of their choice. This will replace all usages of bit fields across the Yoga code base. Differential Revision: D16647801 fbshipit-source-id: 230ffab500885a3ad662ea8f19e35a5e9357a563 --- tests/BitfieldTest.cpp | 243 +++++++++++++++++++++++++++++++++++++++++ yoga/Bitfield.h | 144 ++++++++++++++++++++++++ 2 files changed, 387 insertions(+) create mode 100644 tests/BitfieldTest.cpp create mode 100644 yoga/Bitfield.h diff --git a/tests/BitfieldTest.cpp b/tests/BitfieldTest.cpp new file mode 100644 index 00000000..6430f159 --- /dev/null +++ b/tests/BitfieldTest.cpp @@ -0,0 +1,243 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#include + +#include +#include + +namespace facebook { +namespace yoga { + +TEST(Bitfield, one_boolean_defaults_to_false) { + constexpr auto bf = Bitfield{}; + + ASSERT_EQ(bf.at<0>(), false); + static_assert( + bf.at<0>() == false, "first boolean member must default to false"); +} + +TEST(Bitfield, one_boolean_can_be_initialized_to_true) { + constexpr auto bf = Bitfield{true}; + + ASSERT_EQ(bf.at<0>(), true); + static_assert( + bf.at<0>() == true, "first boolean member must be initialized to true"); +} + +TEST(Bitfield, one_boolean_can_be_set_to_true) { + auto bf = Bitfield{}; + + bf.at<0>() = true; + ASSERT_EQ(bf.at<0>(), true); +} + +TEST(Bitfield, second_boolean_defaults_to_false) { + constexpr auto bf = Bitfield{}; + + ASSERT_EQ(bf.at<1>(), false); + static_assert( + bf.at<1>() == false, "second boolean member must default to false"); +} + +TEST(Bitfield, second_boolean_can_be_initialized_to_true) { + constexpr auto bf = Bitfield{false, true}; + + ASSERT_EQ(bf.at<0>(), false); + ASSERT_EQ(bf.at<1>(), true); + static_assert( + bf.at<0>() == false, "first boolean member must default to false"); + static_assert( + bf.at<1>() == true, "second boolean member must be initialized to true"); +} + +TEST(Bitfield, second_boolean_can_be_set_to_true) { + auto bf = Bitfield{}; + + bf.at<1>() = true; + ASSERT_EQ(bf.at<0>(), false); + ASSERT_EQ(bf.at<1>(), true); +} + +TEST(Bitfield, third_boolean_defaults_to_false) { + constexpr auto bf = Bitfield{}; + + ASSERT_EQ(bf.at<2>(), false); + static_assert( + bf.at<2>() == false, "second boolean member must default to false"); +} + +TEST(Bitfield, third_boolean_can_be_initialized_to_true) { + constexpr auto bf = Bitfield{false, false, true}; + + ASSERT_EQ(bf.at<0>(), false); + ASSERT_EQ(bf.at<1>(), false); + ASSERT_EQ(bf.at<2>(), true); + static_assert( + bf.at<0>() == false, "first boolean member must default to false"); + static_assert( + bf.at<1>() == false, "second boolean member must default to false"); + static_assert( + bf.at<2>() == true, "second boolean member must be initialized to true"); +} + +TEST(Bitfield, third_boolean_can_be_set_to_true) { + auto bf = Bitfield{}; + + bf.at<2>() = true; + ASSERT_EQ(bf.at<0>(), false); + ASSERT_EQ(bf.at<1>(), false); + ASSERT_EQ(bf.at<2>(), true); +} + +TEST(Bitfield, initializing_boolean_values_does_not_spill_over) { + constexpr auto bf = + Bitfield{false, (bool) 7, false}; + + ASSERT_EQ(bf.at<0>(), false); + ASSERT_EQ(bf.at<1>(), true); + ASSERT_EQ(bf.at<2>(), false); + static_assert( + bf.at<0>() == false, "first boolean member must be initialized to false"); + static_assert( + bf.at<1>() == true, "second boolean member must be initialized to true"); + static_assert( + bf.at<2>() == false, "third boolean member must be initialized to false"); +} + +TEST(Bitfield, setting_boolean_values_does_not_spill_over) { + auto bf = Bitfield{}; + + bf.at<1>() = (bool) 7; + + ASSERT_EQ(bf.at<0>(), false); + ASSERT_EQ(bf.at<1>(), true); + ASSERT_EQ(bf.at<2>(), false); +} + +TEST(Bitfield, first_enum_defaults_to_0) { + constexpr auto bf = Bitfield{}; + + ASSERT_EQ(bf.at<0>(), YGAlignAuto); + static_assert( + bf.at<0>() == YGAlignAuto, "first enum member must default to 0"); +} + +TEST(Bitfield, first_enum_can_be_initialized) { + constexpr auto bf = Bitfield{YGAlignFlexEnd}; + + ASSERT_EQ(bf.at<0>(), YGAlignFlexEnd); + static_assert( + bf.at<0>() == YGAlignFlexEnd, + "first enum member must be initialized to YGAlignFlexEnd"); +} + +TEST(Bitfield, first_enum_can_be_set) { + auto bf = Bitfield{}; + + bf.at<0>() = YGAlignSpaceBetween; + + ASSERT_EQ(bf.at<0>(), YGAlignSpaceBetween); +} + +TEST(Bitfield, second_enum_defaults_to_0) { + constexpr auto bf = Bitfield{}; + + ASSERT_EQ(bf.at<0>(), YGAlignAuto); + ASSERT_EQ(bf.at<1>(), YGEdgeLeft); + static_assert( + bf.at<0>() == YGAlignAuto, "first enum member must default to 0"); + static_assert( + bf.at<1>() == YGEdgeLeft, "second enum member must default to 0"); +} + +TEST(Bitfield, second_enum_can_be_initialized) { + constexpr auto bf = + Bitfield{YGAlignAuto, YGEdgeAll}; + + ASSERT_EQ(bf.at<0>(), YGAlignAuto); + ASSERT_EQ(bf.at<1>(), YGEdgeAll); + static_assert( + bf.at<0>() == YGAlignAuto, "first enum member must default to 0"); + static_assert( + bf.at<1>() == YGEdgeAll, + "second enum member must be initialized to YGEdgeAll"); +} + +TEST(Bitfield, second_enum_can_be_set) { + auto bf = Bitfield{}; + + bf.at<1>() = YGEdgeAll; + + ASSERT_EQ(bf.at<0>(), YGAlignAuto); + ASSERT_EQ(bf.at<1>(), YGEdgeAll); +} + +TEST(Bitfield, third_enum_defaults_to_0) { + constexpr auto bf = Bitfield{}; + + ASSERT_EQ(bf.at<0>(), YGAlignAuto); + ASSERT_EQ(bf.at<1>(), false); + ASSERT_EQ(bf.at<2>(), YGEdgeLeft); + static_assert( + bf.at<0>() == YGAlignAuto, "first enum member must default to 0"); + static_assert( + bf.at<1>() == false, "middle boolean member must default to false"); + static_assert(bf.at<2>() == YGEdgeLeft, "last enum member must default to 0"); +} + +TEST(Bitfield, third_enum_can_be_initialized) { + constexpr auto bf = Bitfield{ + YGAlignAuto, false, YGEdgeVertical}; + + ASSERT_EQ(bf.at<0>(), YGAlignAuto); + ASSERT_EQ(bf.at<1>(), false); + ASSERT_EQ(bf.at<2>(), YGEdgeVertical); + static_assert( + bf.at<0>() == YGAlignAuto, "first enum member must default to 0"); + static_assert( + bf.at<1>() == false, "middle boolean member must default to false"); + static_assert( + bf.at<2>() == YGEdgeVertical, + "second enum member must be initialized to YGEdgeVertical"); +} + +TEST(Bitfield, third_enum_can_be_set) { + auto bf = Bitfield{}; + + bf.at<2>() = YGEdgeVertical; + + ASSERT_EQ(bf.at<0>(), YGAlignAuto); + ASSERT_EQ(bf.at<1>(), false); + ASSERT_EQ(bf.at<2>(), YGEdgeVertical); +} + +TEST(Bitfield, initializing_values_does_not_spill_over) { + constexpr auto bf = Bitfield{ + (YGAlign) 0, (YGEdge) 0xffffff, false}; + + ASSERT_EQ(bf.at<0>(), (YGAlign) 0); + ASSERT_EQ(bf.at<1>(), 0xf); + ASSERT_EQ(bf.at<2>(), false); + static_assert(bf.at<0>() == 0, "first enum member must be initialized to 0"); + static_assert( + bf.at<1>() == 0xf, "second member must be initialized to YGEdgeVertical"); + static_assert( + bf.at<2>() == false, "boolean member must be initialized to false"); +} + +TEST(Bitfield, setting_values_does_not_spill_over) { + auto bf = Bitfield{}; + + bf.at<1>() = (YGEdge) 0xffffff; + + ASSERT_EQ(bf.at<0>(), 0); + ASSERT_EQ(bf.at<1>(), 0xf); + ASSERT_EQ(bf.at<2>(), false); +} + +} // namespace yoga +} // namespace facebook diff --git a/yoga/Bitfield.h b/yoga/Bitfield.h new file mode 100644 index 00000000..e5b40267 --- /dev/null +++ b/yoga/Bitfield.h @@ -0,0 +1,144 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#pragma once + +#include +#include +#include +#include + +namespace facebook { +namespace yoga { + +namespace detail { + +constexpr size_t log2ceil(size_t n) { + return n < 1 ? 0 : (1 + log2ceil(n / 2)); +} + +// The number of bits necessary to represent enums defined with YG_ENUM_SEQ_DECL +template +constexpr size_t bitWidth() { + static_assert( + enums::count() > 0, "Enums must have at least one entries"); + return log2ceil(enums::count() - 1); +} + +// Number of bits needed for a boolean +template <> +constexpr size_t bitWidth() { + return 1; +} + +template +struct BitTraits {}; + +template +struct BitTraits { + // Base cases + static constexpr size_t width(size_t) { return 0; } + static constexpr size_t shift(size_t) { return 0; } +}; + +template +struct BitTraits { + using Rest = BitTraits; + + static constexpr size_t width(size_t idx) { + return idx == 0 ? bitWidth() : Rest::width(idx - 1); + } + + static constexpr size_t shift(size_t idx) { + return idx == 0 ? Rest::width(0) + Rest::shift(0) : Rest::shift(idx - 1); + } + + static constexpr U mask(size_t idx) { + return ((U{1} << width(idx)) - 1) << shift(idx); + } +}; + +template +struct IndexedType { + using Type = typename IndexedType::Type; +}; + +template +struct IndexedType<0, T, Ts...> { + using Type = T; +}; + +} // namespace detail + +template +class Bitfield { + static_assert( + std::is_integral::value, + "Bitfield needs an integral storage type"); + static_assert( + std::is_unsigned::value, + "Bitfield needs an unsigned storage type"); + static_assert(sizeof...(Fields) > 0, "Bitfield needs at least one member"); + + using BitTraits = detail::BitTraits; + +#if !defined(_MSC_VER) || _MSC_VER > 1914 + static_assert( + BitTraits::shift(0) + BitTraits::width(0) <= + std::numeric_limits::digits, + "Specified storage type is too narrow to hold all types"); +#endif + + template + using TypeAt = typename detail::IndexedType::Type; + + template + class Ref { + Bitfield& bitfield_; + + public: + Ref(Bitfield& bitfield) : bitfield_(bitfield) {} + Ref& operator=(TypeAt value) { + bitfield_.storage_ = (bitfield_.storage_ & ~BitTraits::mask(Idx)) | + ((value << BitTraits::shift(Idx)) & BitTraits::mask(Idx)); + return *this; + } + operator TypeAt() const { + return const_cast(bitfield_).at(); + } + }; + + template + static constexpr Storage initStorage(Value value, Values... values) { + return ((value << BitTraits::shift(Idx)) & BitTraits::mask(Idx)) | + initStorage(values...); + } + + template + static constexpr Storage initStorage() { + return Storage{0}; + } + + Storage storage_ = 0; + +public: + constexpr Bitfield() = default; + constexpr Bitfield(Fields... values) : storage_{initStorage<0>(values...)} {} + + template + constexpr TypeAt at() const { + return static_cast>( + (storage_ & BitTraits::mask(Idx)) >> BitTraits::shift(Idx)); + } + + template + Ref at() { + return {*this}; + } +}; + +} // namespace yoga +} // namespace facebook From 3ed9bec05c3a7afaae0faf0986d980e17d3099e5 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Wed, 7 Aug 2019 16:17:00 -0700 Subject: [PATCH 139/347] Remove style property bitmask Summary: @public Removes the style properties bitmask. We have used this for experimentation, and it's no longer necessary. This simplifyies the code, and allows us to cut over to `Bitfield.h` more easily. Reviewed By: astreet Differential Revision: D16648862 fbshipit-source-id: 17c0899807af976f4ba34db54f8f0f6a3cd92519 --- tests/YGStyleAccessorsTest.cpp | 141 +-------------------------------- yoga/YGStyle.h | 112 +++++--------------------- 2 files changed, 21 insertions(+), 232 deletions(-) diff --git a/tests/YGStyleAccessorsTest.cpp b/tests/YGStyleAccessorsTest.cpp index b1f1e77b..21bf066e 100644 --- a/tests/YGStyleAccessorsTest.cpp +++ b/tests/YGStyleAccessorsTest.cpp @@ -11,22 +11,9 @@ #include #include -#include - -using AssignedProps = - std::remove_reference::type; - -namespace { -constexpr AssignedProps setBits(int from, int n) { - return n > 0 ? (setBits(from, n - 1) | AssignedProps{1ull << (from + n - 1)}) - : 0; -} -} // namespace - #define ACCESSOR_TESTS_1(NAME, X) \ style.NAME() = X; \ - ASSERT_EQ(style.NAME(), X); \ - ASSERT_EQ(style.assignedProps(), AssignedProps{1ull << YGStyle::NAME##Bit}); + ASSERT_EQ(style.NAME(), X); #define ACCESSOR_TESTS_2(NAME, X, ...) \ ACCESSOR_TESTS_1(NAME, X); \ ACCESSOR_TESTS_1(NAME, __VA_ARGS__); @@ -48,17 +35,9 @@ constexpr AssignedProps setBits(int from, int n) { auto style = YGStyle{}; \ style.NAME()[IDX] = X; \ ASSERT_EQ(style.NAME()[IDX], X); \ - ASSERT_EQ( \ - style.assignedProps(), \ - AssignedProps{1ull << (YGStyle::NAME##Bit + IDX)}); \ auto asArray = decltype(std::declval().NAME()){X}; \ style.NAME() = asArray; \ ASSERT_EQ(static_cast(style.NAME()), asArray); \ - ASSERT_EQ( \ - style.assignedProps(), \ - AssignedProps{setBits( \ - YGStyle::NAME##Bit, \ - facebook::yoga::enums::count())}); \ } #define INDEX_ACCESSOR_TESTS_2(NAME, IDX, X, Y) \ @@ -93,7 +72,6 @@ constexpr AssignedProps setBits(int from, int n) { #define INDEX_ACCESSOR_TEST(NAME, DEFAULT_VAL, IDX, ...) \ TEST(YGStyle, style_##NAME##_access) { \ ASSERT_EQ(YGStyle{}.NAME()[IDX], DEFAULT_VAL); \ - ASSERT_EQ(YGStyle{}.assignedProps(), 0); \ INDEX_ACCESSOR_TESTS(__VA_ARGS__)(NAME, IDX, __VA_ARGS__) \ } @@ -270,122 +248,5 @@ ACCESSOR_TEST( YGFloatOptional{0.0f}, YGFloatOptional{}); -TEST(YGStyle, set_properties_default_to_0) { - ASSERT_EQ(YGStyle{}.assignedProps(), AssignedProps{0}); -} - -TEST(YGStyle, set_properties_reflects_all_set_properties) { - auto style = YGStyle{}; - - style.direction() = YGDirectionRTL; - style.justifyContent() = YGJustifySpaceAround; - style.flexWrap() = YGWrapWrap; - style.padding()[YGEdgeVertical] = YGValue{1, YGUnitPoint}; - style.minDimensions()[YGDimensionHeight] = YGValue{1, YGUnitPercent}; - style.aspectRatio() = YGFloatOptional{1.23}; - - ASSERT_EQ( - style.assignedProps(), - AssignedProps{1ull << YGStyle::directionBit | - 1ull << YGStyle::justifyContentBit | - 1ull << YGStyle::flexWrapBit | - 1ull << (YGStyle::paddingBit + YGEdgeVertical) | - 1ull << (YGStyle::minDimensionsBit + YGDimensionHeight) | - 1ull << YGStyle::aspectRatioBit}); -} - -TEST(YGStyle, directionBit) { - constexpr auto directionBit = YGStyle::directionBit; - ASSERT_EQ(directionBit, 0); -} -TEST(YGStyle, flexDirectionBit) { - constexpr auto flexDirectionBit = YGStyle::flexDirectionBit; - ASSERT_EQ(flexDirectionBit, 1); -} -TEST(YGStyle, justifyContentBit) { - constexpr auto justifyContentBit = YGStyle::justifyContentBit; - ASSERT_EQ(justifyContentBit, 2); -} -TEST(YGStyle, alignContentBit) { - constexpr auto alignContentBit = YGStyle::alignContentBit; - ASSERT_EQ(alignContentBit, 3); -} -TEST(YGStyle, alignItemsBit) { - constexpr auto alignItemsBit = YGStyle::alignItemsBit; - ASSERT_EQ(alignItemsBit, 4); -} -TEST(YGStyle, alignSelfBit) { - constexpr auto alignSelfBit = YGStyle::alignSelfBit; - ASSERT_EQ(alignSelfBit, 5); -} -TEST(YGStyle, positionTypeBit) { - constexpr auto positionTypeBit = YGStyle::positionTypeBit; - ASSERT_EQ(positionTypeBit, 6); -} -TEST(YGStyle, flexWrapBit) { - constexpr auto flexWrapBit = YGStyle::flexWrapBit; - ASSERT_EQ(flexWrapBit, 7); -} -TEST(YGStyle, overflowBit) { - constexpr auto overflowBit = YGStyle::overflowBit; - ASSERT_EQ(overflowBit, 8); -} -TEST(YGStyle, displayBit) { - constexpr auto displayBit = YGStyle::displayBit; - ASSERT_EQ(displayBit, 9); -} -TEST(YGStyle, flexBit) { - constexpr auto flexBit = YGStyle::flexBit; - ASSERT_EQ(flexBit, 10); -} -TEST(YGStyle, flexGrowBit) { - constexpr auto flexGrowBit = YGStyle::flexGrowBit; - ASSERT_EQ(flexGrowBit, 11); -} -TEST(YGStyle, flexShrinkBit) { - constexpr auto flexShrinkBit = YGStyle::flexShrinkBit; - ASSERT_EQ(flexShrinkBit, 12); -} -TEST(YGStyle, flexBasisBit) { - constexpr auto flexBasisBit = YGStyle::flexBasisBit; - ASSERT_EQ(flexBasisBit, 13); -} -TEST(YGStyle, marginBit) { - constexpr auto marginBit = YGStyle::marginBit; - ASSERT_EQ(marginBit, 14); -} -TEST(YGStyle, positionBit) { - constexpr auto positionBit = YGStyle::positionBit; - ASSERT_EQ(positionBit, 23); -} -TEST(YGStyle, paddingBit) { - constexpr auto paddingBit = YGStyle::paddingBit; - ASSERT_EQ(paddingBit, 32); -} -TEST(YGStyle, borderBit) { - constexpr auto borderBit = YGStyle::borderBit; - ASSERT_EQ(borderBit, 41); -} -TEST(YGStyle, dimensionsBit) { - constexpr auto dimensionsBit = YGStyle::dimensionsBit; - ASSERT_EQ(dimensionsBit, 50); -} -TEST(YGStyle, maxDimensionsBit) { - constexpr auto maxDimensionsBit = YGStyle::maxDimensionsBit; - ASSERT_EQ(maxDimensionsBit, 52); -} -TEST(YGStyle, minDimensionsBit) { - constexpr auto minDimensionsBit = YGStyle::minDimensionsBit; - ASSERT_EQ(minDimensionsBit, 54); -} -TEST(YGStyle, aspectRatioBit) { - constexpr auto aspectRatioBit = YGStyle::aspectRatioBit; - ASSERT_EQ(aspectRatioBit, 56); -} -TEST(YGStyle, numStyles) { - constexpr auto numStyles = YGStyle::numStyles; - ASSERT_EQ(numStyles, 57); -} - } // namespace yoga } // namespace facebook diff --git a/yoga/YGStyle.h b/yoga/YGStyle.h index ce381604..22196556 100644 --- a/yoga/YGStyle.h +++ b/yoga/YGStyle.h @@ -7,7 +7,6 @@ #pragma once #include #include -#include #include #include #include "CompactValue.h" @@ -26,12 +25,8 @@ decltype(FIELD##_) get_##FIELD() const { return FIELD##_; } \ void set_##FIELD(decltype(FIELD##_) x) { FIELD##_ = x; } -#define BITFIELD_REF(FIELD) \ - BitfieldRef< \ - decltype(FIELD##_), \ - &YGStyle::get_##FIELD, \ - &YGStyle::set_##FIELD, \ - FIELD##Bit> +#define BITFIELD_REF(FIELD) \ + BitfieldRef class YGStyle { template @@ -39,28 +34,21 @@ class YGStyle { facebook::yoga::detail::Values()>; using CompactValue = facebook::yoga::detail::CompactValue; - static constexpr uint64_t allBits(int fromBit, int toBit) { - return fromBit < toBit - ? (uint64_t{1} << fromBit) | allBits(fromBit + 1, toBit) - : 0; - } - public: using Dimensions = Values; using Edges = Values; - template + template struct Ref { YGStyle& style; operator T() const { return style.*Prop; } - Ref& operator=(T value) { + Ref& operator=(T value) { style.*Prop = value; - style.assignedProps_.set(PropBit); return *this; } }; - template YGStyle::*Prop, int PropBit> + template YGStyle::*Prop> struct IdxRef { struct Ref { YGStyle& style; @@ -69,16 +57,13 @@ public: operator YGValue() const { return (style.*Prop)[idx]; } Ref& operator=(CompactValue value) { (style.*Prop)[idx] = value; - style.assignedProps_.set(PropBit + idx); return *this; } }; YGStyle& style; - IdxRef& operator=(const Values& values) { + IdxRef& operator=(const Values& values) { style.*Prop = values; - style.assignedProps_ |= - allBits(PropBit, PropBit + facebook::yoga::enums::count()); return *this; } operator const Values&() const { return style.*Prop; } @@ -86,18 +71,13 @@ public: CompactValue operator[](Idx idx) const { return (style.*Prop)[idx]; } }; - template < - typename T, - T (YGStyle::*Get)() const, - void (YGStyle::*Set)(T), - int PropBit> + template struct BitfieldRef { YGStyle& style; operator T() const { return (style.*Get)(); } - BitfieldRef& operator=(T x) { + BitfieldRef& operator=(T x) { (style.*Set)(x); - style.assignedProps_.set(PropBit); return *this; } }; @@ -125,41 +105,7 @@ public: ~YGStyle() = default; - static constexpr int directionBit = 0; - static constexpr int flexDirectionBit = directionBit + 1; - static constexpr int justifyContentBit = flexDirectionBit + 1; - static constexpr int alignContentBit = justifyContentBit + 1; - static constexpr int alignItemsBit = alignContentBit + 1; - static constexpr int alignSelfBit = alignItemsBit + 1; - static constexpr int positionTypeBit = alignSelfBit + 1; - static constexpr int flexWrapBit = positionTypeBit + 1; - static constexpr int overflowBit = flexWrapBit + 1; - static constexpr int displayBit = overflowBit + 1; - static constexpr int flexBit = displayBit + 1; - static constexpr int flexGrowBit = flexBit + 1; - static constexpr int flexShrinkBit = flexGrowBit + 1; - static constexpr int flexBasisBit = flexShrinkBit + 1; - static constexpr int marginBit = flexBasisBit + 1; - static constexpr int positionBit = - marginBit + facebook::yoga::enums::count(); - static constexpr int paddingBit = - positionBit + facebook::yoga::enums::count(); - static constexpr int borderBit = - paddingBit + facebook::yoga::enums::count(); - static constexpr int dimensionsBit = - borderBit + facebook::yoga::enums::count(); - static constexpr int maxDimensionsBit = - dimensionsBit + facebook::yoga::enums::count(); - static constexpr int minDimensionsBit = - maxDimensionsBit + facebook::yoga::enums::count(); - static constexpr int aspectRatioBit = - minDimensionsBit + facebook::yoga::enums::count(); - - static constexpr int numStyles = aspectRatioBit + 1; - private: - std::bitset assignedProps_; - /* Some platforms don't support enum bitfields, so please use BITFIELD_ENUM_SIZED(BITS_COUNT) */ YGDirection direction_ BITFIELD_ENUM_SIZED(2); @@ -198,10 +144,6 @@ private: BITFIELD_ACCESSORS(display); public: - const decltype(assignedProps_)& assignedProps() const { - return assignedProps_; - } - // for library users needing a type using ValueRepr = std::remove_reference::type; @@ -236,59 +178,45 @@ public: BITFIELD_REF(display) display() { return {*this}; } YGFloatOptional flex() const { return flex_; } - Ref flex() { return {*this}; } + Ref flex() { return {*this}; } YGFloatOptional flexGrow() const { return flexGrow_; } - Ref flexGrow() { - return {*this}; - } + Ref flexGrow() { return {*this}; } YGFloatOptional flexShrink() const { return flexShrink_; } - Ref flexShrink() { - return {*this}; - } + Ref flexShrink() { return {*this}; } CompactValue flexBasis() const { return flexBasis_; } - Ref flexBasis() { - return {*this}; - } + Ref flexBasis() { return {*this}; } const Edges& margin() const { return margin_; } - IdxRef margin() { return {*this}; } + IdxRef margin() { return {*this}; } const Edges& position() const { return position_; } - IdxRef position() { - return {*this}; - } + IdxRef position() { return {*this}; } const Edges& padding() const { return padding_; } - IdxRef padding() { return {*this}; } + IdxRef padding() { return {*this}; } const Edges& border() const { return border_; } - IdxRef border() { return {*this}; } + IdxRef border() { return {*this}; } const Dimensions& dimensions() const { return dimensions_; } - IdxRef dimensions() { - return {*this}; - } + IdxRef dimensions() { return {*this}; } const Dimensions& minDimensions() const { return minDimensions_; } - IdxRef - minDimensions() { + IdxRef minDimensions() { return {*this}; } const Dimensions& maxDimensions() const { return maxDimensions_; } - IdxRef - maxDimensions() { + IdxRef maxDimensions() { return {*this}; } // Yoga specific properties, not compatible with flexbox specification YGFloatOptional aspectRatio() const { return aspectRatio_; } - Ref aspectRatio() { - return {*this}; - } + Ref aspectRatio() { return {*this}; } }; bool operator==(const YGStyle& lhs, const YGStyle& rhs); From 884e064a993fc059749b426e673051adc2f6ae17 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Wed, 7 Aug 2019 16:17:00 -0700 Subject: [PATCH 140/347] Use `Bitfield` in `YGNode` and `YGStyle` Summary: @public Replaces the usage of C++ bitfields with our portable `Bitfield` class. Reviewed By: SidharthGuglani Differential Revision: D16649875 fbshipit-source-id: 539f016d5e1c9a8c48cc9bacbbf6ed985e385e69 --- yoga/Bitfield.h | 28 ++++----- yoga/YGNode.cpp | 38 +++++------- yoga/YGNode.h | 61 +++++++++---------- yoga/YGStyle.h | 157 ++++++++++++++++++++---------------------------- 4 files changed, 125 insertions(+), 159 deletions(-) diff --git a/yoga/Bitfield.h b/yoga/Bitfield.h index e5b40267..da85a5bf 100644 --- a/yoga/Bitfield.h +++ b/yoga/Bitfield.h @@ -95,6 +95,20 @@ class Bitfield { template using TypeAt = typename detail::IndexedType::Type; + template + static constexpr Storage initStorage(Value value, Values... values) { + return ((value << BitTraits::shift(Idx)) & BitTraits::mask(Idx)) | + initStorage(values...); + } + + template + static constexpr Storage initStorage() { + return Storage{0}; + } + + Storage storage_ = 0; + +public: template class Ref { Bitfield& bitfield_; @@ -111,20 +125,6 @@ class Bitfield { } }; - template - static constexpr Storage initStorage(Value value, Values... values) { - return ((value << BitTraits::shift(Idx)) & BitTraits::mask(Idx)) | - initStorage(values...); - } - - template - static constexpr Storage initStorage() { - return Storage{0}; - } - - Storage storage_ = 0; - -public: constexpr Bitfield() = default; constexpr Bitfield(Fields... values) : storage_{initStorage<0>(values...)} {} diff --git a/yoga/YGNode.cpp b/yoga/YGNode.cpp index 8941487f..969d1752 100644 --- a/yoga/YGNode.cpp +++ b/yoga/YGNode.cpp @@ -15,14 +15,7 @@ using facebook::yoga::detail::CompactValue; YGNode::YGNode(YGNode&& node) { context_ = node.context_; - hasNewLayout_ = node.hasNewLayout_; - isReferenceBaseline_ = node.isReferenceBaseline_; - isDirty_ = node.isDirty_; - nodeType_ = node.nodeType_; - measureUsesContext_ = node.measureUsesContext_; - baselineUsesContext_ = node.baselineUsesContext_; - printUsesContext_ = node.printUsesContext_; - useWebDefaults_ = node.useWebDefaults_; + flags_ = node.flags_; measure_ = node.measure_; baseline_ = node.baseline_; print_ = node.print_; @@ -48,7 +41,7 @@ YGNode::YGNode(const YGNode& node, YGConfigRef config) : YGNode{node} { void YGNode::print(void* printContext) { if (print_.noContext != nullptr) { - if (printUsesContext_) { + if (flags_.at()) { print_.withContext(this, printContext); } else { print_.noContext(this); @@ -154,14 +147,14 @@ YGSize YGNode::measure( YGMeasureMode heightMode, void* layoutContext) { - return measureUsesContext_ + return flags_.at() ? measure_.withContext( this, width, widthMode, height, heightMode, layoutContext) : measure_.noContext(this, width, widthMode, height, heightMode); } float YGNode::baseline(float width, float height, void* layoutContext) { - return baselineUsesContext_ + return flags_.at() ? baseline_.withContext(this, width, height, layoutContext) : baseline_.noContext(this, width, height); } @@ -172,7 +165,7 @@ void YGNode::setMeasureFunc(decltype(YGNode::measure_) measureFunc) { if (measureFunc.noContext == nullptr) { // TODO: t18095186 Move nodeType to opt-in function and mark appropriate // places in Litho - nodeType_ = YGNodeTypeDefault; + flags_.at() = YGNodeTypeDefault; } else { YGAssertWithNode( this, @@ -188,14 +181,14 @@ void YGNode::setMeasureFunc(decltype(YGNode::measure_) measureFunc) { } void YGNode::setMeasureFunc(YGMeasureFunc measureFunc) { - measureUsesContext_ = false; + flags_.at() = false; decltype(YGNode::measure_) m; m.noContext = measureFunc; setMeasureFunc(m); } void YGNode::setMeasureFunc(MeasureWithContextFn measureFunc) { - measureUsesContext_ = true; + flags_.at() = true; decltype(YGNode::measure_) m; m.withContext = measureFunc; setMeasureFunc(m); @@ -214,10 +207,10 @@ void YGNode::insertChild(YGNodeRef child, uint32_t index) { } void YGNode::setDirty(bool isDirty) { - if (isDirty == isDirty_) { + if (isDirty == flags_.at()) { return; } - isDirty_ = isDirty; + flags_.at() = isDirty; if (isDirty && dirtied_) { dirtied_(this); } @@ -357,7 +350,7 @@ YGValue YGNode::resolveFlexBasisPtr() const { return flexBasis; } if (!style_.flex().isUndefined() && style_.flex().unwrap() > 0.0f) { - return useWebDefaults_ ? YGValueAuto : YGValueZero; + return flags_.at() ? YGValueAuto : YGValueZero; } return YGValueAuto; } @@ -396,7 +389,7 @@ void YGNode::cloneChildrenIfNeeded(void* cloneContext) { } void YGNode::markDirtyAndPropogate() { - if (!isDirty_) { + if (!flags_.at()) { setDirty(true); setLayoutComputedFlexBasis(YGFloatOptional()); if (owner_) { @@ -406,7 +399,7 @@ void YGNode::markDirtyAndPropogate() { } void YGNode::markDirtyAndPropogateDownwards() { - isDirty_ = true; + flags_.at() = true; for_each(children_.begin(), children_.end(), [](YGNodeRef childNode) { childNode->markDirtyAndPropogateDownwards(); }); @@ -433,11 +426,12 @@ float YGNode::resolveFlexShrink() const { if (!style_.flexShrink().isUndefined()) { return style_.flexShrink().unwrap(); } - if (!useWebDefaults_ && !style_.flex().isUndefined() && + if (!flags_.at() && !style_.flex().isUndefined() && style_.flex().unwrap() < 0.0f) { return -style_.flex().unwrap(); } - return useWebDefaults_ ? kWebDefaultFlexShrink : kDefaultFlexShrink; + return flags_.at() ? kWebDefaultFlexShrink + : kDefaultFlexShrink; } bool YGNode::isNodeFlexible() { @@ -582,7 +576,7 @@ void YGNode::reset() { clearChildren(); - auto webDefaults = useWebDefaults_; + auto webDefaults = flags_.at(); *this = YGNode{getConfig()}; if (webDefaults) { useWebDefaults(); diff --git a/yoga/YGNode.h b/yoga/YGNode.h index cc11cc88..cc5f3686 100644 --- a/yoga/YGNode.h +++ b/yoga/YGNode.h @@ -7,6 +7,7 @@ #pragma once #include #include +#include "Bitfield.h" #include "CompactValue.h" #include "YGConfig.h" #include "YGLayout.h" @@ -23,15 +24,20 @@ struct YGNode { using PrintWithContextFn = void (*)(YGNode*, void*); private: + static constexpr size_t hasNewLayout_ = 0; + static constexpr size_t isReferenceBaseline_ = 1; + static constexpr size_t isDirty_ = 2; + static constexpr size_t nodeType_ = 3; + static constexpr size_t measureUsesContext_ = 4; + static constexpr size_t baselineUsesContext_ = 5; + static constexpr size_t printUsesContext_ = 6; + static constexpr size_t useWebDefaults_ = 7; + void* context_ = nullptr; - bool hasNewLayout_ : 1; - bool isReferenceBaseline_ : 1; - bool isDirty_ : 1; - YGNodeType nodeType_ : 1; - bool measureUsesContext_ : 1; - bool baselineUsesContext_ : 1; - bool printUsesContext_ : 1; - bool useWebDefaults_ : 1; + using Flags = facebook::yoga:: + Bitfield; + Flags flags_ = + {true, false, false, YGNodeTypeDefault, false, false, false, false}; uint8_t reserved_ = 0; union { YGMeasureFunc noContext; @@ -63,7 +69,7 @@ private: void setBaselineFunc(decltype(baseline_)); void useWebDefaults() { - useWebDefaults_ = true; + flags_.at() = true; style_.flexDirection() = YGFlexDirectionRow; style_.alignContent() = YGAlignStretch; } @@ -79,17 +85,8 @@ private: public: YGNode() : YGNode{YGConfigGetDefault()} {} - explicit YGNode(const YGConfigRef config) - : hasNewLayout_{true}, - isReferenceBaseline_{false}, - isDirty_{false}, - nodeType_{YGNodeTypeDefault}, - measureUsesContext_{false}, - baselineUsesContext_{false}, - printUsesContext_{false}, - useWebDefaults_{config->useWebDefaults}, - config_{config} { - if (useWebDefaults_) { + explicit YGNode(const YGConfigRef config) : config_{config} { + if (config->useWebDefaults) { useWebDefaults(); } }; @@ -116,9 +113,9 @@ public: void print(void*); - bool getHasNewLayout() const { return hasNewLayout_; } + bool getHasNewLayout() const { return flags_.at(); } - YGNodeType getNodeType() const { return nodeType_; } + YGNodeType getNodeType() const { return flags_.at(); } bool hasMeasureFunc() const noexcept { return measure_.noContext != nullptr; } @@ -144,7 +141,7 @@ public: uint32_t getLineIndex() const { return lineIndex_; } - bool isReferenceBaseline() { return isReferenceBaseline_; } + bool isReferenceBaseline() { return flags_.at(); } // returns the YGNodeRef that owns this YGNode. An owner is used to identify // the YogaTree that a YGNode belongs to. This method will return the parent @@ -177,7 +174,7 @@ public: YGConfigRef getConfig() const { return config_; } - bool isDirty() const { return isDirty_; } + bool isDirty() const { return flags_.at(); } std::array getResolvedDimensions() const { return resolvedDimensions_; @@ -225,17 +222,19 @@ public: void setPrintFunc(YGPrintFunc printFunc) { print_.noContext = printFunc; - printUsesContext_ = false; + flags_.at() = false; } void setPrintFunc(PrintWithContextFn printFunc) { print_.withContext = printFunc; - printUsesContext_ = true; + flags_.at() = true; } void setPrintFunc(std::nullptr_t) { setPrintFunc(YGPrintFunc{nullptr}); } - void setHasNewLayout(bool hasNewLayout) { hasNewLayout_ = hasNewLayout; } + void setHasNewLayout(bool hasNewLayout) { + flags_.at() = hasNewLayout; + } - void setNodeType(YGNodeType nodeType) { nodeType_ = nodeType; } + void setNodeType(YGNodeType nodeType) { flags_.at() = nodeType; } void setMeasureFunc(YGMeasureFunc measureFunc); void setMeasureFunc(MeasureWithContextFn); @@ -244,11 +243,11 @@ public: } void setBaselineFunc(YGBaselineFunc baseLineFunc) { - baselineUsesContext_ = false; + flags_.at() = false; baseline_.noContext = baseLineFunc; } void setBaselineFunc(BaselineWithContextFn baseLineFunc) { - baselineUsesContext_ = true; + flags_.at() = true; baseline_.withContext = baseLineFunc; } void setBaselineFunc(std::nullptr_t) { @@ -264,7 +263,7 @@ public: void setLineIndex(uint32_t lineIndex) { lineIndex_ = lineIndex; } void setIsReferenceBaseline(bool isReferenceBaseline) { - isReferenceBaseline_ = isReferenceBaseline; + flags_.at() = isReferenceBaseline; } void setOwner(YGNodeRef owner) { owner_ = owner; } diff --git a/yoga/YGStyle.h b/yoga/YGStyle.h index 22196556..b497b5c1 100644 --- a/yoga/YGStyle.h +++ b/yoga/YGStyle.h @@ -9,25 +9,13 @@ #include #include #include +#include "Bitfield.h" #include "CompactValue.h" #include "YGEnums.h" #include "YGFloatOptional.h" #include "Yoga-internal.h" #include "Yoga.h" -#if !defined(ENUM_BITFIELDS_NOT_SUPPORTED) -#define BITFIELD_ENUM_SIZED(num) : num -#else -#define BITFIELD_ENUM_SIZED(num) -#endif - -#define BITFIELD_ACCESSORS(FIELD) \ - decltype(FIELD##_) get_##FIELD() const { return FIELD##_; } \ - void set_##FIELD(decltype(FIELD##_) x) { FIELD##_ = x; } - -#define BITFIELD_REF(FIELD) \ - BitfieldRef - class YGStyle { template using Values = @@ -71,53 +59,43 @@ public: CompactValue operator[](Idx idx) const { return (style.*Prop)[idx]; } }; - template - struct BitfieldRef { - YGStyle& style; - - operator T() const { return (style.*Get)(); } - BitfieldRef& operator=(T x) { - (style.*Set)(x); - return *this; - } - }; - -#ifdef __clang__ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wbitfield-constant-conversion" -#endif - - YGStyle() - : direction_(YGDirectionInherit), - flexDirection_(YGFlexDirectionColumn), - justifyContent_(YGJustifyFlexStart), - alignContent_(YGAlignFlexStart), - alignItems_(YGAlignStretch), - alignSelf_(YGAlignAuto), - positionType_(YGPositionTypeRelative), - flexWrap_(YGWrapNoWrap), - overflow_(YGOverflowVisible), - display_(YGDisplayFlex) {} - -#ifdef __clang__ -#pragma clang diagnostic pop -#endif - + YGStyle() = default; ~YGStyle() = default; private: - /* Some platforms don't support enum bitfields, - so please use BITFIELD_ENUM_SIZED(BITS_COUNT) */ - YGDirection direction_ BITFIELD_ENUM_SIZED(2); - YGFlexDirection flexDirection_ BITFIELD_ENUM_SIZED(2); - YGJustify justifyContent_ BITFIELD_ENUM_SIZED(3); - YGAlign alignContent_ BITFIELD_ENUM_SIZED(3); - YGAlign alignItems_ BITFIELD_ENUM_SIZED(3); - YGAlign alignSelf_ BITFIELD_ENUM_SIZED(3); - YGPositionType positionType_ BITFIELD_ENUM_SIZED(1); - YGWrap flexWrap_ BITFIELD_ENUM_SIZED(2); - YGOverflow overflow_ BITFIELD_ENUM_SIZED(2); - YGDisplay display_ BITFIELD_ENUM_SIZED(1); + static constexpr size_t directionIdx = 0; + static constexpr size_t flexDirectionIdx = 1; + static constexpr size_t justifyContentIdx = 2; + static constexpr size_t alignContentIdx = 3; + static constexpr size_t alignItemsIdx = 4; + static constexpr size_t alignSelfIdx = 5; + static constexpr size_t positionTypeIdx = 6; + static constexpr size_t flexWrapIdx = 7; + static constexpr size_t overflowIdx = 8; + static constexpr size_t displayIdx = 9; + using Flags = facebook::yoga::Bitfield< + uint32_t, + YGDirection, + YGFlexDirection, + YGJustify, + YGAlign, + YGAlign, + YGAlign, + YGPositionType, + YGWrap, + YGOverflow, + YGDisplay>; + + Flags flags_ = {YGDirectionInherit, + YGFlexDirectionColumn, + YGJustifyFlexStart, + YGAlignFlexStart, + YGAlignStretch, + YGAlignAuto, + YGPositionTypeRelative, + YGWrapNoWrap, + YGOverflowVisible, + YGDisplayFlex}; YGFloatOptional flex_ = {}; YGFloatOptional flexGrow_ = {}; YGFloatOptional flexShrink_ = {}; @@ -132,50 +110,49 @@ private: // Yoga specific properties, not compatible with flexbox specification YGFloatOptional aspectRatio_ = {}; - BITFIELD_ACCESSORS(direction) - BITFIELD_ACCESSORS(flexDirection) - BITFIELD_ACCESSORS(justifyContent) - BITFIELD_ACCESSORS(alignContent); - BITFIELD_ACCESSORS(alignItems); - BITFIELD_ACCESSORS(alignSelf); - BITFIELD_ACCESSORS(positionType); - BITFIELD_ACCESSORS(flexWrap); - BITFIELD_ACCESSORS(overflow); - BITFIELD_ACCESSORS(display); - public: // for library users needing a type using ValueRepr = std::remove_reference::type; - YGDirection direction() const { return direction_; } - BITFIELD_REF(direction) direction() { return {*this}; } + YGDirection direction() const { return flags_.at(); } + Flags::Ref direction() { return flags_.at(); } - YGFlexDirection flexDirection() const { return flexDirection_; } - BITFIELD_REF(flexDirection) flexDirection() { return {*this}; } + YGFlexDirection flexDirection() const { + return flags_.at(); + } + Flags::Ref flexDirection() { + return flags_.at(); + } - YGJustify justifyContent() const { return justifyContent_; } - BITFIELD_REF(justifyContent) justifyContent() { return {*this}; } + YGJustify justifyContent() const { return flags_.at(); } + Flags::Ref justifyContent() { + return flags_.at(); + } - YGAlign alignContent() const { return alignContent_; } - BITFIELD_REF(alignContent) alignContent() { return {*this}; } + YGAlign alignContent() const { return flags_.at(); } + Flags::Ref alignContent() { + return flags_.at(); + } - YGAlign alignItems() const { return alignItems_; } - BITFIELD_REF(alignItems) alignItems() { return {*this}; } + YGAlign alignItems() const { return flags_.at(); } + Flags::Ref alignItems() { return flags_.at(); } - YGAlign alignSelf() const { return alignSelf_; } - BITFIELD_REF(alignSelf) alignSelf() { return {*this}; } + YGAlign alignSelf() const { return flags_.at(); } + Flags::Ref alignSelf() { return flags_.at(); } - YGPositionType positionType() const { return positionType_; } - BITFIELD_REF(positionType) positionType() { return {*this}; } + YGPositionType positionType() const { return flags_.at(); } + Flags::Ref positionType() { + return flags_.at(); + } - YGWrap flexWrap() const { return flexWrap_; } - BITFIELD_REF(flexWrap) flexWrap() { return {*this}; } + YGWrap flexWrap() const { return flags_.at(); } + Flags::Ref flexWrap() { return flags_.at(); } - YGOverflow overflow() const { return overflow_; } - BITFIELD_REF(overflow) overflow() { return {*this}; } + YGOverflow overflow() const { return flags_.at(); } + Flags::Ref overflow() { return flags_.at(); } - YGDisplay display() const { return display_; } - BITFIELD_REF(display) display() { return {*this}; } + YGDisplay display() const { return flags_.at(); } + Flags::Ref display() { return flags_.at(); } YGFloatOptional flex() const { return flex_; } Ref flex() { return {*this}; } @@ -223,7 +200,3 @@ bool operator==(const YGStyle& lhs, const YGStyle& rhs); inline bool operator!=(const YGStyle& lhs, const YGStyle& rhs) { return !(lhs == rhs); } - -#undef BITFIELD_ENUM_SIZED -#undef BITFIELD_ACCESSORS -#undef BITFIELD_REF From 72cefead0293e2d9c62f1ec969707b246079da8e Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Wed, 7 Aug 2019 16:17:00 -0700 Subject: [PATCH 141/347] Use `Bitfield` in `YGLayout` Summary: Replaces the usage of C++ bitfields with our portable `Bitfield` class. Reviewed By: SidharthGuglani Differential Revision: D16656361 fbshipit-source-id: 05f679e2e994e109b2bd1090c879d6850fabdc40 --- yoga/YGLayout.cpp | 3 ++- yoga/YGLayout.h | 41 ++++++++++++++++++++++++++++++++--------- yoga/YGNode.cpp | 12 ++++++------ yoga/Yoga.cpp | 22 +++++++++++----------- 4 files changed, 51 insertions(+), 27 deletions(-) diff --git a/yoga/YGLayout.cpp b/yoga/YGLayout.cpp index d1144ea6..ee398868 100644 --- a/yoga/YGLayout.cpp +++ b/yoga/YGLayout.cpp @@ -15,7 +15,8 @@ bool YGLayout::operator==(YGLayout layout) const { YGFloatArrayEqual(margin, layout.margin) && YGFloatArrayEqual(border, layout.border) && YGFloatArrayEqual(padding, layout.padding) && - direction == layout.direction && hadOverflow == layout.hadOverflow && + direction() == layout.direction() && + hadOverflow() == layout.hadOverflow() && lastOwnerDirection == layout.lastOwnerDirection && nextCachedMeasurementsIndex == layout.nextCachedMeasurementsIndex && cachedLayout == layout.cachedLayout && diff --git a/yoga/YGLayout.h b/yoga/YGLayout.h index 74082a76..4b62cecc 100644 --- a/yoga/YGLayout.h +++ b/yoga/YGLayout.h @@ -5,6 +5,7 @@ * file in the root directory of this source tree. */ #pragma once +#include "Bitfield.h" #include "YGFloatOptional.h" #include "Yoga-internal.h" @@ -14,11 +15,16 @@ struct YGLayout { std::array margin = {}; std::array border = {}; std::array padding = {}; - YGDirection direction : 2; - bool didUseLegacyFlag : 1; - bool doesLegacyStretchFlagAffectsLayout : 1; - bool hadOverflow : 1; +private: + static constexpr size_t directionIdx = 0; + static constexpr size_t didUseLegacyFlagIdx = 1; + static constexpr size_t doesLegacyStretchFlagAffectsLayoutIdx = 2; + static constexpr size_t hadOverflowIdx = 3; + facebook::yoga::Bitfield flags_ = + {YGDirectionInherit, false, false, false}; + +public: uint32_t computedFlexBasisGeneration = 0; YGFloatOptional computedFlexBasis = {}; @@ -34,11 +40,28 @@ struct YGLayout { YGCachedMeasurement cachedLayout = YGCachedMeasurement(); - YGLayout() - : direction(YGDirectionInherit), - didUseLegacyFlag(false), - doesLegacyStretchFlagAffectsLayout(false), - hadOverflow(false) {} + YGDirection direction() const { return flags_.at(); } + decltype(flags_)::Ref direction() { + return flags_.at(); + } + + bool didUseLegacyFlag() const { return flags_.at(); } + decltype(flags_)::Ref didUseLegacyFlag() { + return flags_.at(); + } + + bool doesLegacyStretchFlagAffectsLayout() const { + return flags_.at(); + } + decltype(flags_)::Ref + doesLegacyStretchFlagAffectsLayout() { + return flags_.at(); + } + + bool hadOverflow() const { return flags_.at(); } + decltype(flags_)::Ref hadOverflow() { + return flags_.at(); + } bool operator==(YGLayout layout) const; bool operator!=(YGLayout layout) const { return !(*this == layout); } diff --git a/yoga/YGNode.cpp b/yoga/YGNode.cpp index 969d1752..bb240dfc 100644 --- a/yoga/YGNode.cpp +++ b/yoga/YGNode.cpp @@ -231,7 +231,7 @@ void YGNode::removeChild(uint32_t index) { } void YGNode::setLayoutDirection(YGDirection direction) { - layout_.direction = direction; + layout_.direction() = direction; } void YGNode::setLayoutMargin(float margin, int index) { @@ -269,7 +269,7 @@ void YGNode::setLayoutMeasuredDimension(float measuredDimension, int index) { } void YGNode::setLayoutHadOverflow(bool hadOverflow) { - layout_.hadOverflow = hadOverflow; + layout_.hadOverflow() = hadOverflow; } void YGNode::setLayoutDimension(float dimension, int index) { @@ -520,12 +520,12 @@ YGFloatOptional YGNode::getTrailingPaddingAndBorder( } bool YGNode::didUseLegacyFlag() { - bool didUseLegacyFlag = layout_.didUseLegacyFlag; + bool didUseLegacyFlag = layout_.didUseLegacyFlag(); if (didUseLegacyFlag) { return true; } for (const auto& child : children_) { - if (child->layout_.didUseLegacyFlag) { + if (child->layout_.didUseLegacyFlag()) { didUseLegacyFlag = true; break; } @@ -535,11 +535,11 @@ bool YGNode::didUseLegacyFlag() { void YGNode::setLayoutDoesLegacyFlagAffectsLayout( bool doesLegacyFlagAffectsLayout) { - layout_.doesLegacyStretchFlagAffectsLayout = doesLegacyFlagAffectsLayout; + layout_.doesLegacyStretchFlagAffectsLayout() = doesLegacyFlagAffectsLayout; } void YGNode::setLayoutDidUseLegacyFlag(bool didUseLegacyFlag) { - layout_.didUseLegacyFlag = didUseLegacyFlag; + layout_.didUseLegacyFlag() = didUseLegacyFlag; } bool YGNode::isLayoutTreeEqualToNode(const YGNode& node) const { diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index bc440cbb..6ba841f8 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -892,7 +892,7 @@ YGValue YGNodeStyleGetMaxHeight(const YGNodeConstRef node) { "Cannot get layout properties of multi-edge shorthands"); \ \ if (edge == YGEdgeStart) { \ - if (node->getLayout().direction == YGDirectionRTL) { \ + if (node->getLayout().direction() == YGDirectionRTL) { \ return node->getLayout().instanceName[YGEdgeRight]; \ } else { \ return node->getLayout().instanceName[YGEdgeLeft]; \ @@ -900,7 +900,7 @@ YGValue YGNodeStyleGetMaxHeight(const YGNodeConstRef node) { } \ \ if (edge == YGEdgeEnd) { \ - if (node->getLayout().direction == YGDirectionRTL) { \ + if (node->getLayout().direction() == YGDirectionRTL) { \ return node->getLayout().instanceName[YGEdgeLeft]; \ } else { \ return node->getLayout().instanceName[YGEdgeRight]; \ @@ -916,15 +916,15 @@ YG_NODE_LAYOUT_PROPERTY_IMPL(float, Right, position[YGEdgeRight]); YG_NODE_LAYOUT_PROPERTY_IMPL(float, Bottom, position[YGEdgeBottom]); YG_NODE_LAYOUT_PROPERTY_IMPL(float, Width, dimensions[YGDimensionWidth]); YG_NODE_LAYOUT_PROPERTY_IMPL(float, Height, dimensions[YGDimensionHeight]); -YG_NODE_LAYOUT_PROPERTY_IMPL(YGDirection, Direction, direction); -YG_NODE_LAYOUT_PROPERTY_IMPL(bool, HadOverflow, hadOverflow); +YG_NODE_LAYOUT_PROPERTY_IMPL(YGDirection, Direction, direction()); +YG_NODE_LAYOUT_PROPERTY_IMPL(bool, HadOverflow, hadOverflow()); YG_NODE_LAYOUT_RESOLVED_PROPERTY_IMPL(float, Margin, margin); YG_NODE_LAYOUT_RESOLVED_PROPERTY_IMPL(float, Border, border); YG_NODE_LAYOUT_RESOLVED_PROPERTY_IMPL(float, Padding, padding); bool YGNodeLayoutGetDidLegacyStretchFlagAffectLayout(const YGNodeRef node) { - return node->getLayout().doesLegacyStretchFlagAffectsLayout; + return node->getLayout().doesLegacyStretchFlagAffectsLayout(); } uint32_t gCurrentGenerationCount = 0; @@ -2199,7 +2199,7 @@ static float YGDistributeFreeSpaceSecondPass( currentRelativeChild, childWidth, childHeight, - node->getLayout().direction, + node->getLayout().direction(), childWidthMeasureMode, childHeightMeasureMode, availableInnerWidth, @@ -2213,8 +2213,8 @@ static float YGDistributeFreeSpaceSecondPass( depth, generationCount); node->setLayoutHadOverflow( - node->getLayout().hadOverflow | - currentRelativeChild->getLayout().hadOverflow); + node->getLayout().hadOverflow() | + currentRelativeChild->getLayout().hadOverflow()); } return deltaFreeSpace; } @@ -2973,7 +2973,7 @@ static void YGNodelayoutImpl( } node->setLayoutHadOverflow( - node->getLayout().hadOverflow | + node->getLayout().hadOverflow() | (collectedFlexItemsValues.remainingFreeSpace < 0)); // STEP 6: MAIN-AXIS JUSTIFICATION & CROSS-AXIS SIZE DETERMINATION @@ -4152,7 +4152,7 @@ void YGNodeCalculateLayoutWithContext( 0, // tree root gCurrentGenerationCount)) { node->setPosition( - node->getLayout().direction, ownerWidth, ownerHeight, ownerWidth); + node->getLayout().direction(), ownerWidth, ownerHeight, ownerWidth); YGRoundToPixelGrid(node, node->getConfig()->pointScaleFactor, 0.0f, 0.0f); #ifdef DEBUG @@ -4202,7 +4202,7 @@ void YGNodeCalculateLayoutWithContext( 0, // tree root gCurrentGenerationCount)) { nodeWithoutLegacyFlag->setPosition( - nodeWithoutLegacyFlag->getLayout().direction, + nodeWithoutLegacyFlag->getLayout().direction(), ownerWidth, ownerHeight, ownerWidth); From dcfdb955b3a2c0808857e7dedea50e75b1f4f72d Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Wed, 7 Aug 2019 18:20:49 -0700 Subject: [PATCH 142/347] Back out "[Yoga] Experiment: double invocations of measure callbacks" Summary: Removes the double measure callbacks experiment Original commit changesets: c6cf9c01a173, b157d8137c72 Reviewed By: SidharthGuglani Differential Revision: D16687367 fbshipit-source-id: 9649f8731bd1b27f4d291cee4fa30153165cea02 --- yoga/Yoga.cpp | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 6ba841f8..73fb740e 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -15,7 +15,6 @@ #include "YGNodePrint.h" #include "Yoga-internal.h" #include "event/event.h" -#include "internal/experiments-inl.h" #ifdef _MSC_VER #include @@ -1664,15 +1663,6 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( measuredSize.height, reason}); - if (internal::isEnabled(internal::Experiment::kDoubleMeasureCallbacks)) { - node->measure( - innerWidth, - widthMeasureMode, - innerHeight, - heightMeasureMode, - layoutContext); - } - node->setLayoutMeasuredDimension( YGNodeBoundAxis( node, From a37b286baefdc303e3deccb1d37cede5fc6aca7e Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 7 Aug 2019 19:40:53 -0700 Subject: [PATCH 143/347] Yoga is written in C++ (#907) Summary: As far as I can tell now. Would be nice if you had an actual changelog somewhere! Pull Request resolved: https://github.com/facebook/yoga/pull/907 Differential Revision: D16701738 Pulled By: davidaurelio fbshipit-source-id: cf32dc96eca5258979bcaa9947d6ed6b5496398d --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 74c9d245..689851d6 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Yoga [![CocoaPods](https://img.shields.io/cocoapods/v/YogaKit.svg)](http://cocoapods.org/pods/YogaKit) [![npm](https://img.shields.io/npm/v/yoga-layout.svg)](https://www.npmjs.com/package/yoga-layout) [![bintray](https://img.shields.io/bintray/v/facebook/maven/com.facebook.yoga:yoga.svg)](https://bintray.com/facebook/maven/com.facebook.yoga%3Ayoga/_latestVersion) [![NuGet](https://img.shields.io/nuget/v/Facebook.Yoga.svg)](https://www.nuget.org/packages/Facebook.Yoga) ## Building -Yoga builds with [buck](https://buckbuild.com). Make sure you install buck before contributing to Yoga. Yoga's main implementation is in C, with bindings to supported languages and frameworks. When making changes to Yoga please ensure the changes are also propagated to these bindings when applicable. +Yoga builds with [buck](https://buckbuild.com). Make sure you install buck before contributing to Yoga. Yoga's main implementation is in C++, with bindings to supported languages and frameworks. When making changes to Yoga please ensure the changes are also propagated to these bindings when applicable. ## Testing For testing we rely on [gtest](https://github.com/google/googletest) as a submodule. After cloning Yoga run `git submodule init` followed by `git submodule update`. From 1a2802028bebd8520297d272e789c45f362737ef Mon Sep 17 00:00:00 2001 From: Denis Date: Wed, 7 Aug 2019 19:47:29 -0700 Subject: [PATCH 144/347] Update link: (#920) Summary: Update link for component kit on docs to `https://componentkit.org/docs/getting-started/` Pull Request resolved: https://github.com/facebook/yoga/pull/920 Differential Revision: D16701505 Pulled By: davidaurelio fbshipit-source-id: 10f7df4f7aa29d884d21135a92041b0630e1a31e --- website/contents/getting-started/component-kit.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/contents/getting-started/component-kit.md b/website/contents/getting-started/component-kit.md index 2cca0a04..206b6043 100644 --- a/website/contents/getting-started/component-kit.md +++ b/website/contents/getting-started/component-kit.md @@ -1,5 +1,5 @@ --- -path: "https://componentkit.org/docs/getting-started.html" +path: "https://componentkit.org/docs/getting-started/" title: "ComponentKit" redirect: true --- From a21888021624defe0d18eca2cf6db56de724fad0 Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 7 Aug 2019 23:49:59 -0700 Subject: [PATCH 145/347] Fix compilation with CMake (#909) Summary: This adds the root of the source tree to the include path, which allow `#include ` to work. Fixes https://github.com/facebook/yoga/issues/908 Pull Request resolved: https://github.com/facebook/yoga/pull/909 Differential Revision: D16701716 Pulled By: davidaurelio fbshipit-source-id: 0fdc6479e4f3119a3e4ddbcd4b48541b282c1bbd --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3ba4477e..595faef5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,5 +12,6 @@ set(CMAKE_VERBOSE_MAKEFILE on) file(GLOB_RECURSE yogacore_SRC yoga/*.cpp) add_library(yogacore STATIC ${yogacore_SRC}) +target_include_directories(yogacore PUBLIC .) target_link_libraries(yogacore android log) set_target_properties(yogacore PROPERTIES CXX_STANDARD 11) From 9b120eded98e6812d020d47ece162f235d75e64a Mon Sep 17 00:00:00 2001 From: Luis Miguel Alvarado Date: Wed, 7 Aug 2019 23:57:58 -0700 Subject: [PATCH 146/347] add space-evenly prop to justify-content.md (#918) Summary: This PR add the `space-evenly` prop, to the [justify-content.md](https://github.com/facebook/yoga/blob/master/website/contents/properties/justify-content.md) file. The description was taken from [Mozilla](https://developer.mozilla.org/en-US/docs/Web/CSS/justify-content) Pull Request resolved: https://github.com/facebook/yoga/pull/918 Differential Revision: D16701547 Pulled By: davidaurelio fbshipit-source-id: cd1bb7dd20cb1184a1bafb0d8f33e851051bd9e5 --- website/contents/properties/justify-content.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/website/contents/properties/justify-content.md b/website/contents/properties/justify-content.md index 84ccb335..346d3f81 100644 --- a/website/contents/properties/justify-content.md +++ b/website/contents/properties/justify-content.md @@ -25,4 +25,6 @@ remaining space around the children. Compared to `space between` using `space around` will result in space being distributed to the beginning of the first child and end of the last child. +**SPACE EVENLY** Evenly distributed within the alignment container along the main axis. The spacing between each pair of adjacent items, the main-start edge and the first item, and the main-end edge and the last item, are all exactly the same. + From 0f2350308ed977f856bb8593a9bbeba8401c544a Mon Sep 17 00:00:00 2001 From: Nicola Ferruzzi Date: Thu, 8 Aug 2019 00:06:49 -0700 Subject: [PATCH 147/347] Properly test for the lack of a node measure func in YogaKit (#915) Summary: The test was broken and caused a few crashes on my project. Pull Request resolved: https://github.com/facebook/yoga/pull/915 Differential Revision: D16701613 Pulled By: davidaurelio fbshipit-source-id: 9ab5c43bb74e77593bc2426a249750a7ee8f4034 --- YogaKit/Source/YGLayout.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/YogaKit/Source/YGLayout.m b/YogaKit/Source/YGLayout.m index 35d00b96..4a9ab872 100644 --- a/YogaKit/Source/YGLayout.m +++ b/YogaKit/Source/YGLayout.m @@ -180,7 +180,7 @@ static YGConfigRef globalConfig; // the measure function. Since we already know that this is a leaf, // this *should* be fine. Forgive me Hack Gods. const YGNodeRef node = self.node; - if (YGNodeHasMeasureFunc(node)) { + if (!YGNodeHasMeasureFunc(node)) { YGNodeSetMeasureFunc(node, YGMeasureView); } From d1e188341bc8c668ee05c8ed6045d6f809564604 Mon Sep 17 00:00:00 2001 From: Adlai Holler Date: Thu, 8 Aug 2019 00:20:48 -0700 Subject: [PATCH 148/347] Don't copy children in YGNodeComputeFlexBasisForChildren (#919) Summary: No need for a copy here. Pull Request resolved: https://github.com/facebook/yoga/pull/919 Differential Revision: D16701461 Pulled By: davidaurelio fbshipit-source-id: 3a90adbb2b5c43d5aefe693a8525aa3a37e53b3d --- yoga/Yoga.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 73fb740e..34629e91 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -1850,7 +1850,7 @@ static float YGNodeComputeFlexBasisForChildren( const uint32_t generationCount) { float totalOuterFlexBasis = 0.0f; YGNodeRef singleFlexChild = nullptr; - YGVector children = node->getChildren(); + const YGVector &children = node->getChildren(); YGMeasureMode measureModeMainDim = YGFlexDirectionIsRow(mainAxis) ? widthMeasureMode : heightMeasureMode; // If there is only one child with flexGrow + flexShrink it means we can set From 90cded3819bb9849d0cfeaab05e811bfe6645c1c Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Thu, 8 Aug 2019 07:13:35 -0700 Subject: [PATCH 149/347] use array for passing measure callback reasons count Summary: Use an array for counting measure callbacks due to each reason. and this is now added as qpl metadata in Layout Calculation qpl event Reviewed By: davidaurelio Differential Revision: D16666786 fbshipit-source-id: ff85fba835148f06b9c5d90c4604e552a813777a --- yoga/Yoga.cpp | 9 ++------- yoga/event/event.h | 6 +++--- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 34629e91..1a374ab3 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -1644,13 +1644,8 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( layoutContext); layoutMarkerData.measureCallbacks += 1; - if (reason == LayoutPassReason::kMeasureChild) { - layoutMarkerData.measureChildMeasureCallbacks += 1; - } else if (reason == LayoutPassReason::kFlexMeasure) { - layoutMarkerData.flexMeasureMeasureCallbacks += 1; - } else if (reason == LayoutPassReason::kAbsMeasureChild) { - layoutMarkerData.absMeasureChildMeasureCallbacks += 1; - } + layoutMarkerData.measureCallbackReasonsCount[static_cast(reason)] += + 1; Event::publish( node, diff --git a/yoga/event/event.h b/yoga/event/event.h index e27e53d3..39b07394 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -8,6 +8,7 @@ #include #include +#include #include struct YGConfig; @@ -42,9 +43,8 @@ struct LayoutData { int cachedLayouts; int cachedMeasures; int measureCallbacks; - int measureChildMeasureCallbacks; - int absMeasureChildMeasureCallbacks; - int flexMeasureMeasureCallbacks; + std::array(LayoutPassReason::COUNT)> + measureCallbackReasonsCount; }; const char* LayoutPassReasonToString(const LayoutPassReason value); From 58622fa747066f9392b745dfcd4b34dbbe3f4b6a Mon Sep 17 00:00:00 2001 From: Pascal Hartig Date: Tue, 13 Aug 2019 06:18:30 -0700 Subject: [PATCH 150/347] Set up proguard-annotations as separate Maven artifact Summary: We need one place, any place really, to publish that good old `DoNotStrip` annotation from that we currently copy across various repos, causing havoc for anybody who tries to integrate more than one FB Android library into their project. Yoga is very well positioned for this because it's already its own Gradle module and all that's missing are these few lines. Reviewed By: SidharthGuglani Differential Revision: D16783035 fbshipit-source-id: 69b6224a725194d036c6a23a36bd76d3487b9811 --- java/proguard-annotations/build.gradle | 1 + java/proguard-annotations/gradle.properties | 12 ++++++++++++ 2 files changed, 13 insertions(+) create mode 100644 java/proguard-annotations/gradle.properties diff --git a/java/proguard-annotations/build.gradle b/java/proguard-annotations/build.gradle index 3f252b3f..35878019 100644 --- a/java/proguard-annotations/build.gradle +++ b/java/proguard-annotations/build.gradle @@ -6,3 +6,4 @@ */ apply plugin: 'java' +apply from: rootProject.file('gradle/release.gradle') diff --git a/java/proguard-annotations/gradle.properties b/java/proguard-annotations/gradle.properties new file mode 100644 index 00000000..4c53dbee --- /dev/null +++ b/java/proguard-annotations/gradle.properties @@ -0,0 +1,12 @@ +# +# Copyright (c) Facebook, Inc. and its affiliates. +# +# This source code is licensed under the MIT license found in the LICENSE +# file in the root directory of this source tree. +# + +GROUP=com.facebook.yoga +POM_NAME=Proguard Annotations +POM_DESCRIPTION=Shared annotations for use with Proguard +POM_ARTIFACT_ID=proguard-annotations +POM_PACKAGING=jar From 4a2ccc658e41603eb98bd64cd53dffadb4d74b08 Mon Sep 17 00:00:00 2001 From: Pascal Hartig Date: Wed, 14 Aug 2019 05:34:13 -0700 Subject: [PATCH 151/347] Target Java 7 Summary: The artifacts generated otherwise can cause issues in Android projects. Reviewed By: SidharthGuglani Differential Revision: D16803253 fbshipit-source-id: db139560dfbddb917c27bdfd80e1bf5747e4a74b --- java/proguard-annotations/build.gradle | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/java/proguard-annotations/build.gradle b/java/proguard-annotations/build.gradle index 35878019..3ca9dae5 100644 --- a/java/proguard-annotations/build.gradle +++ b/java/proguard-annotations/build.gradle @@ -6,4 +6,8 @@ */ apply plugin: 'java' + +sourceCompatibility = '1.7' +targetCompatibility = '1.7' + apply from: rootProject.file('gradle/release.gradle') From 442d84ccfcfcfe246a29cc394035f3d36e158c2e Mon Sep 17 00:00:00 2001 From: Pascal Hartig Date: Thu, 15 Aug 2019 04:17:48 -0700 Subject: [PATCH 152/347] Remove built-in DoNotStrip annotations Summary: Use the Yoga dependency instead which can be deduplicated by Gradle. This solves (parts of) a bunch of issues concerning the use of multiple FB libraries in one Android project. Reviewed By: danielbuechele Differential Revision: D16783243 fbshipit-source-id: 7f7915821dd286c51ec4ccbd95a2cdcb18b53bde --- .../src/main/java/com/facebook/proguard/annotations/BUCK | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/proguard-annotations/src/main/java/com/facebook/proguard/annotations/BUCK b/java/proguard-annotations/src/main/java/com/facebook/proguard/annotations/BUCK index 27b3eaa6..2eab69c9 100644 --- a/java/proguard-annotations/src/main/java/com/facebook/proguard/annotations/BUCK +++ b/java/proguard-annotations/src/main/java/com/facebook/proguard/annotations/BUCK @@ -3,13 +3,13 @@ # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -load("//tools/build_defs/oss:yoga_defs.bzl", "YOGA_ROOTS", "yoga_java_library") +load("//tools/build_defs/oss:yoga_defs.bzl", "yoga_java_library") yoga_java_library( name = "annotations", srcs = glob(["*.java"]), source = "1.7", target = "1.7", - visibility = YOGA_ROOTS, + visibility = ["PUBLIC"], deps = [], ) From a04a6b5e8f2f02a2c4b57af726f8ef116e03d7a6 Mon Sep 17 00:00:00 2001 From: Paul O'Shannessy Date: Thu, 29 Aug 2019 23:19:10 -0700 Subject: [PATCH 153/347] Adopt Contributor Covenant Summary: In order to foster healthy open source communities, we're adopting the [Contributor Covenant](https://www.contributor-covenant.org/). It has been built by open source community members and represents a shared understanding of what is expected from a healthy community. Reviewed By: josephsavona, danobi, rdzhabarov Differential Revision: D17104640 fbshipit-source-id: d210000de686c5f0d97d602b50472d5869bc6a49 --- CODE_OF_CONDUCT.md | 76 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 75 insertions(+), 1 deletion(-) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 0fb24580..d1abc700 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -1,3 +1,77 @@ # Code of Conduct -Facebook has adopted a Code of Conduct that we expect project participants to adhere to. Please [read the full text](https://code.fb.com/codeofconduct/) so that you can understand what actions will and will not be tolerated. +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to make participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies within all project spaces, and it also applies when +an individual is representing the project or its community in public spaces. +Examples of representing a project or community include using an official +project e-mail address, posting via an official social media account, or acting +as an appointed representative at an online or offline event. Representation of +a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at . All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq + From e6e224ce482566381e72c094d0adebc9e05caad6 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 9 Sep 2019 03:19:10 -0700 Subject: [PATCH 154/347] Add dist: trusty to yoga travis configuration Summary: clang 6.0 install was failing in yoga oss tests Travis has made xenial as default distribution https://changelog.travis-ci.com/xenial-as-the-default-build-environment-is-coming-97772 Added dist: trusty to the configuration to fix this. Reviewed By: passy Differential Revision: D17257300 fbshipit-source-id: f9fcd6ba774dad1c28bd953c0d850c7078d02015 --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 0c42284f..3ae55d1f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,6 @@ language: java os: linux +dist: trusty addons: apt: sources: From 31de91bbac22df7a7e03271e98f730e50c0d36d1 Mon Sep 17 00:00:00 2001 From: Amir Shalem Date: Tue, 10 Sep 2019 08:15:12 -0700 Subject: [PATCH 155/347] fix gradle compliation (#925) Summary: Pull Request resolved: https://github.com/facebook/yoga/pull/925 Gradle is failing to compile yoga for two reasons: 1. Ever since `YogaNodeJNIPhantomRefs` was introduced which uses `DestructorThread.Destructor` from fbjni which was the first direct Java dependency from yoga java to fbjni java code. 2. Adding a missing gradle endpoint for `testutil` since it is now required for yoga unit-tests Reviewed By: SidharthGuglani Differential Revision: D17274226 fbshipit-source-id: 3df9648321162d34f81fd3675ca1474e8a1c6d3a --- java/build.gradle | 2 + settings.gradle | 3 +- testutil/BUCK | 12 +++--- testutil/build.gradle | 38 +++++++++++++++++++ testutil/src/main/AndroidManifest.xml | 12 ++++++ testutil/src/main/cpp/CMakeLists.txt | 30 +++++++++++++++ .../cpp/include/yoga/testutil}/testutil.h | 0 testutil/{ => src/main/cpp/jni}/jni.cpp | 0 .../{ => src/main/cpp/testutil}/testutil.cpp | 2 +- .../java/com/facebook/yoga}/TestUtil.java | 0 10 files changed, 91 insertions(+), 8 deletions(-) create mode 100644 testutil/build.gradle create mode 100644 testutil/src/main/AndroidManifest.xml create mode 100644 testutil/src/main/cpp/CMakeLists.txt rename testutil/{ => src/main/cpp/include/yoga/testutil}/testutil.h (100%) rename testutil/{ => src/main/cpp/jni}/jni.cpp (100%) rename testutil/{ => src/main/cpp/testutil}/testutil.cpp (97%) rename testutil/{ => src/main/java/com/facebook/yoga}/TestUtil.java (100%) diff --git a/java/build.gradle b/java/build.gradle index 8cded209..e4494ddc 100644 --- a/java/build.gradle +++ b/java/build.gradle @@ -60,8 +60,10 @@ android { dependencies { compileOnly 'com.google.code.findbugs:jsr305:3.0.1' compileOnly project(':yoga:proguard-annotations') + compile project(':libfb') implementation 'com.facebook.soloader:soloader:0.5.1' testImplementation 'junit:junit:4.12' + testCompile project(':testutil') } task sourcesJar(type: Jar) { diff --git a/settings.gradle b/settings.gradle index 1c136f10..573bc583 100644 --- a/settings.gradle +++ b/settings.gradle @@ -5,8 +5,9 @@ * LICENSE file in the root directory of this source tree. */ -include ':yoga', ':yogacore', ':yoga-layout', ':yoga:proguard-annotations', ':libfb' +include ':yoga', ':yogacore', ':yoga-layout', ':yoga:proguard-annotations', ':libfb', ':testutil' project(':yoga').projectDir = file('java') project(':yoga:proguard-annotations').projectDir = file('java/proguard-annotations') project(':yoga-layout').projectDir = file('android') project(':libfb').projectDir = file('lib/fb') +project(':testutil').projectDir = file('testutil') diff --git a/testutil/BUCK b/testutil/BUCK index 421ffb30..56ee97fe 100644 --- a/testutil/BUCK +++ b/testutil/BUCK @@ -1,10 +1,10 @@ -load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID", "FBJNI_TARGET", "LIBRARY_COMPILER_FLAGS", "SOLOADER_TARGET", "yoga_cxx_library", "yoga_dep", "yoga_java_library") +load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID", "FBJNI_TARGET", "LIBRARY_COMPILER_FLAGS", "SOLOADER_TARGET", "subdir_glob", "yoga_cxx_library", "yoga_dep", "yoga_java_library") yoga_cxx_library( name = "testutil", - srcs = ["testutil.cpp"], - header_namespace = "yoga/testutil", - exported_headers = ["testutil.h"], + srcs = ["src/main/cpp/testutil/testutil.cpp"], + header_namespace = "", + exported_headers = subdir_glob([("src/main/cpp/include", "yoga/testutil/testutil.h")]), compiler_flags = LIBRARY_COMPILER_FLAGS, soname = "libyoga_testutil.$(ext)", visibility = ["PUBLIC"], @@ -13,7 +13,7 @@ yoga_cxx_library( yoga_java_library( name = "java", - srcs = ["TestUtil.java"], + srcs = ["src/main/java/com/facebook/yoga/TestUtil.java"], source = "1.7", target = "1.7", visibility = ["PUBLIC"], @@ -25,7 +25,7 @@ yoga_java_library( yoga_cxx_library( name = "jni", - srcs = ["jni.cpp"], + srcs = ["src/main/cpp/jni/jni.cpp"], allow_jni_merging = False, compiler_flags = LIBRARY_COMPILER_FLAGS, platforms = ANDROID, diff --git a/testutil/build.gradle b/testutil/build.gradle new file mode 100644 index 00000000..47074284 --- /dev/null +++ b/testutil/build.gradle @@ -0,0 +1,38 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +apply plugin: 'com.android.library' + +android { + compileSdkVersion rootProject.compileSdkVersion + buildToolsVersion rootProject.buildToolsVersion + + defaultConfig { + minSdkVersion rootProject.minSdkVersion + targetSdkVersion rootProject.targetSdkVersion + + ndk { + abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a' + } + + externalNativeBuild { + cmake { + arguments '-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=c++_static' + } + } + } + + externalNativeBuild { + cmake { + path 'src/main/cpp/CMakeLists.txt' + } + } + + dependencies { + implementation 'com.facebook.soloader:soloader:0.5.1' + } +} diff --git a/testutil/src/main/AndroidManifest.xml b/testutil/src/main/AndroidManifest.xml new file mode 100644 index 00000000..7d6f3e5c --- /dev/null +++ b/testutil/src/main/AndroidManifest.xml @@ -0,0 +1,12 @@ + + + + + + diff --git a/testutil/src/main/cpp/CMakeLists.txt b/testutil/src/main/cpp/CMakeLists.txt new file mode 100644 index 00000000..2330f8e3 --- /dev/null +++ b/testutil/src/main/cpp/CMakeLists.txt @@ -0,0 +1,30 @@ +# +# Copyright (c) Facebook, Inc. and its affiliates. +# +# This source code is licensed under the MIT license found in the +# LICENSE file in the root directory of this source tree. +# + +cmake_minimum_required(VERSION 3.4.1) + +set(CMAKE_VERBOSE_MAKEFILE on) + +add_compile_options( + -fno-omit-frame-pointer + -fexceptions + -Wall + -std=c++11 + -DDISABLE_CPUCAP + -DDISABLE_XPLAT) + +file(GLOB testutil_SRC + jni/*.cpp + testutil/*.cpp) + +add_library(testutil SHARED + ${testutil_SRC}) + +target_include_directories(testutil PRIVATE + include) + +target_link_libraries(testutil android log) diff --git a/testutil/testutil.h b/testutil/src/main/cpp/include/yoga/testutil/testutil.h similarity index 100% rename from testutil/testutil.h rename to testutil/src/main/cpp/include/yoga/testutil/testutil.h diff --git a/testutil/jni.cpp b/testutil/src/main/cpp/jni/jni.cpp similarity index 100% rename from testutil/jni.cpp rename to testutil/src/main/cpp/jni/jni.cpp diff --git a/testutil/testutil.cpp b/testutil/src/main/cpp/testutil/testutil.cpp similarity index 97% rename from testutil/testutil.cpp rename to testutil/src/main/cpp/testutil/testutil.cpp index c8f9e32c..09061fb7 100644 --- a/testutil/testutil.cpp +++ b/testutil/src/main/cpp/testutil/testutil.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ -#include "testutil.h" +#include #include #include diff --git a/testutil/TestUtil.java b/testutil/src/main/java/com/facebook/yoga/TestUtil.java similarity index 100% rename from testutil/TestUtil.java rename to testutil/src/main/java/com/facebook/yoga/TestUtil.java From a08a57b33c55f6e2ca966d57d51bfacb9281aeaf Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 11 Sep 2019 10:24:38 -0700 Subject: [PATCH 156/347] Remove unused YogaNodeJNIPhantomRefs.java Summary: Removed unused file YogaNodeJNIPhantomRefs.java as this was causing oss build failures because of an import. ````:yoga:compileDebugJavaWithJavac/home/travis/build/facebook/yoga/java/com/facebook/yoga/YogaNodeJNIPhantomRefs.java:9: error: package com.facebook.jni does not exist import com.facebook.jni.DestructorThread; ^ /home/travis/build/facebook/yoga/java/com/facebook/yoga/YogaNodeJNIPhantomRefs.java:30: error: package DestructorThread does not exist new DestructorThread.Destructor(node) { ^ 2 errors FAILED Reviewed By: pasqualeanatriello Differential Revision: D17257330 fbshipit-source-id: 98b0c5d5b7dcd94bee559b58194c13b07f47723d --- .../facebook/yoga/YogaNodeJNIPhantomRefs.java | 41 ------------------- 1 file changed, 41 deletions(-) delete mode 100644 java/com/facebook/yoga/YogaNodeJNIPhantomRefs.java diff --git a/java/com/facebook/yoga/YogaNodeJNIPhantomRefs.java b/java/com/facebook/yoga/YogaNodeJNIPhantomRefs.java deleted file mode 100644 index a87defd8..00000000 --- a/java/com/facebook/yoga/YogaNodeJNIPhantomRefs.java +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -package com.facebook.yoga; - -import com.facebook.jni.DestructorThread; - -public class YogaNodeJNIPhantomRefs extends YogaNodeJNIBase { - public YogaNodeJNIPhantomRefs() { - super(); - registerPhantomRef(this, mNativePointer); - } - - public YogaNodeJNIPhantomRefs(YogaConfig config) { - super(config); - registerPhantomRef(this, mNativePointer); - } - - @Override - public YogaNodeJNIPhantomRefs cloneWithoutChildren() { - YogaNodeJNIPhantomRefs clone = (YogaNodeJNIPhantomRefs) super.cloneWithoutChildren(); - registerPhantomRef(clone, clone.mNativePointer); - return clone; - } - - private static final void registerPhantomRef(YogaNode node, final long nativePointer) { - new DestructorThread.Destructor(node) { - private long mNativePointer = nativePointer; - @Override - protected void destruct() { - if (mNativePointer != 0) { - YogaNative.jni_YGNodeFree(mNativePointer); - mNativePointer = 0; - } - } - }; - } -} From fde89b056deeb68b5ca93bff03ee067898b0de04 Mon Sep 17 00:00:00 2001 From: Amir Shalem Date: Thu, 12 Sep 2019 06:02:48 -0700 Subject: [PATCH 157/347] Add standalone factory classes which generate YogaNode + YogaConfig Summary: Add standalone factory classes which generate YogaNode + YogaConfig, later on it will allow us to separate the yoga interface and actual implementation buck targets (see D17266406) We've done such breakage change previously in D14122974. Reviewed By: SidharthGuglani Differential Revision: D17258196 fbshipit-source-id: b12f1a0d23c3f82b14cee0731a1daf1c015ee32c --- java/com/facebook/yoga/YogaConfigFactory.java | 7 +++++++ java/com/facebook/yoga/YogaNodeFactory.java | 11 +++++++++++ 2 files changed, 18 insertions(+) create mode 100644 java/com/facebook/yoga/YogaConfigFactory.java create mode 100644 java/com/facebook/yoga/YogaNodeFactory.java diff --git a/java/com/facebook/yoga/YogaConfigFactory.java b/java/com/facebook/yoga/YogaConfigFactory.java new file mode 100644 index 00000000..d5784d68 --- /dev/null +++ b/java/com/facebook/yoga/YogaConfigFactory.java @@ -0,0 +1,7 @@ +package com.facebook.yoga; + +public abstract class YogaConfigFactory { + public static YogaConfig create() { + return new YogaConfig(); + } +} diff --git a/java/com/facebook/yoga/YogaNodeFactory.java b/java/com/facebook/yoga/YogaNodeFactory.java new file mode 100644 index 00000000..6e292826 --- /dev/null +++ b/java/com/facebook/yoga/YogaNodeFactory.java @@ -0,0 +1,11 @@ +package com.facebook.yoga; + +public abstract class YogaNodeFactory { + public static YogaNode create() { + return new YogaNodeJNIFinalizer(); + } + + public static YogaNode create(YogaConfig config) { + return new YogaNodeJNIFinalizer(config); + } +} From 1043c35f2b32e450bde7b010871838795bb8c9b4 Mon Sep 17 00:00:00 2001 From: Amir Shalem Date: Fri, 13 Sep 2019 09:18:17 -0700 Subject: [PATCH 158/347] Fix libfbjni compilation (#927) Summary: Pull Request resolved: https://github.com/facebook/yoga/pull/927 When D16220924 brought a new fbjni copy (with new directories), we forgot to fix the cmake files which are used by gradle build system. Reviewed By: SidharthGuglani Differential Revision: D17367160 fbshipit-source-id: 3e7d20d4c53ff3012a164bf6e32f1000ecb3ffc2 --- lib/fb/src/main/cpp/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/fb/src/main/cpp/CMakeLists.txt b/lib/fb/src/main/cpp/CMakeLists.txt index 13b132c5..8a6a045c 100644 --- a/lib/fb/src/main/cpp/CMakeLists.txt +++ b/lib/fb/src/main/cpp/CMakeLists.txt @@ -20,6 +20,7 @@ add_compile_options( file(GLOB fb_SRC *.cpp jni/*.cpp + jni/detail/*.cpp lyra/*.cpp) add_library(fb SHARED From 47717324d490cd703f4e0e7b598e4a39a212f72a Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Sun, 15 Sep 2019 13:50:56 -0700 Subject: [PATCH 159/347] fix fbjni and yoga event files not found in testutil issue Summary: Pull Request resolved: https://github.com/facebook/yoga/pull/928 Reviewed By: amir-shalem Differential Revision: D17383979 fbshipit-source-id: 755c2cc3749d5e23fbd1e0ac7a41632c1400ae24 --- testutil/build.gradle | 1 + testutil/src/main/cpp/CMakeLists.txt | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/testutil/build.gradle b/testutil/build.gradle index 47074284..5ec4134a 100644 --- a/testutil/build.gradle +++ b/testutil/build.gradle @@ -29,6 +29,7 @@ android { externalNativeBuild { cmake { path 'src/main/cpp/CMakeLists.txt' + version '3.6.0-rc2' } } diff --git a/testutil/src/main/cpp/CMakeLists.txt b/testutil/src/main/cpp/CMakeLists.txt index 2330f8e3..71f09e86 100644 --- a/testutil/src/main/cpp/CMakeLists.txt +++ b/testutil/src/main/cpp/CMakeLists.txt @@ -9,6 +9,18 @@ cmake_minimum_required(VERSION 3.4.1) set(CMAKE_VERBOSE_MAKEFILE on) +set(libfb_DIR ${CMAKE_SOURCE_DIR}/../../../../lib/fb/src/main/cpp) +set(yogacore_DIR ${CMAKE_SOURCE_DIR}/../../../..) +set(build_DIR ${CMAKE_SOURCE_DIR}/build) + +set(libfb_build_DIR ${build_DIR}/libfb/${ANDROID_ABI}) +set(yogacore_build_DIR ${build_DIR}/yogacore/${ANDROID_ABI}) + +file(MAKE_DIRECTORY ${build_DIR}) + +add_subdirectory(${libfb_DIR} ${libfb_build_DIR}) +add_subdirectory(${yogacore_DIR} ${yogacore_build_DIR}) + add_compile_options( -fno-omit-frame-pointer -fexceptions @@ -26,5 +38,8 @@ add_library(testutil SHARED target_include_directories(testutil PRIVATE include) +target_include_directories(testutil PRIVATE + ${libfb_DIR}/include + ${yogacore_DIR}) -target_link_libraries(testutil android log) +target_link_libraries(testutil yogacore fb) From 10f4bceac01993579dd30ded83620aa175cfdeda Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 16 Sep 2019 03:40:38 -0700 Subject: [PATCH 160/347] bump version to 1.15.0 Summary: Bumping version to 1.15.0 for new yoga release Reviewed By: amir-shalem Differential Revision: D17394805 fbshipit-source-id: de43e97a0c155f332ecbe4e98b78c2f7c9ffe771 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index fd8e5a71..82f0fb3a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ org.gradle.jvmargs=-Xmx1536M -VERSION_NAME=1.14.0-SNAPSHOT +VERSION_NAME=1.15.0 POM_URL=https://github.com/facebook/yoga POM_SCM_URL=https://github.com/facebook/yoga.git POM_SCM_CONNECTION=scm:git:https://github.com/facebook/yoga.git From 10811e1a94cf74a1e310925946343325cfd2f404 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 16 Sep 2019 04:36:15 -0700 Subject: [PATCH 161/347] bump version to 1.15.0-SNAPSHOT Summary: Bumping version to 1.15.0-SNAPSHOT Reviewed By: amir-shalem Differential Revision: D17394807 fbshipit-source-id: 2ba8ecbb903b9810905fabf3b60efaa8458b6bfd --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 82f0fb3a..cea2036f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ org.gradle.jvmargs=-Xmx1536M -VERSION_NAME=1.15.0 +VERSION_NAME=1.15.0-SNAPSHOT POM_URL=https://github.com/facebook/yoga POM_SCM_URL=https://github.com/facebook/yoga.git POM_SCM_CONNECTION=scm:git:https://github.com/facebook/yoga.git From a5c2f7f27adb87f891d4d201f57ed2ebebb0ecbb Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 16 Sep 2019 05:24:15 -0700 Subject: [PATCH 162/347] fix yoga build issue Could not find yoga:libfb:unspecified. Summary: Fixes the yoga build 1:15:0 build issue Could not find yoga:libfb:unspecified. Required by: project :app > com.facebook.yoga:yoga:1.15.0 libfb dependency was added to solve import issue in YogaPhantomJNIRefs but since we don't have that file now in codebase , it will not be a problem. Reviewed By: amir-shalem Differential Revision: D17395380 fbshipit-source-id: ab8eb2c89afe29b4688787db2214c328d875041e --- java/build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/java/build.gradle b/java/build.gradle index e4494ddc..348d1afb 100644 --- a/java/build.gradle +++ b/java/build.gradle @@ -60,7 +60,6 @@ android { dependencies { compileOnly 'com.google.code.findbugs:jsr305:3.0.1' compileOnly project(':yoga:proguard-annotations') - compile project(':libfb') implementation 'com.facebook.soloader:soloader:0.5.1' testImplementation 'junit:junit:4.12' testCompile project(':testutil') From 26dbe8b4fff2f2d52e6fe8dc09cc013f7d635af0 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 16 Sep 2019 07:46:47 -0700 Subject: [PATCH 163/347] bump version to 1.16.0 Summary: Bump version to 1.16.0 for new yoga release Reviewed By: amir-shalem Differential Revision: D17395785 fbshipit-source-id: b01b31d58b5b1a2a9532e9cce0892c08960ec31c --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index cea2036f..55201366 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ org.gradle.jvmargs=-Xmx1536M -VERSION_NAME=1.15.0-SNAPSHOT +VERSION_NAME=1.16.0 POM_URL=https://github.com/facebook/yoga POM_SCM_URL=https://github.com/facebook/yoga.git POM_SCM_CONNECTION=scm:git:https://github.com/facebook/yoga.git From 968c075e39712883827c166b6864993bae39d033 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 16 Sep 2019 08:23:06 -0700 Subject: [PATCH 164/347] bump version to 1.16.0-SNAPSHOT Summary: Bump version to 1.16.0-SNAPSHOT for new yoga release Reviewed By: amir-shalem Differential Revision: D17396540 fbshipit-source-id: ddd01454752d88548ae7490cfd9fccfb8c591ec9 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 55201366..820eae63 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ org.gradle.jvmargs=-Xmx1536M -VERSION_NAME=1.16.0 +VERSION_NAME=1.16.0-SNAPSHOT POM_URL=https://github.com/facebook/yoga POM_SCM_URL=https://github.com/facebook/yoga.git POM_SCM_CONNECTION=scm:git:https://github.com/facebook/yoga.git From 8216c54b0522822f692970bae03bc3ba46ba35de Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 16 Sep 2019 09:12:44 -0700 Subject: [PATCH 165/347] update build tools versions Summary: Update build tools version to 28.0.3 to fix the below warning WARNING: The specified Android SDK Build Tools version (26.0.2) is ignored, as it is below the minimum supported version (27.0.3) for Android Gradle Plugin 3.1.0. Android SDK Build Tools 27.0.3 will be used. Reviewed By: passy Differential Revision: D17343575 fbshipit-source-id: aa12bf2b55666aacb18f09b1cca22eab05f38220 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 23a36e80..37b07661 100644 --- a/build.gradle +++ b/build.gradle @@ -34,7 +34,7 @@ ext { minSdkVersion = 14 targetSdkVersion = 25 compileSdkVersion = 26 - buildToolsVersion = '26.0.2' + buildToolsVersion = '28.0.3' sourceCompatibilityVersion = JavaVersion.VERSION_1_7 targetCompatibilityVersion = JavaVersion.VERSION_1_7 } From 6ac38d188c90e410aed978d72c8675acd7708941 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 16 Sep 2019 09:12:44 -0700 Subject: [PATCH 166/347] use implementation instead of compile for yoga dependencies Summary: Use implementation instead of compile in build.gradle Reviewed By: passy Differential Revision: D17343602 fbshipit-source-id: a2ec21a46ebbf3feb5dcc0d9ae2684f8efb096e3 --- java/build.gradle | 6 +++--- lib/fb/build.gradle | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/java/build.gradle b/java/build.gradle index 348d1afb..7a0a1a4b 100644 --- a/java/build.gradle +++ b/java/build.gradle @@ -58,11 +58,11 @@ android { } dependencies { - compileOnly 'com.google.code.findbugs:jsr305:3.0.1' - compileOnly project(':yoga:proguard-annotations') + implementation 'com.google.code.findbugs:jsr305:3.0.1' + implementation project(':yoga:proguard-annotations') implementation 'com.facebook.soloader:soloader:0.5.1' testImplementation 'junit:junit:4.12' - testCompile project(':testutil') + testImplementation project(':testutil') } task sourcesJar(type: Jar) { diff --git a/lib/fb/build.gradle b/lib/fb/build.gradle index eb806477..d5e5e202 100644 --- a/lib/fb/build.gradle +++ b/lib/fb/build.gradle @@ -34,7 +34,7 @@ android { dependencies { implementation 'com.facebook.soloader:soloader:0.5.1' - compileOnly 'com.google.code.findbugs:jsr305:3.0.1' - compileOnly project(':yoga:proguard-annotations') + implementation 'com.google.code.findbugs:jsr305:3.0.1' + implementation project(':yoga:proguard-annotations') } } From 67a3841164a5314073b4647193ba83d81457f004 Mon Sep 17 00:00:00 2001 From: Amir Shalem Date: Tue, 17 Sep 2019 06:52:49 -0700 Subject: [PATCH 167/347] Switch to YogaNodeFactory.create Summary: Switch to `YogaNodeFactory.create()` instead of using `YogaNode.create()` Reviewed By: SidharthGuglani Differential Revision: D17258195 fbshipit-source-id: 5f31540724a16e401fcd0fbdf19a4baa354b2d72 --- .../java/com/facebook/yoga/android/VirtualYogaLayout.java | 5 +++-- .../src/main/java/com/facebook/yoga/android/YogaLayout.java | 5 +++-- java/tests/com/facebook/yoga/TestParametrization.java | 4 ++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/android/src/main/java/com/facebook/yoga/android/VirtualYogaLayout.java b/android/src/main/java/com/facebook/yoga/android/VirtualYogaLayout.java index c6b87e5e..e617a9cf 100644 --- a/android/src/main/java/com/facebook/yoga/android/VirtualYogaLayout.java +++ b/android/src/main/java/com/facebook/yoga/android/VirtualYogaLayout.java @@ -17,6 +17,7 @@ import android.view.View; import android.view.ViewGroup; import com.facebook.yoga.YogaNode; +import com.facebook.yoga.YogaNodeFactory; /** * Much like a {@link YogaLayout}, except this class does not render itself (the container) to the @@ -32,7 +33,7 @@ public class VirtualYogaLayout extends ViewGroup { final private List mChildren = new LinkedList<>(); final private Map mYogaNodes = new HashMap<>(); - final private YogaNode mYogaNode = YogaNode.create(); + final private YogaNode mYogaNode = YogaNodeFactory.create(); public VirtualYogaLayout(Context context) { super(context); @@ -72,7 +73,7 @@ public class VirtualYogaLayout extends ViewGroup { return; } - YogaNode node = YogaNode.create(); + YogaNode node = YogaNodeFactory.create(); YogaLayout.LayoutParams lp = new YogaLayout.LayoutParams(params); YogaLayout.applyLayoutParams(lp, node, child); node.setData(child); diff --git a/android/src/main/java/com/facebook/yoga/android/YogaLayout.java b/android/src/main/java/com/facebook/yoga/android/YogaLayout.java index 92e2c86c..f8fb3d64 100644 --- a/android/src/main/java/com/facebook/yoga/android/YogaLayout.java +++ b/android/src/main/java/com/facebook/yoga/android/YogaLayout.java @@ -28,6 +28,7 @@ import com.facebook.yoga.YogaMeasureFunction; import com.facebook.yoga.YogaMeasureMode; import com.facebook.yoga.YogaMeasureOutput; import com.facebook.yoga.YogaNode; +import com.facebook.yoga.YogaNodeFactory; import com.facebook.yoga.YogaOverflow; import com.facebook.yoga.YogaPositionType; import com.facebook.yoga.YogaWrap; @@ -77,7 +78,7 @@ public class YogaLayout extends ViewGroup { public YogaLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); - mYogaNode = YogaNode.create(); + mYogaNode = YogaNodeFactory.create(); mYogaNodes = new HashMap<>(); mYogaNode.setData(this); @@ -154,7 +155,7 @@ public class YogaLayout extends ViewGroup { if(mYogaNodes.containsKey(child)) { childNode = mYogaNodes.get(child); } else { - childNode = YogaNode.create(); + childNode = YogaNodeFactory.create(); } childNode.setData(child); diff --git a/java/tests/com/facebook/yoga/TestParametrization.java b/java/tests/com/facebook/yoga/TestParametrization.java index 0ae47233..0e20ddaf 100644 --- a/java/tests/com/facebook/yoga/TestParametrization.java +++ b/java/tests/com/facebook/yoga/TestParametrization.java @@ -14,12 +14,12 @@ public class TestParametrization { NodeFactory nodeFactory = new NodeFactory() { @Override public YogaNode create() { - return YogaNode.create(); + return YogaNodeFactory.create(); } @Override public YogaNode create(YogaConfig config) { - return YogaNode.create(config); + return YogaNodeFactory.create(config); } @Override From d697bbe0a5b63b4b686b8253bbfe17684c2c005f Mon Sep 17 00:00:00 2001 From: Amir Shalem Date: Tue, 17 Sep 2019 06:52:49 -0700 Subject: [PATCH 168/347] Switch to YogaConfigFactory.create Summary: Switch to `YogaNodeFactory.create()` instead of using `YogaNode.create()` Reviewed By: SidharthGuglani Differential Revision: D17266408 fbshipit-source-id: 69e1e59c7345d16eb174af97c2e231666a02354b --- gentest/gentest-java.js | 2 +- .../com/facebook/yoga/BatchingAPITests.java | 82 +++++++++---------- .../facebook/yoga/YGAbsolutePositionTest.java | 42 +++++----- .../facebook/yoga/YGAlignBaselineTest.java | 4 +- .../com/facebook/yoga/YGAlignContentTest.java | 38 ++++----- .../com/facebook/yoga/YGAlignItemsTest.java | 56 ++++++------- .../com/facebook/yoga/YGAlignSelfTest.java | 10 +-- .../com/facebook/yoga/YGAndroidNewsFeed.java | 2 +- .../tests/com/facebook/yoga/YGBorderTest.java | 10 +-- .../com/facebook/yoga/YGDimensionTest.java | 4 +- .../com/facebook/yoga/YGDisplayTest.java | 10 +-- .../facebook/yoga/YGFlexDirectionTest.java | 12 +-- java/tests/com/facebook/yoga/YGFlexTest.java | 20 ++--- .../com/facebook/yoga/YGFlexWrapTest.java | 40 ++++----- .../facebook/yoga/YGJustifyContentTest.java | 36 ++++---- .../tests/com/facebook/yoga/YGMarginTest.java | 66 +++++++-------- .../facebook/yoga/YGMinMaxDimensionTest.java | 52 ++++++------ .../com/facebook/yoga/YGPaddingTest.java | 12 +-- .../com/facebook/yoga/YGPercentageTest.java | 40 ++++----- .../com/facebook/yoga/YGRoundingTest.java | 26 +++--- .../com/facebook/yoga/YGSizeOverflowTest.java | 6 +- .../com/facebook/yoga/YogaLoggerTest.java | 2 +- .../tests/com/facebook/yoga/YogaNodeTest.java | 6 +- 23 files changed, 289 insertions(+), 289 deletions(-) diff --git a/gentest/gentest-java.js b/gentest/gentest-java.js index 033417e2..983f6272 100644 --- a/gentest/gentest-java.js +++ b/gentest/gentest-java.js @@ -72,7 +72,7 @@ JavaEmitter.prototype = Object.create(Emitter.prototype, { this.push('public void test_' + name + '() {'); this.pushIndent(); - this.push("YogaConfig config = new YogaConfig();") + this.push("YogaConfig config = YogaConfigFactory.create();") for (var i in experiments) { this.push('config.setExperimentalFeatureEnabled(YogaExperimentalFeature.' + toJavaUpper(experiments[i]) +', true);'); } diff --git a/java/tests/com/facebook/yoga/BatchingAPITests.java b/java/tests/com/facebook/yoga/BatchingAPITests.java index 29e31ec7..3cabadc1 100644 --- a/java/tests/com/facebook/yoga/BatchingAPITests.java +++ b/java/tests/com/facebook/yoga/BatchingAPITests.java @@ -23,7 +23,7 @@ public class BatchingAPITests { @Test public void testStyleInputLayoutDirection() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.LAYOUT_DIRECTION, YogaDirection.LTR.intValue()}; root.setStyleInputs(arr, 2); @@ -33,7 +33,7 @@ public class BatchingAPITests { @Test public void testStyleInputFlexDirection() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.FLEX_DIRECTION, YogaFlexDirection.ROW.intValue()}; root.setStyleInputs(arr, 2); @@ -42,7 +42,7 @@ public class BatchingAPITests { @Test public void testStyleInputFlex() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.FLEX, 5f}; root.setStyleInputs(arr, 2); @@ -51,7 +51,7 @@ public class BatchingAPITests { @Test public void testStyleInputFlexGrow() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.FLEX_GROW, 5f}; root.setStyleInputs(arr, 2); @@ -60,7 +60,7 @@ public class BatchingAPITests { @Test public void testStyleInputFlexShrink() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.FLEX_SHRINK, 5f}; root.setStyleInputs(arr, 2); @@ -69,7 +69,7 @@ public class BatchingAPITests { @Test public void testStyleInputFlexBasis() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.FLEX_BASIS, 5f}; root.setStyleInputs(arr, 2); @@ -78,7 +78,7 @@ public class BatchingAPITests { @Test public void testStyleInputFlexBasisPercent() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.FLEX_BASIS_PERCENT, 5f}; root.setStyleInputs(arr, 2); @@ -87,7 +87,7 @@ public class BatchingAPITests { @Test public void testStyleInputFlexBasisAuto() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.FLEX_BASIS_AUTO}; root.setStyleInputs(arr, 1); @@ -96,7 +96,7 @@ public class BatchingAPITests { @Test public void testStyleInputFlexWrap() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.FLEX_WRAP, YogaWrap.WRAP.intValue()}; root.setStyleInputs(arr, 2); @@ -105,7 +105,7 @@ public class BatchingAPITests { @Test public void testStyleInputWidth() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.WIDTH, 50f}; root.setStyleInputs(arr, 2); @@ -114,7 +114,7 @@ public class BatchingAPITests { @Test public void testStyleInputWidthPercent() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.WIDTH_PERCENT, 5f}; root.setStyleInputs(arr, 2); @@ -123,7 +123,7 @@ public class BatchingAPITests { @Test public void testStyleInputWidthAuto() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.WIDTH_AUTO}; root.setStyleInputs(arr, 1); @@ -132,7 +132,7 @@ public class BatchingAPITests { @Test public void testStyleInputMinWidth() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.MIN_WIDTH, 50f}; root.setStyleInputs(arr, 2); @@ -141,7 +141,7 @@ public class BatchingAPITests { @Test public void testStyleInputMinWidthPercent() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.MIN_WIDTH_PERCENT, 5f}; root.setStyleInputs(arr, 2); @@ -150,7 +150,7 @@ public class BatchingAPITests { @Test public void testStyleInputMaxWidth() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.MAX_WIDTH, 50f}; root.setStyleInputs(arr, 2); @@ -159,7 +159,7 @@ public class BatchingAPITests { @Test public void testStyleInputMaxWidthPercent() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.MAX_WIDTH_PERCENT, 5f}; root.setStyleInputs(arr, 2); @@ -168,7 +168,7 @@ public class BatchingAPITests { @Test public void testStyleInputHeight() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.HEIGHT, 50f}; root.setStyleInputs(arr, 2); @@ -177,7 +177,7 @@ public class BatchingAPITests { @Test public void testStyleInputHeightPercent() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.HEIGHT_PERCENT, 5f}; root.setStyleInputs(arr, 2); @@ -186,7 +186,7 @@ public class BatchingAPITests { @Test public void testStyleInputHeightAuto() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.HEIGHT_AUTO}; root.setStyleInputs(arr, 1); @@ -195,7 +195,7 @@ public class BatchingAPITests { @Test public void testStyleInputMinHeight() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.MIN_HEIGHT, 50f}; root.setStyleInputs(arr, 2); @@ -204,7 +204,7 @@ public class BatchingAPITests { @Test public void testStyleInputMinHeightPercent() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.MIN_HEIGHT_PERCENT, 5f}; root.setStyleInputs(arr, 2); @@ -213,7 +213,7 @@ public class BatchingAPITests { @Test public void testStyleInputMaxHeight() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.MAX_HEIGHT, 50f}; root.setStyleInputs(arr, 2); @@ -222,7 +222,7 @@ public class BatchingAPITests { @Test public void testStyleInputMaxHeightPercent() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.MAX_HEIGHT_PERCENT, 5f}; root.setStyleInputs(arr, 2); @@ -231,7 +231,7 @@ public class BatchingAPITests { @Test public void testStyleInputJustiyContent() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.JUSTIFY_CONTENT, YogaJustify.CENTER.intValue()}; root.setStyleInputs(arr, 2); @@ -240,7 +240,7 @@ public class BatchingAPITests { @Test public void testStyleInputAlignItems() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.ALIGN_ITEMS, YogaAlign.BASELINE.intValue()}; root.setStyleInputs(arr, 2); @@ -249,7 +249,7 @@ public class BatchingAPITests { @Test public void testStyleInputAlignSelf() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.ALIGN_SELF, YogaAlign.BASELINE.intValue()}; root.setStyleInputs(arr, 2); @@ -258,7 +258,7 @@ public class BatchingAPITests { @Test public void testStyleInputAlignContent() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.ALIGN_CONTENT, YogaAlign.BASELINE.intValue()}; root.setStyleInputs(arr, 2); @@ -267,7 +267,7 @@ public class BatchingAPITests { @Test public void testStyleInputPositionType() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.POSITION_TYPE, YogaPositionType.ABSOLUTE.intValue()}; root.setStyleInputs(arr, 2); @@ -276,7 +276,7 @@ public class BatchingAPITests { @Test public void testStyleInputAspectRatio() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.ASPECT_RATIO, 2f}; root.setStyleInputs(arr, 2); @@ -285,7 +285,7 @@ public class BatchingAPITests { @Test public void testStyleInputOverflow() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.OVERFLOW, YogaOverflow.HIDDEN.intValue()}; root.setStyleInputs(arr, 2); @@ -294,7 +294,7 @@ public class BatchingAPITests { @Test public void testStyleInputDisplay() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.DISPLAY, YogaDisplay.NONE.intValue()}; root.setStyleInputs(arr, 2); @@ -303,7 +303,7 @@ public class BatchingAPITests { @Test public void testStyleInputMargin() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.MARGIN, YogaEdge.LEFT.intValue(), 12f}; root.setStyleInputs(arr, 3); @@ -312,7 +312,7 @@ public class BatchingAPITests { @Test public void testStyleInputMarginPercent() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.MARGIN_PERCENT, YogaEdge.LEFT.intValue(), 12f}; root.setStyleInputs(arr, 3); @@ -321,7 +321,7 @@ public class BatchingAPITests { @Test public void testStyleInputMarginAuto() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.MARGIN_AUTO, YogaEdge.LEFT.intValue()}; root.setStyleInputs(arr, 2); @@ -330,7 +330,7 @@ public class BatchingAPITests { @Test public void testStyleInputPadding() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.PADDING, YogaEdge.LEFT.intValue(), 12f}; root.setStyleInputs(arr, 3); @@ -339,7 +339,7 @@ public class BatchingAPITests { @Test public void testStyleInputPaddingPercent() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.PADDING_PERCENT, YogaEdge.LEFT.intValue(), 12f}; root.setStyleInputs(arr, 3); @@ -348,7 +348,7 @@ public class BatchingAPITests { @Test public void testStyleInputBorder() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.BORDER, YogaEdge.LEFT.intValue(), 12f}; root.setStyleInputs(arr, 3); @@ -357,7 +357,7 @@ public class BatchingAPITests { @Test public void testStyleInputPosition() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.POSITION, YogaEdge.LEFT.intValue(), 12f}; root.setStyleInputs(arr, 3); @@ -366,7 +366,7 @@ public class BatchingAPITests { @Test public void testStyleInputPositionPercent() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.POSITION_PERCENT, YogaEdge.LEFT.intValue(), 12f}; root.setStyleInputs(arr, 3); @@ -375,7 +375,7 @@ public class BatchingAPITests { @Test public void testStyleInputIsReferenceBaseline() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); float[] arr = new float[]{YogaStyleInputs.IS_REFERENCE_BASELINE, 1f}; root.setStyleInputs(arr, 2); @@ -384,7 +384,7 @@ public class BatchingAPITests { @Test public void testStyleInputs() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); int count = 0; float[] arr = new float[100]; diff --git a/java/tests/com/facebook/yoga/YGAbsolutePositionTest.java b/java/tests/com/facebook/yoga/YGAbsolutePositionTest.java index b3523e10..7652c919 100644 --- a/java/tests/com/facebook/yoga/YGAbsolutePositionTest.java +++ b/java/tests/com/facebook/yoga/YGAbsolutePositionTest.java @@ -25,7 +25,7 @@ public class YGAbsolutePositionTest { @Test public void test_absolute_layout_width_height_start_top() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -67,7 +67,7 @@ public class YGAbsolutePositionTest { @Test public void test_absolute_layout_width_height_end_bottom() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -109,7 +109,7 @@ public class YGAbsolutePositionTest { @Test public void test_absolute_layout_start_top_end_bottom() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -151,7 +151,7 @@ public class YGAbsolutePositionTest { @Test public void test_absolute_layout_width_height_start_top_end_bottom() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -195,7 +195,7 @@ public class YGAbsolutePositionTest { @Test public void test_do_not_clamp_height_of_absolute_node_to_height_of_its_overflow_hidden_parent() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -252,7 +252,7 @@ public class YGAbsolutePositionTest { @Test public void test_absolute_layout_within_border() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setMargin(YogaEdge.LEFT, 10f); @@ -368,7 +368,7 @@ public class YGAbsolutePositionTest { @Test public void test_absolute_layout_align_items_and_justify_content_center() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.CENTER); @@ -411,7 +411,7 @@ public class YGAbsolutePositionTest { @Test public void test_absolute_layout_align_items_and_justify_content_flex_end() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.FLEX_END); @@ -454,7 +454,7 @@ public class YGAbsolutePositionTest { @Test public void test_absolute_layout_justify_content_center() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.CENTER); @@ -496,7 +496,7 @@ public class YGAbsolutePositionTest { @Test public void test_absolute_layout_align_items_center() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignItems(YogaAlign.CENTER); @@ -538,7 +538,7 @@ public class YGAbsolutePositionTest { @Test public void test_absolute_layout_align_items_center_on_child_only() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexGrow(1f); @@ -580,7 +580,7 @@ public class YGAbsolutePositionTest { @Test public void test_absolute_layout_align_items_and_justify_content_center_and_top_position() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.CENTER); @@ -624,7 +624,7 @@ public class YGAbsolutePositionTest { @Test public void test_absolute_layout_align_items_and_justify_content_center_and_bottom_position() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.CENTER); @@ -668,7 +668,7 @@ public class YGAbsolutePositionTest { @Test public void test_absolute_layout_align_items_and_justify_content_center_and_left_position() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.CENTER); @@ -712,7 +712,7 @@ public class YGAbsolutePositionTest { @Test public void test_absolute_layout_align_items_and_justify_content_center_and_right_position() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.CENTER); @@ -756,7 +756,7 @@ public class YGAbsolutePositionTest { @Test public void test_position_root_with_rtl_should_position_withoutdirection() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setPosition(YogaEdge.LEFT, 72f); @@ -781,7 +781,7 @@ public class YGAbsolutePositionTest { @Test public void test_absolute_layout_percentage_bottom_based_on_parent_height() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -856,7 +856,7 @@ public class YGAbsolutePositionTest { @Test public void test_absolute_layout_in_wrap_reverse_column_container() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWrap(YogaWrap.WRAP_REVERSE); @@ -897,7 +897,7 @@ public class YGAbsolutePositionTest { @Test public void test_absolute_layout_in_wrap_reverse_row_container() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -939,7 +939,7 @@ public class YGAbsolutePositionTest { @Test public void test_absolute_layout_in_wrap_reverse_column_container_flex_end() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWrap(YogaWrap.WRAP_REVERSE); @@ -981,7 +981,7 @@ public class YGAbsolutePositionTest { @Test public void test_absolute_layout_in_wrap_reverse_row_container_flex_end() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); diff --git a/java/tests/com/facebook/yoga/YGAlignBaselineTest.java b/java/tests/com/facebook/yoga/YGAlignBaselineTest.java index 893d130b..b3240659 100644 --- a/java/tests/com/facebook/yoga/YGAlignBaselineTest.java +++ b/java/tests/com/facebook/yoga/YGAlignBaselineTest.java @@ -32,7 +32,7 @@ public class YGAlignBaselineTest { @Test public void test_align_baseline_parent_using_child_in_column_as_reference() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createYGNode(config, YogaFlexDirection.ROW, 1000f, 1000f, true); @@ -69,7 +69,7 @@ public class YGAlignBaselineTest { @Test public void test_align_baseline_parent_using_child_in_row_as_reference() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createYGNode(config, YogaFlexDirection.ROW, 1000f, 1000f, true); diff --git a/java/tests/com/facebook/yoga/YGAlignContentTest.java b/java/tests/com/facebook/yoga/YGAlignContentTest.java index 098cab51..9403ec28 100644 --- a/java/tests/com/facebook/yoga/YGAlignContentTest.java +++ b/java/tests/com/facebook/yoga/YGAlignContentTest.java @@ -25,7 +25,7 @@ public class YGAlignContentTest { @Test public void test_align_content_flex_start() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -126,7 +126,7 @@ public class YGAlignContentTest { @Test public void test_align_content_flex_start_without_height_on_children() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWrap(YogaWrap.WRAP); @@ -223,7 +223,7 @@ public class YGAlignContentTest { @Test public void test_align_content_flex_start_with_flex() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWrap(YogaWrap.WRAP); @@ -326,7 +326,7 @@ public class YGAlignContentTest { @Test public void test_align_content_flex_end() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignContent(YogaAlign.FLEX_END); @@ -427,7 +427,7 @@ public class YGAlignContentTest { @Test public void test_align_content_stretch() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignContent(YogaAlign.STRETCH); @@ -523,7 +523,7 @@ public class YGAlignContentTest { @Test public void test_align_content_spacebetween() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -625,7 +625,7 @@ public class YGAlignContentTest { @Test public void test_align_content_spacearound() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -727,7 +727,7 @@ public class YGAlignContentTest { @Test public void test_align_content_stretch_row() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -824,7 +824,7 @@ public class YGAlignContentTest { @Test public void test_align_content_stretch_row_with_children() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -937,7 +937,7 @@ public class YGAlignContentTest { @Test public void test_align_content_stretch_row_with_flex() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -1040,7 +1040,7 @@ public class YGAlignContentTest { @Test public void test_align_content_stretch_row_with_flex_no_shrink() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -1142,7 +1142,7 @@ public class YGAlignContentTest { @Test public void test_align_content_stretch_row_with_margin() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -1247,7 +1247,7 @@ public class YGAlignContentTest { @Test public void test_align_content_stretch_row_with_padding() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -1352,7 +1352,7 @@ public class YGAlignContentTest { @Test public void test_align_content_stretch_row_with_single_row() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -1407,7 +1407,7 @@ public class YGAlignContentTest { @Test public void test_align_content_stretch_row_with_fixed_height() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -1505,7 +1505,7 @@ public class YGAlignContentTest { @Test public void test_align_content_stretch_row_with_max_height() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -1603,7 +1603,7 @@ public class YGAlignContentTest { @Test public void test_align_content_stretch_row_with_min_height() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -1701,7 +1701,7 @@ public class YGAlignContentTest { @Test public void test_align_content_stretch_column() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignContent(YogaAlign.STRETCH); @@ -1816,7 +1816,7 @@ public class YGAlignContentTest { @Test public void test_align_content_stretch_is_not_overriding_align_items() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignContent(YogaAlign.STRETCH); diff --git a/java/tests/com/facebook/yoga/YGAlignItemsTest.java b/java/tests/com/facebook/yoga/YGAlignItemsTest.java index f5127150..1db0a78f 100644 --- a/java/tests/com/facebook/yoga/YGAlignItemsTest.java +++ b/java/tests/com/facebook/yoga/YGAlignItemsTest.java @@ -25,7 +25,7 @@ public class YGAlignItemsTest { @Test public void test_align_items_stretch() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -63,7 +63,7 @@ public class YGAlignItemsTest { @Test public void test_align_items_center() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignItems(YogaAlign.CENTER); @@ -103,7 +103,7 @@ public class YGAlignItemsTest { @Test public void test_align_items_flex_start() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignItems(YogaAlign.FLEX_START); @@ -143,7 +143,7 @@ public class YGAlignItemsTest { @Test public void test_align_items_flex_end() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignItems(YogaAlign.FLEX_END); @@ -183,7 +183,7 @@ public class YGAlignItemsTest { @Test public void test_align_baseline() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -239,7 +239,7 @@ public class YGAlignItemsTest { @Test public void test_align_baseline_child() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -310,7 +310,7 @@ public class YGAlignItemsTest { @Test public void test_align_baseline_child_multiline() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -428,7 +428,7 @@ public class YGAlignItemsTest { @Test public void test_align_baseline_child_multiline_override() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -548,7 +548,7 @@ public class YGAlignItemsTest { @Test public void test_align_baseline_child_multiline_no_override_on_secondline() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -667,7 +667,7 @@ public class YGAlignItemsTest { @Test public void test_align_baseline_child_top() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -739,7 +739,7 @@ public class YGAlignItemsTest { @Test public void test_align_baseline_child_top2() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -811,7 +811,7 @@ public class YGAlignItemsTest { @Test public void test_align_baseline_double_nested_child() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -897,7 +897,7 @@ public class YGAlignItemsTest { @Test public void test_align_baseline_column() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignItems(YogaAlign.BASELINE); @@ -952,7 +952,7 @@ public class YGAlignItemsTest { @Test public void test_align_baseline_child_margin() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -1031,7 +1031,7 @@ public class YGAlignItemsTest { @Test public void test_align_baseline_child_padding() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -1110,7 +1110,7 @@ public class YGAlignItemsTest { @Test public void test_align_baseline_multiline() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -1227,7 +1227,7 @@ public class YGAlignItemsTest { @Test public void test_align_baseline_multiline_column() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignItems(YogaAlign.BASELINE); @@ -1343,7 +1343,7 @@ public class YGAlignItemsTest { @Test public void test_align_baseline_multiline_column2() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignItems(YogaAlign.BASELINE); @@ -1459,7 +1459,7 @@ public class YGAlignItemsTest { @Test public void test_align_baseline_multiline_row_and_column() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -1576,7 +1576,7 @@ public class YGAlignItemsTest { @Test public void test_align_items_center_child_with_margin_bigger_than_parent() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.CENTER); @@ -1633,7 +1633,7 @@ public class YGAlignItemsTest { @Test public void test_align_items_flex_end_child_with_margin_bigger_than_parent() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.CENTER); @@ -1690,7 +1690,7 @@ public class YGAlignItemsTest { @Test public void test_align_items_center_child_without_margin_bigger_than_parent() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.CENTER); @@ -1745,7 +1745,7 @@ public class YGAlignItemsTest { @Test public void test_align_items_flex_end_child_without_margin_bigger_than_parent() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.CENTER); @@ -1800,7 +1800,7 @@ public class YGAlignItemsTest { @Test public void test_align_center_should_size_based_on_content() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignItems(YogaAlign.CENTER); @@ -1871,7 +1871,7 @@ public class YGAlignItemsTest { @Test public void test_align_strech_should_size_based_on_parent() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setMargin(YogaEdge.TOP, 20f); @@ -1941,7 +1941,7 @@ public class YGAlignItemsTest { @Test public void test_align_flex_start_with_shrinking_children() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(500f); @@ -2009,7 +2009,7 @@ public class YGAlignItemsTest { @Test public void test_align_flex_start_with_stretching_children() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(500f); @@ -2076,7 +2076,7 @@ public class YGAlignItemsTest { @Test public void test_align_flex_start_with_shrinking_children_with_stretch() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(500f); diff --git a/java/tests/com/facebook/yoga/YGAlignSelfTest.java b/java/tests/com/facebook/yoga/YGAlignSelfTest.java index c73ee981..a35f07a4 100644 --- a/java/tests/com/facebook/yoga/YGAlignSelfTest.java +++ b/java/tests/com/facebook/yoga/YGAlignSelfTest.java @@ -25,7 +25,7 @@ public class YGAlignSelfTest { @Test public void test_align_self_center() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -65,7 +65,7 @@ public class YGAlignSelfTest { @Test public void test_align_self_flex_end() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -105,7 +105,7 @@ public class YGAlignSelfTest { @Test public void test_align_self_flex_start() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -145,7 +145,7 @@ public class YGAlignSelfTest { @Test public void test_align_self_flex_end_override_flex_start() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignItems(YogaAlign.FLEX_START); @@ -186,7 +186,7 @@ public class YGAlignSelfTest { @Test public void test_align_self_baseline() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); diff --git a/java/tests/com/facebook/yoga/YGAndroidNewsFeed.java b/java/tests/com/facebook/yoga/YGAndroidNewsFeed.java index ae07ea32..1b4fde74 100644 --- a/java/tests/com/facebook/yoga/YGAndroidNewsFeed.java +++ b/java/tests/com/facebook/yoga/YGAndroidNewsFeed.java @@ -25,7 +25,7 @@ public class YGAndroidNewsFeed { @Test public void test_android_news_feed() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignContent(YogaAlign.STRETCH); diff --git a/java/tests/com/facebook/yoga/YGBorderTest.java b/java/tests/com/facebook/yoga/YGBorderTest.java index 8c76ae0d..5ecddc11 100644 --- a/java/tests/com/facebook/yoga/YGBorderTest.java +++ b/java/tests/com/facebook/yoga/YGBorderTest.java @@ -25,7 +25,7 @@ public class YGBorderTest { @Test public void test_border_no_size() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setBorder(YogaEdge.LEFT, 10f); @@ -51,7 +51,7 @@ public class YGBorderTest { @Test public void test_border_container_match_child() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setBorder(YogaEdge.LEFT, 10f); @@ -92,7 +92,7 @@ public class YGBorderTest { @Test public void test_border_flex_child() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setBorder(YogaEdge.LEFT, 10f); @@ -135,7 +135,7 @@ public class YGBorderTest { @Test public void test_border_stretch_child() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setBorder(YogaEdge.LEFT, 10f); @@ -177,7 +177,7 @@ public class YGBorderTest { @Test public void test_border_center_child() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.CENTER); diff --git a/java/tests/com/facebook/yoga/YGDimensionTest.java b/java/tests/com/facebook/yoga/YGDimensionTest.java index 36f6dafd..3c9b9aa9 100644 --- a/java/tests/com/facebook/yoga/YGDimensionTest.java +++ b/java/tests/com/facebook/yoga/YGDimensionTest.java @@ -25,7 +25,7 @@ public class YGDimensionTest { @Test public void test_wrap_child() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); @@ -62,7 +62,7 @@ public class YGDimensionTest { @Test public void test_wrap_grandchild() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); diff --git a/java/tests/com/facebook/yoga/YGDisplayTest.java b/java/tests/com/facebook/yoga/YGDisplayTest.java index 38bf5193..f1e6f896 100644 --- a/java/tests/com/facebook/yoga/YGDisplayTest.java +++ b/java/tests/com/facebook/yoga/YGDisplayTest.java @@ -25,7 +25,7 @@ public class YGDisplayTest { @Test public void test_display_none() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -79,7 +79,7 @@ public class YGDisplayTest { @Test public void test_display_none_fixed_size() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -134,7 +134,7 @@ public class YGDisplayTest { @Test public void test_display_none_with_margin() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -193,7 +193,7 @@ public class YGDisplayTest { @Test public void test_display_none_with_child() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -284,7 +284,7 @@ public class YGDisplayTest { @Test public void test_display_none_with_position() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); diff --git a/java/tests/com/facebook/yoga/YGFlexDirectionTest.java b/java/tests/com/facebook/yoga/YGFlexDirectionTest.java index 1299a48e..ee014a02 100644 --- a/java/tests/com/facebook/yoga/YGFlexDirectionTest.java +++ b/java/tests/com/facebook/yoga/YGFlexDirectionTest.java @@ -25,7 +25,7 @@ public class YGFlexDirectionTest { @Test public void test_flex_direction_column_no_height() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -90,7 +90,7 @@ public class YGFlexDirectionTest { @Test public void test_flex_direction_row_no_width() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -156,7 +156,7 @@ public class YGFlexDirectionTest { @Test public void test_flex_direction_column() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -222,7 +222,7 @@ public class YGFlexDirectionTest { @Test public void test_flex_direction_row() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -289,7 +289,7 @@ public class YGFlexDirectionTest { @Test public void test_flex_direction_column_reverse() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.COLUMN_REVERSE); @@ -356,7 +356,7 @@ public class YGFlexDirectionTest { @Test public void test_flex_direction_row_reverse() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW_REVERSE); diff --git a/java/tests/com/facebook/yoga/YGFlexTest.java b/java/tests/com/facebook/yoga/YGFlexTest.java index e7a5f33b..a85c5217 100644 --- a/java/tests/com/facebook/yoga/YGFlexTest.java +++ b/java/tests/com/facebook/yoga/YGFlexTest.java @@ -25,7 +25,7 @@ public class YGFlexTest { @Test public void test_flex_basis_flex_grow_column() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -78,7 +78,7 @@ public class YGFlexTest { @Test public void test_flex_shrink_flex_grow_row() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -135,7 +135,7 @@ public class YGFlexTest { @Test public void test_flex_shrink_flex_grow_child_flex_shrink_other_child() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -193,7 +193,7 @@ public class YGFlexTest { @Test public void test_flex_basis_flex_grow_row() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -247,7 +247,7 @@ public class YGFlexTest { @Test public void test_flex_basis_flex_shrink_column() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -300,7 +300,7 @@ public class YGFlexTest { @Test public void test_flex_basis_flex_shrink_row() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -354,7 +354,7 @@ public class YGFlexTest { @Test public void test_flex_shrink_to_zero() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setHeight(75f); @@ -423,7 +423,7 @@ public class YGFlexTest { @Test public void test_flex_basis_overrides_main_size() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -493,7 +493,7 @@ public class YGFlexTest { @Test public void test_flex_grow_shrink_at_most() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -545,7 +545,7 @@ public class YGFlexTest { @Test public void test_flex_grow_less_than_factor_one() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(200f); diff --git a/java/tests/com/facebook/yoga/YGFlexWrapTest.java b/java/tests/com/facebook/yoga/YGFlexWrapTest.java index ea347297..c853642d 100644 --- a/java/tests/com/facebook/yoga/YGFlexWrapTest.java +++ b/java/tests/com/facebook/yoga/YGFlexWrapTest.java @@ -25,7 +25,7 @@ public class YGFlexWrapTest { @Test public void test_wrap_column() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWrap(YogaWrap.WRAP); @@ -109,7 +109,7 @@ public class YGFlexWrapTest { @Test public void test_wrap_row() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -194,7 +194,7 @@ public class YGFlexWrapTest { @Test public void test_wrap_row_align_items_flex_end() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -280,7 +280,7 @@ public class YGFlexWrapTest { @Test public void test_wrap_row_align_items_center() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -366,7 +366,7 @@ public class YGFlexWrapTest { @Test public void test_flex_wrap_children_with_min_main_overriding_flex_basis() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -423,7 +423,7 @@ public class YGFlexWrapTest { @Test public void test_flex_wrap_wrap_to_child_height() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); @@ -505,7 +505,7 @@ public class YGFlexWrapTest { @Test public void test_flex_wrap_align_stretch_fits_one_row() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -559,7 +559,7 @@ public class YGFlexWrapTest { @Test public void test_wrap_reverse_row_align_content_flex_start() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -659,7 +659,7 @@ public class YGFlexWrapTest { @Test public void test_wrap_reverse_row_align_content_center() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -760,7 +760,7 @@ public class YGFlexWrapTest { @Test public void test_wrap_reverse_row_single_line_different_size() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -860,7 +860,7 @@ public class YGFlexWrapTest { @Test public void test_wrap_reverse_row_align_content_stretch() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -961,7 +961,7 @@ public class YGFlexWrapTest { @Test public void test_wrap_reverse_row_align_content_space_around() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -1062,7 +1062,7 @@ public class YGFlexWrapTest { @Test public void test_wrap_reverse_column_fixed_size() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignItems(YogaAlign.CENTER); @@ -1163,7 +1163,7 @@ public class YGFlexWrapTest { @Test public void test_wrapped_row_within_align_items_center() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignItems(YogaAlign.CENTER); @@ -1233,7 +1233,7 @@ public class YGFlexWrapTest { @Test public void test_wrapped_row_within_align_items_flex_start() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignItems(YogaAlign.FLEX_START); @@ -1303,7 +1303,7 @@ public class YGFlexWrapTest { @Test public void test_wrapped_row_within_align_items_flex_end() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignItems(YogaAlign.FLEX_END); @@ -1373,7 +1373,7 @@ public class YGFlexWrapTest { @Test public void test_wrapped_column_max_height() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.CENTER); @@ -1451,7 +1451,7 @@ public class YGFlexWrapTest { @Test public void test_wrapped_column_max_height_flex() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.CENTER); @@ -1535,7 +1535,7 @@ public class YGFlexWrapTest { @Test public void test_wrap_nodes_with_content_sizing_overflowing_margin() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(500f); @@ -1632,7 +1632,7 @@ public class YGFlexWrapTest { @Test public void test_wrap_nodes_with_content_sizing_margin_cross() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(500f); diff --git a/java/tests/com/facebook/yoga/YGJustifyContentTest.java b/java/tests/com/facebook/yoga/YGJustifyContentTest.java index 070aa32f..4a1d96b8 100644 --- a/java/tests/com/facebook/yoga/YGJustifyContentTest.java +++ b/java/tests/com/facebook/yoga/YGJustifyContentTest.java @@ -25,7 +25,7 @@ public class YGJustifyContentTest { @Test public void test_justify_content_row_flex_start() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -92,7 +92,7 @@ public class YGJustifyContentTest { @Test public void test_justify_content_row_flex_end() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -160,7 +160,7 @@ public class YGJustifyContentTest { @Test public void test_justify_content_row_center() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -228,7 +228,7 @@ public class YGJustifyContentTest { @Test public void test_justify_content_row_space_between() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -296,7 +296,7 @@ public class YGJustifyContentTest { @Test public void test_justify_content_row_space_around() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -364,7 +364,7 @@ public class YGJustifyContentTest { @Test public void test_justify_content_column_flex_start() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(102f); @@ -430,7 +430,7 @@ public class YGJustifyContentTest { @Test public void test_justify_content_column_flex_end() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.FLEX_END); @@ -497,7 +497,7 @@ public class YGJustifyContentTest { @Test public void test_justify_content_column_center() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.CENTER); @@ -564,7 +564,7 @@ public class YGJustifyContentTest { @Test public void test_justify_content_column_space_between() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.SPACE_BETWEEN); @@ -631,7 +631,7 @@ public class YGJustifyContentTest { @Test public void test_justify_content_column_space_around() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.SPACE_AROUND); @@ -698,7 +698,7 @@ public class YGJustifyContentTest { @Test public void test_justify_content_row_min_width_and_margin() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -739,7 +739,7 @@ public class YGJustifyContentTest { @Test public void test_justify_content_row_max_width_and_margin() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -781,7 +781,7 @@ public class YGJustifyContentTest { @Test public void test_justify_content_column_min_height_and_margin() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.CENTER); @@ -821,7 +821,7 @@ public class YGJustifyContentTest { @Test public void test_justify_content_colunn_max_height_and_margin() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.CENTER); @@ -862,7 +862,7 @@ public class YGJustifyContentTest { @Test public void test_justify_content_column_space_evenly() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.SPACE_EVENLY); @@ -929,7 +929,7 @@ public class YGJustifyContentTest { @Test public void test_justify_content_row_space_evenly() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -997,7 +997,7 @@ public class YGJustifyContentTest { @Test public void test_justify_content_min_width_with_padding_child_width_greater_than_parent() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignContent(YogaAlign.STRETCH); @@ -1073,7 +1073,7 @@ public class YGJustifyContentTest { @Test public void test_justify_content_min_width_with_padding_child_width_lower_than_parent() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignContent(YogaAlign.STRETCH); diff --git a/java/tests/com/facebook/yoga/YGMarginTest.java b/java/tests/com/facebook/yoga/YGMarginTest.java index 2795aa33..b922b084 100644 --- a/java/tests/com/facebook/yoga/YGMarginTest.java +++ b/java/tests/com/facebook/yoga/YGMarginTest.java @@ -25,7 +25,7 @@ public class YGMarginTest { @Test public void test_margin_start() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -65,7 +65,7 @@ public class YGMarginTest { @Test public void test_margin_top() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -104,7 +104,7 @@ public class YGMarginTest { @Test public void test_margin_end() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -145,7 +145,7 @@ public class YGMarginTest { @Test public void test_margin_bottom() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.FLEX_END); @@ -185,7 +185,7 @@ public class YGMarginTest { @Test public void test_margin_and_flex_row() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -226,7 +226,7 @@ public class YGMarginTest { @Test public void test_margin_and_flex_column() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -266,7 +266,7 @@ public class YGMarginTest { @Test public void test_margin_and_stretch_row() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -307,7 +307,7 @@ public class YGMarginTest { @Test public void test_margin_and_stretch_column() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -347,7 +347,7 @@ public class YGMarginTest { @Test public void test_margin_with_sibling_row() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -401,7 +401,7 @@ public class YGMarginTest { @Test public void test_margin_with_sibling_column() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -454,7 +454,7 @@ public class YGMarginTest { @Test public void test_margin_auto_bottom() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignItems(YogaAlign.CENTER); @@ -510,7 +510,7 @@ public class YGMarginTest { @Test public void test_margin_auto_top() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignItems(YogaAlign.CENTER); @@ -566,7 +566,7 @@ public class YGMarginTest { @Test public void test_margin_auto_bottom_and_top() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignItems(YogaAlign.CENTER); @@ -623,7 +623,7 @@ public class YGMarginTest { @Test public void test_margin_auto_bottom_and_top_justify_center() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.CENTER); @@ -680,7 +680,7 @@ public class YGMarginTest { @Test public void test_margin_auto_mutiple_children_column() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignItems(YogaAlign.CENTER); @@ -752,7 +752,7 @@ public class YGMarginTest { @Test public void test_margin_auto_mutiple_children_row() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -825,7 +825,7 @@ public class YGMarginTest { @Test public void test_margin_auto_left_and_right_column() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -883,7 +883,7 @@ public class YGMarginTest { @Test public void test_margin_auto_left_and_right() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(200f); @@ -939,7 +939,7 @@ public class YGMarginTest { @Test public void test_margin_auto_start_and_end_column() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -997,7 +997,7 @@ public class YGMarginTest { @Test public void test_margin_auto_start_and_end() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(200f); @@ -1053,7 +1053,7 @@ public class YGMarginTest { @Test public void test_margin_auto_left_and_right_column_and_center() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignItems(YogaAlign.CENTER); @@ -1110,7 +1110,7 @@ public class YGMarginTest { @Test public void test_margin_auto_left() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignItems(YogaAlign.CENTER); @@ -1166,7 +1166,7 @@ public class YGMarginTest { @Test public void test_margin_auto_right() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignItems(YogaAlign.CENTER); @@ -1222,7 +1222,7 @@ public class YGMarginTest { @Test public void test_margin_auto_left_and_right_strech() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -1279,7 +1279,7 @@ public class YGMarginTest { @Test public void test_margin_auto_top_and_bottom_strech() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(200f); @@ -1335,7 +1335,7 @@ public class YGMarginTest { @Test public void test_margin_should_not_be_part_of_max_height() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(250f); @@ -1376,7 +1376,7 @@ public class YGMarginTest { @Test public void test_margin_should_not_be_part_of_max_width() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(250f); @@ -1417,7 +1417,7 @@ public class YGMarginTest { @Test public void test_margin_auto_left_right_child_bigger_than_parent() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.CENTER); @@ -1459,7 +1459,7 @@ public class YGMarginTest { @Test public void test_margin_auto_left_child_bigger_than_parent() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.CENTER); @@ -1500,7 +1500,7 @@ public class YGMarginTest { @Test public void test_margin_fix_left_auto_right_child_bigger_than_parent() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.CENTER); @@ -1542,7 +1542,7 @@ public class YGMarginTest { @Test public void test_margin_auto_left_fix_right_child_bigger_than_parent() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.CENTER); @@ -1584,7 +1584,7 @@ public class YGMarginTest { @Test public void test_margin_auto_top_stretching_child() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignItems(YogaAlign.CENTER); @@ -1641,7 +1641,7 @@ public class YGMarginTest { @Test public void test_margin_auto_left_stretching_child() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignItems(YogaAlign.CENTER); diff --git a/java/tests/com/facebook/yoga/YGMinMaxDimensionTest.java b/java/tests/com/facebook/yoga/YGMinMaxDimensionTest.java index c7039311..8280189c 100644 --- a/java/tests/com/facebook/yoga/YGMinMaxDimensionTest.java +++ b/java/tests/com/facebook/yoga/YGMinMaxDimensionTest.java @@ -25,7 +25,7 @@ public class YGMinMaxDimensionTest { @Test public void test_max_width() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -64,7 +64,7 @@ public class YGMinMaxDimensionTest { @Test public void test_max_height() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -104,7 +104,7 @@ public class YGMinMaxDimensionTest { @Test public void test_min_height() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -157,7 +157,7 @@ public class YGMinMaxDimensionTest { @Test public void test_min_width() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -211,7 +211,7 @@ public class YGMinMaxDimensionTest { @Test public void test_justify_content_min_max() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.CENTER); @@ -252,7 +252,7 @@ public class YGMinMaxDimensionTest { @Test public void test_align_items_min_max() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignItems(YogaAlign.CENTER); @@ -293,7 +293,7 @@ public class YGMinMaxDimensionTest { @Test public void test_justify_content_overflow_min_max() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.CENTER); @@ -363,7 +363,7 @@ public class YGMinMaxDimensionTest { @Test public void test_flex_grow_to_min() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -417,7 +417,7 @@ public class YGMinMaxDimensionTest { @Test public void test_flex_grow_in_at_most_container() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -472,7 +472,7 @@ public class YGMinMaxDimensionTest { @Test public void test_flex_grow_child() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -511,7 +511,7 @@ public class YGMinMaxDimensionTest { @Test public void test_flex_grow_within_constrained_min_max_column() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setMinHeight(100f); @@ -563,7 +563,7 @@ public class YGMinMaxDimensionTest { @Test public void test_flex_grow_within_max_width() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(200f); @@ -617,7 +617,7 @@ public class YGMinMaxDimensionTest { @Test public void test_flex_grow_within_constrained_max_width() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(200f); @@ -671,7 +671,7 @@ public class YGMinMaxDimensionTest { @Test public void test_flex_root_ignored() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexGrow(1f); @@ -726,7 +726,7 @@ public class YGMinMaxDimensionTest { @Test public void test_flex_grow_root_minimized() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -796,7 +796,7 @@ public class YGMinMaxDimensionTest { @Test public void test_flex_grow_height_maximized() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -865,7 +865,7 @@ public class YGMinMaxDimensionTest { @Test public void test_flex_grow_within_constrained_min_row() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -918,7 +918,7 @@ public class YGMinMaxDimensionTest { @Test public void test_flex_grow_within_constrained_min_column() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setMinHeight(100f); @@ -969,7 +969,7 @@ public class YGMinMaxDimensionTest { @Test public void test_flex_grow_within_constrained_max_row() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(200f); @@ -1037,7 +1037,7 @@ public class YGMinMaxDimensionTest { @Test public void test_flex_grow_within_constrained_max_column() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -1090,7 +1090,7 @@ public class YGMinMaxDimensionTest { @Test public void test_child_min_max_width_flexing() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -1147,7 +1147,7 @@ public class YGMinMaxDimensionTest { @Test public void test_min_width_overrides_width() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(50f); @@ -1171,7 +1171,7 @@ public class YGMinMaxDimensionTest { @Test public void test_max_width_overrides_width() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(200f); @@ -1195,7 +1195,7 @@ public class YGMinMaxDimensionTest { @Test public void test_min_height_overrides_height() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setHeight(50f); @@ -1219,7 +1219,7 @@ public class YGMinMaxDimensionTest { @Test public void test_max_height_overrides_height() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setHeight(200f); @@ -1243,7 +1243,7 @@ public class YGMinMaxDimensionTest { @Test public void test_min_max_percent_no_width_height() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setAlignItems(YogaAlign.FLEX_START); diff --git a/java/tests/com/facebook/yoga/YGPaddingTest.java b/java/tests/com/facebook/yoga/YGPaddingTest.java index aa9ad398..978ab1c6 100644 --- a/java/tests/com/facebook/yoga/YGPaddingTest.java +++ b/java/tests/com/facebook/yoga/YGPaddingTest.java @@ -25,7 +25,7 @@ public class YGPaddingTest { @Test public void test_padding_no_size() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setPadding(YogaEdge.LEFT, 10); @@ -51,7 +51,7 @@ public class YGPaddingTest { @Test public void test_padding_container_match_child() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setPadding(YogaEdge.LEFT, 10); @@ -92,7 +92,7 @@ public class YGPaddingTest { @Test public void test_padding_flex_child() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setPadding(YogaEdge.LEFT, 10); @@ -135,7 +135,7 @@ public class YGPaddingTest { @Test public void test_padding_stretch_child() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setPadding(YogaEdge.LEFT, 10); @@ -177,7 +177,7 @@ public class YGPaddingTest { @Test public void test_padding_center_child() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.CENTER); @@ -221,7 +221,7 @@ public class YGPaddingTest { @Test public void test_child_with_padding_align_end() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.FLEX_END); diff --git a/java/tests/com/facebook/yoga/YGPercentageTest.java b/java/tests/com/facebook/yoga/YGPercentageTest.java index 88aa947e..33f793ae 100644 --- a/java/tests/com/facebook/yoga/YGPercentageTest.java +++ b/java/tests/com/facebook/yoga/YGPercentageTest.java @@ -25,7 +25,7 @@ public class YGPercentageTest { @Test public void test_percentage_width_height() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -65,7 +65,7 @@ public class YGPercentageTest { @Test public void test_percentage_position_left_top() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -107,7 +107,7 @@ public class YGPercentageTest { @Test public void test_percentage_position_bottom_right() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -149,7 +149,7 @@ public class YGPercentageTest { @Test public void test_percentage_flex_basis() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -204,7 +204,7 @@ public class YGPercentageTest { @Test public void test_percentage_flex_basis_cross() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(200f); @@ -258,7 +258,7 @@ public class YGPercentageTest { @Test public void test_percentage_flex_basis_cross_min_height() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(200f); @@ -312,7 +312,7 @@ public class YGPercentageTest { @Test public void test_percentage_flex_basis_main_max_height() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -369,7 +369,7 @@ public class YGPercentageTest { @Test public void test_percentage_flex_basis_cross_max_height() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(200f); @@ -425,7 +425,7 @@ public class YGPercentageTest { @Test public void test_percentage_flex_basis_main_max_width() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -482,7 +482,7 @@ public class YGPercentageTest { @Test public void test_percentage_flex_basis_cross_max_width() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(200f); @@ -538,7 +538,7 @@ public class YGPercentageTest { @Test public void test_percentage_flex_basis_main_min_width() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -595,7 +595,7 @@ public class YGPercentageTest { @Test public void test_percentage_flex_basis_cross_min_width() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(200f); @@ -651,7 +651,7 @@ public class YGPercentageTest { @Test public void test_percentage_multiple_nested_with_padding_margin_and_percentage_values() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(200f); @@ -759,7 +759,7 @@ public class YGPercentageTest { @Test public void test_percentage_margin_should_calculate_based_only_on_width() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(200f); @@ -816,7 +816,7 @@ public class YGPercentageTest { @Test public void test_percentage_padding_should_calculate_based_only_on_width() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(200f); @@ -873,7 +873,7 @@ public class YGPercentageTest { @Test public void test_percentage_absolute_position() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(200f); @@ -915,7 +915,7 @@ public class YGPercentageTest { @Test public void test_percentage_width_height_undefined_parent_size() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); @@ -952,7 +952,7 @@ public class YGPercentageTest { @Test public void test_percent_within_flex_grow() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -1033,7 +1033,7 @@ public class YGPercentageTest { @Test public void test_percentage_container_in_wrapping_container() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setJustifyContent(YogaJustify.CENTER); @@ -1118,7 +1118,7 @@ public class YGPercentageTest { @Test public void test_percent_absolute_position() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(60f); diff --git a/java/tests/com/facebook/yoga/YGRoundingTest.java b/java/tests/com/facebook/yoga/YGRoundingTest.java index 2b23f9e4..f6752290 100644 --- a/java/tests/com/facebook/yoga/YGRoundingTest.java +++ b/java/tests/com/facebook/yoga/YGRoundingTest.java @@ -25,7 +25,7 @@ public class YGRoundingTest { @Test public void test_rounding_flex_basis_flex_grow_row_width_of_100() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -92,7 +92,7 @@ public class YGRoundingTest { @Test public void test_rounding_flex_basis_flex_grow_row_prime_number_width() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -187,7 +187,7 @@ public class YGRoundingTest { @Test public void test_rounding_flex_basis_flex_shrink_row() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -255,7 +255,7 @@ public class YGRoundingTest { @Test public void test_rounding_flex_basis_overrides_main_size() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -325,7 +325,7 @@ public class YGRoundingTest { @Test public void test_rounding_total_fractial() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(87.4f); @@ -395,7 +395,7 @@ public class YGRoundingTest { @Test public void test_rounding_total_fractial_nested() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(87.4f); @@ -499,7 +499,7 @@ public class YGRoundingTest { @Test public void test_rounding_fractial_input_1() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -569,7 +569,7 @@ public class YGRoundingTest { @Test public void test_rounding_fractial_input_2() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -639,7 +639,7 @@ public class YGRoundingTest { @Test public void test_rounding_fractial_input_3() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setPosition(YogaEdge.TOP, 0.3f); @@ -710,7 +710,7 @@ public class YGRoundingTest { @Test public void test_rounding_fractial_input_4() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setPosition(YogaEdge.TOP, 0.7f); @@ -781,7 +781,7 @@ public class YGRoundingTest { @Test public void test_rounding_inner_node_controversy_horizontal() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); @@ -865,7 +865,7 @@ public class YGRoundingTest { @Test public void test_rounding_inner_node_controversy_vertical() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setHeight(320f); @@ -948,7 +948,7 @@ public class YGRoundingTest { @Test public void test_rounding_inner_node_controversy_combined() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setFlexDirection(YogaFlexDirection.ROW); diff --git a/java/tests/com/facebook/yoga/YGSizeOverflowTest.java b/java/tests/com/facebook/yoga/YGSizeOverflowTest.java index ce342bbb..e76e9cbf 100644 --- a/java/tests/com/facebook/yoga/YGSizeOverflowTest.java +++ b/java/tests/com/facebook/yoga/YGSizeOverflowTest.java @@ -25,7 +25,7 @@ public class YGSizeOverflowTest { @Test public void test_nested_overflowing_child() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -77,7 +77,7 @@ public class YGSizeOverflowTest { @Test public void test_nested_overflowing_child_in_constraint_parent() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); @@ -131,7 +131,7 @@ public class YGSizeOverflowTest { @Test public void test_parent_wrap_child_size_overflowing_parent() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); final YogaNode root = createNode(config); root.setWidth(100f); diff --git a/java/tests/com/facebook/yoga/YogaLoggerTest.java b/java/tests/com/facebook/yoga/YogaLoggerTest.java index 3350d970..b111f872 100644 --- a/java/tests/com/facebook/yoga/YogaLoggerTest.java +++ b/java/tests/com/facebook/yoga/YogaLoggerTest.java @@ -14,7 +14,7 @@ import static org.junit.Assert.fail; public class YogaLoggerTest { @Test public void testLoggerLeak() throws Exception { - final YogaConfig config = new YogaConfig(); + final YogaConfig config = YogaConfigFactory.create(); YogaLogger logger = new YogaLogger() { @Override public void log(YogaNode yogaNode, YogaLogLevel level, String message) { diff --git a/java/tests/com/facebook/yoga/YogaNodeTest.java b/java/tests/com/facebook/yoga/YogaNodeTest.java index 785330a8..22bc3a89 100644 --- a/java/tests/com/facebook/yoga/YogaNodeTest.java +++ b/java/tests/com/facebook/yoga/YogaNodeTest.java @@ -204,7 +204,7 @@ public class YogaNodeTest { @Test public void testUseWebDefaults() { - final YogaConfig config = new YogaConfig(); + final YogaConfig config = YogaConfigFactory.create(); config.setUseWebDefaults(true); final YogaNode node = createNode(config); assertEquals(YogaFlexDirection.ROW, node.getFlexDirection()); @@ -236,7 +236,7 @@ public class YogaNodeTest { @Test public void testFlagShouldDiffLayoutWithoutLegacyStretchBehaviour() throws Exception { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); config.setShouldDiffLayoutWithoutLegacyStretchBehaviour(true); config.setUseLegacyStretchBehaviour(true); YogaNode root = createNode(config); @@ -315,7 +315,7 @@ public class YogaNodeTest { @Test public void testResetApiShouldResetAllLayoutOutputs() { - YogaConfig config = new YogaConfig(); + YogaConfig config = YogaConfigFactory.create(); config.setShouldDiffLayoutWithoutLegacyStretchBehaviour(true); config.setUseLegacyStretchBehaviour(true); YogaNode node = createNode(config); From 499d28d021a5330e9d5d319cfc5b8fbbc91300de Mon Sep 17 00:00:00 2001 From: Amir Shalem Date: Tue, 17 Sep 2019 06:52:49 -0700 Subject: [PATCH 169/347] Expose native pointer thru an interface function for YogaConfig Summary: Expose native pointer thru an interface function for YogaConfig (its package private to `com.facebook.yoga` namespace), This way we can make later on YogaConfig a pure abstract class. Plus, it makes sure external users don't modify the pointer Reviewed By: SidharthGuglani Differential Revision: D17266401 fbshipit-source-id: f39b488cea0b73bc3578bb3aa90ab00139bf9271 --- java/com/facebook/yoga/YogaConfig.java | 6 +++++- java/com/facebook/yoga/YogaNodeJNIBase.java | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/java/com/facebook/yoga/YogaConfig.java b/java/com/facebook/yoga/YogaConfig.java index bc2538da..49a4c44b 100644 --- a/java/com/facebook/yoga/YogaConfig.java +++ b/java/com/facebook/yoga/YogaConfig.java @@ -12,7 +12,7 @@ public class YogaConfig { public static int SPACING_TYPE = 1; - long mNativePointer; + private long mNativePointer; private YogaLogger mLogger; private YogaNodeCloneFunction mYogaNodeCloneFunction; @@ -76,4 +76,8 @@ public class YogaConfig { public YogaLogger getLogger() { return mLogger; } + + long getNativePointer() { + return mNativePointer; + } } diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index a2f7845e..f253b95c 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -58,7 +58,7 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { } YogaNodeJNIBase(YogaConfig config) { - this(YogaNative.jni_YGNodeNewWithConfig(config.mNativePointer)); + this(YogaNative.jni_YGNodeNewWithConfig(config.getNativePointer())); } public void reset() { From 21f814b2a681ebad408cb07a7ac7193374fd196e Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Tue, 17 Sep 2019 12:03:54 -0700 Subject: [PATCH 170/347] remove infer-annotations dependency (#922) Summary: Pull Request resolved: https://github.com/facebook/yoga/pull/922 We are not using this dependency anywhere in yoga. Removed in this diff. Reviewed By: passy Differential Revision: D17131081 fbshipit-source-id: 5544b892f4ef5ca0207d9e21a5b97a2940ac6d53 --- android/BUCK | 3 +-- java/BUCK | 3 +-- lib/infer-annotations/BUCK | 19 ------------------ .../infer-annotations-1.4.jar | Bin 9966 -> 0 bytes tools/build_defs/oss/yoga_defs.bzl | 2 -- 5 files changed, 2 insertions(+), 25 deletions(-) delete mode 100644 lib/infer-annotations/BUCK delete mode 100644 lib/infer-annotations/infer-annotations-1.4.jar diff --git a/android/BUCK b/android/BUCK index f72dde8b..649b96a3 100644 --- a/android/BUCK +++ b/android/BUCK @@ -3,7 +3,7 @@ # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID_JAVA_TARGET", "ANDROID_RES_TARGET", "INFER_ANNOTATIONS_TARGET", "JAVA_TARGET", "PROGRUARD_ANNOTATIONS_TARGET", "yoga_android_aar", "yoga_android_resource") +load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID_JAVA_TARGET", "ANDROID_RES_TARGET", "JAVA_TARGET", "PROGRUARD_ANNOTATIONS_TARGET", "yoga_android_aar", "yoga_android_resource") yoga_android_aar( name = "android", @@ -14,7 +14,6 @@ yoga_android_aar( deps = [ ANDROID_JAVA_TARGET, ANDROID_RES_TARGET, - INFER_ANNOTATIONS_TARGET, JAVA_TARGET, PROGRUARD_ANNOTATIONS_TARGET, ], diff --git a/java/BUCK b/java/BUCK index e25d42fd..73e0a89a 100644 --- a/java/BUCK +++ b/java/BUCK @@ -3,7 +3,7 @@ # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID", "CXX_LIBRARY_WHITELIST", "FBJNI_JAVA_TARGET", "FBJNI_TARGET", "INFER_ANNOTATIONS_TARGET", "JNI_TARGET", "JSR_305_TARGET", "JUNIT_TARGET", "PROGRUARD_ANNOTATIONS_TARGET", "SOLOADER_TARGET", "yoga_cxx_lib", "yoga_cxx_library", "yoga_dep", "yoga_java_binary", "yoga_java_library", "yoga_java_test") +load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID", "CXX_LIBRARY_WHITELIST", "FBJNI_JAVA_TARGET", "FBJNI_TARGET", "JNI_TARGET", "JSR_305_TARGET", "JUNIT_TARGET", "PROGRUARD_ANNOTATIONS_TARGET", "SOLOADER_TARGET", "yoga_cxx_lib", "yoga_cxx_library", "yoga_dep", "yoga_java_binary", "yoga_java_library", "yoga_java_test") CXX_LIBRARY_WHITELIST_FOR_TESTS = CXX_LIBRARY_WHITELIST + [ yoga_cxx_lib("testutil:jni"), @@ -51,7 +51,6 @@ yoga_java_library( deps = [ ":jni", FBJNI_JAVA_TARGET, - INFER_ANNOTATIONS_TARGET, JSR_305_TARGET, PROGRUARD_ANNOTATIONS_TARGET, SOLOADER_TARGET, diff --git a/lib/infer-annotations/BUCK b/lib/infer-annotations/BUCK deleted file mode 100644 index 2e632fcb..00000000 --- a/lib/infer-annotations/BUCK +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) Facebook, Inc. and its affiliates. -# -# This source code is licensed under the MIT license found in the -# LICENSE file in the root directory of this source tree. - -load("//tools/build_defs/oss:yoga_defs.bzl", "YOGA_ROOTS", "yoga_java_library", "yoga_prebuilt_jar") - -yoga_prebuilt_jar( - name = "infer-annotations-jar", - binary_jar = "infer-annotations-1.4.jar", -) - -yoga_java_library( - name = "infer-annotations", - visibility = YOGA_ROOTS, - exported_deps = [ - ":infer-annotations-jar", - ], -) diff --git a/lib/infer-annotations/infer-annotations-1.4.jar b/lib/infer-annotations/infer-annotations-1.4.jar deleted file mode 100644 index 42722464856bb62964311d36fe33500155b44166..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9966 zcmb7JbyyVI)25_bVrfK>ZY3lnq*-!lknUy|q!*Et6j3QbNULW%B%UE!C;Dl3=i<+YdKfcBUSth4D>JGdzSLYhL$8l}H%{ zWVD8|Q80ypJnz7Ay_kR33fS6h|&g#8TPh2Zcg9R9^NN2R5o765uz+BO`?`3~} z8l#zI`SyDAumkw11wl=`14Ah^;r{%sj^!MeW92<^eo)`sMOGn~&Xl|NFQ=;YHu=OM z-5j_;fPXiK$`hsQjn3XvKNn?ad_&e^Cyv`>dZxsU2=OX5^h1&l6@??glOM6KVT=Ph z2OB1}xdz7;#?8=eiSA4jl4L)`4lvgJhK+4}-oz74qr!I7iP!0dnBppprz!^p)hnna2~(?P_0B-3 znFXE*!-1NBVzS!>(PvgqynUV2}!Q>3l9B?)rquYzXu zRKBd(w`TulEV1x@A9w6)jr_ixo`o-wQ%d>O=WF%A`7a(+RYPq%PAvmLXl~J}c)oAC zo82EDU4Y+~9H`Old1NG{eheho?fHGv)b$?A{JKIv{s2zh7N9%C)Xc&1$5n}nZE|Yn zA-uVEd`~R!CSHEED;Bn-Odz`OYI-|RSL3d^K^whH7_``Sh|NX9(E4L@I8>TOMg?w}CC|n?gH*|>BKCnx`_pqIkN?@4Bw=e`%*CV%yA zzMSQNW8czeq1S}##`{sE+AiPwoYqwuNsZ(hzFBw2#i7eVZ*861hL?otSrn^NZGr~0V0a>?XOb>F`LWFkFBzc1~iH)T*nnMFH2dB zQ7lbG5u~scC0~4Og>3+hh@z3TZX$lNAWnXa!yXxDCQ88XLn-j(wBG#)X=&V z-Z(P#B%t`g;MJZqHf`}74sLF%PY2>-rt;hAgJ_0d>fn<_gi&{5!13GcmUcdbq4W6<{9?_y|GuqWA6V&^>&ahh-eEa)7DoHy$sR`XcsSF17 zKHtO)DnMr@Hjz?vt*!k)TNY}9 z^_cw-4Gtn3G_ZRK22t6$AhP}iL=|@jhZEl3=Y?I%p9mUYjboR(D?Ge{lE($%p>Fs?GT;n;$bel)(?Se&J z&7&DncA2k~5ihF+ZV`Wtcjf|H9kPKW87r6tX^Fc&MyoDrDA=V@q-`sjW@Exgj0ML} z*(RduGYp-QbMa&OANav>`*9H^&COwV@~jJ(Ut7wE9e(d7mfLuGCa;{Gi^Ch&ScX<; z@w(C>*6(Pb!%4!G)4r5~vK`$I3pv2`w8zq>{Gw{(Ghmg<}_NBJlw6*ZA8&D+L7W zcdTJaf*W`aXlvR~=5@YIM!^ zO6nX9(01c&fP`)65BiGzrmwH(34J+-K@{Mr5^d~zM2k-`Q$^m2Sa+NGy$X3Mz&ZK- zg~nQ^>);2^t+$J$<}WJRy!Kizy9L)KR*R|+h8UTZl-FXB&7tnn>~V7lDh{_e>OQsa z2n`vS99d=yXs`Q0-w|0|1VSVG+0oK!t5-6Vg$m(R)~ z8R+Rw9N|)G_n%5ei$JbU%j3Z%FbnhRr0YHXVEo)ApUHZk+GLeWyp`Y=M;kn8J-3Vt zS|}?*AF{YOcPB~}kd)Bo-nr0M;rTR3S3N~0TrJ@qEmSuzW-+(_gXeVi0FIP}Wz?n% zap6Uu|>EA93MX`AizUix+AtF+X zi>-NFqr}Vu(q4j;`NqdBi!Cf)o~H1*TFDB1^XNTqX^(h8puAm7(GAAAsFgIeP`;>l zdJ$X=Rc)w-MRVwI1Z{I#%i#C$&lGaHra*&z!ra;M+*;!F8oXa?tW3=<&77U>|I^}& zrx)8gSy{UMCl|D5yErM0{*yPZzj{NcmCPMX!Qd#6x(=lr$uYVb8hO92GGzf!-i**- zARkB>Hl$l9EA>{w#x70Uut#=en?uR|K=WWke5=BXPhg=uMl9zB8}n_eP|G_^L*Q|W z)p4K3wL0+H(e7$-BQnRd7YR0PP$`iN62aa=vbuv=1hgT_jAZPnjQ?Kf$b6a^Af}mx z7nd9&U8O@2m^jKNZPOy!4GKv z(GHsYYmSpwW5Bhpxq8AwJjw))kgZ+c%kzM>0R+_m zyAKIdtzq` zTvTp2QdEBI&-d2Mp;iScIoecO71qVcLlm=ww!h2;3bABYFJ*R_vyMG-qTXMk9#T>5 zV9@Z0c&LtxbC+~402BCf8G_|BYHn#zNOMC&^~0`D*67la6-%poEt6KcLwzdy7obSv ztdcM&hd-qBmUGCZ388)!iV=M27Yo%At=gT|t^t(ByEJmWLDG+_9)_;n6AUSz=N{2- z3h{1EZV*XWZvVg@@@8U3%2Loc5Brnk2fk$z55GN~@2U?3Nej!$FX8t>91_~@tX`F1 zDQm~z*H}szq22be>RZTvu7b`M!Q4`9?q#K$r0+9rxC?4Cz`QLX$oZx`tj+gROV0=L zl101`(L!71qpcQRqQaGh9a&W&>2in4f~3l9@Z0cSX}-P*(pEz2YCg=nX*cj^!vojW zL6Q`t7mQ71Bq=+2QeD9slBART7F-8`>W_DCv6t@pv@CMXOwcIfNjtuoz=%}W{4R5m zn-{25@LY3I?6O4JN&}KPipg8yhe*D=tVIL+^tnqYY{ao@)Eq1M`$Wh@#C^vR167zuE+JDlP=pu* zX6G;%$TKj5kwma({jg_=cS4@_#7kdD7-DVaR(;~hk?^vqJ@%x60WNa` zq4i&pXaIZjHXCavni)jvE`KS0Lgcfe=%If^Yjiu+b9{F_yt8~&^lO2mnWgY`*RBr~ zPd=90$9p^>cJv%+Gpcm$9Decu^J|AvfPHhKQw313V~NB>$&);5mss_ceS3XbilS;g zt#^h{a*1WcZQn*^ z<<7~9S}V9kfSr`w3fWd{o6Az2ePw~a7PuagJ}bAYKzU=&mW01tR??d)amTCZ)5oBN zc-HM1EaCJG=ea&{fcFx4rh{yal~CTdR&NDA^pKDms*)V!1*&A5L~qjs`*L72*@s2l z1KiO5*OkFEICW&+#&D#+%F5Uf!Coj;f4ovoBhB_#q$5U)9&!kzmP!h*^F2XQ>|gHq4W;#45qxrZ?mUp+Y;5EABB2Lz6A*Y zx@a^<;St1W-;>V|wq3!+pOvEEZL{Vj@(Txl4{GXc#ypnuDqVmzAUcFH19@5;&RDu#=s!IU`wL8)N3^2$gk^#`ED#MU~KcQ z&-W`9Y6`~Q@x6RvJLsY<4a3flv%e~Ib8MZ@ja55~?V?BqdW;55!hiF4RA7hh#QuRly{*;72lFWf zxhbM}D9NLr(d!LDyhWDV6}I|Sn#0n)=@@UP`!%R+chhaghv+x%Nky?9((JcK11O)f zHc!WEw7ArIlnl)z;o>s+2u`VB%{v!7wOb0dOkHs#u2hqr7_g4V8XIvfSu*L9oc-~V zN4Cj+zyJ%!Kw-gwh!3eDv<7`HF0@ikeKw zSiCjU6>hG}Y_4qE#k}jNd+M0Uclbz5I~U&7`Sj)Ne%;@}pTd@--4Ubq6tb{st?kzQ zf}?=T>?)kL03z{|+_22;DT$AZVKVC73*@Jk%jRRqlvBqvSYgY?6O?)$IPEYc+AwGL zWs|NcrX$vEIVrtz>P7iv`S;T3a+1$)uWg}E2vyb$3o?qP#g#T}ZhOrCUXo}O zibxrh9M=huRPO>{9+2k7x*T%g7dswOIj-RTN!3%)ywKP${Yw0I+Wq%|0R88f)1I<< zrb0%^b`=!@sM4=L;#F%(Zd2Lkj_o${_1Pr{abE3*Y*A=63wTg3UmpSYAN;6Huj{=} zq=!Xe^xQ~@{Od@ZZj<~9#2XbDDa2$^0Y=D4+1B>^y1LF;w+EzPv|7nnhD* zmD^Lpw!*yvEs)O4(yb13YP{Hv+x{E}#)#aKhO!~=rz{oWoo2GbAYf|9ou1{13*V?h ztOTiBVT=I67~xOHSOsGQ@s;g%!~Tv09pf*&mW`LcClE;6k4g$9#jyZXv;``t^^@?NfLwL!s6qyR=f=et#+rq4$}?B5eiHzh}5Kt5weoV+#uAQi0Y zyt?rI5F@~zT6pBP%hXhCI?-naU@ki&Z_3TrX7@E7;bF5L#y5V}iBa;pHm}s{LQTd- z4)!Ka1SouA$p)w56!L{^rfyfqJr92ay&#yC5^q_BTfy`=ct7h~jC*djymn>Nl6ywj zbot9mpFRh<&DOEJ_fr5r02Gs1C=cy|C_D^9=Y~PzUx(q$*3GYA)TzM4NsP-8l{02T7eE-3 zj*3cA+XQ+DqJQ{I5rx>yEpx2vb?Nigyg_60DbzidpdJYdwvxHoOrKt{hFZEb=QX73 zLK`J()2~`CNnakeOw}-!Hxr6^voD&H0r;9?ZNWlk$Ip>HXRe^b-!O&SuAUd!v8X`O ztX=mr&6@~O3B|w?#lex>`sL&->N?Y0&T5Vo9T+VxbIR00@aiQ6;fdmxJVpGFr|?cU z6*w*AV6>RTxN8t%#ZBF&ur;Ctqs1{HEKzV8=Um@p7R@dlE^bh}*aek4u3!uqwu^KT z%^c)ODSF~iQFBV3-k!+Qh12rnIXxKzPZZPV#^c}T?X#LdXNMyU9*zXIXKYz0d9iF* z@?o8LRS%WS?Z8K zPcWUt6IWShVbkrUpO{wrU0#ljw6mG=rRj}(fM{(hv!Waj<-}*ZkE*Qv;a?e;FXy+% zT%NSRcRHFTl^(-c%@BIIJ40__^YP%TyGg1~c-J_Vs!hRQ1p8dj)>_96kJf%Y6{1M% z_;}oQb_@fqqBpP9_;2Iw461!^Mo)T{n%K)be%%z6v)u78=sHZH$SOIPbr*eqWQwkU zmp!zwFr1&WNnq3f%77#}6;x!ofs!f;vND<=E}-ltu=|a&5+~OHo)RZpZ+Bmr2G1b> z)cnjm%8!Bd3nl;y`&CmyMj=7^bKL!Vm<=Cy|7j;39xylJO8BrFaj*&Zeq!*a z1>#DCb`E^>jpztI2SuF!!RMeSW(PYNqNCsS(P=O6Ss~&S3_dG7u}IWEy&y~u5sv~N zm?2Jq;H}OR>xPwgh)2;p=dF7BcyP~%^AY$I>BNZ8&-eV#v+FFkh=T+8aOK3*Ve{s* z4t)9zah6xajyinkaAGl-|Jy47_q=xaT>5 z_iRrL6Lu8%Y5&>#r-Kt{{{Qzt=xM+^wkM|jS6>K(|Dpe<&xu&Y!@D9Urb7I;bN<$V zGaVyVqVOibiB-b@Js$wXmcZ!)BbHR~e0X9&(!csWM=8$y5{Oj;TuM)Dob11D_K$d+ zxf9~M7+!^(m=#Qj{{q*quXS2a&fEy`Guf92sRE&u=k diff --git a/tools/build_defs/oss/yoga_defs.bzl b/tools/build_defs/oss/yoga_defs.bzl index 6232538f..ff303746 100644 --- a/tools/build_defs/oss/yoga_defs.bzl +++ b/tools/build_defs/oss/yoga_defs.bzl @@ -10,8 +10,6 @@ YOGA_ROOTS = ["//..."] JAVA_TARGET = "//java:java" -INFER_ANNOTATIONS_TARGET = "//lib/infer-annotations:infer-annotations" - JSR_305_TARGET = "//lib/jsr-305:jsr-305" JUNIT_TARGET = "//lib/junit:junit" From 9100019c0a33272df8cb39b44fd66e542b9505f6 Mon Sep 17 00:00:00 2001 From: Amir Shalem Date: Wed, 18 Sep 2019 00:36:26 -0700 Subject: [PATCH 171/347] Split YogaConfig into interface and actual implementation Summary: Split YogaConfig into the same way YogaNode is split today. Into an abstract class defining the interface, and actual JNI implementation Reviewed By: SidharthGuglani Differential Revision: D17266404 fbshipit-source-id: 3d5d6aa65c55cfa61d47c662d140cdce6dcb0ea1 --- java/com/facebook/yoga/YogaConfig.java | 65 +++------------- java/com/facebook/yoga/YogaConfigFactory.java | 2 +- java/com/facebook/yoga/YogaConfigJNIBase.java | 76 +++++++++++++++++++ .../facebook/yoga/YogaConfigJNIFinalizer.java | 30 ++++++++ 4 files changed, 118 insertions(+), 55 deletions(-) create mode 100644 java/com/facebook/yoga/YogaConfigJNIBase.java create mode 100644 java/com/facebook/yoga/YogaConfigJNIFinalizer.java diff --git a/java/com/facebook/yoga/YogaConfig.java b/java/com/facebook/yoga/YogaConfig.java index 49a4c44b..6a670407 100644 --- a/java/com/facebook/yoga/YogaConfig.java +++ b/java/com/facebook/yoga/YogaConfig.java @@ -6,78 +6,35 @@ */ package com.facebook.yoga; -import com.facebook.soloader.SoLoader; - -public class YogaConfig { +public abstract class YogaConfig { public static int SPACING_TYPE = 1; - private long mNativePointer; - private YogaLogger mLogger; - private YogaNodeCloneFunction mYogaNodeCloneFunction; + public abstract void setExperimentalFeatureEnabled(YogaExperimentalFeature feature, boolean enabled); - public YogaConfig() { - mNativePointer = YogaNative.jni_YGConfigNew(); - if (mNativePointer == 0) { - throw new IllegalStateException("Failed to allocate native memory"); - } - } + public abstract void setUseWebDefaults(boolean useWebDefaults); - @Override - protected void finalize() throws Throwable { - try { - YogaNative.jni_YGConfigFree(mNativePointer); - } finally { - super.finalize(); - } - } - - public void setExperimentalFeatureEnabled(YogaExperimentalFeature feature, boolean enabled) { - YogaNative.jni_YGConfigSetExperimentalFeatureEnabled(mNativePointer, feature.intValue(), enabled); - } - - public void setUseWebDefaults(boolean useWebDefaults) { - YogaNative.jni_YGConfigSetUseWebDefaults(mNativePointer, useWebDefaults); - } - - public void setPrintTreeFlag(boolean enable) { - YogaNative.jni_YGConfigSetPrintTreeFlag(mNativePointer, enable); - } - - public void setPointScaleFactor(float pixelsInPoint) { - YogaNative.jni_YGConfigSetPointScaleFactor(mNativePointer, pixelsInPoint); - } + public abstract void setPrintTreeFlag(boolean enable); + public abstract void setPointScaleFactor(float pixelsInPoint); /** * Yoga previously had an error where containers would take the maximum space possible instead of the minimum * like they are supposed to. In practice this resulted in implicit behaviour similar to align-self: stretch; * Because this was such a long-standing bug we must allow legacy users to switch back to this behaviour. */ - public void setUseLegacyStretchBehaviour(boolean useLegacyStretchBehaviour) { - YogaNative.jni_YGConfigSetUseLegacyStretchBehaviour(mNativePointer, useLegacyStretchBehaviour); - } + public abstract void setUseLegacyStretchBehaviour(boolean useLegacyStretchBehaviour); /** * If this flag is set then yoga would diff the layout without legacy flag and would set a bool in * YogaNode(mDoesLegacyStretchFlagAffectsLayout) with true if the layouts were different and false * if not */ - public void setShouldDiffLayoutWithoutLegacyStretchBehaviour( - boolean shouldDiffLayoutWithoutLegacyStretchBehaviour) { - YogaNative.jni_YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviour( - mNativePointer, shouldDiffLayoutWithoutLegacyStretchBehaviour); - } + public abstract void setShouldDiffLayoutWithoutLegacyStretchBehaviour( + boolean shouldDiffLayoutWithoutLegacyStretchBehaviour); - public void setLogger(YogaLogger logger) { - mLogger = logger; - YogaNative.jni_YGConfigSetLogger(mNativePointer, logger); - } + public abstract void setLogger(YogaLogger logger); - public YogaLogger getLogger() { - return mLogger; - } + public abstract YogaLogger getLogger(); - long getNativePointer() { - return mNativePointer; - } + abstract long getNativePointer(); } diff --git a/java/com/facebook/yoga/YogaConfigFactory.java b/java/com/facebook/yoga/YogaConfigFactory.java index d5784d68..fca4dc90 100644 --- a/java/com/facebook/yoga/YogaConfigFactory.java +++ b/java/com/facebook/yoga/YogaConfigFactory.java @@ -2,6 +2,6 @@ package com.facebook.yoga; public abstract class YogaConfigFactory { public static YogaConfig create() { - return new YogaConfig(); + return new YogaConfigJNIFinalizer(); } } diff --git a/java/com/facebook/yoga/YogaConfigJNIBase.java b/java/com/facebook/yoga/YogaConfigJNIBase.java new file mode 100644 index 00000000..643a3a0d --- /dev/null +++ b/java/com/facebook/yoga/YogaConfigJNIBase.java @@ -0,0 +1,76 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +package com.facebook.yoga; + +import com.facebook.soloader.SoLoader; + +public abstract class YogaConfigJNIBase extends YogaConfig { + + protected long mNativePointer; + private YogaLogger mLogger; + private YogaNodeCloneFunction mYogaNodeCloneFunction; + + private YogaConfigJNIBase(long nativePointer) { + if (nativePointer == 0) { + throw new IllegalStateException("Failed to allocate native memory"); + } + mNativePointer = nativePointer; + } + + YogaConfigJNIBase() { + this(YogaNative.jni_YGConfigNew()); + } + + public void setExperimentalFeatureEnabled(YogaExperimentalFeature feature, boolean enabled) { + YogaNative.jni_YGConfigSetExperimentalFeatureEnabled(mNativePointer, feature.intValue(), enabled); + } + + public void setUseWebDefaults(boolean useWebDefaults) { + YogaNative.jni_YGConfigSetUseWebDefaults(mNativePointer, useWebDefaults); + } + + public void setPrintTreeFlag(boolean enable) { + YogaNative.jni_YGConfigSetPrintTreeFlag(mNativePointer, enable); + } + + public void setPointScaleFactor(float pixelsInPoint) { + YogaNative.jni_YGConfigSetPointScaleFactor(mNativePointer, pixelsInPoint); + } + + /** + * Yoga previously had an error where containers would take the maximum space possible instead of the minimum + * like they are supposed to. In practice this resulted in implicit behaviour similar to align-self: stretch; + * Because this was such a long-standing bug we must allow legacy users to switch back to this behaviour. + */ + public void setUseLegacyStretchBehaviour(boolean useLegacyStretchBehaviour) { + YogaNative.jni_YGConfigSetUseLegacyStretchBehaviour(mNativePointer, useLegacyStretchBehaviour); + } + + /** + * If this flag is set then yoga would diff the layout without legacy flag and would set a bool in + * YogaNode(mDoesLegacyStretchFlagAffectsLayout) with true if the layouts were different and false + * if not + */ + public void setShouldDiffLayoutWithoutLegacyStretchBehaviour( + boolean shouldDiffLayoutWithoutLegacyStretchBehaviour) { + YogaNative.jni_YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviour( + mNativePointer, shouldDiffLayoutWithoutLegacyStretchBehaviour); + } + + public void setLogger(YogaLogger logger) { + mLogger = logger; + YogaNative.jni_YGConfigSetLogger(mNativePointer, logger); + } + + public YogaLogger getLogger() { + return mLogger; + } + + long getNativePointer() { + return mNativePointer; + } +} diff --git a/java/com/facebook/yoga/YogaConfigJNIFinalizer.java b/java/com/facebook/yoga/YogaConfigJNIFinalizer.java new file mode 100644 index 00000000..aa7fb364 --- /dev/null +++ b/java/com/facebook/yoga/YogaConfigJNIFinalizer.java @@ -0,0 +1,30 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +package com.facebook.yoga; + +public class YogaConfigJNIFinalizer extends YogaConfigJNIBase { + public YogaConfigJNIFinalizer() { + super(); + } + + @Override + protected void finalize() throws Throwable { + try { + freeNatives(); + } finally { + super.finalize(); + } + } + + public void freeNatives() { + if (mNativePointer != 0) { + long nativePointer = mNativePointer; + mNativePointer = 0; + YogaNative.jni_YGConfigFree(nativePointer); + } + } +} From 96eb94afd0148ac5438aa892e43be79b37584b36 Mon Sep 17 00:00:00 2001 From: Amir Shalem Date: Wed, 18 Sep 2019 00:36:26 -0700 Subject: [PATCH 172/347] Remove YogaNode.create() from the abstract class Summary: Remove YogaNode.create() from the abstract class after we made sure nothing uses it anymore This is the final stage to make `YogaNode` a pure class without JNI references Reviewed By: SidharthGuglani Differential Revision: D17280571 fbshipit-source-id: bd0eb138f7a6a9de8988fc0a7b90badbf635dac5 --- java/com/facebook/yoga/YogaNode.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/java/com/facebook/yoga/YogaNode.java b/java/com/facebook/yoga/YogaNode.java index 9abb1412..e54442f9 100644 --- a/java/com/facebook/yoga/YogaNode.java +++ b/java/com/facebook/yoga/YogaNode.java @@ -9,14 +9,6 @@ package com.facebook.yoga; import javax.annotation.Nullable; public abstract class YogaNode { - public static YogaNode create() { - return new YogaNodeJNIFinalizer(); - } - - public static YogaNode create(YogaConfig config) { - return new YogaNodeJNIFinalizer(config); - } - public abstract void reset(); public abstract int getChildCount(); From e2dbff0ca6c6e808f38d2b195c8ff3ddec47fea6 Mon Sep 17 00:00:00 2001 From: Amir Shalem Date: Wed, 18 Sep 2019 00:36:26 -0700 Subject: [PATCH 173/347] Split interface and jni java target Summary: Split the yoga buck targets from interface to actual implementation. This is currently done without moving any files folder, since only we will make the distinction between interface<-->implementation only this buck target (and not in the litho/reactnative yoga copies). Buck does insures that the `java-interface` is pure since it doesn't depend on any fbjni code. Reviewed By: SidharthGuglani Differential Revision: D17266406 fbshipit-source-id: 46aa469b74c2c3114f1d3d762c41d32cfe269f57 --- java/BUCK | 48 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/java/BUCK b/java/BUCK index 73e0a89a..5b335bad 100644 --- a/java/BUCK +++ b/java/BUCK @@ -10,6 +10,12 @@ CXX_LIBRARY_WHITELIST_FOR_TESTS = CXX_LIBRARY_WHITELIST + [ yoga_cxx_lib("testutil:testutil"), ] +YOGA_JAVA_IMPLEMENTATION_FILES = [ + "com/facebook/yoga/*JNI*.java", + "com/facebook/yoga/*Factory.java", + "com/facebook/yoga/YogaNative.java", +] + yoga_cxx_library( name = "jni", srcs = glob(["jni/*.cpp"]), @@ -38,9 +44,40 @@ yoga_cxx_library( ], ) +yoga_java_library( + name = "java-interface", + srcs = glob( + ["com/facebook/yoga/*.java"], + exclude = YOGA_JAVA_IMPLEMENTATION_FILES, + ), + required_for_source_only_abi = True, + source = "1.7", + target = "1.7", + visibility = ["PUBLIC"], + deps = [ + JSR_305_TARGET, + PROGRUARD_ANNOTATIONS_TARGET, + ], +) + +yoga_java_library( + name = "java-impl", + srcs = glob(YOGA_JAVA_IMPLEMENTATION_FILES), + required_for_source_only_abi = True, + source = "1.7", + target = "1.7", + deps = [ + ":java-interface", + ":jni", + FBJNI_JAVA_TARGET, + JSR_305_TARGET, + PROGRUARD_ANNOTATIONS_TARGET, + SOLOADER_TARGET, + ], +) + yoga_java_library( name = "java", - srcs = glob(["com/facebook/yoga/*.java"]), required_for_source_only_abi = True, source = "1.7", target = "1.7", @@ -48,12 +85,9 @@ yoga_java_library( yoga_dep("java:tests"), ], visibility = ["PUBLIC"], - deps = [ - ":jni", - FBJNI_JAVA_TARGET, - JSR_305_TARGET, - PROGRUARD_ANNOTATIONS_TARGET, - SOLOADER_TARGET, + exported_deps = [ + ":java-impl", + ":java-interface", ], ) From ad5b3410f03ae8a9b7382fbd213e224392fe0dae Mon Sep 17 00:00:00 2001 From: Amir Shalem Date: Wed, 18 Sep 2019 05:51:12 -0700 Subject: [PATCH 174/347] Remove dead code of mYogaNodeCloneFunction Summary: Code cleanup, remove mYogaNodeCloneFunction completely and its `YogaNodeCloneFunction` Reviewed By: SidharthGuglani Differential Revision: D17284191 fbshipit-source-id: 36dae0c0548cfdd3e85182a8e3c6ff9a2d3a5011 --- java/com/facebook/yoga/YogaConfigJNIBase.java | 3 --- .../com/facebook/yoga/YogaNodeCloneFunction.java | 16 ---------------- 2 files changed, 19 deletions(-) delete mode 100644 java/com/facebook/yoga/YogaNodeCloneFunction.java diff --git a/java/com/facebook/yoga/YogaConfigJNIBase.java b/java/com/facebook/yoga/YogaConfigJNIBase.java index 643a3a0d..d8362dab 100644 --- a/java/com/facebook/yoga/YogaConfigJNIBase.java +++ b/java/com/facebook/yoga/YogaConfigJNIBase.java @@ -6,13 +6,10 @@ */ package com.facebook.yoga; -import com.facebook.soloader.SoLoader; - public abstract class YogaConfigJNIBase extends YogaConfig { protected long mNativePointer; private YogaLogger mLogger; - private YogaNodeCloneFunction mYogaNodeCloneFunction; private YogaConfigJNIBase(long nativePointer) { if (nativePointer == 0) { diff --git a/java/com/facebook/yoga/YogaNodeCloneFunction.java b/java/com/facebook/yoga/YogaNodeCloneFunction.java deleted file mode 100644 index 1e2d5011..00000000 --- a/java/com/facebook/yoga/YogaNodeCloneFunction.java +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -package com.facebook.yoga; - -import com.facebook.proguard.annotations.DoNotStrip; - -@DoNotStrip -public interface YogaNodeCloneFunction { - - @DoNotStrip - YogaNode cloneNode(YogaNode oldNode, YogaNode parent, int childIndex); -} From 36eae205e1d479be7da6f83dda2922e9030b03a5 Mon Sep 17 00:00:00 2001 From: Uts Sikder Date: Wed, 18 Sep 2019 21:29:20 -0700 Subject: [PATCH 175/347] fix type mismatches in YogaLogger#log function Summary: This diff fixes two issues with the JNI integration of YogaLogger#log. (1) The YogaLogger class descriptor was missing a semicolon. This causes a ClassNotFoundException whenever you try to call the log method from C++. (2) The C++ signature for the class was using YogaNodeJNIBase as an arg but the Java signature was using YogaNode. This causes a MethodNotFoundException whenever you try to call the method after fixing problem 1. Reviewed By: astreet Differential Revision: D17439957 fbshipit-source-id: be3c16512558050265565b3688fb09a7da31b9b2 --- java/jni/YGJTypes.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/jni/YGJTypes.h b/java/jni/YGJTypes.h index dfc0901b..0c4bc9a8 100644 --- a/java/jni/YGJTypes.h +++ b/java/jni/YGJTypes.h @@ -26,7 +26,7 @@ struct JYogaLogLevel : public facebook::jni::JavaClass { }; struct JYogaLogger : public facebook::jni::JavaClass { - static constexpr auto kJavaDescriptor = "Lcom/facebook/yoga/YogaLogger"; + static constexpr auto kJavaDescriptor = "Lcom/facebook/yoga/YogaLogger;"; void log( facebook::jni::alias_ref, From f1baf8336bf523aa852ba4430f8de3b9fc3bd313 Mon Sep 17 00:00:00 2001 From: Amir Shalem Date: Sun, 22 Sep 2019 13:46:35 -0700 Subject: [PATCH 176/347] Use direct access to YogaConfig mNativePointer parameter Summary: Use direct access to YogaConfig mNativePointer parameter Results: ``` The following primary metrics showed statistically significant changes at the 95% confidence level: javaFullLifecycleAllocateCalculateReadLayout -1.25% javaLayoutReading 0.44% javaYogaNodeAllocateAndSetProps -1.92% javaYogaNodeAllocation -2.11% javaYogaNodeStylePropAssignment -0.89% ``` Differential Revision: D17519542 fbshipit-source-id: c39bfe1b0ecae9149dc6da2a0a7e936df215ec5b --- java/com/facebook/yoga/YogaConfigJNIBase.java | 2 +- java/com/facebook/yoga/YogaNodeJNIBase.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/java/com/facebook/yoga/YogaConfigJNIBase.java b/java/com/facebook/yoga/YogaConfigJNIBase.java index d8362dab..c093c5c2 100644 --- a/java/com/facebook/yoga/YogaConfigJNIBase.java +++ b/java/com/facebook/yoga/YogaConfigJNIBase.java @@ -8,7 +8,7 @@ package com.facebook.yoga; public abstract class YogaConfigJNIBase extends YogaConfig { - protected long mNativePointer; + long mNativePointer; private YogaLogger mLogger; private YogaConfigJNIBase(long nativePointer) { diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index f253b95c..dcf31bbe 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -58,7 +58,7 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { } YogaNodeJNIBase(YogaConfig config) { - this(YogaNative.jni_YGNodeNewWithConfig(config.getNativePointer())); + this(YogaNative.jni_YGNodeNewWithConfig(((YogaConfigJNIBase)config).mNativePointer)); } public void reset() { From f00116c3a67dfe5eb6fc7f9b0e34a4aab65085e3 Mon Sep 17 00:00:00 2001 From: Uts Sikder Date: Wed, 25 Sep 2019 09:10:51 -0700 Subject: [PATCH 177/347] BREAKING: rm YogaNode parameter from YogaLogger#log Summary: In D17439957, I noted that YogaLogger#log throws a NoMethodFoundException when called from C++ b/c C++ and Java's signatures of that method don't match. C++ uses YogaNodeJNIBase for the first param, Java uses YogaNode. Both my attempts to fix this failed. Attempt #1 - Make Java use YogaNodeJNIBase. This doesn't work because the :java-interface target includes YogaLogger but not YogaNodeJNIBase. Moving YogaLogger to the impl target doesn't work either b/c other files in :java-interface reference YogaLogger. Attempt #2 - Make C++ use YogaNode. This doesn't work b/c we try to call the log method with objects of fbjni type YogaNodeJNIBase. This would be fine in Java since YogaNodeJNIBase extends YogaNode. But fbjni's typing isn't advanced enough to know this, so the Yoga C++ fails to compile. At this point, I was wondering what the value of having this param in the log function at all was. None of the implementations in our codebase use it today. It might be easier to just remove it all together. This also removes a bug with YGNodePrint where we pass a null layout context that eventually causes a SIG_ABRT when we use it to try to find a YogaNode to pass to this function. (https://fburl.com/diffusion/ssw9h8lv). Reviewed By: amir-shalem Differential Revision: D17470379 fbshipit-source-id: 8fc2d95505971a52af2399a9fbb60b63f27f0ec2 --- java/com/facebook/yoga/YogaLogger.java | 2 +- java/jni/YGJNI.cpp | 11 ++++------- java/jni/YGJTypes.cpp | 8 +++----- java/jni/YGJTypes.h | 5 +---- java/tests/com/facebook/yoga/YogaLoggerTest.java | 2 +- 5 files changed, 10 insertions(+), 18 deletions(-) diff --git a/java/com/facebook/yoga/YogaLogger.java b/java/com/facebook/yoga/YogaLogger.java index 2fd4d821..d9411061 100644 --- a/java/com/facebook/yoga/YogaLogger.java +++ b/java/com/facebook/yoga/YogaLogger.java @@ -15,5 +15,5 @@ import com.facebook.proguard.annotations.DoNotStrip; @DoNotStrip public interface YogaLogger { @DoNotStrip - void log(YogaNode node, YogaLogLevel level, String message); + void log(YogaLogLevel level, String message); } diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp index 6a1a790a..f23d0f2b 100644 --- a/java/jni/YGJNI.cpp +++ b/java/jni/YGJNI.cpp @@ -311,13 +311,10 @@ static int YGJNILogFunc( auto jloggerPtr = static_cast*>(YGConfigGetContext(config)); if (jloggerPtr != nullptr) { - if (auto obj = YGNodeJobject(node, layoutContext)) { - (*jloggerPtr) - ->log( - obj, - JYogaLogLevel::fromInt(level), - Environment::current()->NewStringUTF(buffer.data())); - } + (*jloggerPtr) + ->log( + JYogaLogLevel::fromInt(level), + Environment::current()->NewStringUTF(buffer.data())); } return result; diff --git a/java/jni/YGJTypes.cpp b/java/jni/YGJTypes.cpp index 032be5c5..012a2837 100644 --- a/java/jni/YGJTypes.cpp +++ b/java/jni/YGJTypes.cpp @@ -33,12 +33,10 @@ facebook::jni::local_ref JYogaLogLevel::fromInt(jint logLevel) { } void JYogaLogger::log( - facebook::jni::alias_ref node, facebook::jni::alias_ref logLevel, jstring message) { static auto javaMethod = - javaClassLocal() - ->getMethod, alias_ref, jstring)>("log"); - javaMethod(self(), node, logLevel, message); + javaClassLocal()->getMethod, jstring)>( + "log"); + javaMethod(self(), logLevel, message); } diff --git a/java/jni/YGJTypes.h b/java/jni/YGJTypes.h index 0c4bc9a8..6561ce2d 100644 --- a/java/jni/YGJTypes.h +++ b/java/jni/YGJTypes.h @@ -28,10 +28,7 @@ struct JYogaLogLevel : public facebook::jni::JavaClass { struct JYogaLogger : public facebook::jni::JavaClass { static constexpr auto kJavaDescriptor = "Lcom/facebook/yoga/YogaLogger;"; - void log( - facebook::jni::alias_ref, - facebook::jni::alias_ref, - jstring); + void log(facebook::jni::alias_ref, jstring); }; class PtrJNodeMap { diff --git a/java/tests/com/facebook/yoga/YogaLoggerTest.java b/java/tests/com/facebook/yoga/YogaLoggerTest.java index b111f872..1f56a923 100644 --- a/java/tests/com/facebook/yoga/YogaLoggerTest.java +++ b/java/tests/com/facebook/yoga/YogaLoggerTest.java @@ -17,7 +17,7 @@ public class YogaLoggerTest { final YogaConfig config = YogaConfigFactory.create(); YogaLogger logger = new YogaLogger() { @Override - public void log(YogaNode yogaNode, YogaLogLevel level, String message) { + public void log(YogaLogLevel level, String message) { } }; config.setLogger(logger); From b29e144649a2d58af05dcdf14dd3537dc9405608 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Thu, 26 Sep 2019 17:30:28 -0700 Subject: [PATCH 178/347] Add separate classes to implement JNI methods suing vanilla JNI Summary: This diffs adds a separate file YGJNIVanilla.cpp to add jni methods which uses vanilla JNI instead of FBJNI. In this diff only one method has been added to setup the experiment boolean setup. At the end of this diff stack , we will be able to experiment between fbjni and vanilla jni in yoga and finally get rid of fbjni which saves us around 300Kb per architecture in yoga binary size. Reviewed By: Andrey-Mishanin Differential Revision: D17601591 fbshipit-source-id: a88520c625bd8b5d9ffcf8ab5f02fc71dc800081 --- java/CMakeLists.txt | 2 +- java/com/facebook/yoga/YogaNative.java | 4 ++ java/jni/YGJNI.cpp | 5 ++- java/jni/YGJNIVanilla.cpp | 55 ++++++++++++++++++++++++++ java/jni/YGJNIVanilla.h | 9 +++++ 5 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 java/jni/YGJNIVanilla.cpp create mode 100644 java/jni/YGJNIVanilla.h diff --git a/java/CMakeLists.txt b/java/CMakeLists.txt index 12e69eb0..c55c6bd9 100644 --- a/java/CMakeLists.txt +++ b/java/CMakeLists.txt @@ -29,7 +29,7 @@ add_compile_options( -Wall -std=c++11) -add_library(yoga SHARED jni/YGJNI.cpp jni/YGJTypes.cpp) +add_library(yoga SHARED jni/YGJNI.cpp jni/YGJTypes.cpp jni/YGJNIVanilla.cpp) target_include_directories(yoga PRIVATE ${libfb_DIR}/include diff --git a/java/com/facebook/yoga/YogaNative.java b/java/com/facebook/yoga/YogaNative.java index 5b294898..88595f38 100644 --- a/java/com/facebook/yoga/YogaNative.java +++ b/java/com/facebook/yoga/YogaNative.java @@ -111,4 +111,8 @@ public class YogaNative { static native void jni_YGNodePrint(long nativePointer); static native void jni_YGNodeSetStyleInputs(long nativePointer, float[] styleInputsArray, int size); static native long jni_YGNodeClone(long nativePointer); + + + // JNI methods that use Vanilla JNI + public static native void jni_YGNodeStyleSetFlexJNI(long nativePointer, float flex); } diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp index f23d0f2b..88e325d2 100644 --- a/java/jni/YGJNI.cpp +++ b/java/jni/YGJNI.cpp @@ -15,6 +15,7 @@ #include #include "YGJTypes.h" +#include "YGJNIVanilla.h" using namespace facebook::jni; using namespace std; @@ -893,7 +894,7 @@ void jni_YGNodeStyleSetBorder(jlong nativePointer, jint edge, jfloat border) { makeCriticalNativeMethod_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(#name, name) jint JNI_OnLoad(JavaVM* vm, void*) { - return initialize(vm, [] { + jint ret = initialize(vm, [] { registerNatives( "com/facebook/yoga/YogaNative", { @@ -993,4 +994,6 @@ jint JNI_OnLoad(JavaVM* vm, void*) { jni_YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviour), }); }); + YGJNIVanilla::registerNatives(Environment::current()); + return ret; } diff --git a/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp new file mode 100644 index 00000000..d169d0e5 --- /dev/null +++ b/java/jni/YGJNIVanilla.cpp @@ -0,0 +1,55 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#include "jni.h" +#include "YGJNIVanilla.h" +#include + +static inline YGNodeRef _jlong2YGNodeRef(jlong addr) { + return reinterpret_cast(static_cast(addr)); +} + +void jni_YGNodeStyleSetFlexJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer, + jfloat value) { + YGNodeStyleSetFlex( + _jlong2YGNodeRef(nativePointer), static_cast(value)); +} + +void assertNoPendingJniException(JNIEnv* env) { + // This method cannot call any other method of the library, since other + // methods of the library use it to check for exceptions too + if (env->ExceptionCheck()) { + env->ExceptionDescribe(); + } +} + +void registerNativeMethods( + JNIEnv* env, + const char* className, + JNINativeMethod methods[], + size_t numMethods) { + jclass clazz = env->FindClass(className); + + assertNoPendingJniException(env); + + env->RegisterNatives(clazz, methods, numMethods); + + assertNoPendingJniException(env); +} + +static JNINativeMethod methods[] = { + {"jni_YGNodeStyleSetFlexJNI", "(JF)V", (void*) jni_YGNodeStyleSetFlexJNI}}; + +void YGJNIVanilla::registerNatives(JNIEnv* env) { + registerNativeMethods( + env, + "com/facebook/yoga/YogaNative", + methods, + sizeof(methods) / sizeof(JNINativeMethod)); +} diff --git a/java/jni/YGJNIVanilla.h b/java/jni/YGJNIVanilla.h new file mode 100644 index 00000000..7797a678 --- /dev/null +++ b/java/jni/YGJNIVanilla.h @@ -0,0 +1,9 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +namespace YGJNIVanilla { +void registerNatives(JNIEnv* env); +}; From 0875b6b54244ba2355a9c9695c40720375ac617f Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Thu, 26 Sep 2019 17:30:28 -0700 Subject: [PATCH 179/347] Add boolean flag to decide whether to use fbjni or jni Summary: Adds a flag useVanillaJNI in YogaConfig to determine whether to use FbJNI or JNI. Currently default is set to false. We will experiment based on this flag once all code have been migrated. Reviewed By: Andrey-Mishanin Differential Revision: D17601703 fbshipit-source-id: 377a5bd2a6f8a7584e84932e87fa7044d8165efd --- java/com/facebook/yoga/YogaConfig.java | 4 ++++ java/com/facebook/yoga/YogaConfigJNIBase.java | 11 +++++++++++ java/com/facebook/yoga/YogaNodeJNIBase.java | 9 ++++++++- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/java/com/facebook/yoga/YogaConfig.java b/java/com/facebook/yoga/YogaConfig.java index 6a670407..501a3cca 100644 --- a/java/com/facebook/yoga/YogaConfig.java +++ b/java/com/facebook/yoga/YogaConfig.java @@ -37,4 +37,8 @@ public abstract class YogaConfig { public abstract YogaLogger getLogger(); abstract long getNativePointer(); + + public abstract void setUseVanillaJNI(boolean useVanillaJNI); + + public abstract boolean useVanillaJNI(); } diff --git a/java/com/facebook/yoga/YogaConfigJNIBase.java b/java/com/facebook/yoga/YogaConfigJNIBase.java index c093c5c2..3fbd6646 100644 --- a/java/com/facebook/yoga/YogaConfigJNIBase.java +++ b/java/com/facebook/yoga/YogaConfigJNIBase.java @@ -10,6 +10,7 @@ public abstract class YogaConfigJNIBase extends YogaConfig { long mNativePointer; private YogaLogger mLogger; + private boolean useVanillaJNI = false; private YogaConfigJNIBase(long nativePointer) { if (nativePointer == 0) { @@ -70,4 +71,14 @@ public abstract class YogaConfigJNIBase extends YogaConfig { long getNativePointer() { return mNativePointer; } + + @Override + public void setUseVanillaJNI(boolean useVanillaJNI) { + this.useVanillaJNI = useVanillaJNI; + } + + @Override + public boolean useVanillaJNI() { + return this.useVanillaJNI; + } } diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index dcf31bbe..87a22dbb 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -46,6 +46,8 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { private boolean mHasNewLayout = true; + private boolean useVanillaJNI = false; + private YogaNodeJNIBase(long nativePointer) { if (nativePointer == 0) { throw new IllegalStateException("Failed to allocate native memory"); @@ -59,6 +61,7 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { YogaNodeJNIBase(YogaConfig config) { this(YogaNative.jni_YGNodeNewWithConfig(((YogaConfigJNIBase)config).mNativePointer)); + this.useVanillaJNI = config.useVanillaJNI(); } public void reset() { @@ -284,7 +287,11 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { } public void setFlex(float flex) { - YogaNative.jni_YGNodeStyleSetFlex(mNativePointer, flex); + if (useVanillaJNI) { + YogaNative.jni_YGNodeStyleSetFlexJNI(mNativePointer, flex); + } else { + YogaNative.jni_YGNodeStyleSetFlex(mNativePointer, flex); + } } public float getFlexGrow() { From c37f5956e438cc57b64b74d323ceedcaee4ff22c Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Mon, 30 Sep 2019 15:04:19 -0700 Subject: [PATCH 180/347] Fix license headers Reviewed By: scottrice Differential Revision: D17673223 fbshipit-source-id: 42a3a25934ef63b24ebf9f5f1909cb562d0d4172 --- YogaKit/Source/UIView+Yoga.m | 7 +++---- YogaKit/Source/YGLayout.m | 7 +++---- YogaKit/Source/YGLayoutExtensions.swift | 7 +++---- YogaKit/Tests/YogaKitTests.m | 7 +++---- .../YogaKitSample/YogaKitSample/AppDelegate.swift | 14 +++++++++----- .../YogaKitSample/ExamplesViewController.swift | 14 +++++++++----- .../YogaKitSample/SwiftViewController.swift | 14 +++++++++----- .../YogaKitSample/YogaKitSample/ViewController.m | 14 +++++++++----- .../ViewControllers/BasicViewController.swift | 14 +++++++++----- .../LayoutInclusionViewController.swift | 14 +++++++++----- .../Views/SingleLabelCollectionCell.swift | 14 +++++++++----- 11 files changed, 75 insertions(+), 51 deletions(-) diff --git a/YogaKit/Source/UIView+Yoga.m b/YogaKit/Source/UIView+Yoga.m index 963362d5..b67e63cb 100644 --- a/YogaKit/Source/UIView+Yoga.m +++ b/YogaKit/Source/UIView+Yoga.m @@ -1,10 +1,9 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - #import "UIView+Yoga.h" #import "YGLayout+Private.h" #import diff --git a/YogaKit/Source/YGLayout.m b/YogaKit/Source/YGLayout.m index 4a9ab872..fef88ae5 100644 --- a/YogaKit/Source/YGLayout.m +++ b/YogaKit/Source/YGLayout.m @@ -1,10 +1,9 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - #import "YGLayout+Private.h" #import "UIView+Yoga.h" diff --git a/YogaKit/Source/YGLayoutExtensions.swift b/YogaKit/Source/YGLayoutExtensions.swift index fa414449..8479e786 100644 --- a/YogaKit/Source/YGLayoutExtensions.swift +++ b/YogaKit/Source/YGLayoutExtensions.swift @@ -1,10 +1,9 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - postfix operator % extension Int { diff --git a/YogaKit/Tests/YogaKitTests.m b/YogaKit/Tests/YogaKitTests.m index b9d3a6ed..13f0d314 100644 --- a/YogaKit/Tests/YogaKitTests.m +++ b/YogaKit/Tests/YogaKitTests.m @@ -1,10 +1,9 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ - #import #import diff --git a/YogaKit/YogaKitSample/YogaKitSample/AppDelegate.swift b/YogaKit/YogaKitSample/YogaKitSample/AppDelegate.swift index 861adeca..d742c08d 100644 --- a/YogaKit/YogaKitSample/YogaKitSample/AppDelegate.swift +++ b/YogaKit/YogaKitSample/YogaKitSample/AppDelegate.swift @@ -1,9 +1,13 @@ -/** - * Copyright 2014-present, Facebook, Inc. - * All rights reserved. +/* + * This file provided by Facebook is for non-commercial testing and evaluation + * purposes only. Facebook reserves all rights not expressly granted. * - * This source code is licensed under the license found in the - * LICENSE-examples file in the root directory of this source tree. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ import Foundation diff --git a/YogaKit/YogaKitSample/YogaKitSample/ExamplesViewController.swift b/YogaKit/YogaKitSample/YogaKitSample/ExamplesViewController.swift index 38ee2618..96fd415c 100644 --- a/YogaKit/YogaKitSample/YogaKitSample/ExamplesViewController.swift +++ b/YogaKit/YogaKitSample/YogaKitSample/ExamplesViewController.swift @@ -1,9 +1,13 @@ -/** - * Copyright 2014-present, Facebook, Inc. - * All rights reserved. +/* + * This file provided by Facebook is for non-commercial testing and evaluation + * purposes only. Facebook reserves all rights not expressly granted. * - * This source code is licensed under the license found in the - * LICENSE-examples file in the root directory of this source tree. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ import UIKit diff --git a/YogaKit/YogaKitSample/YogaKitSample/SwiftViewController.swift b/YogaKit/YogaKitSample/YogaKitSample/SwiftViewController.swift index 5a402af8..c99e8e82 100644 --- a/YogaKit/YogaKitSample/YogaKitSample/SwiftViewController.swift +++ b/YogaKit/YogaKitSample/YogaKitSample/SwiftViewController.swift @@ -1,9 +1,13 @@ -/** - * Copyright 2014-present, Facebook, Inc. - * All rights reserved. +/* + * This file provided by Facebook is for non-commercial testing and evaluation + * purposes only. Facebook reserves all rights not expressly granted. * - * This source code is licensed under the license found in the - * LICENSE-examples file in the root directory of this source tree. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ import UIKit diff --git a/YogaKit/YogaKitSample/YogaKitSample/ViewController.m b/YogaKit/YogaKitSample/YogaKitSample/ViewController.m index f95dab48..a178de96 100644 --- a/YogaKit/YogaKitSample/YogaKitSample/ViewController.m +++ b/YogaKit/YogaKitSample/YogaKitSample/ViewController.m @@ -1,9 +1,13 @@ -/** - * Copyright 2014-present, Facebook, Inc. - * All rights reserved. +/* + * This file provided by Facebook is for non-commercial testing and evaluation + * purposes only. Facebook reserves all rights not expressly granted. * - * This source code is licensed under the license found in the - * LICENSE-examples file in the root directory of this source tree. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #import "ViewController.h" diff --git a/YogaKit/YogaKitSample/YogaKitSample/ViewControllers/BasicViewController.swift b/YogaKit/YogaKitSample/YogaKitSample/ViewControllers/BasicViewController.swift index 234cee31..c9880efe 100644 --- a/YogaKit/YogaKitSample/YogaKitSample/ViewControllers/BasicViewController.swift +++ b/YogaKit/YogaKitSample/YogaKitSample/ViewControllers/BasicViewController.swift @@ -1,9 +1,13 @@ -/** - * Copyright 2014-present, Facebook, Inc. - * All rights reserved. +/* + * This file provided by Facebook is for non-commercial testing and evaluation + * purposes only. Facebook reserves all rights not expressly granted. * - * This source code is licensed under the license found in the - * LICENSE-examples file in the root directory of this source tree. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ import UIKit diff --git a/YogaKit/YogaKitSample/YogaKitSample/ViewControllers/LayoutInclusionViewController.swift b/YogaKit/YogaKitSample/YogaKitSample/ViewControllers/LayoutInclusionViewController.swift index ce062402..d7d67321 100644 --- a/YogaKit/YogaKitSample/YogaKitSample/ViewControllers/LayoutInclusionViewController.swift +++ b/YogaKit/YogaKitSample/YogaKitSample/ViewControllers/LayoutInclusionViewController.swift @@ -1,9 +1,13 @@ -/** - * Copyright 2014-present, Facebook, Inc. - * All rights reserved. +/* + * This file provided by Facebook is for non-commercial testing and evaluation + * purposes only. Facebook reserves all rights not expressly granted. * - * This source code is licensed under the license found in the - * LICENSE-examples file in the root directory of this source tree. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ import UIKit diff --git a/YogaKit/YogaKitSample/YogaKitSample/Views/SingleLabelCollectionCell.swift b/YogaKit/YogaKitSample/YogaKitSample/Views/SingleLabelCollectionCell.swift index 5f469886..667aa971 100644 --- a/YogaKit/YogaKitSample/YogaKitSample/Views/SingleLabelCollectionCell.swift +++ b/YogaKit/YogaKitSample/YogaKitSample/Views/SingleLabelCollectionCell.swift @@ -1,9 +1,13 @@ -/** - * Copyright 2014-present, Facebook, Inc. - * All rights reserved. +/* + * This file provided by Facebook is for non-commercial testing and evaluation + * purposes only. Facebook reserves all rights not expressly granted. * - * This source code is licensed under the license found in the - * LICENSE-examples file in the root directory of this source tree. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ import UIKit From 32a973ebd14eaf4fff455f58c70a971f12677af8 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Tue, 8 Oct 2019 14:23:57 -0700 Subject: [PATCH 181/347] Move style properties which accept one parameter to vanilla JNI (YogaStyleProperties Part 1) Summary: Move Yoga style properties to vanilla JNI under a flag. Reviewed By: amir-shalem Differential Revision: D17666048 fbshipit-source-id: 6565acd35ab04ef0c3a2544447a25dc6edc3e7a5 --- java/com/facebook/yoga/YogaNative.java | 26 +++++ java/com/facebook/yoga/YogaNodeJNIBase.java | 91 +++++++++++----- java/jni/YGJNIVanilla.cpp | 109 +++++++++++++++++++- 3 files changed, 199 insertions(+), 27 deletions(-) diff --git a/java/com/facebook/yoga/YogaNative.java b/java/com/facebook/yoga/YogaNative.java index 88595f38..ae1b9721 100644 --- a/java/com/facebook/yoga/YogaNative.java +++ b/java/com/facebook/yoga/YogaNative.java @@ -114,5 +114,31 @@ public class YogaNative { // JNI methods that use Vanilla JNI + static native int jni_YGNodeStyleGetDirectionJNI(long nativePointer); + static native void jni_YGNodeStyleSetDirectionJNI(long nativePointer, int direction); + static native int jni_YGNodeStyleGetFlexDirectionJNI(long nativePointer); + static native void jni_YGNodeStyleSetFlexDirectionJNI(long nativePointer, int flexDirection); + static native int jni_YGNodeStyleGetJustifyContentJNI(long nativePointer); + static native void jni_YGNodeStyleSetJustifyContentJNI(long nativePointer, int justifyContent); + static native int jni_YGNodeStyleGetAlignItemsJNI(long nativePointer); + static native void jni_YGNodeStyleSetAlignItemsJNI(long nativePointer, int alignItems); + static native int jni_YGNodeStyleGetAlignSelfJNI(long nativePointer); + static native void jni_YGNodeStyleSetAlignSelfJNI(long nativePointer, int alignSelf); + static native int jni_YGNodeStyleGetAlignContentJNI(long nativePointer); + static native void jni_YGNodeStyleSetAlignContentJNI(long nativePointer, int alignContent); + static native int jni_YGNodeStyleGetPositionTypeJNI(long nativePointer); + static native void jni_YGNodeStyleSetPositionTypeJNI(long nativePointer, int positionType); + static native int jni_YGNodeStyleGetFlexWrapJNI(long nativePointer); + static native void jni_YGNodeStyleSetFlexWrapJNI(long nativePointer, int wrapType); + static native int jni_YGNodeStyleGetOverflowJNI(long nativePointer); + static native void jni_YGNodeStyleSetOverflowJNI(long nativePointer, int overflow); + static native int jni_YGNodeStyleGetDisplayJNI(long nativePointer); + static native void jni_YGNodeStyleSetDisplayJNI(long nativePointer, int display); public static native void jni_YGNodeStyleSetFlexJNI(long nativePointer, float flex); + static native float jni_YGNodeStyleGetFlexGrowJNI(long nativePointer); + static native void jni_YGNodeStyleSetFlexGrowJNI(long nativePointer, float flexGrow); + static native float jni_YGNodeStyleGetFlexShrinkJNI(long nativePointer); + static native void jni_YGNodeStyleSetFlexShrinkJNI(long nativePointer, float flexShrink); + static native float jni_YGNodeStyleGetAspectRatioJNI(long nativePointer); + static native void jni_YGNodeStyleSetAspectRatioJNI(long nativePointer, float aspectRatio); } diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index 87a22dbb..d4a1aeb7 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -203,83 +203,113 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { } public YogaDirection getStyleDirection() { - return YogaDirection.fromInt(YogaNative.jni_YGNodeStyleGetDirection(mNativePointer)); + return YogaDirection.fromInt(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetDirectionJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetDirection(mNativePointer)); } public void setDirection(YogaDirection direction) { - YogaNative.jni_YGNodeStyleSetDirection(mNativePointer, direction.intValue()); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetDirectionJNI(mNativePointer, direction.intValue()); + else + YogaNative.jni_YGNodeStyleSetDirection(mNativePointer, direction.intValue()); } public YogaFlexDirection getFlexDirection() { - return YogaFlexDirection.fromInt(YogaNative.jni_YGNodeStyleGetFlexDirection(mNativePointer)); + return YogaFlexDirection.fromInt(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetFlexDirectionJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetFlexDirection(mNativePointer)); } public void setFlexDirection(YogaFlexDirection flexDirection) { - YogaNative.jni_YGNodeStyleSetFlexDirection(mNativePointer, flexDirection.intValue()); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetFlexDirectionJNI(mNativePointer, flexDirection.intValue()); + else + YogaNative.jni_YGNodeStyleSetFlexDirection(mNativePointer, flexDirection.intValue()); } public YogaJustify getJustifyContent() { - return YogaJustify.fromInt(YogaNative.jni_YGNodeStyleGetJustifyContent(mNativePointer)); + return YogaJustify.fromInt(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetJustifyContentJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetJustifyContent(mNativePointer)); } public void setJustifyContent(YogaJustify justifyContent) { - YogaNative.jni_YGNodeStyleSetJustifyContent(mNativePointer, justifyContent.intValue()); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetJustifyContentJNI(mNativePointer, justifyContent.intValue()); + else + YogaNative.jni_YGNodeStyleSetJustifyContent(mNativePointer, justifyContent.intValue()); } public YogaAlign getAlignItems() { - return YogaAlign.fromInt(YogaNative.jni_YGNodeStyleGetAlignItems(mNativePointer)); + return YogaAlign.fromInt(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetAlignItemsJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetAlignItems(mNativePointer)); } public void setAlignItems(YogaAlign alignItems) { - YogaNative.jni_YGNodeStyleSetAlignItems(mNativePointer, alignItems.intValue()); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetAlignItemsJNI(mNativePointer, alignItems.intValue()); + else + YogaNative.jni_YGNodeStyleSetAlignItems(mNativePointer, alignItems.intValue()); } public YogaAlign getAlignSelf() { - return YogaAlign.fromInt(YogaNative.jni_YGNodeStyleGetAlignSelf(mNativePointer)); + return YogaAlign.fromInt(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetAlignSelfJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetAlignSelf(mNativePointer)); } public void setAlignSelf(YogaAlign alignSelf) { - YogaNative.jni_YGNodeStyleSetAlignSelf(mNativePointer, alignSelf.intValue()); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetAlignSelfJNI(mNativePointer, alignSelf.intValue()); + else + YogaNative.jni_YGNodeStyleSetAlignSelf(mNativePointer, alignSelf.intValue()); } public YogaAlign getAlignContent() { - return YogaAlign.fromInt(YogaNative.jni_YGNodeStyleGetAlignContent(mNativePointer)); + return YogaAlign.fromInt(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetAlignContentJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetAlignContent(mNativePointer)); } public void setAlignContent(YogaAlign alignContent) { - YogaNative.jni_YGNodeStyleSetAlignContent(mNativePointer, alignContent.intValue()); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetAlignContentJNI(mNativePointer, alignContent.intValue()); + else + YogaNative.jni_YGNodeStyleSetAlignContent(mNativePointer, alignContent.intValue()); } public YogaPositionType getPositionType() { - return YogaPositionType.fromInt(YogaNative.jni_YGNodeStyleGetPositionType(mNativePointer)); + return YogaPositionType.fromInt(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetPositionTypeJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetPositionType(mNativePointer)); } public void setPositionType(YogaPositionType positionType) { - YogaNative.jni_YGNodeStyleSetPositionType(mNativePointer, positionType.intValue()); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetPositionTypeJNI(mNativePointer, positionType.intValue()); + else + YogaNative.jni_YGNodeStyleSetPositionType(mNativePointer, positionType.intValue()); } public YogaWrap getWrap() { - return YogaWrap.fromInt(YogaNative.jni_YGNodeStyleGetFlexWrap(mNativePointer)); + return YogaWrap.fromInt(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetFlexWrapJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetFlexWrap(mNativePointer)); } public void setWrap(YogaWrap flexWrap) { - YogaNative.jni_YGNodeStyleSetFlexWrap(mNativePointer, flexWrap.intValue()); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetFlexWrapJNI(mNativePointer, flexWrap.intValue()); + else + YogaNative.jni_YGNodeStyleSetFlexWrap(mNativePointer, flexWrap.intValue()); } public YogaOverflow getOverflow() { - return YogaOverflow.fromInt(YogaNative.jni_YGNodeStyleGetOverflow(mNativePointer)); + return YogaOverflow.fromInt(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetOverflowJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetOverflow(mNativePointer)); } public void setOverflow(YogaOverflow overflow) { - YogaNative.jni_YGNodeStyleSetOverflow(mNativePointer, overflow.intValue()); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetOverflowJNI(mNativePointer, overflow.intValue()); + else + YogaNative.jni_YGNodeStyleSetOverflow(mNativePointer, overflow.intValue()); } public YogaDisplay getDisplay() { - return YogaDisplay.fromInt(YogaNative.jni_YGNodeStyleGetDisplay(mNativePointer)); + return YogaDisplay.fromInt(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetDisplayJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetDisplay(mNativePointer)); } public void setDisplay(YogaDisplay display) { - YogaNative.jni_YGNodeStyleSetDisplay(mNativePointer, display.intValue()); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetDisplayJNI(mNativePointer, display.intValue()); + else + YogaNative.jni_YGNodeStyleSetDisplay(mNativePointer, display.intValue()); } public float getFlex() { @@ -295,19 +325,25 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { } public float getFlexGrow() { - return YogaNative.jni_YGNodeStyleGetFlexGrow(mNativePointer); + return useVanillaJNI ? YogaNative.jni_YGNodeStyleGetFlexGrowJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetFlexGrow(mNativePointer); } public void setFlexGrow(float flexGrow) { - YogaNative.jni_YGNodeStyleSetFlexGrow(mNativePointer, flexGrow); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetFlexGrowJNI(mNativePointer, flexGrow); + else + YogaNative.jni_YGNodeStyleSetFlexGrow(mNativePointer, flexGrow); } public float getFlexShrink() { - return YogaNative.jni_YGNodeStyleGetFlexShrink(mNativePointer); + return useVanillaJNI ? YogaNative.jni_YGNodeStyleGetFlexShrinkJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetFlexShrink(mNativePointer); } public void setFlexShrink(float flexShrink) { - YogaNative.jni_YGNodeStyleSetFlexShrink(mNativePointer, flexShrink); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetFlexShrinkJNI(mNativePointer, flexShrink); + else + YogaNative.jni_YGNodeStyleSetFlexShrink(mNativePointer, flexShrink); } public YogaValue getFlexBasis() { @@ -455,11 +491,14 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { } public float getAspectRatio() { - return YogaNative.jni_YGNodeStyleGetAspectRatio(mNativePointer); + return useVanillaJNI ? YogaNative.jni_YGNodeStyleGetAspectRatioJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetAspectRatio(mNativePointer); } public void setAspectRatio(float aspectRatio) { - YogaNative.jni_YGNodeStyleSetAspectRatio(mNativePointer, aspectRatio); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetAspectRatioJNI(mNativePointer, aspectRatio); + else + YogaNative.jni_YGNodeStyleSetAspectRatio(mNativePointer, aspectRatio); } public void setMeasureFunction(YogaMeasureFunction measureFunction) { diff --git a/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp index d169d0e5..7dcce2f8 100644 --- a/java/jni/YGJNIVanilla.cpp +++ b/java/jni/YGJNIVanilla.cpp @@ -12,6 +12,31 @@ static inline YGNodeRef _jlong2YGNodeRef(jlong addr) { return reinterpret_cast(static_cast(addr)); } +#define YG_NODE_JNI_STYLE_PROP(javatype, type, name) \ + static javatype jni_YGNodeStyleGet##name##JNI( \ + JNIEnv* env, jobject obj, jlong nativePointer) { \ + return (javatype) YGNodeStyleGet##name(_jlong2YGNodeRef(nativePointer)); \ + } \ + \ + static void jni_YGNodeStyleSet##name##JNI( \ + JNIEnv* env, jobject obj, jlong nativePointer, javatype value) { \ + YGNodeStyleSet##name( \ + _jlong2YGNodeRef(nativePointer), static_cast(value)); \ + } + +YG_NODE_JNI_STYLE_PROP(jint, YGDirection, Direction); +YG_NODE_JNI_STYLE_PROP(jint, YGFlexDirection, FlexDirection); +YG_NODE_JNI_STYLE_PROP(jint, YGJustify, JustifyContent); +YG_NODE_JNI_STYLE_PROP(jint, YGAlign, AlignItems); +YG_NODE_JNI_STYLE_PROP(jint, YGAlign, AlignSelf); +YG_NODE_JNI_STYLE_PROP(jint, YGAlign, AlignContent); +YG_NODE_JNI_STYLE_PROP(jint, YGPositionType, PositionType); +YG_NODE_JNI_STYLE_PROP(jint, YGWrap, FlexWrap); +YG_NODE_JNI_STYLE_PROP(jint, YGOverflow, Overflow); +YG_NODE_JNI_STYLE_PROP(jint, YGDisplay, Display); +YG_NODE_JNI_STYLE_PROP(jfloat, float, FlexGrow); +YG_NODE_JNI_STYLE_PROP(jfloat, float, FlexShrink); + void jni_YGNodeStyleSetFlexJNI( JNIEnv* env, jobject obj, @@ -21,6 +46,9 @@ void jni_YGNodeStyleSetFlexJNI( _jlong2YGNodeRef(nativePointer), static_cast(value)); } +// Yoga specific properties, not compatible with flexbox specification +YG_NODE_JNI_STYLE_PROP(jfloat, float, AspectRatio); + void assertNoPendingJniException(JNIEnv* env) { // This method cannot call any other method of the library, since other // methods of the library use it to check for exceptions too @@ -44,7 +72,86 @@ void registerNativeMethods( } static JNINativeMethod methods[] = { - {"jni_YGNodeStyleSetFlexJNI", "(JF)V", (void*) jni_YGNodeStyleSetFlexJNI}}; + {"jni_YGNodeStyleSetFlexJNI", "(JF)V", (void*) jni_YGNodeStyleSetFlexJNI}, + {"jni_YGNodeStyleGetDirectionJNI", + "(J)I", + (void*) jni_YGNodeStyleGetDirectionJNI}, + {"jni_YGNodeStyleSetDirectionJNI", + "(JI)V", + (void*) jni_YGNodeStyleSetDirectionJNI}, + {"jni_YGNodeStyleGetFlexDirectionJNI", + "(J)I", + (void*) jni_YGNodeStyleGetFlexDirectionJNI}, + {"jni_YGNodeStyleSetFlexDirectionJNI", + "(JI)V", + (void*) jni_YGNodeStyleSetFlexDirectionJNI}, + {"jni_YGNodeStyleGetJustifyContentJNI", + "(J)I", + (void*) jni_YGNodeStyleGetJustifyContentJNI}, + {"jni_YGNodeStyleSetJustifyContentJNI", + "(JI)V", + (void*) jni_YGNodeStyleSetJustifyContentJNI}, + {"jni_YGNodeStyleGetAlignItemsJNI", + "(J)I", + (void*) jni_YGNodeStyleGetAlignItemsJNI}, + {"jni_YGNodeStyleSetAlignItemsJNI", + "(JI)V", + (void*) jni_YGNodeStyleSetAlignItemsJNI}, + {"jni_YGNodeStyleGetAlignSelfJNI", + "(J)I", + (void*) jni_YGNodeStyleGetAlignSelfJNI}, + {"jni_YGNodeStyleSetAlignSelfJNI", + "(JI)V", + (void*) jni_YGNodeStyleSetAlignSelfJNI}, + {"jni_YGNodeStyleGetAlignContentJNI", + "(J)I", + (void*) jni_YGNodeStyleGetAlignContentJNI}, + {"jni_YGNodeStyleSetAlignContentJNI", + "(JI)V", + (void*) jni_YGNodeStyleSetAlignContentJNI}, + {"jni_YGNodeStyleGetPositionTypeJNI", + "(J)I", + (void*) jni_YGNodeStyleGetPositionTypeJNI}, + {"jni_YGNodeStyleSetPositionTypeJNI", + "(JI)V", + (void*) jni_YGNodeStyleSetPositionTypeJNI}, + {"jni_YGNodeStyleGetFlexWrapJNI", + "(J)I", + (void*) jni_YGNodeStyleGetFlexWrapJNI}, + {"jni_YGNodeStyleSetFlexWrapJNI", + "(JI)V", + (void*) jni_YGNodeStyleSetFlexWrapJNI}, + {"jni_YGNodeStyleGetOverflowJNI", + "(J)I", + (void*) jni_YGNodeStyleGetOverflowJNI}, + {"jni_YGNodeStyleSetOverflowJNI", + "(JI)V", + (void*) jni_YGNodeStyleSetOverflowJNI}, + {"jni_YGNodeStyleGetDisplayJNI", + "(J)I", + (void*) jni_YGNodeStyleGetDisplayJNI}, + {"jni_YGNodeStyleSetDisplayJNI", + "(JI)V", + (void*) jni_YGNodeStyleSetDisplayJNI}, + {"jni_YGNodeStyleGetFlexGrowJNI", + "(J)F", + (void*) jni_YGNodeStyleGetFlexGrowJNI}, + {"jni_YGNodeStyleSetFlexGrowJNI", + "(JF)V", + (void*) jni_YGNodeStyleSetFlexGrowJNI}, + {"jni_YGNodeStyleGetFlexShrinkJNI", + "(J)F", + (void*) jni_YGNodeStyleGetFlexShrinkJNI}, + {"jni_YGNodeStyleSetFlexShrinkJNI", + "(JF)V", + (void*) jni_YGNodeStyleSetFlexShrinkJNI}, + {"jni_YGNodeStyleGetAspectRatioJNI", + "(J)F", + (void*) jni_YGNodeStyleGetAspectRatioJNI}, + {"jni_YGNodeStyleSetAspectRatioJNI", + "(JF)V", + (void*) jni_YGNodeStyleSetAspectRatioJNI}, +}; void YGJNIVanilla::registerNatives(JNIEnv* env) { registerNativeMethods( From 3fce27c48c67b6d860bd8eba32cf5796611973f6 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Tue, 8 Oct 2019 14:23:57 -0700 Subject: [PATCH 182/347] Migrate YGNodeStyleGetFlex method to vanilla jni (YogaStyleProperties Part 2) Summary: Move Yoga style properties to vanilla JNI under a flag. Reviewed By: amir-shalem Differential Revision: D17666090 fbshipit-source-id: 121b939c310799c79f2fce0ea293f88b2940c4fc --- java/com/facebook/yoga/YogaNative.java | 3 ++- java/com/facebook/yoga/YogaNodeJNIBase.java | 2 +- java/jni/YGJNIVanilla.cpp | 13 +++---------- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/java/com/facebook/yoga/YogaNative.java b/java/com/facebook/yoga/YogaNative.java index ae1b9721..bc79d20f 100644 --- a/java/com/facebook/yoga/YogaNative.java +++ b/java/com/facebook/yoga/YogaNative.java @@ -134,7 +134,8 @@ public class YogaNative { static native void jni_YGNodeStyleSetOverflowJNI(long nativePointer, int overflow); static native int jni_YGNodeStyleGetDisplayJNI(long nativePointer); static native void jni_YGNodeStyleSetDisplayJNI(long nativePointer, int display); - public static native void jni_YGNodeStyleSetFlexJNI(long nativePointer, float flex); + static native float jni_YGNodeStyleGetFlexJNI(long nativePointer); + static native void jni_YGNodeStyleSetFlexJNI(long nativePointer, float flex); static native float jni_YGNodeStyleGetFlexGrowJNI(long nativePointer); static native void jni_YGNodeStyleSetFlexGrowJNI(long nativePointer, float flexGrow); static native float jni_YGNodeStyleGetFlexShrinkJNI(long nativePointer); diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index d4a1aeb7..5fbb8728 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -313,7 +313,7 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { } public float getFlex() { - return YogaNative.jni_YGNodeStyleGetFlex(mNativePointer); + return useVanillaJNI ? YogaNative.jni_YGNodeStyleGetFlexJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetFlex(mNativePointer); } public void setFlex(float flex) { diff --git a/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp index 7dcce2f8..c3f60160 100644 --- a/java/jni/YGJNIVanilla.cpp +++ b/java/jni/YGJNIVanilla.cpp @@ -34,18 +34,10 @@ YG_NODE_JNI_STYLE_PROP(jint, YGPositionType, PositionType); YG_NODE_JNI_STYLE_PROP(jint, YGWrap, FlexWrap); YG_NODE_JNI_STYLE_PROP(jint, YGOverflow, Overflow); YG_NODE_JNI_STYLE_PROP(jint, YGDisplay, Display); +YG_NODE_JNI_STYLE_PROP(jfloat, float, Flex); YG_NODE_JNI_STYLE_PROP(jfloat, float, FlexGrow); YG_NODE_JNI_STYLE_PROP(jfloat, float, FlexShrink); -void jni_YGNodeStyleSetFlexJNI( - JNIEnv* env, - jobject obj, - jlong nativePointer, - jfloat value) { - YGNodeStyleSetFlex( - _jlong2YGNodeRef(nativePointer), static_cast(value)); -} - // Yoga specific properties, not compatible with flexbox specification YG_NODE_JNI_STYLE_PROP(jfloat, float, AspectRatio); @@ -72,7 +64,6 @@ void registerNativeMethods( } static JNINativeMethod methods[] = { - {"jni_YGNodeStyleSetFlexJNI", "(JF)V", (void*) jni_YGNodeStyleSetFlexJNI}, {"jni_YGNodeStyleGetDirectionJNI", "(J)I", (void*) jni_YGNodeStyleGetDirectionJNI}, @@ -133,6 +124,8 @@ static JNINativeMethod methods[] = { {"jni_YGNodeStyleSetDisplayJNI", "(JI)V", (void*) jni_YGNodeStyleSetDisplayJNI}, + {"jni_YGNodeStyleGetFlexJNI", "(J)F", (void*) jni_YGNodeStyleGetFlexJNI}, + {"jni_YGNodeStyleSetFlexJNI", "(JF)V", (void*) jni_YGNodeStyleSetFlexJNI}, {"jni_YGNodeStyleGetFlexGrowJNI", "(J)F", (void*) jni_YGNodeStyleGetFlexGrowJNI}, From 25b8c94788aa0e602dc967acfc5197581781d513 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Tue, 8 Oct 2019 14:23:57 -0700 Subject: [PATCH 183/347] move common code to YGJNI.h header class Summary: Moving common code to YGJNI.h header class so that same can be used in fbjni and vanilla jni implementations Reviewed By: amir-shalem Differential Revision: D17666457 fbshipit-source-id: 1e6cd2506fb773b8a17ebef277a2c7ef9728e66b --- java/jni/YGJNI.cpp | 51 +--------------------------------------- java/jni/YGJNI.h | 58 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 50 deletions(-) create mode 100644 java/jni/YGJNI.h diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp index 88e325d2..595fe204 100644 --- a/java/jni/YGJNI.cpp +++ b/java/jni/YGJNI.cpp @@ -16,6 +16,7 @@ #include "YGJTypes.h" #include "YGJNIVanilla.h" +#include "YGJNI.h" using namespace facebook::jni; using namespace std; @@ -76,59 +77,9 @@ const short int LAYOUT_BORDER_START_INDEX = 14; namespace { -union YGNodeContext { - uintptr_t edgesSet = 0; - void* asVoidPtr; -}; - const int DOES_LEGACY_STRETCH_BEHAVIOUR = 8; const int HAS_NEW_LAYOUT = 16; -class YGNodeEdges { - uintptr_t edges_; - -public: - enum Edge { - MARGIN = 1, - PADDING = 2, - BORDER = 4, - }; - - YGNodeEdges(YGNodeRef node) { - auto context = YGNodeContext{}; - context.asVoidPtr = node->getContext(); - edges_ = context.edgesSet; - } - - void setOn(YGNodeRef node) { - auto context = YGNodeContext{}; - context.edgesSet = edges_; - node->setContext(context.asVoidPtr); - } - - bool has(Edge edge) { return (edges_ & edge) == edge; } - - YGNodeEdges& add(Edge edge) { - edges_ |= edge; - return *this; - } - - int get() { return edges_; } -}; - -struct YogaValue { - static constexpr jint NAN_BYTES = 0x7fc00000; - - static jlong asJavaLong(const YGValue& value) { - uint32_t valueBytes = 0; - memcpy(&valueBytes, &value.value, sizeof valueBytes); - return ((jlong) value.unit) << 32 | valueBytes; - } - constexpr static jlong undefinedAsJavaLong() { - return ((jlong) YGUnitUndefined) << 32 | NAN_BYTES; - } -}; - } // namespace static inline local_ref YGNodeJobject( diff --git a/java/jni/YGJNI.h b/java/jni/YGJNI.h new file mode 100644 index 00000000..f0c489c1 --- /dev/null +++ b/java/jni/YGJNI.h @@ -0,0 +1,58 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +namespace { + +union YGNodeContext { + uintptr_t edgesSet = 0; + void* asVoidPtr; +}; + +class YGNodeEdges { + uintptr_t edges_; + +public: + enum Edge { + MARGIN = 1, + PADDING = 2, + BORDER = 4, + }; + + YGNodeEdges(YGNodeRef node) { + auto context = YGNodeContext{}; + context.asVoidPtr = node->getContext(); + edges_ = context.edgesSet; + } + + void setOn(YGNodeRef node) { + auto context = YGNodeContext{}; + context.edgesSet = edges_; + node->setContext(context.asVoidPtr); + } + + bool has(Edge edge) { return (edges_ & edge) == edge; } + + YGNodeEdges& add(Edge edge) { + edges_ |= edge; + return *this; + } + + int get() { return edges_; } +}; + +struct YogaValue { + static constexpr jint NAN_BYTES = 0x7fc00000; + + static jlong asJavaLong(const YGValue& value) { + uint32_t valueBytes = 0; + memcpy(&valueBytes, &value.value, sizeof valueBytes); + return ((jlong) value.unit) << 32 | valueBytes; + } + constexpr static jlong undefinedAsJavaLong() { + return ((jlong) YGUnitUndefined) << 32 | NAN_BYTES; + } +}; +} // namespace From 6e6b1369ac55bd0997d63238cb9fd3e35058bac3 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Tue, 8 Oct 2019 14:23:57 -0700 Subject: [PATCH 184/347] move percent auto style properties to vanilla jni (YogaStyleProperties Part 3) Summary: Move Yoga style properties to vanilla JNI under a flag. Reviewed By: amir-shalem Differential Revision: D17666674 fbshipit-source-id: 08490bf7c214c856a93214088a27dd4e6df9e0fd --- java/com/facebook/yoga/YogaNative.java | 24 +++++ java/com/facebook/yoga/YogaNodeJNIBase.java | 99 ++++++++++++++----- java/jni/YGJNI.cpp | 1 - java/jni/YGJNI.h | 2 + java/jni/YGJNIVanilla.cpp | 103 ++++++++++++++++++++ 5 files changed, 204 insertions(+), 25 deletions(-) diff --git a/java/com/facebook/yoga/YogaNative.java b/java/com/facebook/yoga/YogaNative.java index bc79d20f..a257eb8c 100644 --- a/java/com/facebook/yoga/YogaNative.java +++ b/java/com/facebook/yoga/YogaNative.java @@ -140,6 +140,30 @@ public class YogaNative { static native void jni_YGNodeStyleSetFlexGrowJNI(long nativePointer, float flexGrow); static native float jni_YGNodeStyleGetFlexShrinkJNI(long nativePointer); static native void jni_YGNodeStyleSetFlexShrinkJNI(long nativePointer, float flexShrink); + static native long jni_YGNodeStyleGetFlexBasisJNI(long nativePointer); + static native void jni_YGNodeStyleSetFlexBasisJNI(long nativePointer, float flexBasis); + static native void jni_YGNodeStyleSetFlexBasisPercentJNI(long nativePointer, float percent); + static native void jni_YGNodeStyleSetFlexBasisAutoJNI(long nativePointer); + static native long jni_YGNodeStyleGetWidthJNI(long nativePointer); + static native void jni_YGNodeStyleSetWidthJNI(long nativePointer, float width); + static native void jni_YGNodeStyleSetWidthPercentJNI(long nativePointer, float percent); + static native void jni_YGNodeStyleSetWidthAutoJNI(long nativePointer); + static native long jni_YGNodeStyleGetHeightJNI(long nativePointer); + static native void jni_YGNodeStyleSetHeightJNI(long nativePointer, float height); + static native void jni_YGNodeStyleSetHeightPercentJNI(long nativePointer, float percent); + static native void jni_YGNodeStyleSetHeightAutoJNI(long nativePointer); + static native long jni_YGNodeStyleGetMinWidthJNI(long nativePointer); + static native void jni_YGNodeStyleSetMinWidthJNI(long nativePointer, float minWidth); + static native void jni_YGNodeStyleSetMinWidthPercentJNI(long nativePointer, float percent); + static native long jni_YGNodeStyleGetMinHeightJNI(long nativePointer); + static native void jni_YGNodeStyleSetMinHeightJNI(long nativePointer, float minHeight); + static native void jni_YGNodeStyleSetMinHeightPercentJNI(long nativePointer, float percent); + static native long jni_YGNodeStyleGetMaxWidthJNI(long nativePointer); + static native void jni_YGNodeStyleSetMaxWidthJNI(long nativePointer, float maxWidth); + static native void jni_YGNodeStyleSetMaxWidthPercentJNI(long nativePointer, float percent); + static native long jni_YGNodeStyleGetMaxHeightJNI(long nativePointer); + static native void jni_YGNodeStyleSetMaxHeightJNI(long nativePointer, float maxheight); + static native void jni_YGNodeStyleSetMaxHeightPercentJNI(long nativePointer, float percent); static native float jni_YGNodeStyleGetAspectRatioJNI(long nativePointer); static native void jni_YGNodeStyleSetAspectRatioJNI(long nativePointer, float aspectRatio); } diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index 5fbb8728..3b7f5b63 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -347,19 +347,28 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { } public YogaValue getFlexBasis() { - return valueFromLong(YogaNative.jni_YGNodeStyleGetFlexBasis(mNativePointer)); + return valueFromLong(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetFlexBasisJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetFlexBasis(mNativePointer)); } public void setFlexBasis(float flexBasis) { - YogaNative.jni_YGNodeStyleSetFlexBasis(mNativePointer, flexBasis); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetFlexBasisJNI(mNativePointer, flexBasis); + else + YogaNative.jni_YGNodeStyleSetFlexBasis(mNativePointer, flexBasis); } public void setFlexBasisPercent(float percent) { - YogaNative.jni_YGNodeStyleSetFlexBasisPercent(mNativePointer, percent); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetFlexBasisPercentJNI(mNativePointer, percent); + else + YogaNative.jni_YGNodeStyleSetFlexBasisPercent(mNativePointer, percent); } public void setFlexBasisAuto() { - YogaNative.jni_YGNodeStyleSetFlexBasisAuto(mNativePointer); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetFlexBasisAutoJNI(mNativePointer); + else + YogaNative.jni_YGNodeStyleSetFlexBasisAuto(mNativePointer); } public YogaValue getMargin(YogaEdge edge) { @@ -411,83 +420,125 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { } public YogaValue getWidth() { - return valueFromLong(YogaNative.jni_YGNodeStyleGetWidth(mNativePointer)); + return valueFromLong(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetWidthJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetWidth(mNativePointer)); } public void setWidth(float width) { - YogaNative.jni_YGNodeStyleSetWidth(mNativePointer, width); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetWidthJNI(mNativePointer, width); + else + YogaNative.jni_YGNodeStyleSetWidth(mNativePointer, width); } public void setWidthPercent(float percent) { - YogaNative.jni_YGNodeStyleSetWidthPercent(mNativePointer, percent); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetWidthPercentJNI(mNativePointer, percent); + else + YogaNative.jni_YGNodeStyleSetWidthPercent(mNativePointer, percent); } public void setWidthAuto() { - YogaNative.jni_YGNodeStyleSetWidthAuto(mNativePointer); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetWidthAutoJNI(mNativePointer); + else + YogaNative.jni_YGNodeStyleSetWidthAuto(mNativePointer); } public YogaValue getHeight() { - return valueFromLong(YogaNative.jni_YGNodeStyleGetHeight(mNativePointer)); + return valueFromLong(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetHeightJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetHeight(mNativePointer)); } public void setHeight(float height) { - YogaNative.jni_YGNodeStyleSetHeight(mNativePointer, height); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetHeightJNI(mNativePointer, height); + else + YogaNative.jni_YGNodeStyleSetHeight(mNativePointer, height); } public void setHeightPercent(float percent) { - YogaNative.jni_YGNodeStyleSetHeightPercent(mNativePointer, percent); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetHeightPercentJNI(mNativePointer, percent); + else + YogaNative.jni_YGNodeStyleSetHeightPercent(mNativePointer, percent); } public void setHeightAuto() { - YogaNative.jni_YGNodeStyleSetHeightAuto(mNativePointer); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetHeightAutoJNI(mNativePointer); + else + YogaNative.jni_YGNodeStyleSetHeightAuto(mNativePointer); } public YogaValue getMinWidth() { - return valueFromLong(YogaNative.jni_YGNodeStyleGetMinWidth(mNativePointer)); + return valueFromLong(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetMinWidthJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetMinWidth(mNativePointer)); } public void setMinWidth(float minWidth) { - YogaNative.jni_YGNodeStyleSetMinWidth(mNativePointer, minWidth); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetMinWidthJNI(mNativePointer, minWidth); + else + YogaNative.jni_YGNodeStyleSetMinWidth(mNativePointer, minWidth); } public void setMinWidthPercent(float percent) { - YogaNative.jni_YGNodeStyleSetMinWidthPercent(mNativePointer, percent); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetMinWidthPercentJNI(mNativePointer, percent); + else + YogaNative.jni_YGNodeStyleSetMinWidthPercent(mNativePointer, percent); } public YogaValue getMinHeight() { - return valueFromLong(YogaNative.jni_YGNodeStyleGetMinHeight(mNativePointer)); + return valueFromLong(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetMinHeightJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetMinHeight(mNativePointer)); } public void setMinHeight(float minHeight) { - YogaNative.jni_YGNodeStyleSetMinHeight(mNativePointer, minHeight); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetMinHeightJNI(mNativePointer, minHeight); + else + YogaNative.jni_YGNodeStyleSetMinHeight(mNativePointer, minHeight); } public void setMinHeightPercent(float percent) { - YogaNative.jni_YGNodeStyleSetMinHeightPercent(mNativePointer, percent); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetMinHeightPercentJNI(mNativePointer, percent); + else + YogaNative.jni_YGNodeStyleSetMinHeightPercent(mNativePointer, percent); } public YogaValue getMaxWidth() { - return valueFromLong(YogaNative.jni_YGNodeStyleGetMaxWidth(mNativePointer)); + return valueFromLong(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetMaxWidthJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetMaxWidth(mNativePointer)); } public void setMaxWidth(float maxWidth) { - YogaNative.jni_YGNodeStyleSetMaxWidth(mNativePointer, maxWidth); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetMaxWidthJNI(mNativePointer, maxWidth); + else + YogaNative.jni_YGNodeStyleSetMaxWidth(mNativePointer, maxWidth); } public void setMaxWidthPercent(float percent) { - YogaNative.jni_YGNodeStyleSetMaxWidthPercent(mNativePointer, percent); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetMaxWidthPercentJNI(mNativePointer, percent); + else + YogaNative.jni_YGNodeStyleSetMaxWidthPercent(mNativePointer, percent); } public YogaValue getMaxHeight() { - return valueFromLong(YogaNative.jni_YGNodeStyleGetMaxHeight(mNativePointer)); + return valueFromLong(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetMaxHeightJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetMaxHeight(mNativePointer)); } public void setMaxHeight(float maxheight) { - YogaNative.jni_YGNodeStyleSetMaxHeight(mNativePointer, maxheight); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetMaxHeightJNI(mNativePointer, maxheight); + else + YogaNative.jni_YGNodeStyleSetMaxHeight(mNativePointer, maxheight); } public void setMaxHeightPercent(float percent) { - YogaNative.jni_YGNodeStyleSetMaxHeightPercent(mNativePointer, percent); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetMaxHeightPercentJNI(mNativePointer, percent); + else + YogaNative.jni_YGNodeStyleSetMaxHeightPercent(mNativePointer, percent); } public float getAspectRatio() { diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp index 595fe204..c0423208 100644 --- a/java/jni/YGJNI.cpp +++ b/java/jni/YGJNI.cpp @@ -10,7 +10,6 @@ #include #include #include -#include #include #include diff --git a/java/jni/YGJNI.h b/java/jni/YGJNI.h index f0c489c1..d69fba47 100644 --- a/java/jni/YGJNI.h +++ b/java/jni/YGJNI.h @@ -4,6 +4,8 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ +#include + namespace { union YGNodeContext { diff --git a/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp index c3f60160..86899508 100644 --- a/java/jni/YGJNIVanilla.cpp +++ b/java/jni/YGJNIVanilla.cpp @@ -7,6 +7,7 @@ #include "jni.h" #include "YGJNIVanilla.h" #include +#include "YGJNI.h" static inline YGNodeRef _jlong2YGNodeRef(jlong addr) { return reinterpret_cast(static_cast(addr)); @@ -24,6 +25,32 @@ static inline YGNodeRef _jlong2YGNodeRef(jlong addr) { _jlong2YGNodeRef(nativePointer), static_cast(value)); \ } +#define YG_NODE_JNI_STYLE_UNIT_PROP(name) \ + static jlong jni_YGNodeStyleGet##name##JNI( \ + JNIEnv* env, jobject obj, jlong nativePointer) { \ + return YogaValue::asJavaLong( \ + YGNodeStyleGet##name(_jlong2YGNodeRef(nativePointer))); \ + } \ + \ + static void jni_YGNodeStyleSet##name##JNI( \ + JNIEnv* env, jobject obj, jlong nativePointer, jfloat value) { \ + YGNodeStyleSet##name( \ + _jlong2YGNodeRef(nativePointer), static_cast(value)); \ + } \ + \ + static void jni_YGNodeStyleSet##name##PercentJNI( \ + JNIEnv* env, jobject obj, jlong nativePointer, jfloat value) { \ + YGNodeStyleSet##name##Percent( \ + _jlong2YGNodeRef(nativePointer), static_cast(value)); \ + } + +#define YG_NODE_JNI_STYLE_UNIT_PROP_AUTO(name) \ + YG_NODE_JNI_STYLE_UNIT_PROP(name) \ + static void jni_YGNodeStyleSet##name##AutoJNI( \ + JNIEnv* env, jobject obj, jlong nativePointer) { \ + YGNodeStyleSet##name##Auto(_jlong2YGNodeRef(nativePointer)); \ + } + YG_NODE_JNI_STYLE_PROP(jint, YGDirection, Direction); YG_NODE_JNI_STYLE_PROP(jint, YGFlexDirection, FlexDirection); YG_NODE_JNI_STYLE_PROP(jint, YGJustify, JustifyContent); @@ -38,6 +65,14 @@ YG_NODE_JNI_STYLE_PROP(jfloat, float, Flex); YG_NODE_JNI_STYLE_PROP(jfloat, float, FlexGrow); YG_NODE_JNI_STYLE_PROP(jfloat, float, FlexShrink); +YG_NODE_JNI_STYLE_UNIT_PROP_AUTO(FlexBasis); +YG_NODE_JNI_STYLE_UNIT_PROP_AUTO(Width); +YG_NODE_JNI_STYLE_UNIT_PROP(MinWidth); +YG_NODE_JNI_STYLE_UNIT_PROP(MaxWidth); +YG_NODE_JNI_STYLE_UNIT_PROP_AUTO(Height); +YG_NODE_JNI_STYLE_UNIT_PROP(MinHeight); +YG_NODE_JNI_STYLE_UNIT_PROP(MaxHeight); + // Yoga specific properties, not compatible with flexbox specification YG_NODE_JNI_STYLE_PROP(jfloat, float, AspectRatio); @@ -138,6 +173,74 @@ static JNINativeMethod methods[] = { {"jni_YGNodeStyleSetFlexShrinkJNI", "(JF)V", (void*) jni_YGNodeStyleSetFlexShrinkJNI}, + {"jni_YGNodeStyleGetFlexBasisJNI", + "(J)J", + (void*) jni_YGNodeStyleGetFlexBasisJNI}, + {"jni_YGNodeStyleSetFlexBasisJNI", + "(JF)V", + (void*) jni_YGNodeStyleSetFlexBasisJNI}, + {"jni_YGNodeStyleSetFlexBasisPercentJNI", + "(JF)V", + (void*) jni_YGNodeStyleSetFlexBasisPercentJNI}, + {"jni_YGNodeStyleSetFlexBasisAutoJNI", + "(J)V", + (void*) jni_YGNodeStyleSetFlexBasisAutoJNI}, + {"jni_YGNodeStyleGetWidthJNI", "(J)J", (void*) jni_YGNodeStyleGetWidthJNI}, + {"jni_YGNodeStyleSetWidthJNI", "(JF)V", (void*) jni_YGNodeStyleSetWidthJNI}, + {"jni_YGNodeStyleSetWidthPercentJNI", + "(JF)V", + (void*) jni_YGNodeStyleSetWidthPercentJNI}, + {"jni_YGNodeStyleSetWidthAutoJNI", + "(J)V", + (void*) jni_YGNodeStyleSetWidthAutoJNI}, + {"jni_YGNodeStyleGetHeightJNI", + "(J)J", + (void*) jni_YGNodeStyleGetHeightJNI}, + {"jni_YGNodeStyleSetHeightJNI", + "(JF)V", + (void*) jni_YGNodeStyleSetHeightJNI}, + {"jni_YGNodeStyleSetHeightPercentJNI", + "(JF)V", + (void*) jni_YGNodeStyleSetHeightPercentJNI}, + {"jni_YGNodeStyleSetHeightAutoJNI", + "(J)V", + (void*) jni_YGNodeStyleSetHeightAutoJNI}, + {"jni_YGNodeStyleGetMinWidthJNI", + "(J)J", + (void*) jni_YGNodeStyleGetMinWidthJNI}, + {"jni_YGNodeStyleSetMinWidthJNI", + "(JF)V", + (void*) jni_YGNodeStyleSetMinWidthJNI}, + {"jni_YGNodeStyleSetMinWidthPercentJNI", + "(JF)V", + (void*) jni_YGNodeStyleSetMinWidthPercentJNI}, + {"jni_YGNodeStyleGetMinHeightJNI", + "(J)J", + (void*) jni_YGNodeStyleGetMinHeightJNI}, + {"jni_YGNodeStyleSetMinHeightJNI", + "(JF)V", + (void*) jni_YGNodeStyleSetMinHeightJNI}, + {"jni_YGNodeStyleSetMinHeightPercentJNI", + "(JF)V", + (void*) jni_YGNodeStyleSetMinHeightPercentJNI}, + {"jni_YGNodeStyleGetMaxWidthJNI", + "(J)J", + (void*) jni_YGNodeStyleGetMaxWidthJNI}, + {"jni_YGNodeStyleSetMaxWidthJNI", + "(JF)V", + (void*) jni_YGNodeStyleSetMaxWidthJNI}, + {"jni_YGNodeStyleSetMaxWidthPercentJNI", + "(JF)V", + (void*) jni_YGNodeStyleSetMaxWidthPercentJNI}, + {"jni_YGNodeStyleGetMaxHeightJNI", + "(J)J", + (void*) jni_YGNodeStyleGetMaxHeightJNI}, + {"jni_YGNodeStyleSetMaxHeightJNI", + "(JF)V", + (void*) jni_YGNodeStyleSetMaxHeightJNI}, + {"jni_YGNodeStyleSetMaxHeightPercentJNI", + "(JF)V", + (void*) jni_YGNodeStyleSetMaxHeightPercentJNI}, {"jni_YGNodeStyleGetAspectRatioJNI", "(J)F", (void*) jni_YGNodeStyleGetAspectRatioJNI}, From 8975019269759732e5baafbb9b3f962c1dd0afdb Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Tue, 8 Oct 2019 14:23:57 -0700 Subject: [PATCH 185/347] move edge style properties to vanilla jni (YogaStyleProperties Part 4) Summary: Move Yoga style properties to vanilla JNI under a flag. Reviewed By: amir-shalem Differential Revision: D17667201 fbshipit-source-id: 448134d6d7d0dd0c6ff2734b3eb39e65d1cb403f --- java/com/facebook/yoga/YogaNative.java | 12 ++ java/com/facebook/yoga/YogaNodeJNIBase.java | 48 ++++-- java/jni/YGJNI.cpp | 1 + java/jni/YGJNI.h | 2 - java/jni/YGJNIVanilla.cpp | 178 ++++++++++++++++++++ 5 files changed, 227 insertions(+), 14 deletions(-) diff --git a/java/com/facebook/yoga/YogaNative.java b/java/com/facebook/yoga/YogaNative.java index a257eb8c..5f0391cb 100644 --- a/java/com/facebook/yoga/YogaNative.java +++ b/java/com/facebook/yoga/YogaNative.java @@ -144,6 +144,18 @@ public class YogaNative { static native void jni_YGNodeStyleSetFlexBasisJNI(long nativePointer, float flexBasis); static native void jni_YGNodeStyleSetFlexBasisPercentJNI(long nativePointer, float percent); static native void jni_YGNodeStyleSetFlexBasisAutoJNI(long nativePointer); + static native long jni_YGNodeStyleGetMarginJNI(long nativePointer, int edge); + static native void jni_YGNodeStyleSetMarginJNI(long nativePointer, int edge, float margin); + static native void jni_YGNodeStyleSetMarginPercentJNI(long nativePointer, int edge, float percent); + static native void jni_YGNodeStyleSetMarginAutoJNI(long nativePointer, int edge); + static native long jni_YGNodeStyleGetPaddingJNI(long nativePointer, int edge); + static native void jni_YGNodeStyleSetPaddingJNI(long nativePointer, int edge, float padding); + static native void jni_YGNodeStyleSetPaddingPercentJNI(long nativePointer, int edge, float percent); + static native float jni_YGNodeStyleGetBorderJNI(long nativePointer, int edge); + static native void jni_YGNodeStyleSetBorderJNI(long nativePointer, int edge, float border); + static native long jni_YGNodeStyleGetPositionJNI(long nativePointer, int edge); + static native void jni_YGNodeStyleSetPositionJNI(long nativePointer, int edge, float position); + static native void jni_YGNodeStyleSetPositionPercentJNI(long nativePointer, int edge, float percent); static native long jni_YGNodeStyleGetWidthJNI(long nativePointer); static native void jni_YGNodeStyleSetWidthJNI(long nativePointer, float width); static native void jni_YGNodeStyleSetWidthPercentJNI(long nativePointer, float percent); diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index 3b7f5b63..744c5979 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -372,51 +372,75 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { } public YogaValue getMargin(YogaEdge edge) { - return valueFromLong(YogaNative.jni_YGNodeStyleGetMargin(mNativePointer, edge.intValue())); + return valueFromLong(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetMarginJNI(mNativePointer, edge.intValue()) : YogaNative.jni_YGNodeStyleGetMargin(mNativePointer, edge.intValue())); } public void setMargin(YogaEdge edge, float margin) { - YogaNative.jni_YGNodeStyleSetMargin(mNativePointer, edge.intValue(), margin); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetMarginJNI(mNativePointer, edge.intValue(), margin); + else + YogaNative.jni_YGNodeStyleSetMargin(mNativePointer, edge.intValue(), margin); } public void setMarginPercent(YogaEdge edge, float percent) { - YogaNative.jni_YGNodeStyleSetMarginPercent(mNativePointer, edge.intValue(), percent); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetMarginPercentJNI(mNativePointer, edge.intValue(), percent); + else + YogaNative.jni_YGNodeStyleSetMarginPercent(mNativePointer, edge.intValue(), percent); } public void setMarginAuto(YogaEdge edge) { - YogaNative.jni_YGNodeStyleSetMarginAuto(mNativePointer, edge.intValue()); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetMarginAutoJNI(mNativePointer, edge.intValue()); + else + YogaNative.jni_YGNodeStyleSetMarginAuto(mNativePointer, edge.intValue()); } public YogaValue getPadding(YogaEdge edge) { - return valueFromLong(YogaNative.jni_YGNodeStyleGetPadding(mNativePointer, edge.intValue())); + return valueFromLong(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetPaddingJNI(mNativePointer, edge.intValue()) : YogaNative.jni_YGNodeStyleGetPadding(mNativePointer, edge.intValue())); } public void setPadding(YogaEdge edge, float padding) { - YogaNative.jni_YGNodeStyleSetPadding(mNativePointer, edge.intValue(), padding); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetPaddingJNI(mNativePointer, edge.intValue(), padding); + else + YogaNative.jni_YGNodeStyleSetPadding(mNativePointer, edge.intValue(), padding); } public void setPaddingPercent(YogaEdge edge, float percent) { - YogaNative.jni_YGNodeStyleSetPaddingPercent(mNativePointer, edge.intValue(), percent); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetPaddingPercentJNI(mNativePointer, edge.intValue(), percent); + else + YogaNative.jni_YGNodeStyleSetPaddingPercent(mNativePointer, edge.intValue(), percent); } public float getBorder(YogaEdge edge) { - return YogaNative.jni_YGNodeStyleGetBorder(mNativePointer, edge.intValue()); + return useVanillaJNI ? YogaNative.jni_YGNodeStyleGetBorderJNI(mNativePointer, edge.intValue()) : YogaNative.jni_YGNodeStyleGetBorder(mNativePointer, edge.intValue()); } public void setBorder(YogaEdge edge, float border) { - YogaNative.jni_YGNodeStyleSetBorder(mNativePointer, edge.intValue(), border); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetBorderJNI(mNativePointer, edge.intValue(), border); + else + YogaNative.jni_YGNodeStyleSetBorder(mNativePointer, edge.intValue(), border); } public YogaValue getPosition(YogaEdge edge) { - return valueFromLong(YogaNative.jni_YGNodeStyleGetPosition(mNativePointer, edge.intValue())); + return valueFromLong(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetPositionJNI(mNativePointer, edge.intValue()) : YogaNative.jni_YGNodeStyleGetPosition(mNativePointer, edge.intValue())); } public void setPosition(YogaEdge edge, float position) { - YogaNative.jni_YGNodeStyleSetPosition(mNativePointer, edge.intValue(), position); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetPositionJNI(mNativePointer, edge.intValue(), position); + else + YogaNative.jni_YGNodeStyleSetPosition(mNativePointer, edge.intValue(), position); } public void setPositionPercent(YogaEdge edge, float percent) { - YogaNative.jni_YGNodeStyleSetPositionPercent(mNativePointer, edge.intValue(), percent); + if (useVanillaJNI) + YogaNative.jni_YGNodeStyleSetPositionPercentJNI(mNativePointer, edge.intValue(), percent); + else + YogaNative.jni_YGNodeStyleSetPositionPercent(mNativePointer, edge.intValue(), percent); } public YogaValue getWidth() { diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp index c0423208..595fe204 100644 --- a/java/jni/YGJNI.cpp +++ b/java/jni/YGJNI.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include diff --git a/java/jni/YGJNI.h b/java/jni/YGJNI.h index d69fba47..f0c489c1 100644 --- a/java/jni/YGJNI.h +++ b/java/jni/YGJNI.h @@ -4,8 +4,6 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ -#include - namespace { union YGNodeContext { diff --git a/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp index 86899508..395d4526 100644 --- a/java/jni/YGJNIVanilla.cpp +++ b/java/jni/YGJNIVanilla.cpp @@ -7,6 +7,7 @@ #include "jni.h" #include "YGJNIVanilla.h" #include +#include #include "YGJNI.h" static inline YGNodeRef _jlong2YGNodeRef(jlong addr) { @@ -51,6 +52,37 @@ static inline YGNodeRef _jlong2YGNodeRef(jlong addr) { YGNodeStyleSet##name##Auto(_jlong2YGNodeRef(nativePointer)); \ } +#define YG_NODE_JNI_STYLE_EDGE_UNIT_PROP(name) \ + static jlong jni_YGNodeStyleGet##name##JNI( \ + JNIEnv* env, jobject obj, jlong nativePointer, jint edge) { \ + return YogaValue::asJavaLong(YGNodeStyleGet##name( \ + _jlong2YGNodeRef(nativePointer), static_cast(edge))); \ + } \ + \ + static void jni_YGNodeStyleSet##name##JNI( \ + JNIEnv* env, \ + jobject obj, \ + jlong nativePointer, \ + jint edge, \ + jfloat value) { \ + YGNodeStyleSet##name( \ + _jlong2YGNodeRef(nativePointer), \ + static_cast(edge), \ + static_cast(value)); \ + } \ + \ + static void jni_YGNodeStyleSet##name##PercentJNI( \ + JNIEnv* env, \ + jobject obj, \ + jlong nativePointer, \ + jint edge, \ + jfloat value) { \ + YGNodeStyleSet##name##Percent( \ + _jlong2YGNodeRef(nativePointer), \ + static_cast(edge), \ + static_cast(value)); \ + } + YG_NODE_JNI_STYLE_PROP(jint, YGDirection, Direction); YG_NODE_JNI_STYLE_PROP(jint, YGFlexDirection, FlexDirection); YG_NODE_JNI_STYLE_PROP(jint, YGJustify, JustifyContent); @@ -73,6 +105,116 @@ YG_NODE_JNI_STYLE_UNIT_PROP_AUTO(Height); YG_NODE_JNI_STYLE_UNIT_PROP(MinHeight); YG_NODE_JNI_STYLE_UNIT_PROP(MaxHeight); +YG_NODE_JNI_STYLE_EDGE_UNIT_PROP(Position); + +static jlong jni_YGNodeStyleGetMarginJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer, + jint edge) { + YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); + if (!YGNodeEdges{yogaNodeRef}.has(YGNodeEdges::MARGIN)) { + return YogaValue::undefinedAsJavaLong(); + } + return YogaValue::asJavaLong( + YGNodeStyleGetMargin(yogaNodeRef, static_cast(edge))); +} + +static void jni_YGNodeStyleSetMarginJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer, + jint edge, + jfloat margin) { + YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); + YGNodeEdges{yogaNodeRef}.add(YGNodeEdges::MARGIN).setOn(yogaNodeRef); + YGNodeStyleSetMargin( + yogaNodeRef, static_cast(edge), static_cast(margin)); +} + +static void jni_YGNodeStyleSetMarginPercentJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer, + jint edge, + jfloat percent) { + YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); + YGNodeEdges{yogaNodeRef}.add(YGNodeEdges::MARGIN).setOn(yogaNodeRef); + YGNodeStyleSetMarginPercent( + yogaNodeRef, static_cast(edge), static_cast(percent)); +} + +static void jni_YGNodeStyleSetMarginAutoJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer, + jint edge) { + YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); + YGNodeEdges{yogaNodeRef}.add(YGNodeEdges::MARGIN).setOn(yogaNodeRef); + YGNodeStyleSetMarginAuto(yogaNodeRef, static_cast(edge)); +} + +static jlong jni_YGNodeStyleGetPaddingJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer, + jint edge) { + YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); + if (!YGNodeEdges{yogaNodeRef}.has(YGNodeEdges::PADDING)) { + return YogaValue::undefinedAsJavaLong(); + } + return YogaValue::asJavaLong( + YGNodeStyleGetPadding(yogaNodeRef, static_cast(edge))); +} + +static void jni_YGNodeStyleSetPaddingJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer, + jint edge, + jfloat padding) { + YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); + YGNodeEdges{yogaNodeRef}.add(YGNodeEdges::PADDING).setOn(yogaNodeRef); + YGNodeStyleSetPadding( + yogaNodeRef, static_cast(edge), static_cast(padding)); +} + +static void jni_YGNodeStyleSetPaddingPercentJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer, + jint edge, + jfloat percent) { + YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); + YGNodeEdges{yogaNodeRef}.add(YGNodeEdges::PADDING).setOn(yogaNodeRef); + YGNodeStyleSetPaddingPercent( + yogaNodeRef, static_cast(edge), static_cast(percent)); +} + +static jfloat jni_YGNodeStyleGetBorderJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer, + jint edge) { + YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); + if (!YGNodeEdges{yogaNodeRef}.has(YGNodeEdges::BORDER)) { + return (jfloat) YGUndefined; + } + return (jfloat) YGNodeStyleGetBorder(yogaNodeRef, static_cast(edge)); +} + +static void jni_YGNodeStyleSetBorderJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer, + jint edge, + jfloat border) { + YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); + YGNodeEdges{yogaNodeRef}.add(YGNodeEdges::BORDER).setOn(yogaNodeRef); + YGNodeStyleSetBorder( + yogaNodeRef, static_cast(edge), static_cast(border)); +} + // Yoga specific properties, not compatible with flexbox specification YG_NODE_JNI_STYLE_PROP(jfloat, float, AspectRatio); @@ -185,6 +327,42 @@ static JNINativeMethod methods[] = { {"jni_YGNodeStyleSetFlexBasisAutoJNI", "(J)V", (void*) jni_YGNodeStyleSetFlexBasisAutoJNI}, + {"jni_YGNodeStyleGetMarginJNI", + "(JI)J", + (void*) jni_YGNodeStyleGetMarginJNI}, + {"jni_YGNodeStyleSetMarginJNI", + "(JIF)V", + (void*) jni_YGNodeStyleSetMarginJNI}, + {"jni_YGNodeStyleSetMarginPercentJNI", + "(JIF)V", + (void*) jni_YGNodeStyleSetMarginPercentJNI}, + {"jni_YGNodeStyleSetMarginAutoJNI", + "(JI)V", + (void*) jni_YGNodeStyleSetMarginAutoJNI}, + {"jni_YGNodeStyleGetPaddingJNI", + "(JI)J", + (void*) jni_YGNodeStyleGetPaddingJNI}, + {"jni_YGNodeStyleSetPaddingJNI", + "(JIF)V", + (void*) jni_YGNodeStyleSetPaddingJNI}, + {"jni_YGNodeStyleSetPaddingPercentJNI", + "(JIF)V", + (void*) jni_YGNodeStyleSetPaddingPercentJNI}, + {"jni_YGNodeStyleGetBorderJNI", + "(JI)F", + (void*) jni_YGNodeStyleGetBorderJNI}, + {"jni_YGNodeStyleSetBorderJNI", + "(JIF)V", + (void*) jni_YGNodeStyleSetBorderJNI}, + {"jni_YGNodeStyleGetPositionJNI", + "(JI)J", + (void*) jni_YGNodeStyleGetPositionJNI}, + {"jni_YGNodeStyleSetPositionJNI", + "(JIF)V", + (void*) jni_YGNodeStyleSetPositionJNI}, + {"jni_YGNodeStyleSetPositionPercentJNI", + "(JIF)V", + (void*) jni_YGNodeStyleSetPositionPercentJNI}, {"jni_YGNodeStyleGetWidthJNI", "(J)J", (void*) jni_YGNodeStyleGetWidthJNI}, {"jni_YGNodeStyleSetWidthJNI", "(JF)V", (void*) jni_YGNodeStyleSetWidthJNI}, {"jni_YGNodeStyleSetWidthPercentJNI", From 34b68cf1d2b8de9efb84e4d8948e20bbbd1faa3f Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Tue, 8 Oct 2019 14:23:57 -0700 Subject: [PATCH 186/347] move YGNode related methods to vanilla jni Summary: This diff moves methods related to actions on YGNode like free node, reset node etc. to vanilla JNI Reviewed By: amir-shalem Differential Revision: D17668008 fbshipit-source-id: 03bfc51ec1fcf06569713400f984d551827e22fe --- java/com/facebook/yoga/YogaNative.java | 14 ++ java/com/facebook/yoga/YogaNodeJNIBase.java | 53 ++++++-- .../facebook/yoga/YogaNodeJNIFinalizer.java | 5 +- java/jni/YGJNIVanilla.cpp | 125 ++++++++++++++++++ 4 files changed, 183 insertions(+), 14 deletions(-) diff --git a/java/com/facebook/yoga/YogaNative.java b/java/com/facebook/yoga/YogaNative.java index 5f0391cb..9e21170c 100644 --- a/java/com/facebook/yoga/YogaNative.java +++ b/java/com/facebook/yoga/YogaNative.java @@ -114,6 +114,17 @@ public class YogaNative { // JNI methods that use Vanilla JNI + static native void jni_YGNodeFreeJNI(long nativePointer); + static native void jni_YGNodeResetJNI(long nativePointer); + static native void jni_YGNodeInsertChildJNI(long nativePointer, long childPointer, int index); + static native void jni_YGNodeSetIsReferenceBaselineJNI(long nativePointer, boolean isReferenceBaseline); + static native boolean jni_YGNodeIsReferenceBaselineJNI(long nativePointer); + static native void jni_YGNodeClearChildrenJNI(long nativePointer); + static native void jni_YGNodeRemoveChildJNI(long nativePointer, long childPointer); + static native void jni_YGNodeMarkDirtyJNI(long nativePointer); + static native void jni_YGNodeMarkDirtyAndPropogateToDescendantsJNI(long nativePointer); + static native boolean jni_YGNodeIsDirtyJNI(long nativePointer); + static native void jni_YGNodeCopyStyleJNI(long dstNativePointer, long srcNativePointer); static native int jni_YGNodeStyleGetDirectionJNI(long nativePointer); static native void jni_YGNodeStyleSetDirectionJNI(long nativePointer, int direction); static native int jni_YGNodeStyleGetFlexDirectionJNI(long nativePointer); @@ -178,4 +189,7 @@ public class YogaNative { static native void jni_YGNodeStyleSetMaxHeightPercentJNI(long nativePointer, float percent); static native float jni_YGNodeStyleGetAspectRatioJNI(long nativePointer); static native void jni_YGNodeStyleSetAspectRatioJNI(long nativePointer, float aspectRatio); + static native void jni_YGNodePrintJNI(long nativePointer); + static native void jni_YGNodeSetStyleInputsJNI(long nativePointer, float[] styleInputsArray, int size); + static native long jni_YGNodeCloneJNI(long nativePointer); } diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index 744c5979..a647dcb1 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -46,7 +46,7 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { private boolean mHasNewLayout = true; - private boolean useVanillaJNI = false; + protected boolean useVanillaJNI = false; private YogaNodeJNIBase(long nativePointer) { if (nativePointer == 0) { @@ -72,7 +72,10 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { mHasNewLayout = true; mLayoutDirection = 0; - YogaNative.jni_YGNodeReset(mNativePointer); + if (useVanillaJNI) + YogaNative.jni_YGNodeResetJNI(mNativePointer); + else + YogaNative.jni_YGNodeReset(mNativePointer); } public int getChildCount() { @@ -97,22 +100,28 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { } mChildren.add(i, child); child.mOwner = this; - YogaNative.jni_YGNodeInsertChild(mNativePointer, child.mNativePointer, i); + if (useVanillaJNI) + YogaNative.jni_YGNodeInsertChildJNI(mNativePointer, child.mNativePointer, i); + else + YogaNative.jni_YGNodeInsertChild(mNativePointer, child.mNativePointer, i); } public void setIsReferenceBaseline(boolean isReferenceBaseline) { - YogaNative.jni_YGNodeSetIsReferenceBaseline(mNativePointer, isReferenceBaseline); + if (useVanillaJNI) + YogaNative.jni_YGNodeSetIsReferenceBaselineJNI(mNativePointer, isReferenceBaseline); + else + YogaNative.jni_YGNodeSetIsReferenceBaseline(mNativePointer, isReferenceBaseline); } public boolean isReferenceBaseline() { - return YogaNative.jni_YGNodeIsReferenceBaseline(mNativePointer); + return useVanillaJNI ? YogaNative.jni_YGNodeIsReferenceBaselineJNI(mNativePointer) : YogaNative.jni_YGNodeIsReferenceBaseline(mNativePointer); } @Override public YogaNodeJNIBase cloneWithoutChildren() { try { YogaNodeJNIBase clonedYogaNode = (YogaNodeJNIBase) super.clone(); - long clonedNativePointer = YogaNative.jni_YGNodeClone(mNativePointer); + long clonedNativePointer = useVanillaJNI ? YogaNative.jni_YGNodeCloneJNI(mNativePointer) : YogaNative.jni_YGNodeClone(mNativePointer);; clonedYogaNode.mOwner = null; clonedYogaNode.mNativePointer = clonedNativePointer; clonedYogaNode.clearChildren(); @@ -125,7 +134,10 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { private void clearChildren() { mChildren = null; - YogaNative.jni_YGNodeClearChildren(mNativePointer); + if (useVanillaJNI) + YogaNative.jni_YGNodeClearChildrenJNI(mNativePointer); + else + YogaNative.jni_YGNodeClearChildren(mNativePointer); } public YogaNodeJNIBase removeChildAt(int i) { @@ -135,7 +147,10 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { } final YogaNodeJNIBase child = mChildren.remove(i); child.mOwner = null; - YogaNative.jni_YGNodeRemoveChild(mNativePointer, child.mNativePointer); + if (useVanillaJNI) + YogaNative.jni_YGNodeRemoveChildJNI(mNativePointer, child.mNativePointer); + else + YogaNative.jni_YGNodeRemoveChild(mNativePointer, child.mNativePointer); return child; } @@ -186,20 +201,29 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { } public void dirty() { - YogaNative.jni_YGNodeMarkDirty(mNativePointer); + if (useVanillaJNI) + YogaNative.jni_YGNodeMarkDirtyJNI(mNativePointer); + else + YogaNative.jni_YGNodeMarkDirty(mNativePointer); } public void dirtyAllDescendants() { - YogaNative.jni_YGNodeMarkDirtyAndPropogateToDescendants(mNativePointer); + if (useVanillaJNI) + YogaNative.jni_YGNodeMarkDirtyAndPropogateToDescendantsJNI(mNativePointer); + else + YogaNative.jni_YGNodeMarkDirtyAndPropogateToDescendants(mNativePointer); } public boolean isDirty() { - return YogaNative.jni_YGNodeIsDirty(mNativePointer); + return useVanillaJNI ? YogaNative.jni_YGNodeIsDirtyJNI(mNativePointer) : YogaNative.jni_YGNodeIsDirty(mNativePointer); } @Override public void copyStyle(YogaNode srcNode) { - YogaNative.jni_YGNodeCopyStyle(mNativePointer, ((YogaNodeJNIBase) srcNode).mNativePointer); + if (useVanillaJNI) + YogaNative.jni_YGNodeCopyStyleJNI(mNativePointer, ((YogaNodeJNIBase) srcNode).mNativePointer); + else + YogaNative.jni_YGNodeCopyStyle(mNativePointer, ((YogaNodeJNIBase) srcNode).mNativePointer); } public YogaDirection getStyleDirection() { @@ -633,7 +657,10 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { * layout of the tree rooted at this node. */ public void print() { - YogaNative.jni_YGNodePrint(mNativePointer); + if (useVanillaJNI) + YogaNative.jni_YGNodePrintJNI(mNativePointer); + else + YogaNative.jni_YGNodePrint(mNativePointer); } public void setStyleInputs(float[] styleInputsArray, int size) { diff --git a/java/com/facebook/yoga/YogaNodeJNIFinalizer.java b/java/com/facebook/yoga/YogaNodeJNIFinalizer.java index cee7b0e8..41986c25 100644 --- a/java/com/facebook/yoga/YogaNodeJNIFinalizer.java +++ b/java/com/facebook/yoga/YogaNodeJNIFinalizer.java @@ -28,7 +28,10 @@ public class YogaNodeJNIFinalizer extends YogaNodeJNIBase { if (mNativePointer != 0) { long nativePointer = mNativePointer; mNativePointer = 0; - YogaNative.jni_YGNodeFree(nativePointer); + if (useVanillaJNI) + YogaNative.jni_YGNodeFreeJNI(nativePointer); + else + YogaNative.jni_YGNodeFree(nativePointer); } } } diff --git a/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp index 395d4526..5308bf8a 100644 --- a/java/jni/YGJNIVanilla.cpp +++ b/java/jni/YGJNIVanilla.cpp @@ -14,6 +14,94 @@ static inline YGNodeRef _jlong2YGNodeRef(jlong addr) { return reinterpret_cast(static_cast(addr)); } +static void jni_YGNodeFreeJNI(JNIEnv* env, jobject obj, jlong nativePointer) { + if (nativePointer == 0) { + return; + } + const YGNodeRef node = _jlong2YGNodeRef(nativePointer); + YGNodeFree(node); +} + +static void jni_YGNodeResetJNI(JNIEnv* env, jobject obj, jlong nativePointer) { + const YGNodeRef node = _jlong2YGNodeRef(nativePointer); + void* context = node->getContext(); + YGNodeReset(node); + node->setContext(context); +} + +static void jni_YGNodeInsertChildJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer, + jlong childPointer, + jint index) { + YGNodeInsertChild( + _jlong2YGNodeRef(nativePointer), _jlong2YGNodeRef(childPointer), index); +} + +static void jni_YGNodeSetIsReferenceBaselineJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer, + jboolean isReferenceBaseline) { + YGNodeSetIsReferenceBaseline( + _jlong2YGNodeRef(nativePointer), isReferenceBaseline); +} + +static jboolean jni_YGNodeIsReferenceBaselineJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer) { + return YGNodeIsReferenceBaseline(_jlong2YGNodeRef(nativePointer)); +} + +static void jni_YGNodeClearChildrenJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer) { + const YGNodeRef node = _jlong2YGNodeRef(nativePointer); + node->clearChildren(); +} + +static void jni_YGNodeRemoveChildJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer, + jlong childPointer) { + YGNodeRemoveChild( + _jlong2YGNodeRef(nativePointer), _jlong2YGNodeRef(childPointer)); +} + +static void jni_YGNodeMarkDirtyJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer) { + YGNodeMarkDirty(_jlong2YGNodeRef(nativePointer)); +} + +static void jni_YGNodeMarkDirtyAndPropogateToDescendantsJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer) { + YGNodeMarkDirtyAndPropogateToDescendants(_jlong2YGNodeRef(nativePointer)); +} + +static jboolean jni_YGNodeIsDirtyJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer) { + return (jboolean) _jlong2YGNodeRef(nativePointer)->isDirty(); +} + +static void jni_YGNodeCopyStyleJNI( + JNIEnv* env, + jobject obj, + jlong dstNativePointer, + jlong srcNativePointer) { + YGNodeCopyStyle( + _jlong2YGNodeRef(dstNativePointer), _jlong2YGNodeRef(srcNativePointer)); +} + #define YG_NODE_JNI_STYLE_PROP(javatype, type, name) \ static javatype jni_YGNodeStyleGet##name##JNI( \ JNIEnv* env, jobject obj, jlong nativePointer) { \ @@ -215,6 +303,24 @@ static void jni_YGNodeStyleSetBorderJNI( yogaNodeRef, static_cast(edge), static_cast(border)); } +static void jni_YGNodePrintJNI(JNIEnv* env, jobject obj, jlong nativePointer) { +#ifdef DEBUG + const YGNodeRef node = _jlong2YGNodeRef(nativePointer); + YGNodePrint( + node, + (YGPrintOptions)( + YGPrintOptionsStyle | YGPrintOptionsLayout | YGPrintOptionsChildren)); +#endif +} + +static jlong jni_YGNodeCloneJNI(JNIEnv* env, jobject obj, jlong nativePointer) { + auto node = _jlong2YGNodeRef(nativePointer); + const YGNodeRef clonedYogaNode = YGNodeClone(node); + clonedYogaNode->setContext(node->getContext()); + + return reinterpret_cast(clonedYogaNode); +} + // Yoga specific properties, not compatible with flexbox specification YG_NODE_JNI_STYLE_PROP(jfloat, float, AspectRatio); @@ -241,6 +347,23 @@ void registerNativeMethods( } static JNINativeMethod methods[] = { + {"jni_YGNodeFreeJNI", "(J)V", (void*) jni_YGNodeFreeJNI}, + {"jni_YGNodeResetJNI", "(J)V", (void*) jni_YGNodeResetJNI}, + {"jni_YGNodeInsertChildJNI", "(JJI)V", (void*) jni_YGNodeInsertChildJNI}, + {"jni_YGNodeSetIsReferenceBaselineJNI", + "(JZ)V", + (void*) jni_YGNodeSetIsReferenceBaselineJNI}, + {"jni_YGNodeIsReferenceBaselineJNI", + "(J)Z", + (void*) jni_YGNodeIsReferenceBaselineJNI}, + {"jni_YGNodeClearChildrenJNI", "(J)V", (void*) jni_YGNodeClearChildrenJNI}, + {"jni_YGNodeRemoveChildJNI", "(JJ)V", (void*) jni_YGNodeRemoveChildJNI}, + {"jni_YGNodeMarkDirtyJNI", "(J)V", (void*) jni_YGNodeMarkDirtyJNI}, + {"jni_YGNodeMarkDirtyAndPropogateToDescendantsJNI", + "(J)V", + (void*) jni_YGNodeMarkDirtyAndPropogateToDescendantsJNI}, + {"jni_YGNodeIsDirtyJNI", "(J)Z", (void*) jni_YGNodeIsDirtyJNI}, + {"jni_YGNodeCopyStyleJNI", "(JJ)V", (void*) jni_YGNodeCopyStyleJNI}, {"jni_YGNodeStyleGetDirectionJNI", "(J)I", (void*) jni_YGNodeStyleGetDirectionJNI}, @@ -425,6 +548,8 @@ static JNINativeMethod methods[] = { {"jni_YGNodeStyleSetAspectRatioJNI", "(JF)V", (void*) jni_YGNodeStyleSetAspectRatioJNI}, + {"jni_YGNodePrintJNI", "(J)V", (void*) jni_YGNodePrintJNI}, + {"jni_YGNodeCloneJNI", "(J)J", (void*) jni_YGNodeCloneJNI}, }; void YGJNIVanilla::registerNatives(JNIEnv* env) { From ee73f556b491fd2ee7d0ce58c114459c46a8317d Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Tue, 8 Oct 2019 14:23:57 -0700 Subject: [PATCH 187/347] move config jni methods to vanilla jni Summary: Move yoga node config related jni methods to vanilla jni Reviewed By: amir-shalem Differential Revision: D17684821 fbshipit-source-id: 31a667b3ad67501aaef83a132971e4e0826cacd4 --- java/com/facebook/yoga/YogaConfig.java | 2 - java/com/facebook/yoga/YogaConfigFactory.java | 4 + java/com/facebook/yoga/YogaConfigJNIBase.java | 43 ++++++--- .../facebook/yoga/YogaConfigJNIFinalizer.java | 4 + java/com/facebook/yoga/YogaNative.java | 11 +++ java/jni/YGJNIVanilla.cpp | 93 +++++++++++++++++++ 6 files changed, 143 insertions(+), 14 deletions(-) diff --git a/java/com/facebook/yoga/YogaConfig.java b/java/com/facebook/yoga/YogaConfig.java index 501a3cca..d44aec29 100644 --- a/java/com/facebook/yoga/YogaConfig.java +++ b/java/com/facebook/yoga/YogaConfig.java @@ -38,7 +38,5 @@ public abstract class YogaConfig { abstract long getNativePointer(); - public abstract void setUseVanillaJNI(boolean useVanillaJNI); - public abstract boolean useVanillaJNI(); } diff --git a/java/com/facebook/yoga/YogaConfigFactory.java b/java/com/facebook/yoga/YogaConfigFactory.java index fca4dc90..e7dcedd2 100644 --- a/java/com/facebook/yoga/YogaConfigFactory.java +++ b/java/com/facebook/yoga/YogaConfigFactory.java @@ -4,4 +4,8 @@ public abstract class YogaConfigFactory { public static YogaConfig create() { return new YogaConfigJNIFinalizer(); } + + public static YogaConfig create(boolean useVanillaJNI) { + return new YogaConfigJNIFinalizer(useVanillaJNI); + } } diff --git a/java/com/facebook/yoga/YogaConfigJNIBase.java b/java/com/facebook/yoga/YogaConfigJNIBase.java index 3fbd6646..1f3ab04c 100644 --- a/java/com/facebook/yoga/YogaConfigJNIBase.java +++ b/java/com/facebook/yoga/YogaConfigJNIBase.java @@ -23,20 +23,37 @@ public abstract class YogaConfigJNIBase extends YogaConfig { this(YogaNative.jni_YGConfigNew()); } + YogaConfigJNIBase(boolean useVanillaJNI) { + this(useVanillaJNI ? YogaNative.jni_YGConfigNewJNI() : YogaNative.jni_YGConfigNew()); + this.useVanillaJNI = useVanillaJNI; + } + public void setExperimentalFeatureEnabled(YogaExperimentalFeature feature, boolean enabled) { - YogaNative.jni_YGConfigSetExperimentalFeatureEnabled(mNativePointer, feature.intValue(), enabled); + if (useVanillaJNI) + YogaNative.jni_YGConfigSetExperimentalFeatureEnabledJNI(mNativePointer, feature.intValue(), enabled); + else + YogaNative.jni_YGConfigSetExperimentalFeatureEnabled(mNativePointer, feature.intValue(), enabled); } public void setUseWebDefaults(boolean useWebDefaults) { - YogaNative.jni_YGConfigSetUseWebDefaults(mNativePointer, useWebDefaults); + if (useVanillaJNI) + YogaNative.jni_YGConfigSetUseWebDefaultsJNI(mNativePointer, useWebDefaults); + else + YogaNative.jni_YGConfigSetUseWebDefaults(mNativePointer, useWebDefaults); } public void setPrintTreeFlag(boolean enable) { - YogaNative.jni_YGConfigSetPrintTreeFlag(mNativePointer, enable); + if (useVanillaJNI) + YogaNative.jni_YGConfigSetPrintTreeFlagJNI(mNativePointer, enable); + else + YogaNative.jni_YGConfigSetPrintTreeFlag(mNativePointer, enable); } public void setPointScaleFactor(float pixelsInPoint) { - YogaNative.jni_YGConfigSetPointScaleFactor(mNativePointer, pixelsInPoint); + if (useVanillaJNI) + YogaNative.jni_YGConfigSetPointScaleFactorJNI(mNativePointer, pixelsInPoint); + else + YogaNative.jni_YGConfigSetPointScaleFactor(mNativePointer, pixelsInPoint); } /** @@ -45,7 +62,10 @@ public abstract class YogaConfigJNIBase extends YogaConfig { * Because this was such a long-standing bug we must allow legacy users to switch back to this behaviour. */ public void setUseLegacyStretchBehaviour(boolean useLegacyStretchBehaviour) { - YogaNative.jni_YGConfigSetUseLegacyStretchBehaviour(mNativePointer, useLegacyStretchBehaviour); + if (useVanillaJNI) + YogaNative.jni_YGConfigSetUseLegacyStretchBehaviourJNI(mNativePointer, useLegacyStretchBehaviour); + else + YogaNative.jni_YGConfigSetUseLegacyStretchBehaviour(mNativePointer, useLegacyStretchBehaviour); } /** @@ -55,8 +75,12 @@ public abstract class YogaConfigJNIBase extends YogaConfig { */ public void setShouldDiffLayoutWithoutLegacyStretchBehaviour( boolean shouldDiffLayoutWithoutLegacyStretchBehaviour) { - YogaNative.jni_YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviour( - mNativePointer, shouldDiffLayoutWithoutLegacyStretchBehaviour); + if (useVanillaJNI) + YogaNative.jni_YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviourJNI( + mNativePointer, shouldDiffLayoutWithoutLegacyStretchBehaviour); + else + YogaNative.jni_YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviour( + mNativePointer, shouldDiffLayoutWithoutLegacyStretchBehaviour); } public void setLogger(YogaLogger logger) { @@ -72,11 +96,6 @@ public abstract class YogaConfigJNIBase extends YogaConfig { return mNativePointer; } - @Override - public void setUseVanillaJNI(boolean useVanillaJNI) { - this.useVanillaJNI = useVanillaJNI; - } - @Override public boolean useVanillaJNI() { return this.useVanillaJNI; diff --git a/java/com/facebook/yoga/YogaConfigJNIFinalizer.java b/java/com/facebook/yoga/YogaConfigJNIFinalizer.java index aa7fb364..1d6fed64 100644 --- a/java/com/facebook/yoga/YogaConfigJNIFinalizer.java +++ b/java/com/facebook/yoga/YogaConfigJNIFinalizer.java @@ -11,6 +11,10 @@ public class YogaConfigJNIFinalizer extends YogaConfigJNIBase { super(); } + public YogaConfigJNIFinalizer(boolean useVanillaJNI) { + super(useVanillaJNI); + } + @Override protected void finalize() throws Throwable { try { diff --git a/java/com/facebook/yoga/YogaNative.java b/java/com/facebook/yoga/YogaNative.java index 9e21170c..b951fa3a 100644 --- a/java/com/facebook/yoga/YogaNative.java +++ b/java/com/facebook/yoga/YogaNative.java @@ -114,6 +114,17 @@ public class YogaNative { // JNI methods that use Vanilla JNI + // YGConfig related + static native long jni_YGConfigNewJNI(); +// static native void jni_YGConfigFreeJNI(long nativePointer); + static native void jni_YGConfigSetExperimentalFeatureEnabledJNI(long nativePointer, int feature, boolean enabled); + static native void jni_YGConfigSetUseWebDefaultsJNI(long nativePointer, boolean useWebDefaults); + static native void jni_YGConfigSetPrintTreeFlagJNI(long nativePointer, boolean enable); + static native void jni_YGConfigSetPointScaleFactorJNI(long nativePointer, float pixelsInPoint); + static native void jni_YGConfigSetUseLegacyStretchBehaviourJNI(long nativePointer, boolean useLegacyStretchBehaviour); + static native void jni_YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviourJNI(long nativePointer, boolean shouldDiffLayoutWithoutLegacyStretchBehaviour); +// static native void jni_YGConfigSetLoggerJNI(long nativePointer, Object logger); + static native void jni_YGNodeFreeJNI(long nativePointer); static native void jni_YGNodeResetJNI(long nativePointer); static native void jni_YGNodeInsertChildJNI(long nativePointer, long childPointer, int index); diff --git a/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp index 5308bf8a..9c50bce5 100644 --- a/java/jni/YGJNIVanilla.cpp +++ b/java/jni/YGJNIVanilla.cpp @@ -14,6 +14,78 @@ static inline YGNodeRef _jlong2YGNodeRef(jlong addr) { return reinterpret_cast(static_cast(addr)); } +static inline YGConfigRef _jlong2YGConfigRef(jlong addr) { + return reinterpret_cast(static_cast(addr)); +} + +static jlong jni_YGConfigNewJNI(JNIEnv* env, jobject obj) { + return reinterpret_cast(YGConfigNew()); +} + +// void jni_YGConfigFreeJNI(JNIEnv* env, jobject obj, jlong nativePointer) { +// const YGConfigRef config = _jlong2YGConfigRef(nativePointer); +// // unique_ptr will destruct the underlying global_ref, if present. +// auto context = std::unique_ptr>{ +// static_cast*>(YGConfigGetContext(config))}; +// YGConfigFree(config); +// } + +static void jni_YGConfigSetExperimentalFeatureEnabledJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer, + jint feature, + jboolean enabled) { + const YGConfigRef config = _jlong2YGConfigRef(nativePointer); + YGConfigSetExperimentalFeatureEnabled( + config, static_cast(feature), enabled); +} + +static void jni_YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviourJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer, + jboolean enabled) { + const YGConfigRef config = _jlong2YGConfigRef(nativePointer); + YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviour(config, enabled); +} + +static void jni_YGConfigSetUseWebDefaultsJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer, + jboolean useWebDefaults) { + const YGConfigRef config = _jlong2YGConfigRef(nativePointer); + YGConfigSetUseWebDefaults(config, useWebDefaults); +} + +static void jni_YGConfigSetPrintTreeFlagJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer, + jboolean enable) { + const YGConfigRef config = _jlong2YGConfigRef(nativePointer); + YGConfigSetPrintTreeFlag(config, enable); +} + +static void jni_YGConfigSetPointScaleFactorJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer, + jfloat pixelsInPoint) { + const YGConfigRef config = _jlong2YGConfigRef(nativePointer); + YGConfigSetPointScaleFactor(config, pixelsInPoint); +} + +static void jni_YGConfigSetUseLegacyStretchBehaviourJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer, + jboolean useLegacyStretchBehaviour) { + const YGConfigRef config = _jlong2YGConfigRef(nativePointer); + YGConfigSetUseLegacyStretchBehaviour(config, useLegacyStretchBehaviour); +} + static void jni_YGNodeFreeJNI(JNIEnv* env, jobject obj, jlong nativePointer) { if (nativePointer == 0) { return; @@ -347,6 +419,27 @@ void registerNativeMethods( } static JNINativeMethod methods[] = { + {"jni_YGConfigNewJNI", "()J", (void*) jni_YGConfigNewJNI}, + // {"jni_YGConfigFreeJNI", "(J)V", (void*) jni_YGConfigFreeJNI}, + {"jni_YGConfigSetExperimentalFeatureEnabledJNI", + "(JIZ)V", + (void*) jni_YGConfigSetExperimentalFeatureEnabledJNI}, + {"jni_YGConfigSetUseWebDefaultsJNI", + "(JZ)V", + (void*) jni_YGConfigSetUseWebDefaultsJNI}, + {"jni_YGConfigSetPrintTreeFlagJNI", + "(JZ)V", + (void*) jni_YGConfigSetPrintTreeFlagJNI}, + {"jni_YGConfigSetPointScaleFactorJNI", + "(JF)V", + (void*) jni_YGConfigSetPointScaleFactorJNI}, + {"jni_YGConfigSetUseLegacyStretchBehaviourJNI", + "(JZ)V", + (void*) jni_YGConfigSetUseLegacyStretchBehaviourJNI}, + {"jni_YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviourJNI", + "(JZ)V", + (void*) jni_YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviourJNI}, + // {"jni_YGConfigSetLoggerJNI", "(JO)V", (void*) jni_YGConfigSetLoggerJNI}, {"jni_YGNodeFreeJNI", "(J)V", (void*) jni_YGNodeFreeJNI}, {"jni_YGNodeResetJNI", "(J)V", (void*) jni_YGNodeResetJNI}, {"jni_YGNodeInsertChildJNI", "(JJI)V", (void*) jni_YGNodeInsertChildJNI}, From 7c2683fe521ece95038cfe5c126c406d34d7ae1e Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Tue, 8 Oct 2019 14:23:57 -0700 Subject: [PATCH 188/347] move setStyleInputs to vanilla jni (YogaStyleProperties Part 5) Summary: Move Yoga style properties to vanilla JNI under a flag. Reviewed By: amir-shalem Differential Revision: D17686117 fbshipit-source-id: e79bee1188c24e301b23416486b10f613434eebc --- java/com/facebook/yoga/YogaNodeJNIBase.java | 5 +- java/jni/YGJNI.cpp | 211 -------------------- java/jni/YGJNI.h | 211 ++++++++++++++++++++ java/jni/YGJNIVanilla.cpp | 14 ++ 4 files changed, 229 insertions(+), 212 deletions(-) diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index a647dcb1..3712e8ce 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -664,7 +664,10 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { } public void setStyleInputs(float[] styleInputsArray, int size) { - YogaNative.jni_YGNodeSetStyleInputs(mNativePointer, styleInputsArray, size); + if (useVanillaJNI) + YogaNative.jni_YGNodeSetStyleInputsJNI(mNativePointer, styleInputsArray, size); + else + YogaNative.jni_YGNodeSetStyleInputs(mNativePointer, styleInputsArray, size); } /** diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp index 595fe204..bfb0670e 100644 --- a/java/jni/YGJNI.cpp +++ b/java/jni/YGJNI.cpp @@ -22,49 +22,6 @@ using namespace facebook::jni; using namespace std; using facebook::yoga::detail::Log; -enum YGStyleInput { - LayoutDirection, - FlexDirection, - Flex, - FlexGrow, - FlexShrink, - FlexBasis, - FlexBasisPercent, - FlexBasisAuto, - FlexWrap, - Width, - WidthPercent, - WidthAuto, - MinWidth, - MinWidthPercent, - MaxWidth, - MaxWidthPercent, - Height, - HeightPercent, - HeightAuto, - MinHeight, - MinHeightPercent, - MaxHeight, - MaxHeightPercent, - JustifyContent, - AlignItems, - AlignSelf, - AlignContent, - PositionType, - AspectRatio, - Overflow, - Display, - Margin, - MarginPercent, - MarginAuto, - Padding, - PaddingPercent, - Border, - Position, - PositionPercent, - IsReferenceBaseline, -}; - const short int LAYOUT_EDGE_SET_FLAG_INDEX = 0; const short int LAYOUT_WIDTH_INDEX = 1; const short int LAYOUT_HEIGHT_INDEX = 2; @@ -589,174 +546,6 @@ void jni_YGConfigSetLogger( } } -static void YGNodeSetStyleInputs( - const YGNodeRef node, - float* styleInputs, - int size) { - const auto end = styleInputs + size; - auto edgesSet = YGNodeEdges{node}; - while (styleInputs < end) { - auto styleInputKey = static_cast((int) *styleInputs++); - switch (styleInputKey) { - case LayoutDirection: - YGNodeStyleSetDirection(node, static_cast(*styleInputs++)); - break; - case FlexDirection: - YGNodeStyleSetFlexDirection( - node, static_cast(*styleInputs++)); - break; - case Flex: - YGNodeStyleSetFlex(node, *styleInputs++); - break; - case FlexGrow: - YGNodeStyleSetFlexGrow(node, *styleInputs++); - break; - case FlexShrink: - YGNodeStyleSetFlexShrink(node, *styleInputs++); - break; - case FlexBasis: - YGNodeStyleSetFlexBasis(node, *styleInputs++); - break; - case FlexBasisPercent: - YGNodeStyleSetFlexBasisPercent(node, *styleInputs++); - break; - case FlexBasisAuto: - YGNodeStyleSetFlexBasisAuto(node); - break; - case FlexWrap: - YGNodeStyleSetFlexWrap(node, static_cast(*styleInputs++)); - break; - case Width: - YGNodeStyleSetWidth(node, *styleInputs++); - break; - case WidthPercent: - YGNodeStyleSetWidthPercent(node, *styleInputs++); - break; - case WidthAuto: - YGNodeStyleSetWidthAuto(node); - break; - case MinWidth: - YGNodeStyleSetMinWidth(node, *styleInputs++); - break; - case MinWidthPercent: - YGNodeStyleSetMinWidthPercent(node, *styleInputs++); - break; - case MaxWidth: - YGNodeStyleSetMaxWidth(node, *styleInputs++); - break; - case MaxWidthPercent: - YGNodeStyleSetMaxWidthPercent(node, *styleInputs++); - break; - case Height: - YGNodeStyleSetHeight(node, *styleInputs++); - break; - case HeightPercent: - YGNodeStyleSetHeightPercent(node, *styleInputs++); - break; - case HeightAuto: - YGNodeStyleSetHeightAuto(node); - break; - case MinHeight: - YGNodeStyleSetMinHeight(node, *styleInputs++); - break; - case MinHeightPercent: - YGNodeStyleSetMinHeightPercent(node, *styleInputs++); - break; - case MaxHeight: - YGNodeStyleSetMaxHeight(node, *styleInputs++); - break; - case MaxHeightPercent: - YGNodeStyleSetMaxHeightPercent(node, *styleInputs++); - break; - case JustifyContent: - YGNodeStyleSetJustifyContent( - node, static_cast(*styleInputs++)); - break; - case AlignItems: - YGNodeStyleSetAlignItems(node, static_cast(*styleInputs++)); - break; - case AlignSelf: - YGNodeStyleSetAlignSelf(node, static_cast(*styleInputs++)); - break; - case AlignContent: - YGNodeStyleSetAlignContent(node, static_cast(*styleInputs++)); - break; - case PositionType: - YGNodeStyleSetPositionType( - node, static_cast(*styleInputs++)); - break; - case AspectRatio: - YGNodeStyleSetAspectRatio(node, *styleInputs++); - break; - case Overflow: - YGNodeStyleSetOverflow(node, static_cast(*styleInputs++)); - break; - case Display: - YGNodeStyleSetDisplay(node, static_cast(*styleInputs++)); - break; - case Margin: { - auto edge = static_cast(*styleInputs++); - float marginValue = *styleInputs++; - edgesSet.add(YGNodeEdges::MARGIN); - YGNodeStyleSetMargin(node, edge, marginValue); - break; - } - case MarginPercent: { - auto edge = static_cast(*styleInputs++); - float marginPercent = *styleInputs++; - edgesSet.add(YGNodeEdges::MARGIN); - YGNodeStyleSetMarginPercent(node, edge, marginPercent); - break; - } - case MarginAuto: { - edgesSet.add(YGNodeEdges::MARGIN); - YGNodeStyleSetMarginAuto(node, static_cast(*styleInputs++)); - break; - } - case Padding: { - auto edge = static_cast(*styleInputs++); - float paddingValue = *styleInputs++; - edgesSet.add(YGNodeEdges::PADDING); - YGNodeStyleSetPadding(node, edge, paddingValue); - break; - } - case PaddingPercent: { - auto edge = static_cast(*styleInputs++); - float paddingPercent = *styleInputs++; - edgesSet.add(YGNodeEdges::PADDING); - YGNodeStyleSetPaddingPercent(node, edge, paddingPercent); - break; - } - case Border: { - auto edge = static_cast(*styleInputs++); - float borderValue = *styleInputs++; - edgesSet.add(YGNodeEdges::BORDER); - YGNodeStyleSetBorder(node, edge, borderValue); - break; - } - case Position: { - auto edge = static_cast(*styleInputs++); - float positionValue = *styleInputs++; - YGNodeStyleSetPosition(node, edge, positionValue); - break; - } - case PositionPercent: { - auto edge = static_cast(*styleInputs++); - float positionPercent = *styleInputs++; - YGNodeStyleSetPositionPercent(node, edge, positionPercent); - break; - } - case IsReferenceBaseline: { - YGNodeSetIsReferenceBaseline(node, *styleInputs++ == 1 ? true : false); - break; - } - default: - break; - } - } - edgesSet.setOn(node); -} - void jni_YGNodeSetStyleInputs( alias_ref, jlong nativePointer, diff --git a/java/jni/YGJNI.h b/java/jni/YGJNI.h index f0c489c1..926b6ca2 100644 --- a/java/jni/YGJNI.h +++ b/java/jni/YGJNI.h @@ -4,6 +4,49 @@ * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. */ +enum YGStyleInput { + LayoutDirection, + FlexDirection, + Flex, + FlexGrow, + FlexShrink, + FlexBasis, + FlexBasisPercent, + FlexBasisAuto, + FlexWrap, + Width, + WidthPercent, + WidthAuto, + MinWidth, + MinWidthPercent, + MaxWidth, + MaxWidthPercent, + Height, + HeightPercent, + HeightAuto, + MinHeight, + MinHeightPercent, + MaxHeight, + MaxHeightPercent, + JustifyContent, + AlignItems, + AlignSelf, + AlignContent, + PositionType, + AspectRatio, + Overflow, + Display, + Margin, + MarginPercent, + MarginAuto, + Padding, + PaddingPercent, + Border, + Position, + PositionPercent, + IsReferenceBaseline, +}; + namespace { union YGNodeContext { @@ -56,3 +99,171 @@ struct YogaValue { } }; } // namespace + +static void YGNodeSetStyleInputs( + const YGNodeRef node, + float* styleInputs, + int size) { + const auto end = styleInputs + size; + auto edgesSet = YGNodeEdges{node}; + while (styleInputs < end) { + auto styleInputKey = static_cast((int) *styleInputs++); + switch (styleInputKey) { + case LayoutDirection: + YGNodeStyleSetDirection(node, static_cast(*styleInputs++)); + break; + case FlexDirection: + YGNodeStyleSetFlexDirection( + node, static_cast(*styleInputs++)); + break; + case Flex: + YGNodeStyleSetFlex(node, *styleInputs++); + break; + case FlexGrow: + YGNodeStyleSetFlexGrow(node, *styleInputs++); + break; + case FlexShrink: + YGNodeStyleSetFlexShrink(node, *styleInputs++); + break; + case FlexBasis: + YGNodeStyleSetFlexBasis(node, *styleInputs++); + break; + case FlexBasisPercent: + YGNodeStyleSetFlexBasisPercent(node, *styleInputs++); + break; + case FlexBasisAuto: + YGNodeStyleSetFlexBasisAuto(node); + break; + case FlexWrap: + YGNodeStyleSetFlexWrap(node, static_cast(*styleInputs++)); + break; + case Width: + YGNodeStyleSetWidth(node, *styleInputs++); + break; + case WidthPercent: + YGNodeStyleSetWidthPercent(node, *styleInputs++); + break; + case WidthAuto: + YGNodeStyleSetWidthAuto(node); + break; + case MinWidth: + YGNodeStyleSetMinWidth(node, *styleInputs++); + break; + case MinWidthPercent: + YGNodeStyleSetMinWidthPercent(node, *styleInputs++); + break; + case MaxWidth: + YGNodeStyleSetMaxWidth(node, *styleInputs++); + break; + case MaxWidthPercent: + YGNodeStyleSetMaxWidthPercent(node, *styleInputs++); + break; + case Height: + YGNodeStyleSetHeight(node, *styleInputs++); + break; + case HeightPercent: + YGNodeStyleSetHeightPercent(node, *styleInputs++); + break; + case HeightAuto: + YGNodeStyleSetHeightAuto(node); + break; + case MinHeight: + YGNodeStyleSetMinHeight(node, *styleInputs++); + break; + case MinHeightPercent: + YGNodeStyleSetMinHeightPercent(node, *styleInputs++); + break; + case MaxHeight: + YGNodeStyleSetMaxHeight(node, *styleInputs++); + break; + case MaxHeightPercent: + YGNodeStyleSetMaxHeightPercent(node, *styleInputs++); + break; + case JustifyContent: + YGNodeStyleSetJustifyContent( + node, static_cast(*styleInputs++)); + break; + case AlignItems: + YGNodeStyleSetAlignItems(node, static_cast(*styleInputs++)); + break; + case AlignSelf: + YGNodeStyleSetAlignSelf(node, static_cast(*styleInputs++)); + break; + case AlignContent: + YGNodeStyleSetAlignContent(node, static_cast(*styleInputs++)); + break; + case PositionType: + YGNodeStyleSetPositionType( + node, static_cast(*styleInputs++)); + break; + case AspectRatio: + YGNodeStyleSetAspectRatio(node, *styleInputs++); + break; + case Overflow: + YGNodeStyleSetOverflow(node, static_cast(*styleInputs++)); + break; + case Display: + YGNodeStyleSetDisplay(node, static_cast(*styleInputs++)); + break; + case Margin: { + auto edge = static_cast(*styleInputs++); + float marginValue = *styleInputs++; + edgesSet.add(YGNodeEdges::MARGIN); + YGNodeStyleSetMargin(node, edge, marginValue); + break; + } + case MarginPercent: { + auto edge = static_cast(*styleInputs++); + float marginPercent = *styleInputs++; + edgesSet.add(YGNodeEdges::MARGIN); + YGNodeStyleSetMarginPercent(node, edge, marginPercent); + break; + } + case MarginAuto: { + edgesSet.add(YGNodeEdges::MARGIN); + YGNodeStyleSetMarginAuto(node, static_cast(*styleInputs++)); + break; + } + case Padding: { + auto edge = static_cast(*styleInputs++); + float paddingValue = *styleInputs++; + edgesSet.add(YGNodeEdges::PADDING); + YGNodeStyleSetPadding(node, edge, paddingValue); + break; + } + case PaddingPercent: { + auto edge = static_cast(*styleInputs++); + float paddingPercent = *styleInputs++; + edgesSet.add(YGNodeEdges::PADDING); + YGNodeStyleSetPaddingPercent(node, edge, paddingPercent); + break; + } + case Border: { + auto edge = static_cast(*styleInputs++); + float borderValue = *styleInputs++; + edgesSet.add(YGNodeEdges::BORDER); + YGNodeStyleSetBorder(node, edge, borderValue); + break; + } + case Position: { + auto edge = static_cast(*styleInputs++); + float positionValue = *styleInputs++; + YGNodeStyleSetPosition(node, edge, positionValue); + break; + } + case PositionPercent: { + auto edge = static_cast(*styleInputs++); + float positionPercent = *styleInputs++; + YGNodeStyleSetPositionPercent(node, edge, positionPercent); + break; + } + case IsReferenceBaseline: { + YGNodeSetIsReferenceBaseline(node, *styleInputs++ == 1 ? true : false); + break; + } + default: + break; + } + } + edgesSet.setOn(node); +} diff --git a/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp index 9c50bce5..2cf6cbd2 100644 --- a/java/jni/YGJNIVanilla.cpp +++ b/java/jni/YGJNIVanilla.cpp @@ -396,6 +396,17 @@ static jlong jni_YGNodeCloneJNI(JNIEnv* env, jobject obj, jlong nativePointer) { // Yoga specific properties, not compatible with flexbox specification YG_NODE_JNI_STYLE_PROP(jfloat, float, AspectRatio); +static void jni_YGNodeSetStyleInputsJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer, + jfloatArray styleInputs, + jint size) { + float result[size]; + env->GetFloatArrayRegion(styleInputs, 0, size, result); + YGNodeSetStyleInputs(_jlong2YGNodeRef(nativePointer), result, size); +} + void assertNoPendingJniException(JNIEnv* env) { // This method cannot call any other method of the library, since other // methods of the library use it to check for exceptions too @@ -642,6 +653,9 @@ static JNINativeMethod methods[] = { "(JF)V", (void*) jni_YGNodeStyleSetAspectRatioJNI}, {"jni_YGNodePrintJNI", "(J)V", (void*) jni_YGNodePrintJNI}, + {"jni_YGNodeSetStyleInputsJNI", + "(J[FI)V", + (void*) jni_YGNodeSetStyleInputsJNI}, {"jni_YGNodeCloneJNI", "(J)J", (void*) jni_YGNodeCloneJNI}, }; From b9b0217a07432d2901c21c6add8a8cf5ee0f1104 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Tue, 8 Oct 2019 17:48:32 -0700 Subject: [PATCH 189/347] Add Scoped Local and Global Ref Summary: Add ScopedLocalRef, ScopedGlobalRef and some common methods to be used later. Reviewed By: amir-shalem Differential Revision: D17711284 fbshipit-source-id: be43d5e246bc2406765057783be11854877c41f1 --- java/CMakeLists.txt | 5 +- java/jni/ScopedGlobalRef.h | 140 +++++++++++++++++++++++++++++++++++++ java/jni/ScopedLocalRef.h | 140 +++++++++++++++++++++++++++++++++++++ java/jni/common.cpp | 100 ++++++++++++++++++++++++++ java/jni/common.h | 73 +++++++++++++++++++ java/jni/corefunctions.cpp | 74 ++++++++++++++++++++ java/jni/corefunctions.h | 51 ++++++++++++++ java/jni/macros.h | 22 ++++++ 8 files changed, 604 insertions(+), 1 deletion(-) create mode 100644 java/jni/ScopedGlobalRef.h create mode 100644 java/jni/ScopedLocalRef.h create mode 100644 java/jni/common.cpp create mode 100644 java/jni/common.h create mode 100644 java/jni/corefunctions.cpp create mode 100644 java/jni/corefunctions.h create mode 100644 java/jni/macros.h diff --git a/java/CMakeLists.txt b/java/CMakeLists.txt index c55c6bd9..30f96857 100644 --- a/java/CMakeLists.txt +++ b/java/CMakeLists.txt @@ -29,7 +29,10 @@ add_compile_options( -Wall -std=c++11) -add_library(yoga SHARED jni/YGJNI.cpp jni/YGJTypes.cpp jni/YGJNIVanilla.cpp) +file(GLOB jni_SRC + jni/*.cpp) + +add_library(yoga SHARED ${jni_SRC}) target_include_directories(yoga PRIVATE ${libfb_DIR}/include diff --git a/java/jni/ScopedGlobalRef.h b/java/jni/ScopedGlobalRef.h new file mode 100644 index 00000000..be434ce8 --- /dev/null +++ b/java/jni/ScopedGlobalRef.h @@ -0,0 +1,140 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#pragma once + +#include +#include +#include +#include "corefunctions.h" + +namespace facebook { +namespace yoga { +namespace vanillajni { + +/** + * ScopedGlobalRef is a sort of smart reference that allows us to control the + * lifespan of a JNI global reference. + * + * This class is designed so that when a ScopedGlobalRef goes out of scoped, its + * destructor will delete -JNIEnv->DeleteGlobalRef()- the underlying JNI + * reference. + * + * This class should be used to wrap all the global references we create during + * normal JNI operations if we want reference to eventually go away (in JNI it + * is a common operation to cache some global references throughout the lifespan + * of a process, in which case using this class does not really make sense). The + * idea behind this is that in JNI we should be very explicit about the lifespan + * of global references. Global references can quickly get out of control if not + * freed properly, and the developer should always be very aware of the lifespan + * of each global reference that is created in JNI so that leaks are prevented. + * + * This class is very explicit in its behavior, and it does not allow to perform + * unexpected conversions or unexpected ownership transfer. In practice, this + * class acts as a unique pointer where the underying JNI reference can have one + * and just one owner. Transfering ownership is allowed but it is an explicit + * operation (implemneted via move semantics and also via explicity API calls). + * + * Note that this class doesn't receive an explicit JNIEnv at construction time. + * At destruction time it uses vanillajni::getCurrentEnv() to retrieve the + * JNIEnv. + * + * It is OK to cache a ScopedGlobalRef between different JNI native + * method calls. + */ +template +class ScopedGlobalRef { + static_assert( + std::is_same() || std::is_same() || + std::is_same() || std::is_same() || + std::is_same() || std::is_same() || + std::is_same() || std::is_same() || + std::is_same() || std::is_same() || + std::is_same() || std::is_same() || + std::is_same(), + "ScopedGlobalRef instantiated for invalid type"); + +public: + /** + * Constructs a ScopedGlobalRef with a JNI global reference. + * + * @param globalRef the global reference to wrap. Can be NULL. + */ + ScopedGlobalRef(T globalRef) : mGlobalRef(globalRef) {} + + /** + * Equivalent to ScopedGlobalRef(NULL) + */ + explicit ScopedGlobalRef() : mGlobalRef(NULL) {} + + /** + * Move construction is allowed. + */ + ScopedGlobalRef(ScopedGlobalRef&& s) : mGlobalRef(s.release()) {} + + /** + * Move assignment is allowed. + */ + ScopedGlobalRef& operator=(ScopedGlobalRef&& s) { + reset(s.release()); + return *this; + } + + ~ScopedGlobalRef() { + reset(); + } + + /** + * Deletes the currently held reference and reassigns a new one to the + * ScopedGlobalRef. + */ + void reset(T ptr = NULL) { + if (ptr != mGlobalRef) { + if (mGlobalRef != NULL) { + vanillajni::getCurrentEnv()->DeleteGlobalRef(mGlobalRef); + } + mGlobalRef = ptr; + } + } + + /** + * Makes this ScopedGlobalRef not own the underlying JNI global reference. + * After calling this method, the ScopedGlobalRef will not delete the JNI + * global reference when the ScopedGlobalRef goes out of scope. + */ + T release() { + T globalRef = mGlobalRef; + mGlobalRef = NULL; + return globalRef; + } + + /** + * Returns the underlying JNI global reference. + */ + T get() const { return mGlobalRef; } + + /** + * Returns true if the underlying JNI reference is not NULL. + */ + operator bool() const { + return mGlobalRef != NULL; + } + + ScopedGlobalRef(const ScopedGlobalRef& ref) = delete; + ScopedGlobalRef& operator=(const ScopedGlobalRef& other) = delete; + +private: + T mGlobalRef; +}; + +template +ScopedGlobalRef make_global_ref(T globalRef) { + return ScopedGlobalRef(globalRef); +} + +} // namespace vanillajni +} // namespace yoga +} // namespace facebook diff --git a/java/jni/ScopedLocalRef.h b/java/jni/ScopedLocalRef.h new file mode 100644 index 00000000..976daf2a --- /dev/null +++ b/java/jni/ScopedLocalRef.h @@ -0,0 +1,140 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +/** + * This is a modified version of Android's ScopedLocalRef class that can be + * found in the Android's JNI code. + */ +#pragma once + +#include +#include +#include + +namespace facebook { +namespace yoga { +namespace vanillajni { + +/** + * ScopedLocalRef is a sort of smart reference that allows us to control the + * lifespan of a JNI local reference. + * + * This class is designed so that when a ScopedLocalRef goes out of scope, its + * destructor will delete -JNIEnv->DeleteLocalRef()- the underlying JNI + * reference. + * + * This class should be used to wrap all the local references that JNI + * gives us other than those that are passed to native methods at + * invocation time. The idea behind this is that in JNI we should be very + * explicit about the lifespan of local references. Local references can quickly + * get out of control, and the developer should always be very aware of the + * lifespan of each local reference that is created in JNI so that leaks are + * prevented. + * + * This class is very explicit in its behavior, and it does not allow to perform + * unexpected conversions or unexpected ownership transfer. In practice, this + * class acts as a unique pointer where the underying JNI reference can have one + * and just one owner. Transfering ownership is allowed but it is an explicit + * operation (implemneted via move semantics and also via explicity API calls). + * + * As with standard JNI local references it is not a valid operation to keep a + * reference around between different native method calls. + */ +template +class ScopedLocalRef { + static_assert( + std::is_same() || std::is_same() || + std::is_same() || std::is_same() || + std::is_same() || std::is_same() || + std::is_same() || std::is_same() || + std::is_same() || std::is_same() || + std::is_same() || std::is_same() || + std::is_same(), + "ScopedLocalRef instantiated for invalid type"); + +public: + /** + * Constructs a ScopedLocalRef with a JNI local reference. + * + * @param localRef the local reference to wrap. Can be NULL. + */ + ScopedLocalRef(JNIEnv* env, T localRef) : mEnv(env), mLocalRef(localRef) {} + + /** + * Equivalent to ScopedLocalRef(env, NULL) + */ + explicit ScopedLocalRef(JNIEnv* env) : mEnv(env), mLocalRef(NULL) {} + + /** + * Move construction is allowed. + */ + ScopedLocalRef(ScopedLocalRef&& s) : mEnv(s.mEnv), mLocalRef(s.release()) {} + + /** + * Move assignment is allowed. + */ + ScopedLocalRef& operator=(ScopedLocalRef&& s) { + reset(s.release()); + mEnv = s.mEnv; + return *this; + } + + ~ScopedLocalRef() { + reset(); + } + + /** + * Deletes the currently held reference and reassigns a new one to the + * ScopedLocalRef. + */ + void reset(T ptr = NULL) { + if (ptr != mLocalRef) { + if (mLocalRef != NULL) { + mEnv->DeleteLocalRef(mLocalRef); + } + mLocalRef = ptr; + } + } + + /** + * Makes this ScopedLocalRef not own the underlying JNI local reference. After + * calling this method, the ScopedLocalRef will not delete the JNI local + * reference when the ScopedLocalRef goes out of scope. + */ + T release() { + T localRef = mLocalRef; + mLocalRef = NULL; + return localRef; + } + + /** + * Returns the underlying JNI local reference. + */ + T get() const { return mLocalRef; } + + /** + * Returns true if the underlying JNI reference is not NULL. + */ + operator bool() const { + return mLocalRef != NULL; + } + + ScopedLocalRef(const ScopedLocalRef& ref) = delete; + ScopedLocalRef& operator=(const ScopedLocalRef& other) = delete; + +private: + JNIEnv* mEnv; + T mLocalRef; +}; + +template +ScopedLocalRef make_local_ref(JNIEnv* env, T localRef) { + return ScopedLocalRef(env, localRef); +} + +} // namespace vanillajni +} // namespace yoga +} // namespace facebook diff --git a/java/jni/common.cpp b/java/jni/common.cpp new file mode 100644 index 00000000..1f5e99b2 --- /dev/null +++ b/java/jni/common.cpp @@ -0,0 +1,100 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#include "common.h" + +namespace facebook { +namespace yoga { +namespace vanillajni { + +void registerNatives( + JNIEnv* env, + const char* className, + const JNINativeMethod methods[], + size_t numMethods) { + jclass clazz = env->FindClass(className); + + assertNoPendingJniException(env); + + env->RegisterNatives(clazz, methods, numMethods); + + assertNoPendingJniException(env); +} + +jmethodID getStaticMethodId( + JNIEnv* env, + jclass clazz, + const char* methodName, + const char* methodDescriptor) { + jmethodID methodId = + env->GetStaticMethodID(clazz, methodName, methodDescriptor); + assertNoPendingJniException(env); + return methodId; +} + +jmethodID getMethodId( + JNIEnv* env, + jclass clazz, + const char* methodName, + const char* methodDescriptor) { + jmethodID methodId = env->GetMethodID(clazz, methodName, methodDescriptor); + assertNoPendingJniException(env); + return methodId; +} + +jfieldID getFieldId( + JNIEnv* env, + jclass clazz, + const char* fieldName, + const char* fieldSignature) { + jfieldID fieldId = env->GetFieldID(clazz, fieldName, fieldSignature); + assertNoPendingJniException(env); + return fieldId; +} + +#define DEFINE_CALL_METHOD_FOR_PRIMITIVE_IMPLEMENTATION(jnitype, readableType) \ + DEFINE_CALL_METHOD_FOR_PRIMITIVE_INTERFACE(jnitype, readableType) { \ + va_list args; \ + va_start(args, methodId); \ + jnitype result = env->Call##readableType##MethodV(obj, methodId, args); \ + va_end(args); \ + assertNoPendingJniException(env); \ + return result; \ + } + +DEFINE_CALL_METHOD_FOR_PRIMITIVE_IMPLEMENTATION(jlong, Long); +DEFINE_CALL_METHOD_FOR_PRIMITIVE_IMPLEMENTATION(jfloat, Float); + +DEFINE_CALL_METHOD_FOR_PRIMITIVE_INTERFACE(void, Void) { + va_list args; + va_start(args, methodId); + env->CallVoidMethodV(obj, methodId, args); + va_end(args); + assertNoPendingJniException(env); +} + +ScopedLocalRef +callStaticObjectMethod(JNIEnv* env, jclass clazz, jmethodID methodId, ...) { + va_list args; + va_start(args, methodId); + jobject result = env->CallStaticObjectMethodV(clazz, methodId, args); + va_end(args); + assertNoPendingJniException(env); + return make_local_ref(env, result); +} + +ScopedGlobalRef newGlobalRef(JNIEnv* env, jobject obj) { + jobject result = env->NewGlobalRef(obj); + + if (!result) { + logErrorMessageAndDie("Could not obtain global reference from object"); + } + + return make_global_ref(result); +} +} // namespace vanillajni +} // namespace yoga +} // namespace facebook diff --git a/java/jni/common.h b/java/jni/common.h new file mode 100644 index 00000000..51ef4b35 --- /dev/null +++ b/java/jni/common.h @@ -0,0 +1,73 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#pragma once +#include "ScopedGlobalRef.h" +#include "ScopedLocalRef.h" + +namespace facebook { +namespace yoga { +namespace vanillajni { + +/** + * Registers a set of methods for a JNI class. Aborts if registration fails. + */ +void registerNatives( + JNIEnv* env, + const char* className, + const JNINativeMethod methods[], + size_t numMethods); + +/** + * Returns a jmethodID for a class static method. Aborts if any error happens. + */ +jmethodID getStaticMethodId( + JNIEnv* env, + jclass clazz, + const char* methodName, + const char* methodDescriptor); + +/** + * Returns a jmethodID for a class non-static method. Aborts if any error + * happens. + */ +jmethodID getMethodId( + JNIEnv* env, + jclass clazz, + const char* methodName, + const char* methodDescriptor); + +/** + * Returns a class non-static field ID. Aborts if any error happens. + */ +jfieldID getFieldId( + JNIEnv* env, + jclass clazz, + const char* fieldName, + const char* fieldSignature); + +// Helper methods to call a non-static method on an object depending on the +// return type. Each method will abort the execution if an error +// (such as a Java pending exception) is detected after invoking the +// Java method. +#define DEFINE_CALL_METHOD_FOR_PRIMITIVE_INTERFACE(jnitype, readableType) \ + jnitype call##readableType##Method( \ + JNIEnv* env, jobject obj, jmethodID methodId, ...) +DEFINE_CALL_METHOD_FOR_PRIMITIVE_INTERFACE(void, Void); +DEFINE_CALL_METHOD_FOR_PRIMITIVE_INTERFACE(jlong, Long); +DEFINE_CALL_METHOD_FOR_PRIMITIVE_INTERFACE(jfloat, Float); + +ScopedLocalRef +callStaticObjectMethod(JNIEnv* env, jclass clazz, jmethodID methodId, ...); + +/** + * Given a local or a global reference, this method creates a new global + * reference out of it. If any error happens, aborts the process. + */ +ScopedGlobalRef newGlobalRef(JNIEnv* env, jobject obj); +} // namespace vanillajni +} // namespace yoga +} // namespace facebook diff --git a/java/jni/corefunctions.cpp b/java/jni/corefunctions.cpp new file mode 100644 index 00000000..34fc734e --- /dev/null +++ b/java/jni/corefunctions.cpp @@ -0,0 +1,74 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#include "corefunctions.h" +#include "macros.h" + +namespace facebook { +namespace yoga { +namespace vanillajni { + +namespace { +JavaVM* globalVm = NULL; +struct JavaVMInitializer { + JavaVMInitializer(JavaVM* vm) { + if (!vm) { + logErrorMessageAndDie( + "You cannot pass a NULL JavaVM to ensureInitialized"); + } + globalVm = vm; + } +}; +} // namespace + +jint ensureInitialized(JNIEnv** env, JavaVM* vm) { + static JavaVMInitializer init(vm); + + if (!env) { + logErrorMessageAndDie( + "Need to pass a valid JNIEnv pointer to vanillajni initialization " + "routine"); + } + + if (vm->GetEnv(reinterpret_cast(env), JNI_VERSION_1_6) != JNI_OK) { + logErrorMessageAndDie( + "Error retrieving JNIEnv during initialization of vanillajni"); + } + + return JNI_VERSION_1_6; +} + +JNIEnv* getCurrentEnv() { + JNIEnv* env; + jint ret = globalVm->GetEnv((void**) &env, JNI_VERSION_1_6); + if (ret != JNI_OK) { + logErrorMessageAndDie( + "There was an error retrieving the current JNIEnv. Make sure the " + "current thread is attached"); + } + return env; +} + +void logErrorMessageAndDie(const char* message) { + VANILLAJNI_LOG_ERROR( + "VanillaJni", + "Aborting due to error detected in native code: %s", + message); + VANILLAJNI_DIE(); +} + +void assertNoPendingJniException(JNIEnv* env) { + // This method cannot call any other method of the library, since other + // methods of the library use it to check for exceptions too + if (env->ExceptionCheck()) { + env->ExceptionDescribe(); + logErrorMessageAndDie("Aborting due to pending Java exception in JNI"); + } +} + +} // namespace vanillajni +} // namespace yoga +} // namespace facebook diff --git a/java/jni/corefunctions.h b/java/jni/corefunctions.h new file mode 100644 index 00000000..264678a6 --- /dev/null +++ b/java/jni/corefunctions.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#pragma once + +#include +#include + +namespace facebook { +namespace yoga { +namespace vanillajni { + +/** + * This method has to be called before using the vanillajni library. This method + * is typically called when doing initialization in the "on load" JNI hook of a + * particular library. + * + * This method is thread safe, and after the first time it's called it has no + * initialization effect. + * + * @param env use this output parameter to get a JNIEnv to use for things such + * as registering native methods and such. + * @param vm the VM instance passed by JNI. This is usually the VM instance + * that is passed to the "on load" JNI hook. + * @return an integer value to return from the "on load" hook. + */ +jint ensureInitialized(JNIEnv** env, JavaVM* vm); + +/** + * Returns a JNIEnv* suitable for the current thread. If the current thread is + * not attached to the Java VM, this method aborts execution. + */ +JNIEnv* getCurrentEnv(); + +/** + * Logs an error message and aborts the current process. + */ +void logErrorMessageAndDie(const char* message); + +/** + * Checks whether there is a pending JNI exception. If so, it logs an error + * message and aborts the current process. Otherwise it does nothing. + */ +void assertNoPendingJniException(JNIEnv* env); + +} // namespace vanillajni +} // namespace yoga +} // namespace facebook diff --git a/java/jni/macros.h b/java/jni/macros.h new file mode 100644 index 00000000..2d5549f6 --- /dev/null +++ b/java/jni/macros.h @@ -0,0 +1,22 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#pragma once + +#include + +#ifdef __ANDROID__ +#include +#endif + +#ifdef __ANDROID__ +#define VANILLAJNI_LOG_ERROR(tag, format, ...) \ + __android_log_print(ANDROID_LOG_ERROR, tag, format, ##__VA_ARGS__) +#else +#define VANILLAJNI_LOG_ERROR(tag, format, ...) +#endif + +#define VANILLAJNI_DIE() std::abort() From 34739ec65203fb256641343d4ab174c91082c8f4 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Tue, 8 Oct 2019 17:48:32 -0700 Subject: [PATCH 190/347] Move calculate layout method to vanilla JNI Summary: Using vanilla JNI for calculate layout Reviewed By: amir-shalem Differential Revision: D17714219 fbshipit-source-id: bb05de4a0112eefc2b731997a4c1ecef5c0c7361 --- java/com/facebook/yoga/YogaNative.java | 1 + java/com/facebook/yoga/YogaNodeJNIBase.java | 5 +- java/jni/YGJNI.cpp | 17 --- java/jni/YGJNI.h | 13 ++ java/jni/YGJNIVanilla.cpp | 156 +++++++++++++++++--- java/jni/YGJTypesVanilla.h | 41 +++++ 6 files changed, 192 insertions(+), 41 deletions(-) create mode 100644 java/jni/YGJTypesVanilla.h diff --git a/java/com/facebook/yoga/YogaNative.java b/java/com/facebook/yoga/YogaNative.java index b951fa3a..c9ebfd13 100644 --- a/java/com/facebook/yoga/YogaNative.java +++ b/java/com/facebook/yoga/YogaNative.java @@ -132,6 +132,7 @@ public class YogaNative { static native boolean jni_YGNodeIsReferenceBaselineJNI(long nativePointer); static native void jni_YGNodeClearChildrenJNI(long nativePointer); static native void jni_YGNodeRemoveChildJNI(long nativePointer, long childPointer); + static native void jni_YGNodeCalculateLayoutJNI(long nativePointer, float width, float height, long[] nativePointers, YogaNodeJNIBase[] nodes); static native void jni_YGNodeMarkDirtyJNI(long nativePointer); static native void jni_YGNodeMarkDirtyAndPropogateToDescendantsJNI(long nativePointer); static native boolean jni_YGNodeIsDirtyJNI(long nativePointer); diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index 3712e8ce..57c9716c 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -197,7 +197,10 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { nativePointers[i] = nodes[i].mNativePointer; } - YogaNative.jni_YGNodeCalculateLayout(mNativePointer, width, height, nativePointers, nodes); + if (useVanillaJNI) + YogaNative.jni_YGNodeCalculateLayoutJNI(mNativePointer, width, height, nativePointers, nodes); + else + YogaNative.jni_YGNodeCalculateLayout(mNativePointer, width, height, nativePointers, nodes); } public void dirty() { diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp index bfb0670e..9f976920 100644 --- a/java/jni/YGJNI.cpp +++ b/java/jni/YGJNI.cpp @@ -22,23 +22,6 @@ using namespace facebook::jni; using namespace std; using facebook::yoga::detail::Log; -const short int LAYOUT_EDGE_SET_FLAG_INDEX = 0; -const short int LAYOUT_WIDTH_INDEX = 1; -const short int LAYOUT_HEIGHT_INDEX = 2; -const short int LAYOUT_LEFT_INDEX = 3; -const short int LAYOUT_TOP_INDEX = 4; -const short int LAYOUT_DIRECTION_INDEX = 5; -const short int LAYOUT_MARGIN_START_INDEX = 6; -const short int LAYOUT_PADDING_START_INDEX = 10; -const short int LAYOUT_BORDER_START_INDEX = 14; - -namespace { - -const int DOES_LEGACY_STRETCH_BEHAVIOUR = 8; -const int HAS_NEW_LAYOUT = 16; - -} // namespace - static inline local_ref YGNodeJobject( YGNodeRef node, void* layoutContext) { diff --git a/java/jni/YGJNI.h b/java/jni/YGJNI.h index 926b6ca2..cd011b8c 100644 --- a/java/jni/YGJNI.h +++ b/java/jni/YGJNI.h @@ -47,8 +47,21 @@ enum YGStyleInput { IsReferenceBaseline, }; +const short int LAYOUT_EDGE_SET_FLAG_INDEX = 0; +const short int LAYOUT_WIDTH_INDEX = 1; +const short int LAYOUT_HEIGHT_INDEX = 2; +const short int LAYOUT_LEFT_INDEX = 3; +const short int LAYOUT_TOP_INDEX = 4; +const short int LAYOUT_DIRECTION_INDEX = 5; +const short int LAYOUT_MARGIN_START_INDEX = 6; +const short int LAYOUT_PADDING_START_INDEX = 10; +const short int LAYOUT_BORDER_START_INDEX = 14; + namespace { +const int DOES_LEGACY_STRETCH_BEHAVIOUR = 8; +const int HAS_NEW_LAYOUT = 16; + union YGNodeContext { uintptr_t edgesSet = 0; void* asVoidPtr; diff --git a/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp index 2cf6cbd2..eea7de86 100644 --- a/java/jni/YGJNIVanilla.cpp +++ b/java/jni/YGJNIVanilla.cpp @@ -9,6 +9,19 @@ #include #include #include "YGJNI.h" +#include "common.h" +#include "YGJTypesVanilla.h" +#include + +using namespace facebook::yoga::vanillajni; +using facebook::yoga::detail::Log; + +static inline ScopedLocalRef YGNodeJobject( + YGNodeRef node, + void* layoutContext) { + return reinterpret_cast(layoutContext) + ->ref(getCurrentEnv(), node); +} static inline YGNodeRef _jlong2YGNodeRef(jlong addr) { return reinterpret_cast(static_cast(addr)); @@ -144,6 +157,122 @@ static void jni_YGNodeRemoveChildJNI( _jlong2YGNodeRef(nativePointer), _jlong2YGNodeRef(childPointer)); } +static void YGTransferLayoutOutputsRecursive( + JNIEnv* env, + jobject thiz, + YGNodeRef root, + void* layoutContext) { + if (!root->getHasNewLayout()) { + return; + } + auto obj = YGNodeJobject(root, layoutContext); + if (!obj) { + Log::log( + root, + YGLogLevelError, + nullptr, + "Java YGNode was GCed during layout calculation\n"); + return; + } + + auto edgesSet = YGNodeEdges{root}; + + bool marginFieldSet = edgesSet.has(YGNodeEdges::MARGIN); + bool paddingFieldSet = edgesSet.has(YGNodeEdges::PADDING); + bool borderFieldSet = edgesSet.has(YGNodeEdges::BORDER); + + int fieldFlags = edgesSet.get(); + fieldFlags |= HAS_NEW_LAYOUT; + if (YGNodeLayoutGetDidLegacyStretchFlagAffectLayout(root)) { + fieldFlags |= DOES_LEGACY_STRETCH_BEHAVIOUR; + } + + const int arrSize = 6 + (marginFieldSet ? 4 : 0) + (paddingFieldSet ? 4 : 0) + + (borderFieldSet ? 4 : 0); + float arr[18]; + arr[LAYOUT_EDGE_SET_FLAG_INDEX] = fieldFlags; + arr[LAYOUT_WIDTH_INDEX] = YGNodeLayoutGetWidth(root); + arr[LAYOUT_HEIGHT_INDEX] = YGNodeLayoutGetHeight(root); + arr[LAYOUT_LEFT_INDEX] = YGNodeLayoutGetLeft(root); + arr[LAYOUT_TOP_INDEX] = YGNodeLayoutGetTop(root); + arr[LAYOUT_DIRECTION_INDEX] = + static_cast(YGNodeLayoutGetDirection(root)); + if (marginFieldSet) { + arr[LAYOUT_MARGIN_START_INDEX] = YGNodeLayoutGetMargin(root, YGEdgeLeft); + arr[LAYOUT_MARGIN_START_INDEX + 1] = YGNodeLayoutGetMargin(root, YGEdgeTop); + arr[LAYOUT_MARGIN_START_INDEX + 2] = + YGNodeLayoutGetMargin(root, YGEdgeRight); + arr[LAYOUT_MARGIN_START_INDEX + 3] = + YGNodeLayoutGetMargin(root, YGEdgeBottom); + } + if (paddingFieldSet) { + int paddingStartIndex = + LAYOUT_PADDING_START_INDEX - (marginFieldSet ? 0 : 4); + arr[paddingStartIndex] = YGNodeLayoutGetPadding(root, YGEdgeLeft); + arr[paddingStartIndex + 1] = YGNodeLayoutGetPadding(root, YGEdgeTop); + arr[paddingStartIndex + 2] = YGNodeLayoutGetPadding(root, YGEdgeRight); + arr[paddingStartIndex + 3] = YGNodeLayoutGetPadding(root, YGEdgeBottom); + } + + if (borderFieldSet) { + int borderStartIndex = LAYOUT_BORDER_START_INDEX - + (marginFieldSet ? 0 : 4) - (paddingFieldSet ? 0 : 4); + arr[borderStartIndex] = YGNodeLayoutGetBorder(root, YGEdgeLeft); + arr[borderStartIndex + 1] = YGNodeLayoutGetBorder(root, YGEdgeTop); + arr[borderStartIndex + 2] = YGNodeLayoutGetBorder(root, YGEdgeRight); + arr[borderStartIndex + 3] = YGNodeLayoutGetBorder(root, YGEdgeBottom); + } + + // Don't change this field name without changing the name of the field in + // Database.java + auto objectClass = facebook::yoga::vanillajni::make_local_ref( + env, env->GetObjectClass(obj.get())); + static const jfieldID arrField = facebook::yoga::vanillajni::getFieldId( + env, objectClass.get(), "arr", "[F"); + + ScopedLocalRef arrFinal = + make_local_ref(env, env->NewFloatArray(arrSize)); + env->SetFloatArrayRegion(arrFinal.get(), 0, arrSize, arr); + env->SetObjectField(obj.get(), arrField, arrFinal.get()); + + root->setHasNewLayout(false); + + for (uint32_t i = 0; i < YGNodeGetChildCount(root); i++) { + YGTransferLayoutOutputsRecursive( + env, thiz, YGNodeGetChild(root, i), layoutContext); + } +} + +static void jni_YGNodeCalculateLayoutJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer, + jfloat width, + jfloat height, + jlongArray nativePointers, + jobjectArray javaNodes) { + + void* layoutContext = nullptr; + auto map = PtrJNodeMap{}; + if (nativePointers) { + size_t nativePointersSize = env->GetArrayLength(nativePointers); + jlong result[nativePointersSize]; + env->GetLongArrayRegion(nativePointers, 0, nativePointersSize, result); + + map = PtrJNodeMap{result, nativePointersSize, javaNodes}; + layoutContext = ↦ + } + + const YGNodeRef root = _jlong2YGNodeRef(nativePointer); + YGNodeCalculateLayoutWithContext( + root, + static_cast(width), + static_cast(height), + YGNodeStyleGetDirection(_jlong2YGNodeRef(nativePointer)), + layoutContext); + YGTransferLayoutOutputsRecursive(env, obj, root, layoutContext); +} + static void jni_YGNodeMarkDirtyJNI( JNIEnv* env, jobject obj, @@ -407,28 +536,6 @@ static void jni_YGNodeSetStyleInputsJNI( YGNodeSetStyleInputs(_jlong2YGNodeRef(nativePointer), result, size); } -void assertNoPendingJniException(JNIEnv* env) { - // This method cannot call any other method of the library, since other - // methods of the library use it to check for exceptions too - if (env->ExceptionCheck()) { - env->ExceptionDescribe(); - } -} - -void registerNativeMethods( - JNIEnv* env, - const char* className, - JNINativeMethod methods[], - size_t numMethods) { - jclass clazz = env->FindClass(className); - - assertNoPendingJniException(env); - - env->RegisterNatives(clazz, methods, numMethods); - - assertNoPendingJniException(env); -} - static JNINativeMethod methods[] = { {"jni_YGConfigNewJNI", "()J", (void*) jni_YGConfigNewJNI}, // {"jni_YGConfigFreeJNI", "(J)V", (void*) jni_YGConfigFreeJNI}, @@ -462,6 +569,9 @@ static JNINativeMethod methods[] = { (void*) jni_YGNodeIsReferenceBaselineJNI}, {"jni_YGNodeClearChildrenJNI", "(J)V", (void*) jni_YGNodeClearChildrenJNI}, {"jni_YGNodeRemoveChildJNI", "(JJ)V", (void*) jni_YGNodeRemoveChildJNI}, + {"jni_YGNodeCalculateLayoutJNI", + "(JFF[J[Lcom/facebook/yoga/YogaNodeJNIBase;)V", + (void*) jni_YGNodeCalculateLayoutJNI}, {"jni_YGNodeMarkDirtyJNI", "(J)V", (void*) jni_YGNodeMarkDirtyJNI}, {"jni_YGNodeMarkDirtyAndPropogateToDescendantsJNI", "(J)V", @@ -660,7 +770,7 @@ static JNINativeMethod methods[] = { }; void YGJNIVanilla::registerNatives(JNIEnv* env) { - registerNativeMethods( + facebook::yoga::vanillajni::registerNatives( env, "com/facebook/yoga/YogaNative", methods, diff --git a/java/jni/YGJTypesVanilla.h b/java/jni/YGJTypesVanilla.h new file mode 100644 index 00000000..d98487ae --- /dev/null +++ b/java/jni/YGJTypesVanilla.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#include "jni.h" +#include +#include +#include +#include "common.h" + +using namespace facebook::yoga::vanillajni; +using namespace std; + +class PtrJNodeMap { + std::map ptrsToIdxs_; + jobjectArray javaNodes_; + +public: + PtrJNodeMap() : ptrsToIdxs_{}, javaNodes_{} {} + PtrJNodeMap( + jlong* nativePointers, + size_t nativePointersSize, + jobjectArray javaNodes) + : javaNodes_{javaNodes} { + for (size_t i = 0; i < nativePointersSize; ++i) { + ptrsToIdxs_[(YGNodeRef) nativePointers[i]] = i; + } + } + + ScopedLocalRef ref(JNIEnv* env, YGNodeRef node) { + auto idx = ptrsToIdxs_.find(node); + if (idx == ptrsToIdxs_.end()) { + return ScopedLocalRef(env); + } else { + return make_local_ref( + env, env->GetObjectArrayElement(javaNodes_, idx->second)); + } + } +}; From 22a60e82b0e16687d8bbcae04dab82b5f383d4ac Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Tue, 8 Oct 2019 17:48:32 -0700 Subject: [PATCH 191/347] move yg node new and ygnode new with config Summary: YGNode creation methods to vanilla JNI Reviewed By: amir-shalem Differential Revision: D17714230 fbshipit-source-id: 74e14e876ab7efc67771d92091c2a78f09072b83 --- java/com/facebook/yoga/YogaNative.java | 3 ++ java/com/facebook/yoga/YogaNodeFactory.java | 4 +++ java/com/facebook/yoga/YogaNodeJNIBase.java | 6 +++- .../facebook/yoga/YogaNodeJNIFinalizer.java | 4 +++ java/jni/YGJNIVanilla.cpp | 31 +++++++++++++++++++ 5 files changed, 47 insertions(+), 1 deletion(-) diff --git a/java/com/facebook/yoga/YogaNative.java b/java/com/facebook/yoga/YogaNative.java index c9ebfd13..8d7cc504 100644 --- a/java/com/facebook/yoga/YogaNative.java +++ b/java/com/facebook/yoga/YogaNative.java @@ -125,6 +125,9 @@ public class YogaNative { static native void jni_YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviourJNI(long nativePointer, boolean shouldDiffLayoutWithoutLegacyStretchBehaviour); // static native void jni_YGConfigSetLoggerJNI(long nativePointer, Object logger); + // YGNode related + static native long jni_YGNodeNewJNI(); + static native long jni_YGNodeNewWithConfigJNI(long configPointer); static native void jni_YGNodeFreeJNI(long nativePointer); static native void jni_YGNodeResetJNI(long nativePointer); static native void jni_YGNodeInsertChildJNI(long nativePointer, long childPointer, int index); diff --git a/java/com/facebook/yoga/YogaNodeFactory.java b/java/com/facebook/yoga/YogaNodeFactory.java index 6e292826..cf015f38 100644 --- a/java/com/facebook/yoga/YogaNodeFactory.java +++ b/java/com/facebook/yoga/YogaNodeFactory.java @@ -5,6 +5,10 @@ public abstract class YogaNodeFactory { return new YogaNodeJNIFinalizer(); } + public static YogaNode create(boolean useVanillaJNI) { + return new YogaNodeJNIFinalizer(useVanillaJNI); + } + public static YogaNode create(YogaConfig config) { return new YogaNodeJNIFinalizer(config); } diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index 57c9716c..dba60323 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -59,8 +59,12 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { this(YogaNative.jni_YGNodeNew()); } + YogaNodeJNIBase(boolean useVanillaJNI) { + this(useVanillaJNI ? YogaNative.jni_YGNodeNewJNI() : YogaNative.jni_YGNodeNew()); + } + YogaNodeJNIBase(YogaConfig config) { - this(YogaNative.jni_YGNodeNewWithConfig(((YogaConfigJNIBase)config).mNativePointer)); + this(config.useVanillaJNI() ? YogaNative.jni_YGNodeNewWithConfigJNI(((YogaConfigJNIBase)config).mNativePointer) : YogaNative.jni_YGNodeNewWithConfig(((YogaConfigJNIBase)config).mNativePointer)); this.useVanillaJNI = config.useVanillaJNI(); } diff --git a/java/com/facebook/yoga/YogaNodeJNIFinalizer.java b/java/com/facebook/yoga/YogaNodeJNIFinalizer.java index 41986c25..0472998b 100644 --- a/java/com/facebook/yoga/YogaNodeJNIFinalizer.java +++ b/java/com/facebook/yoga/YogaNodeJNIFinalizer.java @@ -11,6 +11,10 @@ public class YogaNodeJNIFinalizer extends YogaNodeJNIBase { super(); } + public YogaNodeJNIFinalizer(boolean useVanillaJNI) { + super(useVanillaJNI); + } + public YogaNodeJNIFinalizer(YogaConfig config) { super(config); } diff --git a/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp index eea7de86..f6b657af 100644 --- a/java/jni/YGJNIVanilla.cpp +++ b/java/jni/YGJNIVanilla.cpp @@ -12,6 +12,7 @@ #include "common.h" #include "YGJTypesVanilla.h" #include +#include using namespace facebook::yoga::vanillajni; using facebook::yoga::detail::Log; @@ -90,6 +91,18 @@ static void jni_YGConfigSetPointScaleFactorJNI( YGConfigSetPointScaleFactor(config, pixelsInPoint); } +static void YGPrint(YGNodeRef node, void* layoutContext) { + if (auto obj = YGNodeJobject(node, layoutContext)) { + // TODO cout << obj.get()->toString() << endl; + } else { + Log::log( + node, + YGLogLevelError, + nullptr, + "Java YGNode was GCed during layout calculation\n"); + } +} + static void jni_YGConfigSetUseLegacyStretchBehaviourJNI( JNIEnv* env, jobject obj, @@ -99,6 +112,22 @@ static void jni_YGConfigSetUseLegacyStretchBehaviourJNI( YGConfigSetUseLegacyStretchBehaviour(config, useLegacyStretchBehaviour); } +static jlong jni_YGNodeNewJNI(JNIEnv* env, jobject obj) { + const YGNodeRef node = YGNodeNew(); + node->setContext(YGNodeContext{}.asVoidPtr); + node->setPrintFunc(YGPrint); + return reinterpret_cast(node); +} + +static jlong jni_YGNodeNewWithConfigJNI( + JNIEnv* env, + jobject obj, + jlong configPointer) { + const YGNodeRef node = YGNodeNewWithConfig(_jlong2YGConfigRef(configPointer)); + node->setContext(YGNodeContext{}.asVoidPtr); + return reinterpret_cast(node); +} + static void jni_YGNodeFreeJNI(JNIEnv* env, jobject obj, jlong nativePointer) { if (nativePointer == 0) { return; @@ -558,6 +587,8 @@ static JNINativeMethod methods[] = { "(JZ)V", (void*) jni_YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviourJNI}, // {"jni_YGConfigSetLoggerJNI", "(JO)V", (void*) jni_YGConfigSetLoggerJNI}, + {"jni_YGNodeNewJNI", "()J", (void*) jni_YGNodeNewJNI}, + {"jni_YGNodeNewWithConfigJNI", "(J)J", (void*) jni_YGNodeNewWithConfigJNI}, {"jni_YGNodeFreeJNI", "(J)V", (void*) jni_YGNodeFreeJNI}, {"jni_YGNodeResetJNI", "(J)V", (void*) jni_YGNodeResetJNI}, {"jni_YGNodeInsertChildJNI", "(JJI)V", (void*) jni_YGNodeInsertChildJNI}, From 2ef674edd34340b1b268375ca6645d99e8cc9d61 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Tue, 8 Oct 2019 17:48:32 -0700 Subject: [PATCH 192/347] move measure and baseline methods Summary: Measure and baseline callbacks moved to vanilla JNI Reviewed By: amir-shalem Differential Revision: D17714334 fbshipit-source-id: dafbde36984aba948a6345a21d3808a6ef4013e8 --- java/com/facebook/yoga/YogaNative.java | 2 + java/jni/YGJNIVanilla.cpp | 107 ++++++++++++++++++++++++- 2 files changed, 108 insertions(+), 1 deletion(-) diff --git a/java/com/facebook/yoga/YogaNative.java b/java/com/facebook/yoga/YogaNative.java index 8d7cc504..1765ef5a 100644 --- a/java/com/facebook/yoga/YogaNative.java +++ b/java/com/facebook/yoga/YogaNative.java @@ -204,6 +204,8 @@ public class YogaNative { static native void jni_YGNodeStyleSetMaxHeightPercentJNI(long nativePointer, float percent); static native float jni_YGNodeStyleGetAspectRatioJNI(long nativePointer); static native void jni_YGNodeStyleSetAspectRatioJNI(long nativePointer, float aspectRatio); + static native void jni_YGNodeSetHasMeasureFuncJNI(long nativePointer, boolean hasMeasureFunc); + static native void jni_YGNodeSetHasBaselineFuncJNI(long nativePointer, boolean hasMeasureFunc); static native void jni_YGNodePrintJNI(long nativePointer); static native void jni_YGNodeSetStyleInputsJNI(long nativePointer, float[] styleInputsArray, int size); static native long jni_YGNodeCloneJNI(long nativePointer); diff --git a/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp index f6b657af..6a2a8a55 100644 --- a/java/jni/YGJNIVanilla.cpp +++ b/java/jni/YGJNIVanilla.cpp @@ -24,6 +24,13 @@ static inline ScopedLocalRef YGNodeJobject( ->ref(getCurrentEnv(), node); } +static inline ScopedLocalRef YGNodeJobject( + JNIEnv* env, + YGNodeRef node, + void* layoutContext) { + return reinterpret_cast(layoutContext)->ref(env, node); +} + static inline YGNodeRef _jlong2YGNodeRef(jlong addr) { return reinterpret_cast(static_cast(addr)); } @@ -194,7 +201,7 @@ static void YGTransferLayoutOutputsRecursive( if (!root->getHasNewLayout()) { return; } - auto obj = YGNodeJobject(root, layoutContext); + auto obj = YGNodeJobject(env, root, layoutContext); if (!obj) { Log::log( root, @@ -533,6 +540,98 @@ static void jni_YGNodeStyleSetBorderJNI( yogaNodeRef, static_cast(edge), static_cast(border)); } +static void YGTransferLayoutDirection(YGNodeRef node, jobject javaNode) { + // Don't change this field name without changing the name of the field in + // Database.java + JNIEnv* env = getCurrentEnv(); + auto objectClass = facebook::yoga::vanillajni::make_local_ref( + env, env->GetObjectClass(javaNode)); + static const jfieldID layoutDirectionField = + facebook::yoga::vanillajni::getFieldId( + env, objectClass.get(), "mLayoutDirection", "I"); + env->SetIntField( + javaNode, + layoutDirectionField, + static_cast(YGNodeLayoutGetDirection(node))); +} + +static YGSize YGJNIMeasureFunc( + YGNodeRef node, + float width, + YGMeasureMode widthMode, + float height, + YGMeasureMode heightMode, + void* layoutContext) { + if (auto obj = YGNodeJobject(node, layoutContext)) { + YGTransferLayoutDirection(node, obj.get()); + JNIEnv* env = getCurrentEnv(); + auto objectClass = facebook::yoga::vanillajni::make_local_ref( + env, env->GetObjectClass(obj.get())); + static const jmethodID methodId = facebook::yoga::vanillajni::getMethodId( + env, objectClass.get(), "measure", "(FIFI)J"); + const auto measureResult = facebook::yoga::vanillajni::callLongMethod( + env, obj.get(), methodId, width, widthMode, height, heightMode); + + static_assert( + sizeof(measureResult) == 8, + "Expected measureResult to be 8 bytes, or two 32 bit ints"); + + int32_t wBits = 0xFFFFFFFF & (measureResult >> 32); + int32_t hBits = 0xFFFFFFFF & measureResult; + + const float* measuredWidth = reinterpret_cast(&wBits); + const float* measuredHeight = reinterpret_cast(&hBits); + + return YGSize{*measuredWidth, *measuredHeight}; + } else { + Log::log( + node, + YGLogLevelError, + nullptr, + "Java YGNode was GCed during layout calculation\n"); + return YGSize{ + widthMode == YGMeasureModeUndefined ? 0 : width, + heightMode == YGMeasureModeUndefined ? 0 : height, + }; + } +} + +static void jni_YGNodeSetHasMeasureFuncJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer, + jboolean hasMeasureFunc) { + _jlong2YGNodeRef(nativePointer) + ->setMeasureFunc(hasMeasureFunc ? YGJNIMeasureFunc : nullptr); +} + +static float YGJNIBaselineFunc( + YGNodeRef node, + float width, + float height, + void* layoutContext) { + if (auto obj = YGNodeJobject(node, layoutContext)) { + JNIEnv* env = getCurrentEnv(); + auto objectClass = facebook::yoga::vanillajni::make_local_ref( + env, env->GetObjectClass(obj.get())); + static const jmethodID methodId = facebook::yoga::vanillajni::getMethodId( + env, objectClass.get(), "baseline", "(FF)F"); + return facebook::yoga::vanillajni::callFloatMethod( + env, obj.get(), methodId, width, height); + } else { + return height; + } +} + +static void jni_YGNodeSetHasBaselineFuncJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer, + jboolean hasBaselineFunc) { + _jlong2YGNodeRef(nativePointer) + ->setBaselineFunc(hasBaselineFunc ? YGJNIBaselineFunc : nullptr); +} + static void jni_YGNodePrintJNI(JNIEnv* env, jobject obj, jlong nativePointer) { #ifdef DEBUG const YGNodeRef node = _jlong2YGNodeRef(nativePointer); @@ -793,6 +892,12 @@ static JNINativeMethod methods[] = { {"jni_YGNodeStyleSetAspectRatioJNI", "(JF)V", (void*) jni_YGNodeStyleSetAspectRatioJNI}, + {"jni_YGNodeSetHasMeasureFuncJNI", + "(JZ)V", + (void*) jni_YGNodeSetHasMeasureFuncJNI}, + {"jni_YGNodeSetHasBaselineFuncJNI", + "(JZ)V", + (void*) jni_YGNodeSetHasBaselineFuncJNI}, {"jni_YGNodePrintJNI", "(J)V", (void*) jni_YGNodePrintJNI}, {"jni_YGNodeSetStyleInputsJNI", "(J[FI)V", From d6591439d1530da25187be7676f04317781e012a Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 9 Oct 2019 09:26:47 -0700 Subject: [PATCH 193/347] move YGSetLogger and YGConfigFree with global ref to vanilla jni Summary: Move YGSetLogger and YGConfigFree methods to vanilla JNI Reviewed By: amir-shalem Differential Revision: D17754999 fbshipit-source-id: 8dfcf1a54e4d54ebf91e38c6513e6a703a40ae92 --- java/com/facebook/yoga/YogaConfigJNIBase.java | 7 +- .../facebook/yoga/YogaConfigJNIFinalizer.java | 5 +- java/com/facebook/yoga/YogaNative.java | 4 +- java/jni/YGJNIVanilla.cpp | 91 +++++++++++++++++-- 4 files changed, 93 insertions(+), 14 deletions(-) diff --git a/java/com/facebook/yoga/YogaConfigJNIBase.java b/java/com/facebook/yoga/YogaConfigJNIBase.java index 1f3ab04c..ceda9595 100644 --- a/java/com/facebook/yoga/YogaConfigJNIBase.java +++ b/java/com/facebook/yoga/YogaConfigJNIBase.java @@ -10,7 +10,7 @@ public abstract class YogaConfigJNIBase extends YogaConfig { long mNativePointer; private YogaLogger mLogger; - private boolean useVanillaJNI = false; + protected boolean useVanillaJNI = false; private YogaConfigJNIBase(long nativePointer) { if (nativePointer == 0) { @@ -85,7 +85,10 @@ public abstract class YogaConfigJNIBase extends YogaConfig { public void setLogger(YogaLogger logger) { mLogger = logger; - YogaNative.jni_YGConfigSetLogger(mNativePointer, logger); + if (useVanillaJNI) + YogaNative.jni_YGConfigSetLoggerJNI(mNativePointer, logger); + else + YogaNative.jni_YGConfigSetLogger(mNativePointer, logger); } public YogaLogger getLogger() { diff --git a/java/com/facebook/yoga/YogaConfigJNIFinalizer.java b/java/com/facebook/yoga/YogaConfigJNIFinalizer.java index 1d6fed64..ad177b90 100644 --- a/java/com/facebook/yoga/YogaConfigJNIFinalizer.java +++ b/java/com/facebook/yoga/YogaConfigJNIFinalizer.java @@ -28,7 +28,10 @@ public class YogaConfigJNIFinalizer extends YogaConfigJNIBase { if (mNativePointer != 0) { long nativePointer = mNativePointer; mNativePointer = 0; - YogaNative.jni_YGConfigFree(nativePointer); + if (useVanillaJNI) + YogaNative.jni_YGConfigFreeJNI(nativePointer); + else + YogaNative.jni_YGConfigFree(nativePointer); } } } diff --git a/java/com/facebook/yoga/YogaNative.java b/java/com/facebook/yoga/YogaNative.java index 1765ef5a..df3fe21e 100644 --- a/java/com/facebook/yoga/YogaNative.java +++ b/java/com/facebook/yoga/YogaNative.java @@ -116,14 +116,14 @@ public class YogaNative { // JNI methods that use Vanilla JNI // YGConfig related static native long jni_YGConfigNewJNI(); -// static native void jni_YGConfigFreeJNI(long nativePointer); + static native void jni_YGConfigFreeJNI(long nativePointer); static native void jni_YGConfigSetExperimentalFeatureEnabledJNI(long nativePointer, int feature, boolean enabled); static native void jni_YGConfigSetUseWebDefaultsJNI(long nativePointer, boolean useWebDefaults); static native void jni_YGConfigSetPrintTreeFlagJNI(long nativePointer, boolean enable); static native void jni_YGConfigSetPointScaleFactorJNI(long nativePointer, float pixelsInPoint); static native void jni_YGConfigSetUseLegacyStretchBehaviourJNI(long nativePointer, boolean useLegacyStretchBehaviour); static native void jni_YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviourJNI(long nativePointer, boolean shouldDiffLayoutWithoutLegacyStretchBehaviour); -// static native void jni_YGConfigSetLoggerJNI(long nativePointer, Object logger); + static native void jni_YGConfigSetLoggerJNI(long nativePointer, YogaLogger logger); // YGNode related static native long jni_YGNodeNewJNI(); diff --git a/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp index 6a2a8a55..4920ecab 100644 --- a/java/jni/YGJNIVanilla.cpp +++ b/java/jni/YGJNIVanilla.cpp @@ -13,6 +13,7 @@ #include "YGJTypesVanilla.h" #include #include +#include using namespace facebook::yoga::vanillajni; using facebook::yoga::detail::Log; @@ -43,13 +44,13 @@ static jlong jni_YGConfigNewJNI(JNIEnv* env, jobject obj) { return reinterpret_cast(YGConfigNew()); } -// void jni_YGConfigFreeJNI(JNIEnv* env, jobject obj, jlong nativePointer) { -// const YGConfigRef config = _jlong2YGConfigRef(nativePointer); -// // unique_ptr will destruct the underlying global_ref, if present. -// auto context = std::unique_ptr>{ -// static_cast*>(YGConfigGetContext(config))}; -// YGConfigFree(config); -// } +static void jni_YGConfigFreeJNI(JNIEnv* env, jobject obj, jlong nativePointer) { + const YGConfigRef config = _jlong2YGConfigRef(nativePointer); + // unique_ptr will destruct the underlying global_ref, if present. + auto context = std::unique_ptr>{ + static_cast*>(YGConfigGetContext(config))}; + YGConfigFree(config); +} static void jni_YGConfigSetExperimentalFeatureEnabledJNI( JNIEnv* env, @@ -135,6 +136,76 @@ static jlong jni_YGNodeNewWithConfigJNI( return reinterpret_cast(node); } +static int YGJNILogFunc( + const YGConfigRef config, + const YGNodeRef node, + YGLogLevel level, + void* layoutContext, + const char* format, + va_list args) { + int result = vsnprintf(NULL, 0, format, args); + std::vector buffer(1 + result); + vsnprintf(buffer.data(), buffer.size(), format, args); + + auto jloggerPtr = + static_cast*>(YGConfigGetContext(config)); + if (jloggerPtr != nullptr) { + if (*jloggerPtr) { + JNIEnv* env = getCurrentEnv(); + + jclass cl = env->FindClass("Lcom/facebook/yoga/YogaLogLevel;"); + static const jmethodID smethodId = + facebook::yoga::vanillajni::getStaticMethodId( + env, cl, "fromInt", "(I)Lcom/facebook/yoga/YogaLogLevel;"); + ScopedLocalRef logLevel = + facebook::yoga::vanillajni::callStaticObjectMethod( + env, cl, smethodId, level); + + auto objectClass = facebook::yoga::vanillajni::make_local_ref( + env, env->GetObjectClass((*jloggerPtr).get())); + static const jmethodID methodId = facebook::yoga::vanillajni::getMethodId( + env, + objectClass.get(), + "log", + "(Lcom/facebook/yoga/YogaLogLevel;Ljava/lang/String;)V"); + facebook::yoga::vanillajni::callVoidMethod( + env, + (*jloggerPtr).get(), + methodId, + logLevel.get(), + env->NewStringUTF(buffer.data())); + } + } + + return result; +} + +static void jni_YGConfigSetLoggerJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer, + jobject logger) { + const YGConfigRef config = _jlong2YGConfigRef(nativePointer); + auto context = + reinterpret_cast*>(YGConfigGetContext(config)); + + if (logger) { + if (context == nullptr) { + context = new ScopedGlobalRef(); + YGConfigSetContext(config, context); + } + + *context = newGlobalRef(env, logger); + config->setLogger(YGJNILogFunc); + } else { + if (context != nullptr) { + delete context; + YGConfigSetContext(config, nullptr); + } + config->setLogger(nullptr); + } +} + static void jni_YGNodeFreeJNI(JNIEnv* env, jobject obj, jlong nativePointer) { if (nativePointer == 0) { return; @@ -666,7 +737,7 @@ static void jni_YGNodeSetStyleInputsJNI( static JNINativeMethod methods[] = { {"jni_YGConfigNewJNI", "()J", (void*) jni_YGConfigNewJNI}, - // {"jni_YGConfigFreeJNI", "(J)V", (void*) jni_YGConfigFreeJNI}, + {"jni_YGConfigFreeJNI", "(J)V", (void*) jni_YGConfigFreeJNI}, {"jni_YGConfigSetExperimentalFeatureEnabledJNI", "(JIZ)V", (void*) jni_YGConfigSetExperimentalFeatureEnabledJNI}, @@ -685,7 +756,9 @@ static JNINativeMethod methods[] = { {"jni_YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviourJNI", "(JZ)V", (void*) jni_YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviourJNI}, - // {"jni_YGConfigSetLoggerJNI", "(JO)V", (void*) jni_YGConfigSetLoggerJNI}, + {"jni_YGConfigSetLoggerJNI", + "(JLcom/facebook/yoga/YogaLogger;)V", + (void*) jni_YGConfigSetLoggerJNI}, {"jni_YGNodeNewJNI", "()J", (void*) jni_YGNodeNewJNI}, {"jni_YGNodeNewWithConfigJNI", "(J)J", (void*) jni_YGNodeNewWithConfigJNI}, {"jni_YGNodeFreeJNI", "(J)V", (void*) jni_YGNodeFreeJNI}, From 293b657aefa11f5375e2cbfb2cf40ea25c3cf160 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 9 Oct 2019 09:26:47 -0700 Subject: [PATCH 194/347] Use TestParametrization for testing both fbjni and vanillaJNI version Summary: Use TestParametrization to test both fbjni and vanilla jni versions Reviewed By: amir-shalem Differential Revision: D17788718 fbshipit-source-id: 0f3317b7403cadca7b7ccd9140f1933d746bf433 --- java/com/facebook/yoga/YogaConfig.java | 2 ++ java/com/facebook/yoga/YogaConfigJNIBase.java | 5 +++++ .../facebook/yoga/TestParametrization.java | 20 ++++++++++++++++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/java/com/facebook/yoga/YogaConfig.java b/java/com/facebook/yoga/YogaConfig.java index d44aec29..501a3cca 100644 --- a/java/com/facebook/yoga/YogaConfig.java +++ b/java/com/facebook/yoga/YogaConfig.java @@ -38,5 +38,7 @@ public abstract class YogaConfig { abstract long getNativePointer(); + public abstract void setUseVanillaJNI(boolean useVanillaJNI); + public abstract boolean useVanillaJNI(); } diff --git a/java/com/facebook/yoga/YogaConfigJNIBase.java b/java/com/facebook/yoga/YogaConfigJNIBase.java index ceda9595..423044de 100644 --- a/java/com/facebook/yoga/YogaConfigJNIBase.java +++ b/java/com/facebook/yoga/YogaConfigJNIBase.java @@ -99,6 +99,11 @@ public abstract class YogaConfigJNIBase extends YogaConfig { return mNativePointer; } + @Override + public void setUseVanillaJNI(boolean useVanillaJNI) { + this.useVanillaJNI = useVanillaJNI; + } + @Override public boolean useVanillaJNI() { return this.useVanillaJNI; diff --git a/java/tests/com/facebook/yoga/TestParametrization.java b/java/tests/com/facebook/yoga/TestParametrization.java index 0e20ddaf..e0b8730c 100644 --- a/java/tests/com/facebook/yoga/TestParametrization.java +++ b/java/tests/com/facebook/yoga/TestParametrization.java @@ -27,7 +27,25 @@ public class TestParametrization { return "JNI"; } }; - return Arrays.asList(nodeFactory); + + NodeFactory nodeFactoryUsingVanillaJNI = new NodeFactory() { + @Override + public YogaNode create() { + return YogaNodeFactory.create(true); + } + + @Override + public YogaNode create(YogaConfig config) { + config.setUseVanillaJNI(true); + return YogaNodeFactory.create(config); + } + + @Override + public String toString() { + return "VanillaJNI"; + } + }; + return Arrays.asList(nodeFactory, nodeFactoryUsingVanillaJNI); } From aa2610c2ddb289cda6e35efdeaa39b487b3f46b3 Mon Sep 17 00:00:00 2001 From: Amir Shalem Date: Thu, 10 Oct 2019 02:42:41 -0700 Subject: [PATCH 195/347] Set missing useVanillaJNI in constructor for YogaNode Summary: set missing useVanillaJNI, it was causing part of the unit-tests to run in fbjni instead of vanillajni. Reviewed By: SidharthGuglani Differential Revision: D17852635 fbshipit-source-id: 5bc187d90fbdc430015be55a015a7d1e0ba0ebc6 --- java/com/facebook/yoga/YogaNodeJNIBase.java | 1 + 1 file changed, 1 insertion(+) diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index dba60323..d648c72f 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -61,6 +61,7 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { YogaNodeJNIBase(boolean useVanillaJNI) { this(useVanillaJNI ? YogaNative.jni_YGNodeNewJNI() : YogaNative.jni_YGNodeNew()); + this.useVanillaJNI = useVanillaJNI; } YogaNodeJNIBase(YogaConfig config) { From 2e321fc69f7ebb0e07b4421176619a96990ee2cc Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Thu, 10 Oct 2019 05:31:30 -0700 Subject: [PATCH 196/347] Move JNI_OnLoad to separate file which registers both fbjni and jni methods Summary: Move JNI_ONLoad to a separate file so that both fbjni native methods and vanillla jni native methods can be initialized correctly Reviewed By: amir-shalem Differential Revision: D17840166 fbshipit-source-id: 045df0df7a95bc331cbbefb3a118a349f3029465 --- java/jni/YGJNI.cpp | 4 ++-- java/jni/yogajni.cpp | 22 ++++++++++++++++++++++ java/jni/yogajni.h | 11 +++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 java/jni/yogajni.cpp create mode 100644 java/jni/yogajni.h diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp index 9f976920..493e26b3 100644 --- a/java/jni/YGJNI.cpp +++ b/java/jni/YGJNI.cpp @@ -17,6 +17,7 @@ #include "YGJTypes.h" #include "YGJNIVanilla.h" #include "YGJNI.h" +#include "yogajni.h" using namespace facebook::jni; using namespace std; @@ -616,7 +617,7 @@ void jni_YGNodeStyleSetBorder(jlong nativePointer, jint edge, jfloat border) { #define YGMakeCriticalNativeMethod(name) \ makeCriticalNativeMethod_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(#name, name) -jint JNI_OnLoad(JavaVM* vm, void*) { +jint YGJNI::registerNativeMethods(JavaVM* vm) { jint ret = initialize(vm, [] { registerNatives( "com/facebook/yoga/YogaNative", @@ -717,6 +718,5 @@ jint JNI_OnLoad(JavaVM* vm, void*) { jni_YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviour), }); }); - YGJNIVanilla::registerNatives(Environment::current()); return ret; } diff --git a/java/jni/yogajni.cpp b/java/jni/yogajni.cpp new file mode 100644 index 00000000..75f84abc --- /dev/null +++ b/java/jni/yogajni.cpp @@ -0,0 +1,22 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#include "yogajni.h" +#include "YGJNIVanilla.h" +#include +#include "common.h" + +using namespace facebook::jni; +using namespace facebook::yoga; + +jint JNI_OnLoad(JavaVM* vm, void*) { + jint ret = YGJNI::registerNativeMethods(vm); + + JNIEnv* env; + vanillajni::ensureInitialized(&env, vm); + YGJNIVanilla::registerNatives(env); + return ret; +} diff --git a/java/jni/yogajni.h b/java/jni/yogajni.h new file mode 100644 index 00000000..23eba1fd --- /dev/null +++ b/java/jni/yogajni.h @@ -0,0 +1,11 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#include + +namespace YGJNI { +jint registerNativeMethods(JavaVM* vm); +}; From 8aa67abdb20788c09f0727fcbf61c7dabab210aa Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Thu, 10 Oct 2019 05:31:30 -0700 Subject: [PATCH 197/347] Fix YGNodeJobject method Summary: We can use getCurrentEnv() , no need to pass env around methods Reviewed By: amir-shalem Differential Revision: D17841281 fbshipit-source-id: a4a58292e70ac05b0f0b9eb962a82a8501ad0226 --- java/jni/YGJNIVanilla.cpp | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp index 4920ecab..3fb03ece 100644 --- a/java/jni/YGJNIVanilla.cpp +++ b/java/jni/YGJNIVanilla.cpp @@ -25,13 +25,6 @@ static inline ScopedLocalRef YGNodeJobject( ->ref(getCurrentEnv(), node); } -static inline ScopedLocalRef YGNodeJobject( - JNIEnv* env, - YGNodeRef node, - void* layoutContext) { - return reinterpret_cast(layoutContext)->ref(env, node); -} - static inline YGNodeRef _jlong2YGNodeRef(jlong addr) { return reinterpret_cast(static_cast(addr)); } @@ -272,7 +265,7 @@ static void YGTransferLayoutOutputsRecursive( if (!root->getHasNewLayout()) { return; } - auto obj = YGNodeJobject(env, root, layoutContext); + auto obj = YGNodeJobject(root, layoutContext); if (!obj) { Log::log( root, From 050893f15a651dd34ace546c2d3e8fcc45cdc012 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Thu, 10 Oct 2019 05:31:30 -0700 Subject: [PATCH 198/347] rename PtrJNodeMap to PtrJNodeMapVanilla in yoga vanilla jni files Summary: Rename PtrJNodeMap in vanilla files top PtrJNodeMapVanilla , otherwise they conflict Reviewed By: amir-shalem Differential Revision: D17842001 fbshipit-source-id: eb164076ee2a68d79dc376826508a4143056ea31 --- java/jni/YGJNIVanilla.cpp | 6 +++--- java/jni/YGJTypesVanilla.h | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp index 3fb03ece..31ad05aa 100644 --- a/java/jni/YGJNIVanilla.cpp +++ b/java/jni/YGJNIVanilla.cpp @@ -21,7 +21,7 @@ using facebook::yoga::detail::Log; static inline ScopedLocalRef YGNodeJobject( YGNodeRef node, void* layoutContext) { - return reinterpret_cast(layoutContext) + return reinterpret_cast(layoutContext) ->ref(getCurrentEnv(), node); } @@ -353,13 +353,13 @@ static void jni_YGNodeCalculateLayoutJNI( jobjectArray javaNodes) { void* layoutContext = nullptr; - auto map = PtrJNodeMap{}; + auto map = PtrJNodeMapVanilla{}; if (nativePointers) { size_t nativePointersSize = env->GetArrayLength(nativePointers); jlong result[nativePointersSize]; env->GetLongArrayRegion(nativePointers, 0, nativePointersSize, result); - map = PtrJNodeMap{result, nativePointersSize, javaNodes}; + map = PtrJNodeMapVanilla{result, nativePointersSize, javaNodes}; layoutContext = ↦ } diff --git a/java/jni/YGJTypesVanilla.h b/java/jni/YGJTypesVanilla.h index d98487ae..33d9c060 100644 --- a/java/jni/YGJTypesVanilla.h +++ b/java/jni/YGJTypesVanilla.h @@ -13,13 +13,13 @@ using namespace facebook::yoga::vanillajni; using namespace std; -class PtrJNodeMap { +class PtrJNodeMapVanilla { std::map ptrsToIdxs_; jobjectArray javaNodes_; public: - PtrJNodeMap() : ptrsToIdxs_{}, javaNodes_{} {} - PtrJNodeMap( + PtrJNodeMapVanilla() : ptrsToIdxs_{}, javaNodes_{} {} + PtrJNodeMapVanilla( jlong* nativePointers, size_t nativePointersSize, jobjectArray javaNodes) From 869a33eb134a7cb50592c78ff7e4bc127956af8d Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Thu, 10 Oct 2019 05:31:30 -0700 Subject: [PATCH 199/347] no need to pass env to ref method , we can directly use getCurrentEnv() Summary: We can use getCurrentEnv() instead of passing environment variable around Reviewed By: amir-shalem Differential Revision: D17842042 fbshipit-source-id: 185b174ae7c08e746bc76c0600c2e326b15c4993 --- java/jni/YGJNIVanilla.cpp | 3 +-- java/jni/YGJTypesVanilla.h | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp index 31ad05aa..555a13c7 100644 --- a/java/jni/YGJNIVanilla.cpp +++ b/java/jni/YGJNIVanilla.cpp @@ -21,8 +21,7 @@ using facebook::yoga::detail::Log; static inline ScopedLocalRef YGNodeJobject( YGNodeRef node, void* layoutContext) { - return reinterpret_cast(layoutContext) - ->ref(getCurrentEnv(), node); + return reinterpret_cast(layoutContext)->ref(node); } static inline YGNodeRef _jlong2YGNodeRef(jlong addr) { diff --git a/java/jni/YGJTypesVanilla.h b/java/jni/YGJTypesVanilla.h index 33d9c060..9de9a56c 100644 --- a/java/jni/YGJTypesVanilla.h +++ b/java/jni/YGJTypesVanilla.h @@ -29,7 +29,8 @@ public: } } - ScopedLocalRef ref(JNIEnv* env, YGNodeRef node) { + ScopedLocalRef ref(YGNodeRef node) { + JNIEnv* env = getCurrentEnv(); auto idx = ptrsToIdxs_.find(node); if (idx == ptrsToIdxs_.end()) { return ScopedLocalRef(env); From 495d8da596db0c1516c8c3233ef449fa4feb3402 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Fri, 11 Oct 2019 02:01:56 -0700 Subject: [PATCH 200/347] useVanilla flag for measure and baseline methods as well Summary: UseVanillaJNI flag was missing for measure and baseline functions Reviewed By: amir-shalem Differential Revision: D17868201 fbshipit-source-id: 95d6843d643e90157a51550d6efbf059f0ca2c39 --- java/com/facebook/yoga/YogaNodeJNIBase.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index d648c72f..3a889bec 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -610,7 +610,10 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { public void setMeasureFunction(YogaMeasureFunction measureFunction) { mMeasureFunction = measureFunction; - YogaNative.jni_YGNodeSetHasMeasureFunc(mNativePointer, measureFunction != null); + if (useVanillaJNI) + YogaNative.jni_YGNodeSetHasMeasureFuncJNI(mNativePointer, measureFunction != null); + else + YogaNative.jni_YGNodeSetHasMeasureFunc(mNativePointer, measureFunction != null); } // Implementation Note: Why this method needs to stay final @@ -634,7 +637,10 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { public void setBaselineFunction(YogaBaselineFunction baselineFunction) { mBaselineFunction = baselineFunction; - YogaNative.jni_YGNodeSetHasBaselineFunc(mNativePointer, baselineFunction != null); + if (useVanillaJNI) + YogaNative.jni_YGNodeSetHasBaselineFuncJNI(mNativePointer, baselineFunction != null); + else + YogaNative.jni_YGNodeSetHasBaselineFunc(mNativePointer, baselineFunction != null); } @DoNotStrip From 42bba1089499d69aae72085450a5ccf1a5d71f5f Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Tue, 15 Oct 2019 10:30:08 -0700 Subject: [PATCH 201/347] Tidy up license headers Summary: Changelog: Tidy up license headers Reviewed By: SidharthGuglani Differential Revision: D17919414 fbshipit-source-id: 0501b495dc0a42256ca6ba3284a873da1ab175c0 --- CMakeLists.txt | 2 -- Yoga.podspec | 9 ++++----- YogaKit.podspec | 9 ++++----- YogaKit/Source/UIView+Yoga.h | 5 +++-- YogaKit/Source/UIView+Yoga.m | 5 +++-- YogaKit/Source/YGLayout+Private.h | 5 +++-- YogaKit/Source/YGLayout.h | 5 +++-- YogaKit/Source/YGLayout.m | 5 +++-- YogaKit/Source/YGLayoutExtensions.swift | 5 +++-- YogaKit/Tests/YogaKitTests.m | 5 +++-- YogaKit/YogaKitSample/YogaKitSample/AppDelegate.swift | 11 +++-------- .../YogaKitSample/ExamplesViewController.swift | 11 +++-------- .../YogaKitSample/SwiftViewController.swift | 11 +++-------- YogaKit/YogaKitSample/YogaKitSample/ViewController.m | 11 +++-------- .../ViewControllers/BasicViewController.swift | 11 +++-------- .../LayoutInclusionViewController.swift | 11 +++-------- .../Views/SingleLabelCollectionCell.swift | 11 +++-------- android/build.gradle | 2 +- .../com/facebook/samples/yoga/BenchmarkActivity.java | 7 ++++--- .../facebook/samples/yoga/BenchmarkAggregator.java | 7 ++++--- .../com/facebook/samples/yoga/BenchmarkFragment.java | 7 ++++--- .../com/facebook/samples/yoga/BenchmarkInflate.java | 7 ++++--- .../com/facebook/samples/yoga/BenchmarkLayout.java | 7 ++++--- .../com/facebook/samples/yoga/BenchmarkMeasure.java | 7 ++++--- .../java/com/facebook/samples/yoga/MainActivity.java | 7 ++++--- .../com/facebook/yoga/android/VirtualYogaLayout.java | 7 ++++--- .../java/com/facebook/yoga/android/YogaLayout.java | 7 ++++--- .../facebook/yoga/android/YogaViewLayoutFactory.java | 7 ++++--- benchmark/YGBenchmark.c | 5 +++-- build.gradle | 2 +- csharp/Facebook.Yoga/MeasureOutput.cs | 2 +- csharp/Facebook.Yoga/Native.cs | 2 +- csharp/Facebook.Yoga/YGConfigHandle.cs | 2 +- csharp/Facebook.Yoga/YGNodeHandle.cs | 2 +- csharp/Facebook.Yoga/YogaAlign.cs | 2 +- csharp/Facebook.Yoga/YogaConfig.cs | 2 +- csharp/Facebook.Yoga/YogaConstants.cs | 2 +- csharp/Facebook.Yoga/YogaDimension.cs | 2 +- csharp/Facebook.Yoga/YogaDirection.cs | 2 +- csharp/Facebook.Yoga/YogaDisplay.cs | 2 +- csharp/Facebook.Yoga/YogaEdge.cs | 2 +- csharp/Facebook.Yoga/YogaExperimentalFeature.cs | 2 +- csharp/Facebook.Yoga/YogaFlexDirection.cs | 2 +- csharp/Facebook.Yoga/YogaJustify.cs | 2 +- csharp/Facebook.Yoga/YogaLogLevel.cs | 2 +- csharp/Facebook.Yoga/YogaMeasureMode.cs | 2 +- csharp/Facebook.Yoga/YogaNode.Spacing.cs | 2 +- csharp/Facebook.Yoga/YogaNode.cs | 2 +- csharp/Facebook.Yoga/YogaNodeType.cs | 2 +- csharp/Facebook.Yoga/YogaOverflow.cs | 2 +- csharp/Facebook.Yoga/YogaPositionType.cs | 2 +- csharp/Facebook.Yoga/YogaPrintOptions.cs | 2 +- csharp/Facebook.Yoga/YogaUnit.cs | 2 +- csharp/Facebook.Yoga/YogaValue.cs | 2 +- csharp/Facebook.Yoga/YogaValueExtensions.cs | 2 +- csharp/Facebook.Yoga/YogaWrap.cs | 2 +- csharp/Mac/run-tests.sh | 3 --- .../Facebook.Yoga.Universal.Tests/YogaNodeTest.cs | 7 +++++++ csharp/Yoga/YGInterop.cpp | 5 +++-- csharp/Yoga/YGInterop.h | 5 +++-- csharp/Yoga/dllmain.cpp | 5 +++-- csharp/Yoga/resource.h | 5 +++-- csharp/Yoga/stdafx.cpp | 5 +++-- csharp/Yoga/stdafx.h | 5 +++-- csharp/Yoga/targetver.h | 5 +++-- csharp/build-native.sh | 3 --- csharp/tests/Facebook.Yoga/YGAlignBaselineTest.cs | 2 +- csharp/tests/Facebook.Yoga/YogaConfigTest.cs | 2 +- csharp/tests/Facebook.Yoga/YogaNodeSpacingTest.cs | 2 +- csharp/tests/Facebook.Yoga/YogaNodeTest.cs | 2 +- csharp/tests/Facebook.Yoga/test_macos.sh | 5 +++++ gentest/gentest.rb | 4 ++++ gradle/android-maven-install.gradle | 7 +++++++ gradle/android-tasks.gradle | 7 +++++++ gradle/bintray.gradle | 7 +++++++ gradle/release-bintray.gradle | 7 +++++++ gradle/release.gradle | 7 +++++++ java/CMakeLists.txt | 2 -- java/build.gradle | 2 +- java/com/facebook/yoga/LayoutPassReason.java | 7 ++++--- java/com/facebook/yoga/YogaAlign.java | 7 ++++--- java/com/facebook/yoga/YogaBaselineFunction.java | 7 ++++--- java/com/facebook/yoga/YogaConfig.java | 7 ++++--- java/com/facebook/yoga/YogaConfigFactory.java | 7 +++++++ java/com/facebook/yoga/YogaConfigJNIBase.java | 7 ++++--- java/com/facebook/yoga/YogaConfigJNIFinalizer.java | 7 ++++--- java/com/facebook/yoga/YogaConstants.java | 7 ++++--- java/com/facebook/yoga/YogaDimension.java | 7 ++++--- java/com/facebook/yoga/YogaDirection.java | 7 ++++--- java/com/facebook/yoga/YogaDisplay.java | 7 ++++--- java/com/facebook/yoga/YogaEdge.java | 7 ++++--- java/com/facebook/yoga/YogaExperimentalFeature.java | 7 ++++--- java/com/facebook/yoga/YogaFlexDirection.java | 7 ++++--- java/com/facebook/yoga/YogaJustify.java | 7 ++++--- java/com/facebook/yoga/YogaLayoutType.java | 7 ++++--- java/com/facebook/yoga/YogaLogLevel.java | 7 ++++--- java/com/facebook/yoga/YogaLogger.java | 7 ++++--- java/com/facebook/yoga/YogaMeasureFunction.java | 7 ++++--- java/com/facebook/yoga/YogaMeasureMode.java | 7 ++++--- java/com/facebook/yoga/YogaMeasureOutput.java | 7 ++++--- java/com/facebook/yoga/YogaNative.java | 7 ++++--- java/com/facebook/yoga/YogaNode.java | 7 ++++--- java/com/facebook/yoga/YogaNodeFactory.java | 7 +++++++ java/com/facebook/yoga/YogaNodeJNIBase.java | 7 ++++--- java/com/facebook/yoga/YogaNodeJNIFinalizer.java | 7 ++++--- java/com/facebook/yoga/YogaNodeType.java | 7 ++++--- java/com/facebook/yoga/YogaOverflow.java | 7 ++++--- java/com/facebook/yoga/YogaPositionType.java | 7 ++++--- java/com/facebook/yoga/YogaPrintOptions.java | 7 ++++--- java/com/facebook/yoga/YogaStyleInputs.java | 7 ++++--- java/com/facebook/yoga/YogaUnit.java | 7 ++++--- java/com/facebook/yoga/YogaValue.java | 7 ++++--- java/com/facebook/yoga/YogaWrap.java | 7 ++++--- java/jni/ScopedGlobalRef.h | 5 +++-- java/jni/ScopedLocalRef.h | 5 +++-- java/jni/YGJNI.cpp | 5 +++-- java/jni/YGJNI.h | 5 +++-- java/jni/YGJNIVanilla.cpp | 5 +++-- java/jni/YGJNIVanilla.h | 5 +++-- java/jni/YGJTypes.cpp | 5 +++-- java/jni/YGJTypes.h | 5 +++-- java/jni/YGJTypesVanilla.h | 5 +++-- java/jni/common.cpp | 5 +++-- java/jni/common.h | 5 +++-- java/jni/corefunctions.cpp | 5 +++-- java/jni/corefunctions.h | 5 +++-- java/jni/macros.h | 5 +++-- java/jni/yogajni.cpp | 5 +++-- java/jni/yogajni.h | 5 +++-- java/proguard-annotations/build.gradle | 2 +- .../com/facebook/proguard/annotations/DoNotStrip.java | 7 ++++--- java/tests/com/facebook/yoga/BatchingAPITests.java | 7 ++++--- java/tests/com/facebook/yoga/TestParametrization.java | 7 ++++--- java/tests/com/facebook/yoga/YGAlignBaselineTest.java | 7 ++++--- java/tests/com/facebook/yoga/YogaLoggerTest.java | 7 ++++--- .../facebook/yoga/YogaNodeStylePropertiesTest.java | 7 ++++--- java/tests/com/facebook/yoga/YogaNodeTest.java | 7 ++++--- java/tests/com/facebook/yoga/YogaValueTest.java | 7 ++++--- javascript/sources/Config.cc | 5 +++-- javascript/sources/Config.hh | 5 +++-- javascript/sources/Layout.hh | 5 +++-- javascript/sources/Node.cc | 5 +++-- javascript/sources/Node.hh | 5 +++-- javascript/sources/Size.hh | 5 +++-- javascript/sources/Value.hh | 5 +++-- javascript/sources/nbind.cc | 5 +++-- scripts/android-setup.sh | 3 --- scripts/deploy_jcenter.sh | 9 +++------ settings.gradle | 2 +- tests/BitfieldTest.cpp | 5 +++-- tests/CompactValueTest.cpp | 5 +++-- tests/EventsTest.cpp | 5 +++-- tests/InternalTest.cpp | 5 +++-- tests/YGAlignBaselineTest.cpp | 5 +++-- tests/YGAspectRatioTest.cpp | 5 +++-- tests/YGBaselineFuncTest.cpp | 5 +++-- tests/YGComputedMarginTest.cpp | 5 +++-- tests/YGComputedPaddingTest.cpp | 5 +++-- tests/YGDefaultValuesTest.cpp | 5 +++-- tests/YGDirtiedTest.cpp | 5 +++-- tests/YGDirtyMarkingTest.cpp | 5 +++-- tests/YGEdgeTest.cpp | 5 +++-- tests/YGFloatOptionalTest.cpp | 5 +++-- tests/YGHadOverflowTest.cpp | 5 +++-- tests/YGInfiniteHeightTest.cpp | 5 +++-- tests/YGLayoutDiffingTest.cpp | 5 +++-- tests/YGLoggerTest.cpp | 5 +++-- tests/YGMeasureCacheTest.cpp | 5 +++-- tests/YGMeasureModeTest.cpp | 5 +++-- tests/YGMeasureTest.cpp | 5 +++-- tests/YGNodeCallbackTest.cpp | 5 +++-- tests/YGNodeChildTest.cpp | 5 +++-- tests/YGPersistenceTest.cpp | 5 +++-- tests/YGRelayoutTest.cpp | 5 +++-- tests/YGRoundingFunctionTest.cpp | 5 +++-- tests/YGRoundingMeasureFuncTest.cpp | 5 +++-- tests/YGStyleAccessorsTest.cpp | 5 +++-- tests/YGStyleTest.cpp | 5 +++-- tests/YGTraversalTest.cpp | 5 +++-- tests/YGTreeMutationTest.cpp | 5 +++-- tests/YGValueTest.cpp | 5 +++-- tests/YGZeroOutLayoutRecursivlyTest.cpp | 5 +++-- testutil/build.gradle | 2 +- testutil/src/main/cpp/CMakeLists.txt | 2 -- .../src/main/cpp/include/yoga/testutil/testutil.h | 5 +++-- testutil/src/main/cpp/jni/jni.cpp | 5 +++-- testutil/src/main/cpp/testutil/testutil.cpp | 5 +++-- .../src/main/java/com/facebook/yoga/TestUtil.java | 5 +++-- util/SingleWriterValueList.cpp | 5 +++-- util/SingleWriterValueList.h | 5 +++-- util/SingleWriterValueListTest.cpp | 5 +++-- website/src/components/Playground/webpack.config.js | 7 +++++++ website/src/pages/docs/index.css | 2 +- yoga/Bitfield.h | 5 +++-- yoga/CompactValue.h | 5 +++-- yoga/Utils.cpp | 5 +++-- yoga/Utils.h | 5 +++-- yoga/YGConfig.cpp | 5 +++-- yoga/YGConfig.h | 5 +++-- yoga/YGEnums.cpp | 5 +++-- yoga/YGEnums.h | 5 +++-- yoga/YGFloatOptional.h | 5 +++-- yoga/YGLayout.cpp | 5 +++-- yoga/YGLayout.h | 5 +++-- yoga/YGMacros.h | 5 +++-- yoga/YGNode.cpp | 5 +++-- yoga/YGNode.h | 5 +++-- yoga/YGNodePrint.cpp | 5 +++-- yoga/YGNodePrint.h | 5 +++-- yoga/YGStyle.cpp | 5 +++-- yoga/YGStyle.h | 5 +++-- yoga/YGValue.cpp | 5 +++-- yoga/YGValue.h | 5 +++-- yoga/Yoga-internal.h | 5 +++-- yoga/Yoga.cpp | 5 +++-- yoga/Yoga.h | 5 +++-- yoga/event/event.cpp | 5 +++-- yoga/event/event.h | 5 +++-- yoga/internal/experiments-inl.h | 5 +++-- yoga/internal/experiments.cpp | 5 +++-- yoga/internal/experiments.h | 5 +++-- yoga/log.cpp | 5 +++-- yoga/log.h | 5 +++-- yogacore/build.gradle | 2 +- 224 files changed, 669 insertions(+), 493 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 595faef5..b0d50865 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,9 +1,7 @@ -# # Copyright (c) Facebook, Inc. and its affiliates. # # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -# cmake_minimum_required(VERSION 3.4.1) diff --git a/Yoga.podspec b/Yoga.podspec index e89f0998..24e1c0b8 100644 --- a/Yoga.podspec +++ b/Yoga.podspec @@ -1,9 +1,8 @@ +# Copyright (c) Facebook, Inc. and its affiliates. # -# Copyright (c) Facebook, Inc. and its affiliates. -# -# This source code is licensed under the MIT license found in the LICENSE -# file in the root directory of this source tree. -# +# This source code is licensed under the MIT license found in the +# LICENSE file in the root directory of this source tree. + Pod::Spec.new do |spec| spec.name = 'Yoga' spec.version = '1.14.0' diff --git a/YogaKit.podspec b/YogaKit.podspec index 95f03725..54c6c2b0 100644 --- a/YogaKit.podspec +++ b/YogaKit.podspec @@ -1,9 +1,8 @@ +# Copyright (c) Facebook, Inc. and its affiliates. # -# Copyright (c) Facebook, Inc. and its affiliates. -# -# This source code is licensed under the MIT license found in the LICENSE -# file in the root directory of this source tree. -# +# This source code is licensed under the MIT license found in the +# LICENSE file in the root directory of this source tree. + podspec = Pod::Spec.new do |spec| spec.name = 'YogaKit' spec.version = '1.14.0' diff --git a/YogaKit/Source/UIView+Yoga.h b/YogaKit/Source/UIView+Yoga.h index 092c9dcd..cac23385 100644 --- a/YogaKit/Source/UIView+Yoga.h +++ b/YogaKit/Source/UIView+Yoga.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #import "YGLayout.h" #import diff --git a/YogaKit/Source/UIView+Yoga.m b/YogaKit/Source/UIView+Yoga.m index b67e63cb..ba133919 100644 --- a/YogaKit/Source/UIView+Yoga.m +++ b/YogaKit/Source/UIView+Yoga.m @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #import "UIView+Yoga.h" #import "YGLayout+Private.h" #import diff --git a/YogaKit/Source/YGLayout+Private.h b/YogaKit/Source/YGLayout+Private.h index 8075ca42..00ab40f5 100644 --- a/YogaKit/Source/YGLayout+Private.h +++ b/YogaKit/Source/YGLayout+Private.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #import "YGLayout.h" #import diff --git a/YogaKit/Source/YGLayout.h b/YogaKit/Source/YGLayout.h index 821fda71..19f3982b 100644 --- a/YogaKit/Source/YGLayout.h +++ b/YogaKit/Source/YGLayout.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #import #import #import diff --git a/YogaKit/Source/YGLayout.m b/YogaKit/Source/YGLayout.m index fef88ae5..692020ca 100644 --- a/YogaKit/Source/YGLayout.m +++ b/YogaKit/Source/YGLayout.m @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #import "YGLayout+Private.h" #import "UIView+Yoga.h" diff --git a/YogaKit/Source/YGLayoutExtensions.swift b/YogaKit/Source/YGLayoutExtensions.swift index 8479e786..812f8455 100644 --- a/YogaKit/Source/YGLayoutExtensions.swift +++ b/YogaKit/Source/YGLayoutExtensions.swift @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + postfix operator % extension Int { diff --git a/YogaKit/Tests/YogaKitTests.m b/YogaKit/Tests/YogaKitTests.m index 13f0d314..f2a71bf4 100644 --- a/YogaKit/Tests/YogaKitTests.m +++ b/YogaKit/Tests/YogaKitTests.m @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #import #import diff --git a/YogaKit/YogaKitSample/YogaKitSample/AppDelegate.swift b/YogaKit/YogaKitSample/YogaKitSample/AppDelegate.swift index d742c08d..b96cf0b2 100644 --- a/YogaKit/YogaKitSample/YogaKitSample/AppDelegate.swift +++ b/YogaKit/YogaKitSample/YogaKitSample/AppDelegate.swift @@ -1,13 +1,8 @@ /* - * This file provided by Facebook is for non-commercial testing and evaluation - * purposes only. Facebook reserves all rights not expressly granted. + * Copyright (c) Facebook, Inc. and its affiliates. * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ import Foundation diff --git a/YogaKit/YogaKitSample/YogaKitSample/ExamplesViewController.swift b/YogaKit/YogaKitSample/YogaKitSample/ExamplesViewController.swift index 96fd415c..c46f0dd6 100644 --- a/YogaKit/YogaKitSample/YogaKitSample/ExamplesViewController.swift +++ b/YogaKit/YogaKitSample/YogaKitSample/ExamplesViewController.swift @@ -1,13 +1,8 @@ /* - * This file provided by Facebook is for non-commercial testing and evaluation - * purposes only. Facebook reserves all rights not expressly granted. + * Copyright (c) Facebook, Inc. and its affiliates. * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ import UIKit diff --git a/YogaKit/YogaKitSample/YogaKitSample/SwiftViewController.swift b/YogaKit/YogaKitSample/YogaKitSample/SwiftViewController.swift index c99e8e82..ad8ee49e 100644 --- a/YogaKit/YogaKitSample/YogaKitSample/SwiftViewController.swift +++ b/YogaKit/YogaKitSample/YogaKitSample/SwiftViewController.swift @@ -1,13 +1,8 @@ /* - * This file provided by Facebook is for non-commercial testing and evaluation - * purposes only. Facebook reserves all rights not expressly granted. + * Copyright (c) Facebook, Inc. and its affiliates. * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ import UIKit diff --git a/YogaKit/YogaKitSample/YogaKitSample/ViewController.m b/YogaKit/YogaKitSample/YogaKitSample/ViewController.m index a178de96..7080aba2 100644 --- a/YogaKit/YogaKitSample/YogaKitSample/ViewController.m +++ b/YogaKit/YogaKitSample/YogaKitSample/ViewController.m @@ -1,13 +1,8 @@ /* - * This file provided by Facebook is for non-commercial testing and evaluation - * purposes only. Facebook reserves all rights not expressly granted. + * Copyright (c) Facebook, Inc. and its affiliates. * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ #import "ViewController.h" diff --git a/YogaKit/YogaKitSample/YogaKitSample/ViewControllers/BasicViewController.swift b/YogaKit/YogaKitSample/YogaKitSample/ViewControllers/BasicViewController.swift index c9880efe..07059f1f 100644 --- a/YogaKit/YogaKitSample/YogaKitSample/ViewControllers/BasicViewController.swift +++ b/YogaKit/YogaKitSample/YogaKitSample/ViewControllers/BasicViewController.swift @@ -1,13 +1,8 @@ /* - * This file provided by Facebook is for non-commercial testing and evaluation - * purposes only. Facebook reserves all rights not expressly granted. + * Copyright (c) Facebook, Inc. and its affiliates. * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ import UIKit diff --git a/YogaKit/YogaKitSample/YogaKitSample/ViewControllers/LayoutInclusionViewController.swift b/YogaKit/YogaKitSample/YogaKitSample/ViewControllers/LayoutInclusionViewController.swift index d7d67321..897b8590 100644 --- a/YogaKit/YogaKitSample/YogaKitSample/ViewControllers/LayoutInclusionViewController.swift +++ b/YogaKit/YogaKitSample/YogaKitSample/ViewControllers/LayoutInclusionViewController.swift @@ -1,13 +1,8 @@ /* - * This file provided by Facebook is for non-commercial testing and evaluation - * purposes only. Facebook reserves all rights not expressly granted. + * Copyright (c) Facebook, Inc. and its affiliates. * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ import UIKit diff --git a/YogaKit/YogaKitSample/YogaKitSample/Views/SingleLabelCollectionCell.swift b/YogaKit/YogaKitSample/YogaKitSample/Views/SingleLabelCollectionCell.swift index 667aa971..50fa9042 100644 --- a/YogaKit/YogaKitSample/YogaKitSample/Views/SingleLabelCollectionCell.swift +++ b/YogaKit/YogaKitSample/YogaKitSample/Views/SingleLabelCollectionCell.swift @@ -1,13 +1,8 @@ /* - * This file provided by Facebook is for non-commercial testing and evaluation - * purposes only. Facebook reserves all rights not expressly granted. + * Copyright (c) Facebook, Inc. and its affiliates. * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ import UIKit diff --git a/android/build.gradle b/android/build.gradle index 7dc4904b..775cdc82 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/android/sample/java/com/facebook/samples/yoga/BenchmarkActivity.java b/android/sample/java/com/facebook/samples/yoga/BenchmarkActivity.java index 03f96d2b..54bfdfc1 100644 --- a/android/sample/java/com/facebook/samples/yoga/BenchmarkActivity.java +++ b/android/sample/java/com/facebook/samples/yoga/BenchmarkActivity.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.samples.yoga; import android.content.Intent; diff --git a/android/sample/java/com/facebook/samples/yoga/BenchmarkAggregator.java b/android/sample/java/com/facebook/samples/yoga/BenchmarkAggregator.java index 35a77342..d22e2355 100644 --- a/android/sample/java/com/facebook/samples/yoga/BenchmarkAggregator.java +++ b/android/sample/java/com/facebook/samples/yoga/BenchmarkAggregator.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.samples.yoga; import java.io.File; diff --git a/android/sample/java/com/facebook/samples/yoga/BenchmarkFragment.java b/android/sample/java/com/facebook/samples/yoga/BenchmarkFragment.java index 5c4698a0..cef1aa61 100644 --- a/android/sample/java/com/facebook/samples/yoga/BenchmarkFragment.java +++ b/android/sample/java/com/facebook/samples/yoga/BenchmarkFragment.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.samples.yoga; diff --git a/android/sample/java/com/facebook/samples/yoga/BenchmarkInflate.java b/android/sample/java/com/facebook/samples/yoga/BenchmarkInflate.java index 5eb413ae..29151bc3 100644 --- a/android/sample/java/com/facebook/samples/yoga/BenchmarkInflate.java +++ b/android/sample/java/com/facebook/samples/yoga/BenchmarkInflate.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.samples.yoga; import android.os.Bundle; diff --git a/android/sample/java/com/facebook/samples/yoga/BenchmarkLayout.java b/android/sample/java/com/facebook/samples/yoga/BenchmarkLayout.java index 72cd6ba5..b651a2e9 100644 --- a/android/sample/java/com/facebook/samples/yoga/BenchmarkLayout.java +++ b/android/sample/java/com/facebook/samples/yoga/BenchmarkLayout.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.samples.yoga; import android.os.Bundle; diff --git a/android/sample/java/com/facebook/samples/yoga/BenchmarkMeasure.java b/android/sample/java/com/facebook/samples/yoga/BenchmarkMeasure.java index 3ed670ee..60111755 100644 --- a/android/sample/java/com/facebook/samples/yoga/BenchmarkMeasure.java +++ b/android/sample/java/com/facebook/samples/yoga/BenchmarkMeasure.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.samples.yoga; import android.os.Bundle; diff --git a/android/sample/java/com/facebook/samples/yoga/MainActivity.java b/android/sample/java/com/facebook/samples/yoga/MainActivity.java index 68606105..6d0febe1 100644 --- a/android/sample/java/com/facebook/samples/yoga/MainActivity.java +++ b/android/sample/java/com/facebook/samples/yoga/MainActivity.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.samples.yoga; import android.content.Intent; diff --git a/android/src/main/java/com/facebook/yoga/android/VirtualYogaLayout.java b/android/src/main/java/com/facebook/yoga/android/VirtualYogaLayout.java index e617a9cf..876df1d4 100644 --- a/android/src/main/java/com/facebook/yoga/android/VirtualYogaLayout.java +++ b/android/src/main/java/com/facebook/yoga/android/VirtualYogaLayout.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga.android; import java.util.HashMap; diff --git a/android/src/main/java/com/facebook/yoga/android/YogaLayout.java b/android/src/main/java/com/facebook/yoga/android/YogaLayout.java index f8fb3d64..c6e921ef 100644 --- a/android/src/main/java/com/facebook/yoga/android/YogaLayout.java +++ b/android/src/main/java/com/facebook/yoga/android/YogaLayout.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga.android; import android.content.Context; diff --git a/android/src/main/java/com/facebook/yoga/android/YogaViewLayoutFactory.java b/android/src/main/java/com/facebook/yoga/android/YogaViewLayoutFactory.java index ee4e09c8..8d7b7120 100644 --- a/android/src/main/java/com/facebook/yoga/android/YogaViewLayoutFactory.java +++ b/android/src/main/java/com/facebook/yoga/android/YogaViewLayoutFactory.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga.android; import android.content.Context; diff --git a/benchmark/YGBenchmark.c b/benchmark/YGBenchmark.c index eedf7646..82dbe02c 100644 --- a/benchmark/YGBenchmark.c +++ b/benchmark/YGBenchmark.c @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include #include diff --git a/build.gradle b/build.gradle index 37b07661..ff6f028a 100644 --- a/build.gradle +++ b/build.gradle @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/Facebook.Yoga/MeasureOutput.cs b/csharp/Facebook.Yoga/MeasureOutput.cs index 35beaa13..6f9a0226 100644 --- a/csharp/Facebook.Yoga/MeasureOutput.cs +++ b/csharp/Facebook.Yoga/MeasureOutput.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/Facebook.Yoga/Native.cs b/csharp/Facebook.Yoga/Native.cs index 3c618df0..0ad2bcda 100644 --- a/csharp/Facebook.Yoga/Native.cs +++ b/csharp/Facebook.Yoga/Native.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/Facebook.Yoga/YGConfigHandle.cs b/csharp/Facebook.Yoga/YGConfigHandle.cs index 2204f9a1..3724f816 100644 --- a/csharp/Facebook.Yoga/YGConfigHandle.cs +++ b/csharp/Facebook.Yoga/YGConfigHandle.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/Facebook.Yoga/YGNodeHandle.cs b/csharp/Facebook.Yoga/YGNodeHandle.cs index 5c56c0be..28f4daf9 100644 --- a/csharp/Facebook.Yoga/YGNodeHandle.cs +++ b/csharp/Facebook.Yoga/YGNodeHandle.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/Facebook.Yoga/YogaAlign.cs b/csharp/Facebook.Yoga/YogaAlign.cs index 3af6da66..7a47e81b 100644 --- a/csharp/Facebook.Yoga/YogaAlign.cs +++ b/csharp/Facebook.Yoga/YogaAlign.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/Facebook.Yoga/YogaConfig.cs b/csharp/Facebook.Yoga/YogaConfig.cs index b8e58e09..0dc203db 100644 --- a/csharp/Facebook.Yoga/YogaConfig.cs +++ b/csharp/Facebook.Yoga/YogaConfig.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/Facebook.Yoga/YogaConstants.cs b/csharp/Facebook.Yoga/YogaConstants.cs index 9e05cca3..3ed6665f 100644 --- a/csharp/Facebook.Yoga/YogaConstants.cs +++ b/csharp/Facebook.Yoga/YogaConstants.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/Facebook.Yoga/YogaDimension.cs b/csharp/Facebook.Yoga/YogaDimension.cs index c9ac5f95..db2fba3f 100644 --- a/csharp/Facebook.Yoga/YogaDimension.cs +++ b/csharp/Facebook.Yoga/YogaDimension.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/Facebook.Yoga/YogaDirection.cs b/csharp/Facebook.Yoga/YogaDirection.cs index 11a1fec3..81797bf4 100644 --- a/csharp/Facebook.Yoga/YogaDirection.cs +++ b/csharp/Facebook.Yoga/YogaDirection.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/Facebook.Yoga/YogaDisplay.cs b/csharp/Facebook.Yoga/YogaDisplay.cs index c0e76a4a..065c3fe9 100644 --- a/csharp/Facebook.Yoga/YogaDisplay.cs +++ b/csharp/Facebook.Yoga/YogaDisplay.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/Facebook.Yoga/YogaEdge.cs b/csharp/Facebook.Yoga/YogaEdge.cs index a8078c89..d3e0ad9d 100644 --- a/csharp/Facebook.Yoga/YogaEdge.cs +++ b/csharp/Facebook.Yoga/YogaEdge.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/Facebook.Yoga/YogaExperimentalFeature.cs b/csharp/Facebook.Yoga/YogaExperimentalFeature.cs index 2725fe9b..0e7879a6 100644 --- a/csharp/Facebook.Yoga/YogaExperimentalFeature.cs +++ b/csharp/Facebook.Yoga/YogaExperimentalFeature.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/Facebook.Yoga/YogaFlexDirection.cs b/csharp/Facebook.Yoga/YogaFlexDirection.cs index c2e100a5..1d4f9c12 100644 --- a/csharp/Facebook.Yoga/YogaFlexDirection.cs +++ b/csharp/Facebook.Yoga/YogaFlexDirection.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/Facebook.Yoga/YogaJustify.cs b/csharp/Facebook.Yoga/YogaJustify.cs index 1dcd3448..09f4d5cc 100644 --- a/csharp/Facebook.Yoga/YogaJustify.cs +++ b/csharp/Facebook.Yoga/YogaJustify.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/Facebook.Yoga/YogaLogLevel.cs b/csharp/Facebook.Yoga/YogaLogLevel.cs index 32001ad4..9f587ab7 100644 --- a/csharp/Facebook.Yoga/YogaLogLevel.cs +++ b/csharp/Facebook.Yoga/YogaLogLevel.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/Facebook.Yoga/YogaMeasureMode.cs b/csharp/Facebook.Yoga/YogaMeasureMode.cs index 773ff7c0..457f1fd7 100644 --- a/csharp/Facebook.Yoga/YogaMeasureMode.cs +++ b/csharp/Facebook.Yoga/YogaMeasureMode.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/Facebook.Yoga/YogaNode.Spacing.cs b/csharp/Facebook.Yoga/YogaNode.Spacing.cs index d3a8f864..a1b21633 100644 --- a/csharp/Facebook.Yoga/YogaNode.Spacing.cs +++ b/csharp/Facebook.Yoga/YogaNode.Spacing.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/Facebook.Yoga/YogaNode.cs b/csharp/Facebook.Yoga/YogaNode.cs index 37bb3ebb..7a9b8f19 100644 --- a/csharp/Facebook.Yoga/YogaNode.cs +++ b/csharp/Facebook.Yoga/YogaNode.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/Facebook.Yoga/YogaNodeType.cs b/csharp/Facebook.Yoga/YogaNodeType.cs index f1698419..9a17c4d1 100644 --- a/csharp/Facebook.Yoga/YogaNodeType.cs +++ b/csharp/Facebook.Yoga/YogaNodeType.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/Facebook.Yoga/YogaOverflow.cs b/csharp/Facebook.Yoga/YogaOverflow.cs index cf239037..b2a99e5c 100644 --- a/csharp/Facebook.Yoga/YogaOverflow.cs +++ b/csharp/Facebook.Yoga/YogaOverflow.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/Facebook.Yoga/YogaPositionType.cs b/csharp/Facebook.Yoga/YogaPositionType.cs index ccfed558..d63b7eab 100644 --- a/csharp/Facebook.Yoga/YogaPositionType.cs +++ b/csharp/Facebook.Yoga/YogaPositionType.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/Facebook.Yoga/YogaPrintOptions.cs b/csharp/Facebook.Yoga/YogaPrintOptions.cs index f8a9ef35..82183db2 100644 --- a/csharp/Facebook.Yoga/YogaPrintOptions.cs +++ b/csharp/Facebook.Yoga/YogaPrintOptions.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/Facebook.Yoga/YogaUnit.cs b/csharp/Facebook.Yoga/YogaUnit.cs index 872c0bd5..bb424be1 100644 --- a/csharp/Facebook.Yoga/YogaUnit.cs +++ b/csharp/Facebook.Yoga/YogaUnit.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/Facebook.Yoga/YogaValue.cs b/csharp/Facebook.Yoga/YogaValue.cs index e249828d..03396ebf 100644 --- a/csharp/Facebook.Yoga/YogaValue.cs +++ b/csharp/Facebook.Yoga/YogaValue.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/Facebook.Yoga/YogaValueExtensions.cs b/csharp/Facebook.Yoga/YogaValueExtensions.cs index 2eb2b016..1346ef9f 100644 --- a/csharp/Facebook.Yoga/YogaValueExtensions.cs +++ b/csharp/Facebook.Yoga/YogaValueExtensions.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/Facebook.Yoga/YogaWrap.cs b/csharp/Facebook.Yoga/YogaWrap.cs index 61d07144..541e06f9 100644 --- a/csharp/Facebook.Yoga/YogaWrap.cs +++ b/csharp/Facebook.Yoga/YogaWrap.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/Mac/run-tests.sh b/csharp/Mac/run-tests.sh index fe69016a..5f88262a 100755 --- a/csharp/Mac/run-tests.sh +++ b/csharp/Mac/run-tests.sh @@ -1,10 +1,7 @@ #!/bin/sh - -# # Copyright (c) Facebook, Inc. and its affiliates. # # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -# ./csharp/Mac/Facebook.Yoga.Mac.Tests/bin/Release/Facebook.Yoga.Mac.Tests.app/Contents/MacOS/Facebook.Yoga.Mac.Tests diff --git a/csharp/Windows/Facebook.Yoga.Universal.Tests/YogaNodeTest.cs b/csharp/Windows/Facebook.Yoga.Universal.Tests/YogaNodeTest.cs index 78a206e5..4af53686 100644 --- a/csharp/Windows/Facebook.Yoga.Universal.Tests/YogaNodeTest.cs +++ b/csharp/Windows/Facebook.Yoga.Universal.Tests/YogaNodeTest.cs @@ -1,3 +1,10 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + using System; using Microsoft.VisualStudio.TestPlatform.UnitTestFramework; using Facebook.Yoga; diff --git a/csharp/Yoga/YGInterop.cpp b/csharp/Yoga/YGInterop.cpp index fcfd9df2..69a57be8 100644 --- a/csharp/Yoga/YGInterop.cpp +++ b/csharp/Yoga/YGInterop.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include "YGInterop.h" static YGInteropLogger gManagedLogger; diff --git a/csharp/Yoga/YGInterop.h b/csharp/Yoga/YGInterop.h index 0169e4c3..c3b2b83e 100644 --- a/csharp/Yoga/YGInterop.h +++ b/csharp/Yoga/YGInterop.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once #include diff --git a/csharp/Yoga/dllmain.cpp b/csharp/Yoga/dllmain.cpp index a995726f..fb983975 100644 --- a/csharp/Yoga/dllmain.cpp +++ b/csharp/Yoga/dllmain.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // dllmain.cpp : Defines the entry point for the DLL application. #include "stdafx.h" diff --git a/csharp/Yoga/resource.h b/csharp/Yoga/resource.h index 706e68ed..b93767fc 100644 --- a/csharp/Yoga/resource.h +++ b/csharp/Yoga/resource.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + //{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. // Used by Yoga.rc diff --git a/csharp/Yoga/stdafx.cpp b/csharp/Yoga/stdafx.cpp index d5d02700..483e9b08 100644 --- a/csharp/Yoga/stdafx.cpp +++ b/csharp/Yoga/stdafx.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // stdafx.cpp : source file that includes just the standard includes // Yoga.pch will be the pre-compiled header // stdafx.obj will contain the pre-compiled type information diff --git a/csharp/Yoga/stdafx.h b/csharp/Yoga/stdafx.h index 2c31d527..0c9b5140 100644 --- a/csharp/Yoga/stdafx.h +++ b/csharp/Yoga/stdafx.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // stdafx.h : include file for standard system include files, // or project specific include files that are used frequently, but // are changed infrequently diff --git a/csharp/Yoga/targetver.h b/csharp/Yoga/targetver.h index 7e6afcdd..571eb774 100644 --- a/csharp/Yoga/targetver.h +++ b/csharp/Yoga/targetver.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once // Including SDKDDKVer.h defines the highest available Windows platform. diff --git a/csharp/build-native.sh b/csharp/build-native.sh index eaada621..95e3d6b2 100755 --- a/csharp/build-native.sh +++ b/csharp/build-native.sh @@ -1,11 +1,8 @@ #!/bin/sh - -# # Copyright (c) Facebook, Inc. and its affiliates. # # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -# cd `dirname "$0"` echo $ANDROID_SDK diff --git a/csharp/tests/Facebook.Yoga/YGAlignBaselineTest.cs b/csharp/tests/Facebook.Yoga/YGAlignBaselineTest.cs index ea62d3ae..68960730 100644 --- a/csharp/tests/Facebook.Yoga/YGAlignBaselineTest.cs +++ b/csharp/tests/Facebook.Yoga/YGAlignBaselineTest.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/tests/Facebook.Yoga/YogaConfigTest.cs b/csharp/tests/Facebook.Yoga/YogaConfigTest.cs index 1aec4534..3c341709 100644 --- a/csharp/tests/Facebook.Yoga/YogaConfigTest.cs +++ b/csharp/tests/Facebook.Yoga/YogaConfigTest.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/tests/Facebook.Yoga/YogaNodeSpacingTest.cs b/csharp/tests/Facebook.Yoga/YogaNodeSpacingTest.cs index e4dde9ae..9c12b429 100644 --- a/csharp/tests/Facebook.Yoga/YogaNodeSpacingTest.cs +++ b/csharp/tests/Facebook.Yoga/YogaNodeSpacingTest.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/tests/Facebook.Yoga/YogaNodeTest.cs b/csharp/tests/Facebook.Yoga/YogaNodeTest.cs index 69332735..a5ede60f 100644 --- a/csharp/tests/Facebook.Yoga/YogaNodeTest.cs +++ b/csharp/tests/Facebook.Yoga/YogaNodeTest.cs @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/csharp/tests/Facebook.Yoga/test_macos.sh b/csharp/tests/Facebook.Yoga/test_macos.sh index 3a89b7a3..d6e0b9a8 100755 --- a/csharp/tests/Facebook.Yoga/test_macos.sh +++ b/csharp/tests/Facebook.Yoga/test_macos.sh @@ -1,4 +1,9 @@ #!/bin/sh +# Copyright (c) Facebook, Inc. and its affiliates. +# +# This source code is licensed under the MIT license found in the +# LICENSE file in the root directory of this source tree. + if mcs --version >/dev/null 2>&1 && mono --version >/dev/null 2>&1; then true; else echo "ERROR: Need to install Mono (brew install mono, or http://www.mono-project.com/download/)" exit 1 diff --git a/gentest/gentest.rb b/gentest/gentest.rb index fe53b671..22114501 100644 --- a/gentest/gentest.rb +++ b/gentest/gentest.rb @@ -1,4 +1,8 @@ #!/usr/bin/env ruby +# Copyright (c) Facebook, Inc. and its affiliates. +# +# This source code is licensed under the MIT license found in the +# LICENSE file in the root directory of this source tree. require 'watir' require 'fileutils' diff --git a/gradle/android-maven-install.gradle b/gradle/android-maven-install.gradle index e18f078c..a5e7b823 100644 --- a/gradle/android-maven-install.gradle +++ b/gradle/android-maven-install.gradle @@ -1,3 +1,10 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + // Configure the Android maven publication apply plugin: 'com.github.dcendents.android-maven' diff --git a/gradle/android-tasks.gradle b/gradle/android-tasks.gradle index ef58d626..9e7028a9 100644 --- a/gradle/android-tasks.gradle +++ b/gradle/android-tasks.gradle @@ -1,3 +1,10 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + // Android tasks for Javadoc and sources.jar generation afterEvaluate { project -> diff --git a/gradle/bintray.gradle b/gradle/bintray.gradle index 91f8b009..20262c13 100644 --- a/gradle/bintray.gradle +++ b/gradle/bintray.gradle @@ -1,3 +1,10 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + // Upload to Bintray apply plugin: 'com.jfrog.bintray' diff --git a/gradle/release-bintray.gradle b/gradle/release-bintray.gradle index 3b23a234..1c6e6891 100644 --- a/gradle/release-bintray.gradle +++ b/gradle/release-bintray.gradle @@ -1,3 +1,10 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + // Set up everything required for releasing on Bintray ext { bintrayRepo = 'maven' diff --git a/gradle/release.gradle b/gradle/release.gradle index 2f1a74d1..b63d0f2e 100644 --- a/gradle/release.gradle +++ b/gradle/release.gradle @@ -1,3 +1,10 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + // Common Android tasks for all releases that generate Javadocs, sources, etc. apply from: rootProject.file('gradle/android-tasks.gradle') diff --git a/java/CMakeLists.txt b/java/CMakeLists.txt index 30f96857..d3f4eda2 100644 --- a/java/CMakeLists.txt +++ b/java/CMakeLists.txt @@ -1,9 +1,7 @@ -# # Copyright (c) Facebook, Inc. and its affiliates. # # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -# cmake_minimum_required(VERSION 3.4.1) diff --git a/java/build.gradle b/java/build.gradle index 7a0a1a4b..7c404c17 100644 --- a/java/build.gradle +++ b/java/build.gradle @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/java/com/facebook/yoga/LayoutPassReason.java b/java/com/facebook/yoga/LayoutPassReason.java index 6406a95c..d04ea9df 100644 --- a/java/com/facebook/yoga/LayoutPassReason.java +++ b/java/com/facebook/yoga/LayoutPassReason.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; public enum LayoutPassReason { diff --git a/java/com/facebook/yoga/YogaAlign.java b/java/com/facebook/yoga/YogaAlign.java index eeda627e..afeaa500 100644 --- a/java/com/facebook/yoga/YogaAlign.java +++ b/java/com/facebook/yoga/YogaAlign.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import com.facebook.proguard.annotations.DoNotStrip; diff --git a/java/com/facebook/yoga/YogaBaselineFunction.java b/java/com/facebook/yoga/YogaBaselineFunction.java index e2170a38..a859aff4 100644 --- a/java/com/facebook/yoga/YogaBaselineFunction.java +++ b/java/com/facebook/yoga/YogaBaselineFunction.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import com.facebook.proguard.annotations.DoNotStrip; diff --git a/java/com/facebook/yoga/YogaConfig.java b/java/com/facebook/yoga/YogaConfig.java index 501a3cca..31e9266b 100644 --- a/java/com/facebook/yoga/YogaConfig.java +++ b/java/com/facebook/yoga/YogaConfig.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; public abstract class YogaConfig { diff --git a/java/com/facebook/yoga/YogaConfigFactory.java b/java/com/facebook/yoga/YogaConfigFactory.java index e7dcedd2..0ee5203b 100644 --- a/java/com/facebook/yoga/YogaConfigFactory.java +++ b/java/com/facebook/yoga/YogaConfigFactory.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + package com.facebook.yoga; public abstract class YogaConfigFactory { diff --git a/java/com/facebook/yoga/YogaConfigJNIBase.java b/java/com/facebook/yoga/YogaConfigJNIBase.java index 423044de..db83ab7c 100644 --- a/java/com/facebook/yoga/YogaConfigJNIBase.java +++ b/java/com/facebook/yoga/YogaConfigJNIBase.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; public abstract class YogaConfigJNIBase extends YogaConfig { diff --git a/java/com/facebook/yoga/YogaConfigJNIFinalizer.java b/java/com/facebook/yoga/YogaConfigJNIFinalizer.java index ad177b90..74528275 100644 --- a/java/com/facebook/yoga/YogaConfigJNIFinalizer.java +++ b/java/com/facebook/yoga/YogaConfigJNIFinalizer.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; public class YogaConfigJNIFinalizer extends YogaConfigJNIBase { diff --git a/java/com/facebook/yoga/YogaConstants.java b/java/com/facebook/yoga/YogaConstants.java index b04a7e53..48f39357 100644 --- a/java/com/facebook/yoga/YogaConstants.java +++ b/java/com/facebook/yoga/YogaConstants.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; public class YogaConstants { diff --git a/java/com/facebook/yoga/YogaDimension.java b/java/com/facebook/yoga/YogaDimension.java index e02df9f2..77ff6caa 100644 --- a/java/com/facebook/yoga/YogaDimension.java +++ b/java/com/facebook/yoga/YogaDimension.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import com.facebook.proguard.annotations.DoNotStrip; diff --git a/java/com/facebook/yoga/YogaDirection.java b/java/com/facebook/yoga/YogaDirection.java index 7554f441..e18ee9fa 100644 --- a/java/com/facebook/yoga/YogaDirection.java +++ b/java/com/facebook/yoga/YogaDirection.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import com.facebook.proguard.annotations.DoNotStrip; diff --git a/java/com/facebook/yoga/YogaDisplay.java b/java/com/facebook/yoga/YogaDisplay.java index 59f760ff..e69d74b3 100644 --- a/java/com/facebook/yoga/YogaDisplay.java +++ b/java/com/facebook/yoga/YogaDisplay.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import com.facebook.proguard.annotations.DoNotStrip; diff --git a/java/com/facebook/yoga/YogaEdge.java b/java/com/facebook/yoga/YogaEdge.java index 53cd1518..e60ffd88 100644 --- a/java/com/facebook/yoga/YogaEdge.java +++ b/java/com/facebook/yoga/YogaEdge.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import com.facebook.proguard.annotations.DoNotStrip; diff --git a/java/com/facebook/yoga/YogaExperimentalFeature.java b/java/com/facebook/yoga/YogaExperimentalFeature.java index edabead6..8eb1bd2a 100644 --- a/java/com/facebook/yoga/YogaExperimentalFeature.java +++ b/java/com/facebook/yoga/YogaExperimentalFeature.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import com.facebook.proguard.annotations.DoNotStrip; diff --git a/java/com/facebook/yoga/YogaFlexDirection.java b/java/com/facebook/yoga/YogaFlexDirection.java index 4acd9a1f..c844074e 100644 --- a/java/com/facebook/yoga/YogaFlexDirection.java +++ b/java/com/facebook/yoga/YogaFlexDirection.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import com.facebook.proguard.annotations.DoNotStrip; diff --git a/java/com/facebook/yoga/YogaJustify.java b/java/com/facebook/yoga/YogaJustify.java index 33ce3c9d..3508e17d 100644 --- a/java/com/facebook/yoga/YogaJustify.java +++ b/java/com/facebook/yoga/YogaJustify.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import com.facebook.proguard.annotations.DoNotStrip; diff --git a/java/com/facebook/yoga/YogaLayoutType.java b/java/com/facebook/yoga/YogaLayoutType.java index b747439f..13c707a9 100644 --- a/java/com/facebook/yoga/YogaLayoutType.java +++ b/java/com/facebook/yoga/YogaLayoutType.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; public enum YogaLayoutType { diff --git a/java/com/facebook/yoga/YogaLogLevel.java b/java/com/facebook/yoga/YogaLogLevel.java index 454ce22e..57cb4aa0 100644 --- a/java/com/facebook/yoga/YogaLogLevel.java +++ b/java/com/facebook/yoga/YogaLogLevel.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import com.facebook.proguard.annotations.DoNotStrip; diff --git a/java/com/facebook/yoga/YogaLogger.java b/java/com/facebook/yoga/YogaLogger.java index d9411061..d8420ad7 100644 --- a/java/com/facebook/yoga/YogaLogger.java +++ b/java/com/facebook/yoga/YogaLogger.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import com.facebook.proguard.annotations.DoNotStrip; diff --git a/java/com/facebook/yoga/YogaMeasureFunction.java b/java/com/facebook/yoga/YogaMeasureFunction.java index 3a2ed209..335c4c79 100644 --- a/java/com/facebook/yoga/YogaMeasureFunction.java +++ b/java/com/facebook/yoga/YogaMeasureFunction.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import com.facebook.proguard.annotations.DoNotStrip; diff --git a/java/com/facebook/yoga/YogaMeasureMode.java b/java/com/facebook/yoga/YogaMeasureMode.java index 92475b94..dbfd22c7 100644 --- a/java/com/facebook/yoga/YogaMeasureMode.java +++ b/java/com/facebook/yoga/YogaMeasureMode.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import com.facebook.proguard.annotations.DoNotStrip; diff --git a/java/com/facebook/yoga/YogaMeasureOutput.java b/java/com/facebook/yoga/YogaMeasureOutput.java index cd62dd2d..575129f9 100644 --- a/java/com/facebook/yoga/YogaMeasureOutput.java +++ b/java/com/facebook/yoga/YogaMeasureOutput.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; /** diff --git a/java/com/facebook/yoga/YogaNative.java b/java/com/facebook/yoga/YogaNative.java index df3fe21e..6a13a1a5 100644 --- a/java/com/facebook/yoga/YogaNative.java +++ b/java/com/facebook/yoga/YogaNative.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import com.facebook.proguard.annotations.DoNotStrip; diff --git a/java/com/facebook/yoga/YogaNode.java b/java/com/facebook/yoga/YogaNode.java index e54442f9..3b706815 100644 --- a/java/com/facebook/yoga/YogaNode.java +++ b/java/com/facebook/yoga/YogaNode.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import javax.annotation.Nullable; diff --git a/java/com/facebook/yoga/YogaNodeFactory.java b/java/com/facebook/yoga/YogaNodeFactory.java index cf015f38..dffc16df 100644 --- a/java/com/facebook/yoga/YogaNodeFactory.java +++ b/java/com/facebook/yoga/YogaNodeFactory.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + package com.facebook.yoga; public abstract class YogaNodeFactory { diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index 3a889bec..036e6114 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import com.facebook.proguard.annotations.DoNotStrip; diff --git a/java/com/facebook/yoga/YogaNodeJNIFinalizer.java b/java/com/facebook/yoga/YogaNodeJNIFinalizer.java index 0472998b..15f5e643 100644 --- a/java/com/facebook/yoga/YogaNodeJNIFinalizer.java +++ b/java/com/facebook/yoga/YogaNodeJNIFinalizer.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; public class YogaNodeJNIFinalizer extends YogaNodeJNIBase { diff --git a/java/com/facebook/yoga/YogaNodeType.java b/java/com/facebook/yoga/YogaNodeType.java index 775fd572..8d45d6ae 100644 --- a/java/com/facebook/yoga/YogaNodeType.java +++ b/java/com/facebook/yoga/YogaNodeType.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import com.facebook.proguard.annotations.DoNotStrip; diff --git a/java/com/facebook/yoga/YogaOverflow.java b/java/com/facebook/yoga/YogaOverflow.java index 826070ec..0e75106e 100644 --- a/java/com/facebook/yoga/YogaOverflow.java +++ b/java/com/facebook/yoga/YogaOverflow.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import com.facebook.proguard.annotations.DoNotStrip; diff --git a/java/com/facebook/yoga/YogaPositionType.java b/java/com/facebook/yoga/YogaPositionType.java index e31d0a2e..23c2786f 100644 --- a/java/com/facebook/yoga/YogaPositionType.java +++ b/java/com/facebook/yoga/YogaPositionType.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import com.facebook.proguard.annotations.DoNotStrip; diff --git a/java/com/facebook/yoga/YogaPrintOptions.java b/java/com/facebook/yoga/YogaPrintOptions.java index 8e95821e..bc0c2de0 100644 --- a/java/com/facebook/yoga/YogaPrintOptions.java +++ b/java/com/facebook/yoga/YogaPrintOptions.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import com.facebook.proguard.annotations.DoNotStrip; diff --git a/java/com/facebook/yoga/YogaStyleInputs.java b/java/com/facebook/yoga/YogaStyleInputs.java index 0149fa83..dc26bad8 100644 --- a/java/com/facebook/yoga/YogaStyleInputs.java +++ b/java/com/facebook/yoga/YogaStyleInputs.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import com.facebook.proguard.annotations.DoNotStrip; diff --git a/java/com/facebook/yoga/YogaUnit.java b/java/com/facebook/yoga/YogaUnit.java index 82ac2e54..d43c8ff1 100644 --- a/java/com/facebook/yoga/YogaUnit.java +++ b/java/com/facebook/yoga/YogaUnit.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import com.facebook.proguard.annotations.DoNotStrip; diff --git a/java/com/facebook/yoga/YogaValue.java b/java/com/facebook/yoga/YogaValue.java index 9b012bfd..a5679641 100644 --- a/java/com/facebook/yoga/YogaValue.java +++ b/java/com/facebook/yoga/YogaValue.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; public class YogaValue { diff --git a/java/com/facebook/yoga/YogaWrap.java b/java/com/facebook/yoga/YogaWrap.java index b5b6c78c..23af8a40 100644 --- a/java/com/facebook/yoga/YogaWrap.java +++ b/java/com/facebook/yoga/YogaWrap.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import com.facebook.proguard.annotations.DoNotStrip; diff --git a/java/jni/ScopedGlobalRef.h b/java/jni/ScopedGlobalRef.h index be434ce8..b1c18e68 100644 --- a/java/jni/ScopedGlobalRef.h +++ b/java/jni/ScopedGlobalRef.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once #include diff --git a/java/jni/ScopedLocalRef.h b/java/jni/ScopedLocalRef.h index 976daf2a..0c5e9440 100644 --- a/java/jni/ScopedLocalRef.h +++ b/java/jni/ScopedLocalRef.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + /** * This is a modified version of Android's ScopedLocalRef class that can be * found in the Android's JNI code. diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp index 493e26b3..a377f17a 100644 --- a/java/jni/YGJNI.cpp +++ b/java/jni/YGJNI.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include #include diff --git a/java/jni/YGJNI.h b/java/jni/YGJNI.h index cd011b8c..7bafdd52 100644 --- a/java/jni/YGJNI.h +++ b/java/jni/YGJNI.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + enum YGStyleInput { LayoutDirection, FlexDirection, diff --git a/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp index 555a13c7..9835758f 100644 --- a/java/jni/YGJNIVanilla.cpp +++ b/java/jni/YGJNIVanilla.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include "jni.h" #include "YGJNIVanilla.h" #include diff --git a/java/jni/YGJNIVanilla.h b/java/jni/YGJNIVanilla.h index 7797a678..7a7a9c7e 100644 --- a/java/jni/YGJNIVanilla.h +++ b/java/jni/YGJNIVanilla.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + namespace YGJNIVanilla { void registerNatives(JNIEnv* env); }; diff --git a/java/jni/YGJTypes.cpp b/java/jni/YGJTypes.cpp index 012a2837..751d9755 100644 --- a/java/jni/YGJTypes.cpp +++ b/java/jni/YGJTypes.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include "YGJTypes.h" using facebook::jni::alias_ref; diff --git a/java/jni/YGJTypes.h b/java/jni/YGJTypes.h index 6561ce2d..92eaec80 100644 --- a/java/jni/YGJTypes.h +++ b/java/jni/YGJTypes.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include #include diff --git a/java/jni/YGJTypesVanilla.h b/java/jni/YGJTypesVanilla.h index 9de9a56c..8f8c7786 100644 --- a/java/jni/YGJTypesVanilla.h +++ b/java/jni/YGJTypesVanilla.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include "jni.h" #include #include diff --git a/java/jni/common.cpp b/java/jni/common.cpp index 1f5e99b2..f69ef94f 100644 --- a/java/jni/common.cpp +++ b/java/jni/common.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include "common.h" namespace facebook { diff --git a/java/jni/common.h b/java/jni/common.h index 51ef4b35..eebf8e9c 100644 --- a/java/jni/common.h +++ b/java/jni/common.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once #include "ScopedGlobalRef.h" #include "ScopedLocalRef.h" diff --git a/java/jni/corefunctions.cpp b/java/jni/corefunctions.cpp index 34fc734e..37dc12d4 100644 --- a/java/jni/corefunctions.cpp +++ b/java/jni/corefunctions.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include "corefunctions.h" #include "macros.h" diff --git a/java/jni/corefunctions.h b/java/jni/corefunctions.h index 264678a6..73d6cce4 100644 --- a/java/jni/corefunctions.h +++ b/java/jni/corefunctions.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once #include diff --git a/java/jni/macros.h b/java/jni/macros.h index 2d5549f6..ea7c554b 100644 --- a/java/jni/macros.h +++ b/java/jni/macros.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once #include diff --git a/java/jni/yogajni.cpp b/java/jni/yogajni.cpp index 75f84abc..21956925 100644 --- a/java/jni/yogajni.cpp +++ b/java/jni/yogajni.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include "yogajni.h" #include "YGJNIVanilla.h" #include diff --git a/java/jni/yogajni.h b/java/jni/yogajni.h index 23eba1fd..d10836c1 100644 --- a/java/jni/yogajni.h +++ b/java/jni/yogajni.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include namespace YGJNI { diff --git a/java/proguard-annotations/build.gradle b/java/proguard-annotations/build.gradle index 3ca9dae5..c4476d9e 100644 --- a/java/proguard-annotations/build.gradle +++ b/java/proguard-annotations/build.gradle @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/java/proguard-annotations/src/main/java/com/facebook/proguard/annotations/DoNotStrip.java b/java/proguard-annotations/src/main/java/com/facebook/proguard/annotations/DoNotStrip.java index 519fca34..c65b6e8f 100644 --- a/java/proguard-annotations/src/main/java/com/facebook/proguard/annotations/DoNotStrip.java +++ b/java/proguard-annotations/src/main/java/com/facebook/proguard/annotations/DoNotStrip.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.proguard.annotations; import java.lang.annotation.ElementType; diff --git a/java/tests/com/facebook/yoga/BatchingAPITests.java b/java/tests/com/facebook/yoga/BatchingAPITests.java index 3cabadc1..93e00db0 100644 --- a/java/tests/com/facebook/yoga/BatchingAPITests.java +++ b/java/tests/com/facebook/yoga/BatchingAPITests.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import org.junit.Test; diff --git a/java/tests/com/facebook/yoga/TestParametrization.java b/java/tests/com/facebook/yoga/TestParametrization.java index e0b8730c..5ce6fd7d 100644 --- a/java/tests/com/facebook/yoga/TestParametrization.java +++ b/java/tests/com/facebook/yoga/TestParametrization.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import java.util.Arrays; diff --git a/java/tests/com/facebook/yoga/YGAlignBaselineTest.java b/java/tests/com/facebook/yoga/YGAlignBaselineTest.java index b3240659..51600329 100644 --- a/java/tests/com/facebook/yoga/YGAlignBaselineTest.java +++ b/java/tests/com/facebook/yoga/YGAlignBaselineTest.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import static org.junit.Assert.assertEquals; diff --git a/java/tests/com/facebook/yoga/YogaLoggerTest.java b/java/tests/com/facebook/yoga/YogaLoggerTest.java index 1f56a923..17316f6e 100644 --- a/java/tests/com/facebook/yoga/YogaLoggerTest.java +++ b/java/tests/com/facebook/yoga/YogaLoggerTest.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import org.junit.Test; diff --git a/java/tests/com/facebook/yoga/YogaNodeStylePropertiesTest.java b/java/tests/com/facebook/yoga/YogaNodeStylePropertiesTest.java index 7cfb82a2..649c7279 100644 --- a/java/tests/com/facebook/yoga/YogaNodeStylePropertiesTest.java +++ b/java/tests/com/facebook/yoga/YogaNodeStylePropertiesTest.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import static org.junit.Assert.assertEquals; diff --git a/java/tests/com/facebook/yoga/YogaNodeTest.java b/java/tests/com/facebook/yoga/YogaNodeTest.java index 22bc3a89..412d89a2 100644 --- a/java/tests/com/facebook/yoga/YogaNodeTest.java +++ b/java/tests/com/facebook/yoga/YogaNodeTest.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import static org.junit.Assert.assertEquals; diff --git a/java/tests/com/facebook/yoga/YogaValueTest.java b/java/tests/com/facebook/yoga/YogaValueTest.java index fa09c504..0d5ea1c1 100644 --- a/java/tests/com/facebook/yoga/YogaValueTest.java +++ b/java/tests/com/facebook/yoga/YogaValueTest.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import org.junit.Test; diff --git a/javascript/sources/Config.cc b/javascript/sources/Config.cc index 585dd66d..b91a9065 100644 --- a/javascript/sources/Config.cc +++ b/javascript/sources/Config.cc @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include "./Config.hh" diff --git a/javascript/sources/Config.hh b/javascript/sources/Config.hh index e1ee91e3..dd794f49 100644 --- a/javascript/sources/Config.hh +++ b/javascript/sources/Config.hh @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once #include diff --git a/javascript/sources/Layout.hh b/javascript/sources/Layout.hh index be9564de..c4598b90 100644 --- a/javascript/sources/Layout.hh +++ b/javascript/sources/Layout.hh @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once #include diff --git a/javascript/sources/Node.cc b/javascript/sources/Node.cc index 5cfb66d0..7e6833fe 100644 --- a/javascript/sources/Node.cc +++ b/javascript/sources/Node.cc @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include diff --git a/javascript/sources/Node.hh b/javascript/sources/Node.hh index 861f9c7a..62fd69dd 100644 --- a/javascript/sources/Node.hh +++ b/javascript/sources/Node.hh @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once #include diff --git a/javascript/sources/Size.hh b/javascript/sources/Size.hh index 95a4084c..d7ea6da9 100644 --- a/javascript/sources/Size.hh +++ b/javascript/sources/Size.hh @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once #include diff --git a/javascript/sources/Value.hh b/javascript/sources/Value.hh index 406f268c..e7a9cf66 100644 --- a/javascript/sources/Value.hh +++ b/javascript/sources/Value.hh @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once #include diff --git a/javascript/sources/nbind.cc b/javascript/sources/nbind.cc index 5b51bdcf..bdcfe14a 100644 --- a/javascript/sources/nbind.cc +++ b/javascript/sources/nbind.cc @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include "./Node.hh" diff --git a/scripts/android-setup.sh b/scripts/android-setup.sh index cca02112..f75e7c45 100644 --- a/scripts/android-setup.sh +++ b/scripts/android-setup.sh @@ -1,11 +1,8 @@ #!/bin/bash - -# # Copyright (c) Facebook, Inc. and its affiliates. # # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -# set -e diff --git a/scripts/deploy_jcenter.sh b/scripts/deploy_jcenter.sh index 34c633df..8d93aede 100755 --- a/scripts/deploy_jcenter.sh +++ b/scripts/deploy_jcenter.sh @@ -1,11 +1,8 @@ #!/bin/bash - -# -# Copyright (c) Facebook, Inc. and its affiliates. -# -# This source code is licensed under the MIT license found in the LICENSE -# file in the root directory of this source tree. +# Copyright (c) Facebook, Inc. and its affiliates. # +# This source code is licensed under the MIT license found in the +# LICENSE file in the root directory of this source tree. set -e ROOTDIR="$(dirname $0)/.." diff --git a/settings.gradle b/settings.gradle index 573bc583..93ee5013 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/tests/BitfieldTest.cpp b/tests/BitfieldTest.cpp index 6430f159..bb999c64 100644 --- a/tests/BitfieldTest.cpp +++ b/tests/BitfieldTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include diff --git a/tests/CompactValueTest.cpp b/tests/CompactValueTest.cpp index f8f55ae7..47e9aaa6 100644 --- a/tests/CompactValueTest.cpp +++ b/tests/CompactValueTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #define YOGA_COMPACT_VALUE_TEST #include diff --git a/tests/EventsTest.cpp b/tests/EventsTest.cpp index 18128cc0..cf887b2d 100644 --- a/tests/EventsTest.cpp +++ b/tests/EventsTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include #include diff --git a/tests/InternalTest.cpp b/tests/InternalTest.cpp index 8646aebc..9a789086 100644 --- a/tests/InternalTest.cpp +++ b/tests/InternalTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include diff --git a/tests/YGAlignBaselineTest.cpp b/tests/YGAlignBaselineTest.cpp index dc56a8a0..35abfe76 100644 --- a/tests/YGAlignBaselineTest.cpp +++ b/tests/YGAlignBaselineTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include #include diff --git a/tests/YGAspectRatioTest.cpp b/tests/YGAspectRatioTest.cpp index 3d0916b5..a1c31ecd 100644 --- a/tests/YGAspectRatioTest.cpp +++ b/tests/YGAspectRatioTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include #include diff --git a/tests/YGBaselineFuncTest.cpp b/tests/YGBaselineFuncTest.cpp index db336951..eb15185e 100644 --- a/tests/YGBaselineFuncTest.cpp +++ b/tests/YGBaselineFuncTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include #include diff --git a/tests/YGComputedMarginTest.cpp b/tests/YGComputedMarginTest.cpp index c87118d7..b74e4174 100644 --- a/tests/YGComputedMarginTest.cpp +++ b/tests/YGComputedMarginTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include #include diff --git a/tests/YGComputedPaddingTest.cpp b/tests/YGComputedPaddingTest.cpp index faedb9e5..677ed3a6 100644 --- a/tests/YGComputedPaddingTest.cpp +++ b/tests/YGComputedPaddingTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include #include diff --git a/tests/YGDefaultValuesTest.cpp b/tests/YGDefaultValuesTest.cpp index 6237dcb4..249a7605 100644 --- a/tests/YGDefaultValuesTest.cpp +++ b/tests/YGDefaultValuesTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include diff --git a/tests/YGDirtiedTest.cpp b/tests/YGDirtiedTest.cpp index eec62454..8f0d5ed4 100644 --- a/tests/YGDirtiedTest.cpp +++ b/tests/YGDirtiedTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include diff --git a/tests/YGDirtyMarkingTest.cpp b/tests/YGDirtyMarkingTest.cpp index 6c51a39c..f17cf028 100644 --- a/tests/YGDirtyMarkingTest.cpp +++ b/tests/YGDirtyMarkingTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include diff --git a/tests/YGEdgeTest.cpp b/tests/YGEdgeTest.cpp index c41aa78f..47725926 100644 --- a/tests/YGEdgeTest.cpp +++ b/tests/YGEdgeTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include diff --git a/tests/YGFloatOptionalTest.cpp b/tests/YGFloatOptionalTest.cpp index e94af17f..6d245f83 100644 --- a/tests/YGFloatOptionalTest.cpp +++ b/tests/YGFloatOptionalTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include diff --git a/tests/YGHadOverflowTest.cpp b/tests/YGHadOverflowTest.cpp index bfdfcbc5..ca16a79d 100644 --- a/tests/YGHadOverflowTest.cpp +++ b/tests/YGHadOverflowTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include diff --git a/tests/YGInfiniteHeightTest.cpp b/tests/YGInfiniteHeightTest.cpp index 8d5d9153..34300fd9 100644 --- a/tests/YGInfiniteHeightTest.cpp +++ b/tests/YGInfiniteHeightTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include diff --git a/tests/YGLayoutDiffingTest.cpp b/tests/YGLayoutDiffingTest.cpp index a0280fe8..c8dc5fa7 100644 --- a/tests/YGLayoutDiffingTest.cpp +++ b/tests/YGLayoutDiffingTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include #include diff --git a/tests/YGLoggerTest.cpp b/tests/YGLoggerTest.cpp index 9776d1c2..5c319ba6 100644 --- a/tests/YGLoggerTest.cpp +++ b/tests/YGLoggerTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include #include diff --git a/tests/YGMeasureCacheTest.cpp b/tests/YGMeasureCacheTest.cpp index 15da2e5d..60ad6f47 100644 --- a/tests/YGMeasureCacheTest.cpp +++ b/tests/YGMeasureCacheTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include #include diff --git a/tests/YGMeasureModeTest.cpp b/tests/YGMeasureModeTest.cpp index f2927ce1..6ed7b2c0 100644 --- a/tests/YGMeasureModeTest.cpp +++ b/tests/YGMeasureModeTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include #include diff --git a/tests/YGMeasureTest.cpp b/tests/YGMeasureTest.cpp index 7595a745..38c28059 100644 --- a/tests/YGMeasureTest.cpp +++ b/tests/YGMeasureTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include #include diff --git a/tests/YGNodeCallbackTest.cpp b/tests/YGNodeCallbackTest.cpp index be019d19..5e765a0d 100644 --- a/tests/YGNodeCallbackTest.cpp +++ b/tests/YGNodeCallbackTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include #include diff --git a/tests/YGNodeChildTest.cpp b/tests/YGNodeChildTest.cpp index 6ddcf82f..cce9f33b 100644 --- a/tests/YGNodeChildTest.cpp +++ b/tests/YGNodeChildTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include diff --git a/tests/YGPersistenceTest.cpp b/tests/YGPersistenceTest.cpp index 338552c7..5ee6bf81 100644 --- a/tests/YGPersistenceTest.cpp +++ b/tests/YGPersistenceTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include #include diff --git a/tests/YGRelayoutTest.cpp b/tests/YGRelayoutTest.cpp index 51bd88d5..7a4d1d64 100644 --- a/tests/YGRelayoutTest.cpp +++ b/tests/YGRelayoutTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include diff --git a/tests/YGRoundingFunctionTest.cpp b/tests/YGRoundingFunctionTest.cpp index f64e8b47..21daeac6 100644 --- a/tests/YGRoundingFunctionTest.cpp +++ b/tests/YGRoundingFunctionTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include #include diff --git a/tests/YGRoundingMeasureFuncTest.cpp b/tests/YGRoundingMeasureFuncTest.cpp index 37c01bed..822e3701 100644 --- a/tests/YGRoundingMeasureFuncTest.cpp +++ b/tests/YGRoundingMeasureFuncTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include #include diff --git a/tests/YGStyleAccessorsTest.cpp b/tests/YGStyleAccessorsTest.cpp index 21bf066e..541f354f 100644 --- a/tests/YGStyleAccessorsTest.cpp +++ b/tests/YGStyleAccessorsTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include #include diff --git a/tests/YGStyleTest.cpp b/tests/YGStyleTest.cpp index 530d8de4..56aa299d 100644 --- a/tests/YGStyleTest.cpp +++ b/tests/YGStyleTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include #include diff --git a/tests/YGTraversalTest.cpp b/tests/YGTraversalTest.cpp index 33af7bd4..6b39a22f 100644 --- a/tests/YGTraversalTest.cpp +++ b/tests/YGTraversalTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include diff --git a/tests/YGTreeMutationTest.cpp b/tests/YGTreeMutationTest.cpp index a41bd540..bf07f39e 100644 --- a/tests/YGTreeMutationTest.cpp +++ b/tests/YGTreeMutationTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include diff --git a/tests/YGValueTest.cpp b/tests/YGValueTest.cpp index add2e75d..4ab4aa8c 100644 --- a/tests/YGValueTest.cpp +++ b/tests/YGValueTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include diff --git a/tests/YGZeroOutLayoutRecursivlyTest.cpp b/tests/YGZeroOutLayoutRecursivlyTest.cpp index 98efa2e8..84e19441 100644 --- a/tests/YGZeroOutLayoutRecursivlyTest.cpp +++ b/tests/YGZeroOutLayoutRecursivlyTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include diff --git a/testutil/build.gradle b/testutil/build.gradle index 5ec4134a..647d66d3 100644 --- a/testutil/build.gradle +++ b/testutil/build.gradle @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the diff --git a/testutil/src/main/cpp/CMakeLists.txt b/testutil/src/main/cpp/CMakeLists.txt index 71f09e86..3c430abb 100644 --- a/testutil/src/main/cpp/CMakeLists.txt +++ b/testutil/src/main/cpp/CMakeLists.txt @@ -1,9 +1,7 @@ -# # Copyright (c) Facebook, Inc. and its affiliates. # # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -# cmake_minimum_required(VERSION 3.4.1) diff --git a/testutil/src/main/cpp/include/yoga/testutil/testutil.h b/testutil/src/main/cpp/include/yoga/testutil/testutil.h index af42ba85..e3a320c9 100644 --- a/testutil/src/main/cpp/include/yoga/testutil/testutil.h +++ b/testutil/src/main/cpp/include/yoga/testutil/testutil.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once #include diff --git a/testutil/src/main/cpp/jni/jni.cpp b/testutil/src/main/cpp/jni/jni.cpp index 8a6a3b40..4c482fa2 100644 --- a/testutil/src/main/cpp/jni/jni.cpp +++ b/testutil/src/main/cpp/jni/jni.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include diff --git a/testutil/src/main/cpp/testutil/testutil.cpp b/testutil/src/main/cpp/testutil/testutil.cpp index 09061fb7..bfd9ed3a 100644 --- a/testutil/src/main/cpp/testutil/testutil.cpp +++ b/testutil/src/main/cpp/testutil/testutil.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include diff --git a/testutil/src/main/java/com/facebook/yoga/TestUtil.java b/testutil/src/main/java/com/facebook/yoga/TestUtil.java index 9dd30fde..d0d1618e 100644 --- a/testutil/src/main/java/com/facebook/yoga/TestUtil.java +++ b/testutil/src/main/java/com/facebook/yoga/TestUtil.java @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + package com.facebook.yoga; import com.facebook.soloader.SoLoader; diff --git a/util/SingleWriterValueList.cpp b/util/SingleWriterValueList.cpp index 136e5121..38fb9fbf 100644 --- a/util/SingleWriterValueList.cpp +++ b/util/SingleWriterValueList.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include "SingleWriterValueList.h" namespace facebook { diff --git a/util/SingleWriterValueList.h b/util/SingleWriterValueList.h index 21c09d08..26b7e88f 100644 --- a/util/SingleWriterValueList.h +++ b/util/SingleWriterValueList.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include #include diff --git a/util/SingleWriterValueListTest.cpp b/util/SingleWriterValueListTest.cpp index 004caa9d..398cc336 100644 --- a/util/SingleWriterValueListTest.cpp +++ b/util/SingleWriterValueListTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include #include diff --git a/website/src/components/Playground/webpack.config.js b/website/src/components/Playground/webpack.config.js index 7a22c0c9..cd29ddd9 100644 --- a/website/src/components/Playground/webpack.config.js +++ b/website/src/components/Playground/webpack.config.js @@ -1,3 +1,10 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + const path = require('path'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); diff --git a/website/src/pages/docs/index.css b/website/src/pages/docs/index.css index 3b3aea94..f9a9c8c2 100644 --- a/website/src/pages/docs/index.css +++ b/website/src/pages/docs/index.css @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ - + .docs-landing .heading { padding-top: 50px; padding-bottom: 50px; diff --git a/yoga/Bitfield.h b/yoga/Bitfield.h index da85a5bf..02645961 100644 --- a/yoga/Bitfield.h +++ b/yoga/Bitfield.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once #include diff --git a/yoga/CompactValue.h b/yoga/CompactValue.h index 899dcc58..646c8785 100644 --- a/yoga/CompactValue.h +++ b/yoga/CompactValue.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once #include "YGValue.h" diff --git a/yoga/Utils.cpp b/yoga/Utils.cpp index 8864155b..761f3515 100644 --- a/yoga/Utils.cpp +++ b/yoga/Utils.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include "Utils.h" using namespace facebook; diff --git a/yoga/Utils.h b/yoga/Utils.h index 899e832a..bce8dfca 100644 --- a/yoga/Utils.h +++ b/yoga/Utils.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once #include "YGNode.h" #include "Yoga-internal.h" diff --git a/yoga/YGConfig.cpp b/yoga/YGConfig.cpp index 4e805823..fb72e80c 100644 --- a/yoga/YGConfig.cpp +++ b/yoga/YGConfig.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include "YGConfig.h" YGConfig::YGConfig(YGLogger logger) : cloneNodeCallback_{nullptr} { diff --git a/yoga/YGConfig.h b/yoga/YGConfig.h index b1bce612..1b2d2b46 100644 --- a/yoga/YGConfig.h +++ b/yoga/YGConfig.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once #include "Yoga-internal.h" #include "Yoga.h" diff --git a/yoga/YGEnums.cpp b/yoga/YGEnums.cpp index bf5844c5..3c130129 100644 --- a/yoga/YGEnums.cpp +++ b/yoga/YGEnums.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include "YGEnums.h" const char* YGAlignToString(const YGAlign value) { diff --git a/yoga/YGEnums.h b/yoga/YGEnums.h index b3c57fb8..4241281d 100644 --- a/yoga/YGEnums.h +++ b/yoga/YGEnums.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once #include "YGMacros.h" diff --git a/yoga/YGFloatOptional.h b/yoga/YGFloatOptional.h index 60fcad99..e4cf0284 100644 --- a/yoga/YGFloatOptional.h +++ b/yoga/YGFloatOptional.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once #include diff --git a/yoga/YGLayout.cpp b/yoga/YGLayout.cpp index ee398868..e43213cd 100644 --- a/yoga/YGLayout.cpp +++ b/yoga/YGLayout.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include "YGLayout.h" #include "Utils.h" diff --git a/yoga/YGLayout.h b/yoga/YGLayout.h index 4b62cecc..658a31f2 100644 --- a/yoga/YGLayout.h +++ b/yoga/YGLayout.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once #include "Bitfield.h" #include "YGFloatOptional.h" diff --git a/yoga/YGMacros.h b/yoga/YGMacros.h index d56f3aeb..85881ea5 100644 --- a/yoga/YGMacros.h +++ b/yoga/YGMacros.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once #ifdef __cplusplus diff --git a/yoga/YGNode.cpp b/yoga/YGNode.cpp index bb240dfc..9296811a 100644 --- a/yoga/YGNode.cpp +++ b/yoga/YGNode.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include "YGNode.h" #include #include diff --git a/yoga/YGNode.h b/yoga/YGNode.h index cc5f3686..32c7770b 100644 --- a/yoga/YGNode.h +++ b/yoga/YGNode.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once #include #include diff --git a/yoga/YGNodePrint.cpp b/yoga/YGNodePrint.cpp index f91d0374..26efa485 100644 --- a/yoga/YGNodePrint.cpp +++ b/yoga/YGNodePrint.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #ifdef DEBUG #include "YGNodePrint.h" #include diff --git a/yoga/YGNodePrint.h b/yoga/YGNodePrint.h index 8df30e2c..3db504b4 100644 --- a/yoga/YGNodePrint.h +++ b/yoga/YGNodePrint.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #ifdef DEBUG #pragma once #include diff --git a/yoga/YGStyle.cpp b/yoga/YGStyle.cpp index a4a7a047..e8033bdf 100644 --- a/yoga/YGStyle.cpp +++ b/yoga/YGStyle.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include "YGStyle.h" #include "Utils.h" diff --git a/yoga/YGStyle.h b/yoga/YGStyle.h index b497b5c1..5914328f 100644 --- a/yoga/YGStyle.h +++ b/yoga/YGStyle.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once #include #include diff --git a/yoga/YGValue.cpp b/yoga/YGValue.cpp index 995f2113..37383a55 100644 --- a/yoga/YGValue.cpp +++ b/yoga/YGValue.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include "YGValue.h" const YGValue YGValueZero = {0, YGUnitPoint}; diff --git a/yoga/YGValue.h b/yoga/YGValue.h index 0405bc62..8502da77 100644 --- a/yoga/YGValue.h +++ b/yoga/YGValue.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once #include diff --git a/yoga/Yoga-internal.h b/yoga/Yoga-internal.h index e08027da..0b3368a0 100644 --- a/yoga/Yoga-internal.h +++ b/yoga/Yoga-internal.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once #include #include diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 1a374ab3..d3ddf7ad 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include "Yoga.h" #include "log.h" #include diff --git a/yoga/Yoga.h b/yoga/Yoga.h index 493e556c..68ed0a62 100644 --- a/yoga/Yoga.h +++ b/yoga/Yoga.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once #include diff --git a/yoga/event/event.cpp b/yoga/event/event.cpp index 48e8f41d..2b07e381 100644 --- a/yoga/event/event.cpp +++ b/yoga/event/event.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include "event.h" #include #include diff --git a/yoga/event/event.h b/yoga/event/event.h index 39b07394..f96b1165 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once #include diff --git a/yoga/internal/experiments-inl.h b/yoga/internal/experiments-inl.h index ebbeccbc..959d9c33 100644 --- a/yoga/internal/experiments-inl.h +++ b/yoga/internal/experiments-inl.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once #include "experiments.h" diff --git a/yoga/internal/experiments.cpp b/yoga/internal/experiments.cpp index 4b67eee5..16f196d5 100644 --- a/yoga/internal/experiments.cpp +++ b/yoga/internal/experiments.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include "experiments.h" #include "experiments-inl.h" diff --git a/yoga/internal/experiments.h b/yoga/internal/experiments.h index 7fd4cb37..1bdb7014 100644 --- a/yoga/internal/experiments.h +++ b/yoga/internal/experiments.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once #include diff --git a/yoga/log.cpp b/yoga/log.cpp index 45e5f7b1..20139776 100644 --- a/yoga/log.cpp +++ b/yoga/log.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #include "log.h" #include "Yoga.h" diff --git a/yoga/log.h b/yoga/log.h index effe23b5..ae33744c 100644 --- a/yoga/log.h +++ b/yoga/log.h @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + #pragma once #include "YGEnums.h" diff --git a/yogacore/build.gradle b/yogacore/build.gradle index 122383b3..96075d23 100644 --- a/yogacore/build.gradle +++ b/yogacore/build.gradle @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the From 688bd4ef729306123baf5cae6987b881460c88f6 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Tue, 22 Oct 2019 10:45:20 -0700 Subject: [PATCH 202/347] Add exception handling in vanilla jni Summary: Exception handling in vanilla jni ## Changelog: [Internal] [Added] Added exception handling for vanilla jni implementation in yoga Reviewed By: amir-shalem Differential Revision: D18036134 fbshipit-source-id: 965eaa2fddbc00b9ac0120b79678608e280d03db --- java/jni/YGJNIVanilla.cpp | 38 ++-- java/jni/corefunctions.cpp | 14 +- .../com/facebook/yoga/YogaExceptionTest.java | 165 ++++++++++++++++++ 3 files changed, 195 insertions(+), 22 deletions(-) create mode 100644 java/tests/com/facebook/yoga/YogaExceptionTest.java diff --git a/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp index 9835758f..9a38c575 100644 --- a/java/jni/YGJNIVanilla.cpp +++ b/java/jni/YGJNIVanilla.cpp @@ -352,25 +352,29 @@ static void jni_YGNodeCalculateLayoutJNI( jlongArray nativePointers, jobjectArray javaNodes) { - void* layoutContext = nullptr; - auto map = PtrJNodeMapVanilla{}; - if (nativePointers) { - size_t nativePointersSize = env->GetArrayLength(nativePointers); - jlong result[nativePointersSize]; - env->GetLongArrayRegion(nativePointers, 0, nativePointersSize, result); + try { + void* layoutContext = nullptr; + auto map = PtrJNodeMapVanilla{}; + if (nativePointers) { + size_t nativePointersSize = env->GetArrayLength(nativePointers); + jlong result[nativePointersSize]; + env->GetLongArrayRegion(nativePointers, 0, nativePointersSize, result); - map = PtrJNodeMapVanilla{result, nativePointersSize, javaNodes}; - layoutContext = ↦ + map = PtrJNodeMapVanilla{result, nativePointersSize, javaNodes}; + layoutContext = ↦ + } + + const YGNodeRef root = _jlong2YGNodeRef(nativePointer); + YGNodeCalculateLayoutWithContext( + root, + static_cast(width), + static_cast(height), + YGNodeStyleGetDirection(_jlong2YGNodeRef(nativePointer)), + layoutContext); + YGTransferLayoutOutputsRecursive(env, obj, root, layoutContext); + } catch (jthrowable throwable) { + env->Throw(throwable); } - - const YGNodeRef root = _jlong2YGNodeRef(nativePointer); - YGNodeCalculateLayoutWithContext( - root, - static_cast(width), - static_cast(height), - YGNodeStyleGetDirection(_jlong2YGNodeRef(nativePointer)), - layoutContext); - YGTransferLayoutOutputsRecursive(env, obj, root, layoutContext); } static void jni_YGNodeMarkDirtyJNI( diff --git a/java/jni/corefunctions.cpp b/java/jni/corefunctions.cpp index 37dc12d4..6a250b1d 100644 --- a/java/jni/corefunctions.cpp +++ b/java/jni/corefunctions.cpp @@ -62,12 +62,16 @@ void logErrorMessageAndDie(const char* message) { } void assertNoPendingJniException(JNIEnv* env) { - // This method cannot call any other method of the library, since other - // methods of the library use it to check for exceptions too - if (env->ExceptionCheck()) { - env->ExceptionDescribe(); - logErrorMessageAndDie("Aborting due to pending Java exception in JNI"); + if (env->ExceptionCheck() == JNI_FALSE) { + return; } + + auto throwable = env->ExceptionOccurred(); + if (!throwable) { + logErrorMessageAndDie("Unable to get pending JNI exception."); + } + env->ExceptionClear(); + throw throwable; } } // namespace vanillajni diff --git a/java/tests/com/facebook/yoga/YogaExceptionTest.java b/java/tests/com/facebook/yoga/YogaExceptionTest.java new file mode 100644 index 00000000..c7b650f6 --- /dev/null +++ b/java/tests/com/facebook/yoga/YogaExceptionTest.java @@ -0,0 +1,165 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.yoga; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotSame; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicReference; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class YogaExceptionTest { + @Parameterized.Parameters(name = "{0}") + public static Iterable nodeFactories() { + return TestParametrization.nodeFactories(); + } + + @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory; + + @Test(expected = RuntimeException.class) + public void testBaselineThrows() { + final YogaNode root = createNode(); + root.setFlexDirection(YogaFlexDirection.ROW); + root.setAlignItems(YogaAlign.BASELINE); + + final YogaNode child1 = createNode(); + root.addChildAt(child1, 0); + + final YogaNode child2 = createNode(); + child2.setBaselineFunction(new YogaBaselineFunction() { + public float baseline(YogaNode node, float width, float height) { + throw new RuntimeException(); + } + }); + root.addChildAt(child2, 1); + + root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED); + } + + @Test + public void testBaselineThrowsAndStops() { + final YogaNode root = createNode(); + root.setFlexDirection(YogaFlexDirection.ROW); + root.setAlignItems(YogaAlign.BASELINE); + + final YogaNode child1 = createNode(); + root.addChildAt(child1, 0); + + final YogaNode child2 = createNode(); + final AtomicReference expected = new AtomicReference(); + child2.setBaselineFunction(new YogaBaselineFunction() { + public float baseline(YogaNode node, float width, float height) { + RuntimeException e = new RuntimeException(); + expected.set(e); + throw e; + } + }); + root.addChildAt(child2, 1); + + final YogaNode child3 = createNode(); + final AtomicBoolean child3Called = new AtomicBoolean(); + child3.setBaselineFunction(new YogaBaselineFunction() { + public float baseline(YogaNode node, float width, float height) { + child3Called.set(true); + return 1.0f; + } + }); + root.addChildAt(child3, 2); + + try { + root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED); + fail(); + } catch (RuntimeException e) { + assertEquals(expected.get(), e); + } + assertFalse(child3Called.get()); + } + + @Test(expected = RuntimeException.class) + public void testMeasureThrows() { + final YogaNode node = createNode(); + node.setMeasureFunction(new YogaMeasureFunction() { + public long measure( + YogaNode node, + float width, + YogaMeasureMode widthMode, + float height, + YogaMeasureMode heightMode) { + throw new RuntimeException(); + } + }); + node.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED); + } + + @Test + public void testMeasureThrowsAndStops() { + final YogaNode root = createNode(); + root.setFlexDirection(YogaFlexDirection.ROW); + root.setAlignItems(YogaAlign.BASELINE); + + final YogaNode child1 = createNode(); + root.addChildAt(child1, 0); + + final YogaNode child2 = createNode(); + final AtomicReference expected = new AtomicReference(); + child2.setMeasureFunction(new YogaMeasureFunction() { + public long measure( + YogaNode node, + float width, + YogaMeasureMode widthMode, + float height, + YogaMeasureMode heightMode) { + RuntimeException e = new RuntimeException(); + expected.set(e); + throw e; + } + }); + root.addChildAt(child2, 1); + + final YogaNode child3 = createNode(); + final AtomicBoolean child3Called = new AtomicBoolean(); + child3.setMeasureFunction(new YogaMeasureFunction() { + public long measure( + YogaNode node, + float width, + YogaMeasureMode widthMode, + float height, + YogaMeasureMode heightMode) { + child3Called.set(true); + return 1; + } + }); + root.addChildAt(child3, 2); + + try { + root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED); + fail(); + } catch (RuntimeException e) { + assertEquals(expected.get(), e); + } + assertFalse(child3Called.get()); + } + + private YogaNode createNode() { + return mNodeFactory.create(); + } + + private YogaNode createNode(YogaConfig config) { + return mNodeFactory.create(config); + } +} From 27f42c90dbbf28b0e43c62b0f31f7862c69be184 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 23 Oct 2019 02:35:21 -0700 Subject: [PATCH 203/347] Remove setStyleInputs API Summary: setStyleInputs batching API was added to reduce the number of jni calls and although it improved performance in yoga world but was not impactful in litho and is not used anywhere. Removing this saves around 500 bytes per architecture #Changelog: [Internal][Yoga] Removed unused code setStyleInputs batching API form Yoga Reviewed By: amir-shalem Differential Revision: D18036536 fbshipit-source-id: 7436b55dcd464dd9f9cc46406d4fd78d12babe55 --- java/com/facebook/yoga/YogaNode.java | 2 - java/com/facebook/yoga/YogaNodeJNIBase.java | 7 - java/jni/YGJNI.cpp | 11 - java/jni/YGJNI.h | 211 -------- java/jni/YGJNIVanilla.cpp | 14 - .../com/facebook/yoga/BatchingAPITests.java | 501 ------------------ 6 files changed, 746 deletions(-) delete mode 100644 java/tests/com/facebook/yoga/BatchingAPITests.java diff --git a/java/com/facebook/yoga/YogaNode.java b/java/com/facebook/yoga/YogaNode.java index 3b706815..baa0c517 100644 --- a/java/com/facebook/yoga/YogaNode.java +++ b/java/com/facebook/yoga/YogaNode.java @@ -213,7 +213,5 @@ public abstract class YogaNode { public abstract void print(); - public abstract void setStyleInputs(float[] styleInputs, int size); - public abstract YogaNode cloneWithoutChildren(); } diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index 036e6114..c08e43de 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -678,13 +678,6 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { YogaNative.jni_YGNodePrint(mNativePointer); } - public void setStyleInputs(float[] styleInputsArray, int size) { - if (useVanillaJNI) - YogaNative.jni_YGNodeSetStyleInputsJNI(mNativePointer, styleInputsArray, size); - else - YogaNative.jni_YGNodeSetStyleInputs(mNativePointer, styleInputsArray, size); - } - /** * This method replaces the child at childIndex position with the newNode received by parameter. * This is different than calling removeChildAt and addChildAt because this method ONLY replaces diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp index a377f17a..8691b8bf 100644 --- a/java/jni/YGJNI.cpp +++ b/java/jni/YGJNI.cpp @@ -531,16 +531,6 @@ void jni_YGConfigSetLogger( } } -void jni_YGNodeSetStyleInputs( - alias_ref, - jlong nativePointer, - alias_ref styleInputs, - jint size) { - float result[size]; - styleInputs->getRegion(0, size, result); - YGNodeSetStyleInputs(_jlong2YGNodeRef(nativePointer), result, size); -} - jlong jni_YGNodeStyleGetMargin(jlong nativePointer, jint edge) { YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); if (!YGNodeEdges{yogaNodeRef}.has(YGNodeEdges::MARGIN)) { @@ -706,7 +696,6 @@ jint YGJNI::registerNativeMethods(JavaVM* vm) { YGMakeCriticalNativeMethod(jni_YGNodeStyleSetAspectRatio), YGMakeCriticalNativeMethod(jni_YGNodePrint), YGMakeNativeMethod(jni_YGNodeClone), - YGMakeNativeMethod(jni_YGNodeSetStyleInputs), YGMakeNativeMethod(jni_YGConfigNew), YGMakeNativeMethod(jni_YGConfigFree), YGMakeNativeMethod(jni_YGConfigSetExperimentalFeatureEnabled), diff --git a/java/jni/YGJNI.h b/java/jni/YGJNI.h index 7bafdd52..dbff73f9 100644 --- a/java/jni/YGJNI.h +++ b/java/jni/YGJNI.h @@ -5,49 +5,6 @@ * LICENSE file in the root directory of this source tree. */ -enum YGStyleInput { - LayoutDirection, - FlexDirection, - Flex, - FlexGrow, - FlexShrink, - FlexBasis, - FlexBasisPercent, - FlexBasisAuto, - FlexWrap, - Width, - WidthPercent, - WidthAuto, - MinWidth, - MinWidthPercent, - MaxWidth, - MaxWidthPercent, - Height, - HeightPercent, - HeightAuto, - MinHeight, - MinHeightPercent, - MaxHeight, - MaxHeightPercent, - JustifyContent, - AlignItems, - AlignSelf, - AlignContent, - PositionType, - AspectRatio, - Overflow, - Display, - Margin, - MarginPercent, - MarginAuto, - Padding, - PaddingPercent, - Border, - Position, - PositionPercent, - IsReferenceBaseline, -}; - const short int LAYOUT_EDGE_SET_FLAG_INDEX = 0; const short int LAYOUT_WIDTH_INDEX = 1; const short int LAYOUT_HEIGHT_INDEX = 2; @@ -113,171 +70,3 @@ struct YogaValue { } }; } // namespace - -static void YGNodeSetStyleInputs( - const YGNodeRef node, - float* styleInputs, - int size) { - const auto end = styleInputs + size; - auto edgesSet = YGNodeEdges{node}; - while (styleInputs < end) { - auto styleInputKey = static_cast((int) *styleInputs++); - switch (styleInputKey) { - case LayoutDirection: - YGNodeStyleSetDirection(node, static_cast(*styleInputs++)); - break; - case FlexDirection: - YGNodeStyleSetFlexDirection( - node, static_cast(*styleInputs++)); - break; - case Flex: - YGNodeStyleSetFlex(node, *styleInputs++); - break; - case FlexGrow: - YGNodeStyleSetFlexGrow(node, *styleInputs++); - break; - case FlexShrink: - YGNodeStyleSetFlexShrink(node, *styleInputs++); - break; - case FlexBasis: - YGNodeStyleSetFlexBasis(node, *styleInputs++); - break; - case FlexBasisPercent: - YGNodeStyleSetFlexBasisPercent(node, *styleInputs++); - break; - case FlexBasisAuto: - YGNodeStyleSetFlexBasisAuto(node); - break; - case FlexWrap: - YGNodeStyleSetFlexWrap(node, static_cast(*styleInputs++)); - break; - case Width: - YGNodeStyleSetWidth(node, *styleInputs++); - break; - case WidthPercent: - YGNodeStyleSetWidthPercent(node, *styleInputs++); - break; - case WidthAuto: - YGNodeStyleSetWidthAuto(node); - break; - case MinWidth: - YGNodeStyleSetMinWidth(node, *styleInputs++); - break; - case MinWidthPercent: - YGNodeStyleSetMinWidthPercent(node, *styleInputs++); - break; - case MaxWidth: - YGNodeStyleSetMaxWidth(node, *styleInputs++); - break; - case MaxWidthPercent: - YGNodeStyleSetMaxWidthPercent(node, *styleInputs++); - break; - case Height: - YGNodeStyleSetHeight(node, *styleInputs++); - break; - case HeightPercent: - YGNodeStyleSetHeightPercent(node, *styleInputs++); - break; - case HeightAuto: - YGNodeStyleSetHeightAuto(node); - break; - case MinHeight: - YGNodeStyleSetMinHeight(node, *styleInputs++); - break; - case MinHeightPercent: - YGNodeStyleSetMinHeightPercent(node, *styleInputs++); - break; - case MaxHeight: - YGNodeStyleSetMaxHeight(node, *styleInputs++); - break; - case MaxHeightPercent: - YGNodeStyleSetMaxHeightPercent(node, *styleInputs++); - break; - case JustifyContent: - YGNodeStyleSetJustifyContent( - node, static_cast(*styleInputs++)); - break; - case AlignItems: - YGNodeStyleSetAlignItems(node, static_cast(*styleInputs++)); - break; - case AlignSelf: - YGNodeStyleSetAlignSelf(node, static_cast(*styleInputs++)); - break; - case AlignContent: - YGNodeStyleSetAlignContent(node, static_cast(*styleInputs++)); - break; - case PositionType: - YGNodeStyleSetPositionType( - node, static_cast(*styleInputs++)); - break; - case AspectRatio: - YGNodeStyleSetAspectRatio(node, *styleInputs++); - break; - case Overflow: - YGNodeStyleSetOverflow(node, static_cast(*styleInputs++)); - break; - case Display: - YGNodeStyleSetDisplay(node, static_cast(*styleInputs++)); - break; - case Margin: { - auto edge = static_cast(*styleInputs++); - float marginValue = *styleInputs++; - edgesSet.add(YGNodeEdges::MARGIN); - YGNodeStyleSetMargin(node, edge, marginValue); - break; - } - case MarginPercent: { - auto edge = static_cast(*styleInputs++); - float marginPercent = *styleInputs++; - edgesSet.add(YGNodeEdges::MARGIN); - YGNodeStyleSetMarginPercent(node, edge, marginPercent); - break; - } - case MarginAuto: { - edgesSet.add(YGNodeEdges::MARGIN); - YGNodeStyleSetMarginAuto(node, static_cast(*styleInputs++)); - break; - } - case Padding: { - auto edge = static_cast(*styleInputs++); - float paddingValue = *styleInputs++; - edgesSet.add(YGNodeEdges::PADDING); - YGNodeStyleSetPadding(node, edge, paddingValue); - break; - } - case PaddingPercent: { - auto edge = static_cast(*styleInputs++); - float paddingPercent = *styleInputs++; - edgesSet.add(YGNodeEdges::PADDING); - YGNodeStyleSetPaddingPercent(node, edge, paddingPercent); - break; - } - case Border: { - auto edge = static_cast(*styleInputs++); - float borderValue = *styleInputs++; - edgesSet.add(YGNodeEdges::BORDER); - YGNodeStyleSetBorder(node, edge, borderValue); - break; - } - case Position: { - auto edge = static_cast(*styleInputs++); - float positionValue = *styleInputs++; - YGNodeStyleSetPosition(node, edge, positionValue); - break; - } - case PositionPercent: { - auto edge = static_cast(*styleInputs++); - float positionPercent = *styleInputs++; - YGNodeStyleSetPositionPercent(node, edge, positionPercent); - break; - } - case IsReferenceBaseline: { - YGNodeSetIsReferenceBaseline(node, *styleInputs++ == 1 ? true : false); - break; - } - default: - break; - } - } - edgesSet.setOn(node); -} diff --git a/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp index 9a38c575..3ac88ac1 100644 --- a/java/jni/YGJNIVanilla.cpp +++ b/java/jni/YGJNIVanilla.cpp @@ -721,17 +721,6 @@ static jlong jni_YGNodeCloneJNI(JNIEnv* env, jobject obj, jlong nativePointer) { // Yoga specific properties, not compatible with flexbox specification YG_NODE_JNI_STYLE_PROP(jfloat, float, AspectRatio); -static void jni_YGNodeSetStyleInputsJNI( - JNIEnv* env, - jobject obj, - jlong nativePointer, - jfloatArray styleInputs, - jint size) { - float result[size]; - env->GetFloatArrayRegion(styleInputs, 0, size, result); - YGNodeSetStyleInputs(_jlong2YGNodeRef(nativePointer), result, size); -} - static JNINativeMethod methods[] = { {"jni_YGConfigNewJNI", "()J", (void*) jni_YGConfigNewJNI}, {"jni_YGConfigFreeJNI", "(J)V", (void*) jni_YGConfigFreeJNI}, @@ -969,9 +958,6 @@ static JNINativeMethod methods[] = { "(JZ)V", (void*) jni_YGNodeSetHasBaselineFuncJNI}, {"jni_YGNodePrintJNI", "(J)V", (void*) jni_YGNodePrintJNI}, - {"jni_YGNodeSetStyleInputsJNI", - "(J[FI)V", - (void*) jni_YGNodeSetStyleInputsJNI}, {"jni_YGNodeCloneJNI", "(J)J", (void*) jni_YGNodeCloneJNI}, }; diff --git a/java/tests/com/facebook/yoga/BatchingAPITests.java b/java/tests/com/facebook/yoga/BatchingAPITests.java deleted file mode 100644 index 93e00db0..00000000 --- a/java/tests/com/facebook/yoga/BatchingAPITests.java +++ /dev/null @@ -1,501 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -package com.facebook.yoga; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import static org.junit.Assert.assertEquals; - -@RunWith(Parameterized.class) -public class BatchingAPITests { - - @Parameterized.Parameters(name = "{0}") - public static Iterable nodeFactories() { - return TestParametrization.nodeFactories(); - } - - @Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory; - - @Test - public void testStyleInputLayoutDirection() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.LAYOUT_DIRECTION, YogaDirection.LTR.intValue()}; - root.setStyleInputs(arr, 2); - root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED); - assertEquals(root.getLayoutDirection(), YogaDirection.LTR); - } - - @Test - public void testStyleInputFlexDirection() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.FLEX_DIRECTION, YogaFlexDirection.ROW.intValue()}; - root.setStyleInputs(arr, 2); - assertEquals(root.getFlexDirection(), YogaFlexDirection.ROW); - } - - @Test - public void testStyleInputFlex() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.FLEX, 5f}; - root.setStyleInputs(arr, 2); - assertEquals(root.getFlex(), 5f, 0.0f); - } - - @Test - public void testStyleInputFlexGrow() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.FLEX_GROW, 5f}; - root.setStyleInputs(arr, 2); - assertEquals(root.getFlexGrow(), 5f, 0.0f); - } - - @Test - public void testStyleInputFlexShrink() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.FLEX_SHRINK, 5f}; - root.setStyleInputs(arr, 2); - assertEquals(root.getFlexShrink(), 5f, 0.0f); - } - - @Test - public void testStyleInputFlexBasis() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.FLEX_BASIS, 5f}; - root.setStyleInputs(arr, 2); - assertEquals(root.getFlexBasis(), new YogaValue(5f, YogaUnit.POINT)); - } - - @Test - public void testStyleInputFlexBasisPercent() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.FLEX_BASIS_PERCENT, 5f}; - root.setStyleInputs(arr, 2); - assertEquals(root.getFlexBasis(), new YogaValue(5f, YogaUnit.PERCENT)); - } - - @Test - public void testStyleInputFlexBasisAuto() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.FLEX_BASIS_AUTO}; - root.setStyleInputs(arr, 1); - assertEquals(root.getFlexBasis(), YogaValue.AUTO); - } - - @Test - public void testStyleInputFlexWrap() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.FLEX_WRAP, YogaWrap.WRAP.intValue()}; - root.setStyleInputs(arr, 2); - assertEquals(root.getWrap(), YogaWrap.WRAP); - } - - @Test - public void testStyleInputWidth() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.WIDTH, 50f}; - root.setStyleInputs(arr, 2); - assertEquals(root.getWidth(), new YogaValue(50f, YogaUnit.POINT)); - } - - @Test - public void testStyleInputWidthPercent() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.WIDTH_PERCENT, 5f}; - root.setStyleInputs(arr, 2); - assertEquals(root.getWidth(), new YogaValue(5f, YogaUnit.PERCENT)); - } - - @Test - public void testStyleInputWidthAuto() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.WIDTH_AUTO}; - root.setStyleInputs(arr, 1); - assertEquals(root.getWidth(), YogaValue.AUTO); - } - - @Test - public void testStyleInputMinWidth() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.MIN_WIDTH, 50f}; - root.setStyleInputs(arr, 2); - assertEquals(root.getMinWidth(), new YogaValue(50f, YogaUnit.POINT)); - } - - @Test - public void testStyleInputMinWidthPercent() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.MIN_WIDTH_PERCENT, 5f}; - root.setStyleInputs(arr, 2); - assertEquals(root.getMinWidth(), new YogaValue(5f, YogaUnit.PERCENT)); - } - - @Test - public void testStyleInputMaxWidth() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.MAX_WIDTH, 50f}; - root.setStyleInputs(arr, 2); - assertEquals(root.getMaxWidth(), new YogaValue(50f, YogaUnit.POINT)); - } - - @Test - public void testStyleInputMaxWidthPercent() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.MAX_WIDTH_PERCENT, 5f}; - root.setStyleInputs(arr, 2); - assertEquals(root.getMaxWidth(), new YogaValue(5f, YogaUnit.PERCENT)); - } - - @Test - public void testStyleInputHeight() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.HEIGHT, 50f}; - root.setStyleInputs(arr, 2); - assertEquals(root.getHeight(), new YogaValue(50f, YogaUnit.POINT)); - } - - @Test - public void testStyleInputHeightPercent() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.HEIGHT_PERCENT, 5f}; - root.setStyleInputs(arr, 2); - assertEquals(root.getHeight(), new YogaValue(5f, YogaUnit.PERCENT)); - } - - @Test - public void testStyleInputHeightAuto() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.HEIGHT_AUTO}; - root.setStyleInputs(arr, 1); - assertEquals(root.getHeight(), YogaValue.AUTO); - } - - @Test - public void testStyleInputMinHeight() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.MIN_HEIGHT, 50f}; - root.setStyleInputs(arr, 2); - assertEquals(root.getMinHeight(), new YogaValue(50f, YogaUnit.POINT)); - } - - @Test - public void testStyleInputMinHeightPercent() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.MIN_HEIGHT_PERCENT, 5f}; - root.setStyleInputs(arr, 2); - assertEquals(root.getMinHeight(), new YogaValue(5f, YogaUnit.PERCENT)); - } - - @Test - public void testStyleInputMaxHeight() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.MAX_HEIGHT, 50f}; - root.setStyleInputs(arr, 2); - assertEquals(root.getMaxHeight(), new YogaValue(50f, YogaUnit.POINT)); - } - - @Test - public void testStyleInputMaxHeightPercent() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.MAX_HEIGHT_PERCENT, 5f}; - root.setStyleInputs(arr, 2); - assertEquals(root.getMaxHeight(), new YogaValue(5f, YogaUnit.PERCENT)); - } - - @Test - public void testStyleInputJustiyContent() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.JUSTIFY_CONTENT, YogaJustify.CENTER.intValue()}; - root.setStyleInputs(arr, 2); - assertEquals(root.getJustifyContent(), YogaJustify.CENTER); - } - - @Test - public void testStyleInputAlignItems() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.ALIGN_ITEMS, YogaAlign.BASELINE.intValue()}; - root.setStyleInputs(arr, 2); - assertEquals(root.getAlignItems(), YogaAlign.BASELINE); - } - - @Test - public void testStyleInputAlignSelf() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.ALIGN_SELF, YogaAlign.BASELINE.intValue()}; - root.setStyleInputs(arr, 2); - assertEquals(root.getAlignSelf(), YogaAlign.BASELINE); - } - - @Test - public void testStyleInputAlignContent() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.ALIGN_CONTENT, YogaAlign.BASELINE.intValue()}; - root.setStyleInputs(arr, 2); - assertEquals(root.getAlignContent(), YogaAlign.BASELINE); - } - - @Test - public void testStyleInputPositionType() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.POSITION_TYPE, YogaPositionType.ABSOLUTE.intValue()}; - root.setStyleInputs(arr, 2); - assertEquals(root.getPositionType(), YogaPositionType.ABSOLUTE); - } - - @Test - public void testStyleInputAspectRatio() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.ASPECT_RATIO, 2f}; - root.setStyleInputs(arr, 2); - assertEquals(root.getAspectRatio(), 2f, 0.0f); - } - - @Test - public void testStyleInputOverflow() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.OVERFLOW, YogaOverflow.HIDDEN.intValue()}; - root.setStyleInputs(arr, 2); - assertEquals(root.getOverflow(), YogaOverflow.HIDDEN); - } - - @Test - public void testStyleInputDisplay() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.DISPLAY, YogaDisplay.NONE.intValue()}; - root.setStyleInputs(arr, 2); - assertEquals(root.getDisplay(), YogaDisplay.NONE); - } - - @Test - public void testStyleInputMargin() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.MARGIN, YogaEdge.LEFT.intValue(), 12f}; - root.setStyleInputs(arr, 3); - assertEquals(root.getMargin(YogaEdge.LEFT), new YogaValue(12f, YogaUnit.POINT)); - } - - @Test - public void testStyleInputMarginPercent() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.MARGIN_PERCENT, YogaEdge.LEFT.intValue(), 12f}; - root.setStyleInputs(arr, 3); - assertEquals(root.getMargin(YogaEdge.LEFT), new YogaValue(12f, YogaUnit.PERCENT)); - } - - @Test - public void testStyleInputMarginAuto() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.MARGIN_AUTO, YogaEdge.LEFT.intValue()}; - root.setStyleInputs(arr, 2); - assertEquals(root.getMargin(YogaEdge.LEFT), YogaValue.AUTO); - } - - @Test - public void testStyleInputPadding() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.PADDING, YogaEdge.LEFT.intValue(), 12f}; - root.setStyleInputs(arr, 3); - assertEquals(root.getPadding(YogaEdge.LEFT), new YogaValue(12f, YogaUnit.POINT)); - } - - @Test - public void testStyleInputPaddingPercent() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.PADDING_PERCENT, YogaEdge.LEFT.intValue(), 12f}; - root.setStyleInputs(arr, 3); - assertEquals(root.getPadding(YogaEdge.LEFT), new YogaValue(12f, YogaUnit.PERCENT)); - } - - @Test - public void testStyleInputBorder() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.BORDER, YogaEdge.LEFT.intValue(), 12f}; - root.setStyleInputs(arr, 3); - assertEquals(root.getBorder(YogaEdge.LEFT), 12f, 0.0f); - } - - @Test - public void testStyleInputPosition() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.POSITION, YogaEdge.LEFT.intValue(), 12f}; - root.setStyleInputs(arr, 3); - assertEquals(root.getPosition(YogaEdge.LEFT), new YogaValue(12f, YogaUnit.POINT)); - } - - @Test - public void testStyleInputPositionPercent() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.POSITION_PERCENT, YogaEdge.LEFT.intValue(), 12f}; - root.setStyleInputs(arr, 3); - assertEquals(root.getPosition(YogaEdge.LEFT), new YogaValue(12f, YogaUnit.PERCENT)); - } - - @Test - public void testStyleInputIsReferenceBaseline() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - float[] arr = new float[]{YogaStyleInputs.IS_REFERENCE_BASELINE, 1f}; - root.setStyleInputs(arr, 2); - assertEquals(root.isReferenceBaseline(), true); - } - - @Test - public void testStyleInputs() { - YogaConfig config = YogaConfigFactory.create(); - final YogaNode root = createNode(config); - int count = 0; - float[] arr = new float[100]; - arr[count++] = YogaStyleInputs.FLEX_DIRECTION; - arr[count++] = YogaFlexDirection.ROW.intValue(); - - arr[count++] = YogaStyleInputs.FLEX; - arr[count++] = 5f; - - arr[count++] = YogaStyleInputs.FLEX_GROW; - arr[count++] = 5f; - - arr[count++] = YogaStyleInputs.FLEX_SHRINK; - arr[count++] = 5f; - - arr[count++] = YogaStyleInputs.FLEX_BASIS_AUTO; - - arr[count++] = YogaStyleInputs.FLEX_WRAP; - arr[count++] = YogaWrap.WRAP.intValue(); - - arr[count++] = YogaStyleInputs.WIDTH; - arr[count++] = 50f; - - arr[count++] = YogaStyleInputs.MIN_WIDTH; - arr[count++] = 50f; - - arr[count++] = YogaStyleInputs.MAX_WIDTH; - arr[count++] = 50f; - - arr[count++] = YogaStyleInputs.HEIGHT; - arr[count++] = 5f; - - arr[count++] = YogaStyleInputs.MIN_HEIGHT; - arr[count++] = 50f; - - arr[count++] = YogaStyleInputs.MAX_HEIGHT; - arr[count++] = 50f; - - arr[count++] = YogaStyleInputs.JUSTIFY_CONTENT; - arr[count++] = YogaJustify.CENTER.intValue(); - - arr[count++] = YogaStyleInputs.ALIGN_ITEMS; - arr[count++] = YogaAlign.BASELINE.intValue(); - - arr[count++] = YogaStyleInputs.ALIGN_SELF; - arr[count++] = YogaAlign.BASELINE.intValue(); - - arr[count++] = YogaStyleInputs.ALIGN_CONTENT; - arr[count++] = YogaAlign.BASELINE.intValue(); - - arr[count++] = YogaStyleInputs.POSITION_TYPE; - arr[count++] = YogaPositionType.ABSOLUTE.intValue(); - - arr[count++] = YogaStyleInputs.ASPECT_RATIO; - arr[count++] = 2f; - - arr[count++] = YogaStyleInputs.OVERFLOW; - arr[count++] = YogaOverflow.HIDDEN.intValue(); - - arr[count++] = YogaStyleInputs.DISPLAY; - arr[count++] = YogaDisplay.NONE.intValue(); - - arr[count++] = YogaStyleInputs.MARGIN_AUTO; - arr[count++] = YogaEdge.LEFT.intValue(); - - arr[count++] = YogaStyleInputs.PADDING; - arr[count++] = YogaEdge.LEFT.intValue(); - arr[count++] = 12f; - - arr[count++] = YogaStyleInputs.BORDER; - arr[count++] = YogaEdge.LEFT.intValue(); - arr[count++] = 12f; - - arr[count++] = YogaStyleInputs.POSITION_PERCENT; - arr[count++] = YogaEdge.LEFT.intValue(); - arr[count++] = 12f; - - arr[count++] = YogaStyleInputs.IS_REFERENCE_BASELINE; - arr[count++] = 1f; - - root.setStyleInputs(arr, count); - - assertEquals(root.getFlexDirection(), YogaFlexDirection.ROW); - assertEquals(root.getFlex(), 5f, 0.0f); - assertEquals(root.getFlexGrow(), 5f, 0.0f); - assertEquals(root.getFlexShrink(), 5f, 0.0f); - assertEquals(root.getFlexBasis(), YogaValue.AUTO); - assertEquals(root.getWrap(), YogaWrap.WRAP); - assertEquals(root.getWidth(), new YogaValue(50f, YogaUnit.POINT)); - assertEquals(root.getMinWidth(), new YogaValue(50f, YogaUnit.POINT)); - assertEquals(root.getMaxWidth(), new YogaValue(50f, YogaUnit.POINT)); - assertEquals(root.getHeight(), new YogaValue(5f, YogaUnit.POINT)); - assertEquals(root.getMinHeight(), new YogaValue(50f, YogaUnit.POINT)); - assertEquals(root.getMaxHeight(), new YogaValue(50f, YogaUnit.POINT)); - assertEquals(root.getJustifyContent(), YogaJustify.CENTER); - assertEquals(root.getAlignItems(), YogaAlign.BASELINE); - assertEquals(root.getAlignSelf(), YogaAlign.BASELINE); - assertEquals(root.getAlignContent(), YogaAlign.BASELINE); - assertEquals(root.getPositionType(), YogaPositionType.ABSOLUTE); - assertEquals(root.getAspectRatio(), 2f, 0.0f); - assertEquals(root.getOverflow(), YogaOverflow.HIDDEN); - assertEquals(root.getDisplay(), YogaDisplay.NONE); - assertEquals(root.getMargin(YogaEdge.LEFT), YogaValue.AUTO); - assertEquals(root.getPadding(YogaEdge.LEFT), new YogaValue(12f, YogaUnit.POINT)); - assertEquals(root.getBorder(YogaEdge.LEFT), 12f, 0.0f); - assertEquals(root.getPosition(YogaEdge.LEFT), new YogaValue(12f, YogaUnit.PERCENT)); - assertEquals(root.isReferenceBaseline(), true); - } - - private YogaNode createNode(YogaConfig config) { - return mNodeFactory.create(config); - } -} From fb07dcff40a288658e24e3190e6c1929f25ec183 Mon Sep 17 00:00:00 2001 From: Scott Wolchok Date: Mon, 28 Oct 2019 12:38:05 -0700 Subject: [PATCH 204/347] Fix data race with gCurrentGenerationCount Summary: Yoga layout can be invoked on multiple threads, and gCurrentGenerationCount is a shared global without synchronization. Changelog: [General] [Fixed] - Fix an internal thread safety issue in Yoga Reviewed By: SidharthGuglani Differential Revision: D18092734 fbshipit-source-id: 85753d139549b4e5507f97a56d589fb6854557fa --- yoga/Yoga.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index d3ddf7ad..e0a06b43 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include "Utils.h" #include "YGNode.h" @@ -927,7 +928,7 @@ bool YGNodeLayoutGetDidLegacyStretchFlagAffectLayout(const YGNodeRef node) { return node->getLayout().doesLegacyStretchFlagAffectsLayout(); } -uint32_t gCurrentGenerationCount = 0; +std::atomic gCurrentGenerationCount(0); bool YGLayoutNodeInternal( const YGNodeRef node, @@ -1846,7 +1847,7 @@ static float YGNodeComputeFlexBasisForChildren( const uint32_t generationCount) { float totalOuterFlexBasis = 0.0f; YGNodeRef singleFlexChild = nullptr; - const YGVector &children = node->getChildren(); + const YGVector& children = node->getChildren(); YGMeasureMode measureModeMainDim = YGFlexDirectionIsRow(mainAxis) ? widthMeasureMode : heightMeasureMode; // If there is only one child with flexGrow + flexShrink it means we can set @@ -4079,7 +4080,7 @@ void YGNodeCalculateLayoutWithContext( // Increment the generation count. This will force the recursive routine to // visit all dirty nodes at least once. Subsequent visits will be skipped if // the input parameters don't change. - gCurrentGenerationCount++; + gCurrentGenerationCount.fetch_add(1, std::memory_order_relaxed); node->resolveDimension(); float width = YGUndefined; YGMeasureMode widthMeasureMode = YGMeasureModeUndefined; @@ -4136,7 +4137,7 @@ void YGNodeCalculateLayoutWithContext( markerData, layoutContext, 0, // tree root - gCurrentGenerationCount)) { + gCurrentGenerationCount.load(std::memory_order_relaxed))) { node->setPosition( node->getLayout().direction(), ownerWidth, ownerHeight, ownerWidth); YGRoundToPixelGrid(node, node->getConfig()->pointScaleFactor, 0.0f, 0.0f); @@ -4167,7 +4168,7 @@ void YGNodeCalculateLayoutWithContext( nodeWithoutLegacyFlag->resolveDimension(); // Recursively mark nodes as dirty nodeWithoutLegacyFlag->markDirtyAndPropogateDownwards(); - gCurrentGenerationCount++; + gCurrentGenerationCount.fetch_add(1, std::memory_order_relaxed); // Rerun the layout, and calculate the diff unsetUseLegacyFlagRecursively(nodeWithoutLegacyFlag); LayoutData layoutMarkerData = {}; @@ -4186,7 +4187,7 @@ void YGNodeCalculateLayoutWithContext( layoutMarkerData, layoutContext, 0, // tree root - gCurrentGenerationCount)) { + gCurrentGenerationCount.load(std::memory_order_relaxed))) { nodeWithoutLegacyFlag->setPosition( nodeWithoutLegacyFlag->getLayout().direction(), ownerWidth, From 8c3ee81d6e8864e889eeb6e0a46178782120dd66 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Fri, 1 Nov 2019 11:45:19 -0700 Subject: [PATCH 205/347] Use compiler flag -fvisibility=hidden Summary: Using compiler flag -fvisibility=hidden and explicitly setting visibility to default to public methods #Changelog: [Internal] [Yoga] Use compiler flag -fvisibility=hidden for reducing yoga binary size Reviewed By: astreet Differential Revision: D18029030 fbshipit-source-id: 545e73f9c25f3108fc9d9bb7f08c157dbc8da005 --- CMakeLists.txt | 7 + java/BUCK | 1 + java/CMakeLists.txt | 1 + java/jni/corefunctions.cpp | 3 +- .../main/cpp/include/yoga/testutil/testutil.h | 2 +- tools/build_defs/oss/yoga_defs.bzl | 1 + util/SingleWriterValueList.h | 12 +- yoga/CompactValue.h | 4 +- yoga/YGConfig.h | 2 +- yoga/YGMacros.h | 8 + yoga/YGNode.cpp | 4 +- yoga/YGNode.h | 2 +- yoga/YGStyle.h | 6 +- yoga/YGValue.h | 6 +- yoga/Yoga.cpp | 318 +++++++++++------- yoga/event/event.h | 2 +- yoga/log.cpp | 2 +- 17 files changed, 241 insertions(+), 140 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b0d50865..d2e8c12c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,13 @@ cmake_minimum_required(VERSION 3.4.1) set(CMAKE_VERBOSE_MAKEFILE on) +add_compile_options( + -fno-omit-frame-pointer + -fexceptions + -fvisibility=hidden + -Wall + -std=c++11) + file(GLOB_RECURSE yogacore_SRC yoga/*.cpp) add_library(yogacore STATIC ${yogacore_SRC}) diff --git a/java/BUCK b/java/BUCK index 5b335bad..6faa4d8b 100644 --- a/java/BUCK +++ b/java/BUCK @@ -25,6 +25,7 @@ yoga_cxx_library( compiler_flags = [ "-fno-omit-frame-pointer", "-fexceptions", + "-fvisibility=hidden", "-fPIC", "-Wall", "-Werror", diff --git a/java/CMakeLists.txt b/java/CMakeLists.txt index d3f4eda2..7d61bce7 100644 --- a/java/CMakeLists.txt +++ b/java/CMakeLists.txt @@ -24,6 +24,7 @@ add_subdirectory(${yogacore_DIR} ${yogacore_build_DIR}) add_compile_options( -fno-omit-frame-pointer -fexceptions + -fvisibility=hidden -Wall -std=c++11) diff --git a/java/jni/corefunctions.cpp b/java/jni/corefunctions.cpp index 6a250b1d..04435724 100644 --- a/java/jni/corefunctions.cpp +++ b/java/jni/corefunctions.cpp @@ -42,7 +42,8 @@ jint ensureInitialized(JNIEnv** env, JavaVM* vm) { return JNI_VERSION_1_6; } -JNIEnv* getCurrentEnv() { +// TODO why we need JNIEXPORT for getCurrentEnv ? +JNIEXPORT JNIEnv* getCurrentEnv() { JNIEnv* env; jint ret = globalVm->GetEnv((void**) &env, JNI_VERSION_1_6); if (ret != JNI_OK) { diff --git a/testutil/src/main/cpp/include/yoga/testutil/testutil.h b/testutil/src/main/cpp/include/yoga/testutil/testutil.h index e3a320c9..7c9f6288 100644 --- a/testutil/src/main/cpp/include/yoga/testutil/testutil.h +++ b/testutil/src/main/cpp/include/yoga/testutil/testutil.h @@ -15,7 +15,7 @@ namespace facebook { namespace yoga { namespace test { -struct TestUtil { +struct YOGA_EXPORT TestUtil { static void startCountingNodes(); static int nodeCount(); static int stopCountingNodes(); diff --git a/tools/build_defs/oss/yoga_defs.bzl b/tools/build_defs/oss/yoga_defs.bzl index ff303746..a1ca965f 100644 --- a/tools/build_defs/oss/yoga_defs.bzl +++ b/tools/build_defs/oss/yoga_defs.bzl @@ -53,6 +53,7 @@ CXX_LIBRARY_WHITELIST = [ BASE_COMPILER_FLAGS = [ "-fno-omit-frame-pointer", "-fexceptions", + "-fvisibility=hidden", "-Wall", "-Werror", "-O2", diff --git a/util/SingleWriterValueList.h b/util/SingleWriterValueList.h index 26b7e88f..b0854f85 100644 --- a/util/SingleWriterValueList.h +++ b/util/SingleWriterValueList.h @@ -12,12 +12,20 @@ #include #include +#ifndef YOGA_EXPORT +#ifdef _MSC_VER +#define YOGA_EXPORT +#else +#define YOGA_EXPORT __attribute__((visibility("default"))) +#endif +#endif + namespace facebook { namespace yoga { namespace detail { -class FreeList { +class YOGA_EXPORT FreeList { std::stack free_; void* getRaw(); @@ -72,7 +80,7 @@ public: /// std::accumulate(counters.begin(), counters.end(), 0); /// template -class SingleWriterValueList { +class YOGA_EXPORT SingleWriterValueList { std::forward_list values_{}; std::mutex acquireMutex_{}; detail::FreeList freeValuesList_{}; diff --git a/yoga/CompactValue.h b/yoga/CompactValue.h index 646c8785..be933a16 100644 --- a/yoga/CompactValue.h +++ b/yoga/CompactValue.h @@ -8,7 +8,7 @@ #pragma once #include "YGValue.h" - +#include "YGMacros.h" #include #include #include @@ -40,7 +40,7 @@ namespace detail { // 0x40000000 0x7f7fffff // - Zero is supported, negative zero is not // - values outside of the representable range are clamped -class CompactValue { +class YOGA_EXPORT CompactValue { friend constexpr bool operator==(CompactValue, CompactValue) noexcept; public: diff --git a/yoga/YGConfig.h b/yoga/YGConfig.h index 1b2d2b46..e87d6758 100644 --- a/yoga/YGConfig.h +++ b/yoga/YGConfig.h @@ -9,7 +9,7 @@ #include "Yoga-internal.h" #include "Yoga.h" -struct YGConfig { +struct YOGA_EXPORT YGConfig { using LogWithContextFn = int (*)( YGConfigRef config, YGNodeRef node, diff --git a/yoga/YGMacros.h b/yoga/YGMacros.h index 85881ea5..c6917f1b 100644 --- a/yoga/YGMacros.h +++ b/yoga/YGMacros.h @@ -21,6 +21,14 @@ #define WIN_EXPORT #endif +#ifndef YOGA_EXPORT +#ifdef _MSC_VER +#define YOGA_EXPORT +#else +#define YOGA_EXPORT __attribute__((visibility("default"))) +#endif +#endif + #ifdef NS_ENUM // Cannot use NSInteger as NSInteger has a different size than int (which is the // default type of a enum). Therefor when linking the Yoga C library into obj-c diff --git a/yoga/YGNode.cpp b/yoga/YGNode.cpp index 9296811a..1d49b007 100644 --- a/yoga/YGNode.cpp +++ b/yoga/YGNode.cpp @@ -188,7 +188,7 @@ void YGNode::setMeasureFunc(YGMeasureFunc measureFunc) { setMeasureFunc(m); } -void YGNode::setMeasureFunc(MeasureWithContextFn measureFunc) { +YOGA_EXPORT void YGNode::setMeasureFunc(MeasureWithContextFn measureFunc) { flags_.at() = true; decltype(YGNode::measure_) m; m.withContext = measureFunc; @@ -378,7 +378,7 @@ YGDirection YGNode::resolveDirection(const YGDirection ownerDirection) { } } -void YGNode::clearChildren() { +YOGA_EXPORT void YGNode::clearChildren() { children_.clear(); children_.shrink_to_fit(); } diff --git a/yoga/YGNode.h b/yoga/YGNode.h index 32c7770b..2967a1e2 100644 --- a/yoga/YGNode.h +++ b/yoga/YGNode.h @@ -18,7 +18,7 @@ YGConfigRef YGConfigGetDefault(); -struct YGNode { +struct YOGA_EXPORT YGNode { using MeasureWithContextFn = YGSize (*)(YGNode*, float, YGMeasureMode, float, YGMeasureMode, void*); using BaselineWithContextFn = float (*)(YGNode*, float, float, void*); diff --git a/yoga/YGStyle.h b/yoga/YGStyle.h index 5914328f..b066b346 100644 --- a/yoga/YGStyle.h +++ b/yoga/YGStyle.h @@ -17,7 +17,7 @@ #include "Yoga-internal.h" #include "Yoga.h" -class YGStyle { +class YOGA_EXPORT YGStyle { template using Values = facebook::yoga::detail::Values()>; @@ -197,7 +197,7 @@ public: Ref aspectRatio() { return {*this}; } }; -bool operator==(const YGStyle& lhs, const YGStyle& rhs); -inline bool operator!=(const YGStyle& lhs, const YGStyle& rhs) { +YOGA_EXPORT bool operator==(const YGStyle& lhs, const YGStyle& rhs); +YOGA_EXPORT inline bool operator!=(const YGStyle& lhs, const YGStyle& rhs) { return !(lhs == rhs); } diff --git a/yoga/YGValue.h b/yoga/YGValue.h index 8502da77..aaa10c3f 100644 --- a/yoga/YGValue.h +++ b/yoga/YGValue.h @@ -26,9 +26,9 @@ typedef struct YGValue { YGUnit unit; } YGValue; -extern const YGValue YGValueAuto; -extern const YGValue YGValueUndefined; -extern const YGValue YGValueZero; +YOGA_EXPORT extern const YGValue YGValueAuto; +YOGA_EXPORT extern const YGValue YGValueUndefined; +YOGA_EXPORT extern const YGValue YGValueZero; YG_EXTERN_C_END diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index e0a06b43..5ace8f87 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -106,7 +106,7 @@ static int YGDefaultLog( #undef YG_UNUSED #endif -bool YGFloatIsUndefined(const float value) { +YOGA_EXPORT bool YGFloatIsUndefined(const float value) { return facebook::yoga::isUndefined(value); } @@ -140,77 +140,84 @@ detail::CompactValue YGComputedEdgeValue( return defaultValue; } -void* YGNodeGetContext(YGNodeRef node) { +YOGA_EXPORT void* YGNodeGetContext(YGNodeRef node) { return node->getContext(); } -void YGNodeSetContext(YGNodeRef node, void* context) { +YOGA_EXPORT void YGNodeSetContext(YGNodeRef node, void* context) { return node->setContext(context); } -bool YGNodeHasMeasureFunc(YGNodeRef node) { +YOGA_EXPORT bool YGNodeHasMeasureFunc(YGNodeRef node) { return node->hasMeasureFunc(); } -void YGNodeSetMeasureFunc(YGNodeRef node, YGMeasureFunc measureFunc) { +YOGA_EXPORT void YGNodeSetMeasureFunc( + YGNodeRef node, + YGMeasureFunc measureFunc) { node->setMeasureFunc(measureFunc); } -bool YGNodeHasBaselineFunc(YGNodeRef node) { +YOGA_EXPORT bool YGNodeHasBaselineFunc(YGNodeRef node) { return node->hasBaselineFunc(); } -void YGNodeSetBaselineFunc(YGNodeRef node, YGBaselineFunc baselineFunc) { +YOGA_EXPORT void YGNodeSetBaselineFunc( + YGNodeRef node, + YGBaselineFunc baselineFunc) { node->setBaselineFunc(baselineFunc); } -YGDirtiedFunc YGNodeGetDirtiedFunc(YGNodeRef node) { +YOGA_EXPORT YGDirtiedFunc YGNodeGetDirtiedFunc(YGNodeRef node) { return node->getDirtied(); } -void YGNodeSetDirtiedFunc(YGNodeRef node, YGDirtiedFunc dirtiedFunc) { +YOGA_EXPORT void YGNodeSetDirtiedFunc( + YGNodeRef node, + YGDirtiedFunc dirtiedFunc) { node->setDirtiedFunc(dirtiedFunc); } -void YGNodeSetPrintFunc(YGNodeRef node, YGPrintFunc printFunc) { +YOGA_EXPORT void YGNodeSetPrintFunc(YGNodeRef node, YGPrintFunc printFunc) { node->setPrintFunc(printFunc); } -bool YGNodeGetHasNewLayout(YGNodeRef node) { +YOGA_EXPORT bool YGNodeGetHasNewLayout(YGNodeRef node) { return node->getHasNewLayout(); } -void YGConfigSetPrintTreeFlag(YGConfigRef config, bool enabled) { +YOGA_EXPORT void YGConfigSetPrintTreeFlag(YGConfigRef config, bool enabled) { config->printTree = enabled; } -void YGNodeSetHasNewLayout(YGNodeRef node, bool hasNewLayout) { +YOGA_EXPORT void YGNodeSetHasNewLayout(YGNodeRef node, bool hasNewLayout) { node->setHasNewLayout(hasNewLayout); } -YGNodeType YGNodeGetNodeType(YGNodeRef node) { +YOGA_EXPORT YGNodeType YGNodeGetNodeType(YGNodeRef node) { return node->getNodeType(); } -void YGNodeSetNodeType(YGNodeRef node, YGNodeType nodeType) { +YOGA_EXPORT void YGNodeSetNodeType(YGNodeRef node, YGNodeType nodeType) { return node->setNodeType(nodeType); } -bool YGNodeIsDirty(YGNodeRef node) { +YOGA_EXPORT bool YGNodeIsDirty(YGNodeRef node) { return node->isDirty(); } -bool YGNodeLayoutGetDidUseLegacyFlag(const YGNodeRef node) { +YOGA_EXPORT bool YGNodeLayoutGetDidUseLegacyFlag(const YGNodeRef node) { return node->didUseLegacyFlag(); } -void YGNodeMarkDirtyAndPropogateToDescendants(const YGNodeRef node) { +YOGA_EXPORT void YGNodeMarkDirtyAndPropogateToDescendants( + const YGNodeRef node) { return node->markDirtyAndPropogateDownwards(); } int32_t gConfigInstanceCount = 0; -WIN_EXPORT YGNodeRef YGNodeNewWithConfig(const YGConfigRef config) { +YOGA_EXPORT WIN_EXPORT YGNodeRef YGNodeNewWithConfig(const YGConfigRef config) { const YGNodeRef node = new YGNode{config}; YGAssertWithConfig( config, node != nullptr, "Could not allocate memory for node"); @@ -219,16 +226,16 @@ WIN_EXPORT YGNodeRef YGNodeNewWithConfig(const YGConfigRef config) { return node; } -YGConfigRef YGConfigGetDefault() { +YOGA_EXPORT YGConfigRef YGConfigGetDefault() { static YGConfigRef defaultConfig = YGConfigNew(); return defaultConfig; } -YGNodeRef YGNodeNew(void) { +YOGA_EXPORT YGNodeRef YGNodeNew(void) { return YGNodeNewWithConfig(YGConfigGetDefault()); } -YGNodeRef YGNodeClone(YGNodeRef oldNode) { +YOGA_EXPORT YGNodeRef YGNodeClone(YGNodeRef oldNode) { YGNodeRef node = new YGNode(*oldNode); YGAssertWithConfig( oldNode->getConfig(), @@ -268,7 +275,7 @@ static YGNodeRef YGNodeDeepClone(YGNodeRef oldNode) { return node; } -void YGNodeFree(const YGNodeRef node) { +YOGA_EXPORT void YGNodeFree(const YGNodeRef node) { if (YGNodeRef owner = node->getOwner()) { owner->removeChild(node); node->setOwner(nullptr); @@ -296,7 +303,7 @@ static void YGConfigFreeRecursive(const YGNodeRef root) { } } -void YGNodeFreeRecursiveWithCleanupFunc( +YOGA_EXPORT void YGNodeFreeRecursiveWithCleanupFunc( const YGNodeRef root, YGNodeCleanupFunc cleanup) { uint32_t skipped = 0; @@ -316,11 +323,11 @@ void YGNodeFreeRecursiveWithCleanupFunc( YGNodeFree(root); } -void YGNodeFreeRecursive(const YGNodeRef root) { +YOGA_EXPORT void YGNodeFreeRecursive(const YGNodeRef root) { return YGNodeFreeRecursiveWithCleanupFunc(root, nullptr); } -void YGNodeReset(YGNodeRef node) { +YOGA_EXPORT void YGNodeReset(YGNodeRef node) { node->reset(); } @@ -328,7 +335,7 @@ int32_t YGConfigGetInstanceCount(void) { return gConfigInstanceCount; } -YGConfigRef YGConfigNew(void) { +YOGA_EXPORT YGConfigRef YGConfigNew(void) { #ifdef ANDROID const YGConfigRef config = new YGConfig(YGAndroidLog); #else @@ -338,7 +345,7 @@ YGConfigRef YGConfigNew(void) { return config; } -void YGConfigFree(const YGConfigRef config) { +YOGA_EXPORT void YGConfigFree(const YGConfigRef config) { delete config; gConfigInstanceCount--; } @@ -347,18 +354,20 @@ void YGConfigCopy(const YGConfigRef dest, const YGConfigRef src) { memcpy(dest, src, sizeof(YGConfig)); } -void YGNodeSetIsReferenceBaseline(YGNodeRef node, bool isReferenceBaseline) { +YOGA_EXPORT void YGNodeSetIsReferenceBaseline( + YGNodeRef node, + bool isReferenceBaseline) { if (node->isReferenceBaseline() != isReferenceBaseline) { node->setIsReferenceBaseline(isReferenceBaseline); node->markDirtyAndPropogate(); } } -bool YGNodeIsReferenceBaseline(YGNodeRef node) { +YOGA_EXPORT bool YGNodeIsReferenceBaseline(YGNodeRef node) { return node->isReferenceBaseline(); } -void YGNodeInsertChild( +YOGA_EXPORT void YGNodeInsertChild( const YGNodeRef owner, const YGNodeRef child, const uint32_t index) { @@ -377,7 +386,9 @@ void YGNodeInsertChild( owner->markDirtyAndPropogate(); } -void YGNodeRemoveChild(const YGNodeRef owner, const YGNodeRef excludedChild) { +YOGA_EXPORT void YGNodeRemoveChild( + const YGNodeRef owner, + const YGNodeRef excludedChild) { if (YGNodeGetChildCount(owner) == 0) { // This is an empty set. Nothing to remove. return; @@ -396,7 +407,7 @@ void YGNodeRemoveChild(const YGNodeRef owner, const YGNodeRef excludedChild) { } } -void YGNodeRemoveAllChildren(const YGNodeRef owner) { +YOGA_EXPORT void YGNodeRemoveAllChildren(const YGNodeRef owner) { const uint32_t childCount = YGNodeGetChildCount(owner); if (childCount == 0) { // This is an empty set already. Nothing to do. @@ -456,7 +467,7 @@ static void YGNodeSetChildrenInternal( } } -void YGNodeSetChildren( +YOGA_EXPORT void YGNodeSetChildren( const YGNodeRef owner, const YGNodeRef c[], const uint32_t count) { @@ -464,32 +475,33 @@ void YGNodeSetChildren( YGNodeSetChildrenInternal(owner, children); } -void YGNodeSetChildren( +YOGA_EXPORT void YGNodeSetChildren( YGNodeRef const owner, const std::vector& children) { YGNodeSetChildrenInternal(owner, children); } -YGNodeRef YGNodeGetChild(const YGNodeRef node, const uint32_t index) { +YOGA_EXPORT YGNodeRef +YGNodeGetChild(const YGNodeRef node, const uint32_t index) { if (index < node->getChildren().size()) { return node->getChild(index); } return nullptr; } -uint32_t YGNodeGetChildCount(const YGNodeRef node) { +YOGA_EXPORT uint32_t YGNodeGetChildCount(const YGNodeRef node) { return static_cast(node->getChildren().size()); } -YGNodeRef YGNodeGetOwner(const YGNodeRef node) { +YOGA_EXPORT YGNodeRef YGNodeGetOwner(const YGNodeRef node) { return node->getOwner(); } -YGNodeRef YGNodeGetParent(const YGNodeRef node) { +YOGA_EXPORT YGNodeRef YGNodeGetParent(const YGNodeRef node) { return node->getOwner(); } -void YGNodeMarkDirty(const YGNodeRef node) { +YOGA_EXPORT void YGNodeMarkDirty(const YGNodeRef node) { YGAssertWithNode( node, node->hasMeasureFunc(), @@ -499,20 +511,22 @@ void YGNodeMarkDirty(const YGNodeRef node) { node->markDirtyAndPropogate(); } -void YGNodeCopyStyle(const YGNodeRef dstNode, const YGNodeRef srcNode) { +YOGA_EXPORT void YGNodeCopyStyle( + const YGNodeRef dstNode, + const YGNodeRef srcNode) { if (!(dstNode->getStyle() == srcNode->getStyle())) { dstNode->setStyle(srcNode->getStyle()); dstNode->markDirtyAndPropogate(); } } -float YGNodeStyleGetFlexGrow(const YGNodeConstRef node) { +YOGA_EXPORT float YGNodeStyleGetFlexGrow(const YGNodeConstRef node) { return node->getStyle().flexGrow().isUndefined() ? kDefaultFlexGrow : node->getStyle().flexGrow().unwrap(); } -float YGNodeStyleGetFlexShrink(const YGNodeConstRef node) { +YOGA_EXPORT float YGNodeStyleGetFlexShrink(const YGNodeConstRef node) { return node->getStyle().flexShrink().isUndefined() ? (node->getConfig()->useWebDefaults ? kWebDefaultFlexShrink : kDefaultFlexShrink) @@ -565,113 +579,131 @@ void updateIndexedStyleProp( // decltype, MSVC will prefer the non-const version. #define MSVC_HINT(PROP) decltype(YGStyle{}.PROP()) -void YGNodeStyleSetDirection(const YGNodeRef node, const YGDirection value) { +YOGA_EXPORT void YGNodeStyleSetDirection( + const YGNodeRef node, + const YGDirection value) { updateStyle(node, &YGStyle::direction, value); } -YGDirection YGNodeStyleGetDirection(const YGNodeConstRef node) { +YOGA_EXPORT YGDirection YGNodeStyleGetDirection(const YGNodeConstRef node) { return node->getStyle().direction(); } -void YGNodeStyleSetFlexDirection( +YOGA_EXPORT void YGNodeStyleSetFlexDirection( const YGNodeRef node, const YGFlexDirection flexDirection) { updateStyle( node, &YGStyle::flexDirection, flexDirection); } -YGFlexDirection YGNodeStyleGetFlexDirection(const YGNodeConstRef node) { +YOGA_EXPORT YGFlexDirection +YGNodeStyleGetFlexDirection(const YGNodeConstRef node) { return node->getStyle().flexDirection(); } -void YGNodeStyleSetJustifyContent( +YOGA_EXPORT void YGNodeStyleSetJustifyContent( const YGNodeRef node, const YGJustify justifyContent) { updateStyle( node, &YGStyle::justifyContent, justifyContent); } -YGJustify YGNodeStyleGetJustifyContent(const YGNodeConstRef node) { +YOGA_EXPORT YGJustify YGNodeStyleGetJustifyContent(const YGNodeConstRef node) { return node->getStyle().justifyContent(); } -void YGNodeStyleSetAlignContent( +YOGA_EXPORT void YGNodeStyleSetAlignContent( const YGNodeRef node, const YGAlign alignContent) { updateStyle( node, &YGStyle::alignContent, alignContent); } -YGAlign YGNodeStyleGetAlignContent(const YGNodeConstRef node) { +YOGA_EXPORT YGAlign YGNodeStyleGetAlignContent(const YGNodeConstRef node) { return node->getStyle().alignContent(); } -void YGNodeStyleSetAlignItems(const YGNodeRef node, const YGAlign alignItems) { +YOGA_EXPORT void YGNodeStyleSetAlignItems( + const YGNodeRef node, + const YGAlign alignItems) { updateStyle(node, &YGStyle::alignItems, alignItems); } -YGAlign YGNodeStyleGetAlignItems(const YGNodeConstRef node) { +YOGA_EXPORT YGAlign YGNodeStyleGetAlignItems(const YGNodeConstRef node) { return node->getStyle().alignItems(); } -void YGNodeStyleSetAlignSelf(const YGNodeRef node, const YGAlign alignSelf) { +YOGA_EXPORT void YGNodeStyleSetAlignSelf( + const YGNodeRef node, + const YGAlign alignSelf) { updateStyle(node, &YGStyle::alignSelf, alignSelf); } -YGAlign YGNodeStyleGetAlignSelf(const YGNodeConstRef node) { +YOGA_EXPORT YGAlign YGNodeStyleGetAlignSelf(const YGNodeConstRef node) { return node->getStyle().alignSelf(); } -void YGNodeStyleSetPositionType( +YOGA_EXPORT void YGNodeStyleSetPositionType( const YGNodeRef node, const YGPositionType positionType) { updateStyle( node, &YGStyle::positionType, positionType); } -YGPositionType YGNodeStyleGetPositionType(const YGNodeConstRef node) { +YOGA_EXPORT YGPositionType +YGNodeStyleGetPositionType(const YGNodeConstRef node) { return node->getStyle().positionType(); } -void YGNodeStyleSetFlexWrap(const YGNodeRef node, const YGWrap flexWrap) { +YOGA_EXPORT void YGNodeStyleSetFlexWrap( + const YGNodeRef node, + const YGWrap flexWrap) { updateStyle(node, &YGStyle::flexWrap, flexWrap); } -YGWrap YGNodeStyleGetFlexWrap(const YGNodeConstRef node) { +YOGA_EXPORT YGWrap YGNodeStyleGetFlexWrap(const YGNodeConstRef node) { return node->getStyle().flexWrap(); } -void YGNodeStyleSetOverflow(const YGNodeRef node, const YGOverflow overflow) { +YOGA_EXPORT void YGNodeStyleSetOverflow( + const YGNodeRef node, + const YGOverflow overflow) { updateStyle(node, &YGStyle::overflow, overflow); } -YGOverflow YGNodeStyleGetOverflow(const YGNodeConstRef node) { +YOGA_EXPORT YGOverflow YGNodeStyleGetOverflow(const YGNodeConstRef node) { return node->getStyle().overflow(); } -void YGNodeStyleSetDisplay(const YGNodeRef node, const YGDisplay display) { +YOGA_EXPORT void YGNodeStyleSetDisplay( + const YGNodeRef node, + const YGDisplay display) { updateStyle(node, &YGStyle::display, display); } -YGDisplay YGNodeStyleGetDisplay(const YGNodeConstRef node) { +YOGA_EXPORT YGDisplay YGNodeStyleGetDisplay(const YGNodeConstRef node) { return node->getStyle().display(); } // TODO(T26792433): Change the API to accept YGFloatOptional. -void YGNodeStyleSetFlex(const YGNodeRef node, const float flex) { +YOGA_EXPORT void YGNodeStyleSetFlex(const YGNodeRef node, const float flex) { updateStyle(node, &YGStyle::flex, YGFloatOptional{flex}); } // TODO(T26792433): Change the API to accept YGFloatOptional. -float YGNodeStyleGetFlex(const YGNodeConstRef node) { +YOGA_EXPORT float YGNodeStyleGetFlex(const YGNodeConstRef node) { return node->getStyle().flex().isUndefined() ? YGUndefined : node->getStyle().flex().unwrap(); } // TODO(T26792433): Change the API to accept YGFloatOptional. -void YGNodeStyleSetFlexGrow(const YGNodeRef node, const float flexGrow) { +YOGA_EXPORT void YGNodeStyleSetFlexGrow( + const YGNodeRef node, + const float flexGrow) { updateStyle( node, &YGStyle::flexGrow, YGFloatOptional{flexGrow}); } // TODO(T26792433): Change the API to accept YGFloatOptional. -void YGNodeStyleSetFlexShrink(const YGNodeRef node, const float flexShrink) { +YOGA_EXPORT void YGNodeStyleSetFlexShrink( + const YGNodeRef node, + const float flexShrink) { updateStyle( node, &YGStyle::flexShrink, YGFloatOptional{flexShrink}); } -YGValue YGNodeStyleGetFlexBasis(const YGNodeConstRef node) { +YOGA_EXPORT YGValue YGNodeStyleGetFlexBasis(const YGNodeConstRef node) { YGValue flexBasis = node->getStyle().flexBasis(); if (flexBasis.unit == YGUnitUndefined || flexBasis.unit == YGUnitAuto) { // TODO(T26792433): Get rid off the use of YGUndefined at client side @@ -680,71 +712,91 @@ YGValue YGNodeStyleGetFlexBasis(const YGNodeConstRef node) { return flexBasis; } -void YGNodeStyleSetFlexBasis(const YGNodeRef node, const float flexBasis) { +YOGA_EXPORT void YGNodeStyleSetFlexBasis( + const YGNodeRef node, + const float flexBasis) { auto value = detail::CompactValue::ofMaybe(flexBasis); updateStyle(node, &YGStyle::flexBasis, value); } -void YGNodeStyleSetFlexBasisPercent( +YOGA_EXPORT void YGNodeStyleSetFlexBasisPercent( const YGNodeRef node, const float flexBasisPercent) { auto value = detail::CompactValue::ofMaybe(flexBasisPercent); updateStyle(node, &YGStyle::flexBasis, value); } -void YGNodeStyleSetFlexBasisAuto(const YGNodeRef node) { +YOGA_EXPORT void YGNodeStyleSetFlexBasisAuto(const YGNodeRef node) { updateStyle( node, &YGStyle::flexBasis, detail::CompactValue::ofAuto()); } -void YGNodeStyleSetPosition(YGNodeRef node, YGEdge edge, float points) { +YOGA_EXPORT void YGNodeStyleSetPosition( + YGNodeRef node, + YGEdge edge, + float points) { auto value = detail::CompactValue::ofMaybe(points); updateIndexedStyleProp( node, &YGStyle::position, edge, value); } -void YGNodeStyleSetPositionPercent(YGNodeRef node, YGEdge edge, float percent) { +YOGA_EXPORT void YGNodeStyleSetPositionPercent( + YGNodeRef node, + YGEdge edge, + float percent) { auto value = detail::CompactValue::ofMaybe(percent); updateIndexedStyleProp( node, &YGStyle::position, edge, value); } -YGValue YGNodeStyleGetPosition(YGNodeConstRef node, YGEdge edge) { +YOGA_EXPORT YGValue YGNodeStyleGetPosition(YGNodeConstRef node, YGEdge edge) { return node->getStyle().position()[edge]; } -void YGNodeStyleSetMargin(YGNodeRef node, YGEdge edge, float points) { +YOGA_EXPORT void YGNodeStyleSetMargin( + YGNodeRef node, + YGEdge edge, + float points) { auto value = detail::CompactValue::ofMaybe(points); updateIndexedStyleProp( node, &YGStyle::margin, edge, value); } -void YGNodeStyleSetMarginPercent(YGNodeRef node, YGEdge edge, float percent) { +YOGA_EXPORT void YGNodeStyleSetMarginPercent( + YGNodeRef node, + YGEdge edge, + float percent) { auto value = detail::CompactValue::ofMaybe(percent); updateIndexedStyleProp( node, &YGStyle::margin, edge, value); } -void YGNodeStyleSetMarginAuto(YGNodeRef node, YGEdge edge) { +YOGA_EXPORT void YGNodeStyleSetMarginAuto(YGNodeRef node, YGEdge edge) { updateIndexedStyleProp( node, &YGStyle::margin, edge, detail::CompactValue::ofAuto()); } -YGValue YGNodeStyleGetMargin(YGNodeConstRef node, YGEdge edge) { +YOGA_EXPORT YGValue YGNodeStyleGetMargin(YGNodeConstRef node, YGEdge edge) { return node->getStyle().margin()[edge]; } -void YGNodeStyleSetPadding(YGNodeRef node, YGEdge edge, float points) { +YOGA_EXPORT void YGNodeStyleSetPadding( + YGNodeRef node, + YGEdge edge, + float points) { auto value = detail::CompactValue::ofMaybe(points); updateIndexedStyleProp( node, &YGStyle::padding, edge, value); } -void YGNodeStyleSetPaddingPercent(YGNodeRef node, YGEdge edge, float percent) { +YOGA_EXPORT void YGNodeStyleSetPaddingPercent( + YGNodeRef node, + YGEdge edge, + float percent) { auto value = detail::CompactValue::ofMaybe(percent); updateIndexedStyleProp( node, &YGStyle::padding, edge, value); } -YGValue YGNodeStyleGetPadding(YGNodeConstRef node, YGEdge edge) { +YOGA_EXPORT YGValue YGNodeStyleGetPadding(YGNodeConstRef node, YGEdge edge) { return node->getStyle().padding()[edge]; } // TODO(T26792433): Change the API to accept YGFloatOptional. -void YGNodeStyleSetBorder( +YOGA_EXPORT void YGNodeStyleSetBorder( const YGNodeRef node, const YGEdge edge, const float border) { @@ -753,7 +805,9 @@ void YGNodeStyleSetBorder( node, &YGStyle::border, edge, value); } -float YGNodeStyleGetBorder(const YGNodeConstRef node, const YGEdge edge) { +YOGA_EXPORT float YGNodeStyleGetBorder( + const YGNodeConstRef node, + const YGEdge edge) { auto border = node->getStyle().border()[edge]; if (border.isUndefined() || border.isAuto()) { // TODO(T26792433): Rather than returning YGUndefined, change the api to @@ -767,126 +821,141 @@ float YGNodeStyleGetBorder(const YGNodeConstRef node, const YGEdge edge) { // Yoga specific properties, not compatible with flexbox specification // TODO(T26792433): Change the API to accept YGFloatOptional. -float YGNodeStyleGetAspectRatio(const YGNodeConstRef node) { +YOGA_EXPORT float YGNodeStyleGetAspectRatio(const YGNodeConstRef node) { const YGFloatOptional op = node->getStyle().aspectRatio(); return op.isUndefined() ? YGUndefined : op.unwrap(); } // TODO(T26792433): Change the API to accept YGFloatOptional. -void YGNodeStyleSetAspectRatio(const YGNodeRef node, const float aspectRatio) { +YOGA_EXPORT void YGNodeStyleSetAspectRatio( + const YGNodeRef node, + const float aspectRatio) { updateStyle( node, &YGStyle::aspectRatio, YGFloatOptional{aspectRatio}); } -void YGNodeStyleSetWidth(YGNodeRef node, float points) { +YOGA_EXPORT void YGNodeStyleSetWidth(YGNodeRef node, float points) { auto value = detail::CompactValue::ofMaybe(points); updateIndexedStyleProp( node, &YGStyle::dimensions, YGDimensionWidth, value); } -void YGNodeStyleSetWidthPercent(YGNodeRef node, float percent) { +YOGA_EXPORT void YGNodeStyleSetWidthPercent(YGNodeRef node, float percent) { auto value = detail::CompactValue::ofMaybe(percent); updateIndexedStyleProp( node, &YGStyle::dimensions, YGDimensionWidth, value); } -void YGNodeStyleSetWidthAuto(YGNodeRef node) { +YOGA_EXPORT void YGNodeStyleSetWidthAuto(YGNodeRef node) { updateIndexedStyleProp( node, &YGStyle::dimensions, YGDimensionWidth, detail::CompactValue::ofAuto()); } -YGValue YGNodeStyleGetWidth(YGNodeConstRef node) { +YOGA_EXPORT YGValue YGNodeStyleGetWidth(YGNodeConstRef node) { return node->getStyle().dimensions()[YGDimensionWidth]; } -void YGNodeStyleSetHeight(YGNodeRef node, float points) { +YOGA_EXPORT void YGNodeStyleSetHeight(YGNodeRef node, float points) { auto value = detail::CompactValue::ofMaybe(points); updateIndexedStyleProp( node, &YGStyle::dimensions, YGDimensionHeight, value); } -void YGNodeStyleSetHeightPercent(YGNodeRef node, float percent) { +YOGA_EXPORT void YGNodeStyleSetHeightPercent(YGNodeRef node, float percent) { auto value = detail::CompactValue::ofMaybe(percent); updateIndexedStyleProp( node, &YGStyle::dimensions, YGDimensionHeight, value); } -void YGNodeStyleSetHeightAuto(YGNodeRef node) { +YOGA_EXPORT void YGNodeStyleSetHeightAuto(YGNodeRef node) { updateIndexedStyleProp( node, &YGStyle::dimensions, YGDimensionHeight, detail::CompactValue::ofAuto()); } -YGValue YGNodeStyleGetHeight(YGNodeConstRef node) { +YOGA_EXPORT YGValue YGNodeStyleGetHeight(YGNodeConstRef node) { return node->getStyle().dimensions()[YGDimensionHeight]; } -void YGNodeStyleSetMinWidth(const YGNodeRef node, const float minWidth) { +YOGA_EXPORT void YGNodeStyleSetMinWidth( + const YGNodeRef node, + const float minWidth) { auto value = detail::CompactValue::ofMaybe(minWidth); updateIndexedStyleProp( node, &YGStyle::minDimensions, YGDimensionWidth, value); } -void YGNodeStyleSetMinWidthPercent(const YGNodeRef node, const float minWidth) { +YOGA_EXPORT void YGNodeStyleSetMinWidthPercent( + const YGNodeRef node, + const float minWidth) { auto value = detail::CompactValue::ofMaybe(minWidth); updateIndexedStyleProp( node, &YGStyle::minDimensions, YGDimensionWidth, value); } -YGValue YGNodeStyleGetMinWidth(const YGNodeConstRef node) { +YOGA_EXPORT YGValue YGNodeStyleGetMinWidth(const YGNodeConstRef node) { return node->getStyle().minDimensions()[YGDimensionWidth]; }; -void YGNodeStyleSetMinHeight(const YGNodeRef node, const float minHeight) { +YOGA_EXPORT void YGNodeStyleSetMinHeight( + const YGNodeRef node, + const float minHeight) { auto value = detail::CompactValue::ofMaybe(minHeight); updateIndexedStyleProp( node, &YGStyle::minDimensions, YGDimensionHeight, value); } -void YGNodeStyleSetMinHeightPercent( +YOGA_EXPORT void YGNodeStyleSetMinHeightPercent( const YGNodeRef node, const float minHeight) { auto value = detail::CompactValue::ofMaybe(minHeight); updateIndexedStyleProp( node, &YGStyle::minDimensions, YGDimensionHeight, value); } -YGValue YGNodeStyleGetMinHeight(const YGNodeConstRef node) { +YOGA_EXPORT YGValue YGNodeStyleGetMinHeight(const YGNodeConstRef node) { return node->getStyle().minDimensions()[YGDimensionHeight]; }; -void YGNodeStyleSetMaxWidth(const YGNodeRef node, const float maxWidth) { +YOGA_EXPORT void YGNodeStyleSetMaxWidth( + const YGNodeRef node, + const float maxWidth) { auto value = detail::CompactValue::ofMaybe(maxWidth); updateIndexedStyleProp( node, &YGStyle::maxDimensions, YGDimensionWidth, value); } -void YGNodeStyleSetMaxWidthPercent(const YGNodeRef node, const float maxWidth) { +YOGA_EXPORT void YGNodeStyleSetMaxWidthPercent( + const YGNodeRef node, + const float maxWidth) { auto value = detail::CompactValue::ofMaybe(maxWidth); updateIndexedStyleProp( node, &YGStyle::maxDimensions, YGDimensionWidth, value); } -YGValue YGNodeStyleGetMaxWidth(const YGNodeConstRef node) { +YOGA_EXPORT YGValue YGNodeStyleGetMaxWidth(const YGNodeConstRef node) { return node->getStyle().maxDimensions()[YGDimensionWidth]; }; -void YGNodeStyleSetMaxHeight(const YGNodeRef node, const float maxHeight) { +YOGA_EXPORT void YGNodeStyleSetMaxHeight( + const YGNodeRef node, + const float maxHeight) { auto value = detail::CompactValue::ofMaybe(maxHeight); updateIndexedStyleProp( node, &YGStyle::maxDimensions, YGDimensionHeight, value); } -void YGNodeStyleSetMaxHeightPercent( +YOGA_EXPORT void YGNodeStyleSetMaxHeightPercent( const YGNodeRef node, const float maxHeight) { auto value = detail::CompactValue::ofMaybe(maxHeight); updateIndexedStyleProp( node, &YGStyle::maxDimensions, YGDimensionHeight, value); } -YGValue YGNodeStyleGetMaxHeight(const YGNodeConstRef node) { +YOGA_EXPORT YGValue YGNodeStyleGetMaxHeight(const YGNodeConstRef node) { return node->getStyle().maxDimensions()[YGDimensionHeight]; }; -#define YG_NODE_LAYOUT_PROPERTY_IMPL(type, name, instanceName) \ - type YGNodeLayoutGet##name(const YGNodeRef node) { \ - return node->getLayout().instanceName; \ +#define YG_NODE_LAYOUT_PROPERTY_IMPL(type, name, instanceName) \ + YOGA_EXPORT type YGNodeLayoutGet##name(const YGNodeRef node) { \ + return node->getLayout().instanceName; \ } #define YG_NODE_LAYOUT_RESOLVED_PROPERTY_IMPL(type, name, instanceName) \ - type YGNodeLayoutGet##name(const YGNodeRef node, const YGEdge edge) { \ + YOGA_EXPORT type YGNodeLayoutGet##name( \ + const YGNodeRef node, const YGEdge edge) { \ YGAssertWithNode( \ node, \ edge <= YGEdgeEnd, \ @@ -924,7 +993,8 @@ YG_NODE_LAYOUT_RESOLVED_PROPERTY_IMPL(float, Margin, margin); YG_NODE_LAYOUT_RESOLVED_PROPERTY_IMPL(float, Border, border); YG_NODE_LAYOUT_RESOLVED_PROPERTY_IMPL(float, Padding, padding); -bool YGNodeLayoutGetDidLegacyStretchFlagAffectLayout(const YGNodeRef node) { +YOGA_EXPORT bool YGNodeLayoutGetDidLegacyStretchFlagAffectLayout( + const YGNodeRef node) { return node->getLayout().doesLegacyStretchFlagAffectsLayout(); } @@ -956,7 +1026,9 @@ static void YGNodePrintInternal( Log::log(node, YGLogLevelDebug, nullptr, str.c_str()); } -void YGNodePrint(const YGNodeRef node, const YGPrintOptions options) { +YOGA_EXPORT void YGNodePrint( + const YGNodeRef node, + const YGPrintOptions options) { YGNodePrintInternal(node, options); } #endif @@ -3970,7 +4042,7 @@ bool YGLayoutNodeInternal( return (needToVisitNode || cachedResults == nullptr); } -void YGConfigSetPointScaleFactor( +YOGA_EXPORT void YGConfigSetPointScaleFactor( const YGConfigRef config, const float pixelsInPoint) { YGAssertWithConfig( @@ -4067,7 +4139,7 @@ static void unsetUseLegacyFlagRecursively(YGNodeRef node) { } } -void YGNodeCalculateLayoutWithContext( +YOGA_EXPORT void YGNodeCalculateLayoutWithContext( const YGNodeRef node, const float ownerWidth, const float ownerHeight, @@ -4219,7 +4291,7 @@ void YGNodeCalculateLayoutWithContext( } } -void YGNodeCalculateLayout( +YOGA_EXPORT void YGNodeCalculateLayout( const YGNodeRef node, const float ownerWidth, const float ownerHeight, @@ -4228,7 +4300,7 @@ void YGNodeCalculateLayout( node, ownerWidth, ownerHeight, ownerDirection, nullptr); } -void YGConfigSetLogger(const YGConfigRef config, YGLogger logger) { +YOGA_EXPORT void YGConfigSetLogger(const YGConfigRef config, YGLogger logger) { if (logger != nullptr) { config->setLogger(logger); } else { @@ -4240,7 +4312,7 @@ void YGConfigSetLogger(const YGConfigRef config, YGLogger logger) { } } -void YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviour( +YOGA_EXPORT void YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviour( const YGConfigRef config, const bool shouldDiffLayout) { config->shouldDiffLayoutWithoutLegacyStretchBehaviour = shouldDiffLayout; @@ -4270,7 +4342,7 @@ void YGAssertWithConfig( } } -void YGConfigSetExperimentalFeatureEnabled( +YOGA_EXPORT void YGConfigSetExperimentalFeatureEnabled( const YGConfigRef config, const YGExperimentalFeature feature, const bool enabled) { @@ -4283,11 +4355,13 @@ inline bool YGConfigIsExperimentalFeatureEnabled( return config->experimentalFeatures[feature]; } -void YGConfigSetUseWebDefaults(const YGConfigRef config, const bool enabled) { +YOGA_EXPORT void YGConfigSetUseWebDefaults( + const YGConfigRef config, + const bool enabled) { config->useWebDefaults = enabled; } -void YGConfigSetUseLegacyStretchBehaviour( +YOGA_EXPORT void YGConfigSetUseLegacyStretchBehaviour( const YGConfigRef config, const bool useLegacyStretchBehaviour) { config->useLegacyStretchBehaviour = useLegacyStretchBehaviour; @@ -4297,15 +4371,15 @@ bool YGConfigGetUseWebDefaults(const YGConfigRef config) { return config->useWebDefaults; } -void YGConfigSetContext(const YGConfigRef config, void* context) { +YOGA_EXPORT void YGConfigSetContext(const YGConfigRef config, void* context) { config->context = context; } -void* YGConfigGetContext(const YGConfigRef config) { +YOGA_EXPORT void* YGConfigGetContext(const YGConfigRef config) { return config->context; } -void YGConfigSetCloneNodeFunc( +YOGA_EXPORT void YGConfigSetCloneNodeFunc( const YGConfigRef config, const YGCloneNodeFunc callback) { config->setCloneNodeCallback(callback); diff --git a/yoga/event/event.h b/yoga/event/event.h index f96b1165..309dacb5 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -50,7 +50,7 @@ struct LayoutData { const char* LayoutPassReasonToString(const LayoutPassReason value); -struct Event { +struct YOGA_EXPORT Event { enum Type { NodeAllocation, NodeDeallocation, diff --git a/yoga/log.cpp b/yoga/log.cpp index 20139776..fe6fbbc6 100644 --- a/yoga/log.cpp +++ b/yoga/log.cpp @@ -33,7 +33,7 @@ void vlog( } } // namespace -void Log::log( +YOGA_EXPORT void Log::log( YGNode* node, YGLogLevel level, void* context, From 6327893b9b4f508fe3527c54c0b1c5bdca00c2ee Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Fri, 1 Nov 2019 11:45:19 -0700 Subject: [PATCH 206/347] Use compiler flags -ffunction-sections, -fdata-sections and gc sections in both jni and core Summary: Use compiler flags -ffunction-sections, -fdata-sections and -Wl,--gc-sections in both jni and yoga core Reviewed By: amir-shalem Differential Revision: D18029671 fbshipit-source-id: 5192fb6d682248b16781dead0d7b0a0377861fb6 --- CMakeLists.txt | 2 ++ java/BUCK | 2 ++ java/CMakeLists.txt | 4 +++- tools/build_defs/oss/yoga_defs.bzl | 2 ++ 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d2e8c12c..018c269f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,6 +11,8 @@ add_compile_options( -fno-omit-frame-pointer -fexceptions -fvisibility=hidden + -ffunction-sections + -fdata-sections -Wall -std=c++11) diff --git a/java/BUCK b/java/BUCK index 6faa4d8b..5057aa56 100644 --- a/java/BUCK +++ b/java/BUCK @@ -26,6 +26,8 @@ yoga_cxx_library( "-fno-omit-frame-pointer", "-fexceptions", "-fvisibility=hidden", + "-ffunction-sections", + "-fdata-sections", "-fPIC", "-Wall", "-Werror", diff --git a/java/CMakeLists.txt b/java/CMakeLists.txt index 7d61bce7..4a3dcd86 100644 --- a/java/CMakeLists.txt +++ b/java/CMakeLists.txt @@ -25,6 +25,8 @@ add_compile_options( -fno-omit-frame-pointer -fexceptions -fvisibility=hidden + -ffunction-sections + -fdata-sections -Wall -std=c++11) @@ -37,4 +39,4 @@ target_include_directories(yoga PRIVATE ${libfb_DIR}/include ${yogacore_DIR}) -target_link_libraries(yoga yogacore fb) +target_link_libraries(yoga -Wl,--gc-sections yogacore fb) diff --git a/tools/build_defs/oss/yoga_defs.bzl b/tools/build_defs/oss/yoga_defs.bzl index a1ca965f..4c50e984 100644 --- a/tools/build_defs/oss/yoga_defs.bzl +++ b/tools/build_defs/oss/yoga_defs.bzl @@ -54,6 +54,8 @@ BASE_COMPILER_FLAGS = [ "-fno-omit-frame-pointer", "-fexceptions", "-fvisibility=hidden", + "-ffunction-sections", + "-fdata-sections", "-Wall", "-Werror", "-O2", From b72efaaaca1a5ff269f159f34cb20a6f9bbec9e8 Mon Sep 17 00:00:00 2001 From: Dmytro Kasianchuk Date: Sat, 2 Nov 2019 20:41:13 -0700 Subject: [PATCH 207/347] Added missing YOGA_EXPORT Summary: Added missing YOGA_EXPORT #Changelog: [Internal] [Fixed] - Added missing YOGA_EXPORT Reviewed By: SidharthGuglani Differential Revision: D18289071 fbshipit-source-id: a2e16a59427aa33b34b3d1fab9d1088904ee62f5 --- yoga/Yoga.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 5ace8f87..8483dd88 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -3645,7 +3645,7 @@ static inline bool YGMeasureModeNewMeasureSizeIsStricterAndStillValid( (lastComputedSize <= size || YGFloatsEqual(size, lastComputedSize)); } -float YGRoundValueToPixelGrid( +YOGA_EXPORT float YGRoundValueToPixelGrid( const float value, const float pointScaleFactor, const bool forceCeil, @@ -3696,7 +3696,7 @@ float YGRoundValueToPixelGrid( : scaledValue / pointScaleFactor; } -bool YGNodeCanUseCachedMeasurement( +YOGA_EXPORT bool YGNodeCanUseCachedMeasurement( const YGMeasureMode widthMode, const float width, const YGMeasureMode heightMode, From 4d16ee4ed48ca2607be0b5a1e68562ba5f53bcc8 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Tue, 5 Nov 2019 17:12:39 -0800 Subject: [PATCH 208/347] Use double for YGRoundValueToPixelGrid calculations Summary: Use double for YGRoundValueToPixelGrid calculations as we were losing some precision in float operations #Changelog: [Internal][Yoga] Use double for YGRoundValueToPixelGrid calculations Reviewed By: astreet Differential Revision: D18225999 fbshipit-source-id: 69c05f56a0e0f3433bf0bd958aa07d26dd83fe02 --- yoga/Yoga.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 8483dd88..016ab0ac 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -3650,7 +3650,7 @@ YOGA_EXPORT float YGRoundValueToPixelGrid( const float pointScaleFactor, const bool forceCeil, const bool forceFloor) { - float scaledValue = value * pointScaleFactor; + double scaledValue = ((double) value) * pointScaleFactor; // We want to calculate `fractial` such that `floor(scaledValue) = scaledValue // - fractial`. float fractial = fmodf(scaledValue, 1.0f); From ddf748a99de4386f7865d3f6028541a098676b8b Mon Sep 17 00:00:00 2001 From: Pritesh Nandgaonkar Date: Thu, 7 Nov 2019 10:48:44 -0800 Subject: [PATCH 209/347] Add Swift extension as a separate pod Summary: Adds swift extension file as a separate subspec, as it is not required for the objc projects. Also this fixes the current issue where the flipper sample app fails to build on xcode 11, as it fails to link the Swift specific literals. Fixes this too https://github.com/facebook/yoga/issues/565 Reviewed By: SidharthGuglani Differential Revision: D18373993 fbshipit-source-id: 0c058886a837c7ceafcd0167f878b3e0f7763aa1 --- YogaKit.podspec | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/YogaKit.podspec b/YogaKit.podspec index 54c6c2b0..86d10666 100644 --- a/YogaKit.podspec +++ b/YogaKit.podspec @@ -5,7 +5,7 @@ podspec = Pod::Spec.new do |spec| spec.name = 'YogaKit' - spec.version = '1.14.0' + spec.version = '1.17.0' spec.license = { :type => 'MIT', :file => "LICENSE" } spec.homepage = 'https://facebook.github.io/yoga/' spec.documentation_url = 'https://facebook.github.io/yoga/docs/' @@ -22,11 +22,20 @@ podspec = Pod::Spec.new do |spec| spec.platform = :ios spec.ios.deployment_target = '8.0' spec.ios.frameworks = 'UIKit' + spec.default_subspec = "Core" spec.dependency 'Yoga', '~> 1.14' - spec.source_files = 'YogaKit/Source/*.{h,m,swift}' - spec.public_header_files = 'YogaKit/Source/{YGLayout,UIView+Yoga}.h' - spec.private_header_files = 'YogaKit/Source/YGLayout+Private.h' - spec.swift_version = '4.0' + spec.module_name = 'YogaKit' + + spec.subspec "Core" do |ss| + ss.source_files = 'YogaKit/Source/*.{h,m}' + ss.public_header_files = 'YogaKit/Source/{YGLayout,UIView+Yoga}.h' + ss.private_header_files = 'YogaKit/Source/YGLayout+Private.h' + end + + spec.subspec 'SwiftExtension' do |ss| + ss.source_files = 'YogaKit/Source/*.{swift}' + end + end # See https://github.com/facebook/yoga/pull/366 From 0be0e9fc0148aa609afdc31cb9670524f07050cb Mon Sep 17 00:00:00 2001 From: Pritesh Nandgaonkar Date: Fri, 8 Nov 2019 04:00:53 -0800 Subject: [PATCH 210/347] Solve lib lint failure Summary: This diff solves `pod lib lint` failure. We want to make a new yoga release, as I landed some changes in its podspec which solves the broken flipper build for xcode 11. {F221612119} Reviewed By: passy Differential Revision: D18382588 fbshipit-source-id: efddfa3e93ca59b79b887d04f83407b004d9a199 --- YogaKit/Source/YGLayoutExtensions.swift | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/YogaKit/Source/YGLayoutExtensions.swift b/YogaKit/Source/YGLayoutExtensions.swift index 812f8455..2157c0ff 100644 --- a/YogaKit/Source/YGLayoutExtensions.swift +++ b/YogaKit/Source/YGLayoutExtensions.swift @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. */ +import yoga; postfix operator % extension Int { @@ -29,15 +30,15 @@ extension YGValue : ExpressibleByIntegerLiteral, ExpressibleByFloatLiteral { public init(integerLiteral value: Int) { self = YGValue(value: Float(value), unit: .point) } - + public init(floatLiteral value: Float) { self = YGValue(value: value, unit: .point) } - + public init(_ value: Float) { self = YGValue(value: value, unit: .point) } - + public init(_ value: CGFloat) { self = YGValue(value: Float(value), unit: .point) } From 73a4a6d29fe4a3299aeea0e48f58bbee951cdad2 Mon Sep 17 00:00:00 2001 From: Pritesh Nandgaonkar Date: Mon, 11 Nov 2019 10:14:40 -0800 Subject: [PATCH 211/347] Fixes the Yogakit compilation bug for xcode11 Summary: This fixes the yogakit compilation bug for xcode 11, where it fails to find swift core frameworks for pure objc project. https://github.com/Carthage/Carthage/issues/2825 https://twitter.com/krzyzanowskim/status/1151549874653081601?s=21 Also published this podspec on cocoapods and deleted .swift-version file as it was not required, because swift version is mentioned in podspec Reviewed By: SidharthGuglani Differential Revision: D18420963 fbshipit-source-id: d617bf643ac6481d6add86e6a4bfadd6e0d0c229 --- .swift-version | 1 - YogaKit.podspec | 26 +++++++++++--------------- 2 files changed, 11 insertions(+), 16 deletions(-) delete mode 100644 .swift-version diff --git a/.swift-version b/.swift-version deleted file mode 100644 index 5186d070..00000000 --- a/.swift-version +++ /dev/null @@ -1 +0,0 @@ -4.0 diff --git a/YogaKit.podspec b/YogaKit.podspec index 86d10666..4fee15ec 100644 --- a/YogaKit.podspec +++ b/YogaKit.podspec @@ -5,7 +5,7 @@ podspec = Pod::Spec.new do |spec| spec.name = 'YogaKit' - spec.version = '1.17.0' + spec.version = '1.18.1' spec.license = { :type => 'MIT', :file => "LICENSE" } spec.homepage = 'https://facebook.github.io/yoga/' spec.documentation_url = 'https://facebook.github.io/yoga/docs/' @@ -16,26 +16,22 @@ podspec = Pod::Spec.new do |spec| spec.authors = 'Facebook' spec.source = { :git => 'https://github.com/facebook/yoga.git', - :tag => spec.version.to_s, + :tag => "1.18.0", } spec.platform = :ios spec.ios.deployment_target = '8.0' spec.ios.frameworks = 'UIKit' - spec.default_subspec = "Core" - spec.dependency 'Yoga', '~> 1.14' spec.module_name = 'YogaKit' - - spec.subspec "Core" do |ss| - ss.source_files = 'YogaKit/Source/*.{h,m}' - ss.public_header_files = 'YogaKit/Source/{YGLayout,UIView+Yoga}.h' - ss.private_header_files = 'YogaKit/Source/YGLayout+Private.h' - end - - spec.subspec 'SwiftExtension' do |ss| - ss.source_files = 'YogaKit/Source/*.{swift}' - end - + spec.dependency 'Yoga', '~> 1.14' + # Fixes the bug related the xcode 11 not able to find swift related frameworks. + # https://github.com/Carthage/Carthage/issues/2825 + # https://twitter.com/krzyzanowskim/status/1151549874653081601?s=21 + spec.pod_target_xcconfig = {"LD_VERIFY_BITCODE": "NO"} + spec.source_files = 'YogaKit/Source/*.{h,m,swift}' + spec.public_header_files = 'YogaKit/Source/{YGLayout,UIView+Yoga}.h' + spec.private_header_files = 'YogaKit/Source/YGLayout+Private.h' + spec.swift_version = '5.1' end # See https://github.com/facebook/yoga/pull/366 From b0a0007d6e94cd8211881f4fbd1061c15f3ecd7f Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 13 Nov 2019 05:27:00 -0800 Subject: [PATCH 212/347] using width for calculating margin top percent Summary: In Yoga, margin is not calculated correctly when defined in terms of percentage at one place. According to CSS docs , margin percentage should be calculated according to width of container's block in case of horizontal writing mode. (https://fburl.com/5imus0it) We were using height of container causing some issues in both android and iOS. ## Changelog: [Yoga] [Fixed] - margin if defined in percentage should use container's width in horizontal writing mode Reviewed By: alickbass Differential Revision: D18395285 fbshipit-source-id: 87ebd013e3cba36da45f6548e4dff1bce69cce9b --- yoga/Yoga.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 016ab0ac..04d199a3 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -1868,15 +1868,17 @@ static float YGNodeCalculateAvailableInnerDim( const YGNodeConstRef node, YGFlexDirection axis, float availableDim, - float ownerDim) { + float ownerDim, + float ownerDimForMarginPadding) { YGFlexDirection direction = YGFlexDirectionIsRow(axis) ? YGFlexDirectionRow : YGFlexDirectionColumn; YGDimension dimension = YGFlexDirectionIsRow(axis) ? YGDimensionWidth : YGDimensionHeight; - const float margin = node->getMarginForAxis(direction, ownerDim).unwrap(); + const float margin = + node->getMarginForAxis(direction, ownerDimForMarginPadding).unwrap(); const float paddingAndBorder = - YGNodePaddingAndBorderForAxis(node, direction, ownerDim); + YGNodePaddingAndBorderForAxis(node, direction, ownerDimForMarginPadding); float availableInnerDim = availableDim - margin - paddingAndBorder; // Max dimension overrides predefined dimension value; Min dimension in turn @@ -2894,9 +2896,9 @@ static void YGNodelayoutImpl( // STEP 2: DETERMINE AVAILABLE SIZE IN MAIN AND CROSS DIRECTIONS float availableInnerWidth = YGNodeCalculateAvailableInnerDim( - node, YGFlexDirectionRow, availableWidth, ownerWidth); + node, YGFlexDirectionRow, availableWidth, ownerWidth, ownerWidth); float availableInnerHeight = YGNodeCalculateAvailableInnerDim( - node, YGFlexDirectionColumn, availableHeight, ownerHeight); + node, YGFlexDirectionColumn, availableHeight, ownerHeight, ownerWidth); float availableInnerMainDim = isMainAxisRow ? availableInnerWidth : availableInnerHeight; From 5960dd888da3bb8d5300830c206a8e89ac2af6e3 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 13 Nov 2019 07:24:16 -0800 Subject: [PATCH 213/347] Add test for margin top not calculated correctly if defined in percentage Summary: Unit tests for margin percent scenario where height was being used instead of width ## Changelog: [Internal] [Yoga] - Added unit tests for margin percent Reviewed By: alickbass Differential Revision: D18448365 fbshipit-source-id: f4404b0c493938fc04dc685e97effa08bfd553b0 --- tests/YGMinMaxDimensionTest.cpp | 79 +++++++++++++++++++++++++++++++++ tests/YGPercentageTest.cpp | 78 ++++++++++++++++++++++++++++++++ 2 files changed, 157 insertions(+) diff --git a/tests/YGMinMaxDimensionTest.cpp b/tests/YGMinMaxDimensionTest.cpp index c253bdff..621aff4d 100644 --- a/tests/YGMinMaxDimensionTest.cpp +++ b/tests/YGMinMaxDimensionTest.cpp @@ -1295,3 +1295,82 @@ TEST(YogaTest, min_max_percent_no_width_height) { YGConfigFree(config); } + +static YGSize _measureCk_test_label_shrink_based_on_height( + YGNodeRef node, + float width, + YGMeasureMode widthMode, + float height, + YGMeasureMode heightMode) { + + if (heightMode == YGMeasureModeAtMost) { + return YGSize{ + .width = 290, + .height = 103, + }; + } else { + return YGSize{ + .width = 290, + .height = height, + }; + } +} + +TEST(YogaTest, min_max_percent_margin_percent_no_width_height) { + const YGConfigRef config = YGConfigNew(); + + const YGNodeRef root = YGNodeNewWithConfig(config); + YGNodeStyleSetWidth(root, 320); + + const YGNodeRef root_child0 = YGNodeNewWithConfig(config); + YGNodeInsertChild(root, root_child0, 0); + + const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config); + YGNodeStyleSetHeight(root_child0_child0, 450); + YGNodeInsertChild(root_child0, root_child0_child0, 0); + + const YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config); + YGNodeStyleSetFlexDirection(root_child0_child0_child0, YGFlexDirectionRow); + YGNodeStyleSetMarginPercent(root_child0_child0_child0, YGEdgeTop, 5); + YGNodeStyleSetMaxHeightPercent(root_child0_child0_child0, 10); + YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0); + + const YGNodeRef root_child0_child0_child0_child0 = + YGNodeNewWithConfig(config); + YGNodeSetMeasureFunc( + root_child0_child0_child0_child0, + _measureCk_test_label_shrink_based_on_height); + YGNodeInsertChild( + root_child0_child0_child0, root_child0_child0_child0_child0, 0); + + YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); + ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root)); + ASSERT_FLOAT_EQ(450, YGNodeLayoutGetHeight(root)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); + ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root_child0)); + ASSERT_FLOAT_EQ(450, YGNodeLayoutGetHeight(root_child0)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0)); + ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root_child0_child0)); + ASSERT_FLOAT_EQ(450, YGNodeLayoutGetHeight(root_child0_child0)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0)); + ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child0)); + ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root_child0_child0_child0)); + ASSERT_FLOAT_EQ(45, YGNodeLayoutGetHeight(root_child0_child0_child0)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0_child0)); + ASSERT_FLOAT_EQ(290, YGNodeLayoutGetWidth(root_child0_child0_child0_child0)); + ASSERT_FLOAT_EQ(45, YGNodeLayoutGetHeight(root_child0_child0_child0_child0)); + + YGNodeFreeRecursive(root); + + YGConfigFree(config); +} diff --git a/tests/YGPercentageTest.cpp b/tests/YGPercentageTest.cpp index 2b9144dd..805df24b 100644 --- a/tests/YGPercentageTest.cpp +++ b/tests/YGPercentageTest.cpp @@ -1193,3 +1193,81 @@ TEST(YogaTest, percent_absolute_position) { YGConfigFree(config); } + +static YGSize _measureCk_test_label_shrink_based_on_height( + YGNodeRef node, + float width, + YGMeasureMode widthMode, + float height, + YGMeasureMode heightMode) { + + if (heightMode == YGMeasureModeAtMost) { + return YGSize{ + .width = 290, + .height = 103, + }; + } else { + return YGSize{ + .width = 290, + .height = height, + }; + } +} + +TEST(YogaTest, margin_percent_with_measure_func) { + const YGConfigRef config = YGConfigNew(); + + const YGNodeRef root = YGNodeNewWithConfig(config); + YGNodeStyleSetWidth(root, 320); + + const YGNodeRef root_child0 = YGNodeNewWithConfig(config); + YGNodeInsertChild(root, root_child0, 0); + + const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config); + YGNodeStyleSetHeight(root_child0_child0, 450); + YGNodeInsertChild(root_child0, root_child0_child0, 0); + + const YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config); + YGNodeStyleSetFlexDirection(root_child0_child0_child0, YGFlexDirectionRow); + YGNodeStyleSetMarginPercent(root_child0_child0_child0, YGEdgeTop, 5); + YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0); + + const YGNodeRef root_child0_child0_child0_child0 = + YGNodeNewWithConfig(config); + YGNodeSetMeasureFunc( + root_child0_child0_child0_child0, + _measureCk_test_label_shrink_based_on_height); + YGNodeInsertChild( + root_child0_child0_child0, root_child0_child0_child0_child0, 0); + + YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); + ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root)); + ASSERT_FLOAT_EQ(450, YGNodeLayoutGetHeight(root)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); + ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root_child0)); + ASSERT_FLOAT_EQ(450, YGNodeLayoutGetHeight(root_child0)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0)); + ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root_child0_child0)); + ASSERT_FLOAT_EQ(450, YGNodeLayoutGetHeight(root_child0_child0)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0)); + ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child0)); + ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root_child0_child0_child0)); + ASSERT_FLOAT_EQ(103, YGNodeLayoutGetHeight(root_child0_child0_child0)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0_child0)); + ASSERT_FLOAT_EQ(290, YGNodeLayoutGetWidth(root_child0_child0_child0_child0)); + ASSERT_FLOAT_EQ(103, YGNodeLayoutGetHeight(root_child0_child0_child0_child0)); + + YGNodeFreeRecursive(root); + + YGConfigFree(config); +} From f99da097161445fe07075f514c686e441b4d6e30 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 13 Nov 2019 15:13:02 -0800 Subject: [PATCH 214/347] Remove useVanillaJNI flag and usage of fbjni in yoga build Summary: ## Changelog: [General] [Yoga] - Use vanilla jni instead of fbjni for all the jni communication Reviewed By: astreet Differential Revision: D17808005 fbshipit-source-id: 5e9a1ed73978f519c71c248774a28e5a294e7c7f --- BUCK | 17 +- java/BUCK | 18 +- java/CMakeLists.txt | 6 +- java/com/facebook/yoga/YogaConfig.java | 4 - java/com/facebook/yoga/YogaConfigFactory.java | 4 - java/com/facebook/yoga/YogaConfigJNIBase.java | 50 +- .../facebook/yoga/YogaConfigJNIFinalizer.java | 9 +- java/com/facebook/yoga/YogaNative.java | 100 +-- java/com/facebook/yoga/YogaNodeFactory.java | 4 - java/com/facebook/yoga/YogaNodeJNIBase.java | 324 ++------ .../facebook/yoga/YogaNodeJNIFinalizer.java | 9 +- java/jni/YGJNI.cpp | 712 ------------------ java/jni/YGJNIVanilla.h | 2 + java/jni/YGJTypes.cpp | 43 -- java/jni/YGJTypes.h | 61 -- java/jni/yogajni.cpp | 8 +- java/jni/yogajni.h | 12 - .../facebook/yoga/TestParametrization.java | 20 +- 18 files changed, 125 insertions(+), 1278 deletions(-) delete mode 100644 java/jni/YGJNI.cpp delete mode 100644 java/jni/YGJTypes.cpp delete mode 100644 java/jni/YGJTypes.h delete mode 100644 java/jni/yogajni.h diff --git a/BUCK b/BUCK index b6df1dde..fa0e5580 100644 --- a/BUCK +++ b/BUCK @@ -2,7 +2,7 @@ # # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -load("//tools/build_defs/oss:yoga_defs.bzl", "BASE_COMPILER_FLAGS", "GTEST_TARGET", "LIBRARY_COMPILER_FLAGS", "subdir_glob", "yoga_cxx_library", "yoga_cxx_test", "yoga_dep") +load("//tools/build_defs/oss:yoga_defs.bzl", "BASE_COMPILER_FLAGS", "GTEST_TARGET", "LIBRARY_COMPILER_FLAGS", "YOGA_ROOTS", "subdir_glob", "yoga_cxx_library", "yoga_cxx_test", "yoga_dep", "yoga_prebuilt_cxx_library") GMOCK_OVERRIDE_FLAGS = [ # gmock does not mark mocked methods as override, ignore the warnings in tests @@ -14,6 +14,18 @@ TEST_COMPILER_FLAGS = BASE_COMPILER_FLAGS + GMOCK_OVERRIDE_FLAGS + [ "-DYG_ENABLE_EVENTS", ] +yoga_prebuilt_cxx_library( + name = "ndklog", + exported_platform_linker_flags = [ + ( + "^android.*", + ["-llog"], + ), + ], + header_only = True, + visibility = YOGA_ROOTS, +) + yoga_cxx_library( name = "yoga", srcs = glob(["yoga/**/*.cpp"]), @@ -24,7 +36,7 @@ yoga_cxx_library( tests = [":YogaTests"], visibility = ["PUBLIC"], deps = [ - yoga_dep("lib/fb:ndklog"), + ":ndklog", ], ) @@ -39,7 +51,6 @@ yoga_cxx_library( visibility = ["PUBLIC"], deps = [ ":yoga", - yoga_dep("lib/fb:ndklog"), ], ) diff --git a/java/BUCK b/java/BUCK index 5057aa56..72be4261 100644 --- a/java/BUCK +++ b/java/BUCK @@ -3,7 +3,7 @@ # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID", "CXX_LIBRARY_WHITELIST", "FBJNI_JAVA_TARGET", "FBJNI_TARGET", "JNI_TARGET", "JSR_305_TARGET", "JUNIT_TARGET", "PROGRUARD_ANNOTATIONS_TARGET", "SOLOADER_TARGET", "yoga_cxx_lib", "yoga_cxx_library", "yoga_dep", "yoga_java_binary", "yoga_java_library", "yoga_java_test") +load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID", "CXX_LIBRARY_WHITELIST", "JNI_TARGET", "JSR_305_TARGET", "JUNIT_TARGET", "PROGRUARD_ANNOTATIONS_TARGET", "SOLOADER_TARGET", "YOGA_ROOTS", "yoga_cxx_lib", "yoga_cxx_library", "yoga_dep", "yoga_java_binary", "yoga_java_library", "yoga_java_test", "yoga_prebuilt_cxx_library") CXX_LIBRARY_WHITELIST_FOR_TESTS = CXX_LIBRARY_WHITELIST + [ yoga_cxx_lib("testutil:jni"), @@ -16,6 +16,18 @@ YOGA_JAVA_IMPLEMENTATION_FILES = [ "com/facebook/yoga/YogaNative.java", ] +yoga_prebuilt_cxx_library( + name = "ndklog", + exported_platform_linker_flags = [ + ( + "^android.*", + ["-llog"], + ), + ], + header_only = True, + visibility = YOGA_ROOTS, +) + yoga_cxx_library( name = "jni", srcs = glob(["jni/*.cpp"]), @@ -41,9 +53,9 @@ yoga_cxx_library( soname = "libyoga.$(ext)", visibility = ["PUBLIC"], deps = [ - FBJNI_TARGET, JNI_TARGET, yoga_dep(":yoga"), + ":ndklog", ], ) @@ -72,7 +84,6 @@ yoga_java_library( deps = [ ":java-interface", ":jni", - FBJNI_JAVA_TARGET, JSR_305_TARGET, PROGRUARD_ANNOTATIONS_TARGET, SOLOADER_TARGET, @@ -111,6 +122,5 @@ yoga_java_binary( name = "yoga", deps = [ ":java", - FBJNI_JAVA_TARGET, ], ) diff --git a/java/CMakeLists.txt b/java/CMakeLists.txt index 4a3dcd86..78a696f5 100644 --- a/java/CMakeLists.txt +++ b/java/CMakeLists.txt @@ -8,17 +8,14 @@ cmake_minimum_required(VERSION 3.4.1) set(CMAKE_VERBOSE_MAKEFILE on) # configure import libs -set(libfb_DIR ${CMAKE_SOURCE_DIR}/../lib/fb/src/main/cpp) set(yogacore_DIR ${CMAKE_SOURCE_DIR}/..) set(build_DIR ${CMAKE_SOURCE_DIR}/build) -set(libfb_build_DIR ${build_DIR}/libfb/${ANDROID_ABI}) set(yogacore_build_DIR ${build_DIR}/yogacore/${ANDROID_ABI}) file(MAKE_DIRECTORY ${build_DIR}) -add_subdirectory(${libfb_DIR} ${libfb_build_DIR}) add_subdirectory(${yogacore_DIR} ${yogacore_build_DIR}) add_compile_options( @@ -36,7 +33,6 @@ file(GLOB jni_SRC add_library(yoga SHARED ${jni_SRC}) target_include_directories(yoga PRIVATE - ${libfb_DIR}/include ${yogacore_DIR}) -target_link_libraries(yoga -Wl,--gc-sections yogacore fb) +target_link_libraries(yoga -Wl,--gc-sections yogacore) diff --git a/java/com/facebook/yoga/YogaConfig.java b/java/com/facebook/yoga/YogaConfig.java index 31e9266b..8dd2ce82 100644 --- a/java/com/facebook/yoga/YogaConfig.java +++ b/java/com/facebook/yoga/YogaConfig.java @@ -38,8 +38,4 @@ public abstract class YogaConfig { public abstract YogaLogger getLogger(); abstract long getNativePointer(); - - public abstract void setUseVanillaJNI(boolean useVanillaJNI); - - public abstract boolean useVanillaJNI(); } diff --git a/java/com/facebook/yoga/YogaConfigFactory.java b/java/com/facebook/yoga/YogaConfigFactory.java index 0ee5203b..0d9ed50d 100644 --- a/java/com/facebook/yoga/YogaConfigFactory.java +++ b/java/com/facebook/yoga/YogaConfigFactory.java @@ -11,8 +11,4 @@ public abstract class YogaConfigFactory { public static YogaConfig create() { return new YogaConfigJNIFinalizer(); } - - public static YogaConfig create(boolean useVanillaJNI) { - return new YogaConfigJNIFinalizer(useVanillaJNI); - } } diff --git a/java/com/facebook/yoga/YogaConfigJNIBase.java b/java/com/facebook/yoga/YogaConfigJNIBase.java index db83ab7c..fdc351d8 100644 --- a/java/com/facebook/yoga/YogaConfigJNIBase.java +++ b/java/com/facebook/yoga/YogaConfigJNIBase.java @@ -11,7 +11,6 @@ public abstract class YogaConfigJNIBase extends YogaConfig { long mNativePointer; private YogaLogger mLogger; - protected boolean useVanillaJNI = false; private YogaConfigJNIBase(long nativePointer) { if (nativePointer == 0) { @@ -21,40 +20,27 @@ public abstract class YogaConfigJNIBase extends YogaConfig { } YogaConfigJNIBase() { - this(YogaNative.jni_YGConfigNew()); + this(YogaNative.jni_YGConfigNewJNI()); } YogaConfigJNIBase(boolean useVanillaJNI) { - this(useVanillaJNI ? YogaNative.jni_YGConfigNewJNI() : YogaNative.jni_YGConfigNew()); - this.useVanillaJNI = useVanillaJNI; + this(YogaNative.jni_YGConfigNewJNI()); } public void setExperimentalFeatureEnabled(YogaExperimentalFeature feature, boolean enabled) { - if (useVanillaJNI) - YogaNative.jni_YGConfigSetExperimentalFeatureEnabledJNI(mNativePointer, feature.intValue(), enabled); - else - YogaNative.jni_YGConfigSetExperimentalFeatureEnabled(mNativePointer, feature.intValue(), enabled); + YogaNative.jni_YGConfigSetExperimentalFeatureEnabledJNI(mNativePointer, feature.intValue(), enabled); } public void setUseWebDefaults(boolean useWebDefaults) { - if (useVanillaJNI) - YogaNative.jni_YGConfigSetUseWebDefaultsJNI(mNativePointer, useWebDefaults); - else - YogaNative.jni_YGConfigSetUseWebDefaults(mNativePointer, useWebDefaults); + YogaNative.jni_YGConfigSetUseWebDefaultsJNI(mNativePointer, useWebDefaults); } public void setPrintTreeFlag(boolean enable) { - if (useVanillaJNI) - YogaNative.jni_YGConfigSetPrintTreeFlagJNI(mNativePointer, enable); - else - YogaNative.jni_YGConfigSetPrintTreeFlag(mNativePointer, enable); + YogaNative.jni_YGConfigSetPrintTreeFlagJNI(mNativePointer, enable); } public void setPointScaleFactor(float pixelsInPoint) { - if (useVanillaJNI) - YogaNative.jni_YGConfigSetPointScaleFactorJNI(mNativePointer, pixelsInPoint); - else - YogaNative.jni_YGConfigSetPointScaleFactor(mNativePointer, pixelsInPoint); + YogaNative.jni_YGConfigSetPointScaleFactorJNI(mNativePointer, pixelsInPoint); } /** @@ -63,10 +49,7 @@ public abstract class YogaConfigJNIBase extends YogaConfig { * Because this was such a long-standing bug we must allow legacy users to switch back to this behaviour. */ public void setUseLegacyStretchBehaviour(boolean useLegacyStretchBehaviour) { - if (useVanillaJNI) - YogaNative.jni_YGConfigSetUseLegacyStretchBehaviourJNI(mNativePointer, useLegacyStretchBehaviour); - else - YogaNative.jni_YGConfigSetUseLegacyStretchBehaviour(mNativePointer, useLegacyStretchBehaviour); + YogaNative.jni_YGConfigSetUseLegacyStretchBehaviourJNI(mNativePointer, useLegacyStretchBehaviour); } /** @@ -76,20 +59,13 @@ public abstract class YogaConfigJNIBase extends YogaConfig { */ public void setShouldDiffLayoutWithoutLegacyStretchBehaviour( boolean shouldDiffLayoutWithoutLegacyStretchBehaviour) { - if (useVanillaJNI) YogaNative.jni_YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviourJNI( mNativePointer, shouldDiffLayoutWithoutLegacyStretchBehaviour); - else - YogaNative.jni_YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviour( - mNativePointer, shouldDiffLayoutWithoutLegacyStretchBehaviour); } public void setLogger(YogaLogger logger) { mLogger = logger; - if (useVanillaJNI) - YogaNative.jni_YGConfigSetLoggerJNI(mNativePointer, logger); - else - YogaNative.jni_YGConfigSetLogger(mNativePointer, logger); + YogaNative.jni_YGConfigSetLoggerJNI(mNativePointer, logger); } public YogaLogger getLogger() { @@ -99,14 +75,4 @@ public abstract class YogaConfigJNIBase extends YogaConfig { long getNativePointer() { return mNativePointer; } - - @Override - public void setUseVanillaJNI(boolean useVanillaJNI) { - this.useVanillaJNI = useVanillaJNI; - } - - @Override - public boolean useVanillaJNI() { - return this.useVanillaJNI; - } } diff --git a/java/com/facebook/yoga/YogaConfigJNIFinalizer.java b/java/com/facebook/yoga/YogaConfigJNIFinalizer.java index 74528275..bb082e86 100644 --- a/java/com/facebook/yoga/YogaConfigJNIFinalizer.java +++ b/java/com/facebook/yoga/YogaConfigJNIFinalizer.java @@ -12,10 +12,6 @@ public class YogaConfigJNIFinalizer extends YogaConfigJNIBase { super(); } - public YogaConfigJNIFinalizer(boolean useVanillaJNI) { - super(useVanillaJNI); - } - @Override protected void finalize() throws Throwable { try { @@ -29,10 +25,7 @@ public class YogaConfigJNIFinalizer extends YogaConfigJNIBase { if (mNativePointer != 0) { long nativePointer = mNativePointer; mNativePointer = 0; - if (useVanillaJNI) - YogaNative.jni_YGConfigFreeJNI(nativePointer); - else - YogaNative.jni_YGConfigFree(nativePointer); + YogaNative.jni_YGConfigFreeJNI(nativePointer); } } } diff --git a/java/com/facebook/yoga/YogaNative.java b/java/com/facebook/yoga/YogaNative.java index 6a13a1a5..334eaab5 100644 --- a/java/com/facebook/yoga/YogaNative.java +++ b/java/com/facebook/yoga/YogaNative.java @@ -15,105 +15,7 @@ public class YogaNative { static { SoLoader.loadLibrary("yoga"); } - - // YGConfig related - static native long jni_YGConfigNew(); - static native void jni_YGConfigFree(long nativePointer); - static native void jni_YGConfigSetExperimentalFeatureEnabled(long nativePointer, int feature, boolean enabled); - static native void jni_YGConfigSetUseWebDefaults(long nativePointer, boolean useWebDefaults); - static native void jni_YGConfigSetPrintTreeFlag(long nativePointer, boolean enable); - static native void jni_YGConfigSetPointScaleFactor(long nativePointer, float pixelsInPoint); - static native void jni_YGConfigSetUseLegacyStretchBehaviour(long nativePointer, boolean useLegacyStretchBehaviour); - static native void jni_YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviour(long nativePointer, boolean shouldDiffLayoutWithoutLegacyStretchBehaviour); - static native void jni_YGConfigSetLogger(long nativePointer, Object logger); - - - // YGNode related - static native long jni_YGNodeNew(); - static native long jni_YGNodeNewWithConfig(long configPointer); - static native void jni_YGNodeFree(long nativePointer); - static native void jni_YGNodeReset(long nativePointer); - static native void jni_YGNodeInsertChild(long nativePointer, long childPointer, int index); - static native void jni_YGNodeSetIsReferenceBaseline(long nativePointer, boolean isReferenceBaseline); - static native boolean jni_YGNodeIsReferenceBaseline(long nativePointer); - static native void jni_YGNodeClearChildren(long nativePointer); - static native void jni_YGNodeRemoveChild(long nativePointer, long childPointer); - static native void jni_YGNodeCalculateLayout(long nativePointer, float width, float height, long[] nativePointers, YogaNodeJNIBase[] nodes); - static native void jni_YGNodeMarkDirty(long nativePointer); - static native void jni_YGNodeMarkDirtyAndPropogateToDescendants(long nativePointer); - static native boolean jni_YGNodeIsDirty(long nativePointer); - static native void jni_YGNodeCopyStyle(long dstNativePointer, long srcNativePointer); - static native int jni_YGNodeStyleGetDirection(long nativePointer); - static native void jni_YGNodeStyleSetDirection(long nativePointer, int direction); - static native int jni_YGNodeStyleGetFlexDirection(long nativePointer); - static native void jni_YGNodeStyleSetFlexDirection(long nativePointer, int flexDirection); - static native int jni_YGNodeStyleGetJustifyContent(long nativePointer); - static native void jni_YGNodeStyleSetJustifyContent(long nativePointer, int justifyContent); - static native int jni_YGNodeStyleGetAlignItems(long nativePointer); - static native void jni_YGNodeStyleSetAlignItems(long nativePointer, int alignItems); - static native int jni_YGNodeStyleGetAlignSelf(long nativePointer); - static native void jni_YGNodeStyleSetAlignSelf(long nativePointer, int alignSelf); - static native int jni_YGNodeStyleGetAlignContent(long nativePointer); - static native void jni_YGNodeStyleSetAlignContent(long nativePointer, int alignContent); - static native int jni_YGNodeStyleGetPositionType(long nativePointer); - static native void jni_YGNodeStyleSetPositionType(long nativePointer, int positionType); - static native int jni_YGNodeStyleGetFlexWrap(long nativePointer); - static native void jni_YGNodeStyleSetFlexWrap(long nativePointer, int wrapType); - static native int jni_YGNodeStyleGetOverflow(long nativePointer); - static native void jni_YGNodeStyleSetOverflow(long nativePointer, int overflow); - static native int jni_YGNodeStyleGetDisplay(long nativePointer); - static native void jni_YGNodeStyleSetDisplay(long nativePointer, int display); - static native float jni_YGNodeStyleGetFlex(long nativePointer); - static native void jni_YGNodeStyleSetFlex(long nativePointer, float flex); - static native float jni_YGNodeStyleGetFlexGrow(long nativePointer); - static native void jni_YGNodeStyleSetFlexGrow(long nativePointer, float flexGrow); - static native float jni_YGNodeStyleGetFlexShrink(long nativePointer); - static native void jni_YGNodeStyleSetFlexShrink(long nativePointer, float flexShrink); - static native long jni_YGNodeStyleGetFlexBasis(long nativePointer); - static native void jni_YGNodeStyleSetFlexBasis(long nativePointer, float flexBasis); - static native void jni_YGNodeStyleSetFlexBasisPercent(long nativePointer, float percent); - static native void jni_YGNodeStyleSetFlexBasisAuto(long nativePointer); - static native long jni_YGNodeStyleGetMargin(long nativePointer, int edge); - static native void jni_YGNodeStyleSetMargin(long nativePointer, int edge, float margin); - static native void jni_YGNodeStyleSetMarginPercent(long nativePointer, int edge, float percent); - static native void jni_YGNodeStyleSetMarginAuto(long nativePointer, int edge); - static native long jni_YGNodeStyleGetPadding(long nativePointer, int edge); - static native void jni_YGNodeStyleSetPadding(long nativePointer, int edge, float padding); - static native void jni_YGNodeStyleSetPaddingPercent(long nativePointer, int edge, float percent); - static native float jni_YGNodeStyleGetBorder(long nativePointer, int edge); - static native void jni_YGNodeStyleSetBorder(long nativePointer, int edge, float border); - static native long jni_YGNodeStyleGetPosition(long nativePointer, int edge); - static native void jni_YGNodeStyleSetPosition(long nativePointer, int edge, float position); - static native void jni_YGNodeStyleSetPositionPercent(long nativePointer, int edge, float percent); - static native long jni_YGNodeStyleGetWidth(long nativePointer); - static native void jni_YGNodeStyleSetWidth(long nativePointer, float width); - static native void jni_YGNodeStyleSetWidthPercent(long nativePointer, float percent); - static native void jni_YGNodeStyleSetWidthAuto(long nativePointer); - static native long jni_YGNodeStyleGetHeight(long nativePointer); - static native void jni_YGNodeStyleSetHeight(long nativePointer, float height); - static native void jni_YGNodeStyleSetHeightPercent(long nativePointer, float percent); - static native void jni_YGNodeStyleSetHeightAuto(long nativePointer); - static native long jni_YGNodeStyleGetMinWidth(long nativePointer); - static native void jni_YGNodeStyleSetMinWidth(long nativePointer, float minWidth); - static native void jni_YGNodeStyleSetMinWidthPercent(long nativePointer, float percent); - static native long jni_YGNodeStyleGetMinHeight(long nativePointer); - static native void jni_YGNodeStyleSetMinHeight(long nativePointer, float minHeight); - static native void jni_YGNodeStyleSetMinHeightPercent(long nativePointer, float percent); - static native long jni_YGNodeStyleGetMaxWidth(long nativePointer); - static native void jni_YGNodeStyleSetMaxWidth(long nativePointer, float maxWidth); - static native void jni_YGNodeStyleSetMaxWidthPercent(long nativePointer, float percent); - static native long jni_YGNodeStyleGetMaxHeight(long nativePointer); - static native void jni_YGNodeStyleSetMaxHeight(long nativePointer, float maxheight); - static native void jni_YGNodeStyleSetMaxHeightPercent(long nativePointer, float percent); - static native float jni_YGNodeStyleGetAspectRatio(long nativePointer); - static native void jni_YGNodeStyleSetAspectRatio(long nativePointer, float aspectRatio); - static native void jni_YGNodeSetHasMeasureFunc(long nativePointer, boolean hasMeasureFunc); - static native void jni_YGNodeSetHasBaselineFunc(long nativePointer, boolean hasMeasureFunc); - static native void jni_YGNodePrint(long nativePointer); - static native void jni_YGNodeSetStyleInputs(long nativePointer, float[] styleInputsArray, int size); - static native long jni_YGNodeClone(long nativePointer); - - + // JNI methods that use Vanilla JNI // YGConfig related static native long jni_YGConfigNewJNI(); diff --git a/java/com/facebook/yoga/YogaNodeFactory.java b/java/com/facebook/yoga/YogaNodeFactory.java index dffc16df..042c2154 100644 --- a/java/com/facebook/yoga/YogaNodeFactory.java +++ b/java/com/facebook/yoga/YogaNodeFactory.java @@ -12,10 +12,6 @@ public abstract class YogaNodeFactory { return new YogaNodeJNIFinalizer(); } - public static YogaNode create(boolean useVanillaJNI) { - return new YogaNodeJNIFinalizer(useVanillaJNI); - } - public static YogaNode create(YogaConfig config) { return new YogaNodeJNIFinalizer(config); } diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index c08e43de..45d017c4 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -47,8 +47,6 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { private boolean mHasNewLayout = true; - protected boolean useVanillaJNI = false; - private YogaNodeJNIBase(long nativePointer) { if (nativePointer == 0) { throw new IllegalStateException("Failed to allocate native memory"); @@ -57,17 +55,11 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { } YogaNodeJNIBase() { - this(YogaNative.jni_YGNodeNew()); - } - - YogaNodeJNIBase(boolean useVanillaJNI) { - this(useVanillaJNI ? YogaNative.jni_YGNodeNewJNI() : YogaNative.jni_YGNodeNew()); - this.useVanillaJNI = useVanillaJNI; + this(YogaNative.jni_YGNodeNewJNI()); } YogaNodeJNIBase(YogaConfig config) { - this(config.useVanillaJNI() ? YogaNative.jni_YGNodeNewWithConfigJNI(((YogaConfigJNIBase)config).mNativePointer) : YogaNative.jni_YGNodeNewWithConfig(((YogaConfigJNIBase)config).mNativePointer)); - this.useVanillaJNI = config.useVanillaJNI(); + this(YogaNative.jni_YGNodeNewWithConfigJNI(((YogaConfigJNIBase)config).mNativePointer)); } public void reset() { @@ -78,10 +70,7 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { mHasNewLayout = true; mLayoutDirection = 0; - if (useVanillaJNI) - YogaNative.jni_YGNodeResetJNI(mNativePointer); - else - YogaNative.jni_YGNodeReset(mNativePointer); + YogaNative.jni_YGNodeResetJNI(mNativePointer); } public int getChildCount() { @@ -106,28 +95,22 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { } mChildren.add(i, child); child.mOwner = this; - if (useVanillaJNI) - YogaNative.jni_YGNodeInsertChildJNI(mNativePointer, child.mNativePointer, i); - else - YogaNative.jni_YGNodeInsertChild(mNativePointer, child.mNativePointer, i); + YogaNative.jni_YGNodeInsertChildJNI(mNativePointer, child.mNativePointer, i); } public void setIsReferenceBaseline(boolean isReferenceBaseline) { - if (useVanillaJNI) - YogaNative.jni_YGNodeSetIsReferenceBaselineJNI(mNativePointer, isReferenceBaseline); - else - YogaNative.jni_YGNodeSetIsReferenceBaseline(mNativePointer, isReferenceBaseline); + YogaNative.jni_YGNodeSetIsReferenceBaselineJNI(mNativePointer, isReferenceBaseline); } public boolean isReferenceBaseline() { - return useVanillaJNI ? YogaNative.jni_YGNodeIsReferenceBaselineJNI(mNativePointer) : YogaNative.jni_YGNodeIsReferenceBaseline(mNativePointer); + return YogaNative.jni_YGNodeIsReferenceBaselineJNI(mNativePointer); } @Override public YogaNodeJNIBase cloneWithoutChildren() { try { YogaNodeJNIBase clonedYogaNode = (YogaNodeJNIBase) super.clone(); - long clonedNativePointer = useVanillaJNI ? YogaNative.jni_YGNodeCloneJNI(mNativePointer) : YogaNative.jni_YGNodeClone(mNativePointer);; + long clonedNativePointer = YogaNative.jni_YGNodeCloneJNI(mNativePointer); clonedYogaNode.mOwner = null; clonedYogaNode.mNativePointer = clonedNativePointer; clonedYogaNode.clearChildren(); @@ -140,10 +123,7 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { private void clearChildren() { mChildren = null; - if (useVanillaJNI) - YogaNative.jni_YGNodeClearChildrenJNI(mNativePointer); - else - YogaNative.jni_YGNodeClearChildren(mNativePointer); + YogaNative.jni_YGNodeClearChildrenJNI(mNativePointer); } public YogaNodeJNIBase removeChildAt(int i) { @@ -153,10 +133,7 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { } final YogaNodeJNIBase child = mChildren.remove(i); child.mOwner = null; - if (useVanillaJNI) - YogaNative.jni_YGNodeRemoveChildJNI(mNativePointer, child.mNativePointer); - else - YogaNative.jni_YGNodeRemoveChild(mNativePointer, child.mNativePointer); + YogaNative.jni_YGNodeRemoveChildJNI(mNativePointer, child.mNativePointer); return child; } @@ -203,418 +180,285 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { nativePointers[i] = nodes[i].mNativePointer; } - if (useVanillaJNI) - YogaNative.jni_YGNodeCalculateLayoutJNI(mNativePointer, width, height, nativePointers, nodes); - else - YogaNative.jni_YGNodeCalculateLayout(mNativePointer, width, height, nativePointers, nodes); + YogaNative.jni_YGNodeCalculateLayoutJNI(mNativePointer, width, height, nativePointers, nodes); } public void dirty() { - if (useVanillaJNI) - YogaNative.jni_YGNodeMarkDirtyJNI(mNativePointer); - else - YogaNative.jni_YGNodeMarkDirty(mNativePointer); + YogaNative.jni_YGNodeMarkDirtyJNI(mNativePointer); } public void dirtyAllDescendants() { - if (useVanillaJNI) - YogaNative.jni_YGNodeMarkDirtyAndPropogateToDescendantsJNI(mNativePointer); - else - YogaNative.jni_YGNodeMarkDirtyAndPropogateToDescendants(mNativePointer); + YogaNative.jni_YGNodeMarkDirtyAndPropogateToDescendantsJNI(mNativePointer); } public boolean isDirty() { - return useVanillaJNI ? YogaNative.jni_YGNodeIsDirtyJNI(mNativePointer) : YogaNative.jni_YGNodeIsDirty(mNativePointer); + return YogaNative.jni_YGNodeIsDirtyJNI(mNativePointer); } @Override public void copyStyle(YogaNode srcNode) { - if (useVanillaJNI) - YogaNative.jni_YGNodeCopyStyleJNI(mNativePointer, ((YogaNodeJNIBase) srcNode).mNativePointer); - else - YogaNative.jni_YGNodeCopyStyle(mNativePointer, ((YogaNodeJNIBase) srcNode).mNativePointer); + YogaNative.jni_YGNodeCopyStyleJNI(mNativePointer, ((YogaNodeJNIBase) srcNode).mNativePointer); } public YogaDirection getStyleDirection() { - return YogaDirection.fromInt(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetDirectionJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetDirection(mNativePointer)); + return YogaDirection.fromInt(YogaNative.jni_YGNodeStyleGetDirectionJNI(mNativePointer)); } public void setDirection(YogaDirection direction) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetDirectionJNI(mNativePointer, direction.intValue()); - else - YogaNative.jni_YGNodeStyleSetDirection(mNativePointer, direction.intValue()); + YogaNative.jni_YGNodeStyleSetDirectionJNI(mNativePointer, direction.intValue()); } public YogaFlexDirection getFlexDirection() { - return YogaFlexDirection.fromInt(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetFlexDirectionJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetFlexDirection(mNativePointer)); + return YogaFlexDirection.fromInt(YogaNative.jni_YGNodeStyleGetFlexDirectionJNI(mNativePointer)); } public void setFlexDirection(YogaFlexDirection flexDirection) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetFlexDirectionJNI(mNativePointer, flexDirection.intValue()); - else - YogaNative.jni_YGNodeStyleSetFlexDirection(mNativePointer, flexDirection.intValue()); + YogaNative.jni_YGNodeStyleSetFlexDirectionJNI(mNativePointer, flexDirection.intValue()); } public YogaJustify getJustifyContent() { - return YogaJustify.fromInt(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetJustifyContentJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetJustifyContent(mNativePointer)); + return YogaJustify.fromInt(YogaNative.jni_YGNodeStyleGetJustifyContentJNI(mNativePointer)); } public void setJustifyContent(YogaJustify justifyContent) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetJustifyContentJNI(mNativePointer, justifyContent.intValue()); - else - YogaNative.jni_YGNodeStyleSetJustifyContent(mNativePointer, justifyContent.intValue()); + YogaNative.jni_YGNodeStyleSetJustifyContentJNI(mNativePointer, justifyContent.intValue()); } public YogaAlign getAlignItems() { - return YogaAlign.fromInt(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetAlignItemsJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetAlignItems(mNativePointer)); + return YogaAlign.fromInt(YogaNative.jni_YGNodeStyleGetAlignItemsJNI(mNativePointer)); } public void setAlignItems(YogaAlign alignItems) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetAlignItemsJNI(mNativePointer, alignItems.intValue()); - else - YogaNative.jni_YGNodeStyleSetAlignItems(mNativePointer, alignItems.intValue()); + YogaNative.jni_YGNodeStyleSetAlignItemsJNI(mNativePointer, alignItems.intValue()); } public YogaAlign getAlignSelf() { - return YogaAlign.fromInt(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetAlignSelfJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetAlignSelf(mNativePointer)); + return YogaAlign.fromInt(YogaNative.jni_YGNodeStyleGetAlignSelfJNI(mNativePointer)); } public void setAlignSelf(YogaAlign alignSelf) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetAlignSelfJNI(mNativePointer, alignSelf.intValue()); - else - YogaNative.jni_YGNodeStyleSetAlignSelf(mNativePointer, alignSelf.intValue()); + YogaNative.jni_YGNodeStyleSetAlignSelfJNI(mNativePointer, alignSelf.intValue()); } public YogaAlign getAlignContent() { - return YogaAlign.fromInt(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetAlignContentJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetAlignContent(mNativePointer)); + return YogaAlign.fromInt(YogaNative.jni_YGNodeStyleGetAlignContentJNI(mNativePointer)); } public void setAlignContent(YogaAlign alignContent) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetAlignContentJNI(mNativePointer, alignContent.intValue()); - else - YogaNative.jni_YGNodeStyleSetAlignContent(mNativePointer, alignContent.intValue()); + YogaNative.jni_YGNodeStyleSetAlignContentJNI(mNativePointer, alignContent.intValue()); } public YogaPositionType getPositionType() { - return YogaPositionType.fromInt(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetPositionTypeJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetPositionType(mNativePointer)); + return YogaPositionType.fromInt(YogaNative.jni_YGNodeStyleGetPositionTypeJNI(mNativePointer)); } public void setPositionType(YogaPositionType positionType) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetPositionTypeJNI(mNativePointer, positionType.intValue()); - else - YogaNative.jni_YGNodeStyleSetPositionType(mNativePointer, positionType.intValue()); + YogaNative.jni_YGNodeStyleSetPositionTypeJNI(mNativePointer, positionType.intValue()); } public YogaWrap getWrap() { - return YogaWrap.fromInt(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetFlexWrapJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetFlexWrap(mNativePointer)); + return YogaWrap.fromInt(YogaNative.jni_YGNodeStyleGetFlexWrapJNI(mNativePointer)); } public void setWrap(YogaWrap flexWrap) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetFlexWrapJNI(mNativePointer, flexWrap.intValue()); - else - YogaNative.jni_YGNodeStyleSetFlexWrap(mNativePointer, flexWrap.intValue()); + YogaNative.jni_YGNodeStyleSetFlexWrapJNI(mNativePointer, flexWrap.intValue()); } public YogaOverflow getOverflow() { - return YogaOverflow.fromInt(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetOverflowJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetOverflow(mNativePointer)); + return YogaOverflow.fromInt(YogaNative.jni_YGNodeStyleGetOverflowJNI(mNativePointer)); } public void setOverflow(YogaOverflow overflow) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetOverflowJNI(mNativePointer, overflow.intValue()); - else - YogaNative.jni_YGNodeStyleSetOverflow(mNativePointer, overflow.intValue()); + YogaNative.jni_YGNodeStyleSetOverflowJNI(mNativePointer, overflow.intValue()); } public YogaDisplay getDisplay() { - return YogaDisplay.fromInt(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetDisplayJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetDisplay(mNativePointer)); + return YogaDisplay.fromInt(YogaNative.jni_YGNodeStyleGetDisplayJNI(mNativePointer)); } public void setDisplay(YogaDisplay display) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetDisplayJNI(mNativePointer, display.intValue()); - else - YogaNative.jni_YGNodeStyleSetDisplay(mNativePointer, display.intValue()); + YogaNative.jni_YGNodeStyleSetDisplayJNI(mNativePointer, display.intValue()); } public float getFlex() { - return useVanillaJNI ? YogaNative.jni_YGNodeStyleGetFlexJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetFlex(mNativePointer); + return YogaNative.jni_YGNodeStyleGetFlexJNI(mNativePointer); } public void setFlex(float flex) { - if (useVanillaJNI) { - YogaNative.jni_YGNodeStyleSetFlexJNI(mNativePointer, flex); - } else { - YogaNative.jni_YGNodeStyleSetFlex(mNativePointer, flex); - } + YogaNative.jni_YGNodeStyleSetFlexJNI(mNativePointer, flex); } public float getFlexGrow() { - return useVanillaJNI ? YogaNative.jni_YGNodeStyleGetFlexGrowJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetFlexGrow(mNativePointer); + return YogaNative.jni_YGNodeStyleGetFlexGrowJNI(mNativePointer); } public void setFlexGrow(float flexGrow) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetFlexGrowJNI(mNativePointer, flexGrow); - else - YogaNative.jni_YGNodeStyleSetFlexGrow(mNativePointer, flexGrow); + YogaNative.jni_YGNodeStyleSetFlexGrowJNI(mNativePointer, flexGrow); } public float getFlexShrink() { - return useVanillaJNI ? YogaNative.jni_YGNodeStyleGetFlexShrinkJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetFlexShrink(mNativePointer); + return YogaNative.jni_YGNodeStyleGetFlexShrinkJNI(mNativePointer); } public void setFlexShrink(float flexShrink) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetFlexShrinkJNI(mNativePointer, flexShrink); - else - YogaNative.jni_YGNodeStyleSetFlexShrink(mNativePointer, flexShrink); + YogaNative.jni_YGNodeStyleSetFlexShrinkJNI(mNativePointer, flexShrink); } public YogaValue getFlexBasis() { - return valueFromLong(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetFlexBasisJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetFlexBasis(mNativePointer)); + return valueFromLong(YogaNative.jni_YGNodeStyleGetFlexBasisJNI(mNativePointer)); } public void setFlexBasis(float flexBasis) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetFlexBasisJNI(mNativePointer, flexBasis); - else - YogaNative.jni_YGNodeStyleSetFlexBasis(mNativePointer, flexBasis); + YogaNative.jni_YGNodeStyleSetFlexBasisJNI(mNativePointer, flexBasis); } public void setFlexBasisPercent(float percent) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetFlexBasisPercentJNI(mNativePointer, percent); - else - YogaNative.jni_YGNodeStyleSetFlexBasisPercent(mNativePointer, percent); + YogaNative.jni_YGNodeStyleSetFlexBasisPercentJNI(mNativePointer, percent); } public void setFlexBasisAuto() { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetFlexBasisAutoJNI(mNativePointer); - else - YogaNative.jni_YGNodeStyleSetFlexBasisAuto(mNativePointer); + YogaNative.jni_YGNodeStyleSetFlexBasisAutoJNI(mNativePointer); } public YogaValue getMargin(YogaEdge edge) { - return valueFromLong(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetMarginJNI(mNativePointer, edge.intValue()) : YogaNative.jni_YGNodeStyleGetMargin(mNativePointer, edge.intValue())); + return valueFromLong(YogaNative.jni_YGNodeStyleGetMarginJNI(mNativePointer, edge.intValue())); } public void setMargin(YogaEdge edge, float margin) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetMarginJNI(mNativePointer, edge.intValue(), margin); - else - YogaNative.jni_YGNodeStyleSetMargin(mNativePointer, edge.intValue(), margin); + YogaNative.jni_YGNodeStyleSetMarginJNI(mNativePointer, edge.intValue(), margin); } public void setMarginPercent(YogaEdge edge, float percent) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetMarginPercentJNI(mNativePointer, edge.intValue(), percent); - else - YogaNative.jni_YGNodeStyleSetMarginPercent(mNativePointer, edge.intValue(), percent); + YogaNative.jni_YGNodeStyleSetMarginPercentJNI(mNativePointer, edge.intValue(), percent); } public void setMarginAuto(YogaEdge edge) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetMarginAutoJNI(mNativePointer, edge.intValue()); - else - YogaNative.jni_YGNodeStyleSetMarginAuto(mNativePointer, edge.intValue()); + YogaNative.jni_YGNodeStyleSetMarginAutoJNI(mNativePointer, edge.intValue()); } public YogaValue getPadding(YogaEdge edge) { - return valueFromLong(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetPaddingJNI(mNativePointer, edge.intValue()) : YogaNative.jni_YGNodeStyleGetPadding(mNativePointer, edge.intValue())); + return valueFromLong(YogaNative.jni_YGNodeStyleGetPaddingJNI(mNativePointer, edge.intValue())); } public void setPadding(YogaEdge edge, float padding) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetPaddingJNI(mNativePointer, edge.intValue(), padding); - else - YogaNative.jni_YGNodeStyleSetPadding(mNativePointer, edge.intValue(), padding); + YogaNative.jni_YGNodeStyleSetPaddingJNI(mNativePointer, edge.intValue(), padding); } public void setPaddingPercent(YogaEdge edge, float percent) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetPaddingPercentJNI(mNativePointer, edge.intValue(), percent); - else - YogaNative.jni_YGNodeStyleSetPaddingPercent(mNativePointer, edge.intValue(), percent); + YogaNative.jni_YGNodeStyleSetPaddingPercentJNI(mNativePointer, edge.intValue(), percent); } public float getBorder(YogaEdge edge) { - return useVanillaJNI ? YogaNative.jni_YGNodeStyleGetBorderJNI(mNativePointer, edge.intValue()) : YogaNative.jni_YGNodeStyleGetBorder(mNativePointer, edge.intValue()); + return YogaNative.jni_YGNodeStyleGetBorderJNI(mNativePointer, edge.intValue()); } public void setBorder(YogaEdge edge, float border) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetBorderJNI(mNativePointer, edge.intValue(), border); - else - YogaNative.jni_YGNodeStyleSetBorder(mNativePointer, edge.intValue(), border); + YogaNative.jni_YGNodeStyleSetBorderJNI(mNativePointer, edge.intValue(), border); } public YogaValue getPosition(YogaEdge edge) { - return valueFromLong(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetPositionJNI(mNativePointer, edge.intValue()) : YogaNative.jni_YGNodeStyleGetPosition(mNativePointer, edge.intValue())); + return valueFromLong(YogaNative.jni_YGNodeStyleGetPositionJNI(mNativePointer, edge.intValue())); } public void setPosition(YogaEdge edge, float position) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetPositionJNI(mNativePointer, edge.intValue(), position); - else - YogaNative.jni_YGNodeStyleSetPosition(mNativePointer, edge.intValue(), position); + YogaNative.jni_YGNodeStyleSetPositionJNI(mNativePointer, edge.intValue(), position); } public void setPositionPercent(YogaEdge edge, float percent) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetPositionPercentJNI(mNativePointer, edge.intValue(), percent); - else - YogaNative.jni_YGNodeStyleSetPositionPercent(mNativePointer, edge.intValue(), percent); + YogaNative.jni_YGNodeStyleSetPositionPercentJNI(mNativePointer, edge.intValue(), percent); } public YogaValue getWidth() { - return valueFromLong(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetWidthJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetWidth(mNativePointer)); + return valueFromLong(YogaNative.jni_YGNodeStyleGetWidthJNI(mNativePointer)); } public void setWidth(float width) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetWidthJNI(mNativePointer, width); - else - YogaNative.jni_YGNodeStyleSetWidth(mNativePointer, width); + YogaNative.jni_YGNodeStyleSetWidthJNI(mNativePointer, width); } public void setWidthPercent(float percent) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetWidthPercentJNI(mNativePointer, percent); - else - YogaNative.jni_YGNodeStyleSetWidthPercent(mNativePointer, percent); + YogaNative.jni_YGNodeStyleSetWidthPercentJNI(mNativePointer, percent); } public void setWidthAuto() { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetWidthAutoJNI(mNativePointer); - else - YogaNative.jni_YGNodeStyleSetWidthAuto(mNativePointer); + YogaNative.jni_YGNodeStyleSetWidthAutoJNI(mNativePointer); } public YogaValue getHeight() { - return valueFromLong(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetHeightJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetHeight(mNativePointer)); + return valueFromLong(YogaNative.jni_YGNodeStyleGetHeightJNI(mNativePointer)); } public void setHeight(float height) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetHeightJNI(mNativePointer, height); - else - YogaNative.jni_YGNodeStyleSetHeight(mNativePointer, height); + YogaNative.jni_YGNodeStyleSetHeightJNI(mNativePointer, height); } public void setHeightPercent(float percent) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetHeightPercentJNI(mNativePointer, percent); - else - YogaNative.jni_YGNodeStyleSetHeightPercent(mNativePointer, percent); + YogaNative.jni_YGNodeStyleSetHeightPercentJNI(mNativePointer, percent); } public void setHeightAuto() { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetHeightAutoJNI(mNativePointer); - else - YogaNative.jni_YGNodeStyleSetHeightAuto(mNativePointer); + YogaNative.jni_YGNodeStyleSetHeightAutoJNI(mNativePointer); } public YogaValue getMinWidth() { - return valueFromLong(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetMinWidthJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetMinWidth(mNativePointer)); + return valueFromLong(YogaNative.jni_YGNodeStyleGetMinWidthJNI(mNativePointer)); } public void setMinWidth(float minWidth) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetMinWidthJNI(mNativePointer, minWidth); - else - YogaNative.jni_YGNodeStyleSetMinWidth(mNativePointer, minWidth); + YogaNative.jni_YGNodeStyleSetMinWidthJNI(mNativePointer, minWidth); } public void setMinWidthPercent(float percent) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetMinWidthPercentJNI(mNativePointer, percent); - else - YogaNative.jni_YGNodeStyleSetMinWidthPercent(mNativePointer, percent); + YogaNative.jni_YGNodeStyleSetMinWidthPercentJNI(mNativePointer, percent); } public YogaValue getMinHeight() { - return valueFromLong(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetMinHeightJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetMinHeight(mNativePointer)); + return valueFromLong(YogaNative.jni_YGNodeStyleGetMinHeightJNI(mNativePointer)); } public void setMinHeight(float minHeight) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetMinHeightJNI(mNativePointer, minHeight); - else - YogaNative.jni_YGNodeStyleSetMinHeight(mNativePointer, minHeight); + YogaNative.jni_YGNodeStyleSetMinHeightJNI(mNativePointer, minHeight); } public void setMinHeightPercent(float percent) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetMinHeightPercentJNI(mNativePointer, percent); - else - YogaNative.jni_YGNodeStyleSetMinHeightPercent(mNativePointer, percent); + YogaNative.jni_YGNodeStyleSetMinHeightPercentJNI(mNativePointer, percent); } public YogaValue getMaxWidth() { - return valueFromLong(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetMaxWidthJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetMaxWidth(mNativePointer)); + return valueFromLong(YogaNative.jni_YGNodeStyleGetMaxWidthJNI(mNativePointer)); } public void setMaxWidth(float maxWidth) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetMaxWidthJNI(mNativePointer, maxWidth); - else - YogaNative.jni_YGNodeStyleSetMaxWidth(mNativePointer, maxWidth); + YogaNative.jni_YGNodeStyleSetMaxWidthJNI(mNativePointer, maxWidth); } public void setMaxWidthPercent(float percent) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetMaxWidthPercentJNI(mNativePointer, percent); - else - YogaNative.jni_YGNodeStyleSetMaxWidthPercent(mNativePointer, percent); + YogaNative.jni_YGNodeStyleSetMaxWidthPercentJNI(mNativePointer, percent); } public YogaValue getMaxHeight() { - return valueFromLong(useVanillaJNI ? YogaNative.jni_YGNodeStyleGetMaxHeightJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetMaxHeight(mNativePointer)); + return valueFromLong(YogaNative.jni_YGNodeStyleGetMaxHeightJNI(mNativePointer)); } public void setMaxHeight(float maxheight) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetMaxHeightJNI(mNativePointer, maxheight); - else - YogaNative.jni_YGNodeStyleSetMaxHeight(mNativePointer, maxheight); + YogaNative.jni_YGNodeStyleSetMaxHeightJNI(mNativePointer, maxheight); } public void setMaxHeightPercent(float percent) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetMaxHeightPercentJNI(mNativePointer, percent); - else - YogaNative.jni_YGNodeStyleSetMaxHeightPercent(mNativePointer, percent); + YogaNative.jni_YGNodeStyleSetMaxHeightPercentJNI(mNativePointer, percent); } public float getAspectRatio() { - return useVanillaJNI ? YogaNative.jni_YGNodeStyleGetAspectRatioJNI(mNativePointer) : YogaNative.jni_YGNodeStyleGetAspectRatio(mNativePointer); + return YogaNative.jni_YGNodeStyleGetAspectRatioJNI(mNativePointer); } public void setAspectRatio(float aspectRatio) { - if (useVanillaJNI) - YogaNative.jni_YGNodeStyleSetAspectRatioJNI(mNativePointer, aspectRatio); - else - YogaNative.jni_YGNodeStyleSetAspectRatio(mNativePointer, aspectRatio); + YogaNative.jni_YGNodeStyleSetAspectRatioJNI(mNativePointer, aspectRatio); } public void setMeasureFunction(YogaMeasureFunction measureFunction) { mMeasureFunction = measureFunction; - if (useVanillaJNI) - YogaNative.jni_YGNodeSetHasMeasureFuncJNI(mNativePointer, measureFunction != null); - else - YogaNative.jni_YGNodeSetHasMeasureFunc(mNativePointer, measureFunction != null); + YogaNative.jni_YGNodeSetHasMeasureFuncJNI(mNativePointer, measureFunction != null); } // Implementation Note: Why this method needs to stay final @@ -638,10 +482,7 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { public void setBaselineFunction(YogaBaselineFunction baselineFunction) { mBaselineFunction = baselineFunction; - if (useVanillaJNI) - YogaNative.jni_YGNodeSetHasBaselineFuncJNI(mNativePointer, baselineFunction != null); - else - YogaNative.jni_YGNodeSetHasBaselineFunc(mNativePointer, baselineFunction != null); + YogaNative.jni_YGNodeSetHasBaselineFuncJNI(mNativePointer, baselineFunction != null); } @DoNotStrip @@ -672,10 +513,7 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { * layout of the tree rooted at this node. */ public void print() { - if (useVanillaJNI) - YogaNative.jni_YGNodePrintJNI(mNativePointer); - else - YogaNative.jni_YGNodePrint(mNativePointer); + YogaNative.jni_YGNodePrintJNI(mNativePointer); } /** diff --git a/java/com/facebook/yoga/YogaNodeJNIFinalizer.java b/java/com/facebook/yoga/YogaNodeJNIFinalizer.java index 15f5e643..bffa5c83 100644 --- a/java/com/facebook/yoga/YogaNodeJNIFinalizer.java +++ b/java/com/facebook/yoga/YogaNodeJNIFinalizer.java @@ -12,10 +12,6 @@ public class YogaNodeJNIFinalizer extends YogaNodeJNIBase { super(); } - public YogaNodeJNIFinalizer(boolean useVanillaJNI) { - super(useVanillaJNI); - } - public YogaNodeJNIFinalizer(YogaConfig config) { super(config); } @@ -33,10 +29,7 @@ public class YogaNodeJNIFinalizer extends YogaNodeJNIBase { if (mNativePointer != 0) { long nativePointer = mNativePointer; mNativePointer = 0; - if (useVanillaJNI) - YogaNative.jni_YGNodeFreeJNI(nativePointer); - else - YogaNative.jni_YGNodeFree(nativePointer); + YogaNative.jni_YGNodeFreeJNI(nativePointer); } } } diff --git a/java/jni/YGJNI.cpp b/java/jni/YGJNI.cpp deleted file mode 100644 index 8691b8bf..00000000 --- a/java/jni/YGJNI.cpp +++ /dev/null @@ -1,712 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "YGJTypes.h" -#include "YGJNIVanilla.h" -#include "YGJNI.h" -#include "yogajni.h" - -using namespace facebook::jni; -using namespace std; -using facebook::yoga::detail::Log; - -static inline local_ref YGNodeJobject( - YGNodeRef node, - void* layoutContext) { - return reinterpret_cast(layoutContext)->ref(node); -} - -static void YGTransferLayoutDirection( - YGNodeRef node, - alias_ref javaNode) { - static auto layoutDirectionField = - javaNode->getClass()->getField("mLayoutDirection"); - javaNode->setFieldValue( - layoutDirectionField, static_cast(YGNodeLayoutGetDirection(node))); -} - -static void YGTransferLayoutOutputsRecursive( - YGNodeRef root, - void* layoutContext) { - if (!root->getHasNewLayout()) { - return; - } - auto obj = YGNodeJobject(root, layoutContext); - if (!obj) { - Log::log( - root, - YGLogLevelError, - nullptr, - "Java YGNode was GCed during layout calculation\n"); - return; - } - - auto edgesSet = YGNodeEdges{root}; - - bool marginFieldSet = edgesSet.has(YGNodeEdges::MARGIN); - bool paddingFieldSet = edgesSet.has(YGNodeEdges::PADDING); - bool borderFieldSet = edgesSet.has(YGNodeEdges::BORDER); - - int fieldFlags = edgesSet.get(); - fieldFlags |= HAS_NEW_LAYOUT; - if (YGNodeLayoutGetDidLegacyStretchFlagAffectLayout(root)) { - fieldFlags |= DOES_LEGACY_STRETCH_BEHAVIOUR; - } - - const int arrSize = 6 + (marginFieldSet ? 4 : 0) + (paddingFieldSet ? 4 : 0) + - (borderFieldSet ? 4 : 0); - float arr[18]; - arr[LAYOUT_EDGE_SET_FLAG_INDEX] = fieldFlags; - arr[LAYOUT_WIDTH_INDEX] = YGNodeLayoutGetWidth(root); - arr[LAYOUT_HEIGHT_INDEX] = YGNodeLayoutGetHeight(root); - arr[LAYOUT_LEFT_INDEX] = YGNodeLayoutGetLeft(root); - arr[LAYOUT_TOP_INDEX] = YGNodeLayoutGetTop(root); - arr[LAYOUT_DIRECTION_INDEX] = - static_cast(YGNodeLayoutGetDirection(root)); - if (marginFieldSet) { - arr[LAYOUT_MARGIN_START_INDEX] = YGNodeLayoutGetMargin(root, YGEdgeLeft); - arr[LAYOUT_MARGIN_START_INDEX + 1] = YGNodeLayoutGetMargin(root, YGEdgeTop); - arr[LAYOUT_MARGIN_START_INDEX + 2] = - YGNodeLayoutGetMargin(root, YGEdgeRight); - arr[LAYOUT_MARGIN_START_INDEX + 3] = - YGNodeLayoutGetMargin(root, YGEdgeBottom); - } - if (paddingFieldSet) { - int paddingStartIndex = - LAYOUT_PADDING_START_INDEX - (marginFieldSet ? 0 : 4); - arr[paddingStartIndex] = YGNodeLayoutGetPadding(root, YGEdgeLeft); - arr[paddingStartIndex + 1] = YGNodeLayoutGetPadding(root, YGEdgeTop); - arr[paddingStartIndex + 2] = YGNodeLayoutGetPadding(root, YGEdgeRight); - arr[paddingStartIndex + 3] = YGNodeLayoutGetPadding(root, YGEdgeBottom); - } - - if (borderFieldSet) { - int borderStartIndex = LAYOUT_BORDER_START_INDEX - - (marginFieldSet ? 0 : 4) - (paddingFieldSet ? 0 : 4); - arr[borderStartIndex] = YGNodeLayoutGetBorder(root, YGEdgeLeft); - arr[borderStartIndex + 1] = YGNodeLayoutGetBorder(root, YGEdgeTop); - arr[borderStartIndex + 2] = YGNodeLayoutGetBorder(root, YGEdgeRight); - arr[borderStartIndex + 3] = YGNodeLayoutGetBorder(root, YGEdgeBottom); - } - - static auto arrField = obj->getClass()->getField("arr"); - local_ref arrFinal = make_float_array(arrSize); - arrFinal->setRegion(0, arrSize, arr); - obj->setFieldValue(arrField, arrFinal.get()); - - root->setHasNewLayout(false); - - for (uint32_t i = 0; i < YGNodeGetChildCount(root); i++) { - YGTransferLayoutOutputsRecursive(YGNodeGetChild(root, i), layoutContext); - } -} - -static void YGPrint(YGNodeRef node, void* layoutContext) { - if (auto obj = YGNodeJobject(node, layoutContext)) { - cout << obj->toString() << endl; - } else { - Log::log( - node, - YGLogLevelError, - nullptr, - "Java YGNode was GCed during layout calculation\n"); - } -} - -static float YGJNIBaselineFunc( - YGNodeRef node, - float width, - float height, - void* layoutContext) { - if (auto obj = YGNodeJobject(node, layoutContext)) { - return obj->baseline(width, height); - } else { - return height; - } -} - -static inline YGNodeRef _jlong2YGNodeRef(jlong addr) { - return reinterpret_cast(static_cast(addr)); -} - -static inline YGConfigRef _jlong2YGConfigRef(jlong addr) { - return reinterpret_cast(static_cast(addr)); -} - -jlong jni_YGNodeClone(alias_ref thiz, jlong nativePointer) { - auto node = _jlong2YGNodeRef(nativePointer); - const YGNodeRef clonedYogaNode = YGNodeClone(node); - clonedYogaNode->setContext(node->getContext()); - - return reinterpret_cast(clonedYogaNode); -} - -static YGSize YGJNIMeasureFunc( - YGNodeRef node, - float width, - YGMeasureMode widthMode, - float height, - YGMeasureMode heightMode, - void* layoutContext) { - if (auto obj = YGNodeJobject(node, layoutContext)) { - YGTransferLayoutDirection(node, obj); - const auto measureResult = - obj->measure(width, widthMode, height, heightMode); - - static_assert( - sizeof(measureResult) == 8, - "Expected measureResult to be 8 bytes, or two 32 bit ints"); - - int32_t wBits = 0xFFFFFFFF & (measureResult >> 32); - int32_t hBits = 0xFFFFFFFF & measureResult; - - const float* measuredWidth = reinterpret_cast(&wBits); - const float* measuredHeight = reinterpret_cast(&hBits); - - return YGSize{*measuredWidth, *measuredHeight}; - } else { - Log::log( - node, - YGLogLevelError, - nullptr, - "Java YGNode was GCed during layout calculation\n"); - return YGSize{ - widthMode == YGMeasureModeUndefined ? 0 : width, - heightMode == YGMeasureModeUndefined ? 0 : height, - }; - } -} - -static int YGJNILogFunc( - const YGConfigRef config, - const YGNodeRef node, - YGLogLevel level, - void* layoutContext, - const char* format, - va_list args) { - int result = vsnprintf(NULL, 0, format, args); - std::vector buffer(1 + result); - vsnprintf(buffer.data(), buffer.size(), format, args); - - auto jloggerPtr = - static_cast*>(YGConfigGetContext(config)); - if (jloggerPtr != nullptr) { - (*jloggerPtr) - ->log( - JYogaLogLevel::fromInt(level), - Environment::current()->NewStringUTF(buffer.data())); - } - - return result; -} - -jlong jni_YGNodeNew(alias_ref thiz) { - const YGNodeRef node = YGNodeNew(); - node->setContext(YGNodeContext{}.asVoidPtr); - node->setPrintFunc(YGPrint); - return reinterpret_cast(node); -} - -jlong jni_YGNodeNewWithConfig(alias_ref, jlong configPointer) { - const YGNodeRef node = YGNodeNewWithConfig(_jlong2YGConfigRef(configPointer)); - node->setContext(YGNodeContext{}.asVoidPtr); - return reinterpret_cast(node); -} - -void jni_YGNodeFree(alias_ref, jlong nativePointer) { - if (nativePointer == 0) { - return; - } - const YGNodeRef node = _jlong2YGNodeRef(nativePointer); - YGNodeFree(node); -} - -void jni_YGNodeClearChildren(jlong nativePointer) { - const YGNodeRef node = _jlong2YGNodeRef(nativePointer); - node->clearChildren(); -} - -void jni_YGNodeReset(jlong nativePointer) { - const YGNodeRef node = _jlong2YGNodeRef(nativePointer); - void* context = node->getContext(); - YGNodeReset(node); - node->setContext(context); -} - -void jni_YGNodePrint(jlong nativePointer) { -#ifdef DEBUG - const YGNodeRef node = _jlong2YGNodeRef(nativePointer); - YGNodePrint( - node, - (YGPrintOptions)( - YGPrintOptionsStyle | YGPrintOptionsLayout | YGPrintOptionsChildren)); -#endif -} - -void jni_YGNodeInsertChild( - jlong nativePointer, - jlong childPointer, - jint index) { - YGNodeInsertChild( - _jlong2YGNodeRef(nativePointer), _jlong2YGNodeRef(childPointer), index); -} - -void jni_YGNodeRemoveChild(jlong nativePointer, jlong childPointer) { - YGNodeRemoveChild( - _jlong2YGNodeRef(nativePointer), _jlong2YGNodeRef(childPointer)); -} - -void jni_YGNodeSetIsReferenceBaseline( - jlong nativePointer, - jboolean isReferenceBaseline) { - YGNodeSetIsReferenceBaseline( - _jlong2YGNodeRef(nativePointer), isReferenceBaseline); -} - -jboolean jni_YGNodeIsReferenceBaseline(jlong nativePointer) { - return YGNodeIsReferenceBaseline(_jlong2YGNodeRef(nativePointer)); -} - -void jni_YGNodeCalculateLayout( - alias_ref, - jlong nativePointer, - jfloat width, - jfloat height, - alias_ref nativePointers, - alias_ref> javaNodes) { - - void* layoutContext = nullptr; - auto map = PtrJNodeMap{}; - if (nativePointers) { - map = PtrJNodeMap{nativePointers, javaNodes}; - layoutContext = ↦ - } - - const YGNodeRef root = _jlong2YGNodeRef(nativePointer); - YGNodeCalculateLayoutWithContext( - root, - static_cast(width), - static_cast(height), - YGNodeStyleGetDirection(_jlong2YGNodeRef(nativePointer)), - layoutContext); - YGTransferLayoutOutputsRecursive(root, layoutContext); -} - -void jni_YGNodeMarkDirty(jlong nativePointer) { - YGNodeMarkDirty(_jlong2YGNodeRef(nativePointer)); -} - -void jni_YGNodeMarkDirtyAndPropogateToDescendants(jlong nativePointer) { - YGNodeMarkDirtyAndPropogateToDescendants(_jlong2YGNodeRef(nativePointer)); -} - -jboolean jni_YGNodeIsDirty(jlong nativePointer) { - return (jboolean) _jlong2YGNodeRef(nativePointer)->isDirty(); -} - -void jni_YGNodeSetHasMeasureFunc(jlong nativePointer, jboolean hasMeasureFunc) { - _jlong2YGNodeRef(nativePointer) - ->setMeasureFunc(hasMeasureFunc ? YGJNIMeasureFunc : nullptr); -} - -void jni_YGNodeSetHasBaselineFunc( - jlong nativePointer, - jboolean hasBaselineFunc) { - _jlong2YGNodeRef(nativePointer) - ->setBaselineFunc(hasBaselineFunc ? YGJNIBaselineFunc : nullptr); -} - -void jni_YGNodeCopyStyle(jlong dstNativePointer, jlong srcNativePointer) { - YGNodeCopyStyle( - _jlong2YGNodeRef(dstNativePointer), _jlong2YGNodeRef(srcNativePointer)); -} - -#define YG_NODE_JNI_STYLE_PROP(javatype, type, name) \ - javatype jni_YGNodeStyleGet##name(jlong nativePointer) { \ - return (javatype) YGNodeStyleGet##name(_jlong2YGNodeRef(nativePointer)); \ - } \ - \ - void jni_YGNodeStyleSet##name(jlong nativePointer, javatype value) { \ - YGNodeStyleSet##name( \ - _jlong2YGNodeRef(nativePointer), static_cast(value)); \ - } - -#define YG_NODE_JNI_STYLE_UNIT_PROP(name) \ - jlong jni_YGNodeStyleGet##name(jlong nativePointer) { \ - return YogaValue::asJavaLong( \ - YGNodeStyleGet##name(_jlong2YGNodeRef(nativePointer))); \ - } \ - \ - void jni_YGNodeStyleSet##name(jlong nativePointer, jfloat value) { \ - YGNodeStyleSet##name( \ - _jlong2YGNodeRef(nativePointer), static_cast(value)); \ - } \ - \ - void jni_YGNodeStyleSet##name##Percent(jlong nativePointer, jfloat value) { \ - YGNodeStyleSet##name##Percent( \ - _jlong2YGNodeRef(nativePointer), static_cast(value)); \ - } - -#define YG_NODE_JNI_STYLE_UNIT_PROP_AUTO(name) \ - YG_NODE_JNI_STYLE_UNIT_PROP(name) \ - void jni_YGNodeStyleSet##name##Auto(jlong nativePointer) { \ - YGNodeStyleSet##name##Auto(_jlong2YGNodeRef(nativePointer)); \ - } - -#define YG_NODE_JNI_STYLE_EDGE_PROP(javatype, type, name) \ - javatype jni_YGNodeStyleGet##name(jlong nativePointer, jint edge) { \ - return (javatype) YGNodeStyleGet##name( \ - _jlong2YGNodeRef(nativePointer), static_cast(edge)); \ - } \ - \ - void jni_YGNodeStyleSet##name( \ - jlong nativePointer, jint edge, javatype value) { \ - YGNodeStyleSet##name( \ - _jlong2YGNodeRef(nativePointer), \ - static_cast(edge), \ - static_cast(value)); \ - } - -#define YG_NODE_JNI_STYLE_EDGE_UNIT_PROP(name) \ - jlong jni_YGNodeStyleGet##name(jlong nativePointer, jint edge) { \ - return YogaValue::asJavaLong(YGNodeStyleGet##name( \ - _jlong2YGNodeRef(nativePointer), static_cast(edge))); \ - } \ - \ - void jni_YGNodeStyleSet##name( \ - jlong nativePointer, jint edge, jfloat value) { \ - YGNodeStyleSet##name( \ - _jlong2YGNodeRef(nativePointer), \ - static_cast(edge), \ - static_cast(value)); \ - } \ - \ - void jni_YGNodeStyleSet##name##Percent( \ - jlong nativePointer, jint edge, jfloat value) { \ - YGNodeStyleSet##name##Percent( \ - _jlong2YGNodeRef(nativePointer), \ - static_cast(edge), \ - static_cast(value)); \ - } - -#define YG_NODE_JNI_STYLE_EDGE_UNIT_PROP_AUTO(name) \ - YG_NODE_JNI_STYLE_EDGE_UNIT_PROP(name) \ - void jni_YGNodeStyleSet##name##Auto(jlong nativePointer, jint edge) { \ - YGNodeStyleSet##name##Auto( \ - _jlong2YGNodeRef(nativePointer), static_cast(edge)); \ - } - -YG_NODE_JNI_STYLE_PROP(jint, YGDirection, Direction); -YG_NODE_JNI_STYLE_PROP(jint, YGFlexDirection, FlexDirection); -YG_NODE_JNI_STYLE_PROP(jint, YGJustify, JustifyContent); -YG_NODE_JNI_STYLE_PROP(jint, YGAlign, AlignItems); -YG_NODE_JNI_STYLE_PROP(jint, YGAlign, AlignSelf); -YG_NODE_JNI_STYLE_PROP(jint, YGAlign, AlignContent); -YG_NODE_JNI_STYLE_PROP(jint, YGPositionType, PositionType); -YG_NODE_JNI_STYLE_PROP(jint, YGWrap, FlexWrap); -YG_NODE_JNI_STYLE_PROP(jint, YGOverflow, Overflow); -YG_NODE_JNI_STYLE_PROP(jint, YGDisplay, Display); - -jfloat jni_YGNodeStyleGetFlex(jlong nativePointer) { - return YGNodeStyleGetFlex(_jlong2YGNodeRef(nativePointer)); -} -void jni_YGNodeStyleSetFlex(jlong nativePointer, jfloat value) { - YGNodeStyleSetFlex( - _jlong2YGNodeRef(nativePointer), static_cast(value)); -} -YG_NODE_JNI_STYLE_PROP(jfloat, float, FlexGrow); -YG_NODE_JNI_STYLE_PROP(jfloat, float, FlexShrink); -YG_NODE_JNI_STYLE_UNIT_PROP_AUTO(FlexBasis); - -YG_NODE_JNI_STYLE_EDGE_UNIT_PROP(Position); - -YG_NODE_JNI_STYLE_UNIT_PROP_AUTO(Width); -YG_NODE_JNI_STYLE_UNIT_PROP(MinWidth); -YG_NODE_JNI_STYLE_UNIT_PROP(MaxWidth); -YG_NODE_JNI_STYLE_UNIT_PROP_AUTO(Height); -YG_NODE_JNI_STYLE_UNIT_PROP(MinHeight); -YG_NODE_JNI_STYLE_UNIT_PROP(MaxHeight); - -// Yoga specific properties, not compatible with flexbox specification -YG_NODE_JNI_STYLE_PROP(jfloat, float, AspectRatio); - -jlong jni_YGConfigNew(alias_ref) { - return reinterpret_cast(YGConfigNew()); -} - -void jni_YGConfigFree(alias_ref, jlong nativePointer) { - const YGConfigRef config = _jlong2YGConfigRef(nativePointer); - // unique_ptr will destruct the underlying global_ref, if present. - auto context = std::unique_ptr>{ - static_cast*>(YGConfigGetContext(config))}; - YGConfigFree(config); -} - -void jni_YGConfigSetExperimentalFeatureEnabled( - alias_ref, - jlong nativePointer, - jint feature, - jboolean enabled) { - const YGConfigRef config = _jlong2YGConfigRef(nativePointer); - YGConfigSetExperimentalFeatureEnabled( - config, static_cast(feature), enabled); -} - -void jni_YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviour( - alias_ref, - jlong nativePointer, - jboolean enabled) { - const YGConfigRef config = _jlong2YGConfigRef(nativePointer); - YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviour(config, enabled); -} - -void jni_YGConfigSetUseWebDefaults( - alias_ref, - jlong nativePointer, - jboolean useWebDefaults) { - const YGConfigRef config = _jlong2YGConfigRef(nativePointer); - YGConfigSetUseWebDefaults(config, useWebDefaults); -} - -void jni_YGConfigSetPrintTreeFlag( - alias_ref, - jlong nativePointer, - jboolean enable) { - const YGConfigRef config = _jlong2YGConfigRef(nativePointer); - YGConfigSetPrintTreeFlag(config, enable); -} - -void jni_YGConfigSetPointScaleFactor( - alias_ref, - jlong nativePointer, - jfloat pixelsInPoint) { - const YGConfigRef config = _jlong2YGConfigRef(nativePointer); - YGConfigSetPointScaleFactor(config, pixelsInPoint); -} - -void jni_YGConfigSetUseLegacyStretchBehaviour( - alias_ref, - jlong nativePointer, - jboolean useLegacyStretchBehaviour) { - const YGConfigRef config = _jlong2YGConfigRef(nativePointer); - YGConfigSetUseLegacyStretchBehaviour(config, useLegacyStretchBehaviour); -} - -void jni_YGConfigSetLogger( - alias_ref, - jlong nativePointer, - alias_ref logger) { - const YGConfigRef config = _jlong2YGConfigRef(nativePointer); - auto context = - reinterpret_cast*>(YGConfigGetContext(config)); - - if (logger) { - if (context == nullptr) { - context = new global_ref{}; - YGConfigSetContext(config, context); - } - - *context = make_global(static_ref_cast(logger)); - config->setLogger(YGJNILogFunc); - } else { - if (context != nullptr) { - delete context; - YGConfigSetContext(config, nullptr); - } - config->setLogger(nullptr); - } -} - -jlong jni_YGNodeStyleGetMargin(jlong nativePointer, jint edge) { - YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); - if (!YGNodeEdges{yogaNodeRef}.has(YGNodeEdges::MARGIN)) { - return YogaValue::undefinedAsJavaLong(); - } - return YogaValue::asJavaLong( - YGNodeStyleGetMargin(yogaNodeRef, static_cast(edge))); -} - -void jni_YGNodeStyleSetMargin(jlong nativePointer, jint edge, jfloat margin) { - YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); - YGNodeEdges{yogaNodeRef}.add(YGNodeEdges::MARGIN).setOn(yogaNodeRef); - YGNodeStyleSetMargin( - yogaNodeRef, static_cast(edge), static_cast(margin)); -} - -void jni_YGNodeStyleSetMarginPercent( - jlong nativePointer, - jint edge, - jfloat percent) { - YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); - YGNodeEdges{yogaNodeRef}.add(YGNodeEdges::MARGIN).setOn(yogaNodeRef); - YGNodeStyleSetMarginPercent( - yogaNodeRef, static_cast(edge), static_cast(percent)); -} - -void jni_YGNodeStyleSetMarginAuto(jlong nativePointer, jint edge) { - YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); - YGNodeEdges{yogaNodeRef}.add(YGNodeEdges::MARGIN).setOn(yogaNodeRef); - YGNodeStyleSetMarginAuto(yogaNodeRef, static_cast(edge)); -} - -jlong jni_YGNodeStyleGetPadding(jlong nativePointer, jint edge) { - YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); - if (!YGNodeEdges{yogaNodeRef}.has(YGNodeEdges::PADDING)) { - return YogaValue::undefinedAsJavaLong(); - } - return YogaValue::asJavaLong( - YGNodeStyleGetPadding(yogaNodeRef, static_cast(edge))); -} - -void jni_YGNodeStyleSetPadding(jlong nativePointer, jint edge, jfloat padding) { - YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); - YGNodeEdges{yogaNodeRef}.add(YGNodeEdges::PADDING).setOn(yogaNodeRef); - YGNodeStyleSetPadding( - yogaNodeRef, static_cast(edge), static_cast(padding)); -} - -void jni_YGNodeStyleSetPaddingPercent( - jlong nativePointer, - jint edge, - jfloat percent) { - YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); - YGNodeEdges{yogaNodeRef}.add(YGNodeEdges::PADDING).setOn(yogaNodeRef); - YGNodeStyleSetPaddingPercent( - yogaNodeRef, static_cast(edge), static_cast(percent)); -} - -jfloat jni_YGNodeStyleGetBorder(jlong nativePointer, jint edge) { - YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); - if (!YGNodeEdges{yogaNodeRef}.has(YGNodeEdges::BORDER)) { - return (jfloat) YGUndefined; - } - return (jfloat) YGNodeStyleGetBorder(yogaNodeRef, static_cast(edge)); -} - -void jni_YGNodeStyleSetBorder(jlong nativePointer, jint edge, jfloat border) { - YGNodeRef yogaNodeRef = _jlong2YGNodeRef(nativePointer); - YGNodeEdges{yogaNodeRef}.add(YGNodeEdges::BORDER).setOn(yogaNodeRef); - YGNodeStyleSetBorder( - yogaNodeRef, static_cast(edge), static_cast(border)); -} - -#define YGMakeNativeMethod(name) makeNativeMethod(#name, name) -#define YGMakeCriticalNativeMethod(name) \ - makeCriticalNativeMethod_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(#name, name) - -jint YGJNI::registerNativeMethods(JavaVM* vm) { - jint ret = initialize(vm, [] { - registerNatives( - "com/facebook/yoga/YogaNative", - { - YGMakeNativeMethod(jni_YGNodeNew), - YGMakeNativeMethod(jni_YGNodeNewWithConfig), - YGMakeNativeMethod(jni_YGNodeFree), - YGMakeCriticalNativeMethod(jni_YGNodeReset), - YGMakeCriticalNativeMethod(jni_YGNodeClearChildren), - YGMakeCriticalNativeMethod(jni_YGNodeInsertChild), - YGMakeCriticalNativeMethod(jni_YGNodeRemoveChild), - YGMakeCriticalNativeMethod(jni_YGNodeSetIsReferenceBaseline), - YGMakeCriticalNativeMethod(jni_YGNodeIsReferenceBaseline), - YGMakeNativeMethod(jni_YGNodeCalculateLayout), - YGMakeCriticalNativeMethod(jni_YGNodeMarkDirty), - YGMakeCriticalNativeMethod( - jni_YGNodeMarkDirtyAndPropogateToDescendants), - YGMakeCriticalNativeMethod(jni_YGNodeIsDirty), - YGMakeCriticalNativeMethod(jni_YGNodeSetHasMeasureFunc), - YGMakeCriticalNativeMethod(jni_YGNodeSetHasBaselineFunc), - YGMakeCriticalNativeMethod(jni_YGNodeCopyStyle), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetDirection), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetDirection), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetFlexDirection), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexDirection), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetJustifyContent), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetJustifyContent), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetAlignItems), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetAlignItems), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetAlignSelf), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetAlignSelf), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetAlignContent), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetAlignContent), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetPositionType), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPositionType), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetFlexWrap), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexWrap), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetOverflow), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetOverflow), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetDisplay), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetDisplay), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetFlex), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlex), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetFlexGrow), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexGrow), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetFlexShrink), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexShrink), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetFlexBasis), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexBasis), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexBasisPercent), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetFlexBasisAuto), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetMargin), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMargin), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMarginPercent), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMarginAuto), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetPadding), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPadding), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPaddingPercent), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetBorder), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetBorder), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetPosition), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPosition), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetPositionPercent), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetWidth), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetWidth), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetWidthPercent), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetWidthAuto), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetHeight), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetHeight), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetHeightPercent), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetHeightAuto), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetMinWidth), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMinWidth), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMinWidthPercent), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetMinHeight), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMinHeight), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMinHeightPercent), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetMaxWidth), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMaxWidth), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMaxWidthPercent), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetMaxHeight), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMaxHeight), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetMaxHeightPercent), - YGMakeCriticalNativeMethod(jni_YGNodeStyleGetAspectRatio), - YGMakeCriticalNativeMethod(jni_YGNodeStyleSetAspectRatio), - YGMakeCriticalNativeMethod(jni_YGNodePrint), - YGMakeNativeMethod(jni_YGNodeClone), - YGMakeNativeMethod(jni_YGConfigNew), - YGMakeNativeMethod(jni_YGConfigFree), - YGMakeNativeMethod(jni_YGConfigSetExperimentalFeatureEnabled), - YGMakeNativeMethod(jni_YGConfigSetUseWebDefaults), - YGMakeNativeMethod(jni_YGConfigSetPrintTreeFlag), - YGMakeNativeMethod(jni_YGConfigSetPointScaleFactor), - YGMakeNativeMethod(jni_YGConfigSetUseLegacyStretchBehaviour), - YGMakeNativeMethod(jni_YGConfigSetLogger), - YGMakeNativeMethod( - jni_YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviour), - }); - }); - return ret; -} diff --git a/java/jni/YGJNIVanilla.h b/java/jni/YGJNIVanilla.h index 7a7a9c7e..4179a488 100644 --- a/java/jni/YGJNIVanilla.h +++ b/java/jni/YGJNIVanilla.h @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +#include "jni.h" + namespace YGJNIVanilla { void registerNatives(JNIEnv* env); }; diff --git a/java/jni/YGJTypes.cpp b/java/jni/YGJTypes.cpp deleted file mode 100644 index 751d9755..00000000 --- a/java/jni/YGJTypes.cpp +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -#include "YGJTypes.h" - -using facebook::jni::alias_ref; -using facebook::jni::local_ref; - -jfloat JYogaNode::baseline(jfloat width, jfloat height) { - static auto javaMethod = - javaClassLocal()->getMethod("baseline"); - return javaMethod(self(), width, height); -} - -jlong JYogaNode::measure( - jfloat width, - jint widthMode, - jfloat height, - jint heightMode) { - static auto javaMethod = - javaClassLocal()->getMethod("measure"); - return javaMethod(self(), width, widthMode, height, heightMode); -} - -facebook::jni::local_ref JYogaLogLevel::fromInt(jint logLevel) { - static auto javaMethod = - javaClassStatic()->getStaticMethod(jint)>( - "fromInt"); - return javaMethod(javaClassStatic(), logLevel); -} - -void JYogaLogger::log( - facebook::jni::alias_ref logLevel, - jstring message) { - static auto javaMethod = - javaClassLocal()->getMethod, jstring)>( - "log"); - javaMethod(self(), logLevel, message); -} diff --git a/java/jni/YGJTypes.h b/java/jni/YGJTypes.h deleted file mode 100644 index 92eaec80..00000000 --- a/java/jni/YGJTypes.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -#include -#include -#include -#include - -using namespace facebook::jni; -using namespace std; - -struct JYogaNode : public facebook::jni::JavaClass { - static constexpr auto kJavaDescriptor = "Lcom/facebook/yoga/YogaNodeJNIBase;"; - - jfloat baseline(jfloat width, jfloat height); - jlong measure(jfloat width, jint widthMode, jfloat height, jint heightMode); -}; - -struct JYogaLogLevel : public facebook::jni::JavaClass { - static constexpr auto kJavaDescriptor = "Lcom/facebook/yoga/YogaLogLevel;"; - - static facebook::jni::local_ref fromInt(jint); -}; - -struct JYogaLogger : public facebook::jni::JavaClass { - static constexpr auto kJavaDescriptor = "Lcom/facebook/yoga/YogaLogger;"; - - void log(facebook::jni::alias_ref, jstring); -}; - -class PtrJNodeMap { - using JNodeArray = JArrayClass; - std::map ptrsToIdxs_; - alias_ref javaNodes_; - -public: - PtrJNodeMap() : ptrsToIdxs_{}, javaNodes_{} {} - PtrJNodeMap( - alias_ref nativePointers, - alias_ref javaNodes) - : javaNodes_{javaNodes} { - auto pin = nativePointers->pinCritical(); - auto ptrs = pin.get(); - for (size_t i = 0, n = pin.size(); i < n; ++i) { - ptrsToIdxs_[(YGNodeRef) ptrs[i]] = i; - } - } - - local_ref ref(YGNodeRef node) { - auto idx = ptrsToIdxs_.find(node); - if (idx == ptrsToIdxs_.end()) { - return local_ref{}; - } else { - return javaNodes_->getElement(idx->second); - } - } -}; diff --git a/java/jni/yogajni.cpp b/java/jni/yogajni.cpp index 21956925..ee126494 100644 --- a/java/jni/yogajni.cpp +++ b/java/jni/yogajni.cpp @@ -4,20 +4,14 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ - -#include "yogajni.h" #include "YGJNIVanilla.h" -#include #include "common.h" -using namespace facebook::jni; using namespace facebook::yoga; jint JNI_OnLoad(JavaVM* vm, void*) { - jint ret = YGJNI::registerNativeMethods(vm); - JNIEnv* env; - vanillajni::ensureInitialized(&env, vm); + jint ret = vanillajni::ensureInitialized(&env, vm); YGJNIVanilla::registerNatives(env); return ret; } diff --git a/java/jni/yogajni.h b/java/jni/yogajni.h deleted file mode 100644 index d10836c1..00000000 --- a/java/jni/yogajni.h +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -#include - -namespace YGJNI { -jint registerNativeMethods(JavaVM* vm); -}; diff --git a/java/tests/com/facebook/yoga/TestParametrization.java b/java/tests/com/facebook/yoga/TestParametrization.java index 5ce6fd7d..d7fcf0a3 100644 --- a/java/tests/com/facebook/yoga/TestParametrization.java +++ b/java/tests/com/facebook/yoga/TestParametrization.java @@ -28,25 +28,7 @@ public class TestParametrization { return "JNI"; } }; - - NodeFactory nodeFactoryUsingVanillaJNI = new NodeFactory() { - @Override - public YogaNode create() { - return YogaNodeFactory.create(true); - } - - @Override - public YogaNode create(YogaConfig config) { - config.setUseVanillaJNI(true); - return YogaNodeFactory.create(config); - } - - @Override - public String toString() { - return "VanillaJNI"; - } - }; - return Arrays.asList(nodeFactory, nodeFactoryUsingVanillaJNI); + return Arrays.asList(nodeFactory); } From 20fe53b2543806a0d4487f66cc485f25f521d41b Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 13 Nov 2019 16:36:53 -0800 Subject: [PATCH 215/347] Add --version-script Summary: Adds version script to exclude all exported symbols and export only JNI_onLoad Reviewed By: Andrey-Mishanin Differential Revision: D18076602 fbshipit-source-id: cac4ef9c800de6a3b2081a1f847fa918687896fe --- java/CMakeLists.txt | 6 ++++-- java/yogajni.version | 6 ++++++ 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 java/yogajni.version diff --git a/java/CMakeLists.txt b/java/CMakeLists.txt index 78a696f5..fec8872f 100644 --- a/java/CMakeLists.txt +++ b/java/CMakeLists.txt @@ -9,7 +9,6 @@ set(CMAKE_VERBOSE_MAKEFILE on) # configure import libs set(yogacore_DIR ${CMAKE_SOURCE_DIR}/..) - set(build_DIR ${CMAKE_SOURCE_DIR}/build) set(yogacore_build_DIR ${build_DIR}/yogacore/${ANDROID_ABI}) @@ -30,9 +29,12 @@ add_compile_options( file(GLOB jni_SRC jni/*.cpp) +file(GLOB yogajni_version_script + yogajni.version) + add_library(yoga SHARED ${jni_SRC}) target_include_directories(yoga PRIVATE ${yogacore_DIR}) -target_link_libraries(yoga -Wl,--gc-sections yogacore) +target_link_libraries(yoga -Wl,--gc-sections,--version-script=${yogajni_version_script} yogacore) diff --git a/java/yogajni.version b/java/yogajni.version new file mode 100644 index 00000000..87f7caf6 --- /dev/null +++ b/java/yogajni.version @@ -0,0 +1,6 @@ +{ + global: + JNI_OnLoad; + local: + *; +}; From b88cf7ff67317559ae378a19138a0ea7ffdf5df6 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Fri, 15 Nov 2019 05:10:33 -0800 Subject: [PATCH 216/347] use owner's width for resolving the margin and padding for node Summary: The margin and padding are resolved incorrectly for leaf nodes (nodes with measure function set) if margin and padding are used in percentages. Here we were using node's width instead of container width to calculate the margin and padding. Fixed this to use container's width. ## Changelog: [General][Yoga] : Fixed an issue where margin and padding were resolved incorrectly for leaf nodes (nodes with measure function set) if margin and padding are used in percentages. Reviewed By: alickbass Differential Revision: D17130520 fbshipit-source-id: ac904d432f121973e7739debd9136909b5ca1427 --- tests/YGMeasureTest.cpp | 4 ++-- yoga/Yoga.cpp | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/YGMeasureTest.cpp b/tests/YGMeasureTest.cpp index 38c28059..baeb0ae8 100644 --- a/tests/YGMeasureTest.cpp +++ b/tests/YGMeasureTest.cpp @@ -686,9 +686,9 @@ TEST(YogaTest, percent_with_text_node) { ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1)); - ASSERT_FLOAT_EQ(15, YGNodeLayoutGetTop(root_child1)); + ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1)); ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1)); - ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1)); + ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child1)); YGNodeFreeRecursive(root); diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 04d199a3..41de5119 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -1670,13 +1670,13 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( "Expected node to have custom measure function"); const float paddingAndBorderAxisRow = - YGNodePaddingAndBorderForAxis(node, YGFlexDirectionRow, availableWidth); - const float paddingAndBorderAxisColumn = YGNodePaddingAndBorderForAxis( - node, YGFlexDirectionColumn, availableWidth); + YGNodePaddingAndBorderForAxis(node, YGFlexDirectionRow, ownerWidth); + const float paddingAndBorderAxisColumn = + YGNodePaddingAndBorderForAxis(node, YGFlexDirectionColumn, ownerWidth); const float marginAxisRow = - node->getMarginForAxis(YGFlexDirectionRow, availableWidth).unwrap(); + node->getMarginForAxis(YGFlexDirectionRow, ownerWidth).unwrap(); const float marginAxisColumn = - node->getMarginForAxis(YGFlexDirectionColumn, availableWidth).unwrap(); + node->getMarginForAxis(YGFlexDirectionColumn, ownerWidth).unwrap(); // We want to make sure we don't call measure with negative size const float innerWidth = YGFloatIsUndefined(availableWidth) From 7ec0ef847029d895ee32ac5cf663f1e5cac6dd02 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Fri, 15 Nov 2019 05:10:33 -0800 Subject: [PATCH 217/347] add test for margin and padding percent applied on leaf nodes with measure function Summary: Add tests for using margin and padding percent on nodes with measure function set on them Reviewed By: alickbass Differential Revision: D17130693 fbshipit-source-id: 9a5c963671f7649dead459969b008335f15e45ce --- tests/YGMeasureTest.cpp | 215 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 215 insertions(+) diff --git a/tests/YGMeasureTest.cpp b/tests/YGMeasureTest.cpp index baeb0ae8..b5bbe5d4 100644 --- a/tests/YGMeasureTest.cpp +++ b/tests/YGMeasureTest.cpp @@ -654,6 +654,19 @@ static YGSize _measure_90_10( }; } +static YGSize _measure_100_100( + YGNodeRef node, + float width, + YGMeasureMode widthMode, + float height, + YGMeasureMode heightMode) { + + return YGSize{ + .width = 100, + .height = 100, + }; +} + TEST(YogaTest, percent_with_text_node) { const YGConfigRef config = YGConfigNew(); @@ -694,3 +707,205 @@ TEST(YogaTest, percent_with_text_node) { YGConfigFree(config); } + +TEST(YogaTest, percent_margin_with_measure_func) { + const YGConfigRef config = YGConfigNew(); + + const YGNodeRef root = YGNodeNewWithConfig(config); + YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow); + YGNodeStyleSetWidth(root, 500); + YGNodeStyleSetHeight(root, 500); + + const YGNodeRef root_child0 = YGNodeNewWithConfig(config); + YGNodeStyleSetWidth(root_child0, 100); + YGNodeStyleSetHeight(root_child0, 100); + YGNodeStyleSetMargin(root_child0, YGEdgeTop, 0); + root_child0->setMeasureFunc(_measure_100_100); + YGNodeInsertChild(root, root_child0, 0); + + const YGNodeRef root_child1 = YGNodeNewWithConfig(config); + YGNodeStyleSetWidth(root_child1, 100); + YGNodeStyleSetHeight(root_child1, 100); + YGNodeStyleSetMargin(root_child1, YGEdgeTop, 100); + root_child1->setMeasureFunc(_measure_100_100); + YGNodeInsertChild(root, root_child1, 1); + + const YGNodeRef root_child2 = YGNodeNewWithConfig(config); + YGNodeStyleSetWidth(root_child2, 100); + YGNodeStyleSetHeight(root_child2, 100); + YGNodeStyleSetMarginPercent(root_child2, YGEdgeTop, 10); + root_child2->setMeasureFunc(_measure_100_100); + YGNodeInsertChild(root, root_child2, 2); + + const YGNodeRef root_child3 = YGNodeNewWithConfig(config); + YGNodeStyleSetWidth(root_child3, 100); + YGNodeStyleSetHeight(root_child3, 100); + YGNodeStyleSetMarginPercent(root_child3, YGEdgeTop, 20); + root_child3->setMeasureFunc(_measure_100_100); + YGNodeInsertChild(root, root_child3, 3); + + YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); + ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root)); + ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0)); + + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child1)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1)); + + ASSERT_FLOAT_EQ(200, YGNodeLayoutGetLeft(root_child2)); + ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child2)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2)); + + ASSERT_FLOAT_EQ(300, YGNodeLayoutGetLeft(root_child3)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child3)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child3)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child3)); + + YGNodeFreeRecursive(root); + + YGConfigFree(config); +} + +TEST(YogaTest, percent_padding_with_measure_func) { + const YGConfigRef config = YGConfigNew(); + + const YGNodeRef root = YGNodeNewWithConfig(config); + YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow); + YGNodeStyleSetAlignItems(root, YGAlignFlexStart); + YGNodeStyleSetAlignContent(root, YGAlignFlexStart); + YGNodeStyleSetWidth(root, 500); + YGNodeStyleSetHeight(root, 500); + + const YGNodeRef root_child0 = YGNodeNewWithConfig(config); + YGNodeStyleSetWidth(root_child0, 100); + YGNodeStyleSetHeight(root_child0, 100); + YGNodeStyleSetPadding(root_child0, YGEdgeTop, 0); + root_child0->setMeasureFunc(_measure_100_100); + YGNodeInsertChild(root, root_child0, 0); + + const YGNodeRef root_child1 = YGNodeNewWithConfig(config); + YGNodeStyleSetWidth(root_child1, 100); + YGNodeStyleSetHeight(root_child1, 100); + YGNodeStyleSetPadding(root_child1, YGEdgeTop, 100); + root_child1->setMeasureFunc(_measure_100_100); + YGNodeInsertChild(root, root_child1, 1); + + const YGNodeRef root_child2 = YGNodeNewWithConfig(config); + YGNodeStyleSetPaddingPercent(root_child2, YGEdgeTop, 10); + root_child2->setMeasureFunc(_measure_100_100); + YGNodeInsertChild(root, root_child2, 2); + + const YGNodeRef root_child3 = YGNodeNewWithConfig(config); + YGNodeStyleSetPaddingPercent(root_child3, YGEdgeTop, 20); + root_child3->setMeasureFunc(_measure_100_100); + YGNodeInsertChild(root, root_child3, 3); + + YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); + ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root)); + ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0)); + + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1)); + + ASSERT_FLOAT_EQ(200, YGNodeLayoutGetLeft(root_child2)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2)); + ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child2)); + + ASSERT_FLOAT_EQ(300, YGNodeLayoutGetLeft(root_child3)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child3)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child3)); + ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child3)); + + YGNodeFreeRecursive(root); + + YGConfigFree(config); +} + +TEST(YogaTest, percent_padding_and_percent_margin_with_measure_func) { + const YGConfigRef config = YGConfigNew(); + + const YGNodeRef root = YGNodeNewWithConfig(config); + YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow); + YGNodeStyleSetAlignItems(root, YGAlignFlexStart); + YGNodeStyleSetAlignContent(root, YGAlignFlexStart); + YGNodeStyleSetWidth(root, 500); + YGNodeStyleSetHeight(root, 500); + + const YGNodeRef root_child0 = YGNodeNewWithConfig(config); + YGNodeStyleSetWidth(root_child0, 100); + YGNodeStyleSetHeight(root_child0, 100); + YGNodeStyleSetPadding(root_child0, YGEdgeTop, 0); + root_child0->setMeasureFunc(_measure_100_100); + YGNodeInsertChild(root, root_child0, 0); + + const YGNodeRef root_child1 = YGNodeNewWithConfig(config); + YGNodeStyleSetWidth(root_child1, 100); + YGNodeStyleSetHeight(root_child1, 100); + YGNodeStyleSetPadding(root_child1, YGEdgeTop, 100); + root_child1->setMeasureFunc(_measure_100_100); + YGNodeInsertChild(root, root_child1, 1); + + const YGNodeRef root_child2 = YGNodeNewWithConfig(config); + YGNodeStyleSetPaddingPercent(root_child2, YGEdgeTop, 10); + YGNodeStyleSetMarginPercent(root_child2, YGEdgeTop, 10); + root_child2->setMeasureFunc(_measure_100_100); + YGNodeInsertChild(root, root_child2, 2); + + const YGNodeRef root_child3 = YGNodeNewWithConfig(config); + YGNodeStyleSetPaddingPercent(root_child3, YGEdgeTop, 20); + YGNodeStyleSetMarginPercent(root_child3, YGEdgeTop, 20); + root_child3->setMeasureFunc(_measure_100_100); + YGNodeInsertChild(root, root_child3, 3); + + YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); + ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root)); + ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0)); + + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1)); + + ASSERT_FLOAT_EQ(200, YGNodeLayoutGetLeft(root_child2)); + ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child2)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2)); + ASSERT_FLOAT_EQ(150, YGNodeLayoutGetHeight(root_child2)); + + ASSERT_FLOAT_EQ(300, YGNodeLayoutGetLeft(root_child3)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child3)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child3)); + ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child3)); + + YGNodeFreeRecursive(root); + + YGConfigFree(config); +} From cd0191c2470523b996a379a6761d3a57b1b83f45 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Fri, 15 Nov 2019 06:37:39 -0800 Subject: [PATCH 218/347] not using templates for updating styles which are used via bitfield Summary: We want completely remove usages of Bitfield as it uses templates which bloats binary size This stack will reduce 2.2 Kb in binary size bringing it down to 61.3KB on armv7 In this diff we are removing usage of template while updating styles. ## Changelog: [Internal][Yoga] : Not using templates for updating styles Reviewed By: astreet Differential Revision: D18519570 fbshipit-source-id: 2324088b8c63154f818b1da1edf24c0533e10082 --- yoga/Yoga.cpp | 54 ++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 14 deletions(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 41de5119..1821c867 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -582,7 +582,10 @@ void updateIndexedStyleProp( YOGA_EXPORT void YGNodeStyleSetDirection( const YGNodeRef node, const YGDirection value) { - updateStyle(node, &YGStyle::direction, value); + if (node->getStyle().direction() != value) { + node->getStyle().direction() = value; + node->markDirtyAndPropogate(); + } } YOGA_EXPORT YGDirection YGNodeStyleGetDirection(const YGNodeConstRef node) { return node->getStyle().direction(); @@ -591,8 +594,10 @@ YOGA_EXPORT YGDirection YGNodeStyleGetDirection(const YGNodeConstRef node) { YOGA_EXPORT void YGNodeStyleSetFlexDirection( const YGNodeRef node, const YGFlexDirection flexDirection) { - updateStyle( - node, &YGStyle::flexDirection, flexDirection); + if (node->getStyle().flexDirection() != flexDirection) { + node->getStyle().flexDirection() = flexDirection; + node->markDirtyAndPropogate(); + } } YOGA_EXPORT YGFlexDirection YGNodeStyleGetFlexDirection(const YGNodeConstRef node) { @@ -602,8 +607,10 @@ YGNodeStyleGetFlexDirection(const YGNodeConstRef node) { YOGA_EXPORT void YGNodeStyleSetJustifyContent( const YGNodeRef node, const YGJustify justifyContent) { - updateStyle( - node, &YGStyle::justifyContent, justifyContent); + if (node->getStyle().justifyContent() != justifyContent) { + node->getStyle().justifyContent() = justifyContent; + node->markDirtyAndPropogate(); + } } YOGA_EXPORT YGJustify YGNodeStyleGetJustifyContent(const YGNodeConstRef node) { return node->getStyle().justifyContent(); @@ -612,8 +619,10 @@ YOGA_EXPORT YGJustify YGNodeStyleGetJustifyContent(const YGNodeConstRef node) { YOGA_EXPORT void YGNodeStyleSetAlignContent( const YGNodeRef node, const YGAlign alignContent) { - updateStyle( - node, &YGStyle::alignContent, alignContent); + if (node->getStyle().alignContent() != alignContent) { + node->getStyle().alignContent() = alignContent; + node->markDirtyAndPropogate(); + } } YOGA_EXPORT YGAlign YGNodeStyleGetAlignContent(const YGNodeConstRef node) { return node->getStyle().alignContent(); @@ -622,7 +631,10 @@ YOGA_EXPORT YGAlign YGNodeStyleGetAlignContent(const YGNodeConstRef node) { YOGA_EXPORT void YGNodeStyleSetAlignItems( const YGNodeRef node, const YGAlign alignItems) { - updateStyle(node, &YGStyle::alignItems, alignItems); + if (node->getStyle().alignItems() != alignItems) { + node->getStyle().alignItems() = alignItems; + node->markDirtyAndPropogate(); + } } YOGA_EXPORT YGAlign YGNodeStyleGetAlignItems(const YGNodeConstRef node) { return node->getStyle().alignItems(); @@ -631,7 +643,10 @@ YOGA_EXPORT YGAlign YGNodeStyleGetAlignItems(const YGNodeConstRef node) { YOGA_EXPORT void YGNodeStyleSetAlignSelf( const YGNodeRef node, const YGAlign alignSelf) { - updateStyle(node, &YGStyle::alignSelf, alignSelf); + if (node->getStyle().alignSelf() != alignSelf) { + node->getStyle().alignSelf() = alignSelf; + node->markDirtyAndPropogate(); + } } YOGA_EXPORT YGAlign YGNodeStyleGetAlignSelf(const YGNodeConstRef node) { return node->getStyle().alignSelf(); @@ -640,8 +655,10 @@ YOGA_EXPORT YGAlign YGNodeStyleGetAlignSelf(const YGNodeConstRef node) { YOGA_EXPORT void YGNodeStyleSetPositionType( const YGNodeRef node, const YGPositionType positionType) { - updateStyle( - node, &YGStyle::positionType, positionType); + if (node->getStyle().positionType() != positionType) { + node->getStyle().positionType() = positionType; + node->markDirtyAndPropogate(); + } } YOGA_EXPORT YGPositionType YGNodeStyleGetPositionType(const YGNodeConstRef node) { @@ -651,7 +668,10 @@ YGNodeStyleGetPositionType(const YGNodeConstRef node) { YOGA_EXPORT void YGNodeStyleSetFlexWrap( const YGNodeRef node, const YGWrap flexWrap) { - updateStyle(node, &YGStyle::flexWrap, flexWrap); + if (node->getStyle().flexWrap() != flexWrap) { + node->getStyle().flexWrap() = flexWrap; + node->markDirtyAndPropogate(); + } } YOGA_EXPORT YGWrap YGNodeStyleGetFlexWrap(const YGNodeConstRef node) { return node->getStyle().flexWrap(); @@ -660,7 +680,10 @@ YOGA_EXPORT YGWrap YGNodeStyleGetFlexWrap(const YGNodeConstRef node) { YOGA_EXPORT void YGNodeStyleSetOverflow( const YGNodeRef node, const YGOverflow overflow) { - updateStyle(node, &YGStyle::overflow, overflow); + if (node->getStyle().overflow() != overflow) { + node->getStyle().overflow() = overflow; + node->markDirtyAndPropogate(); + } } YOGA_EXPORT YGOverflow YGNodeStyleGetOverflow(const YGNodeConstRef node) { return node->getStyle().overflow(); @@ -669,7 +692,10 @@ YOGA_EXPORT YGOverflow YGNodeStyleGetOverflow(const YGNodeConstRef node) { YOGA_EXPORT void YGNodeStyleSetDisplay( const YGNodeRef node, const YGDisplay display) { - updateStyle(node, &YGStyle::display, display); + if (node->getStyle().display() != display) { + node->getStyle().display() = display; + node->markDirtyAndPropogate(); + } } YOGA_EXPORT YGDisplay YGNodeStyleGetDisplay(const YGNodeConstRef node) { return node->getStyle().display(); From 198e99d30cd88dd1094078f47337718d7e227825 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Fri, 22 Nov 2019 04:28:49 -0800 Subject: [PATCH 219/347] Back out "not using templates for updating styles which are used via bitfield" Reviewed By: astreet Differential Revision: D18628090 fbshipit-source-id: 9d006534111f10ec25a0d56214792aeb96fbdef9 --- yoga/Yoga.cpp | 54 +++++++++++++-------------------------------------- 1 file changed, 14 insertions(+), 40 deletions(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 1821c867..41de5119 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -582,10 +582,7 @@ void updateIndexedStyleProp( YOGA_EXPORT void YGNodeStyleSetDirection( const YGNodeRef node, const YGDirection value) { - if (node->getStyle().direction() != value) { - node->getStyle().direction() = value; - node->markDirtyAndPropogate(); - } + updateStyle(node, &YGStyle::direction, value); } YOGA_EXPORT YGDirection YGNodeStyleGetDirection(const YGNodeConstRef node) { return node->getStyle().direction(); @@ -594,10 +591,8 @@ YOGA_EXPORT YGDirection YGNodeStyleGetDirection(const YGNodeConstRef node) { YOGA_EXPORT void YGNodeStyleSetFlexDirection( const YGNodeRef node, const YGFlexDirection flexDirection) { - if (node->getStyle().flexDirection() != flexDirection) { - node->getStyle().flexDirection() = flexDirection; - node->markDirtyAndPropogate(); - } + updateStyle( + node, &YGStyle::flexDirection, flexDirection); } YOGA_EXPORT YGFlexDirection YGNodeStyleGetFlexDirection(const YGNodeConstRef node) { @@ -607,10 +602,8 @@ YGNodeStyleGetFlexDirection(const YGNodeConstRef node) { YOGA_EXPORT void YGNodeStyleSetJustifyContent( const YGNodeRef node, const YGJustify justifyContent) { - if (node->getStyle().justifyContent() != justifyContent) { - node->getStyle().justifyContent() = justifyContent; - node->markDirtyAndPropogate(); - } + updateStyle( + node, &YGStyle::justifyContent, justifyContent); } YOGA_EXPORT YGJustify YGNodeStyleGetJustifyContent(const YGNodeConstRef node) { return node->getStyle().justifyContent(); @@ -619,10 +612,8 @@ YOGA_EXPORT YGJustify YGNodeStyleGetJustifyContent(const YGNodeConstRef node) { YOGA_EXPORT void YGNodeStyleSetAlignContent( const YGNodeRef node, const YGAlign alignContent) { - if (node->getStyle().alignContent() != alignContent) { - node->getStyle().alignContent() = alignContent; - node->markDirtyAndPropogate(); - } + updateStyle( + node, &YGStyle::alignContent, alignContent); } YOGA_EXPORT YGAlign YGNodeStyleGetAlignContent(const YGNodeConstRef node) { return node->getStyle().alignContent(); @@ -631,10 +622,7 @@ YOGA_EXPORT YGAlign YGNodeStyleGetAlignContent(const YGNodeConstRef node) { YOGA_EXPORT void YGNodeStyleSetAlignItems( const YGNodeRef node, const YGAlign alignItems) { - if (node->getStyle().alignItems() != alignItems) { - node->getStyle().alignItems() = alignItems; - node->markDirtyAndPropogate(); - } + updateStyle(node, &YGStyle::alignItems, alignItems); } YOGA_EXPORT YGAlign YGNodeStyleGetAlignItems(const YGNodeConstRef node) { return node->getStyle().alignItems(); @@ -643,10 +631,7 @@ YOGA_EXPORT YGAlign YGNodeStyleGetAlignItems(const YGNodeConstRef node) { YOGA_EXPORT void YGNodeStyleSetAlignSelf( const YGNodeRef node, const YGAlign alignSelf) { - if (node->getStyle().alignSelf() != alignSelf) { - node->getStyle().alignSelf() = alignSelf; - node->markDirtyAndPropogate(); - } + updateStyle(node, &YGStyle::alignSelf, alignSelf); } YOGA_EXPORT YGAlign YGNodeStyleGetAlignSelf(const YGNodeConstRef node) { return node->getStyle().alignSelf(); @@ -655,10 +640,8 @@ YOGA_EXPORT YGAlign YGNodeStyleGetAlignSelf(const YGNodeConstRef node) { YOGA_EXPORT void YGNodeStyleSetPositionType( const YGNodeRef node, const YGPositionType positionType) { - if (node->getStyle().positionType() != positionType) { - node->getStyle().positionType() = positionType; - node->markDirtyAndPropogate(); - } + updateStyle( + node, &YGStyle::positionType, positionType); } YOGA_EXPORT YGPositionType YGNodeStyleGetPositionType(const YGNodeConstRef node) { @@ -668,10 +651,7 @@ YGNodeStyleGetPositionType(const YGNodeConstRef node) { YOGA_EXPORT void YGNodeStyleSetFlexWrap( const YGNodeRef node, const YGWrap flexWrap) { - if (node->getStyle().flexWrap() != flexWrap) { - node->getStyle().flexWrap() = flexWrap; - node->markDirtyAndPropogate(); - } + updateStyle(node, &YGStyle::flexWrap, flexWrap); } YOGA_EXPORT YGWrap YGNodeStyleGetFlexWrap(const YGNodeConstRef node) { return node->getStyle().flexWrap(); @@ -680,10 +660,7 @@ YOGA_EXPORT YGWrap YGNodeStyleGetFlexWrap(const YGNodeConstRef node) { YOGA_EXPORT void YGNodeStyleSetOverflow( const YGNodeRef node, const YGOverflow overflow) { - if (node->getStyle().overflow() != overflow) { - node->getStyle().overflow() = overflow; - node->markDirtyAndPropogate(); - } + updateStyle(node, &YGStyle::overflow, overflow); } YOGA_EXPORT YGOverflow YGNodeStyleGetOverflow(const YGNodeConstRef node) { return node->getStyle().overflow(); @@ -692,10 +669,7 @@ YOGA_EXPORT YGOverflow YGNodeStyleGetOverflow(const YGNodeConstRef node) { YOGA_EXPORT void YGNodeStyleSetDisplay( const YGNodeRef node, const YGDisplay display) { - if (node->getStyle().display() != display) { - node->getStyle().display() = display; - node->markDirtyAndPropogate(); - } + updateStyle(node, &YGStyle::display, display); } YOGA_EXPORT YGDisplay YGNodeStyleGetDisplay(const YGNodeConstRef node) { return node->getStyle().display(); From f4840a0148476fec8b1a58a078f0c37ebea0c979 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Fri, 22 Nov 2019 04:28:49 -0800 Subject: [PATCH 220/347] Added BitUtils Summary: Adds BitUtils to be used later instead of Bitfield.h ##Changelog: [Internal][Yoga] : Adds BitUtils to be used later instead of Bitfield.h Reviewed By: astreet Differential Revision: D18519609 fbshipit-source-id: 8353929543505a7d80d66281adb801d34372beed --- yoga/BitUtils.h | 66 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 yoga/BitUtils.h diff --git a/yoga/BitUtils.h b/yoga/BitUtils.h new file mode 100644 index 00000000..1c32e9ec --- /dev/null +++ b/yoga/BitUtils.h @@ -0,0 +1,66 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include +#include +#include "YGEnums.h" + +namespace facebook { +namespace yoga { + +namespace detail { + +constexpr size_t log2ceilFn(size_t n) { + return n < 1 ? 0 : (1 + log2ceilFn(n / 2)); +} + +constexpr int mask(size_t bitWidth, size_t index) { + return ((1 << bitWidth) - 1) << index; +} + +// The number of bits necessary to represent enums defined with YG_ENUM_SEQ_DECL +template +constexpr size_t bitWidthFn() { + static_assert( + enums::count() > 0, "Enums must have at least one entries"); + return log2ceilFn(enums::count() - 1); +} + +template +constexpr Enum getEnumData(int flags, size_t index) { + return static_cast((flags & mask(bitWidthFn(), index)) >> index); +} + +template +void setEnumData(uint32_t& flags, size_t index, int newValue) { + flags = (flags & ~mask(bitWidthFn(), index)) | + ((newValue << index) & (mask(bitWidthFn(), index))); +} + +template +void setEnumData(uint8_t& flags, size_t index, int newValue) { + flags = (flags & ~mask(bitWidthFn(), index)) | + ((newValue << index) & (mask(bitWidthFn(), index))); +} + +constexpr bool getBooleanData(int flags, size_t index) { + return (flags >> index) & 1; +} + +inline void setBooleanData(uint8_t& flags, size_t index, bool value) { + if (value) { + flags |= 1 << index; + } else { + flags &= ~(1 << index); + } +} + +} // namespace detail +} // namespace yoga +} // namespace facebook From 9650c1903da021a5c397b79658176c54f36f10ce Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Fri, 22 Nov 2019 04:28:49 -0800 Subject: [PATCH 221/347] converts BitfieldTests to BitUtilsTest Summary: Use BitUtils for testing bit operations Reviewed By: astreet Differential Revision: D18596312 fbshipit-source-id: 83f93cd7f1f056b3f64070debbc452877b44ac7a --- tests/BitUtilsTest.cpp | 206 ++++++++++++++++++++++++++++++++++ tests/BitfieldTest.cpp | 244 ----------------------------------------- 2 files changed, 206 insertions(+), 244 deletions(-) create mode 100644 tests/BitUtilsTest.cpp delete mode 100644 tests/BitfieldTest.cpp diff --git a/tests/BitUtilsTest.cpp b/tests/BitUtilsTest.cpp new file mode 100644 index 00000000..d20ee307 --- /dev/null +++ b/tests/BitUtilsTest.cpp @@ -0,0 +1,206 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#include + +#include +#include + +namespace facebook { +namespace yoga { + +TEST(BitUtils, one_boolean_defaults_to_false) { + constexpr uint8_t flags = 0; + + ASSERT_EQ(detail::getBooleanData(flags, 0), false); + static_assert( + detail::getBooleanData(flags, 0) == false, + "first boolean member must default to false"); +} + +TEST(BitUtils, one_boolean_can_be_initialized_to_true) { + constexpr uint8_t flags = 1; + + ASSERT_EQ(detail::getBooleanData(flags, 0), true); + static_assert( + detail::getBooleanData(flags, 0) == true, + "first boolean member must be initialized to true"); +} + +TEST(BitUtils, one_boolean_can_be_set_to_true) { + uint8_t flags = 0; + + detail::setBooleanData(flags, 0, true); + ASSERT_EQ(detail::getBooleanData(flags, 0), true); +} + +TEST(BitUtils, second_boolean_defaults_to_false) { + constexpr uint8_t flags = 0; + + ASSERT_EQ(detail::getBooleanData(flags, 1), false); + static_assert( + detail::getBooleanData(flags, 1) == false, + "second boolean member must default to false"); +} + +TEST(BitUtils, second_boolean_can_be_initialized_to_true) { + constexpr uint8_t flags = 2; + + ASSERT_EQ(detail::getBooleanData(flags, 0), false); + ASSERT_EQ(detail::getBooleanData(flags, 1), true); + static_assert( + detail::getBooleanData(flags, 0) == false, + "first boolean member must default to false"); + static_assert( + detail::getBooleanData(flags, 1) == true, + "second boolean member must be initialized to true"); +} + +TEST(BitUtils, second_boolean_can_be_set_to_true) { + uint8_t flags = 0; + + detail::setBooleanData(flags, 1, true); + ASSERT_EQ(detail::getBooleanData(flags, 0), false); + ASSERT_EQ(detail::getBooleanData(flags, 1), true); +} + +TEST(BitUtils, third_boolean_defaults_to_false) { + constexpr uint8_t flags = 0; + + ASSERT_EQ(detail::getBooleanData(flags, 2), false); + static_assert( + detail::getBooleanData(flags, 2) == false, + "second boolean member must default to false"); +} + +TEST(BitUtils, third_boolean_can_be_initialized_to_true) { + constexpr uint8_t flags = 4; + + ASSERT_EQ(detail::getBooleanData(flags, 0), false); + ASSERT_EQ(detail::getBooleanData(flags, 1), false); + ASSERT_EQ(detail::getBooleanData(flags, 2), true); + static_assert( + detail::getBooleanData(flags, 0) == false, + "first boolean member must default to false"); + static_assert( + detail::getBooleanData(flags, 1) == false, + "second boolean member must default to false"); + static_assert( + detail::getBooleanData(flags, 2) == true, + "second boolean member must be initialized to true"); +} + +TEST(BitUtils, third_boolean_can_be_set_to_true) { + uint8_t flags = 0; + + detail::setBooleanData(flags, 2, true); + ASSERT_EQ(detail::getBooleanData(flags, 0), false); + ASSERT_EQ(detail::getBooleanData(flags, 1), false); + ASSERT_EQ(detail::getBooleanData(flags, 2), true); +} + +TEST(BitUtils, setting_boolean_values_does_not_spill_over) { + uint8_t flags = 0; + + detail::setBooleanData(flags, 1, (bool) 7); + + ASSERT_EQ(detail::getBooleanData(flags, 0), false); + ASSERT_EQ(detail::getBooleanData(flags, 1), true); + ASSERT_EQ(detail::getBooleanData(flags, 2), false); +} + +TEST(BitUtils, first_enum_defaults_to_0) { + constexpr uint8_t flags = 0; + + ASSERT_EQ(detail::getEnumData(flags, 0), YGAlignAuto); + static_assert( + detail::getEnumData(flags, 0) == YGAlignAuto, + "first enum member must default to 0"); +} + +TEST(BitUtils, first_enum_can_be_set) { + uint8_t flags = 0; + + detail::setEnumData(flags, 0, YGAlignSpaceBetween); + + ASSERT_EQ(detail::getEnumData(flags, 0), YGAlignSpaceBetween); +} + +TEST(BitUtils, second_enum_defaults_to_0) { + constexpr uint8_t flags = 0; + static constexpr size_t alignOffset = 0; + static constexpr size_t edgeOffset = 3; + + ASSERT_EQ(detail::getEnumData(flags, alignOffset), YGAlignAuto); + ASSERT_EQ(detail::getEnumData(flags, edgeOffset), YGEdgeLeft); + static_assert( + detail::getEnumData(flags, alignOffset) == YGAlignAuto, + "first enum member must default to 0"); + static_assert( + detail::getEnumData(flags, edgeOffset) == YGEdgeLeft, + "second enum member must default to 0"); +} + +TEST(BitUtils, second_enum_can_be_set) { + uint8_t flags = 0; + static constexpr size_t alignOffset = 0; + static constexpr size_t edgeOffset = 3; + + detail::setEnumData(flags, edgeOffset, YGEdgeAll); + + ASSERT_EQ(detail::getEnumData(flags, alignOffset), YGAlignAuto); + ASSERT_EQ(detail::getEnumData(flags, edgeOffset), YGEdgeAll); +} + +TEST(BitUtils, third_enum_defaults_to_0) { + constexpr uint8_t flags = 0; + static constexpr size_t alignOffset = 0; + static constexpr size_t boolOffset = 3; + static constexpr size_t edgesOffset = 4; + + ASSERT_EQ(detail::getEnumData(flags, alignOffset), YGAlignAuto); + ASSERT_EQ(detail::getBooleanData(flags, boolOffset), false); + ASSERT_EQ(detail::getEnumData(flags, edgesOffset), YGEdgeLeft); + static_assert( + detail::getEnumData(flags, alignOffset) == YGAlignAuto, + "first enum member must default to 0"); + static_assert( + detail::getBooleanData(flags, boolOffset) == false, + "middle boolean member must default to false"); + static_assert( + detail::getEnumData(flags, edgesOffset) == YGEdgeLeft, + "last enum member must default to 0"); +} + +TEST(BitUtils, third_enum_can_be_set) { + uint8_t flags = 0; + static constexpr size_t alignOffset = 0; + static constexpr size_t boolOffset = 3; + static constexpr size_t edgesOffset = 4; + + detail::setEnumData(flags, edgesOffset, YGEdgeVertical); + + ASSERT_EQ(detail::getEnumData(flags, alignOffset), YGAlignAuto); + ASSERT_EQ(detail::getBooleanData(flags, boolOffset), false); + ASSERT_EQ(detail::getEnumData(flags, edgesOffset), YGEdgeVertical); +} + +TEST(BitUtils, setting_values_does_not_spill_over) { + uint8_t flags = 0; + static constexpr size_t alignOffset = 0; + static constexpr size_t edgesOffset = 3; + static constexpr size_t boolOffset = 7; + + detail::setEnumData(flags, edgesOffset, (YGEdge) 0xffffff); + + ASSERT_EQ(detail::getEnumData(flags, alignOffset), 0); + ASSERT_EQ(detail::getBooleanData(flags, boolOffset), false); + ASSERT_EQ(detail::getEnumData(flags, edgesOffset), 0xf); +} + +} // namespace yoga +} // namespace facebook diff --git a/tests/BitfieldTest.cpp b/tests/BitfieldTest.cpp deleted file mode 100644 index bb999c64..00000000 --- a/tests/BitfieldTest.cpp +++ /dev/null @@ -1,244 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -#include - -#include -#include - -namespace facebook { -namespace yoga { - -TEST(Bitfield, one_boolean_defaults_to_false) { - constexpr auto bf = Bitfield{}; - - ASSERT_EQ(bf.at<0>(), false); - static_assert( - bf.at<0>() == false, "first boolean member must default to false"); -} - -TEST(Bitfield, one_boolean_can_be_initialized_to_true) { - constexpr auto bf = Bitfield{true}; - - ASSERT_EQ(bf.at<0>(), true); - static_assert( - bf.at<0>() == true, "first boolean member must be initialized to true"); -} - -TEST(Bitfield, one_boolean_can_be_set_to_true) { - auto bf = Bitfield{}; - - bf.at<0>() = true; - ASSERT_EQ(bf.at<0>(), true); -} - -TEST(Bitfield, second_boolean_defaults_to_false) { - constexpr auto bf = Bitfield{}; - - ASSERT_EQ(bf.at<1>(), false); - static_assert( - bf.at<1>() == false, "second boolean member must default to false"); -} - -TEST(Bitfield, second_boolean_can_be_initialized_to_true) { - constexpr auto bf = Bitfield{false, true}; - - ASSERT_EQ(bf.at<0>(), false); - ASSERT_EQ(bf.at<1>(), true); - static_assert( - bf.at<0>() == false, "first boolean member must default to false"); - static_assert( - bf.at<1>() == true, "second boolean member must be initialized to true"); -} - -TEST(Bitfield, second_boolean_can_be_set_to_true) { - auto bf = Bitfield{}; - - bf.at<1>() = true; - ASSERT_EQ(bf.at<0>(), false); - ASSERT_EQ(bf.at<1>(), true); -} - -TEST(Bitfield, third_boolean_defaults_to_false) { - constexpr auto bf = Bitfield{}; - - ASSERT_EQ(bf.at<2>(), false); - static_assert( - bf.at<2>() == false, "second boolean member must default to false"); -} - -TEST(Bitfield, third_boolean_can_be_initialized_to_true) { - constexpr auto bf = Bitfield{false, false, true}; - - ASSERT_EQ(bf.at<0>(), false); - ASSERT_EQ(bf.at<1>(), false); - ASSERT_EQ(bf.at<2>(), true); - static_assert( - bf.at<0>() == false, "first boolean member must default to false"); - static_assert( - bf.at<1>() == false, "second boolean member must default to false"); - static_assert( - bf.at<2>() == true, "second boolean member must be initialized to true"); -} - -TEST(Bitfield, third_boolean_can_be_set_to_true) { - auto bf = Bitfield{}; - - bf.at<2>() = true; - ASSERT_EQ(bf.at<0>(), false); - ASSERT_EQ(bf.at<1>(), false); - ASSERT_EQ(bf.at<2>(), true); -} - -TEST(Bitfield, initializing_boolean_values_does_not_spill_over) { - constexpr auto bf = - Bitfield{false, (bool) 7, false}; - - ASSERT_EQ(bf.at<0>(), false); - ASSERT_EQ(bf.at<1>(), true); - ASSERT_EQ(bf.at<2>(), false); - static_assert( - bf.at<0>() == false, "first boolean member must be initialized to false"); - static_assert( - bf.at<1>() == true, "second boolean member must be initialized to true"); - static_assert( - bf.at<2>() == false, "third boolean member must be initialized to false"); -} - -TEST(Bitfield, setting_boolean_values_does_not_spill_over) { - auto bf = Bitfield{}; - - bf.at<1>() = (bool) 7; - - ASSERT_EQ(bf.at<0>(), false); - ASSERT_EQ(bf.at<1>(), true); - ASSERT_EQ(bf.at<2>(), false); -} - -TEST(Bitfield, first_enum_defaults_to_0) { - constexpr auto bf = Bitfield{}; - - ASSERT_EQ(bf.at<0>(), YGAlignAuto); - static_assert( - bf.at<0>() == YGAlignAuto, "first enum member must default to 0"); -} - -TEST(Bitfield, first_enum_can_be_initialized) { - constexpr auto bf = Bitfield{YGAlignFlexEnd}; - - ASSERT_EQ(bf.at<0>(), YGAlignFlexEnd); - static_assert( - bf.at<0>() == YGAlignFlexEnd, - "first enum member must be initialized to YGAlignFlexEnd"); -} - -TEST(Bitfield, first_enum_can_be_set) { - auto bf = Bitfield{}; - - bf.at<0>() = YGAlignSpaceBetween; - - ASSERT_EQ(bf.at<0>(), YGAlignSpaceBetween); -} - -TEST(Bitfield, second_enum_defaults_to_0) { - constexpr auto bf = Bitfield{}; - - ASSERT_EQ(bf.at<0>(), YGAlignAuto); - ASSERT_EQ(bf.at<1>(), YGEdgeLeft); - static_assert( - bf.at<0>() == YGAlignAuto, "first enum member must default to 0"); - static_assert( - bf.at<1>() == YGEdgeLeft, "second enum member must default to 0"); -} - -TEST(Bitfield, second_enum_can_be_initialized) { - constexpr auto bf = - Bitfield{YGAlignAuto, YGEdgeAll}; - - ASSERT_EQ(bf.at<0>(), YGAlignAuto); - ASSERT_EQ(bf.at<1>(), YGEdgeAll); - static_assert( - bf.at<0>() == YGAlignAuto, "first enum member must default to 0"); - static_assert( - bf.at<1>() == YGEdgeAll, - "second enum member must be initialized to YGEdgeAll"); -} - -TEST(Bitfield, second_enum_can_be_set) { - auto bf = Bitfield{}; - - bf.at<1>() = YGEdgeAll; - - ASSERT_EQ(bf.at<0>(), YGAlignAuto); - ASSERT_EQ(bf.at<1>(), YGEdgeAll); -} - -TEST(Bitfield, third_enum_defaults_to_0) { - constexpr auto bf = Bitfield{}; - - ASSERT_EQ(bf.at<0>(), YGAlignAuto); - ASSERT_EQ(bf.at<1>(), false); - ASSERT_EQ(bf.at<2>(), YGEdgeLeft); - static_assert( - bf.at<0>() == YGAlignAuto, "first enum member must default to 0"); - static_assert( - bf.at<1>() == false, "middle boolean member must default to false"); - static_assert(bf.at<2>() == YGEdgeLeft, "last enum member must default to 0"); -} - -TEST(Bitfield, third_enum_can_be_initialized) { - constexpr auto bf = Bitfield{ - YGAlignAuto, false, YGEdgeVertical}; - - ASSERT_EQ(bf.at<0>(), YGAlignAuto); - ASSERT_EQ(bf.at<1>(), false); - ASSERT_EQ(bf.at<2>(), YGEdgeVertical); - static_assert( - bf.at<0>() == YGAlignAuto, "first enum member must default to 0"); - static_assert( - bf.at<1>() == false, "middle boolean member must default to false"); - static_assert( - bf.at<2>() == YGEdgeVertical, - "second enum member must be initialized to YGEdgeVertical"); -} - -TEST(Bitfield, third_enum_can_be_set) { - auto bf = Bitfield{}; - - bf.at<2>() = YGEdgeVertical; - - ASSERT_EQ(bf.at<0>(), YGAlignAuto); - ASSERT_EQ(bf.at<1>(), false); - ASSERT_EQ(bf.at<2>(), YGEdgeVertical); -} - -TEST(Bitfield, initializing_values_does_not_spill_over) { - constexpr auto bf = Bitfield{ - (YGAlign) 0, (YGEdge) 0xffffff, false}; - - ASSERT_EQ(bf.at<0>(), (YGAlign) 0); - ASSERT_EQ(bf.at<1>(), 0xf); - ASSERT_EQ(bf.at<2>(), false); - static_assert(bf.at<0>() == 0, "first enum member must be initialized to 0"); - static_assert( - bf.at<1>() == 0xf, "second member must be initialized to YGEdgeVertical"); - static_assert( - bf.at<2>() == false, "boolean member must be initialized to false"); -} - -TEST(Bitfield, setting_values_does_not_spill_over) { - auto bf = Bitfield{}; - - bf.at<1>() = (YGEdge) 0xffffff; - - ASSERT_EQ(bf.at<0>(), 0); - ASSERT_EQ(bf.at<1>(), 0xf); - ASSERT_EQ(bf.at<2>(), false); -} - -} // namespace yoga -} // namespace facebook From 9d2ca758fade8bcf743624b7ecff134cfa044cf0 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Fri, 22 Nov 2019 04:28:49 -0800 Subject: [PATCH 222/347] Remove Bitfield from YGStyle Summary: ##Changelog: [Internal][Yoga] Remove Bitfield from YGStyle Reviewed By: astreet Differential Revision: D18519614 fbshipit-source-id: 70f18bc679b62712d40d76bd793cf85906b067a1 --- yoga/YGStyle.h | 150 +++++++++++++++++++++++++++++-------------------- 1 file changed, 89 insertions(+), 61 deletions(-) diff --git a/yoga/YGStyle.h b/yoga/YGStyle.h index b066b346..9bfbc442 100644 --- a/yoga/YGStyle.h +++ b/yoga/YGStyle.h @@ -10,12 +10,12 @@ #include #include #include -#include "Bitfield.h" #include "CompactValue.h" #include "YGEnums.h" #include "YGFloatOptional.h" #include "Yoga-internal.h" #include "Yoga.h" +#include "BitUtils.h" class YOGA_EXPORT YGStyle { template @@ -27,6 +27,19 @@ public: using Dimensions = Values; using Edges = Values; + template + struct BitfieldRef { + YGStyle& style; + size_t offset; + operator T() const { + return facebook::yoga::detail::getEnumData(style.flags, offset); + } + BitfieldRef& operator=(T x) { + facebook::yoga::detail::setEnumData(style.flags, offset, x); + return *this; + } + }; + template struct Ref { YGStyle& style; @@ -60,43 +73,35 @@ public: CompactValue operator[](Idx idx) const { return (style.*Prop)[idx]; } }; - YGStyle() = default; + YGStyle() { + alignContent() = YGAlignFlexStart; + alignItems() = YGAlignStretch; + } ~YGStyle() = default; private: - static constexpr size_t directionIdx = 0; - static constexpr size_t flexDirectionIdx = 1; - static constexpr size_t justifyContentIdx = 2; - static constexpr size_t alignContentIdx = 3; - static constexpr size_t alignItemsIdx = 4; - static constexpr size_t alignSelfIdx = 5; - static constexpr size_t positionTypeIdx = 6; - static constexpr size_t flexWrapIdx = 7; - static constexpr size_t overflowIdx = 8; - static constexpr size_t displayIdx = 9; - using Flags = facebook::yoga::Bitfield< - uint32_t, - YGDirection, - YGFlexDirection, - YGJustify, - YGAlign, - YGAlign, - YGAlign, - YGPositionType, - YGWrap, - YGOverflow, - YGDisplay>; + static constexpr size_t directionOffset = 0; + static constexpr size_t flexdirectionOffset = + directionOffset + facebook::yoga::detail::bitWidthFn(); + static constexpr size_t justifyContentOffset = flexdirectionOffset + + facebook::yoga::detail::bitWidthFn(); + static constexpr size_t alignContentOffset = + justifyContentOffset + facebook::yoga::detail::bitWidthFn(); + static constexpr size_t alignItemsOffset = + alignContentOffset + facebook::yoga::detail::bitWidthFn(); + static constexpr size_t alignSelfOffset = + alignItemsOffset + facebook::yoga::detail::bitWidthFn(); + static constexpr size_t positionTypeOffset = + alignSelfOffset + facebook::yoga::detail::bitWidthFn(); + static constexpr size_t flexWrapOffset = + positionTypeOffset + facebook::yoga::detail::bitWidthFn(); + static constexpr size_t overflowOffset = + flexWrapOffset + facebook::yoga::detail::bitWidthFn(); + static constexpr size_t displayOffset = + overflowOffset + facebook::yoga::detail::bitWidthFn(); + + uint32_t flags = 0; - Flags flags_ = {YGDirectionInherit, - YGFlexDirectionColumn, - YGJustifyFlexStart, - YGAlignFlexStart, - YGAlignStretch, - YGAlignAuto, - YGPositionTypeRelative, - YGWrapNoWrap, - YGOverflowVisible, - YGDisplayFlex}; YGFloatOptional flex_ = {}; YGFloatOptional flexGrow_ = {}; YGFloatOptional flexShrink_ = {}; @@ -115,45 +120,68 @@ public: // for library users needing a type using ValueRepr = std::remove_reference::type; - YGDirection direction() const { return flags_.at(); } - Flags::Ref direction() { return flags_.at(); } + YGDirection direction() const { + return facebook::yoga::detail::getEnumData( + flags, directionOffset); + } + BitfieldRef direction() { return {*this, directionOffset}; } YGFlexDirection flexDirection() const { - return flags_.at(); + return facebook::yoga::detail::getEnumData( + flags, flexdirectionOffset); } - Flags::Ref flexDirection() { - return flags_.at(); + BitfieldRef flexDirection() { + return {*this, flexdirectionOffset}; } - YGJustify justifyContent() const { return flags_.at(); } - Flags::Ref justifyContent() { - return flags_.at(); + YGJustify justifyContent() const { + return facebook::yoga::detail::getEnumData( + flags, justifyContentOffset); + } + BitfieldRef justifyContent() { + return {*this, justifyContentOffset}; } - YGAlign alignContent() const { return flags_.at(); } - Flags::Ref alignContent() { - return flags_.at(); + YGAlign alignContent() const { + return facebook::yoga::detail::getEnumData( + flags, alignContentOffset); + } + BitfieldRef alignContent() { return {*this, alignContentOffset}; } + + YGAlign alignItems() const { + return facebook::yoga::detail::getEnumData( + flags, alignItemsOffset); + } + BitfieldRef alignItems() { return {*this, alignItemsOffset}; } + + YGAlign alignSelf() const { + return facebook::yoga::detail::getEnumData(flags, alignSelfOffset); + } + BitfieldRef alignSelf() { return {*this, alignSelfOffset}; } + + YGPositionType positionType() const { + return facebook::yoga::detail::getEnumData( + flags, positionTypeOffset); + } + BitfieldRef positionType() { + return {*this, positionTypeOffset}; } - YGAlign alignItems() const { return flags_.at(); } - Flags::Ref alignItems() { return flags_.at(); } - - YGAlign alignSelf() const { return flags_.at(); } - Flags::Ref alignSelf() { return flags_.at(); } - - YGPositionType positionType() const { return flags_.at(); } - Flags::Ref positionType() { - return flags_.at(); + YGWrap flexWrap() const { + return facebook::yoga::detail::getEnumData(flags, flexWrapOffset); } + BitfieldRef flexWrap() { return {*this, flexWrapOffset}; } - YGWrap flexWrap() const { return flags_.at(); } - Flags::Ref flexWrap() { return flags_.at(); } + YGOverflow overflow() const { + return facebook::yoga::detail::getEnumData( + flags, overflowOffset); + } + BitfieldRef overflow() { return {*this, overflowOffset}; } - YGOverflow overflow() const { return flags_.at(); } - Flags::Ref overflow() { return flags_.at(); } - - YGDisplay display() const { return flags_.at(); } - Flags::Ref display() { return flags_.at(); } + YGDisplay display() const { + return facebook::yoga::detail::getEnumData(flags, displayOffset); + } + BitfieldRef display() { return {*this, displayOffset}; } YGFloatOptional flex() const { return flex_; } Ref flex() { return {*this}; } From f3498a29590105b4096035f16b0d3a35e27aa295 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Fri, 22 Nov 2019 04:28:49 -0800 Subject: [PATCH 223/347] Remove BItfield from YGLayout.h Summary: ##Changelog: [Internal][Yoga] Remove Bitfield from YGLayout Reviewed By: astreet Differential Revision: D18519623 fbshipit-source-id: 950b8cb1ca2cd0424b8d8748c4b71336b40fc15f --- yoga/YGLayout.h | 60 ++++++++++++++++++++++++++++++++----------------- yoga/YGNode.cpp | 8 +++---- 2 files changed, 43 insertions(+), 25 deletions(-) diff --git a/yoga/YGLayout.h b/yoga/YGLayout.h index 658a31f2..30b8dd76 100644 --- a/yoga/YGLayout.h +++ b/yoga/YGLayout.h @@ -6,10 +6,12 @@ */ #pragma once -#include "Bitfield.h" +#include "BitUtils.h" #include "YGFloatOptional.h" #include "Yoga-internal.h" +using namespace facebook::yoga; + struct YGLayout { std::array position = {}; std::array dimensions = {{YGUndefined, YGUndefined}}; @@ -18,12 +20,14 @@ struct YGLayout { std::array padding = {}; private: - static constexpr size_t directionIdx = 0; - static constexpr size_t didUseLegacyFlagIdx = 1; - static constexpr size_t doesLegacyStretchFlagAffectsLayoutIdx = 2; - static constexpr size_t hadOverflowIdx = 3; - facebook::yoga::Bitfield flags_ = - {YGDirectionInherit, false, false, false}; + static constexpr size_t directionOffset = 0; + static constexpr size_t didUseLegacyFlagOffset = + directionOffset + facebook::yoga::detail::bitWidthFn(); + static constexpr size_t doesLegacyStretchFlagAffectsLayoutOffset = + didUseLegacyFlagOffset + 1; + static constexpr size_t hadOverflowOffset = + doesLegacyStretchFlagAffectsLayoutOffset + 1; + uint8_t flags = 0; public: uint32_t computedFlexBasisGeneration = 0; @@ -41,27 +45,41 @@ public: YGCachedMeasurement cachedLayout = YGCachedMeasurement(); - YGDirection direction() const { return flags_.at(); } - decltype(flags_)::Ref direction() { - return flags_.at(); + YGDirection direction() const { + return facebook::yoga::detail::getEnumData( + flags, directionOffset); } - bool didUseLegacyFlag() const { return flags_.at(); } - decltype(flags_)::Ref didUseLegacyFlag() { - return flags_.at(); + void setDirection(YGDirection direction) { + facebook::yoga::detail::setEnumData( + flags, directionOffset, direction); + } + + bool didUseLegacyFlag() const { + return facebook::yoga::detail::getBooleanData( + flags, didUseLegacyFlagOffset); + } + + void setDidUseLegacyFlag(bool val) { + facebook::yoga::detail::setBooleanData(flags, didUseLegacyFlagOffset, val); } bool doesLegacyStretchFlagAffectsLayout() const { - return flags_.at(); - } - decltype(flags_)::Ref - doesLegacyStretchFlagAffectsLayout() { - return flags_.at(); + return facebook::yoga::detail::getBooleanData( + flags, doesLegacyStretchFlagAffectsLayoutOffset); } - bool hadOverflow() const { return flags_.at(); } - decltype(flags_)::Ref hadOverflow() { - return flags_.at(); + void setDoesLegacyStretchFlagAffectsLayout(bool val) { + facebook::yoga::detail::setBooleanData( + flags, doesLegacyStretchFlagAffectsLayoutOffset, val); + } + + bool hadOverflow() const { + return facebook::yoga::detail::getBooleanData(flags, hadOverflowOffset); + } + void setHadOverflow(bool hadOverflow) { + facebook::yoga::detail::setBooleanData( + flags, hadOverflowOffset, hadOverflow); } bool operator==(YGLayout layout) const; diff --git a/yoga/YGNode.cpp b/yoga/YGNode.cpp index 1d49b007..71d3a6db 100644 --- a/yoga/YGNode.cpp +++ b/yoga/YGNode.cpp @@ -232,7 +232,7 @@ void YGNode::removeChild(uint32_t index) { } void YGNode::setLayoutDirection(YGDirection direction) { - layout_.direction() = direction; + layout_.setDirection(direction); } void YGNode::setLayoutMargin(float margin, int index) { @@ -270,7 +270,7 @@ void YGNode::setLayoutMeasuredDimension(float measuredDimension, int index) { } void YGNode::setLayoutHadOverflow(bool hadOverflow) { - layout_.hadOverflow() = hadOverflow; + layout_.setHadOverflow(hadOverflow); } void YGNode::setLayoutDimension(float dimension, int index) { @@ -536,11 +536,11 @@ bool YGNode::didUseLegacyFlag() { void YGNode::setLayoutDoesLegacyFlagAffectsLayout( bool doesLegacyFlagAffectsLayout) { - layout_.doesLegacyStretchFlagAffectsLayout() = doesLegacyFlagAffectsLayout; + layout_.setDoesLegacyStretchFlagAffectsLayout(doesLegacyFlagAffectsLayout); } void YGNode::setLayoutDidUseLegacyFlag(bool didUseLegacyFlag) { - layout_.didUseLegacyFlag() = didUseLegacyFlag; + layout_.setDidUseLegacyFlag(didUseLegacyFlag); } bool YGNode::isLayoutTreeEqualToNode(const YGNode& node) const { From aeb9549af7fbfef5e43e3334a40687d5d885158e Mon Sep 17 00:00:00 2001 From: Sergey Ryabov Date: Fri, 22 Nov 2019 10:08:38 -0800 Subject: [PATCH 224/347] Fix javadocs Summary: Changelog: [Internal] Reviewed By: muraziz Differential Revision: D15538725 fbshipit-source-id: 5cf60f47b07ce355e40d5b064add1df980beed89 --- java/com/facebook/yoga/YogaNodeJNIBase.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index 45d017c4..6372ddd7 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -138,12 +138,12 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { } /** - * @returns the {@link YogaNode} that owns this {@link YogaNode}. - * The owner is used to identify the YogaTree that a {@link YogaNode} belongs - * to. + * The owner is used to identify the YogaTree that a {@link YogaNode} belongs to. * This method will return the parent of the {@link YogaNode} when the * {@link YogaNode} only belongs to one YogaTree or null when the * {@link YogaNode} is shared between two or more YogaTrees. + * + * @return the {@link YogaNode} that owns this {@link YogaNode}. */ @Nullable public YogaNodeJNIBase getOwner() { @@ -521,7 +521,7 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { * This is different than calling removeChildAt and addChildAt because this method ONLY replaces * the child in the mChildren datastructure. @DoNotStrip: called from JNI * - * @return the nativePointer of the newNode {@linl YogaNode} + * @return the nativePointer of the newNode {@link YogaNode} */ @DoNotStrip private final long replaceChild(YogaNodeJNIBase newNode, int childIndex) { From f7f134274c6b3673c5c9783aa661434950837e74 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 27 Nov 2019 14:16:42 -0800 Subject: [PATCH 225/347] Remove bitfield from YGNode.h Summary: ##Changelog: [Internal][Yoga] remove Bitfield from YGNode.h Reviewed By: astreet Differential Revision: D18519633 fbshipit-source-id: b5a7d8d5ee960c5618df382900c4ded3da0587a6 --- yoga/YGNode.cpp | 38 +++++++++++++++++++++----------------- yoga/YGNode.h | 43 ++++++++++++++++++++++++++----------------- 2 files changed, 47 insertions(+), 34 deletions(-) diff --git a/yoga/YGNode.cpp b/yoga/YGNode.cpp index 71d3a6db..c15af8de 100644 --- a/yoga/YGNode.cpp +++ b/yoga/YGNode.cpp @@ -16,7 +16,7 @@ using facebook::yoga::detail::CompactValue; YGNode::YGNode(YGNode&& node) { context_ = node.context_; - flags_ = node.flags_; + flags = node.flags; measure_ = node.measure_; baseline_ = node.baseline_; print_ = node.print_; @@ -42,7 +42,7 @@ YGNode::YGNode(const YGNode& node, YGConfigRef config) : YGNode{node} { void YGNode::print(void* printContext) { if (print_.noContext != nullptr) { - if (flags_.at()) { + if (facebook::yoga::detail::getBooleanData(flags, printUsesContext_)) { print_.withContext(this, printContext); } else { print_.noContext(this); @@ -148,14 +148,14 @@ YGSize YGNode::measure( YGMeasureMode heightMode, void* layoutContext) { - return flags_.at() + return facebook::yoga::detail::getBooleanData(flags, measureUsesContext_) ? measure_.withContext( this, width, widthMode, height, heightMode, layoutContext) : measure_.noContext(this, width, widthMode, height, heightMode); } float YGNode::baseline(float width, float height, void* layoutContext) { - return flags_.at() + return facebook::yoga::detail::getBooleanData(flags, baselineUsesContext_) ? baseline_.withContext(this, width, height, layoutContext) : baseline_.noContext(this, width, height); } @@ -166,7 +166,7 @@ void YGNode::setMeasureFunc(decltype(YGNode::measure_) measureFunc) { if (measureFunc.noContext == nullptr) { // TODO: t18095186 Move nodeType to opt-in function and mark appropriate // places in Litho - flags_.at() = YGNodeTypeDefault; + setNodeType(YGNodeTypeDefault); } else { YGAssertWithNode( this, @@ -182,14 +182,14 @@ void YGNode::setMeasureFunc(decltype(YGNode::measure_) measureFunc) { } void YGNode::setMeasureFunc(YGMeasureFunc measureFunc) { - flags_.at() = false; + facebook::yoga::detail::setBooleanData(flags, measureUsesContext_, false); decltype(YGNode::measure_) m; m.noContext = measureFunc; setMeasureFunc(m); } YOGA_EXPORT void YGNode::setMeasureFunc(MeasureWithContextFn measureFunc) { - flags_.at() = true; + facebook::yoga::detail::setBooleanData(flags, measureUsesContext_, true); decltype(YGNode::measure_) m; m.withContext = measureFunc; setMeasureFunc(m); @@ -208,10 +208,10 @@ void YGNode::insertChild(YGNodeRef child, uint32_t index) { } void YGNode::setDirty(bool isDirty) { - if (isDirty == flags_.at()) { + if (isDirty == facebook::yoga::detail::getBooleanData(flags, isDirty_)) { return; } - flags_.at() = isDirty; + facebook::yoga::detail::setBooleanData(flags, isDirty_, isDirty); if (isDirty && dirtied_) { dirtied_(this); } @@ -351,7 +351,9 @@ YGValue YGNode::resolveFlexBasisPtr() const { return flexBasis; } if (!style_.flex().isUndefined() && style_.flex().unwrap() > 0.0f) { - return flags_.at() ? YGValueAuto : YGValueZero; + return facebook::yoga::detail::getBooleanData(flags, useWebDefaults_) + ? YGValueAuto + : YGValueZero; } return YGValueAuto; } @@ -390,7 +392,7 @@ void YGNode::cloneChildrenIfNeeded(void* cloneContext) { } void YGNode::markDirtyAndPropogate() { - if (!flags_.at()) { + if (!facebook::yoga::detail::getBooleanData(flags, isDirty_)) { setDirty(true); setLayoutComputedFlexBasis(YGFloatOptional()); if (owner_) { @@ -400,7 +402,7 @@ void YGNode::markDirtyAndPropogate() { } void YGNode::markDirtyAndPropogateDownwards() { - flags_.at() = true; + facebook::yoga::detail::setBooleanData(flags, isDirty_, true); for_each(children_.begin(), children_.end(), [](YGNodeRef childNode) { childNode->markDirtyAndPropogateDownwards(); }); @@ -427,12 +429,13 @@ float YGNode::resolveFlexShrink() const { if (!style_.flexShrink().isUndefined()) { return style_.flexShrink().unwrap(); } - if (!flags_.at() && !style_.flex().isUndefined() && - style_.flex().unwrap() < 0.0f) { + if (!facebook::yoga::detail::getBooleanData(flags, useWebDefaults_) && + !style_.flex().isUndefined() && style_.flex().unwrap() < 0.0f) { return -style_.flex().unwrap(); } - return flags_.at() ? kWebDefaultFlexShrink - : kDefaultFlexShrink; + return facebook::yoga::detail::getBooleanData(flags, useWebDefaults_) + ? kWebDefaultFlexShrink + : kDefaultFlexShrink; } bool YGNode::isNodeFlexible() { @@ -577,7 +580,8 @@ void YGNode::reset() { clearChildren(); - auto webDefaults = flags_.at(); + auto webDefaults = + facebook::yoga::detail::getBooleanData(flags, useWebDefaults_); *this = YGNode{getConfig()}; if (webDefaults) { useWebDefaults(); diff --git a/yoga/YGNode.h b/yoga/YGNode.h index 2967a1e2..95962e68 100644 --- a/yoga/YGNode.h +++ b/yoga/YGNode.h @@ -8,7 +8,7 @@ #pragma once #include #include -#include "Bitfield.h" +#include "BitUtils.h" #include "CompactValue.h" #include "YGConfig.h" #include "YGLayout.h" @@ -35,10 +35,7 @@ private: static constexpr size_t useWebDefaults_ = 7; void* context_ = nullptr; - using Flags = facebook::yoga:: - Bitfield; - Flags flags_ = - {true, false, false, YGNodeTypeDefault, false, false, false, false}; + uint8_t flags = 1; uint8_t reserved_ = 0; union { YGMeasureFunc noContext; @@ -70,7 +67,7 @@ private: void setBaselineFunc(decltype(baseline_)); void useWebDefaults() { - flags_.at() = true; + facebook::yoga::detail::setBooleanData(flags, useWebDefaults_, true); style_.flexDirection() = YGFlexDirectionRow; style_.alignContent() = YGAlignStretch; } @@ -114,9 +111,13 @@ public: void print(void*); - bool getHasNewLayout() const { return flags_.at(); } + bool getHasNewLayout() const { + return facebook::yoga::detail::getBooleanData(flags, hasNewLayout_); + } - YGNodeType getNodeType() const { return flags_.at(); } + YGNodeType getNodeType() const { + return facebook::yoga::detail::getEnumData(flags, nodeType_); + } bool hasMeasureFunc() const noexcept { return measure_.noContext != nullptr; } @@ -142,7 +143,9 @@ public: uint32_t getLineIndex() const { return lineIndex_; } - bool isReferenceBaseline() { return flags_.at(); } + bool isReferenceBaseline() { + return facebook::yoga::detail::getBooleanData(flags, isReferenceBaseline_); + } // returns the YGNodeRef that owns this YGNode. An owner is used to identify // the YogaTree that a YGNode belongs to. This method will return the parent @@ -175,7 +178,9 @@ public: YGConfigRef getConfig() const { return config_; } - bool isDirty() const { return flags_.at(); } + bool isDirty() const { + return facebook::yoga::detail::getBooleanData(flags, isDirty_); + } std::array getResolvedDimensions() const { return resolvedDimensions_; @@ -223,19 +228,22 @@ public: void setPrintFunc(YGPrintFunc printFunc) { print_.noContext = printFunc; - flags_.at() = false; + facebook::yoga::detail::setBooleanData(flags, printUsesContext_, false); } void setPrintFunc(PrintWithContextFn printFunc) { print_.withContext = printFunc; - flags_.at() = true; + facebook::yoga::detail::setBooleanData(flags, printUsesContext_, true); } void setPrintFunc(std::nullptr_t) { setPrintFunc(YGPrintFunc{nullptr}); } void setHasNewLayout(bool hasNewLayout) { - flags_.at() = hasNewLayout; + facebook::yoga::detail::setBooleanData(flags, hasNewLayout_, hasNewLayout); } - void setNodeType(YGNodeType nodeType) { flags_.at() = nodeType; } + void setNodeType(YGNodeType nodeType) { + return facebook::yoga::detail::setEnumData( + flags, nodeType_, nodeType); + } void setMeasureFunc(YGMeasureFunc measureFunc); void setMeasureFunc(MeasureWithContextFn); @@ -244,11 +252,11 @@ public: } void setBaselineFunc(YGBaselineFunc baseLineFunc) { - flags_.at() = false; + facebook::yoga::detail::setBooleanData(flags, baselineUsesContext_, false); baseline_.noContext = baseLineFunc; } void setBaselineFunc(BaselineWithContextFn baseLineFunc) { - flags_.at() = true; + facebook::yoga::detail::setBooleanData(flags, baselineUsesContext_, true); baseline_.withContext = baseLineFunc; } void setBaselineFunc(std::nullptr_t) { @@ -264,7 +272,8 @@ public: void setLineIndex(uint32_t lineIndex) { lineIndex_ = lineIndex; } void setIsReferenceBaseline(bool isReferenceBaseline) { - flags_.at() = isReferenceBaseline; + facebook::yoga::detail::setBooleanData( + flags, isReferenceBaseline_, isReferenceBaseline); } void setOwner(YGNodeRef owner) { owner_ = owner; } From 015df9c5121a4fa1b24d70c3cd18ccecbcc2cb60 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 27 Nov 2019 14:16:42 -0800 Subject: [PATCH 226/347] Remove bitfield.h Summary: ##Changelog: [Internal][Yoga] Remove Bitfield.h Reviewed By: astreet Differential Revision: D18519647 fbshipit-source-id: b46fe585d3ef5f1da7d2726b2d9f759a649be121 --- yoga/Bitfield.h | 145 ------------------------------------------------ 1 file changed, 145 deletions(-) delete mode 100644 yoga/Bitfield.h diff --git a/yoga/Bitfield.h b/yoga/Bitfield.h deleted file mode 100644 index 02645961..00000000 --- a/yoga/Bitfield.h +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -#pragma once - -#include -#include -#include -#include - -namespace facebook { -namespace yoga { - -namespace detail { - -constexpr size_t log2ceil(size_t n) { - return n < 1 ? 0 : (1 + log2ceil(n / 2)); -} - -// The number of bits necessary to represent enums defined with YG_ENUM_SEQ_DECL -template -constexpr size_t bitWidth() { - static_assert( - enums::count() > 0, "Enums must have at least one entries"); - return log2ceil(enums::count() - 1); -} - -// Number of bits needed for a boolean -template <> -constexpr size_t bitWidth() { - return 1; -} - -template -struct BitTraits {}; - -template -struct BitTraits { - // Base cases - static constexpr size_t width(size_t) { return 0; } - static constexpr size_t shift(size_t) { return 0; } -}; - -template -struct BitTraits { - using Rest = BitTraits; - - static constexpr size_t width(size_t idx) { - return idx == 0 ? bitWidth() : Rest::width(idx - 1); - } - - static constexpr size_t shift(size_t idx) { - return idx == 0 ? Rest::width(0) + Rest::shift(0) : Rest::shift(idx - 1); - } - - static constexpr U mask(size_t idx) { - return ((U{1} << width(idx)) - 1) << shift(idx); - } -}; - -template -struct IndexedType { - using Type = typename IndexedType::Type; -}; - -template -struct IndexedType<0, T, Ts...> { - using Type = T; -}; - -} // namespace detail - -template -class Bitfield { - static_assert( - std::is_integral::value, - "Bitfield needs an integral storage type"); - static_assert( - std::is_unsigned::value, - "Bitfield needs an unsigned storage type"); - static_assert(sizeof...(Fields) > 0, "Bitfield needs at least one member"); - - using BitTraits = detail::BitTraits; - -#if !defined(_MSC_VER) || _MSC_VER > 1914 - static_assert( - BitTraits::shift(0) + BitTraits::width(0) <= - std::numeric_limits::digits, - "Specified storage type is too narrow to hold all types"); -#endif - - template - using TypeAt = typename detail::IndexedType::Type; - - template - static constexpr Storage initStorage(Value value, Values... values) { - return ((value << BitTraits::shift(Idx)) & BitTraits::mask(Idx)) | - initStorage(values...); - } - - template - static constexpr Storage initStorage() { - return Storage{0}; - } - - Storage storage_ = 0; - -public: - template - class Ref { - Bitfield& bitfield_; - - public: - Ref(Bitfield& bitfield) : bitfield_(bitfield) {} - Ref& operator=(TypeAt value) { - bitfield_.storage_ = (bitfield_.storage_ & ~BitTraits::mask(Idx)) | - ((value << BitTraits::shift(Idx)) & BitTraits::mask(Idx)); - return *this; - } - operator TypeAt() const { - return const_cast(bitfield_).at(); - } - }; - - constexpr Bitfield() = default; - constexpr Bitfield(Fields... values) : storage_{initStorage<0>(values...)} {} - - template - constexpr TypeAt at() const { - return static_cast>( - (storage_ & BitTraits::mask(Idx)) >> BitTraits::shift(Idx)); - } - - template - Ref at() { - return {*this}; - } -}; - -} // namespace yoga -} // namespace facebook From 67915b5905f0a23a76b283a543f83de5f279bbce Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 2 Dec 2019 05:21:56 -0800 Subject: [PATCH 227/347] Add YogaJniException class Summary: ## Changelog: [Internal][Yoga] Add YogaJniException class to be used later for jni exceptions Reviewed By: astreet Differential Revision: D18745609 fbshipit-source-id: 53503b54dbc59e9fe47f599dee6be9cb68134cb2 --- java/jni/YogaJniException.cpp | 49 +++++++++++++++++++++++++++++++++++ java/jni/YogaJniException.h | 38 +++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 java/jni/YogaJniException.cpp create mode 100644 java/jni/YogaJniException.h diff --git a/java/jni/YogaJniException.cpp b/java/jni/YogaJniException.cpp new file mode 100644 index 00000000..77aa3763 --- /dev/null +++ b/java/jni/YogaJniException.cpp @@ -0,0 +1,49 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#include +#include +#include "YogaJniException.h" +#include "common.h" + +namespace facebook { +namespace yoga { +namespace vanillajni { + +YogaJniException::YogaJniException() { + jclass cl = getCurrentEnv()->FindClass("Ljava/lang/RuntimeException;"); + static const jmethodID methodId = facebook::yoga::vanillajni::getMethodId( + getCurrentEnv(), cl, "", "()V"); + auto throwable = getCurrentEnv()->NewObject(cl, methodId); + throwable_ = make_global_ref(static_cast(throwable)); +} + +YogaJniException::YogaJniException(jthrowable throwable) { + throwable_ = make_global_ref(throwable); +} + +YogaJniException::YogaJniException(YogaJniException&& rhs) + : throwable_(std::move(rhs.throwable_)) {} + +YogaJniException::YogaJniException(const YogaJniException& rhs) { + throwable_ = make_global_ref(rhs.throwable_.get()); +} + +YogaJniException::~YogaJniException() { + try { + throwable_.reset(); + } catch (...) { + std::terminate(); + } +} + +ScopedLocalRef YogaJniException::getThrowable() const noexcept { + return make_local_ref(getCurrentEnv(), throwable_.get()); +} +} // namespace vanillajni +} // namespace yoga +} // namespace facebook diff --git a/java/jni/YogaJniException.h b/java/jni/YogaJniException.h new file mode 100644 index 00000000..d333adf5 --- /dev/null +++ b/java/jni/YogaJniException.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#include +#include +#include "common.h" + +namespace facebook { +namespace yoga { +namespace vanillajni { +/** + * This class wraps a Java exception (jthrowable) into a C++ exception; A global + * reference to Java exception (jthrowable) is made so that the exception object + * does not gets cleared before jni call completion + */ +class YogaJniException : public std::exception { +public: + YogaJniException(); + ~YogaJniException() override; + + explicit YogaJniException(jthrowable throwable); + + YogaJniException(YogaJniException&& rhs); + + YogaJniException(const YogaJniException& other); + + ScopedLocalRef getThrowable() const noexcept; + +private: + ScopedGlobalRef throwable_; +}; +} // namespace vanillajni +} // namespace yoga +} // namespace facebook From 073f49d0d0299a2aca0b890b202262e87629f4f0 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 2 Dec 2019 05:21:56 -0800 Subject: [PATCH 228/347] Use YogaJniException in jni call exception handling Summary: ##Changelog: [Internal][Yoga] Use YogaJniException in jni call exception handling Reviewed By: astreet Differential Revision: D18745615 fbshipit-source-id: 5fcf4c31f04fade94ef98a5349782ed3d43805b0 --- java/jni/YGJNIVanilla.cpp | 8 ++++++-- java/jni/corefunctions.cpp | 3 ++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp index 3ac88ac1..b9b590ac 100644 --- a/java/jni/YGJNIVanilla.cpp +++ b/java/jni/YGJNIVanilla.cpp @@ -15,6 +15,7 @@ #include #include #include +#include "YogaJniException.h" using namespace facebook::yoga::vanillajni; using facebook::yoga::detail::Log; @@ -372,8 +373,11 @@ static void jni_YGNodeCalculateLayoutJNI( YGNodeStyleGetDirection(_jlong2YGNodeRef(nativePointer)), layoutContext); YGTransferLayoutOutputsRecursive(env, obj, root, layoutContext); - } catch (jthrowable throwable) { - env->Throw(throwable); + } catch (const YogaJniException& jniException) { + ScopedLocalRef throwable = jniException.getThrowable(); + if (throwable.get()) { + env->Throw(throwable.get()); + } } } diff --git a/java/jni/corefunctions.cpp b/java/jni/corefunctions.cpp index 04435724..4b03919c 100644 --- a/java/jni/corefunctions.cpp +++ b/java/jni/corefunctions.cpp @@ -7,6 +7,7 @@ #include "corefunctions.h" #include "macros.h" +#include "YogaJniException.h" namespace facebook { namespace yoga { @@ -72,7 +73,7 @@ void assertNoPendingJniException(JNIEnv* env) { logErrorMessageAndDie("Unable to get pending JNI exception."); } env->ExceptionClear(); - throw throwable; + throw YogaJniException(throwable); } } // namespace vanillajni From ac8eb111a955bdc0a37664e2a8d28c8b5701e130 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 2 Dec 2019 05:21:56 -0800 Subject: [PATCH 229/347] Add defensive check for result returned after JNI function calls Summary: Added method which checks if value(methodId, fieldId, class ...) returned by JNI functions (getMethod, getField, getClass ...) is valid or not and throw exception if they are not valid ##Changelog: [Internal][Yoga] Add defensive check for result returned after JNI calls Reviewed By: astreet Differential Revision: D18745718 fbshipit-source-id: 2af26eda15fbe7834e1c9b274deeed4f106274ab --- java/jni/common.cpp | 14 +++++++------- java/jni/corefunctions.cpp | 13 +++++++++++++ java/jni/corefunctions.h | 2 ++ 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/java/jni/common.cpp b/java/jni/common.cpp index f69ef94f..0cc37333 100644 --- a/java/jni/common.cpp +++ b/java/jni/common.cpp @@ -18,11 +18,11 @@ void registerNatives( size_t numMethods) { jclass clazz = env->FindClass(className); - assertNoPendingJniException(env); + assertNoPendingJniExceptionIf(env, !clazz); - env->RegisterNatives(clazz, methods, numMethods); + auto result = env->RegisterNatives(clazz, methods, numMethods); - assertNoPendingJniException(env); + assertNoPendingJniExceptionIf(env, result != JNI_OK); } jmethodID getStaticMethodId( @@ -32,7 +32,7 @@ jmethodID getStaticMethodId( const char* methodDescriptor) { jmethodID methodId = env->GetStaticMethodID(clazz, methodName, methodDescriptor); - assertNoPendingJniException(env); + assertNoPendingJniExceptionIf(env, !methodId); return methodId; } @@ -42,7 +42,7 @@ jmethodID getMethodId( const char* methodName, const char* methodDescriptor) { jmethodID methodId = env->GetMethodID(clazz, methodName, methodDescriptor); - assertNoPendingJniException(env); + assertNoPendingJniExceptionIf(env, !methodId); return methodId; } @@ -52,7 +52,7 @@ jfieldID getFieldId( const char* fieldName, const char* fieldSignature) { jfieldID fieldId = env->GetFieldID(clazz, fieldName, fieldSignature); - assertNoPendingJniException(env); + assertNoPendingJniExceptionIf(env, !fieldId); return fieldId; } @@ -83,7 +83,7 @@ callStaticObjectMethod(JNIEnv* env, jclass clazz, jmethodID methodId, ...) { va_start(args, methodId); jobject result = env->CallStaticObjectMethodV(clazz, methodId, args); va_end(args); - assertNoPendingJniException(env); + assertNoPendingJniExceptionIf(env, !result); return make_local_ref(env, result); } diff --git a/java/jni/corefunctions.cpp b/java/jni/corefunctions.cpp index 4b03919c..8d522289 100644 --- a/java/jni/corefunctions.cpp +++ b/java/jni/corefunctions.cpp @@ -76,6 +76,19 @@ void assertNoPendingJniException(JNIEnv* env) { throw YogaJniException(throwable); } +void assertNoPendingJniExceptionIf(JNIEnv* env, bool condition) { + if (!condition) { + return; + } + + if (env->ExceptionCheck() == JNI_TRUE) { + assertNoPendingJniException(env); + return; + } + + throw YogaJniException(); +} + } // namespace vanillajni } // namespace yoga } // namespace facebook diff --git a/java/jni/corefunctions.h b/java/jni/corefunctions.h index 73d6cce4..18736dbb 100644 --- a/java/jni/corefunctions.h +++ b/java/jni/corefunctions.h @@ -47,6 +47,8 @@ void logErrorMessageAndDie(const char* message); */ void assertNoPendingJniException(JNIEnv* env); +void assertNoPendingJniExceptionIf(JNIEnv* env, bool condition); + } // namespace vanillajni } // namespace yoga } // namespace facebook From 089095f532bc6f6c585f345afa662b196837f596 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Tue, 3 Dec 2019 15:57:51 -0800 Subject: [PATCH 230/347] create global ref properly in YogaJNIException Summary: ##Changelog: [Internal][Yoga] create global ref properly in YogaJNIException Reviewed By: astreet Differential Revision: D18775982 fbshipit-source-id: ee529d6178d40b5f887fa1327fe156fa466f154f --- java/jni/YogaJniException.cpp | 11 +++++++---- java/jni/common.cpp | 10 ++++++++++ java/jni/common.h | 2 ++ 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/java/jni/YogaJniException.cpp b/java/jni/YogaJniException.cpp index 77aa3763..5d6bfbfe 100644 --- a/java/jni/YogaJniException.cpp +++ b/java/jni/YogaJniException.cpp @@ -19,18 +19,19 @@ YogaJniException::YogaJniException() { static const jmethodID methodId = facebook::yoga::vanillajni::getMethodId( getCurrentEnv(), cl, "", "()V"); auto throwable = getCurrentEnv()->NewObject(cl, methodId); - throwable_ = make_global_ref(static_cast(throwable)); + throwable_ = + newGlobalRef(getCurrentEnv(), static_cast(throwable)); } YogaJniException::YogaJniException(jthrowable throwable) { - throwable_ = make_global_ref(throwable); + throwable_ = newGlobalRef(getCurrentEnv(), throwable); } YogaJniException::YogaJniException(YogaJniException&& rhs) : throwable_(std::move(rhs.throwable_)) {} YogaJniException::YogaJniException(const YogaJniException& rhs) { - throwable_ = make_global_ref(rhs.throwable_.get()); + throwable_ = newGlobalRef(getCurrentEnv(), rhs.throwable_.get()); } YogaJniException::~YogaJniException() { @@ -42,7 +43,9 @@ YogaJniException::~YogaJniException() { } ScopedLocalRef YogaJniException::getThrowable() const noexcept { - return make_local_ref(getCurrentEnv(), throwable_.get()); + return make_local_ref( + getCurrentEnv(), + static_cast(getCurrentEnv()->NewLocalRef(throwable_.get()))); } } // namespace vanillajni } // namespace yoga diff --git a/java/jni/common.cpp b/java/jni/common.cpp index 0cc37333..143c695f 100644 --- a/java/jni/common.cpp +++ b/java/jni/common.cpp @@ -96,6 +96,16 @@ ScopedGlobalRef newGlobalRef(JNIEnv* env, jobject obj) { return make_global_ref(result); } + +ScopedGlobalRef newGlobalRef(JNIEnv* env, jthrowable obj) { + jthrowable result = static_cast(env->NewGlobalRef(obj)); + + if (!result) { + logErrorMessageAndDie("Could not obtain global reference from object"); + } + + return make_global_ref(result); +} } // namespace vanillajni } // namespace yoga } // namespace facebook diff --git a/java/jni/common.h b/java/jni/common.h index eebf8e9c..19eca6a4 100644 --- a/java/jni/common.h +++ b/java/jni/common.h @@ -69,6 +69,8 @@ callStaticObjectMethod(JNIEnv* env, jclass clazz, jmethodID methodId, ...); * reference out of it. If any error happens, aborts the process. */ ScopedGlobalRef newGlobalRef(JNIEnv* env, jobject obj); + +ScopedGlobalRef newGlobalRef(JNIEnv* env, jthrowable obj); } // namespace vanillajni } // namespace yoga } // namespace facebook From 7f97e8b232881b71901cdc0d141a01ae5afbdef9 Mon Sep 17 00:00:00 2001 From: Amir Shalem Date: Wed, 4 Dec 2019 01:32:14 -0800 Subject: [PATCH 231/347] Allow redex to optimize more of yoga by removing unneeded @DoNotStrip marks Summary: There are multiple `DoNotStrip` in Yoga java binding, they aren't needed. ##Changelog: [Internal][Yoga] Allow redex to optimize more of yoga by removing unneeded DoNotStrip marks Reviewed By: SidharthGuglani Differential Revision: D17519844 fbshipit-source-id: 8b26800d720f34cae87754d85460abf88acbe713 --- java/com/facebook/yoga/YogaAlign.java | 3 --- java/com/facebook/yoga/YogaBaselineFunction.java | 4 ---- java/com/facebook/yoga/YogaDimension.java | 3 --- java/com/facebook/yoga/YogaDirection.java | 3 --- java/com/facebook/yoga/YogaDisplay.java | 3 --- java/com/facebook/yoga/YogaEdge.java | 3 --- java/com/facebook/yoga/YogaExperimentalFeature.java | 3 --- java/com/facebook/yoga/YogaFlexDirection.java | 3 --- java/com/facebook/yoga/YogaJustify.java | 3 --- java/com/facebook/yoga/YogaLogLevel.java | 1 + java/com/facebook/yoga/YogaMeasureFunction.java | 4 ---- java/com/facebook/yoga/YogaMeasureMode.java | 3 --- java/com/facebook/yoga/YogaNodeType.java | 3 --- java/com/facebook/yoga/YogaOverflow.java | 3 --- java/com/facebook/yoga/YogaPositionType.java | 3 --- java/com/facebook/yoga/YogaPrintOptions.java | 3 --- java/com/facebook/yoga/YogaStyleInputs.java | 3 --- java/com/facebook/yoga/YogaUnit.java | 3 --- java/com/facebook/yoga/YogaWrap.java | 3 --- 19 files changed, 1 insertion(+), 56 deletions(-) diff --git a/java/com/facebook/yoga/YogaAlign.java b/java/com/facebook/yoga/YogaAlign.java index afeaa500..82c6cbfb 100644 --- a/java/com/facebook/yoga/YogaAlign.java +++ b/java/com/facebook/yoga/YogaAlign.java @@ -7,9 +7,6 @@ package com.facebook.yoga; -import com.facebook.proguard.annotations.DoNotStrip; - -@DoNotStrip public enum YogaAlign { AUTO(0), FLEX_START(1), diff --git a/java/com/facebook/yoga/YogaBaselineFunction.java b/java/com/facebook/yoga/YogaBaselineFunction.java index a859aff4..dbd405c6 100644 --- a/java/com/facebook/yoga/YogaBaselineFunction.java +++ b/java/com/facebook/yoga/YogaBaselineFunction.java @@ -7,14 +7,10 @@ package com.facebook.yoga; -import com.facebook.proguard.annotations.DoNotStrip; - -@DoNotStrip public interface YogaBaselineFunction { /** * Return the baseline of the node in points. When no baseline function is set the baseline * default to the computed height of the node. */ - @DoNotStrip float baseline(YogaNode node, float width, float height); } diff --git a/java/com/facebook/yoga/YogaDimension.java b/java/com/facebook/yoga/YogaDimension.java index 77ff6caa..cebcdc47 100644 --- a/java/com/facebook/yoga/YogaDimension.java +++ b/java/com/facebook/yoga/YogaDimension.java @@ -7,9 +7,6 @@ package com.facebook.yoga; -import com.facebook.proguard.annotations.DoNotStrip; - -@DoNotStrip public enum YogaDimension { WIDTH(0), HEIGHT(1); diff --git a/java/com/facebook/yoga/YogaDirection.java b/java/com/facebook/yoga/YogaDirection.java index e18ee9fa..4e75d303 100644 --- a/java/com/facebook/yoga/YogaDirection.java +++ b/java/com/facebook/yoga/YogaDirection.java @@ -7,9 +7,6 @@ package com.facebook.yoga; -import com.facebook.proguard.annotations.DoNotStrip; - -@DoNotStrip public enum YogaDirection { INHERIT(0), LTR(1), diff --git a/java/com/facebook/yoga/YogaDisplay.java b/java/com/facebook/yoga/YogaDisplay.java index e69d74b3..76cbfd77 100644 --- a/java/com/facebook/yoga/YogaDisplay.java +++ b/java/com/facebook/yoga/YogaDisplay.java @@ -7,9 +7,6 @@ package com.facebook.yoga; -import com.facebook.proguard.annotations.DoNotStrip; - -@DoNotStrip public enum YogaDisplay { FLEX(0), NONE(1); diff --git a/java/com/facebook/yoga/YogaEdge.java b/java/com/facebook/yoga/YogaEdge.java index e60ffd88..cba17934 100644 --- a/java/com/facebook/yoga/YogaEdge.java +++ b/java/com/facebook/yoga/YogaEdge.java @@ -7,9 +7,6 @@ package com.facebook.yoga; -import com.facebook.proguard.annotations.DoNotStrip; - -@DoNotStrip public enum YogaEdge { LEFT(0), TOP(1), diff --git a/java/com/facebook/yoga/YogaExperimentalFeature.java b/java/com/facebook/yoga/YogaExperimentalFeature.java index 8eb1bd2a..76525eab 100644 --- a/java/com/facebook/yoga/YogaExperimentalFeature.java +++ b/java/com/facebook/yoga/YogaExperimentalFeature.java @@ -7,9 +7,6 @@ package com.facebook.yoga; -import com.facebook.proguard.annotations.DoNotStrip; - -@DoNotStrip public enum YogaExperimentalFeature { WEB_FLEX_BASIS(0); diff --git a/java/com/facebook/yoga/YogaFlexDirection.java b/java/com/facebook/yoga/YogaFlexDirection.java index c844074e..83060e13 100644 --- a/java/com/facebook/yoga/YogaFlexDirection.java +++ b/java/com/facebook/yoga/YogaFlexDirection.java @@ -7,9 +7,6 @@ package com.facebook.yoga; -import com.facebook.proguard.annotations.DoNotStrip; - -@DoNotStrip public enum YogaFlexDirection { COLUMN(0), COLUMN_REVERSE(1), diff --git a/java/com/facebook/yoga/YogaJustify.java b/java/com/facebook/yoga/YogaJustify.java index 3508e17d..3d39015e 100644 --- a/java/com/facebook/yoga/YogaJustify.java +++ b/java/com/facebook/yoga/YogaJustify.java @@ -7,9 +7,6 @@ package com.facebook.yoga; -import com.facebook.proguard.annotations.DoNotStrip; - -@DoNotStrip public enum YogaJustify { FLEX_START(0), CENTER(1), diff --git a/java/com/facebook/yoga/YogaLogLevel.java b/java/com/facebook/yoga/YogaLogLevel.java index 57cb4aa0..f6a84023 100644 --- a/java/com/facebook/yoga/YogaLogLevel.java +++ b/java/com/facebook/yoga/YogaLogLevel.java @@ -28,6 +28,7 @@ public enum YogaLogLevel { return mIntValue; } + @DoNotStrip public static YogaLogLevel fromInt(int value) { switch (value) { case 0: return ERROR; diff --git a/java/com/facebook/yoga/YogaMeasureFunction.java b/java/com/facebook/yoga/YogaMeasureFunction.java index 335c4c79..8b8533ba 100644 --- a/java/com/facebook/yoga/YogaMeasureFunction.java +++ b/java/com/facebook/yoga/YogaMeasureFunction.java @@ -7,14 +7,10 @@ package com.facebook.yoga; -import com.facebook.proguard.annotations.DoNotStrip; - -@DoNotStrip public interface YogaMeasureFunction { /** * Return a value created by YogaMeasureOutput.make(width, height); */ - @DoNotStrip long measure( YogaNode node, float width, diff --git a/java/com/facebook/yoga/YogaMeasureMode.java b/java/com/facebook/yoga/YogaMeasureMode.java index dbfd22c7..848d4aa7 100644 --- a/java/com/facebook/yoga/YogaMeasureMode.java +++ b/java/com/facebook/yoga/YogaMeasureMode.java @@ -7,9 +7,6 @@ package com.facebook.yoga; -import com.facebook.proguard.annotations.DoNotStrip; - -@DoNotStrip public enum YogaMeasureMode { UNDEFINED(0), EXACTLY(1), diff --git a/java/com/facebook/yoga/YogaNodeType.java b/java/com/facebook/yoga/YogaNodeType.java index 8d45d6ae..4386bf38 100644 --- a/java/com/facebook/yoga/YogaNodeType.java +++ b/java/com/facebook/yoga/YogaNodeType.java @@ -7,9 +7,6 @@ package com.facebook.yoga; -import com.facebook.proguard.annotations.DoNotStrip; - -@DoNotStrip public enum YogaNodeType { DEFAULT(0), TEXT(1); diff --git a/java/com/facebook/yoga/YogaOverflow.java b/java/com/facebook/yoga/YogaOverflow.java index 0e75106e..90c97881 100644 --- a/java/com/facebook/yoga/YogaOverflow.java +++ b/java/com/facebook/yoga/YogaOverflow.java @@ -7,9 +7,6 @@ package com.facebook.yoga; -import com.facebook.proguard.annotations.DoNotStrip; - -@DoNotStrip public enum YogaOverflow { VISIBLE(0), HIDDEN(1), diff --git a/java/com/facebook/yoga/YogaPositionType.java b/java/com/facebook/yoga/YogaPositionType.java index 23c2786f..00354f5c 100644 --- a/java/com/facebook/yoga/YogaPositionType.java +++ b/java/com/facebook/yoga/YogaPositionType.java @@ -7,9 +7,6 @@ package com.facebook.yoga; -import com.facebook.proguard.annotations.DoNotStrip; - -@DoNotStrip public enum YogaPositionType { RELATIVE(0), ABSOLUTE(1); diff --git a/java/com/facebook/yoga/YogaPrintOptions.java b/java/com/facebook/yoga/YogaPrintOptions.java index bc0c2de0..9a7f02ec 100644 --- a/java/com/facebook/yoga/YogaPrintOptions.java +++ b/java/com/facebook/yoga/YogaPrintOptions.java @@ -7,9 +7,6 @@ package com.facebook.yoga; -import com.facebook.proguard.annotations.DoNotStrip; - -@DoNotStrip public enum YogaPrintOptions { LAYOUT(1), STYLE(2), diff --git a/java/com/facebook/yoga/YogaStyleInputs.java b/java/com/facebook/yoga/YogaStyleInputs.java index dc26bad8..21ca2803 100644 --- a/java/com/facebook/yoga/YogaStyleInputs.java +++ b/java/com/facebook/yoga/YogaStyleInputs.java @@ -7,9 +7,6 @@ package com.facebook.yoga; -import com.facebook.proguard.annotations.DoNotStrip; - -@DoNotStrip public class YogaStyleInputs { public static final short LAYOUT_DIRECTION = 0; public static final short FLEX_DIRECTION = 1; diff --git a/java/com/facebook/yoga/YogaUnit.java b/java/com/facebook/yoga/YogaUnit.java index d43c8ff1..5a7e5e66 100644 --- a/java/com/facebook/yoga/YogaUnit.java +++ b/java/com/facebook/yoga/YogaUnit.java @@ -7,9 +7,6 @@ package com.facebook.yoga; -import com.facebook.proguard.annotations.DoNotStrip; - -@DoNotStrip public enum YogaUnit { UNDEFINED(0), POINT(1), diff --git a/java/com/facebook/yoga/YogaWrap.java b/java/com/facebook/yoga/YogaWrap.java index 23af8a40..7ad00568 100644 --- a/java/com/facebook/yoga/YogaWrap.java +++ b/java/com/facebook/yoga/YogaWrap.java @@ -7,9 +7,6 @@ package com.facebook.yoga; -import com.facebook.proguard.annotations.DoNotStrip; - -@DoNotStrip public enum YogaWrap { NO_WRAP(0), WRAP(1), From e983c4a5ef32edfcda36b8197701196a56e610d5 Mon Sep 17 00:00:00 2001 From: Pasquale Anatriello Date: Thu, 30 Jan 2020 03:41:45 -0800 Subject: [PATCH 232/347] Swap child Yoga Summary: Changelog: [Internal] Expose the replaceChild Yoga call to Java Reviewed By: SidharthGuglani Differential Revision: D19497193 fbshipit-source-id: 153243cc1d8c23dcaf2c772ca794bd59a230f652 --- java/com/facebook/yoga/YogaNative.java | 1 + java/com/facebook/yoga/YogaNode.java | 2 + java/com/facebook/yoga/YogaNodeJNIBase.java | 87 +++++++++++++++------ java/jni/YGJNIVanilla.cpp | 11 +++ yoga/Yoga.cpp | 8 ++ yoga/Yoga.h | 5 ++ 6 files changed, 92 insertions(+), 22 deletions(-) diff --git a/java/com/facebook/yoga/YogaNative.java b/java/com/facebook/yoga/YogaNative.java index 334eaab5..3674b42f 100644 --- a/java/com/facebook/yoga/YogaNative.java +++ b/java/com/facebook/yoga/YogaNative.java @@ -34,6 +34,7 @@ public class YogaNative { static native void jni_YGNodeFreeJNI(long nativePointer); static native void jni_YGNodeResetJNI(long nativePointer); static native void jni_YGNodeInsertChildJNI(long nativePointer, long childPointer, int index); + static native void jni_YGNodeSwapChildJNI(long nativePointer, long childPointer, int index); static native void jni_YGNodeSetIsReferenceBaselineJNI(long nativePointer, boolean isReferenceBaseline); static native boolean jni_YGNodeIsReferenceBaselineJNI(long nativePointer); static native void jni_YGNodeClearChildrenJNI(long nativePointer); diff --git a/java/com/facebook/yoga/YogaNode.java b/java/com/facebook/yoga/YogaNode.java index baa0c517..9fc8bac9 100644 --- a/java/com/facebook/yoga/YogaNode.java +++ b/java/com/facebook/yoga/YogaNode.java @@ -214,4 +214,6 @@ public abstract class YogaNode { public abstract void print(); public abstract YogaNode cloneWithoutChildren(); + + public abstract YogaNode cloneWithChildren(); } diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index 6372ddd7..e20a5389 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -39,11 +39,9 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { protected long mNativePointer; @Nullable private Object mData; - @DoNotStrip - private @Nullable float[] arr = null; + @DoNotStrip private @Nullable float[] arr = null; - @DoNotStrip - private int mLayoutDirection = 0; + @DoNotStrip private int mLayoutDirection = 0; private boolean mHasNewLayout = true; @@ -59,7 +57,7 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { } YogaNodeJNIBase(YogaConfig config) { - this(YogaNative.jni_YGNodeNewWithConfigJNI(((YogaConfigJNIBase)config).mNativePointer)); + this(YogaNative.jni_YGNodeNewWithConfigJNI(((YogaConfigJNIBase) config).mNativePointer)); } public void reset() { @@ -106,6 +104,32 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { return YogaNative.jni_YGNodeIsReferenceBaselineJNI(mNativePointer); } + public void swapChildAt(YogaNode newChild, int position) { + YogaNodeJNIBase child = (YogaNodeJNIBase) newChild; + mChildren.remove(position); + mChildren.add(position, child); + child.mOwner = this; + YogaNative.jni_YGNodeSwapChildJNI(mNativePointer, child.mNativePointer, position); + } + + @Override + public YogaNodeJNIBase cloneWithChildren() { + try { + YogaNodeJNIBase clonedYogaNode = (YogaNodeJNIBase) super.clone(); + long clonedNativePointer = YogaNative.jni_YGNodeCloneJNI(mNativePointer); + clonedYogaNode.mOwner = null; + clonedYogaNode.mNativePointer = clonedNativePointer; + for (int i = 0; i < clonedYogaNode.getChildCount(); i++) { + clonedYogaNode.swapChildAt(clonedYogaNode.getChildAt(i).cloneWithChildren(), i); + } + + return clonedYogaNode; + } catch (CloneNotSupportedException ex) { + // This class implements Cloneable, this should not happen + throw new RuntimeException(ex); + } + } + @Override public YogaNodeJNIBase cloneWithoutChildren() { try { @@ -138,10 +162,9 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { } /** - * The owner is used to identify the YogaTree that a {@link YogaNode} belongs to. - * This method will return the parent of the {@link YogaNode} when the - * {@link YogaNode} only belongs to one YogaTree or null when the - * {@link YogaNode} is shared between two or more YogaTrees. + * The owner is used to identify the YogaTree that a {@link YogaNode} belongs to. This method will + * return the parent of the {@link YogaNode} when the {@link YogaNode} only belongs to one + * YogaTree or null when the {@link YogaNode} is shared between two or more YogaTrees. * * @return the {@link YogaNode} that owns this {@link YogaNode}. */ @@ -168,7 +191,7 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { ArrayList n = new ArrayList<>(); n.add(this); for (int i = 0; i < n.size(); ++i) { - List children = n.get(i).mChildren; + List children = n.get(i).mChildren; if (children != null) { n.addAll(children); } @@ -509,8 +532,8 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { } /** - * Use the set logger (defaults to adb log) to print out the styles, children, and computed - * layout of the tree rooted at this node. + * Use the set logger (defaults to adb log) to print out the styles, children, and computed layout + * of the tree rooted at this node. */ public void print() { YogaNative.jni_YGNodePrintJNI(mNativePointer); @@ -559,7 +582,9 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { } public boolean getDoesLegacyStretchFlagAffectsLayout() { - return arr != null && (((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & DOES_LEGACY_STRETCH_BEHAVIOUR) == DOES_LEGACY_STRETCH_BEHAVIOUR); + return arr != null + && (((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & DOES_LEGACY_STRETCH_BEHAVIOUR) + == DOES_LEGACY_STRETCH_BEHAVIOUR); } @Override @@ -575,9 +600,13 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { case BOTTOM: return arr[LAYOUT_MARGIN_START_INDEX + 3]; case START: - return getLayoutDirection() == YogaDirection.RTL ? arr[LAYOUT_MARGIN_START_INDEX + 2] : arr[LAYOUT_MARGIN_START_INDEX]; + return getLayoutDirection() == YogaDirection.RTL + ? arr[LAYOUT_MARGIN_START_INDEX + 2] + : arr[LAYOUT_MARGIN_START_INDEX]; case END: - return getLayoutDirection() == YogaDirection.RTL ? arr[LAYOUT_MARGIN_START_INDEX] : arr[LAYOUT_MARGIN_START_INDEX + 2]; + return getLayoutDirection() == YogaDirection.RTL + ? arr[LAYOUT_MARGIN_START_INDEX] + : arr[LAYOUT_MARGIN_START_INDEX + 2]; default: throw new IllegalArgumentException("Cannot get layout margins of multi-edge shorthands"); } @@ -589,7 +618,9 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { @Override public float getLayoutPadding(YogaEdge edge) { if (arr != null && ((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & PADDING) == PADDING) { - int paddingStartIndex = LAYOUT_PADDING_START_INDEX - ((((int)arr[LAYOUT_EDGE_SET_FLAG_INDEX] & MARGIN) == MARGIN) ? 0 : 4); + int paddingStartIndex = + LAYOUT_PADDING_START_INDEX + - ((((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & MARGIN) == MARGIN) ? 0 : 4); switch (edge) { case LEFT: return arr[paddingStartIndex]; @@ -600,9 +631,13 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { case BOTTOM: return arr[paddingStartIndex + 3]; case START: - return getLayoutDirection() == YogaDirection.RTL ? arr[paddingStartIndex + 2] : arr[paddingStartIndex]; + return getLayoutDirection() == YogaDirection.RTL + ? arr[paddingStartIndex + 2] + : arr[paddingStartIndex]; case END: - return getLayoutDirection() == YogaDirection.RTL ? arr[paddingStartIndex] : arr[paddingStartIndex + 2]; + return getLayoutDirection() == YogaDirection.RTL + ? arr[paddingStartIndex] + : arr[paddingStartIndex + 2]; default: throw new IllegalArgumentException("Cannot get layout paddings of multi-edge shorthands"); } @@ -614,7 +649,10 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { @Override public float getLayoutBorder(YogaEdge edge) { if (arr != null && ((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & BORDER) == BORDER) { - int borderStartIndex = LAYOUT_BORDER_START_INDEX - ((((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & MARGIN) == MARGIN) ? 0 : 4) - ((((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & PADDING) == PADDING) ? 0 : 4); + int borderStartIndex = + LAYOUT_BORDER_START_INDEX + - ((((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & MARGIN) == MARGIN) ? 0 : 4) + - ((((int) arr[LAYOUT_EDGE_SET_FLAG_INDEX] & PADDING) == PADDING) ? 0 : 4); switch (edge) { case LEFT: return arr[borderStartIndex]; @@ -625,9 +663,13 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { case BOTTOM: return arr[borderStartIndex + 3]; case START: - return getLayoutDirection() == YogaDirection.RTL ? arr[borderStartIndex + 2] : arr[borderStartIndex]; + return getLayoutDirection() == YogaDirection.RTL + ? arr[borderStartIndex + 2] + : arr[borderStartIndex]; case END: - return getLayoutDirection() == YogaDirection.RTL ? arr[borderStartIndex] : arr[borderStartIndex + 2]; + return getLayoutDirection() == YogaDirection.RTL + ? arr[borderStartIndex] + : arr[borderStartIndex + 2]; default: throw new IllegalArgumentException("Cannot get layout border of multi-edge shorthands"); } @@ -638,7 +680,8 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { @Override public YogaDirection getLayoutDirection() { - return YogaDirection.fromInt(arr != null ? (int) arr[LAYOUT_DIRECTION_INDEX] : mLayoutDirection); + return YogaDirection.fromInt( + arr != null ? (int) arr[LAYOUT_DIRECTION_INDEX] : mLayoutDirection); } @Override diff --git a/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp index b9b590ac..6e66c06e 100644 --- a/java/jni/YGJNIVanilla.cpp +++ b/java/jni/YGJNIVanilla.cpp @@ -225,6 +225,16 @@ static void jni_YGNodeInsertChildJNI( _jlong2YGNodeRef(nativePointer), _jlong2YGNodeRef(childPointer), index); } +static void jni_YGNodeSwapChildJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer, + jlong childPointer, + jint index) { + YGNodeSwapChild( + _jlong2YGNodeRef(nativePointer), _jlong2YGNodeRef(childPointer), index); +} + static void jni_YGNodeSetIsReferenceBaselineJNI( JNIEnv* env, jobject obj, @@ -754,6 +764,7 @@ static JNINativeMethod methods[] = { {"jni_YGNodeFreeJNI", "(J)V", (void*) jni_YGNodeFreeJNI}, {"jni_YGNodeResetJNI", "(J)V", (void*) jni_YGNodeResetJNI}, {"jni_YGNodeInsertChildJNI", "(JJI)V", (void*) jni_YGNodeInsertChildJNI}, + {"jni_YGNodeSwapChildJNI", "(JJI)V", (void*) jni_YGNodeSwapChildJNI}, {"jni_YGNodeSetIsReferenceBaselineJNI", "(JZ)V", (void*) jni_YGNodeSetIsReferenceBaselineJNI}, diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 41de5119..e30a36b7 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -386,6 +386,14 @@ YOGA_EXPORT void YGNodeInsertChild( owner->markDirtyAndPropogate(); } +YOGA_EXPORT void YGNodeSwapChild( + const YGNodeRef owner, + const YGNodeRef child, + const uint32_t index) { + owner->replaceChild(child, index); + child->setOwner(owner); +} + YOGA_EXPORT void YGNodeRemoveChild( const YGNodeRef owner, const YGNodeRef excludedChild) { diff --git a/yoga/Yoga.h b/yoga/Yoga.h index 68ed0a62..2fe60a41 100644 --- a/yoga/Yoga.h +++ b/yoga/Yoga.h @@ -69,6 +69,11 @@ WIN_EXPORT void YGNodeInsertChild( YGNodeRef child, uint32_t index); +WIN_EXPORT void YGNodeSwapChild( + YGNodeRef node, + YGNodeRef child, + uint32_t index); + WIN_EXPORT void YGNodeRemoveChild(YGNodeRef node, YGNodeRef child); WIN_EXPORT void YGNodeRemoveAllChildren(YGNodeRef node); WIN_EXPORT YGNodeRef YGNodeGetChild(YGNodeRef node, uint32_t index); From a1278cee05f5c533afe81e7c28e1bed916887d30 Mon Sep 17 00:00:00 2001 From: Christoph Purrer Date: Wed, 5 Feb 2020 13:35:21 -0800 Subject: [PATCH 233/347] Make YGValue.h compile with Clang on Windows Summary: - We use a fork of Microsoft's react-native-windows which uses a fork of Facebook's react-native - YGValue.h does not compile with Clang on Windows - This change should fix that - I want to put the change here so that it bubbles back to our fork > https://our.intern.facebook.com/intern/diff/D19656093/ #Changelog: [General][Fixed] Make YGValue.h compile with Clang on Windows Reviewed By: SidharthGuglani Differential Revision: D19717489 fbshipit-source-id: ad867ecaf910bb64a777a06c656a1867bb15484b --- yoga/YGValue.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/yoga/YGValue.h b/yoga/YGValue.h index aaa10c3f..a2000978 100644 --- a/yoga/YGValue.h +++ b/yoga/YGValue.h @@ -11,6 +11,13 @@ #include "YGEnums.h" #include "YGMacros.h" +#if defined(_MSC_VER) && defined(__clang__) +#define COMPILING_WITH_CLANG_ON_WINDOWS +#endif +#if defined(COMPILING_WITH_CLANG_ON_WINDOWS) +#include +constexpr float YGUndefined = std::numeric_limits::quiet_NaN(); +#else YG_EXTERN_C_BEGIN // Not defined in MSVC++ @@ -20,6 +27,7 @@ static const uint32_t __nan = 0x7fc00000; #endif #define YGUndefined NAN +#endif typedef struct YGValue { float value; @@ -30,7 +38,10 @@ YOGA_EXPORT extern const YGValue YGValueAuto; YOGA_EXPORT extern const YGValue YGValueUndefined; YOGA_EXPORT extern const YGValue YGValueZero; +#if !defined(COMPILING_WITH_CLANG_ON_WINDOWS) YG_EXTERN_C_END +#endif +#undef COMPILING_WITH_CLANG_ON_WINDOWS #ifdef __cplusplus From bfc3b2f86f86f0b4cd1616a3450e249a8e6c9313 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Tue, 18 Feb 2020 08:09:53 -0800 Subject: [PATCH 234/347] fix lint errors Summary: Changelog: [Internal][Yoga] Fixed lint errors ```arc lint --apply-patches --take CLANGFORMAT --paths-cmd 'hg files xplat/yoga' ``` Added .clang-tidy file Reviewed By: zertosh Differential Revision: D19948702 fbshipit-source-id: f77a16d6f2c532267597a84a9caded0aae68c3aa --- YogaKit/Source/UIView+Yoga.h | 15 +- YogaKit/Source/UIView+Yoga.m | 18 +- YogaKit/Source/YGLayout+Private.h | 6 +- YogaKit/Source/YGLayout.h | 154 +++--- YogaKit/Source/YGLayout.m | 448 +++++++++--------- YogaKit/Tests/YogaKitTests.m | 351 +++++++------- .../YogaKitSample/ViewController.m | 64 ++- csharp/Yoga/YGInterop.cpp | 11 +- csharp/Yoga/YGInterop.h | 9 +- csharp/Yoga/dllmain.cpp | 3 +- csharp/Yoga/targetver.h | 5 +- java/jni/ScopedGlobalRef.h | 8 +- java/jni/ScopedLocalRef.h | 8 +- java/jni/common.cpp | 7 +- java/jni/common.h | 7 +- javascript/sources/Size.hh | 4 +- javascript/sources/Value.hh | 4 +- 17 files changed, 568 insertions(+), 554 deletions(-) diff --git a/YogaKit/Source/UIView+Yoga.h b/YogaKit/Source/UIView+Yoga.h index cac23385..4c85dcc4 100644 --- a/YogaKit/Source/UIView+Yoga.h +++ b/YogaKit/Source/UIView+Yoga.h @@ -5,28 +5,29 @@ * LICENSE file in the root directory of this source tree. */ -#import "YGLayout.h" #import +#import "YGLayout.h" NS_ASSUME_NONNULL_BEGIN -typedef void (^YGLayoutConfigurationBlock)(YGLayout *layout); +typedef void (^YGLayoutConfigurationBlock)(YGLayout* layout); @interface UIView (Yoga) /** The YGLayout that is attached to this view. It is lazily created. */ -@property (nonatomic, readonly, strong) YGLayout *yoga; +@property(nonatomic, readonly, strong) YGLayout* yoga; /** Indicates whether or not Yoga is enabled */ -@property (nonatomic, readonly, assign) BOOL isYogaEnabled; +@property(nonatomic, readonly, assign) BOOL isYogaEnabled; /** - In ObjC land, every time you access `view.yoga.*` you are adding another `objc_msgSend` - to your code. If you plan on making multiple changes to YGLayout, it's more performant - to use this method, which uses a single objc_msgSend call. + In ObjC land, every time you access `view.yoga.*` you are adding another + `objc_msgSend` to your code. If you plan on making multiple changes to + YGLayout, it's more performant to use this method, which uses a single + objc_msgSend call. */ - (void)configureLayoutWithBlock:(YGLayoutConfigurationBlock)block NS_SWIFT_NAME(configureLayout(block:)); diff --git a/YogaKit/Source/UIView+Yoga.m b/YogaKit/Source/UIView+Yoga.m index ba133919..e472c9c7 100644 --- a/YogaKit/Source/UIView+Yoga.m +++ b/YogaKit/Source/UIView+Yoga.m @@ -5,32 +5,30 @@ * LICENSE file in the root directory of this source tree. */ +#import #import "UIView+Yoga.h" #import "YGLayout+Private.h" -#import -static const void *kYGYogaAssociatedKey = &kYGYogaAssociatedKey; +static const void* kYGYogaAssociatedKey = &kYGYogaAssociatedKey; @implementation UIView (YogaKit) -- (YGLayout *)yoga -{ - YGLayout *yoga = objc_getAssociatedObject(self, kYGYogaAssociatedKey); +- (YGLayout*)yoga { + YGLayout* yoga = objc_getAssociatedObject(self, kYGYogaAssociatedKey); if (!yoga) { yoga = [[YGLayout alloc] initWithView:self]; - objc_setAssociatedObject(self, kYGYogaAssociatedKey, yoga, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + objc_setAssociatedObject( + self, kYGYogaAssociatedKey, yoga, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } return yoga; } -- (BOOL)isYogaEnabled -{ +- (BOOL)isYogaEnabled { return objc_getAssociatedObject(self, kYGYogaAssociatedKey) != nil; } -- (void)configureLayoutWithBlock:(YGLayoutConfigurationBlock)block -{ +- (void)configureLayoutWithBlock:(YGLayoutConfigurationBlock)block { if (block != nil) { block(self.yoga); } diff --git a/YogaKit/Source/YGLayout+Private.h b/YogaKit/Source/YGLayout+Private.h index 00ab40f5..0588d950 100644 --- a/YogaKit/Source/YGLayout+Private.h +++ b/YogaKit/Source/YGLayout+Private.h @@ -5,13 +5,13 @@ * LICENSE file in the root directory of this source tree. */ -#import "YGLayout.h" #import +#import "YGLayout.h" @interface YGLayout () -@property (nonatomic, assign, readonly) YGNodeRef node; +@property(nonatomic, assign, readonly) YGNodeRef node; -- (instancetype)initWithView:(UIView *)view; +- (instancetype)initWithView:(UIView*)view; @end diff --git a/YogaKit/Source/YGLayout.h b/YogaKit/Source/YGLayout.h index 19f3982b..5a60f95e 100644 --- a/YogaKit/Source/YGLayout.h +++ b/YogaKit/Source/YGLayout.h @@ -7,15 +7,15 @@ #import #import -#import #import +#import YG_EXTERN_C_BEGIN -extern YGValue YGPointValue(CGFloat value) - NS_SWIFT_UNAVAILABLE("Use the swift Int and FloatingPoint extensions instead"); -extern YGValue YGPercentValue(CGFloat value) - NS_SWIFT_UNAVAILABLE("Use the swift Int and FloatingPoint extensions instead"); +extern YGValue YGPointValue(CGFloat value) NS_SWIFT_UNAVAILABLE( + "Use the swift Int and FloatingPoint extensions instead"); +extern YGValue YGPercentValue(CGFloat value) NS_SWIFT_UNAVAILABLE( + "Use the swift Int and FloatingPoint extensions instead"); YG_EXTERN_C_END @@ -44,103 +44,107 @@ typedef NS_OPTIONS(NSInteger, YGDimensionFlexibility) { The property that decides if we should include this view when calculating layout. Defaults to YES. */ -@property (nonatomic, readwrite, assign, setter=setIncludedInLayout:) BOOL isIncludedInLayout; +@property(nonatomic, readwrite, assign, setter=setIncludedInLayout:) + BOOL isIncludedInLayout; /** - The property that decides during layout/sizing whether or not styling properties should be applied. - Defaults to NO. + The property that decides during layout/sizing whether or not styling + properties should be applied. Defaults to NO. */ -@property (nonatomic, readwrite, assign, setter=setEnabled:) BOOL isEnabled; +@property(nonatomic, readwrite, assign, setter=setEnabled:) BOOL isEnabled; -@property (nonatomic, readwrite, assign) YGDirection direction; -@property (nonatomic, readwrite, assign) YGFlexDirection flexDirection; -@property (nonatomic, readwrite, assign) YGJustify justifyContent; -@property (nonatomic, readwrite, assign) YGAlign alignContent; -@property (nonatomic, readwrite, assign) YGAlign alignItems; -@property (nonatomic, readwrite, assign) YGAlign alignSelf; -@property (nonatomic, readwrite, assign) YGPositionType position; -@property (nonatomic, readwrite, assign) YGWrap flexWrap; -@property (nonatomic, readwrite, assign) YGOverflow overflow; -@property (nonatomic, readwrite, assign) YGDisplay display; +@property(nonatomic, readwrite, assign) YGDirection direction; +@property(nonatomic, readwrite, assign) YGFlexDirection flexDirection; +@property(nonatomic, readwrite, assign) YGJustify justifyContent; +@property(nonatomic, readwrite, assign) YGAlign alignContent; +@property(nonatomic, readwrite, assign) YGAlign alignItems; +@property(nonatomic, readwrite, assign) YGAlign alignSelf; +@property(nonatomic, readwrite, assign) YGPositionType position; +@property(nonatomic, readwrite, assign) YGWrap flexWrap; +@property(nonatomic, readwrite, assign) YGOverflow overflow; +@property(nonatomic, readwrite, assign) YGDisplay display; -@property (nonatomic, readwrite, assign) CGFloat flex; -@property (nonatomic, readwrite, assign) CGFloat flexGrow; -@property (nonatomic, readwrite, assign) CGFloat flexShrink; -@property (nonatomic, readwrite, assign) YGValue flexBasis; +@property(nonatomic, readwrite, assign) CGFloat flex; +@property(nonatomic, readwrite, assign) CGFloat flexGrow; +@property(nonatomic, readwrite, assign) CGFloat flexShrink; +@property(nonatomic, readwrite, assign) YGValue flexBasis; -@property (nonatomic, readwrite, assign) YGValue left; -@property (nonatomic, readwrite, assign) YGValue top; -@property (nonatomic, readwrite, assign) YGValue right; -@property (nonatomic, readwrite, assign) YGValue bottom; -@property (nonatomic, readwrite, assign) YGValue start; -@property (nonatomic, readwrite, assign) YGValue end; +@property(nonatomic, readwrite, assign) YGValue left; +@property(nonatomic, readwrite, assign) YGValue top; +@property(nonatomic, readwrite, assign) YGValue right; +@property(nonatomic, readwrite, assign) YGValue bottom; +@property(nonatomic, readwrite, assign) YGValue start; +@property(nonatomic, readwrite, assign) YGValue end; -@property (nonatomic, readwrite, assign) YGValue marginLeft; -@property (nonatomic, readwrite, assign) YGValue marginTop; -@property (nonatomic, readwrite, assign) YGValue marginRight; -@property (nonatomic, readwrite, assign) YGValue marginBottom; -@property (nonatomic, readwrite, assign) YGValue marginStart; -@property (nonatomic, readwrite, assign) YGValue marginEnd; -@property (nonatomic, readwrite, assign) YGValue marginHorizontal; -@property (nonatomic, readwrite, assign) YGValue marginVertical; -@property (nonatomic, readwrite, assign) YGValue margin; +@property(nonatomic, readwrite, assign) YGValue marginLeft; +@property(nonatomic, readwrite, assign) YGValue marginTop; +@property(nonatomic, readwrite, assign) YGValue marginRight; +@property(nonatomic, readwrite, assign) YGValue marginBottom; +@property(nonatomic, readwrite, assign) YGValue marginStart; +@property(nonatomic, readwrite, assign) YGValue marginEnd; +@property(nonatomic, readwrite, assign) YGValue marginHorizontal; +@property(nonatomic, readwrite, assign) YGValue marginVertical; +@property(nonatomic, readwrite, assign) YGValue margin; -@property (nonatomic, readwrite, assign) YGValue paddingLeft; -@property (nonatomic, readwrite, assign) YGValue paddingTop; -@property (nonatomic, readwrite, assign) YGValue paddingRight; -@property (nonatomic, readwrite, assign) YGValue paddingBottom; -@property (nonatomic, readwrite, assign) YGValue paddingStart; -@property (nonatomic, readwrite, assign) YGValue paddingEnd; -@property (nonatomic, readwrite, assign) YGValue paddingHorizontal; -@property (nonatomic, readwrite, assign) YGValue paddingVertical; -@property (nonatomic, readwrite, assign) YGValue padding; +@property(nonatomic, readwrite, assign) YGValue paddingLeft; +@property(nonatomic, readwrite, assign) YGValue paddingTop; +@property(nonatomic, readwrite, assign) YGValue paddingRight; +@property(nonatomic, readwrite, assign) YGValue paddingBottom; +@property(nonatomic, readwrite, assign) YGValue paddingStart; +@property(nonatomic, readwrite, assign) YGValue paddingEnd; +@property(nonatomic, readwrite, assign) YGValue paddingHorizontal; +@property(nonatomic, readwrite, assign) YGValue paddingVertical; +@property(nonatomic, readwrite, assign) YGValue padding; -@property (nonatomic, readwrite, assign) CGFloat borderLeftWidth; -@property (nonatomic, readwrite, assign) CGFloat borderTopWidth; -@property (nonatomic, readwrite, assign) CGFloat borderRightWidth; -@property (nonatomic, readwrite, assign) CGFloat borderBottomWidth; -@property (nonatomic, readwrite, assign) CGFloat borderStartWidth; -@property (nonatomic, readwrite, assign) CGFloat borderEndWidth; -@property (nonatomic, readwrite, assign) CGFloat borderWidth; +@property(nonatomic, readwrite, assign) CGFloat borderLeftWidth; +@property(nonatomic, readwrite, assign) CGFloat borderTopWidth; +@property(nonatomic, readwrite, assign) CGFloat borderRightWidth; +@property(nonatomic, readwrite, assign) CGFloat borderBottomWidth; +@property(nonatomic, readwrite, assign) CGFloat borderStartWidth; +@property(nonatomic, readwrite, assign) CGFloat borderEndWidth; +@property(nonatomic, readwrite, assign) CGFloat borderWidth; -@property (nonatomic, readwrite, assign) YGValue width; -@property (nonatomic, readwrite, assign) YGValue height; -@property (nonatomic, readwrite, assign) YGValue minWidth; -@property (nonatomic, readwrite, assign) YGValue minHeight; -@property (nonatomic, readwrite, assign) YGValue maxWidth; -@property (nonatomic, readwrite, assign) YGValue maxHeight; +@property(nonatomic, readwrite, assign) YGValue width; +@property(nonatomic, readwrite, assign) YGValue height; +@property(nonatomic, readwrite, assign) YGValue minWidth; +@property(nonatomic, readwrite, assign) YGValue minHeight; +@property(nonatomic, readwrite, assign) YGValue maxWidth; +@property(nonatomic, readwrite, assign) YGValue maxHeight; // Yoga specific properties, not compatible with flexbox specification -@property (nonatomic, readwrite, assign) CGFloat aspectRatio; +@property(nonatomic, readwrite, assign) CGFloat aspectRatio; /** Get the resolved direction of this node. This won't be YGDirectionInherit */ -@property (nonatomic, readonly, assign) YGDirection resolvedDirection; +@property(nonatomic, readonly, assign) YGDirection resolvedDirection; /** - Perform a layout calculation and update the frames of the views in the hierarchy with the results. - If the origin is not preserved, the root view's layout results will applied from {0,0}. + Perform a layout calculation and update the frames of the views in the + hierarchy with the results. If the origin is not preserved, the root view's + layout results will applied from {0,0}. */ - (void)applyLayoutPreservingOrigin:(BOOL)preserveOrigin NS_SWIFT_NAME(applyLayout(preservingOrigin:)); /** - Perform a layout calculation and update the frames of the views in the hierarchy with the results. - If the origin is not preserved, the root view's layout results will applied from {0,0}. + Perform a layout calculation and update the frames of the views in the + hierarchy with the results. If the origin is not preserved, the root view's + layout results will applied from {0,0}. */ - (void)applyLayoutPreservingOrigin:(BOOL)preserveOrigin dimensionFlexibility:(YGDimensionFlexibility)dimensionFlexibility NS_SWIFT_NAME(applyLayout(preservingOrigin:dimensionFlexibility:)); /** - Returns the size of the view if no constraints were given. This could equivalent to calling [self - sizeThatFits:CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX)]; + Returns the size of the view if no constraints were given. This could + equivalent to calling [self sizeThatFits:CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX)]; */ -@property (nonatomic, readonly, assign) CGSize intrinsicSize; +@property(nonatomic, readonly, assign) CGSize intrinsicSize; /** - Returns the size of the view based on provided constraints. Pass NaN for an unconstrained dimension. + Returns the size of the view based on provided constraints. Pass NaN for an + unconstrained dimension. */ - (CGSize)calculateLayoutWithSize:(CGSize)size NS_SWIFT_NAME(calculateLayout(with:)); @@ -148,19 +152,19 @@ typedef NS_OPTIONS(NSInteger, YGDimensionFlexibility) { /** Returns the number of children that are using Flexbox. */ -@property (nonatomic, readonly, assign) NSUInteger numberOfChildren; +@property(nonatomic, readonly, assign) NSUInteger numberOfChildren; /** - Return a BOOL indiciating whether or not we this node contains any subviews that are included in - Yoga's layout. + Return a BOOL indiciating whether or not we this node contains any subviews + that are included in Yoga's layout. */ -@property (nonatomic, readonly, assign) BOOL isLeaf; +@property(nonatomic, readonly, assign) BOOL isLeaf; /** Return's a BOOL indicating if a view is dirty. When a node is dirty it usually indicates that it will be remeasured on the next layout pass. */ -@property (nonatomic, readonly, assign) BOOL isDirty; +@property(nonatomic, readonly, assign) BOOL isDirty; /** Mark that a view's layout needs to be recalculated. Only works for leaf views. diff --git a/YogaKit/Source/YGLayout.m b/YogaKit/Source/YGLayout.m index 692020ca..4a95a5ca 100644 --- a/YogaKit/Source/YGLayout.m +++ b/YogaKit/Source/YGLayout.m @@ -5,153 +5,184 @@ * LICENSE file in the root directory of this source tree. */ -#import "YGLayout+Private.h" #import "UIView+Yoga.h" +#import "YGLayout+Private.h" -#define YG_PROPERTY(type, lowercased_name, capitalized_name) \ -- (type)lowercased_name \ -{ \ - return YGNodeStyleGet##capitalized_name(self.node); \ -} \ - \ -- (void)set##capitalized_name:(type)lowercased_name \ -{ \ - YGNodeStyleSet##capitalized_name(self.node, lowercased_name); \ +#define YG_PROPERTY(type, lowercased_name, capitalized_name) \ + -(type)lowercased_name { \ + return YGNodeStyleGet##capitalized_name(self.node); \ + } \ + \ + -(void)set##capitalized_name : (type)lowercased_name { \ + YGNodeStyleSet##capitalized_name(self.node, lowercased_name); \ + } + +#define YG_VALUE_PROPERTY(lowercased_name, capitalized_name) \ + -(YGValue)lowercased_name { \ + return YGNodeStyleGet##capitalized_name(self.node); \ + } \ + \ + -(void)set##capitalized_name : (YGValue)lowercased_name { \ + switch (lowercased_name.unit) { \ + case YGUnitUndefined: \ + YGNodeStyleSet##capitalized_name(self.node, lowercased_name.value); \ + break; \ + case YGUnitPoint: \ + YGNodeStyleSet##capitalized_name(self.node, lowercased_name.value); \ + break; \ + case YGUnitPercent: \ + YGNodeStyleSet##capitalized_name##Percent( \ + self.node, lowercased_name.value); \ + break; \ + default: \ + NSAssert(NO, @"Not implemented"); \ + } \ + } + +#define YG_AUTO_VALUE_PROPERTY(lowercased_name, capitalized_name) \ + -(YGValue)lowercased_name { \ + return YGNodeStyleGet##capitalized_name(self.node); \ + } \ + \ + -(void)set##capitalized_name : (YGValue)lowercased_name { \ + switch (lowercased_name.unit) { \ + case YGUnitPoint: \ + YGNodeStyleSet##capitalized_name(self.node, lowercased_name.value); \ + break; \ + case YGUnitPercent: \ + YGNodeStyleSet##capitalized_name##Percent( \ + self.node, lowercased_name.value); \ + break; \ + case YGUnitAuto: \ + YGNodeStyleSet##capitalized_name##Auto(self.node); \ + break; \ + default: \ + NSAssert(NO, @"Not implemented"); \ + } \ + } + +#define YG_EDGE_PROPERTY_GETTER( \ + type, lowercased_name, capitalized_name, property, edge) \ + -(type)lowercased_name { \ + return YGNodeStyleGet##property(self.node, edge); \ + } + +#define YG_EDGE_PROPERTY_SETTER( \ + lowercased_name, capitalized_name, property, edge) \ + -(void)set##capitalized_name : (CGFloat)lowercased_name { \ + YGNodeStyleSet##property(self.node, edge, lowercased_name); \ + } + +#define YG_EDGE_PROPERTY(lowercased_name, capitalized_name, property, edge) \ + YG_EDGE_PROPERTY_GETTER( \ + CGFloat, lowercased_name, capitalized_name, property, edge) \ + YG_EDGE_PROPERTY_SETTER(lowercased_name, capitalized_name, property, edge) + +#define YG_VALUE_EDGE_PROPERTY_SETTER( \ + objc_lowercased_name, objc_capitalized_name, c_name, edge) \ + -(void)set##objc_capitalized_name : (YGValue)objc_lowercased_name { \ + switch (objc_lowercased_name.unit) { \ + case YGUnitUndefined: \ + YGNodeStyleSet##c_name(self.node, edge, objc_lowercased_name.value); \ + break; \ + case YGUnitPoint: \ + YGNodeStyleSet##c_name(self.node, edge, objc_lowercased_name.value); \ + break; \ + case YGUnitPercent: \ + YGNodeStyleSet##c_name##Percent( \ + self.node, edge, objc_lowercased_name.value); \ + break; \ + default: \ + NSAssert(NO, @"Not implemented"); \ + } \ + } + +#define YG_VALUE_EDGE_PROPERTY( \ + lowercased_name, capitalized_name, property, edge) \ + YG_EDGE_PROPERTY_GETTER( \ + YGValue, lowercased_name, capitalized_name, property, edge) \ + YG_VALUE_EDGE_PROPERTY_SETTER( \ + lowercased_name, capitalized_name, property, edge) + +#define YG_VALUE_EDGES_PROPERTIES(lowercased_name, capitalized_name) \ + YG_VALUE_EDGE_PROPERTY( \ + lowercased_name##Left, \ + capitalized_name##Left, \ + capitalized_name, \ + YGEdgeLeft) \ + YG_VALUE_EDGE_PROPERTY( \ + lowercased_name##Top, \ + capitalized_name##Top, \ + capitalized_name, \ + YGEdgeTop) \ + YG_VALUE_EDGE_PROPERTY( \ + lowercased_name##Right, \ + capitalized_name##Right, \ + capitalized_name, \ + YGEdgeRight) \ + YG_VALUE_EDGE_PROPERTY( \ + lowercased_name##Bottom, \ + capitalized_name##Bottom, \ + capitalized_name, \ + YGEdgeBottom) \ + YG_VALUE_EDGE_PROPERTY( \ + lowercased_name##Start, \ + capitalized_name##Start, \ + capitalized_name, \ + YGEdgeStart) \ + YG_VALUE_EDGE_PROPERTY( \ + lowercased_name##End, \ + capitalized_name##End, \ + capitalized_name, \ + YGEdgeEnd) \ + YG_VALUE_EDGE_PROPERTY( \ + lowercased_name##Horizontal, \ + capitalized_name##Horizontal, \ + capitalized_name, \ + YGEdgeHorizontal) \ + YG_VALUE_EDGE_PROPERTY( \ + lowercased_name##Vertical, \ + capitalized_name##Vertical, \ + capitalized_name, \ + YGEdgeVertical) \ + YG_VALUE_EDGE_PROPERTY( \ + lowercased_name, capitalized_name, capitalized_name, YGEdgeAll) + +YGValue YGPointValue(CGFloat value) { + return (YGValue){.value = value, .unit = YGUnitPoint}; } -#define YG_VALUE_PROPERTY(lowercased_name, capitalized_name) \ -- (YGValue)lowercased_name \ -{ \ - return YGNodeStyleGet##capitalized_name(self.node); \ -} \ - \ -- (void)set##capitalized_name:(YGValue)lowercased_name \ -{ \ - switch (lowercased_name.unit) { \ - case YGUnitUndefined: \ - YGNodeStyleSet##capitalized_name(self.node, lowercased_name.value); \ - break; \ - case YGUnitPoint: \ - YGNodeStyleSet##capitalized_name(self.node, lowercased_name.value); \ - break; \ - case YGUnitPercent: \ - YGNodeStyleSet##capitalized_name##Percent(self.node, lowercased_name.value); \ - break; \ - default: \ - NSAssert(NO, @"Not implemented"); \ - } \ -} - -#define YG_AUTO_VALUE_PROPERTY(lowercased_name, capitalized_name) \ -- (YGValue)lowercased_name \ -{ \ - return YGNodeStyleGet##capitalized_name(self.node); \ -} \ - \ -- (void)set##capitalized_name:(YGValue)lowercased_name \ -{ \ - switch (lowercased_name.unit) { \ - case YGUnitPoint: \ - YGNodeStyleSet##capitalized_name(self.node, lowercased_name.value); \ - break; \ - case YGUnitPercent: \ - YGNodeStyleSet##capitalized_name##Percent(self.node, lowercased_name.value); \ - break; \ - case YGUnitAuto: \ - YGNodeStyleSet##capitalized_name##Auto(self.node); \ - break; \ - default: \ - NSAssert(NO, @"Not implemented"); \ - } \ -} - -#define YG_EDGE_PROPERTY_GETTER(type, lowercased_name, capitalized_name, property, edge) \ -- (type)lowercased_name \ -{ \ - return YGNodeStyleGet##property(self.node, edge); \ -} - -#define YG_EDGE_PROPERTY_SETTER(lowercased_name, capitalized_name, property, edge) \ -- (void)set##capitalized_name:(CGFloat)lowercased_name \ -{ \ - YGNodeStyleSet##property(self.node, edge, lowercased_name); \ -} - -#define YG_EDGE_PROPERTY(lowercased_name, capitalized_name, property, edge) \ -YG_EDGE_PROPERTY_GETTER(CGFloat, lowercased_name, capitalized_name, property, edge) \ -YG_EDGE_PROPERTY_SETTER(lowercased_name, capitalized_name, property, edge) - -#define YG_VALUE_EDGE_PROPERTY_SETTER(objc_lowercased_name, objc_capitalized_name, c_name, edge) \ -- (void)set##objc_capitalized_name:(YGValue)objc_lowercased_name \ -{ \ - switch (objc_lowercased_name.unit) { \ - case YGUnitUndefined: \ - YGNodeStyleSet##c_name(self.node, edge, objc_lowercased_name.value); \ - break; \ - case YGUnitPoint: \ - YGNodeStyleSet##c_name(self.node, edge, objc_lowercased_name.value); \ - break; \ - case YGUnitPercent: \ - YGNodeStyleSet##c_name##Percent(self.node, edge, objc_lowercased_name.value); \ - break; \ - default: \ - NSAssert(NO, @"Not implemented"); \ - } \ -} - -#define YG_VALUE_EDGE_PROPERTY(lowercased_name, capitalized_name, property, edge) \ -YG_EDGE_PROPERTY_GETTER(YGValue, lowercased_name, capitalized_name, property, edge) \ -YG_VALUE_EDGE_PROPERTY_SETTER(lowercased_name, capitalized_name, property, edge) - -#define YG_VALUE_EDGES_PROPERTIES(lowercased_name, capitalized_name) \ -YG_VALUE_EDGE_PROPERTY(lowercased_name##Left, capitalized_name##Left, capitalized_name, YGEdgeLeft) \ -YG_VALUE_EDGE_PROPERTY(lowercased_name##Top, capitalized_name##Top, capitalized_name, YGEdgeTop) \ -YG_VALUE_EDGE_PROPERTY(lowercased_name##Right, capitalized_name##Right, capitalized_name, YGEdgeRight) \ -YG_VALUE_EDGE_PROPERTY(lowercased_name##Bottom, capitalized_name##Bottom, capitalized_name, YGEdgeBottom) \ -YG_VALUE_EDGE_PROPERTY(lowercased_name##Start, capitalized_name##Start, capitalized_name, YGEdgeStart) \ -YG_VALUE_EDGE_PROPERTY(lowercased_name##End, capitalized_name##End, capitalized_name, YGEdgeEnd) \ -YG_VALUE_EDGE_PROPERTY(lowercased_name##Horizontal, capitalized_name##Horizontal, capitalized_name, YGEdgeHorizontal) \ -YG_VALUE_EDGE_PROPERTY(lowercased_name##Vertical, capitalized_name##Vertical, capitalized_name, YGEdgeVertical) \ -YG_VALUE_EDGE_PROPERTY(lowercased_name, capitalized_name, capitalized_name, YGEdgeAll) - -YGValue YGPointValue(CGFloat value) -{ - return (YGValue) { .value = value, .unit = YGUnitPoint }; -} - -YGValue YGPercentValue(CGFloat value) -{ - return (YGValue) { .value = value, .unit = YGUnitPercent }; +YGValue YGPercentValue(CGFloat value) { + return (YGValue){.value = value, .unit = YGUnitPercent}; } static YGConfigRef globalConfig; @interface YGLayout () -@property (nonatomic, weak, readonly) UIView *view; +@property(nonatomic, weak, readonly) UIView* view; @property(nonatomic, assign, readonly) BOOL isUIView; @end @implementation YGLayout -@synthesize isEnabled=_isEnabled; -@synthesize isIncludedInLayout=_isIncludedInLayout; -@synthesize node=_node; +@synthesize isEnabled = _isEnabled; +@synthesize isIncludedInLayout = _isIncludedInLayout; +@synthesize node = _node; -+ (void)initialize -{ ++ (void)initialize { globalConfig = YGConfigNew(); - YGConfigSetExperimentalFeatureEnabled(globalConfig, YGExperimentalFeatureWebFlexBasis, true); + YGConfigSetExperimentalFeatureEnabled( + globalConfig, YGExperimentalFeatureWebFlexBasis, true); YGConfigSetPointScaleFactor(globalConfig, [UIScreen mainScreen].scale); } -- (instancetype)initWithView:(UIView*)view -{ +- (instancetype)initWithView:(UIView*)view { if (self = [super init]) { _view = view; _node = YGNodeNewWithConfig(globalConfig); - YGNodeSetContext(_node, (__bridge void *) view); + YGNodeSetContext(_node, (__bridge void*)view); _isEnabled = NO; _isIncludedInLayout = YES; _isUIView = [view isMemberOfClass:[UIView class]]; @@ -160,18 +191,15 @@ static YGConfigRef globalConfig; return self; } -- (void)dealloc -{ +- (void)dealloc { YGNodeFree(self.node); } -- (BOOL)isDirty -{ +- (BOOL)isDirty { return YGNodeIsDirty(self.node); } -- (void)markDirty -{ +- (void)markDirty { if (self.isDirty || !self.isLeaf) { return; } @@ -187,17 +215,17 @@ static YGConfigRef globalConfig; YGNodeMarkDirty(node); } -- (NSUInteger)numberOfChildren -{ +- (NSUInteger)numberOfChildren { return YGNodeGetChildCount(self.node); } -- (BOOL)isLeaf -{ - NSAssert([NSThread isMainThread], @"This method must be called on the main thread."); +- (BOOL)isLeaf { + NSAssert( + [NSThread isMainThread], + @"This method must be called on the main thread."); if (self.isEnabled) { - for (UIView *subview in self.view.subviews) { - YGLayout *const yoga = subview.yoga; + for (UIView* subview in self.view.subviews) { + YGLayout* const yoga = subview.yoga; if (yoga.isEnabled && yoga.isIncludedInLayout) { return NO; } @@ -209,13 +237,11 @@ static YGConfigRef globalConfig; #pragma mark - Style -- (YGPositionType)position -{ +- (YGPositionType)position { return YGNodeStyleGetPositionType(self.node); } -- (void)setPosition:(YGPositionType)position -{ +- (void)setPosition:(YGPositionType)position { YGNodeStyleSetPositionType(self.node, position); } @@ -261,25 +287,23 @@ YG_PROPERTY(CGFloat, aspectRatio, AspectRatio) #pragma mark - Layout and Sizing -- (YGDirection)resolvedDirection -{ +- (YGDirection)resolvedDirection { return YGNodeLayoutGetDirection(self.node); } -- (void)applyLayout -{ +- (void)applyLayout { [self calculateLayoutWithSize:self.view.bounds.size]; YGApplyLayoutToViewHierarchy(self.view, NO); } -- (void)applyLayoutPreservingOrigin:(BOOL)preserveOrigin -{ +- (void)applyLayoutPreservingOrigin:(BOOL)preserveOrigin { [self calculateLayoutWithSize:self.view.bounds.size]; YGApplyLayoutToViewHierarchy(self.view, preserveOrigin); } -- (void)applyLayoutPreservingOrigin:(BOOL)preserveOrigin dimensionFlexibility:(YGDimensionFlexibility)dimensionFlexibility -{ +- (void)applyLayoutPreservingOrigin:(BOOL)preserveOrigin + dimensionFlexibility: + (YGDimensionFlexibility)dimensionFlexibility { CGSize size = self.view.bounds.size; if (dimensionFlexibility & YGDimensionFlexibilityFlexibleWidth) { size.width = YGUndefined; @@ -291,18 +315,15 @@ YG_PROPERTY(CGFloat, aspectRatio, AspectRatio) YGApplyLayoutToViewHierarchy(self.view, preserveOrigin); } - -- (CGSize)intrinsicSize -{ +- (CGSize)intrinsicSize { const CGSize constrainedSize = { - .width = YGUndefined, - .height = YGUndefined, + .width = YGUndefined, + .height = YGUndefined, }; return [self calculateLayoutWithSize:constrainedSize]; } -- (CGSize)calculateLayoutWithSize:(CGSize)size -{ +- (CGSize)calculateLayoutWithSize:(CGSize)size { NSAssert([NSThread isMainThread], @"Yoga calculation must be done on main."); NSAssert(self.isEnabled, @"Yoga is not enabled for this view."); @@ -310,30 +331,28 @@ YG_PROPERTY(CGFloat, aspectRatio, AspectRatio) const YGNodeRef node = self.node; YGNodeCalculateLayout( - node, - size.width, - size.height, - YGNodeStyleGetDirection(node)); + node, size.width, size.height, YGNodeStyleGetDirection(node)); - return (CGSize) { - .width = YGNodeLayoutGetWidth(node), - .height = YGNodeLayoutGetHeight(node), + return (CGSize){ + .width = YGNodeLayoutGetWidth(node), + .height = YGNodeLayoutGetHeight(node), }; } #pragma mark - Private static YGSize YGMeasureView( - YGNodeRef node, - float width, - YGMeasureMode widthMode, - float height, - YGMeasureMode heightMode) -{ - const CGFloat constrainedWidth = (widthMode == YGMeasureModeUndefined) ? CGFLOAT_MAX : width; - const CGFloat constrainedHeight = (heightMode == YGMeasureModeUndefined) ? CGFLOAT_MAX: height; + YGNodeRef node, + float width, + YGMeasureMode widthMode, + float height, + YGMeasureMode heightMode) { + const CGFloat constrainedWidth = + (widthMode == YGMeasureModeUndefined) ? CGFLOAT_MAX : width; + const CGFloat constrainedHeight = + (heightMode == YGMeasureModeUndefined) ? CGFLOAT_MAX : height; - UIView *view = (__bridge UIView*) YGNodeGetContext(node); + UIView* view = (__bridge UIView*)YGNodeGetContext(node); CGSize sizeThatFits = CGSizeZero; // The default implementation of sizeThatFits: returns the existing size of @@ -349,17 +368,18 @@ static YGSize YGMeasureView( }]; } - return (YGSize) { - .width = YGSanitizeMeasurement(constrainedWidth, sizeThatFits.width, widthMode), - .height = YGSanitizeMeasurement(constrainedHeight, sizeThatFits.height, heightMode), + return (YGSize){ + .width = YGSanitizeMeasurement( + constrainedWidth, sizeThatFits.width, widthMode), + .height = YGSanitizeMeasurement( + constrainedHeight, sizeThatFits.height, heightMode), }; } static CGFloat YGSanitizeMeasurement( - CGFloat constrainedSize, - CGFloat measuredSize, - YGMeasureMode measureMode) -{ + CGFloat constrainedSize, + CGFloat measuredSize, + YGMeasureMode measureMode) { CGFloat result; if (measureMode == YGMeasureModeExactly) { result = constrainedSize; @@ -372,13 +392,14 @@ static CGFloat YGSanitizeMeasurement( return result; } -static BOOL YGNodeHasExactSameChildren(const YGNodeRef node, NSArray *subviews) -{ +static BOOL YGNodeHasExactSameChildren( + const YGNodeRef node, + NSArray* subviews) { if (YGNodeGetChildCount(node) != subviews.count) { return NO; } - for (int i=0; i * return YES; } -static void YGAttachNodesFromViewHierachy(UIView *const view) -{ - YGLayout *const yoga = view.yoga; +static void YGAttachNodesFromViewHierachy(UIView* const view) { + YGLayout* const yoga = view.yoga; const YGNodeRef node = yoga.node; // Only leaf nodes should have a measure function @@ -399,8 +419,9 @@ static void YGAttachNodesFromViewHierachy(UIView *const view) } else { YGNodeSetMeasureFunc(node, NULL); - NSMutableArray *subviewsToInclude = [[NSMutableArray alloc] initWithCapacity:view.subviews.count]; - for (UIView *subview in view.subviews) { + NSMutableArray* subviewsToInclude = + [[NSMutableArray alloc] initWithCapacity:view.subviews.count]; + for (UIView* subview in view.subviews) { if (subview.yoga.isEnabled && subview.yoga.isIncludedInLayout) { [subviewsToInclude addObject:subview]; } @@ -408,19 +429,18 @@ static void YGAttachNodesFromViewHierachy(UIView *const view) if (!YGNodeHasExactSameChildren(node, subviewsToInclude)) { YGRemoveAllChildren(node); - for (int i=0; i diff --git a/java/jni/ScopedGlobalRef.h b/java/jni/ScopedGlobalRef.h index b1c18e68..fa98214a 100644 --- a/java/jni/ScopedGlobalRef.h +++ b/java/jni/ScopedGlobalRef.h @@ -84,9 +84,7 @@ public: return *this; } - ~ScopedGlobalRef() { - reset(); - } + ~ScopedGlobalRef() { reset(); } /** * Deletes the currently held reference and reassigns a new one to the @@ -120,9 +118,7 @@ public: /** * Returns true if the underlying JNI reference is not NULL. */ - operator bool() const { - return mGlobalRef != NULL; - } + operator bool() const { return mGlobalRef != NULL; } ScopedGlobalRef(const ScopedGlobalRef& ref) = delete; ScopedGlobalRef& operator=(const ScopedGlobalRef& other) = delete; diff --git a/java/jni/ScopedLocalRef.h b/java/jni/ScopedLocalRef.h index 0c5e9440..2368ced2 100644 --- a/java/jni/ScopedLocalRef.h +++ b/java/jni/ScopedLocalRef.h @@ -83,9 +83,7 @@ public: return *this; } - ~ScopedLocalRef() { - reset(); - } + ~ScopedLocalRef() { reset(); } /** * Deletes the currently held reference and reassigns a new one to the @@ -119,9 +117,7 @@ public: /** * Returns true if the underlying JNI reference is not NULL. */ - operator bool() const { - return mLocalRef != NULL; - } + operator bool() const { return mLocalRef != NULL; } ScopedLocalRef(const ScopedLocalRef& ref) = delete; ScopedLocalRef& operator=(const ScopedLocalRef& other) = delete; diff --git a/java/jni/common.cpp b/java/jni/common.cpp index 143c695f..37b56770 100644 --- a/java/jni/common.cpp +++ b/java/jni/common.cpp @@ -77,8 +77,11 @@ DEFINE_CALL_METHOD_FOR_PRIMITIVE_INTERFACE(void, Void) { assertNoPendingJniException(env); } -ScopedLocalRef -callStaticObjectMethod(JNIEnv* env, jclass clazz, jmethodID methodId, ...) { +ScopedLocalRef callStaticObjectMethod( + JNIEnv* env, + jclass clazz, + jmethodID methodId, + ...) { va_list args; va_start(args, methodId); jobject result = env->CallStaticObjectMethodV(clazz, methodId, args); diff --git a/java/jni/common.h b/java/jni/common.h index 19eca6a4..fda1e06d 100644 --- a/java/jni/common.h +++ b/java/jni/common.h @@ -61,8 +61,11 @@ DEFINE_CALL_METHOD_FOR_PRIMITIVE_INTERFACE(void, Void); DEFINE_CALL_METHOD_FOR_PRIMITIVE_INTERFACE(jlong, Long); DEFINE_CALL_METHOD_FOR_PRIMITIVE_INTERFACE(jfloat, Float); -ScopedLocalRef -callStaticObjectMethod(JNIEnv* env, jclass clazz, jmethodID methodId, ...); +ScopedLocalRef callStaticObjectMethod( + JNIEnv* env, + jclass clazz, + jmethodID methodId, + ...); /** * Given a local or a global reference, this method creates a new global diff --git a/javascript/sources/Size.hh b/javascript/sources/Size.hh index d7ea6da9..9f550a96 100644 --- a/javascript/sources/Size.hh +++ b/javascript/sources/Size.hh @@ -18,7 +18,5 @@ struct Size { Size(double width, double height) : width(width), height(height) {} - void toJS(nbind::cbOutput expose) const { - expose(width, height); - } + void toJS(nbind::cbOutput expose) const { expose(width, height); } }; diff --git a/javascript/sources/Value.hh b/javascript/sources/Value.hh index e7a9cf66..2581ae4a 100644 --- a/javascript/sources/Value.hh +++ b/javascript/sources/Value.hh @@ -21,7 +21,5 @@ struct Value { Value(int unit, double value) : unit(unit), value(value) {} - void toJS(nbind::cbOutput expose) const { - expose(unit, value); - } + void toJS(nbind::cbOutput expose) const { expose(unit, value); } }; From 6c61cd5f05abe51d33c67db13df74206a908e1d6 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 19 Feb 2020 11:10:06 -0800 Subject: [PATCH 235/347] Fix layout tab scrolling in playground Summary: Add a scroll bar to layout tab in playground to fix the UI issue where margin, border were not accessible. Reviewed By: danielbuechele Differential Revision: D19906128 fbshipit-source-id: 2c2d7695f731b2d312b78eab31c66d737915eaae --- website/src/components/Playground/src/Editor.css | 3 ++- website/src/components/Playground/src/Editor.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/website/src/components/Playground/src/Editor.css b/website/src/components/Playground/src/Editor.css index f53451f7..78974f63 100644 --- a/website/src/components/Playground/src/Editor.css +++ b/website/src/components/Playground/src/Editor.css @@ -51,7 +51,8 @@ } .Editor .ant-tabs-tabpane { - overflow-y: scroll; + overflow-y: auto; + height: 45vh; padding: 15px; } diff --git a/website/src/components/Playground/src/Editor.js b/website/src/components/Playground/src/Editor.js index f7076865..4b6b6593 100644 --- a/website/src/components/Playground/src/Editor.js +++ b/website/src/components/Playground/src/Editor.js @@ -196,7 +196,7 @@ export default class Editor extends Component { onChange={this.props.onChangeLayout} /> - +

Width × Height From 2d52b5a8733bccba663b15817685b13d8b5eb9da Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Tue, 25 Feb 2020 07:27:56 -0800 Subject: [PATCH 236/347] fix layout tab height issue in playground on home page Summary: Fixed layout tab height issue properly Reviewed By: danielbuechele Differential Revision: D20003594 fbshipit-source-id: 6d9ce89a5d82a83937e5cb0f989bb028e07d576f --- website/src/components/Playground/src/Editor.css | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/website/src/components/Playground/src/Editor.css b/website/src/components/Playground/src/Editor.css index 78974f63..57954947 100644 --- a/website/src/components/Playground/src/Editor.css +++ b/website/src/components/Playground/src/Editor.css @@ -52,7 +52,9 @@ .Editor .ant-tabs-tabpane { overflow-y: auto; - height: 45vh; + min-height: 320px; + height: 100%; + max-height: 25vh; padding: 15px; } From adb87e347f7488405be77d5fb964290c55a11c7f Mon Sep 17 00:00:00 2001 From: Jesse Katsumata Date: Mon, 9 Mar 2020 15:34:16 -0700 Subject: [PATCH 237/347] chore: fix typo in comments (#28269) Summary: Fixed some typos in the comment. ## Changelog [Internal] [Fixed] - Fixed typo in the comments Pull Request resolved: https://github.com/facebook/react-native/pull/28269 Test Plan: Changes are only made in the comments, so test is not necessary. Reviewed By: cpojer Differential Revision: D20342637 Pulled By: shergin fbshipit-source-id: f6e7dd538ee54c43e1570c35e1f8c4502054e328 --- yoga/YGNode.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yoga/YGNode.h b/yoga/YGNode.h index 95962e68..9aef1ec6 100644 --- a/yoga/YGNode.h +++ b/yoga/YGNode.h @@ -73,7 +73,7 @@ private: } // DANGER DANGER DANGER! - // If the the node assigned to has children, we'd either have to deallocate + // If the node assigned to has children, we'd either have to deallocate // them (potentially incorrect) or ignore them (danger of leaks). Only ever // use this after checking that there are no children. // DO NOT CHANGE THE VISIBILITY OF THIS METHOD! From 63a463d01149d363cd9c57fa8d07074203cf5a0a Mon Sep 17 00:00:00 2001 From: Nate Stedman Date: Tue, 10 Mar 2020 09:35:55 -0700 Subject: [PATCH 238/347] Mark YogaKit as modular Differential Revision: D20364340 fbshipit-source-id: ce4bc1f474177ffc9c77eb2f10bdb7cb549dd6d8 --- YogaKit/BUCK | 2 ++ 1 file changed, 2 insertions(+) diff --git a/YogaKit/BUCK b/YogaKit/BUCK index c3d534e8..0bff3caa 100644 --- a/YogaKit/BUCK +++ b/YogaKit/BUCK @@ -42,6 +42,8 @@ yoga_apple_library( ], header_path_prefix = "", link_whole = True, + modular = True, + module_name = "YogaKit", visibility = ["PUBLIC"], deps = [ yoga_dep(":yoga"), From b280a19b0a61d6119ac48b441bcfd9cedd416113 Mon Sep 17 00:00:00 2001 From: Adam Ernst Date: Tue, 10 Mar 2020 10:55:08 -0700 Subject: [PATCH 239/347] Run 'arc lint-deps' Reviewed By: d16r Differential Revision: D20362505 fbshipit-source-id: f3b7e62f7665d20a32788042772b731d6ed53f36 --- YogaKit/BUCK | 1 + 1 file changed, 1 insertion(+) diff --git a/YogaKit/BUCK b/YogaKit/BUCK index 0bff3caa..acefcdb3 100644 --- a/YogaKit/BUCK +++ b/YogaKit/BUCK @@ -37,6 +37,7 @@ yoga_apple_library( ), compiler_flags = COMPILER_FLAGS, frameworks = [ + "$SDKROOT/System/Library/Frameworks/CoreGraphics.framework", "$SDKROOT/System/Library/Frameworks/Foundation.framework", "$SDKROOT/System/Library/Frameworks/UIKit.framework", ], From 4f1231f411b88c6e280a7ad2aa1354dc111b337d Mon Sep 17 00:00:00 2001 From: Lior Israeli Date: Tue, 24 Mar 2020 05:18:30 -0700 Subject: [PATCH 240/347] Fix typo in buck targets Summary: Proguard is spelled wrong Reviewed By: SidharthGuglani Differential Revision: D20619173 fbshipit-source-id: 463788454ad7e72337121ed63ab79129db45113e --- android/BUCK | 4 ++-- java/BUCK | 6 +++--- lib/fb/src/main/java/com/facebook/jni/BUCK | 4 ++-- tools/build_defs/oss/yoga_defs.bzl | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/android/BUCK b/android/BUCK index 649b96a3..6acb3325 100644 --- a/android/BUCK +++ b/android/BUCK @@ -3,7 +3,7 @@ # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID_JAVA_TARGET", "ANDROID_RES_TARGET", "JAVA_TARGET", "PROGRUARD_ANNOTATIONS_TARGET", "yoga_android_aar", "yoga_android_resource") +load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID_JAVA_TARGET", "ANDROID_RES_TARGET", "JAVA_TARGET", "PROGUARD_ANNOTATIONS_TARGET", "yoga_android_aar", "yoga_android_resource") yoga_android_aar( name = "android", @@ -15,7 +15,7 @@ yoga_android_aar( ANDROID_JAVA_TARGET, ANDROID_RES_TARGET, JAVA_TARGET, - PROGRUARD_ANNOTATIONS_TARGET, + PROGUARD_ANNOTATIONS_TARGET, ], ) diff --git a/java/BUCK b/java/BUCK index 72be4261..221e8265 100644 --- a/java/BUCK +++ b/java/BUCK @@ -3,7 +3,7 @@ # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID", "CXX_LIBRARY_WHITELIST", "JNI_TARGET", "JSR_305_TARGET", "JUNIT_TARGET", "PROGRUARD_ANNOTATIONS_TARGET", "SOLOADER_TARGET", "YOGA_ROOTS", "yoga_cxx_lib", "yoga_cxx_library", "yoga_dep", "yoga_java_binary", "yoga_java_library", "yoga_java_test", "yoga_prebuilt_cxx_library") +load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID", "CXX_LIBRARY_WHITELIST", "JNI_TARGET", "JSR_305_TARGET", "JUNIT_TARGET", "PROGUARD_ANNOTATIONS_TARGET", "SOLOADER_TARGET", "YOGA_ROOTS", "yoga_cxx_lib", "yoga_cxx_library", "yoga_dep", "yoga_java_binary", "yoga_java_library", "yoga_java_test", "yoga_prebuilt_cxx_library") CXX_LIBRARY_WHITELIST_FOR_TESTS = CXX_LIBRARY_WHITELIST + [ yoga_cxx_lib("testutil:jni"), @@ -71,7 +71,7 @@ yoga_java_library( visibility = ["PUBLIC"], deps = [ JSR_305_TARGET, - PROGRUARD_ANNOTATIONS_TARGET, + PROGUARD_ANNOTATIONS_TARGET, ], ) @@ -85,7 +85,7 @@ yoga_java_library( ":java-interface", ":jni", JSR_305_TARGET, - PROGRUARD_ANNOTATIONS_TARGET, + PROGUARD_ANNOTATIONS_TARGET, SOLOADER_TARGET, ], ) diff --git a/lib/fb/src/main/java/com/facebook/jni/BUCK b/lib/fb/src/main/java/com/facebook/jni/BUCK index e048811d..38526c26 100644 --- a/lib/fb/src/main/java/com/facebook/jni/BUCK +++ b/lib/fb/src/main/java/com/facebook/jni/BUCK @@ -3,7 +3,7 @@ # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -load("//tools/build_defs/oss:yoga_defs.bzl", "JSR_305_TARGET", "PROGRUARD_ANNOTATIONS_TARGET", "SOLOADER_TARGET", "yoga_java_library") +load("//tools/build_defs/oss:yoga_defs.bzl", "JSR_305_TARGET", "PROGUARD_ANNOTATIONS_TARGET", "SOLOADER_TARGET", "yoga_java_library") yoga_java_library( name = "jni", @@ -13,7 +13,7 @@ yoga_java_library( "PUBLIC", ], deps = [ - PROGRUARD_ANNOTATIONS_TARGET, + PROGUARD_ANNOTATIONS_TARGET, SOLOADER_TARGET, JSR_305_TARGET, ], diff --git a/tools/build_defs/oss/yoga_defs.bzl b/tools/build_defs/oss/yoga_defs.bzl index 4c50e984..253449b3 100644 --- a/tools/build_defs/oss/yoga_defs.bzl +++ b/tools/build_defs/oss/yoga_defs.bzl @@ -14,7 +14,7 @@ JSR_305_TARGET = "//lib/jsr-305:jsr-305" JUNIT_TARGET = "//lib/junit:junit" -PROGRUARD_ANNOTATIONS_TARGET = "//java/proguard-annotations/src/main/java/com/facebook/proguard/annotations:annotations" +PROGUARD_ANNOTATIONS_TARGET = "//java/proguard-annotations/src/main/java/com/facebook/proguard/annotations:annotations" SOLOADER_TARGET = "//lib/soloader:soloader" From 5bf93e81ba4547902d7554d055f0b53eb7bafdfa Mon Sep 17 00:00:00 2001 From: Michael Bolin Date: Tue, 24 Mar 2020 20:18:20 -0700 Subject: [PATCH 241/347] Upgrade Prettier from 1.17 to 2.0.2. Summary: This gets us on the latest Prettier 2.x: https://prettier.io/blog/2020/03/21/2.0.0.html Notably, this adds support for TypeScript 3.8, which introduces new syntax, such as `import type`. Reviewed By: zertosh Differential Revision: D20636268 fbshipit-source-id: fca5833d003804333a05ba16325bbbe0e06d6c8a --- website/package.json | 2 +- .../Playground/src/CodeJavaScript.js | 8 ++++--- .../components/Playground/src/CodeLitho.js | 4 ++-- .../components/Playground/src/URLShortener.js | 4 +--- .../Playground/src/YogaEnumSelect.js | 5 +---- website/src/pages/docs/index.js | 21 +++++++++---------- website/yarn.lock | 8 +++---- 7 files changed, 24 insertions(+), 28 deletions(-) diff --git a/website/package.json b/website/package.json index 442b13f6..218c1e73 100644 --- a/website/package.json +++ b/website/package.json @@ -32,6 +32,6 @@ "develop": "gatsby develop" }, "devDependencies": { - "prettier": "1.17.0" + "prettier": "2.0.2" } } diff --git a/website/src/components/Playground/src/CodeJavaScript.js b/website/src/components/Playground/src/CodeJavaScript.js index a16a586c..efa48ec0 100644 --- a/website/src/components/Playground/src/CodeJavaScript.js +++ b/website/src/components/Playground/src/CodeJavaScript.js @@ -27,9 +27,11 @@ export const JSEnumLookup = { }; function getEnum(yogaEnum: string, value: string | number): string { - return `yoga.${Object.keys(yoga) - .filter(key => key.toLowerCase().startsWith(yogaEnum.toLowerCase())) - .find(key => yoga[key] === value) || value}`; + return `yoga.${ + Object.keys(yoga) + .filter(key => key.toLowerCase().startsWith(yogaEnum.toLowerCase())) + .find(key => yoga[key] === value) || value + }`; } function setProperty( diff --git a/website/src/components/Playground/src/CodeLitho.js b/website/src/components/Playground/src/CodeLitho.js index 0e9f782b..66e89a3e 100644 --- a/website/src/components/Playground/src/CodeLitho.js +++ b/website/src/components/Playground/src/CodeLitho.js @@ -47,8 +47,8 @@ function dipOrPercent(value) { return value === 'auto' ? 'Auto' : typeof value === 'string' && /%$/.test(value) - ? 'Percent' - : 'Dip'; + ? 'Percent' + : 'Dip'; } function getValue(value) { diff --git a/website/src/components/Playground/src/URLShortener.js b/website/src/components/Playground/src/URLShortener.js index 77130a0f..27049801 100644 --- a/website/src/components/Playground/src/URLShortener.js +++ b/website/src/components/Playground/src/URLShortener.js @@ -52,9 +52,7 @@ export default class URLShortener extends Component<{}, State> { } fetch( - `https://cors-anywhere.herokuapp.com/tinyurl.com/api-create.php?url=${ - window.location.href - }`, + `https://cors-anywhere.herokuapp.com/tinyurl.com/api-create.php?url=${window.location.href}`, ) .then(res => res.text()) .then(shortURL => this.setState({shortURL, loading: false})) diff --git a/website/src/components/Playground/src/YogaEnumSelect.js b/website/src/components/Playground/src/YogaEnumSelect.js index 04ce3968..8c7f297e 100644 --- a/website/src/components/Playground/src/YogaEnumSelect.js +++ b/website/src/components/Playground/src/YogaEnumSelect.js @@ -57,10 +57,7 @@ export default class YogaEnumSelect extends Component { getTitle = (property: string, key: string): string => { const replacer = new RegExp(`^${property}_`); - return key - .replace(replacer, '') - .replace('_', ' ') - .toLowerCase(); + return key.replace(replacer, '').replace('_', ' ').toLowerCase(); }; render() { diff --git a/website/src/pages/docs/index.js b/website/src/pages/docs/index.js index 66e0a363..96dee1ae 100644 --- a/website/src/pages/docs/index.js +++ b/website/src/pages/docs/index.js @@ -49,17 +49,16 @@ export default ({data}) => ( ({node}) => node.fileAbsolutePath.indexOf(`/${category}/`) > -1, ) - .map( - ({node}) => - node.frontmatter.redirect ? ( - - {node.frontmatter.title} - - ) : ( - - {node.frontmatter.title} - - ), + .map(({node}) => + node.frontmatter.redirect ? ( + + {node.frontmatter.title} + + ) : ( + + {node.frontmatter.title} + + ), )} ), diff --git a/website/yarn.lock b/website/yarn.lock index 509efeca..9cb28ac6 100644 --- a/website/yarn.lock +++ b/website/yarn.lock @@ -6978,10 +6978,10 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" -prettier@1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.17.0.tgz#53b303676eed22cc14a9f0cec09b477b3026c008" - integrity sha512-sXe5lSt2WQlCbydGETgfm1YBShgOX4HxQkFPvbxkcwgDvGDeqVau8h+12+lmSVlP3rHPz0oavfddSZg/q+Szjw== +prettier@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.2.tgz#1ba8f3eb92231e769b7fcd7cb73ae1b6b74ade08" + integrity sha512-5xJQIPT8BraI7ZnaDwSbu5zLrB6vvi8hVV58yHQ+QK64qrY40dULy0HSRlQ2/2IdzeBpjhDkqdcFBnFeDEMVdg== pretty-bytes@^4.0.2: version "4.0.2" From 0f08aa53dab729324b9706a833e219ee654c64a6 Mon Sep 17 00:00:00 2001 From: Michael Bolin Date: Tue, 24 Mar 2020 21:35:58 -0700 Subject: [PATCH 242/347] Back out "Upgrade Prettier from 1.17 to 2.0.2." Differential Revision: D20639755 fbshipit-source-id: 5028563f9cf0527a30b4259daac50cdc03934bfd --- website/package.json | 2 +- .../Playground/src/CodeJavaScript.js | 8 +++---- .../components/Playground/src/CodeLitho.js | 4 ++-- .../components/Playground/src/URLShortener.js | 4 +++- .../Playground/src/YogaEnumSelect.js | 5 ++++- website/src/pages/docs/index.js | 21 ++++++++++--------- website/yarn.lock | 8 +++---- 7 files changed, 28 insertions(+), 24 deletions(-) diff --git a/website/package.json b/website/package.json index 218c1e73..442b13f6 100644 --- a/website/package.json +++ b/website/package.json @@ -32,6 +32,6 @@ "develop": "gatsby develop" }, "devDependencies": { - "prettier": "2.0.2" + "prettier": "1.17.0" } } diff --git a/website/src/components/Playground/src/CodeJavaScript.js b/website/src/components/Playground/src/CodeJavaScript.js index efa48ec0..a16a586c 100644 --- a/website/src/components/Playground/src/CodeJavaScript.js +++ b/website/src/components/Playground/src/CodeJavaScript.js @@ -27,11 +27,9 @@ export const JSEnumLookup = { }; function getEnum(yogaEnum: string, value: string | number): string { - return `yoga.${ - Object.keys(yoga) - .filter(key => key.toLowerCase().startsWith(yogaEnum.toLowerCase())) - .find(key => yoga[key] === value) || value - }`; + return `yoga.${Object.keys(yoga) + .filter(key => key.toLowerCase().startsWith(yogaEnum.toLowerCase())) + .find(key => yoga[key] === value) || value}`; } function setProperty( diff --git a/website/src/components/Playground/src/CodeLitho.js b/website/src/components/Playground/src/CodeLitho.js index 66e89a3e..0e9f782b 100644 --- a/website/src/components/Playground/src/CodeLitho.js +++ b/website/src/components/Playground/src/CodeLitho.js @@ -47,8 +47,8 @@ function dipOrPercent(value) { return value === 'auto' ? 'Auto' : typeof value === 'string' && /%$/.test(value) - ? 'Percent' - : 'Dip'; + ? 'Percent' + : 'Dip'; } function getValue(value) { diff --git a/website/src/components/Playground/src/URLShortener.js b/website/src/components/Playground/src/URLShortener.js index 27049801..77130a0f 100644 --- a/website/src/components/Playground/src/URLShortener.js +++ b/website/src/components/Playground/src/URLShortener.js @@ -52,7 +52,9 @@ export default class URLShortener extends Component<{}, State> { } fetch( - `https://cors-anywhere.herokuapp.com/tinyurl.com/api-create.php?url=${window.location.href}`, + `https://cors-anywhere.herokuapp.com/tinyurl.com/api-create.php?url=${ + window.location.href + }`, ) .then(res => res.text()) .then(shortURL => this.setState({shortURL, loading: false})) diff --git a/website/src/components/Playground/src/YogaEnumSelect.js b/website/src/components/Playground/src/YogaEnumSelect.js index 8c7f297e..04ce3968 100644 --- a/website/src/components/Playground/src/YogaEnumSelect.js +++ b/website/src/components/Playground/src/YogaEnumSelect.js @@ -57,7 +57,10 @@ export default class YogaEnumSelect extends Component { getTitle = (property: string, key: string): string => { const replacer = new RegExp(`^${property}_`); - return key.replace(replacer, '').replace('_', ' ').toLowerCase(); + return key + .replace(replacer, '') + .replace('_', ' ') + .toLowerCase(); }; render() { diff --git a/website/src/pages/docs/index.js b/website/src/pages/docs/index.js index 96dee1ae..66e0a363 100644 --- a/website/src/pages/docs/index.js +++ b/website/src/pages/docs/index.js @@ -49,16 +49,17 @@ export default ({data}) => ( ({node}) => node.fileAbsolutePath.indexOf(`/${category}/`) > -1, ) - .map(({node}) => - node.frontmatter.redirect ? ( - - {node.frontmatter.title} - - ) : ( - - {node.frontmatter.title} - - ), + .map( + ({node}) => + node.frontmatter.redirect ? ( + + {node.frontmatter.title} + + ) : ( + + {node.frontmatter.title} + + ), )} ), diff --git a/website/yarn.lock b/website/yarn.lock index 9cb28ac6..509efeca 100644 --- a/website/yarn.lock +++ b/website/yarn.lock @@ -6978,10 +6978,10 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" -prettier@2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.2.tgz#1ba8f3eb92231e769b7fcd7cb73ae1b6b74ade08" - integrity sha512-5xJQIPT8BraI7ZnaDwSbu5zLrB6vvi8hVV58yHQ+QK64qrY40dULy0HSRlQ2/2IdzeBpjhDkqdcFBnFeDEMVdg== +prettier@1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.17.0.tgz#53b303676eed22cc14a9f0cec09b477b3026c008" + integrity sha512-sXe5lSt2WQlCbydGETgfm1YBShgOX4HxQkFPvbxkcwgDvGDeqVau8h+12+lmSVlP3rHPz0oavfddSZg/q+Szjw== pretty-bytes@^4.0.2: version "4.0.2" From ecd7790dd8192b4c2944f85e28df2fc589b908c0 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 1 Apr 2020 14:37:45 -0700 Subject: [PATCH 243/347] Fix Yoga flexshrink with min-width sizing issue Summary: While resolving the flexible items we calculate totalFlexShrinkScaledFactors which uses the flexBasis or initial width of node (Not min-width). At a later stage during distribution of space we are subtracting value from this which also takes care of min-width. For example If node has flexShrink 1 and width 100 and min-width 301 then totalFlexShrinkScaledFactors will become -1*100 = -100 but later we are subtracting -1 * 301 (min-width) = -301 which is ambiguous and causing layout inconsistencies with how web behaves. Fixed this by only using the flexBasis or width for these calculations. Changelog: [Internal][Yoga] Fix layout issue when flexShrink and min-width are used together Reviewed By: pasqualeanatriello Differential Revision: D20219419 fbshipit-source-id: 948fbc06ca541d4ad307c88c8a2df65d157778b1 --- yoga/Yoga.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index e30a36b7..d916a45f 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -2338,7 +2338,8 @@ static void YGDistributeFreeSpaceFirstPass( // first and second passes. deltaFreeSpace += boundMainSize - childFlexBasis; collectedFlexItemsValues.totalFlexShrinkScaledFactors -= - flexShrinkScaledFactor; + (-currentRelativeChild->resolveFlexShrink() * + currentRelativeChild->getLayout().computedFlexBasis.unwrap()); } } } else if ( From 2049c85a6cda69f54ed4657199f888e8be513328 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 1 Apr 2020 14:37:45 -0700 Subject: [PATCH 244/347] Unit tests for flexshrink min width cases Reviewed By: pasqualeanatriello Differential Revision: D20219428 fbshipit-source-id: 8cbd028627095d9f7b393489ddba1f31c3207b67 --- tests/YGFlexTest.cpp | 118 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) diff --git a/tests/YGFlexTest.cpp b/tests/YGFlexTest.cpp index 21c7578d..ab6dec76 100644 --- a/tests/YGFlexTest.cpp +++ b/tests/YGFlexTest.cpp @@ -605,3 +605,121 @@ TEST(YogaTest, flex_grow_less_than_factor_one) { YGConfigFree(config); } + +TEST(YogaTest, flex_shrink_min_width) { + const YGConfigRef config = YGConfigNew(); + YGConfigSetUseWebDefaults(config, true); + + const YGNodeRef root = YGNodeNewWithConfig(config); + YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow); + YGNodeStyleSetWidth(root, 500); + YGNodeStyleSetHeight(root, 500); + + const YGNodeRef root_child0 = YGNodeNewWithConfig(config); + YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow); + YGNodeStyleSetWidth(root_child0, 100); + YGNodeStyleSetMinWidth(root_child0, 301); + YGNodeStyleSetHeight(root_child0, 100); + YGNodeInsertChild(root, root_child0, 0); + + const YGNodeRef root_child1 = YGNodeNewWithConfig(config); + YGNodeStyleSetFlexDirection(root_child1, YGFlexDirectionRow); + YGNodeStyleSetWidth(root_child1, 100); + YGNodeStyleSetMinWidth(root_child1, 25); + YGNodeStyleSetHeight(root_child1, 100); + YGNodeInsertChild(root, root_child1, 1); + + const YGNodeRef root_child2 = YGNodeNewWithConfig(config); + YGNodeStyleSetFlexDirection(root_child2, YGFlexDirectionRow); + YGNodeStyleSetWidth(root_child2, 100); + YGNodeStyleSetHeight(root_child2, 100); + YGNodeInsertChild(root, root_child2, 2); + + YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); + ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root)); + ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); + ASSERT_FLOAT_EQ(301, YGNodeLayoutGetWidth(root_child0)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0)); + + ASSERT_FLOAT_EQ(301, YGNodeLayoutGetLeft(root_child1)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1)); + + ASSERT_FLOAT_EQ(401, YGNodeLayoutGetLeft(root_child2)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2)); + ASSERT_FLOAT_EQ(99, YGNodeLayoutGetWidth(root_child2)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2)); + + YGNodeFreeRecursive(root); + + YGConfigFree(config); +} + +TEST(YogaTest, flex_shrink_flex_grow_min_width) { + const YGConfigRef config = YGConfigNew(); + YGConfigSetUseWebDefaults(config, true); + + const YGNodeRef root = YGNodeNewWithConfig(config); + YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow); + YGNodeStyleSetWidth(root, 500); + YGNodeStyleSetHeight(root, 500); + + const YGNodeRef root_child0 = YGNodeNewWithConfig(config); + YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow); + YGNodeStyleSetFlexGrow(root_child0, 0); + YGNodeStyleSetFlexShrink(root_child0, 1); + YGNodeStyleSetWidth(root_child0, 100); + YGNodeStyleSetMinWidth(root_child0, 301); + YGNodeStyleSetHeight(root_child0, 100); + YGNodeInsertChild(root, root_child0, 0); + + const YGNodeRef root_child1 = YGNodeNewWithConfig(config); + YGNodeStyleSetFlexDirection(root_child1, YGFlexDirectionRow); + YGNodeStyleSetFlexGrow(root_child1, 1); + YGNodeStyleSetFlexShrink(root_child1, 1); + YGNodeStyleSetWidth(root_child1, 100); + YGNodeStyleSetMinWidth(root_child1, 25); + YGNodeStyleSetHeight(root_child1, 100); + YGNodeInsertChild(root, root_child1, 1); + + const YGNodeRef root_child2 = YGNodeNewWithConfig(config); + YGNodeStyleSetFlexDirection(root_child2, YGFlexDirectionRow); + YGNodeStyleSetWidth(root_child2, 100); + YGNodeStyleSetHeight(root_child2, 100); + YGNodeStyleSetFlexShrink(root_child2, 1); + YGNodeStyleSetFlexGrow(root_child2, 1); + YGNodeInsertChild(root, root_child2, 2); + + YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); + ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root)); + ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); + ASSERT_FLOAT_EQ(301, YGNodeLayoutGetWidth(root_child0)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0)); + + ASSERT_FLOAT_EQ(301, YGNodeLayoutGetLeft(root_child1)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1)); + + ASSERT_FLOAT_EQ(401, YGNodeLayoutGetLeft(root_child2)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2)); + ASSERT_FLOAT_EQ(99, YGNodeLayoutGetWidth(root_child2)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2)); + + YGNodeFreeRecursive(root); + + YGConfigFree(config); +} From 5eba2d42bd6fde1092439cbc3388ae0a3cc561d9 Mon Sep 17 00:00:00 2001 From: Gavin Weng Date: Mon, 6 Apr 2020 11:45:21 -0700 Subject: [PATCH 245/347] Enhance build process (#994) Summary: Pull Request resolved: https://github.com/facebook/yoga/pull/994 After building yoga aar, we found several issues: 1. More dynamic so files. This is bad as lower-end Android devices cannot load that many sos. 2. Size increase. 3. (Minor) The libs are stored in asset folder rather than "libs/". We apply the following optimizations: 1. Remove dependency on memalign16 (this is brought in by a pure header dependency jni-hack); 2. Enable native relinker to remove unused symbols in the so files. 3. Link yogacore statically to reduce size churn. Reviewed By: SidharthGuglani Differential Revision: D20808623 fbshipit-source-id: 6c6bbd4f71b6bf6ad272ec05dd56696ddb14a8e0 --- BUCK | 14 ++++++++++++++ android/BUCK | 1 + java/BUCK | 4 ++-- testutil/BUCK | 14 +++++++++++++- 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/BUCK b/BUCK index fa0e5580..eb96206f 100644 --- a/BUCK +++ b/BUCK @@ -40,6 +40,20 @@ yoga_cxx_library( ], ) +yoga_cxx_library( + name = "yoga-static", + srcs = glob(["yoga/**/*.cpp"]), + compiler_flags = LIBRARY_COMPILER_FLAGS, + preferred_linkage = "static", + public_include_directories = ["."], + raw_headers = glob(["yoga/**/*.h"]), + tests = [":YogaTests"], + visibility = ["PUBLIC"], + deps = [ + ":ndklog", + ], +) + yoga_cxx_library( name = "yogaForDebug", srcs = glob(["yoga/**/*.cpp"]), diff --git a/android/BUCK b/android/BUCK index 6acb3325..72548072 100644 --- a/android/BUCK +++ b/android/BUCK @@ -7,6 +7,7 @@ load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID_JAVA_TARGET", "ANDROID_RES yoga_android_aar( name = "android", + enable_relinker = True, manifest_skeleton = "src/main/AndroidManifest.xml", visibility = [ "PUBLIC", diff --git a/java/BUCK b/java/BUCK index 221e8265..d08cb37b 100644 --- a/java/BUCK +++ b/java/BUCK @@ -7,7 +7,7 @@ load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID", "CXX_LIBRARY_WHITELIST", CXX_LIBRARY_WHITELIST_FOR_TESTS = CXX_LIBRARY_WHITELIST + [ yoga_cxx_lib("testutil:jni"), - yoga_cxx_lib("testutil:testutil"), + yoga_cxx_lib("testutil:testutil-jni"), ] YOGA_JAVA_IMPLEMENTATION_FILES = [ @@ -54,7 +54,7 @@ yoga_cxx_library( visibility = ["PUBLIC"], deps = [ JNI_TARGET, - yoga_dep(":yoga"), + yoga_dep(":yoga-static"), ":ndklog", ], ) diff --git a/testutil/BUCK b/testutil/BUCK index 56ee97fe..acbabc11 100644 --- a/testutil/BUCK +++ b/testutil/BUCK @@ -11,6 +11,18 @@ yoga_cxx_library( deps = [yoga_dep(":yoga")], ) +yoga_cxx_library( + name = "testutil-jni", + srcs = ["src/main/cpp/testutil/testutil.cpp"], + header_namespace = "", + exported_headers = subdir_glob([("src/main/cpp/include", "yoga/testutil/testutil.h")]), + compiler_flags = LIBRARY_COMPILER_FLAGS, + platforms = ANDROID, + soname = "libyoga_testutil.$(ext)", + visibility = ["PUBLIC"], + deps = [yoga_dep("java:jni")], +) + yoga_java_library( name = "java", srcs = ["src/main/java/com/facebook/yoga/TestUtil.java"], @@ -32,7 +44,7 @@ yoga_cxx_library( soname = "libyoga_testutil_jni.$(ext)", visibility = ["PUBLIC"], deps = [ - ":testutil", + ":testutil-jni", FBJNI_TARGET, ], ) From be51bc44a48da64c346309995b443c96610b43a1 Mon Sep 17 00:00:00 2001 From: Gavin Weng Date: Mon, 6 Apr 2020 19:51:09 -0700 Subject: [PATCH 246/347] Revert Name Change for FBLite Summary: To unblock Reviewed By: Arieg419 Differential Revision: D20879886 fbshipit-source-id: 428f9147e540b94dec7f72a7f844949722165a07 --- java/BUCK | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/BUCK b/java/BUCK index d08cb37b..034024cd 100644 --- a/java/BUCK +++ b/java/BUCK @@ -54,7 +54,7 @@ yoga_cxx_library( visibility = ["PUBLIC"], deps = [ JNI_TARGET, - yoga_dep(":yoga-static"), + yoga_dep(":yoga"), ":ndklog", ], ) From 8c53c2dcca9a7acf3733c00e5820f5a18f075024 Mon Sep 17 00:00:00 2001 From: George Zahariev Date: Thu, 9 Apr 2020 10:55:48 -0700 Subject: [PATCH 247/347] Upgrade Prettier in Xplat to version 1.19.1 Summary: Upgrades Prettier in Xplat to 1.19.1 Ignores upgrading packages on already on versions greater than 1.19.1 Changelog: [Internal] allow-large-files bypass-lint (Note: this ignores all push blocking failures!) Reviewed By: gkz, cpojer Differential Revision: D20879147 fbshipit-source-id: 0deee7ac941e91e1c3c3a1e7d3d3ed20de1d657d --- website/package.json | 2 +- website/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/website/package.json b/website/package.json index 442b13f6..53445418 100644 --- a/website/package.json +++ b/website/package.json @@ -32,6 +32,6 @@ "develop": "gatsby develop" }, "devDependencies": { - "prettier": "1.17.0" + "prettier": "1.19.1" } } diff --git a/website/yarn.lock b/website/yarn.lock index 509efeca..fa5a26e2 100644 --- a/website/yarn.lock +++ b/website/yarn.lock @@ -6978,10 +6978,10 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" -prettier@1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.17.0.tgz#53b303676eed22cc14a9f0cec09b477b3026c008" - integrity sha512-sXe5lSt2WQlCbydGETgfm1YBShgOX4HxQkFPvbxkcwgDvGDeqVau8h+12+lmSVlP3rHPz0oavfddSZg/q+Szjw== +prettier@1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== pretty-bytes@^4.0.2: version "4.0.2" From f7bc0ad2489c1b09d0cc0d53f668861f5d7875a0 Mon Sep 17 00:00:00 2001 From: George Zahariev Date: Thu, 9 Apr 2020 10:55:48 -0700 Subject: [PATCH 248/347] Upgrade Prettier in Xplat to version 1.19.1: format files Summary: Part two of D20879147 where we update the versions of Prettier used in Xplat. I will stack land the diffs. Here, we format all the files, and use the drop conflicts flag. After this lands, I will go and format the files which had conflicts again. Changelog: [Internal] drop-conflicts bypass-lint allow-large-files Reviewed By: gkz Differential Revision: D20929844 fbshipit-source-id: 2c1df8966a48b5db4f890e2cc494cb1c69422b7d --- .../components/Playground/src/CodeLitho.js | 4 ++-- .../components/Playground/src/URLShortener.js | 4 +--- website/src/pages/docs/index.js | 21 +++++++++---------- 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/website/src/components/Playground/src/CodeLitho.js b/website/src/components/Playground/src/CodeLitho.js index 0e9f782b..66e89a3e 100644 --- a/website/src/components/Playground/src/CodeLitho.js +++ b/website/src/components/Playground/src/CodeLitho.js @@ -47,8 +47,8 @@ function dipOrPercent(value) { return value === 'auto' ? 'Auto' : typeof value === 'string' && /%$/.test(value) - ? 'Percent' - : 'Dip'; + ? 'Percent' + : 'Dip'; } function getValue(value) { diff --git a/website/src/components/Playground/src/URLShortener.js b/website/src/components/Playground/src/URLShortener.js index 77130a0f..27049801 100644 --- a/website/src/components/Playground/src/URLShortener.js +++ b/website/src/components/Playground/src/URLShortener.js @@ -52,9 +52,7 @@ export default class URLShortener extends Component<{}, State> { } fetch( - `https://cors-anywhere.herokuapp.com/tinyurl.com/api-create.php?url=${ - window.location.href - }`, + `https://cors-anywhere.herokuapp.com/tinyurl.com/api-create.php?url=${window.location.href}`, ) .then(res => res.text()) .then(shortURL => this.setState({shortURL, loading: false})) diff --git a/website/src/pages/docs/index.js b/website/src/pages/docs/index.js index 66e0a363..96dee1ae 100644 --- a/website/src/pages/docs/index.js +++ b/website/src/pages/docs/index.js @@ -49,17 +49,16 @@ export default ({data}) => ( ({node}) => node.fileAbsolutePath.indexOf(`/${category}/`) > -1, ) - .map( - ({node}) => - node.frontmatter.redirect ? ( - - {node.frontmatter.title} - - ) : ( - - {node.frontmatter.title} - - ), + .map(({node}) => + node.frontmatter.redirect ? ( + + {node.frontmatter.title} + + ) : ( + + {node.frontmatter.title} + + ), )} ), From e5743e851bde6611529a8c57401ad6445ca57b32 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Tue, 14 Apr 2020 02:04:17 -0700 Subject: [PATCH 249/347] Set width/height also to Undefined when we change the measure mode to Undefined Summary: Make sure width/height is always passed as Undefined when measure mode is changed to Undefined. Changelog: [Internal][Yoga] Set width and height as Undefined when we change measure mode to Undefined Reviewed By: alickbass Differential Revision: D20029838 fbshipit-source-id: b9931f6ddb13ffd1565889535ade5bbffbe0c304 --- yoga/Yoga.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index d916a45f..d6f4a114 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -1663,8 +1663,8 @@ static void YGNodeAbsoluteLayoutChild( static void YGNodeWithMeasureFuncSetMeasuredDimensions( const YGNodeRef node, - const float availableWidth, - const float availableHeight, + float availableWidth, + float availableHeight, const YGMeasureMode widthMeasureMode, const YGMeasureMode heightMeasureMode, const float ownerWidth, @@ -1677,6 +1677,13 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( node->hasMeasureFunc(), "Expected node to have custom measure function"); + if (widthMeasureMode == YGMeasureModeUndefined) { + availableWidth = YGUndefined; + } + if (heightMeasureMode == YGMeasureModeUndefined) { + availableHeight = YGUndefined; + } + const float paddingAndBorderAxisRow = YGNodePaddingAndBorderForAxis(node, YGFlexDirectionRow, ownerWidth); const float paddingAndBorderAxisColumn = From 9b96a5362a873935c50b444aa271927257c2f984 Mon Sep 17 00:00:00 2001 From: empyrical Date: Tue, 14 Apr 2020 16:39:32 -0700 Subject: [PATCH 250/347] Yoga Podspec: Export YGNode and YGStyle headers (#997) Summary: This pull request adds `YGNode.h` and `YGStyle.h` to the headers exported by Yoga's podspec. They are required by the new Fabric architecture of React Native. The modulemap and its umbrella header automatically generated by Cocoapods adds all exported headers to the `modulemap`. Having YGNode and YGStyle exported through here has problems, because they are only available in environments that have C++ available, and will produce errors otherwise. This pull request fences off the contents of those headers in an `#ifdef __cplusplus` block, so they will not cause errors when imported into environments where C++ isn't available. I had considered adding a custom modulemap to the podspec as part of this pull request, but this way seems the least "invasive", and this way you are able to add and remove exported headers in the podspec without needing to worry about updating the umbrella header at the same time. Changelog: [Internal] - Yoga Podspec: Export YGNore and YGStyle headers Pull Request resolved: https://github.com/facebook/yoga/pull/997 Reviewed By: hramos Differential Revision: D20966075 Pulled By: mdvacca fbshipit-source-id: 5f5caa6b639d11e660b968d681da9a4de6c0eb8e --- Yoga.podspec | 2 +- yoga/YGNode.h | 5 +++++ yoga/YGStyle.h | 5 +++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Yoga.podspec b/Yoga.podspec index 24e1c0b8..2b09977d 100644 --- a/Yoga.podspec +++ b/Yoga.podspec @@ -33,6 +33,6 @@ Pod::Spec.new do |spec| '-fPIC' ] spec.source_files = 'yoga/**/*.{c,h,cpp}' - spec.public_header_files = 'yoga/{Yoga,YGEnums,YGMacros,YGValue}.h' + spec.public_header_files = 'yoga/{Yoga,YGEnums,YGMacros,YGNode,YGStyle,YGValue}.h' end diff --git a/yoga/YGNode.h b/yoga/YGNode.h index 9aef1ec6..63d98fe3 100644 --- a/yoga/YGNode.h +++ b/yoga/YGNode.h @@ -6,6 +6,9 @@ */ #pragma once + +#ifdef __cplusplus + #include #include #include "BitUtils.h" @@ -330,3 +333,5 @@ public: bool isLayoutTreeEqualToNode(const YGNode& node) const; void reset(); }; + +#endif diff --git a/yoga/YGStyle.h b/yoga/YGStyle.h index 9bfbc442..aab7599c 100644 --- a/yoga/YGStyle.h +++ b/yoga/YGStyle.h @@ -6,6 +6,9 @@ */ #pragma once + +#ifdef __cplusplus + #include #include #include @@ -229,3 +232,5 @@ YOGA_EXPORT bool operator==(const YGStyle& lhs, const YGStyle& rhs); YOGA_EXPORT inline bool operator!=(const YGStyle& lhs, const YGStyle& rhs) { return !(lhs == rhs); } + +#endif From e637cf2d72654d4b125e84de86bbcd2f30604cf6 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 15 Apr 2020 00:47:07 -0700 Subject: [PATCH 251/347] Add Yoga also as a dependency of testutil-jni Summary: `scripts/deploy_jcenter.sh` was failing {F234018047} Added `yoga` also as a dependency of `testutil-jni` Reviewed By: gavinweng Differential Revision: D21017796 fbshipit-source-id: 0c34e7fc2373906441bd7805f5687b2c5dab6242 --- testutil/BUCK | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/testutil/BUCK b/testutil/BUCK index acbabc11..1a66f91b 100644 --- a/testutil/BUCK +++ b/testutil/BUCK @@ -20,7 +20,10 @@ yoga_cxx_library( platforms = ANDROID, soname = "libyoga_testutil.$(ext)", visibility = ["PUBLIC"], - deps = [yoga_dep("java:jni")], + deps = [ + yoga_dep("java:jni"), + yoga_dep(":yoga"), + ], ) yoga_java_library( From 92b76447b772e39d4ac209d25f123e9655be2f62 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Fri, 17 Apr 2020 05:25:22 -0700 Subject: [PATCH 252/347] use default value of enums YGDirection and YGMeasureMode instead of -1 Summary: Changelog: [Internal][Yoga] YGDirection variable was initialized incorrectly by casting -1 to YGDirection. Changing it to default value of direction Same for YGMeasureMode. Reviewed By: pasqualeanatriello Differential Revision: D20869042 fbshipit-source-id: 7bfe490193321baae875ef6fb49a938851950c9f --- yoga/YGLayout.h | 2 +- yoga/Yoga-internal.h | 8 ++++---- yoga/Yoga.cpp | 6 ++++-- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/yoga/YGLayout.h b/yoga/YGLayout.h index 30b8dd76..b7604d8e 100644 --- a/yoga/YGLayout.h +++ b/yoga/YGLayout.h @@ -36,7 +36,7 @@ public: // Instead of recomputing the entire layout every single time, we cache some // information to break early when nothing changed uint32_t generationCount = 0; - YGDirection lastOwnerDirection = (YGDirection) -1; + YGDirection lastOwnerDirection = YGDirectionInherit; uint32_t nextCachedMeasurementsIndex = 0; std::array diff --git a/yoga/Yoga-internal.h b/yoga/Yoga-internal.h index 0b3368a0..1a22f24c 100644 --- a/yoga/Yoga-internal.h +++ b/yoga/Yoga-internal.h @@ -54,10 +54,10 @@ struct YGCachedMeasurement { float computedHeight; YGCachedMeasurement() - : availableWidth(0), - availableHeight(0), - widthMeasureMode((YGMeasureMode) -1), - heightMeasureMode((YGMeasureMode) -1), + : availableWidth(-1), + availableHeight(-1), + widthMeasureMode(YGMeasureModeUndefined), + heightMeasureMode(YGMeasureModeUndefined), computedWidth(-1), computedHeight(-1) {} diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index d6f4a114..bb7da7bf 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -3821,8 +3821,10 @@ bool YGLayoutNodeInternal( if (needToVisitNode) { // Invalidate the cached results. layout->nextCachedMeasurementsIndex = 0; - layout->cachedLayout.widthMeasureMode = (YGMeasureMode) -1; - layout->cachedLayout.heightMeasureMode = (YGMeasureMode) -1; + layout->cachedLayout.availableWidth = -1; + layout->cachedLayout.availableHeight = -1; + layout->cachedLayout.widthMeasureMode = YGMeasureModeUndefined; + layout->cachedLayout.heightMeasureMode = YGMeasureModeUndefined; layout->cachedLayout.computedWidth = -1; layout->cachedLayout.computedHeight = -1; } From 1bd4123df1e493990fe96ab5bc459edfb5dada3b Mon Sep 17 00:00:00 2001 From: acton393 Date: Fri, 17 Apr 2020 05:43:28 -0700 Subject: [PATCH 253/347] fix typo as there is no file called YGJNI.cpp (#990) Summary: fix typo in `YogaJNIBase.java` as there is no such file called `YGJNI.cpp` Pull Request resolved: https://github.com/facebook/yoga/pull/990 Reviewed By: pasqualeanatriello Differential Revision: D20735102 Pulled By: SidharthGuglani fbshipit-source-id: 3f9f4d78ba390feae3451330f997a221ab4ec70e --- java/com/facebook/yoga/YogaNodeJNIBase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index e20a5389..406e75e5 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -15,7 +15,7 @@ import javax.annotation.Nullable; @DoNotStrip public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { - /* Those flags needs be in sync with YGJNI.cpp */ + /* Those flags needs be in sync with YGJNI.h */ private static final byte MARGIN = 1; private static final byte PADDING = 2; private static final byte BORDER = 4; From a96a36ef592eefc206053b95f4ace080f251850a Mon Sep 17 00:00:00 2001 From: Gavin Weng Date: Fri, 17 Apr 2020 17:31:39 -0700 Subject: [PATCH 254/347] Link yogacore statically into yoga Summary: A revert of D20879886. Reviewed By: iliagore Differential Revision: D20979490 fbshipit-source-id: cb37f931654450c408e72578abcc549f35727b07 --- java/BUCK | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/BUCK b/java/BUCK index 034024cd..d08cb37b 100644 --- a/java/BUCK +++ b/java/BUCK @@ -54,7 +54,7 @@ yoga_cxx_library( visibility = ["PUBLIC"], deps = [ JNI_TARGET, - yoga_dep(":yoga"), + yoga_dep(":yoga-static"), ":ndklog", ], ) From 884f147742771cea14fcfb1f4ac485b187e7c3fe Mon Sep 17 00:00:00 2001 From: Valentin Shergin Date: Mon, 20 Apr 2020 12:01:56 -0700 Subject: [PATCH 255/347] Fixed incorrect owner assignment in YGNode move constructor Summary: Assigning self as an owner makes a cycle which is obviously a bug. Changelog: [Internal] Small change in Yoga (should not affect RN). Reviewed By: SidharthGuglani Differential Revision: D21111423 fbshipit-source-id: 1835561c055ac827f5ce98a044f25aed0d1845a5 --- yoga/YGNode.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yoga/YGNode.cpp b/yoga/YGNode.cpp index c15af8de..23d5c40b 100644 --- a/yoga/YGNode.cpp +++ b/yoga/YGNode.cpp @@ -29,7 +29,7 @@ YGNode::YGNode(YGNode&& node) { config_ = node.config_; resolvedDimensions_ = node.resolvedDimensions_; for (auto c : children_) { - c->setOwner(c); + c->setOwner(this); } } From 83b27417ae6a1d577b1fddfa3c9433c2dc42a460 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 27 Apr 2020 14:38:51 -0700 Subject: [PATCH 256/347] Fix rounding error using double instead of float Summary: Changelog: [Internal] [Yoga] Use double instead of float during rounding process to prevent loss of precision. Reviewed By: mdvacca Differential Revision: D21227565 fbshipit-source-id: 380b57535a356624cda8dc2017871a4ef3c882d1 --- yoga/Yoga.cpp | 26 +++++++++++++------------- yoga/Yoga.h | 4 ++-- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index bb7da7bf..c2a5c286 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -3664,8 +3664,8 @@ static inline bool YGMeasureModeNewMeasureSizeIsStricterAndStillValid( } YOGA_EXPORT float YGRoundValueToPixelGrid( - const float value, - const float pointScaleFactor, + const double value, + const double pointScaleFactor, const bool forceCeil, const bool forceFloor) { double scaledValue = ((double) value) * pointScaleFactor; @@ -4081,24 +4081,24 @@ YOGA_EXPORT void YGConfigSetPointScaleFactor( static void YGRoundToPixelGrid( const YGNodeRef node, - const float pointScaleFactor, - const float absoluteLeft, - const float absoluteTop) { + const double pointScaleFactor, + const double absoluteLeft, + const double absoluteTop) { if (pointScaleFactor == 0.0f) { return; } - const float nodeLeft = node->getLayout().position[YGEdgeLeft]; - const float nodeTop = node->getLayout().position[YGEdgeTop]; + const double nodeLeft = node->getLayout().position[YGEdgeLeft]; + const double nodeTop = node->getLayout().position[YGEdgeTop]; - const float nodeWidth = node->getLayout().dimensions[YGDimensionWidth]; - const float nodeHeight = node->getLayout().dimensions[YGDimensionHeight]; + const double nodeWidth = node->getLayout().dimensions[YGDimensionWidth]; + const double nodeHeight = node->getLayout().dimensions[YGDimensionHeight]; - const float absoluteNodeLeft = absoluteLeft + nodeLeft; - const float absoluteNodeTop = absoluteTop + nodeTop; + const double absoluteNodeLeft = absoluteLeft + nodeLeft; + const double absoluteNodeTop = absoluteTop + nodeTop; - const float absoluteNodeRight = absoluteNodeLeft + nodeWidth; - const float absoluteNodeBottom = absoluteNodeTop + nodeHeight; + const double absoluteNodeRight = absoluteNodeLeft + nodeWidth; + const double absoluteNodeBottom = absoluteNodeTop + nodeHeight; // If a node has a custom measure function we never want to round down its // size as this could lead to unwanted text truncation. diff --git a/yoga/Yoga.h b/yoga/Yoga.h index 2fe60a41..87901a28 100644 --- a/yoga/Yoga.h +++ b/yoga/Yoga.h @@ -352,8 +352,8 @@ WIN_EXPORT void YGConfigSetContext(YGConfigRef config, void* context); WIN_EXPORT void* YGConfigGetContext(YGConfigRef config); WIN_EXPORT float YGRoundValueToPixelGrid( - float value, - float pointScaleFactor, + double value, + double pointScaleFactor, bool forceCeil, bool forceFloor); From ac7c85c0a629e5029d7e36304d4c02c71da0f41a Mon Sep 17 00:00:00 2001 From: Jon Janzen Date: Tue, 12 May 2020 11:44:50 -0700 Subject: [PATCH 257/347] Migrate CI from TravisCI to GitHub Actions (#1004) Summary: Migrate from TravisCI to GitHub Actions. Facebook employees can read about this migration [here](https://fburl.com/rfp033ou). CC: wittgenst Pull Request resolved: https://github.com/facebook/yoga/pull/1004 Test Plan: GitHub Actions CI on my personal GitHub: https://github.com/bigfootjon/yoga/runs/653755729 Reviewed By: passy Differential Revision: D21431309 Pulled By: bigfootjon fbshipit-source-id: 490a8679bc0cfec26b13c8c584a928f03c6e26e7 --- .github/workflows/ci.yml | 56 +++++++++++++++++++++++++++ .travis.yml | 77 ------------------------------------- scripts/publish-snapshot.sh | 12 +++--- 3 files changed, 62 insertions(+), 83 deletions(-) create mode 100644 .github/workflows/ci.yml delete mode 100644 .travis.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..ccb6b297 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,56 @@ +name: CI + +on: [push, pull_request] + +jobs: + website: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Setup Node.js + uses: actions/setup-node@v1 + with: + node-version: 8.x + - name: Install dependencies + run: yarn install --frozen-lockfile --ignore-scripts + working-directory: website + - name: Build + run: yarn build + working-directory: website + - name: Deploy + if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }} + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_branch: gh-pages + publish_dir: website/public + cname: yogalayout.com + keep_files: true + user_name: 'Yoga-bot' + user_email: 'yogabot@fb.com' + android: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Install dependencies + run: | + if [[ -n "$encrypted_d27e803291ff_iv" ]]; then + openssl aes-256-cbc -K $encrypted_d27e803291ff_key -iv $encrypted_d27e803291ff_iv -in scripts/setup-keys.enc -d >> gradle.properties; + fi + sudo apt-get update + sudo apt-get install -y ninja-build + pushd $HOME + git clone --depth 1 https://github.com/facebook/buck.git + cd buck + ant + popd + echo "::set-env name=PATH::$PATH:$HOME/buck/bin/" + export PATH=$PATH:$HOME/buck/bin/ + buck --version + export TERMINAL=dumb + source scripts/android-setup.sh && installAndroidSDK + echo "::set-env name=ANDROID_SDK::$ANDROID_HOME" + echo "::set-env name=ANDROID_NDK_REPOSITORY::$HOME/android-ndk" + echo "::set-env name=ANDROID_NDK_HOME::$ANDROID_NDK_REPOSITORY/android-ndk-r15c" + - name: Build + run: ./gradlew testDebugUnit && scripts/publish-snapshot.sh diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 3ae55d1f..00000000 --- a/.travis.yml +++ /dev/null @@ -1,77 +0,0 @@ -language: java -os: linux -dist: trusty -addons: - apt: - sources: - - llvm-toolchain-trusty-6.0 - - ubuntu-toolchain-r-test - packages: - - clang-6.0 - -env: - - TARGET: website - - TARGET: android - -install: -- cd website -- yarn --ignore-scripts -- cd .. - -cache: - directories: - - $HOME/buck - - $HOME/.gradle - -before_install: - - | - if [[ -n "$encrypted_d27e803291ff_iv" ]]; then - openssl aes-256-cbc -K $encrypted_d27e803291ff_key -iv $encrypted_d27e803291ff_iv -in scripts/setup-keys.enc -d >> gradle.properties; - fi - # Android - - | - if [[ $TARGET = "android" ]]; then - pushd $HOME - git clone --depth 1 https://github.com/facebook/buck.git - cd buck - ant - popd - export PATH=$PATH:$HOME/buck/bin/ - buck --version - export TERMINAL=dumb - source scripts/android-setup.sh && installAndroidSDK - export ANDROID_SDK=$ANDROID_HOME - export ANDROID_NDK_REPOSITORY=$HOME/android-ndk - export ANDROID_NDK_HOME=$ANDROID_NDK_REPOSITORY/android-ndk-r15c - fi - # Website - - | - if [[ $TARGET = "website" ]]; then - nvm install 8 - nvm use 8 - fi - -script: - - | - if [[ $TARGET = "android" ]]; then - ./gradlew testDebugUnit && scripts/publish-snapshot.sh - fi - - | - if [[ $TARGET = "website" ]]; then - pushd website - yarn build - popd - fi - -deploy: - provider: pages - skip-cleanup: true - github-token: $GITHUB_TOKEN - fqdn: yogalayout.com - local-dir: website/public - email: yogabot@fb.com - name: Yoga-bot - keep-history: true - on: - branch: master - condition: $TARGET = website diff --git a/scripts/publish-snapshot.sh b/scripts/publish-snapshot.sh index 02c45457..c494f97f 100755 --- a/scripts/publish-snapshot.sh +++ b/scripts/publish-snapshot.sh @@ -14,14 +14,14 @@ set -e BASEDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )" IS_SNAPSHOT="$(grep 'VERSION_NAME=[0-9\.]\+-SNAPSHOT' "$BASEDIR/gradle.properties")" -if [ "$TRAVIS_REPO_SLUG" != "facebook/yoga" ]; then - echo >&2 "Skipping repository. Expected project to be 'facebook/yoga', but was '$TRAVIS_REPO_SLUG'." +if [ "$GITHUB_REPOSITORY" != "facebook/yoga" ]; then + echo >&2 "Skipping repository. Expected project to be 'facebook/yoga', but was '$GITHUB_REPOSITORY'." exit -elif [ "$TRAVIS_BRANCH" != "master" ]; then - echo >&2 "Skipping build. Expected branch name to be 'master', but was '$TRAVIS_BRANCH'." +elif [ "$GITHUB_REF" != "refs/heads/master" ]; then + echo >&2 "Skipping build. Expected ref name to be 'refs/heads/master', but was '$GITHUB_REF'." exit -elif [ "$TRAVIS_PULL_REQUEST" != "false" ]; then - echo >&2 "Skipping build. Only considering non-PR builds, but URL was '$TRAVIS_PULL_REQUEST'." +elif [ "$GITHUB_EVENT_NAME" != "push" ]; then + echo >&2 "Skipping build. Only considering push builds, but event was '$GITHUB_EVENT_NAME'." exit elif [ "$IS_SNAPSHOT" == "" ]; then echo >&2 "Skipping build. Given build doesn't appear to be a SNAPSHOT release." From 07c0d539bdb3a248762d0a06fd3f622b278a7ecb Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Thu, 14 May 2020 06:32:13 -0700 Subject: [PATCH 258/347] throw std::logic_error instead of aborting the process and convert to java exception Summary: Changelog: [Internal][Yoga] throw std::logic_error instead of aborting the process and convert to java exception for jni layer Reviewed By: pasqualeanatriello Differential Revision: D21301235 fbshipit-source-id: 148b27920e62990a271e1d0df8c85a2cc42f4fd4 --- java/jni/YGJNIVanilla.cpp | 7 +++++++ tests/YGMeasureTest.cpp | 4 ++-- yoga/Utils.cpp | 4 ++++ yoga/Utils.h | 2 ++ yoga/Yoga.cpp | 6 +++--- yoga/log.cpp | 4 ---- 6 files changed, 18 insertions(+), 9 deletions(-) diff --git a/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp index 6e66c06e..698ab561 100644 --- a/java/jni/YGJNIVanilla.cpp +++ b/java/jni/YGJNIVanilla.cpp @@ -388,6 +388,13 @@ static void jni_YGNodeCalculateLayoutJNI( if (throwable.get()) { env->Throw(throwable.get()); } + } catch (const std::logic_error& ex) { + env->ExceptionClear(); + jclass cl = env->FindClass("Ljava/lang/IllegalStateException;"); + static const jmethodID methodId = facebook::yoga::vanillajni::getMethodId( + env, cl, "", "(Ljava/lang/String;)V"); + auto throwable = env->NewObject(cl, methodId, env->NewStringUTF(ex.what())); + env->Throw(static_cast(throwable)); } } diff --git a/tests/YGMeasureTest.cpp b/tests/YGMeasureTest.cpp index b5bbe5d4..e47607d4 100644 --- a/tests/YGMeasureTest.cpp +++ b/tests/YGMeasureTest.cpp @@ -580,7 +580,7 @@ TEST(YogaDeathTest, cannot_add_child_to_node_with_measure_func) { root->setMeasureFunc(_measure); const YGNodeRef root_child0 = YGNodeNew(); - ASSERT_DEATH(YGNodeInsertChild(root, root_child0, 0), "Cannot add child.*"); + ASSERT_THROW(YGNodeInsertChild(root, root_child0, 0), std::logic_error); YGNodeFree(root_child0); YGNodeFreeRecursive(root); } @@ -589,7 +589,7 @@ TEST(YogaDeathTest, cannot_add_nonnull_measure_func_to_non_leaf_node) { const YGNodeRef root = YGNodeNew(); const YGNodeRef root_child0 = YGNodeNew(); YGNodeInsertChild(root, root_child0, 0); - ASSERT_DEATH(root->setMeasureFunc(_measure), "Cannot set measure function.*"); + ASSERT_THROW(root->setMeasureFunc(_measure), std::logic_error); YGNodeFreeRecursive(root); } diff --git a/yoga/Utils.cpp b/yoga/Utils.cpp index 761f3515..f6e55d0d 100644 --- a/yoga/Utils.cpp +++ b/yoga/Utils.cpp @@ -65,3 +65,7 @@ YGFloatOptional YGFloatOptionalMax(YGFloatOptional op1, YGFloatOptional op2) { } return op1.isUndefined() ? op2 : op1; } + +void throwLogicalErrorWithMessage(const char* message) { + throw std::logic_error(message); +} diff --git a/yoga/Utils.h b/yoga/Utils.h index bce8dfca..e9edf2f9 100644 --- a/yoga/Utils.h +++ b/yoga/Utils.h @@ -141,3 +141,5 @@ inline YGFloatOptional YGResolveValueMargin( const float ownerSize) { return value.isAuto() ? YGFloatOptional{0} : YGResolveValue(value, ownerSize); } + +void throwLogicalErrorWithMessage(const char* message); diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index c2a5c286..91e09c15 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -249,9 +249,6 @@ YOGA_EXPORT YGNodeRef YGNodeClone(YGNodeRef oldNode) { static YGConfigRef YGConfigClone(const YGConfig& oldConfig) { const YGConfigRef config = new YGConfig(oldConfig); YGAssert(config != nullptr, "Could not allocate memory for config"); - if (config == nullptr) { - abort(); - } gConfigInstanceCount++; return config; } @@ -4341,6 +4338,7 @@ YOGA_EXPORT void YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviour( void YGAssert(const bool condition, const char* message) { if (!condition) { Log::log(YGNodeRef{nullptr}, YGLogLevelFatal, nullptr, "%s\n", message); + throwLogicalErrorWithMessage(message); } } @@ -4350,6 +4348,7 @@ void YGAssertWithNode( const char* message) { if (!condition) { Log::log(node, YGLogLevelFatal, nullptr, "%s\n", message); + throwLogicalErrorWithMessage(message); } } @@ -4359,6 +4358,7 @@ void YGAssertWithConfig( const char* message) { if (!condition) { Log::log(config, YGLogLevelFatal, nullptr, "%s\n", message); + throwLogicalErrorWithMessage(message); } } diff --git a/yoga/log.cpp b/yoga/log.cpp index fe6fbbc6..eb3da039 100644 --- a/yoga/log.cpp +++ b/yoga/log.cpp @@ -26,10 +26,6 @@ void vlog( va_list args) { YGConfig* logConfig = config != nullptr ? config : YGConfigGetDefault(); logConfig->log(logConfig, node, level, context, format, args); - - if (level == YGLogLevelFatal) { - abort(); - } } } // namespace From 4135420cba9540c2d5157dc42fecace4df59af45 Mon Sep 17 00:00:00 2001 From: Jon Janzen Date: Thu, 14 May 2020 12:19:37 -0700 Subject: [PATCH 259/347] Fix GitHub Actions secrets access (#1005) Summary: Ref: [Secrets documentation](https://help.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets#using-encrypted-secrets-in-a-workflow) In combination with setting the secrets in the GitHub settings, this should fully migrate yoga to GH actions. Pull Request resolved: https://github.com/facebook/yoga/pull/1005 Test Plan: GitHub Actions CI on the PR attached to this diff Reviewed By: SidharthGuglani Differential Revision: D21574995 Pulled By: bigfootjon fbshipit-source-id: e9ee6d7cf1ae131afdc3aa3778667f1e9b9de833 --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ccb6b297..c5f2c014 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,8 +34,8 @@ jobs: - uses: actions/checkout@v2 - name: Install dependencies run: | - if [[ -n "$encrypted_d27e803291ff_iv" ]]; then - openssl aes-256-cbc -K $encrypted_d27e803291ff_key -iv $encrypted_d27e803291ff_iv -in scripts/setup-keys.enc -d >> gradle.properties; + if [[ -n "${{ secrets.encrypted_d27e803291ff_iv }}" ]]; then + openssl aes-256-cbc -K ${{ secrets.encrypted_d27e803291ff_key }} -iv {{ secrets.encrypted_d27e803291ff_iv }} -in scripts/setup-keys.enc -d >> gradle.properties; fi sudo apt-get update sudo apt-get install -y ninja-build From ede65bbce4a45aa62d7cb78c8786a2c0eea69661 Mon Sep 17 00:00:00 2001 From: Steven Koeber Date: Thu, 4 Jun 2020 06:35:13 -0700 Subject: [PATCH 260/347] Buckification of Yoga build script Reviewed By: liorisraeli87, k21 Differential Revision: D21429174 fbshipit-source-id: f12c8349cc59398553773df7bc15f0f83bd571b4 --- lib/soloader/BUCK | 5 ++--- tools/build_defs/oss/yoga_defs.bzl | 3 +++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/soloader/BUCK b/lib/soloader/BUCK index 04e2f5ff..eaff4f68 100644 --- a/lib/soloader/BUCK +++ b/lib/soloader/BUCK @@ -3,10 +3,9 @@ # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -load("//tools/build_defs:fb_native_wrapper.bzl", "fb_native") -load("//tools/build_defs/oss:yoga_defs.bzl", "YOGA_ROOTS") +load("//tools/build_defs/oss:yoga_defs.bzl", "YOGA_ROOTS", "yoga_prebuilt_aar") -fb_native.android_prebuilt_aar( +yoga_prebuilt_aar( name = "soloader", aar = "soloader-0.5.1.aar", visibility = YOGA_ROOTS, diff --git a/tools/build_defs/oss/yoga_defs.bzl b/tools/build_defs/oss/yoga_defs.bzl index 253449b3..2c108c20 100644 --- a/tools/build_defs/oss/yoga_defs.bzl +++ b/tools/build_defs/oss/yoga_defs.bzl @@ -202,6 +202,9 @@ def yoga_prebuilt_cxx_library(*args, **kwargs): def yoga_prebuilt_jar(*args, **kwargs): native.prebuilt_jar(*args, **kwargs) +def yoga_prebuilt_aar(*args, **kwargs): + native.android_prebuilt_aar(*args, **kwargs) + def is_apple_platform(): return True From 633cdc908857a580e73bc209864cc227e25f78b4 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 8 Jun 2020 08:07:37 -0700 Subject: [PATCH 261/347] use fmod and YGDoubleEquals for double operations instead of float Summary: Changelog: [Internal][Yoga] Use double operations during rounding Reviewed By: mdvacca Differential Revision: D21840018 fbshipit-source-id: c5d17fcb8984b1da9832a15ccd4d628e8d742c6a --- yoga/Utils.cpp | 7 +++++++ yoga/Utils.h | 2 ++ yoga/Yoga.cpp | 16 ++++++++-------- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/yoga/Utils.cpp b/yoga/Utils.cpp index f6e55d0d..c4281b60 100644 --- a/yoga/Utils.cpp +++ b/yoga/Utils.cpp @@ -52,6 +52,13 @@ bool YGFloatsEqual(const float a, const float b) { return yoga::isUndefined(a) && yoga::isUndefined(b); } +bool YGDoubleEqual(const double a, const double b) { + if (!yoga::isUndefined(a) && !yoga::isUndefined(b)) { + return fabs(a - b) < 0.0001f; + } + return yoga::isUndefined(a) && yoga::isUndefined(b); +} + float YGFloatSanitize(const float val) { return yoga::isUndefined(val) ? 0 : val; } diff --git a/yoga/Utils.h b/yoga/Utils.h index e9edf2f9..57e1d45d 100644 --- a/yoga/Utils.h +++ b/yoga/Utils.h @@ -64,6 +64,8 @@ inline bool YGValueEqual( // difference between two floats is less than 0.0001f or both are undefined. bool YGFloatsEqual(const float a, const float b); +bool YGDoubleEqual(const double a, const double b); + float YGFloatMax(const float a, const float b); YGFloatOptional YGFloatOptionalMax( diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 91e09c15..cb06c10e 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -3668,7 +3668,7 @@ YOGA_EXPORT float YGRoundValueToPixelGrid( double scaledValue = ((double) value) * pointScaleFactor; // We want to calculate `fractial` such that `floor(scaledValue) = scaledValue // - fractial`. - float fractial = fmodf(scaledValue, 1.0f); + double fractial = fmod(scaledValue, 1.0f); if (fractial < 0) { // This branch is for handling negative numbers for `value`. // @@ -3687,10 +3687,10 @@ YOGA_EXPORT float YGRoundValueToPixelGrid( // - Finding the `floor`: -2.2 - fractial2 = -2.2 - 0.8 = -3 ++fractial; } - if (YGFloatsEqual(fractial, 0)) { + if (YGDoubleEqual(fractial, 0)) { // First we check if the value is already rounded scaledValue = scaledValue - fractial; - } else if (YGFloatsEqual(fractial, 1.0f)) { + } else if (YGDoubleEqual(fractial, 1.0f)) { scaledValue = scaledValue - fractial + 1.0f; } else if (forceCeil) { // Next we check if we need to use forced rounding @@ -3701,7 +3701,7 @@ YOGA_EXPORT float YGRoundValueToPixelGrid( // Finally we just round the value scaledValue = scaledValue - fractial + (!YGFloatIsUndefined(fractial) && - (fractial > 0.5f || YGFloatsEqual(fractial, 0.5f)) + (fractial > 0.5f || YGDoubleEqual(fractial, 0.5f)) ? 1.0f : 0.0f); } @@ -4113,11 +4113,11 @@ static void YGRoundToPixelGrid( // whole number, we don't have any fraction To verify if the result is close // to whole number we want to check both floor and ceil numbers const bool hasFractionalWidth = - !YGFloatsEqual(fmodf(nodeWidth * pointScaleFactor, 1.0), 0) && - !YGFloatsEqual(fmodf(nodeWidth * pointScaleFactor, 1.0), 1.0); + !YGDoubleEqual(fmod(nodeWidth * pointScaleFactor, 1.0), 0) && + !YGDoubleEqual(fmod(nodeWidth * pointScaleFactor, 1.0), 1.0); const bool hasFractionalHeight = - !YGFloatsEqual(fmodf(nodeHeight * pointScaleFactor, 1.0), 0) && - !YGFloatsEqual(fmodf(nodeHeight * pointScaleFactor, 1.0), 1.0); + !YGDoubleEqual(fmod(nodeHeight * pointScaleFactor, 1.0), 0) && + !YGDoubleEqual(fmod(nodeHeight * pointScaleFactor, 1.0), 1.0); node->setLayoutDimension( YGRoundValueToPixelGrid( From d74a1069a03c5e184209a43e883b406786d8bbd0 Mon Sep 17 00:00:00 2001 From: Stiopa Koltsov Date: Wed, 24 Jun 2020 12:15:15 -0700 Subject: [PATCH 262/347] xplat: Disable Starlark in several files Summary: Disable Starlark in several files which are not trivial to fix. Reviewed By: scottrice Differential Revision: D22202463 fbshipit-source-id: a3ff717f0f4b9cd7f492b8fcebdb91f232207222 --- java/BUCK | 2 ++ 1 file changed, 2 insertions(+) diff --git a/java/BUCK b/java/BUCK index d08cb37b..a658d7e9 100644 --- a/java/BUCK +++ b/java/BUCK @@ -1,3 +1,5 @@ +# BUILD FILE SYNTAX: PYTHON_DSL + # Copyright (c) Facebook, Inc. and its affiliates. # # This source code is licensed under the MIT license found in the From a93e5d63c9d26e378c07f3adfd86e16a4ca88143 Mon Sep 17 00:00:00 2001 From: Amir Shalem Date: Mon, 6 Jul 2020 03:41:19 -0700 Subject: [PATCH 263/347] Don't call config->setLogger(nullptr) directly to avoid having no logger at all Summary: Changelog: [Internal][Yoga] Don't call config->setLogger(nullptr) directly to avoid having no logger at all Broken in D14151037 (https://github.com/facebook/yoga/commit/05f36a835a3a66b1b8affcdb036ec47117a8d28f) when it started calling ``` config->setLogger(nullptr); ``` instead of going thru ``` YGConfigSetLogger(config, nullptr); ``` which does the right thing by setting the logger to its default value: https://www.internalfb.com/intern/diffusion/FBS/browsefile/master/xplat/yoga/yoga/Yoga.cpp?commit=835911317e8b3cf7da1866e40e1c79cda0690136&lines=4320-4330 Also by default YogaConfig always have a logger: https://www.internalfb.com/intern/diffusion/FBS/browsefile/master/xplat/yoga/yoga/Yoga.cpp?commit=835911317e8b3cf7da1866e40e1c79cda0690136&lines=335-343 Reviewed By: SidharthGuglani Differential Revision: D22387459 fbshipit-source-id: 4da91da87a696d38cc9d8db2acb5845d29398adb --- java/jni/YGJNIVanilla.cpp | 2 +- .../com/facebook/yoga/YogaLoggerTest.java | 52 +++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp index 698ab561..65343821 100644 --- a/java/jni/YGJNIVanilla.cpp +++ b/java/jni/YGJNIVanilla.cpp @@ -196,7 +196,7 @@ static void jni_YGConfigSetLoggerJNI( delete context; YGConfigSetContext(config, nullptr); } - config->setLogger(nullptr); + YGConfigSetLogger(config, nullptr); } } diff --git a/java/tests/com/facebook/yoga/YogaLoggerTest.java b/java/tests/com/facebook/yoga/YogaLoggerTest.java index 17316f6e..f88409d6 100644 --- a/java/tests/com/facebook/yoga/YogaLoggerTest.java +++ b/java/tests/com/facebook/yoga/YogaLoggerTest.java @@ -9,10 +9,62 @@ package com.facebook.yoga; import org.junit.Test; import java.lang.ref.WeakReference; +import java.util.List; +import java.util.ArrayList; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; public class YogaLoggerTest { + + @Test + public void testRemovingLoggerFromConfig() throws Exception { + final List logs = new ArrayList<>(); + + final YogaConfig config = YogaConfigFactory.create(); + YogaLogger logger = new YogaLogger() { + @Override + public void log(YogaLogLevel level, String message) { + logs.add(message); + } + }; + config.setLogger(logger); + + final YogaNode root = YogaNodeFactory.create(config); + root.setFlexDirection(YogaFlexDirection.ROW); + root.setAlignItems(YogaAlign.BASELINE); + + final YogaNode child1 = YogaNodeFactory.create(config); + root.addChildAt(child1, 0); + + final YogaNode child2 = YogaNodeFactory.create(config); + child2.setBaselineFunction(new YogaBaselineFunction() { + public float baseline(YogaNode node, float width, float height) { + return Float.NaN; + } + }); + root.addChildAt(child2, 1); + + assertEquals(logs.size(), 0); + try { + root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED); + fail("Expected calculateLayout to throw"); + } catch (IllegalStateException e) { + } + + assertEquals(logs.size(), 1); + + config.setLogger(null); + + try { + root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED); + fail("Expected calculateLayout to throw again"); + } catch (IllegalStateException e) { + } + + assertEquals(logs.size(), 1); + } + @Test public void testLoggerLeak() throws Exception { final YogaConfig config = YogaConfigFactory.create(); From 0767f4d10522677a0254613b8fe6466bc3b29534 Mon Sep 17 00:00:00 2001 From: Valentin Shergin Date: Tue, 14 Jul 2020 15:20:24 -0700 Subject: [PATCH 264/347] Using `YGPositionTypeAbsolute` value where we compare `absolute` vs `relative` Summary: Now Yoga.cpp does not use the `YGPositionTypeRelative` value/constant, it uses `YGPositionTypeAbsolute` instead. Now `YGPositionType` can only be `YGPositionTypeRelative` or `YGPositionTypeAbsolute`, so expressions `x == YGPositionTypeRelative` and `x != YGPositionTypeAbsolute` are equivalent. The reasoning behind the change is that in all cases we actually check a node to be (or not to be) `absolute`, not `relative`. This will make a difference in the coming diffs in the stack when we will introduce a new value for the type: `static`. We need to differentiate `static` and `relative` values t implement the `stacking context` feature in the W3C-compliant way (to fix bugs and avoid developer confusion). Read more here: https://developer.mozilla.org/en-US/docs/Web/CSS/position Changelog: [Internal] Internal change in Yoga. Reviewed By: SidharthGuglani Differential Revision: D22386733 fbshipit-source-id: 8e2c2b88b404660639f845783c8f93f0c62c0fbb --- yoga/YGNode.cpp | 5 ++++- yoga/Yoga.cpp | 12 ++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/yoga/YGNode.cpp b/yoga/YGNode.cpp index 23d5c40b..1ee1bde6 100644 --- a/yoga/YGNode.cpp +++ b/yoga/YGNode.cpp @@ -307,6 +307,9 @@ void YGNode::setPosition( const YGFlexDirection crossAxis = YGFlexDirectionCross(mainAxis, directionRespectingRoot); + // Here we should check for `YGPositionTypeStatic` and in this case zero inset + // properties (left, right, top, bottom, begin, end). + // https://www.w3.org/TR/css-position-3/#valdef-position-static const YGFloatOptional relativePositionMain = relativePosition(mainAxis, mainSize); const YGFloatOptional relativePositionCross = @@ -440,7 +443,7 @@ float YGNode::resolveFlexShrink() const { bool YGNode::isNodeFlexible() { return ( - (style_.positionType() == YGPositionTypeRelative) && + (style_.positionType() != YGPositionTypeAbsolute) && (resolveFlexGrow() != 0 || resolveFlexShrink() != 0)); } diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index cb06c10e..97e64075 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -1131,7 +1131,7 @@ static bool YGIsBaselineLayout(const YGNodeRef node) { const uint32_t childCount = YGNodeGetChildCount(node); for (uint32_t i = 0; i < childCount; i++) { const YGNodeRef child = YGNodeGetChild(node, i); - if (child->getStyle().positionType() == YGPositionTypeRelative && + if (child->getStyle().positionType() != YGPositionTypeAbsolute && child->getStyle().alignSelf() == YGAlignBaseline) { return true; } @@ -2505,7 +2505,7 @@ static void YGJustifyMainAxis( i < collectedFlexItemsValues.endOfLineIndex; i++) { const YGNodeRef child = node->getChild(i); - if (child->getStyle().positionType() == YGPositionTypeRelative) { + if (child->getStyle().positionType() != YGPositionTypeAbsolute) { if (child->marginLeadingValue(mainAxis).unit == YGUnitAuto) { numberOfAutoMarginsOnCurrentLine++; } @@ -2589,7 +2589,7 @@ static void YGJustifyMainAxis( // Now that we placed the element, we need to update the variables. // We need to do that only for relative elements. Absolute elements do not // take part in that phase. - if (childStyle.positionType() == YGPositionTypeRelative) { + if (childStyle.positionType() != YGPositionTypeAbsolute) { if (child->marginLeadingValue(mainAxis).unit == YGUnitAuto) { collectedFlexItemsValues.mainDim += collectedFlexItemsValues.remainingFreeSpace / @@ -3311,7 +3311,7 @@ static void YGNodelayoutImpl( if (child->getStyle().display() == YGDisplayNone) { continue; } - if (child->getStyle().positionType() == YGPositionTypeRelative) { + if (child->getStyle().positionType() != YGPositionTypeAbsolute) { if (child->getLineIndex() != i) { break; } @@ -3353,7 +3353,7 @@ static void YGNodelayoutImpl( if (child->getStyle().display() == YGDisplayNone) { continue; } - if (child->getStyle().positionType() == YGPositionTypeRelative) { + if (child->getStyle().positionType() != YGPositionTypeAbsolute) { switch (YGNodeAlignItem(node, child)) { case YGAlignFlexStart: { child->setLayoutPosition( @@ -3544,7 +3544,7 @@ static void YGNodelayoutImpl( if (performLayout && node->getStyle().flexWrap() == YGWrapWrapReverse) { for (uint32_t i = 0; i < childCount; i++) { const YGNodeRef child = YGNodeGetChild(node, i); - if (child->getStyle().positionType() == YGPositionTypeRelative) { + if (child->getStyle().positionType() != YGPositionTypeAbsolute) { child->setLayoutPosition( node->getLayout().measuredDimensions[dim[crossAxis]] - child->getLayout().position[pos[crossAxis]] - From 16f676eccff0da229ba9ab97c96c4973b01b6750 Mon Sep 17 00:00:00 2001 From: Stanislau Hlebik Date: Fri, 17 Jul 2020 17:07:23 -0700 Subject: [PATCH 265/347] remediation of S205607 fbshipit-source-id: 5113fe0c527595e4227ff827253b7414abbdf7ac --- .../Facebook.Yoga.Android.Tests/Resources/Resource.designer.cs | 1 + .../Android/Facebook.Yoga.Android/Resources/Resource.designer.cs | 1 + csharp/nuget/_._ | 1 + 3 files changed, 3 insertions(+) diff --git a/csharp/Android/Facebook.Yoga.Android.Tests/Resources/Resource.designer.cs b/csharp/Android/Facebook.Yoga.Android.Tests/Resources/Resource.designer.cs index e69de29b..56de9c5e 100644 --- a/csharp/Android/Facebook.Yoga.Android.Tests/Resources/Resource.designer.cs +++ b/csharp/Android/Facebook.Yoga.Android.Tests/Resources/Resource.designer.cs @@ -0,0 +1 @@ +S205607 diff --git a/csharp/Android/Facebook.Yoga.Android/Resources/Resource.designer.cs b/csharp/Android/Facebook.Yoga.Android/Resources/Resource.designer.cs index e69de29b..56de9c5e 100644 --- a/csharp/Android/Facebook.Yoga.Android/Resources/Resource.designer.cs +++ b/csharp/Android/Facebook.Yoga.Android/Resources/Resource.designer.cs @@ -0,0 +1 @@ +S205607 diff --git a/csharp/nuget/_._ b/csharp/nuget/_._ index e69de29b..56de9c5e 100644 --- a/csharp/nuget/_._ +++ b/csharp/nuget/_._ @@ -0,0 +1 @@ +S205607 From 5ac5624e3fc872bb9e3a899e42f77602539b8fae Mon Sep 17 00:00:00 2001 From: Stanislau Hlebik Date: Fri, 17 Jul 2020 17:07:23 -0700 Subject: [PATCH 266/347] remediation of S205607 fbshipit-source-id: 798decc90db4f13770e97cdce3c0df7d5421b2a3 --- .../Facebook.Yoga.Android.Tests/Resources/Resource.designer.cs | 1 - .../Android/Facebook.Yoga.Android/Resources/Resource.designer.cs | 1 - csharp/nuget/_._ | 1 - 3 files changed, 3 deletions(-) diff --git a/csharp/Android/Facebook.Yoga.Android.Tests/Resources/Resource.designer.cs b/csharp/Android/Facebook.Yoga.Android.Tests/Resources/Resource.designer.cs index 56de9c5e..e69de29b 100644 --- a/csharp/Android/Facebook.Yoga.Android.Tests/Resources/Resource.designer.cs +++ b/csharp/Android/Facebook.Yoga.Android.Tests/Resources/Resource.designer.cs @@ -1 +0,0 @@ -S205607 diff --git a/csharp/Android/Facebook.Yoga.Android/Resources/Resource.designer.cs b/csharp/Android/Facebook.Yoga.Android/Resources/Resource.designer.cs index 56de9c5e..e69de29b 100644 --- a/csharp/Android/Facebook.Yoga.Android/Resources/Resource.designer.cs +++ b/csharp/Android/Facebook.Yoga.Android/Resources/Resource.designer.cs @@ -1 +0,0 @@ -S205607 diff --git a/csharp/nuget/_._ b/csharp/nuget/_._ index 56de9c5e..e69de29b 100644 --- a/csharp/nuget/_._ +++ b/csharp/nuget/_._ @@ -1 +0,0 @@ -S205607 From fc88b2f774f0ab9090d7ca15de6680f26d7285ad Mon Sep 17 00:00:00 2001 From: Valentin Shergin Date: Mon, 20 Jul 2020 00:31:15 -0700 Subject: [PATCH 267/347] Introducing `YGPositionTypeStatic` Summary: Changelog: [Internal] Fabric-specific internal change. This diff introduces a new value for `YGPositionType`: `YGPositionTypeStatic`. No part of Yoga, RN, Litho or CK uses this value yet. `relative` and `static` values behave the same way for now. We also do not change any defaults. So, it should be fine. Reviewed By: SidharthGuglani Differential Revision: D22386732 fbshipit-source-id: 39cd9e818458ac2a91efb175f24a74c8c303ff08 --- gentest/gentest-cs.js | 3 ++- java/com/facebook/yoga/YogaPositionType.java | 10 ++++++---- tests/YGDefaultValuesTest.cpp | 2 +- tests/YGStyleAccessorsTest.cpp | 5 +++-- yoga/YGEnums.cpp | 2 ++ yoga/YGEnums.h | 6 +++++- 6 files changed, 19 insertions(+), 9 deletions(-) diff --git a/gentest/gentest-cs.js b/gentest/gentest-cs.js index 2e276180..f0cbd7fb 100644 --- a/gentest/gentest-cs.js +++ b/gentest/gentest-cs.js @@ -120,8 +120,9 @@ CSEmitter.prototype = Object.create(Emitter.prototype, { YGOverflowHidden:{value:'YogaOverflow.Hidden'}, YGOverflowVisible:{value:'YogaOverflow.Visible'}, - YGPositionTypeAbsolute:{value:'YogaPositionType.Absolute'}, + YGPositionTypeAbsolute:{value:'YogaPositionType.Static'}, YGPositionTypeRelative:{value:'YogaPositionType.Relative'}, + YGPositionTypeAbsolute:{value:'YogaPositionType.Absolute'}, YGUndefined:{value:'YogaConstants.Undefined'}, diff --git a/java/com/facebook/yoga/YogaPositionType.java b/java/com/facebook/yoga/YogaPositionType.java index 00354f5c..d61c3244 100644 --- a/java/com/facebook/yoga/YogaPositionType.java +++ b/java/com/facebook/yoga/YogaPositionType.java @@ -8,8 +8,9 @@ package com.facebook.yoga; public enum YogaPositionType { - RELATIVE(0), - ABSOLUTE(1); + STATIC(0), + RELATIVE(1), + ABSOLUTE(2); private final int mIntValue; @@ -23,8 +24,9 @@ public enum YogaPositionType { public static YogaPositionType fromInt(int value) { switch (value) { - case 0: return RELATIVE; - case 1: return ABSOLUTE; + case 0: return STATIC; + case 1: return RELATIVE; + case 2: return ABSOLUTE; default: throw new IllegalArgumentException("Unknown enum value: " + value); } } diff --git a/tests/YGDefaultValuesTest.cpp b/tests/YGDefaultValuesTest.cpp index 249a7605..a622c1b3 100644 --- a/tests/YGDefaultValuesTest.cpp +++ b/tests/YGDefaultValuesTest.cpp @@ -20,7 +20,7 @@ TEST(YogaTest, assert_default_values) { ASSERT_EQ(YGAlignFlexStart, YGNodeStyleGetAlignContent(root)); ASSERT_EQ(YGAlignStretch, YGNodeStyleGetAlignItems(root)); ASSERT_EQ(YGAlignAuto, YGNodeStyleGetAlignSelf(root)); - ASSERT_EQ(YGPositionTypeRelative, YGNodeStyleGetPositionType(root)); + ASSERT_EQ(YGPositionTypeStatic, YGNodeStyleGetPositionType(root)); ASSERT_EQ(YGWrapNoWrap, YGNodeStyleGetFlexWrap(root)); ASSERT_EQ(YGOverflowVisible, YGNodeStyleGetOverflow(root)); ASSERT_FLOAT_EQ(0, YGNodeStyleGetFlexGrow(root)); diff --git a/tests/YGStyleAccessorsTest.cpp b/tests/YGStyleAccessorsTest.cpp index 541f354f..d0bda431 100644 --- a/tests/YGStyleAccessorsTest.cpp +++ b/tests/YGStyleAccessorsTest.cpp @@ -132,9 +132,10 @@ ACCESSOR_TEST( ACCESSOR_TEST( positionType, - YGPositionTypeRelative, + YGPositionTypeStatic, YGPositionTypeAbsolute, - YGPositionTypeRelative) + YGPositionTypeRelative, + YGPositionTypeStatic) ACCESSOR_TEST( flexWrap, diff --git a/yoga/YGEnums.cpp b/yoga/YGEnums.cpp index 3c130129..c01d3d94 100644 --- a/yoga/YGEnums.cpp +++ b/yoga/YGEnums.cpp @@ -179,6 +179,8 @@ const char* YGOverflowToString(const YGOverflow value) { const char* YGPositionTypeToString(const YGPositionType value) { switch (value) { + case YGPositionTypeStatic: + return "static"; case YGPositionTypeRelative: return "relative"; case YGPositionTypeAbsolute: diff --git a/yoga/YGEnums.h b/yoga/YGEnums.h index 4241281d..3dc458dc 100644 --- a/yoga/YGEnums.h +++ b/yoga/YGEnums.h @@ -128,7 +128,11 @@ YG_ENUM_SEQ_DECL( YGOverflowHidden, YGOverflowScroll) -YG_ENUM_SEQ_DECL(YGPositionType, YGPositionTypeRelative, YGPositionTypeAbsolute) +YG_ENUM_SEQ_DECL( + YGPositionType, + YGPositionTypeStatic, + YGPositionTypeRelative, + YGPositionTypeAbsolute) YG_ENUM_DECL( YGPrintOptions, From 084d5935e6f6bf7306ad8041bdc2f097889b8e58 Mon Sep 17 00:00:00 2001 From: Thomas Nardone Date: Mon, 3 Aug 2020 09:26:28 -0700 Subject: [PATCH 268/347] Tweak stdlib imports in event, utils Summary: Changelog: [Internal][Fixed] - Tweaked stdlib imports Reviewed By: SidharthGuglani Differential Revision: D22860196 fbshipit-source-id: fc0fc1bf05ebbfae7e86bce5e960e58d5944ee5c --- yoga/Utils.cpp | 1 + yoga/event/event.cpp | 1 - yoga/event/event.h | 1 + 3 files changed, 2 insertions(+), 1 deletion(-) diff --git a/yoga/Utils.cpp b/yoga/Utils.cpp index c4281b60..edb198d2 100644 --- a/yoga/Utils.cpp +++ b/yoga/Utils.cpp @@ -6,6 +6,7 @@ */ #include "Utils.h" +#include using namespace facebook; diff --git a/yoga/event/event.cpp b/yoga/event/event.cpp index 2b07e381..3af3e83a 100644 --- a/yoga/event/event.cpp +++ b/yoga/event/event.cpp @@ -8,7 +8,6 @@ #include "event.h" #include #include -#include namespace facebook { namespace yoga { diff --git a/yoga/event/event.h b/yoga/event/event.h index 309dacb5..404ec376 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -11,6 +11,7 @@ #include #include #include +#include struct YGConfig; struct YGNode; From e1c9d8800e8d4f0edb11010da6270707a166e2ed Mon Sep 17 00:00:00 2001 From: Jiawei Lv Date: Tue, 11 Aug 2020 17:09:47 -0700 Subject: [PATCH 269/347] Assign test_ownership_2020 as owner for unowned java tests in fbandroid Summary: Changelog: [Internal] Reviewed By: IanChilds Differential Revision: D22980855 fbshipit-source-id: d5e394f16eaf0e50367b95b1eec98024b906d3d9 --- java/BUCK | 1 + 1 file changed, 1 insertion(+) diff --git a/java/BUCK b/java/BUCK index a658d7e9..fa0250a3 100644 --- a/java/BUCK +++ b/java/BUCK @@ -110,6 +110,7 @@ yoga_java_library( yoga_java_test( name = "tests", srcs = glob(["tests/**/*.java"]), + contacts = ["oncall+yoga@xmail.facebook.com"], cxx_library_whitelist = CXX_LIBRARY_WHITELIST_FOR_TESTS, use_cxx_libraries = True, visibility = ["PUBLIC"], From e0ae96368c966d1fb5f8ad3de852050c95621a79 Mon Sep 17 00:00:00 2001 From: Paco Estevez Garcia Date: Fri, 28 Aug 2020 06:30:53 -0700 Subject: [PATCH 270/347] Add DoNotStripAny Summary: This diff adds an annotation that also prevents stripping methods, fields and static blocks. This is necessary for D23373168 to be OSS'd Reviewed By: SidharthGuglani Differential Revision: D23395925 fbshipit-source-id: 8456234cb75b15ae87580835e76f8e251ba09a9b --- .../proguard/annotations/DoNotStripAny.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 java/proguard-annotations/src/main/java/com/facebook/proguard/annotations/DoNotStripAny.java diff --git a/java/proguard-annotations/src/main/java/com/facebook/proguard/annotations/DoNotStripAny.java b/java/proguard-annotations/src/main/java/com/facebook/proguard/annotations/DoNotStripAny.java new file mode 100644 index 00000000..48f71f2b --- /dev/null +++ b/java/proguard-annotations/src/main/java/com/facebook/proguard/annotations/DoNotStripAny.java @@ -0,0 +1,24 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.proguard.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.RetentionPolicy.CLASS; + +/** + * Add this annotation to a class to instruct Proguard to not strip it or any of its fields or + * methods out. + * + *

This is useful for methods called via reflection that could appear as unused to Proguard. + */ +@Target({ElementType.TYPE}) +@Retention(CLASS) +public @interface DoNotStripAny {} From f350c7a58e59aea8586f38b5d5e9654ae79da6c6 Mon Sep 17 00:00:00 2001 From: Panagiotis Vekris Date: Thu, 10 Sep 2020 16:00:22 -0700 Subject: [PATCH 271/347] explicitly set types_first=false in flowconfigs Summary: In Flow version 0.134, [types-first](https://flow.org/en/docs/lang/types-first/) will become the default mode for Flow. Given that this mode might introduce some errors due to missing annotations, we're pinning the previously default mode, to avoid introducing new errors. Note that in Jan 2021 we will be removing support for Flow classic mode. * Documentation for properly upgrading to types-first: https://flow.org/en/docs/cli/annotate-exports/ * Announcement post: https://medium.com/flow-type/types-first-a-scalable-new-architecture-for-flow-3d8c7ba1d4eb Reviewed By: mroch Differential Revision: D23606450 fbshipit-source-id: f849275269974e17c0ebe00885e387ccd9956b6d --- javascript/.flowconfig | 1 + website/.flowconfig | 1 + 2 files changed, 2 insertions(+) diff --git a/javascript/.flowconfig b/javascript/.flowconfig index 1fed4453..6a0c16ae 100644 --- a/javascript/.flowconfig +++ b/javascript/.flowconfig @@ -7,5 +7,6 @@ [lints] [options] +types_first=false [strict] diff --git a/website/.flowconfig b/website/.flowconfig index 1fed4453..6a0c16ae 100644 --- a/website/.flowconfig +++ b/website/.flowconfig @@ -7,5 +7,6 @@ [lints] [options] +types_first=false [strict] From 64e245942786227b2f97ccfa5c30ce5c4fd62d79 Mon Sep 17 00:00:00 2001 From: simek Date: Mon, 28 Sep 2020 21:24:45 -0700 Subject: [PATCH 272/347] remove most of tvOS remnants from the code (#29407) Summary: Refs: [0.62 release](https://reactnative.dev/blog/#moving-apple-tv-to-react-native-tvos), https://github.com/facebook/react-native/issues/28706, https://github.com/facebook/react-native/issues/28743, https://github.com/facebook/react-native/issues/29018 This PR removes most of the tvOS remnants in the code. Most of the changes are related to the tvOS platform removal from `.podspec` files, tvOS specific conditionals removal (Obj-C + JS) or tvOS CI/testing pipeline related code. In addition to the changes listed above I have removed the deprecated `Platform.isTVOS` method. I'm not sure how `Platform.isTV` method is correlated with Android TV devices support which is technically not deprecated in the core so I left this method untouched for now. ## Changelog * **[Internal] [Removed]** - remove most of tvOS remnants from the code: * `TVEventHandler`, `TVTouchable`, `RCTTVView`, `RCTTVRemoteHandler` and `RCTTVNavigationEventEmitter` * **[Internal] [Removed]** - remove `TARGET_TV_OS` flag and all the usages * **[iOS] [Removed]** - remove deprecated `Platform.isTVOS` method * **[iOS] [Removed]** - remove deprecated and TV related props from View: * `isTVSelectable`, `hasTVPreferredFocus` and `tvParallaxProperties` * **[iOS] [Removed]** - remove `BackHandler` utility implementation Pull Request resolved: https://github.com/facebook/react-native/pull/29407 Test Plan: Local tests (and iOS CI run) do not yield any errors, but I'm not sure how the CI pipeline would react to those changes. That is the reason why this PR is being posted as Draft. Some tweaks and code adjustment could be required. Reviewed By: PeteTheHeat Differential Revision: D22619441 Pulled By: shergin fbshipit-source-id: 9aaf3840c5e8bd469c2cfcfa7c5b441ef71b30b6 --- ReactYoga.xcodeproj/project.pbxproj | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/ReactYoga.xcodeproj/project.pbxproj b/ReactYoga.xcodeproj/project.pbxproj index 715c686a..090c6e09 100644 --- a/ReactYoga.xcodeproj/project.pbxproj +++ b/ReactYoga.xcodeproj/project.pbxproj @@ -191,7 +191,6 @@ 27595AD71E575C7800CCE2B1 /* SampleCxxModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0D41E03699D0018521A /* SampleCxxModule.h */; }; 27595AD81E575C7800CCE2B1 /* SystraceSection.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0D51E03699D0018521A /* SystraceSection.h */; }; 2D0EB9F32021067800CAF88A /* RCTUIUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = F1EFDA4E201F660F00EE6E4C /* RCTUIUtils.m */; }; - 2D16E68E1FA4FD3900B85C8A /* RCTTVNavigationEventEmitter.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D0B842D1EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.h */; }; 2D1D83CE1F74E2DA00615550 /* libdouble-conversion.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D383D621EBD27B9005632C8 /* libdouble-conversion.a */; }; 2D3B5E931D9B087300451313 /* RCTErrorInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EDCA8A41D3591E700450C31 /* RCTErrorInfo.m */; }; 2D3B5E941D9B087900451313 /* RCTBundleURLProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 68EFE4ED1CF6EB3900A1DE13 /* RCTBundleURLProvider.m */; }; @@ -269,8 +268,6 @@ 3D0B842A1EC0B49400B2BD8E /* RCTTVRemoteHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D0B84281EC0B49400B2BD8E /* RCTTVRemoteHandler.h */; }; 3D0B842B1EC0B49400B2BD8E /* RCTTVRemoteHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D0B84291EC0B49400B2BD8E /* RCTTVRemoteHandler.m */; }; 3D0B842C1EC0B4EA00B2BD8E /* RCTTVView.m in Sources */ = {isa = PBXBuildFile; fileRef = 130443D71E401AD800D93A67 /* RCTTVView.m */; }; - 3D0B842F1EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D0B842D1EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.h */; }; - 3D0B84301EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D0B842E1EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.m */; }; 3D0E378A1F1CC40000DCAC9F /* RCTWebSocketModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D0E37891F1CC40000DCAC9F /* RCTWebSocketModule.h */; }; 3D0E378E1F1CC59100DCAC9F /* RCTWebSocketModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D0E37891F1CC40000DCAC9F /* RCTWebSocketModule.h */; }; 3D0E378F1F1CC5CF00DCAC9F /* RCTWebSocketModule.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D0E37891F1CC40000DCAC9F /* RCTWebSocketModule.h */; }; @@ -1275,7 +1272,6 @@ 594F0A471FD233BD007FBE96 /* RCTSurfaceView.h in Copy Headers */, 594F0A481FD233BD007FBE96 /* RCTSurfaceHostingView.h in Copy Headers */, 594F0A491FD233BD007FBE96 /* RCTSurfaceSizeMeasureMode.h in Copy Headers */, - 2D16E68E1FA4FD3900B85C8A /* RCTTVNavigationEventEmitter.h in Copy Headers */, 59500D481F71C67600B122B7 /* RCTUIManagerUtils.h in Copy Headers */, 3D0E37901F1CC5E100DCAC9F /* RCTWebSocketModule.h in Copy Headers */, 5960C1BF1F0804F50066FD5B /* RCTLayoutAnimation.h in Copy Headers */, @@ -1876,8 +1872,6 @@ 39C50FFA2046EE3500CEE534 /* RCTVersion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTVersion.m; sourceTree = ""; }; 3D0B84281EC0B49400B2BD8E /* RCTTVRemoteHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTTVRemoteHandler.h; sourceTree = ""; }; 3D0B84291EC0B49400B2BD8E /* RCTTVRemoteHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTTVRemoteHandler.m; sourceTree = ""; }; - 3D0B842D1EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTTVNavigationEventEmitter.h; sourceTree = ""; }; - 3D0B842E1EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTTVNavigationEventEmitter.m; sourceTree = ""; }; 3D0E37891F1CC40000DCAC9F /* RCTWebSocketModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RCTWebSocketModule.h; path = WebSocket/RCTWebSocketModule.h; sourceTree = ""; }; 3D1E68D81CABD13900DD7465 /* RCTDisplayLink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTDisplayLink.h; sourceTree = ""; }; 3D1E68D91CABD13900DD7465 /* RCTDisplayLink.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTDisplayLink.m; sourceTree = ""; }; @@ -2346,8 +2340,6 @@ 0EEEA8DE2239002200A8C82D /* RCTSurfacePresenterStub.m */, 13B07FED1A69327A00A75B9A /* RCTTiming.h */, 13B07FEE1A69327A00A75B9A /* RCTTiming.m */, - 3D0B842D1EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.h */, - 3D0B842E1EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.m */, 13E067481A70F434002CDEE1 /* RCTUIManager.h */, 13E067491A70F434002CDEE1 /* RCTUIManager.m */, 59EB6DB91EBD6FC90072A5E7 /* RCTUIManagerObserverCoordinator.h */, @@ -2945,7 +2937,6 @@ 3D302F311DF828F800D6DDAE /* RCTBundleURLProvider.h in Headers */, 3D302F321DF828F800D6DDAE /* RCTConvert.h in Headers */, 3D302F331DF828F800D6DDAE /* RCTDefines.h in Headers */, - 3D0B842F1EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.h in Headers */, 3D302F341DF828F800D6DDAE /* RCTDisplayLink.h in Headers */, 3D302F351DF828F800D6DDAE /* RCTErrorCustomizer.h in Headers */, 3D302F361DF828F800D6DDAE /* RCTErrorInfo.h in Headers */, @@ -3994,7 +3985,6 @@ 2D3B5EC81D9B095800451313 /* RCTActivityIndicatorViewManager.m in Sources */, 3DCD185D1DF978E7007FE5A1 /* RCTReloadCommand.m in Sources */, 130443DB1E401ADD00D93A67 /* RCTConvert+Transform.m in Sources */, - 3D0B84301EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.m in Sources */, 2D3B5EC61D9B095000451313 /* RCTProfileTrampoline-x86_64.S in Sources */, 2D3B5EA61D9B08CA00451313 /* RCTTouchEvent.m in Sources */, 2D8C2E331DA40441000EE098 /* RCTMultipartStreamReader.m in Sources */, From 07eac0c6e21bf0ddbe5e87bd18a8940cff83a0b8 Mon Sep 17 00:00:00 2001 From: Pasquale Anatriello Date: Thu, 29 Oct 2020 09:23:02 -0700 Subject: [PATCH 273/347] Fix clone issue in YogaNodeJNIBase Summary: Changelog: Fix the cloneWithChildren implementation that was not copying the list of children on the java object. We were missing on copying the list of children when cloning. This is pretty bad as it means that the clone operation was mutating the old node as well as the new. When multiple threads were involved this could cause crashes. Reviewed By: SidharthGuglani Differential Revision: D24565307 fbshipit-source-id: 4e2e111db389e25c315ce7603b4018ac695bb0f1 --- java/com/facebook/yoga/YogaNodeJNIBase.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index 406e75e5..7ab391cc 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -116,6 +116,9 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { public YogaNodeJNIBase cloneWithChildren() { try { YogaNodeJNIBase clonedYogaNode = (YogaNodeJNIBase) super.clone(); + if (clonedYogaNode.mChildren != null) { + clonedYogaNode.mChildren = new ArrayList<>(clonedYogaNode.mChildren); + } long clonedNativePointer = YogaNative.jni_YGNodeCloneJNI(mNativePointer); clonedYogaNode.mOwner = null; clonedYogaNode.mNativePointer = clonedNativePointer; From e65b1ef6548d2ecfdf3d1cec230581be606a927e Mon Sep 17 00:00:00 2001 From: Kris Georges Date: Tue, 10 Nov 2020 08:21:19 -0800 Subject: [PATCH 274/347] Fix Yoga Playground website Litho codegen bugs Summary: Yoga Playground website changing direction results in no change to Litho code because of this typo Reviewed By: SidharthGuglani Differential Revision: D24818769 fbshipit-source-id: 1633513d4a25aead2008b59d52f669293214c598 --- website/src/components/Playground/src/CodeLitho.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/components/Playground/src/CodeLitho.js b/website/src/components/Playground/src/CodeLitho.js index 66e89a3e..cc96c840 100644 --- a/website/src/components/Playground/src/CodeLitho.js +++ b/website/src/components/Playground/src/CodeLitho.js @@ -24,7 +24,7 @@ function getEnum(yogaEnum: string, value: string | number): string { position: 'Position', flexWrap: 'Wrap', positionType: 'PositionType', - direction: 'Driection', + direction: 'Direction', }; if (!enumLookup[yogaEnum]) { From b043669972ee59bc3e7906e3707816ec3eccda1e Mon Sep 17 00:00:00 2001 From: Ron Edelstein Date: Thu, 17 Dec 2020 19:33:39 -0800 Subject: [PATCH 275/347] Explicitly set autoglob (long tail) Reviewed By: fbanurag, strulovich Differential Revision: D25620908 fbshipit-source-id: 1dd737d451ddfd07baa427902bdf1c96d7e67e64 --- android/sample/java/com/facebook/samples/yoga/BUCK | 1 + android/src/main/java/com/facebook/yoga/android/BUCK | 1 + 2 files changed, 2 insertions(+) diff --git a/android/sample/java/com/facebook/samples/yoga/BUCK b/android/sample/java/com/facebook/samples/yoga/BUCK index 31609016..502c19f3 100644 --- a/android/sample/java/com/facebook/samples/yoga/BUCK +++ b/android/sample/java/com/facebook/samples/yoga/BUCK @@ -8,6 +8,7 @@ load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID_JAVA_TARGET", "ANDROID_SAM yoga_android_library( name = "yoga", srcs = glob(["**/*.java"]), + autoglob = False, visibility = [ "PUBLIC", ], diff --git a/android/src/main/java/com/facebook/yoga/android/BUCK b/android/src/main/java/com/facebook/yoga/android/BUCK index c760ba0b..20408c78 100644 --- a/android/src/main/java/com/facebook/yoga/android/BUCK +++ b/android/src/main/java/com/facebook/yoga/android/BUCK @@ -8,6 +8,7 @@ load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID_RES_TARGET", "INFER_ANNOTA yoga_android_library( name = "android", srcs = glob(["**/*.java"]), + autoglob = False, visibility = [ "PUBLIC", ], From a38ec3d7a493c5497016d4d1b4e05b89cf5d6f65 Mon Sep 17 00:00:00 2001 From: Panagiotis Vekris Date: Mon, 4 Jan 2021 21:05:07 -0800 Subject: [PATCH 276/347] pin "classic" roots to v0.140 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Summary: In Flow v0.143 types-first will become the only supported mode in Flow. As such the `types_first` configuration option will become invalid. To prevent breaking roots that have `types_first=false` set and are **unversioned**, this diff pins their version to v0.140, which is the last released version in fbsource. ## Repro First compute the list of all `.flowconfig`s: ``` zbgf '.flowconfig$' | grep -v '^fbsource/fbcode/flow' | grep -v 'Binary file' | awk -F':' '{ print $1 }' | sort -u > all-flowconfigs.txt ``` Compute `.flowconfig`s that don’t have a version: ``` zbgs -f '\.flowconfig' '[version]' | grep -v '^fbsource/fbcode/flow' | grep -v 'Binary file' | awk -F':' '{ print $1 }' | sort -u > versioned-flowconfigs.txt comm -23 all-flowconfigs.txt versioned-flowconfigs.txt > unversioned-flowconfigs.txt ``` Compute `.flowconfig`s that have `types_first=false`: ``` zbgr -f '\.flowconfig' '^types_first=false$' | grep -v '^fbsource/fbcode/flow' | grep -v 'Binary file' | awk -F':' '{ print $1 }' | sort -u > types_first-false-flowconfigs.txt ``` **and** no pinned version: ``` comm -12 unversioned-flowconfigs.txt types_first-false-flowconfigs.txt | grep 'fbsource' > pin-version-flowconfigs.txt ``` Update the `.flowconfig`s: ``` cat ~/scratch/flowconfigs/pin-version-flowconfigs-fbsource.txt | xargs -I{} bash -c 'printf "\n[version]\n^0.140.0\n" >> {}' ``` Reviewed By: mroch Differential Revision: D25771452 fbshipit-source-id: 876d6310e4e1aafb81d3ef3051f4e9e9e838a633 --- javascript/.flowconfig | 3 +++ website/.flowconfig | 3 +++ 2 files changed, 6 insertions(+) diff --git a/javascript/.flowconfig b/javascript/.flowconfig index 6a0c16ae..6bd402f8 100644 --- a/javascript/.flowconfig +++ b/javascript/.flowconfig @@ -10,3 +10,6 @@ types_first=false [strict] + +[version] +^0.140.0 diff --git a/website/.flowconfig b/website/.flowconfig index 6a0c16ae..6bd402f8 100644 --- a/website/.flowconfig +++ b/website/.flowconfig @@ -10,3 +10,6 @@ types_first=false [strict] + +[version] +^0.140.0 From 584dfe961e6220d684bfd847facb4e7b2717a712 Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Sun, 10 Jan 2021 10:03:53 -0800 Subject: [PATCH 277/347] Apply clang-format update fixes Reviewed By: igorsugak Differential Revision: D25861849 fbshipit-source-id: 840dc1061e557717c7f9ffcccbc09c24b96b78e0 --- .../YogaKitSample/ViewController.m | 18 +++++++------ javascript/sources/Node.cc | 4 +-- tests/EventsTest.cpp | 4 +-- tests/YGComputedMarginTest.cpp | 26 ++++++++++--------- tests/YGComputedPaddingTest.cpp | 26 ++++++++++--------- tests/YGTreeMutationTest.cpp | 21 ++++++++------- yoga/CompactValue.h | 4 +-- yoga/Yoga.cpp | 4 +-- 8 files changed, 57 insertions(+), 50 deletions(-) diff --git a/YogaKit/YogaKitSample/YogaKitSample/ViewController.m b/YogaKit/YogaKitSample/YogaKitSample/ViewController.m index 145fa47b..dedf03d2 100644 --- a/YogaKit/YogaKitSample/YogaKitSample/ViewController.m +++ b/YogaKit/YogaKitSample/YogaKitSample/ViewController.m @@ -28,17 +28,19 @@ UIView* child2 = [UIView new]; child2.backgroundColor = [UIColor greenColor]; - child2.frame = (CGRect){.size = { - .width = 200, - .height = 100, - }}; + child2.frame = (CGRect){ + .size = { + .width = 200, + .height = 100, + }}; UIView* child3 = [UIView new]; child3.backgroundColor = [UIColor yellowColor]; - child3.frame = (CGRect){.size = { - .width = 100, - .height = 100, - }}; + child3.frame = (CGRect){ + .size = { + .width = 100, + .height = 100, + }}; [child2 addSubview:child3]; [root addSubview:child1]; diff --git a/javascript/sources/Node.cc b/javascript/sources/Node.cc index 7e6833fe..421cfa71 100644 --- a/javascript/sources/Node.cc +++ b/javascript/sources/Node.cc @@ -23,8 +23,8 @@ static YGSize globalMeasureFunc( Node const& node = *reinterpret_cast(YGNodeGetContext(nodeRef)); Size size = node.callMeasureFunc(width, widthMode, height, heightMode); - YGSize ygSize = {static_cast(size.width), - static_cast(size.height)}; + YGSize ygSize = { + static_cast(size.width), static_cast(size.height)}; return ygSize; } diff --git a/tests/EventsTest.cpp b/tests/EventsTest.cpp index cf887b2d..e8300846 100644 --- a/tests/EventsTest.cpp +++ b/tests/EventsTest.cpp @@ -303,8 +303,8 @@ EventArgs createArgs( }; EventArgs args = createArgs(node, data); - args.eventTestDataPtr = {new EventTestData{eventTestData}, - deleteEventTestData}; + args.eventTestDataPtr = { + new EventTestData{eventTestData}, deleteEventTestData}; return args; } diff --git a/tests/YGComputedMarginTest.cpp b/tests/YGComputedMarginTest.cpp index b74e4174..fedfd561 100644 --- a/tests/YGComputedMarginTest.cpp +++ b/tests/YGComputedMarginTest.cpp @@ -29,12 +29,13 @@ TEST(YogaTest, computed_layout_margin) { } TEST(YogaTest, margin_side_overrides_horizontal_and_vertical) { - const std::array edges = {{YGEdgeTop, - YGEdgeBottom, - YGEdgeStart, - YGEdgeEnd, - YGEdgeLeft, - YGEdgeRight}}; + const std::array edges = { + {YGEdgeTop, + YGEdgeBottom, + YGEdgeStart, + YGEdgeEnd, + YGEdgeLeft, + YGEdgeRight}}; for (float edgeValue = 0; edgeValue < 2; ++edgeValue) { for (const auto& edge : edges) { @@ -58,12 +59,13 @@ TEST(YogaTest, margin_side_overrides_horizontal_and_vertical) { } TEST(YogaTest, margin_side_overrides_all) { - const std::array edges = {{YGEdgeTop, - YGEdgeBottom, - YGEdgeStart, - YGEdgeEnd, - YGEdgeLeft, - YGEdgeRight}}; + const std::array edges = { + {YGEdgeTop, + YGEdgeBottom, + YGEdgeStart, + YGEdgeEnd, + YGEdgeLeft, + YGEdgeRight}}; for (float edgeValue = 0; edgeValue < 2; ++edgeValue) { for (const auto& edge : edges) { diff --git a/tests/YGComputedPaddingTest.cpp b/tests/YGComputedPaddingTest.cpp index 677ed3a6..c3aabab7 100644 --- a/tests/YGComputedPaddingTest.cpp +++ b/tests/YGComputedPaddingTest.cpp @@ -29,12 +29,13 @@ TEST(YogaTest, computed_layout_padding) { } TEST(YogaTest, padding_side_overrides_horizontal_and_vertical) { - const std::array edges = {{YGEdgeTop, - YGEdgeBottom, - YGEdgeStart, - YGEdgeEnd, - YGEdgeLeft, - YGEdgeRight}}; + const std::array edges = { + {YGEdgeTop, + YGEdgeBottom, + YGEdgeStart, + YGEdgeEnd, + YGEdgeLeft, + YGEdgeRight}}; for (float edgeValue = 0; edgeValue < 2; ++edgeValue) { for (const auto& edge : edges) { @@ -58,12 +59,13 @@ TEST(YogaTest, padding_side_overrides_horizontal_and_vertical) { } TEST(YogaTest, padding_side_overrides_all) { - const std::array edges = {{YGEdgeTop, - YGEdgeBottom, - YGEdgeStart, - YGEdgeEnd, - YGEdgeLeft, - YGEdgeRight}}; + const std::array edges = { + {YGEdgeTop, + YGEdgeBottom, + YGEdgeStart, + YGEdgeEnd, + YGEdgeLeft, + YGEdgeRight}}; for (float edgeValue = 0; edgeValue < 2; ++edgeValue) { for (const auto& edge : edges) { diff --git a/tests/YGTreeMutationTest.cpp b/tests/YGTreeMutationTest.cpp index bf07f39e..26f0b900 100644 --- a/tests/YGTreeMutationTest.cpp +++ b/tests/YGTreeMutationTest.cpp @@ -29,8 +29,8 @@ TEST(YogaTest, set_children_adds_children_to_parent) { const std::vector expectedChildren = {root_child0, root_child1}; ASSERT_EQ(children, expectedChildren); - const std::vector owners = {YGNodeGetOwner(root_child0), - YGNodeGetOwner(root_child1)}; + const std::vector owners = { + YGNodeGetOwner(root_child0), YGNodeGetOwner(root_child1)}; const std::vector expectedOwners = {root, root}; ASSERT_EQ(owners, expectedOwners); @@ -49,8 +49,8 @@ TEST(YogaTest, set_children_to_empty_removes_old_children) { const std::vector expectedChildren = {}; ASSERT_EQ(children, expectedChildren); - const std::vector owners = {YGNodeGetOwner(root_child0), - YGNodeGetOwner(root_child1)}; + const std::vector owners = { + YGNodeGetOwner(root_child0), YGNodeGetOwner(root_child1)}; const std::vector expectedOwners = {nullptr, nullptr}; ASSERT_EQ(owners, expectedOwners); @@ -73,8 +73,8 @@ TEST(YogaTest, set_children_replaces_non_common_children) { const std::vector expectedChildren = {root_child2, root_child3}; ASSERT_EQ(children, expectedChildren); - const std::vector owners = {YGNodeGetOwner(root_child0), - YGNodeGetOwner(root_child1)}; + const std::vector owners = { + YGNodeGetOwner(root_child0), YGNodeGetOwner(root_child1)}; const std::vector expectedOwners = {nullptr, nullptr}; ASSERT_EQ(owners, expectedOwners); @@ -100,10 +100,11 @@ TEST(YogaTest, set_children_keeps_and_reorders_common_children) { root_child2, root_child1, root_child3}; ASSERT_EQ(children, expectedChildren); - const std::vector owners = {YGNodeGetOwner(root_child0), - YGNodeGetOwner(root_child1), - YGNodeGetOwner(root_child2), - YGNodeGetOwner(root_child3)}; + const std::vector owners = { + YGNodeGetOwner(root_child0), + YGNodeGetOwner(root_child1), + YGNodeGetOwner(root_child2), + YGNodeGetOwner(root_child3)}; const std::vector expectedOwners = {nullptr, root, root, root}; ASSERT_EQ(owners, expectedOwners); diff --git a/yoga/CompactValue.h b/yoga/CompactValue.h index be933a16..f398668e 100644 --- a/yoga/CompactValue.h +++ b/yoga/CompactValue.h @@ -125,8 +125,8 @@ public: data.repr &= ~PERCENT_BIT; data.repr += BIAS; - return YGValue{data.value, - payload_.repr & 0x40000000 ? YGUnitPercent : YGUnitPoint}; + return YGValue{ + data.value, payload_.repr & 0x40000000 ? YGUnitPercent : YGUnitPoint}; } bool isUndefined() const noexcept { diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 97e64075..2db6be21 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -3531,8 +3531,8 @@ static void YGNodelayoutImpl( YGNodeBoundAxisWithinMinAndMax( node, crossAxis, - YGFloatOptional{totalLineCrossDim + - paddingAndBorderAxisCross}, + YGFloatOptional{ + totalLineCrossDim + paddingAndBorderAxisCross}, crossAxisownerSize) .unwrap()), paddingAndBorderAxisCross), From 2cb46cf3e2c9d47662dafe370e8c67e5838cd5e5 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Fri, 5 Feb 2021 03:39:55 -0800 Subject: [PATCH 278/347] instance of checks for YogaNodeJniBase Summary: Changelog: [Internal][Yoga] - Added instance of checks in `YogaNodeJNIBase` class to prevent `ClassCastException`s. This was happening for some NT android tests - Mocked Yoga Node object was being passed in the `addChildAt` api Stack Trace of exception java.lang.ClassCastException: com.facebook.yoga.YogaNode$MockitoMock$1408896622 cannot be cast to com.facebook.yoga.YogaNodeJNIBase at com.facebook.yoga.YogaNodeJNIBase.addChildAt(YogaNodeJNIBase.java:86) at com.facebook.litho.DefaultInternalNode.addChildAt(DefaultInternalNode.java:220) at com.facebook.litho.DefaultInternalNode.child(DefaultInternalNode.java:377) at com.facebook.litho.DefaultInternalNode.child(DefaultInternalNode.java:360) at com.facebook.litho.Column.resolve(Column.java:118) at com.facebook.litho.Layout.create(Layout.java:172) Reviewed By: Andrey-Mishanin Differential Revision: D26114992 fbshipit-source-id: 774a689609e67f9244b81c6788b62cd61cd96d14 --- java/com/facebook/yoga/YogaNodeJNIBase.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index 7ab391cc..6b3dcd26 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -83,6 +83,9 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { } public void addChildAt(YogaNode c, int i) { + if (!(c instanceof YogaNodeJNIBase)) { + return; + } YogaNodeJNIBase child = (YogaNodeJNIBase) c; if (child.mOwner != null) { throw new IllegalStateException("Child already has a parent, it must be removed first."); @@ -105,6 +108,9 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { } public void swapChildAt(YogaNode newChild, int position) { + if (!(newChild instanceof YogaNodeJNIBase)) { + return; + } YogaNodeJNIBase child = (YogaNodeJNIBase) newChild; mChildren.remove(position); mChildren.add(position, child); @@ -223,6 +229,9 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { @Override public void copyStyle(YogaNode srcNode) { + if (!(srcNode instanceof YogaNodeJNIBase)) { + return; + } YogaNative.jni_YGNodeCopyStyleJNI(mNativePointer, ((YogaNodeJNIBase) srcNode).mNativePointer); } From 651c527e946826b36e1466981adbe08701ceb7a6 Mon Sep 17 00:00:00 2001 From: Ruslan Serebriakov Date: Thu, 11 Feb 2021 10:37:41 -0800 Subject: [PATCH 279/347] CKDimension Summary: [rsrbk@devvm3461.lla0 /data/users/rsrbk/fbsource/fbobjc] fastmod --accept-all CKRelativeDimension RCRelativeDimension [rsrbk@devvm3461.lla0 /data/users/rsrbk/fbsource/fbobjc] fastmod --accept-all CKRelativeSize RCRelativeSize [rsrbk@devvm3461.lla0 /data/users/rsrbk/fbsource/fbobjc] fastmod --accept-all ComponentKit/RCDimension.h RenderCore/RCDimension.h Reviewed By: kfirapps Differential Revision: D26228615 fbshipit-source-id: 9c06128b324e1c6ece6fc21fbab1c041e5f5825a --- website/src/components/Playground/src/CodeComponentKit.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/src/components/Playground/src/CodeComponentKit.js b/website/src/components/Playground/src/CodeComponentKit.js index 74cc2db2..00111508 100644 --- a/website/src/components/Playground/src/CodeComponentKit.js +++ b/website/src/components/Playground/src/CodeComponentKit.js @@ -73,9 +73,9 @@ function keyLookup(key: string): string { function getValue(value) { if (typeof value === 'string' && /%$/.test(value)) { - return `CKRelativeDimension::Percent(${parseFloat(value)})`; + return `RCRelativeDimension::Percent(${parseFloat(value)})`; } else if (value === 'auto') { - return 'CKRelativeDimension::Auto()'; + return 'RCRelativeDimension::Auto()'; } else { return String(parseFloat(value)); } From de36e85004dce6ef0f2cee9208bfee9036db7e04 Mon Sep 17 00:00:00 2001 From: Aditya Sharat Date: Tue, 16 Feb 2021 10:17:36 -0800 Subject: [PATCH 280/347] Adds InternalNode#freeze() API Summary: Litho needs a new API which is called immediately before yoga begins layout calculations so that the InternalNode gets the opportunity to finalise itself; i.e. perform the last mutations and in effect avoid any more mutations to the hierarchy. See D26373731 where the mutations from `Layout#collectResults` is moved back into the InternalNode. Changelog: [Internal] Adds new API to YogaNodeJNIBase Reviewed By: SidharthGuglani Differential Revision: D26373730 fbshipit-source-id: 471346d3444986ada91e86c95f5f9fb98bcd2fa6 --- java/com/facebook/yoga/YogaNode.java | 18 ++++++++++++------ java/com/facebook/yoga/YogaNodeJNIBase.java | 14 +++++++++++++- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/java/com/facebook/yoga/YogaNode.java b/java/com/facebook/yoga/YogaNode.java index 9fc8bac9..dfec8ec5 100644 --- a/java/com/facebook/yoga/YogaNode.java +++ b/java/com/facebook/yoga/YogaNode.java @@ -10,6 +10,14 @@ package com.facebook.yoga; import javax.annotation.Nullable; public abstract class YogaNode { + + /** The interface the {@link #getData()} object can optionally implement. */ + public interface Inputs { + + /** Requests the data object to disable mutations of its inputs. */ + void freeze(); + } + public abstract void reset(); public abstract int getChildCount(); @@ -25,12 +33,10 @@ public abstract class YogaNode { public abstract YogaNode removeChildAt(int i); /** - * @returns the {@link YogaNode} that owns this {@link YogaNode}. - * The owner is used to identify the YogaTree that a {@link YogaNode} belongs - * to. - * This method will return the parent of the {@link YogaNode} when the - * {@link YogaNode} only belongs to one YogaTree or null when the - * {@link YogaNode} is shared between two or more YogaTrees. + * @returns the {@link YogaNode} that owns this {@link YogaNode}. The owner is used to identify + * the YogaTree that a {@link YogaNode} belongs to. This method will return the parent of the + * {@link YogaNode} when the {@link YogaNode} only belongs to one YogaTree or null when the + * {@link YogaNode} is shared between two or more YogaTrees. */ @Nullable public abstract YogaNode getOwner(); diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index 6b3dcd26..03354556 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -197,12 +197,17 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { long[] nativePointers = null; YogaNodeJNIBase[] nodes = null; + freeze(); + ArrayList n = new ArrayList<>(); n.add(this); for (int i = 0; i < n.size(); ++i) { List children = n.get(i).mChildren; if (children != null) { - n.addAll(children); + for (YogaNodeJNIBase child : children) { + child.freeze(); + n.add(child); + } } } @@ -215,6 +220,13 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { YogaNative.jni_YGNodeCalculateLayoutJNI(mNativePointer, width, height, nativePointers, nodes); } + private void freeze() { + Object data = getData(); + if (data instanceof Inputs) { + ((Inputs) data).freeze(); + } + } + public void dirty() { YogaNative.jni_YGNodeMarkDirtyJNI(mNativePointer); } From 36e70c9ca0ef4817d8f05caf0f8f49709ab24141 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Thu, 25 Feb 2021 06:34:24 -0800 Subject: [PATCH 281/347] Fix Yoga test Summary: Changelog: [Internal][Yoga] Fixed unit test for default yoga style property Reviewed By: pasqualeanatriello Differential Revision: D26664040 fbshipit-source-id: 9c0af4e846ead3d90c75753e836570ccac760178 --- java/tests/com/facebook/yoga/YogaNodeStylePropertiesTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/tests/com/facebook/yoga/YogaNodeStylePropertiesTest.java b/java/tests/com/facebook/yoga/YogaNodeStylePropertiesTest.java index 649c7279..c39ea024 100644 --- a/java/tests/com/facebook/yoga/YogaNodeStylePropertiesTest.java +++ b/java/tests/com/facebook/yoga/YogaNodeStylePropertiesTest.java @@ -191,7 +191,7 @@ public class YogaNodeStylePropertiesTest { public void testPositionTypeDefault() { final YogaNode node = createNode(); - assertEquals(YogaPositionType.RELATIVE, node.getPositionType()); + assertEquals(YogaPositionType.STATIC, node.getPositionType()); } @Test From 0429704d5ec4f565056005d899dabd47089bf961 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Thu, 25 Feb 2021 06:34:24 -0800 Subject: [PATCH 282/347] version bump Reviewed By: pasqualeanatriello Differential Revision: D26664041 fbshipit-source-id: 5a4d0d176074c8831dd18681993463fe25e2642f --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 820eae63..4dc8a8e6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ org.gradle.jvmargs=-Xmx1536M -VERSION_NAME=1.16.0-SNAPSHOT +VERSION_NAME=1.17.0 POM_URL=https://github.com/facebook/yoga POM_SCM_URL=https://github.com/facebook/yoga.git POM_SCM_CONNECTION=scm:git:https://github.com/facebook/yoga.git From c1a28f3f54bfed299199b4a8916818891a7be055 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Thu, 25 Feb 2021 06:34:24 -0800 Subject: [PATCH 283/347] Add back snapshot in version for next release Summary: Changelog: [Internal][Yoga] version bump Reviewed By: pasqualeanatriello Differential Revision: D26664063 fbshipit-source-id: ceb8d31a99f85db7d1fde20bd77584a537d356c6 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 4dc8a8e6..382f62fa 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ org.gradle.jvmargs=-Xmx1536M -VERSION_NAME=1.17.0 +VERSION_NAME=1.17.0-SNAPSHOT POM_URL=https://github.com/facebook/yoga POM_SCM_URL=https://github.com/facebook/yoga.git POM_SCM_CONNECTION=scm:git:https://github.com/facebook/yoga.git From ccdea0f31bc71d9297b767ba567f7c1f2e2ee30a Mon Sep 17 00:00:00 2001 From: Stiopa Koltsov Date: Mon, 1 Mar 2021 13:13:44 -0800 Subject: [PATCH 284/347] xplat: switch random files to Starlark Summary: We need to get rid of all `# BUILD FILE SYNTAX: PYTHON_DSL` to disable hybrid parser after we make Starlark default everywhere. This is first bunch of changes. Reviewed By: mzlee Differential Revision: D26727784 fbshipit-source-id: 05c5f4d039feb4ce06169ac6d2fc5c49711125cd --- java/BUCK | 2 -- 1 file changed, 2 deletions(-) diff --git a/java/BUCK b/java/BUCK index fa0250a3..627c5678 100644 --- a/java/BUCK +++ b/java/BUCK @@ -1,5 +1,3 @@ -# BUILD FILE SYNTAX: PYTHON_DSL - # Copyright (c) Facebook, Inc. and its affiliates. # # This source code is licensed under the MIT license found in the From 1745c23a122cf04013e18631802670421415be21 Mon Sep 17 00:00:00 2001 From: Andrew Coates <30809111+acoates-ms@users.noreply.github.com> Date: Wed, 10 Mar 2021 12:36:47 -0800 Subject: [PATCH 285/347] Fix various C++ warnings (#31002) Summary: Fix warnings about implicit type truncation. ## Changelog [Internal] [Fixed] - Fix various C++ warnings Pull Request resolved: https://github.com/facebook/react-native/pull/31002 Test Plan: Almost all the changes here are simply making explicit conversions which are already occurring. With the exception of a couple of constants being changed from doubles to floats. With these changes I am able to remove a bunch of warning suppressions in react-native-windows. Reviewed By: shergin Differential Revision: D26900502 Pulled By: rozele fbshipit-source-id: d5e415282815c2212a840a863713287bbf118c10 --- yoga/BitUtils.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/yoga/BitUtils.h b/yoga/BitUtils.h index 1c32e9ec..2161effc 100644 --- a/yoga/BitUtils.h +++ b/yoga/BitUtils.h @@ -45,8 +45,9 @@ void setEnumData(uint32_t& flags, size_t index, int newValue) { template void setEnumData(uint8_t& flags, size_t index, int newValue) { - flags = (flags & ~mask(bitWidthFn(), index)) | - ((newValue << index) & (mask(bitWidthFn(), index))); + flags = (flags & ~static_cast(mask(bitWidthFn(), index))) | + ((newValue << index) & + (static_cast(mask(bitWidthFn(), index)))); } constexpr bool getBooleanData(int flags, size_t index) { From 342aebe1d73e5770a1862b6a94c6b877c1439a9b Mon Sep 17 00:00:00 2001 From: Eric Rozell Date: Wed, 10 Mar 2021 13:08:48 -0800 Subject: [PATCH 286/347] Fixes layout of nodes with YGDisplayNone and YGPositionTypeAbsolute (#1068) Summary: Pull Request resolved: https://github.com/facebook/yoga/pull/1068 There is an issue in react-native when the Yoga node position type is set to absolute and display: none is set where the node layout calculation gives the absolute dimensions, rather than the expected 0 x 0. Here are some OSS issues tracking this: https://github.com/facebook/react-native/issues/18415 https://github.com/microsoft/react-native-windows/issues/7289 ## Changelog [General] [Fix] - Fixes layout of nodes with YGDisplayNone and YGPositionTypeAbsolute Reviewed By: Andrey-Mishanin Differential Revision: D26849307 fbshipit-source-id: 197618aa3c4e1b3b7efeba7ea4efd30b2d1c982d --- csharp/tests/Facebook.Yoga/YGDisplayTest.cs | 49 ++++++++++++++++-- gentest/fixtures/YGDisplayTest.html | 4 ++ gentest/gentest.js | 6 +-- gentest/gentest.rb | 15 +++--- .../com/facebook/yoga/YGDisplayTest.java | 48 ++++++++++++++++-- .../tests/Facebook.Yoga/YGDisplayTest.js | 50 ++++++++++++++++++- tests/YGDisplayTest.cpp | 47 ++++++++++++++++- yoga/Yoga.cpp | 3 +- 8 files changed, 201 insertions(+), 21 deletions(-) diff --git a/csharp/tests/Facebook.Yoga/YGDisplayTest.cs b/csharp/tests/Facebook.Yoga/YGDisplayTest.cs index 237686ba..659cb37f 100644 --- a/csharp/tests/Facebook.Yoga/YGDisplayTest.cs +++ b/csharp/tests/Facebook.Yoga/YGDisplayTest.cs @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGDisplayTest.html using System; @@ -333,5 +334,47 @@ namespace Facebook.Yoga Assert.AreEqual(0f, root_child1.LayoutHeight); } + [Test] + public void Test_display_none_with_position_absolute() + { + YogaConfig config = new YogaConfig(); + + YogaNode root = new YogaNode(config); + root.Width = 100; + root.Height = 100; + + YogaNode root_child0 = new YogaNode(config); + root_child0.PositionType = YogaPositionType.Absolute; + root_child0.Width = 100; + root_child0.Height = 100; + root_child0.Display = YogaDisplay.None; + root.Insert(0, root_child0); + root.StyleDirection = YogaDirection.LTR; + root.CalculateLayout(); + + Assert.AreEqual(0f, root.LayoutX); + Assert.AreEqual(0f, root.LayoutY); + Assert.AreEqual(100f, root.LayoutWidth); + Assert.AreEqual(100f, root.LayoutHeight); + + Assert.AreEqual(0f, root_child0.LayoutX); + Assert.AreEqual(0f, root_child0.LayoutY); + Assert.AreEqual(0f, root_child0.LayoutWidth); + Assert.AreEqual(0f, root_child0.LayoutHeight); + + root.StyleDirection = YogaDirection.RTL; + root.CalculateLayout(); + + Assert.AreEqual(0f, root.LayoutX); + Assert.AreEqual(0f, root.LayoutY); + Assert.AreEqual(100f, root.LayoutWidth); + Assert.AreEqual(100f, root.LayoutHeight); + + Assert.AreEqual(0f, root_child0.LayoutX); + Assert.AreEqual(0f, root_child0.LayoutY); + Assert.AreEqual(0f, root_child0.LayoutWidth); + Assert.AreEqual(0f, root_child0.LayoutHeight); + } + } } diff --git a/gentest/fixtures/YGDisplayTest.html b/gentest/fixtures/YGDisplayTest.html index 74d11ba4..f11533f8 100644 --- a/gentest/fixtures/YGDisplayTest.html +++ b/gentest/fixtures/YGDisplayTest.html @@ -25,3 +25,7 @@

+ +
+
+
diff --git a/gentest/gentest.js b/gentest/gentest.js index ca370928..12e76f33 100755 --- a/gentest/gentest.js +++ b/gentest/gentest.js @@ -41,11 +41,11 @@ function assert(condition, message) { function printTest(e, LTRContainer, RTLContainer, genericContainer) { e.push([ - '/**', + '/*', ' * Copyright (c) Facebook, Inc. and its affiliates.', ' *', - ' * This source code is licensed under the MIT license found in the LICENSE', - ' * file in the root directory of this source tree.', + ' * This source code is licensed under the MIT license found in the', + ' * LICENSE file in the root directory of this source tree.', ' */', '// @Generated by gentest/gentest.rb from gentest/fixtures/' + document.title + '.html', '', diff --git a/gentest/gentest.rb b/gentest/gentest.rb index 22114501..01fec93e 100644 --- a/gentest/gentest.rb +++ b/gentest/gentest.rb @@ -7,13 +7,14 @@ require 'watir' require 'fileutils' -caps = Selenium::WebDriver::Remote::Capabilities.chrome( - "loggingPrefs"=>{ - "browser"=>"ALL", - "performance"=>"ALL" - } -) -browser = Watir::Browser.new(:chrome, :desired_capabilities => caps, :switches => ['--force-device-scale-factor=1', '--window-position=0,0']) +browser = Watir::Browser.new(:chrome, "goog:loggingPrefs" => { + "browser" => "ALL", + "performance" => "ALL" + }, + "chromeOptions" => { + "w3c" => "false" + }, + :switches => ['--force-device-scale-factor=1', '--window-position=0,0']) Dir.chdir(File.dirname($0)) diff --git a/java/tests/com/facebook/yoga/YGDisplayTest.java b/java/tests/com/facebook/yoga/YGDisplayTest.java index f1e6f896..999548bd 100644 --- a/java/tests/com/facebook/yoga/YGDisplayTest.java +++ b/java/tests/com/facebook/yoga/YGDisplayTest.java @@ -1,9 +1,10 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGDisplayTest.html package com.facebook.yoga; @@ -337,6 +338,47 @@ public class YGDisplayTest { assertEquals(0f, root_child1.getLayoutHeight(), 0.0f); } + @Test + public void test_display_none_with_position_absolute() { + YogaConfig config = YogaConfigFactory.create(); + + final YogaNode root = createNode(config); + root.setWidth(100f); + root.setHeight(100f); + + final YogaNode root_child0 = createNode(config); + root_child0.setPositionType(YogaPositionType.ABSOLUTE); + root_child0.setWidth(100f); + root_child0.setHeight(100f); + root_child0.setDisplay(YogaDisplay.NONE); + root.addChildAt(root_child0, 0); + root.setDirection(YogaDirection.LTR); + root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED); + + assertEquals(0f, root.getLayoutX(), 0.0f); + assertEquals(0f, root.getLayoutY(), 0.0f); + assertEquals(100f, root.getLayoutWidth(), 0.0f); + assertEquals(100f, root.getLayoutHeight(), 0.0f); + + assertEquals(0f, root_child0.getLayoutX(), 0.0f); + assertEquals(0f, root_child0.getLayoutY(), 0.0f); + assertEquals(0f, root_child0.getLayoutWidth(), 0.0f); + assertEquals(0f, root_child0.getLayoutHeight(), 0.0f); + + root.setDirection(YogaDirection.RTL); + root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED); + + assertEquals(0f, root.getLayoutX(), 0.0f); + assertEquals(0f, root.getLayoutY(), 0.0f); + assertEquals(100f, root.getLayoutWidth(), 0.0f); + assertEquals(100f, root.getLayoutHeight(), 0.0f); + + assertEquals(0f, root_child0.getLayoutX(), 0.0f); + assertEquals(0f, root_child0.getLayoutY(), 0.0f); + assertEquals(0f, root_child0.getLayoutWidth(), 0.0f); + assertEquals(0f, root_child0.getLayoutHeight(), 0.0f); + } + private YogaNode createNode(YogaConfig config) { return mNodeFactory.create(config); } diff --git a/javascript/tests/Facebook.Yoga/YGDisplayTest.js b/javascript/tests/Facebook.Yoga/YGDisplayTest.js index e5be4a55..cf65ab22 100644 --- a/javascript/tests/Facebook.Yoga/YGDisplayTest.js +++ b/javascript/tests/Facebook.Yoga/YGDisplayTest.js @@ -1,9 +1,10 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGDisplayTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); @@ -342,3 +343,48 @@ it("display_none_with_position", function () { config.free(); } }); +it("display_none_with_position_absolute", function () { + var config = Yoga.Config.create(); + + try { + var root = Yoga.Node.create(config); + root.setWidth(100); + root.setHeight(100); + + var root_child0 = Yoga.Node.create(config); + root_child0.setPositionType(Yoga.POSITION_TYPE_ABSOLUTE); + root_child0.setWidth(100); + root_child0.setHeight(100); + root_child0.setDisplay(Yoga.DISPLAY_NONE); + root.insertChild(root_child0, 0); + root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_LTR); + + console.assert(0 === root.getComputedLeft(), "0 === root.getComputedLeft() (" + root.getComputedLeft() + ")"); + console.assert(0 === root.getComputedTop(), "0 === root.getComputedTop() (" + root.getComputedTop() + ")"); + console.assert(100 === root.getComputedWidth(), "100 === root.getComputedWidth() (" + root.getComputedWidth() + ")"); + console.assert(100 === root.getComputedHeight(), "100 === root.getComputedHeight() (" + root.getComputedHeight() + ")"); + + console.assert(0 === root_child0.getComputedLeft(), "0 === root_child0.getComputedLeft() (" + root_child0.getComputedLeft() + ")"); + console.assert(0 === root_child0.getComputedTop(), "0 === root_child0.getComputedTop() (" + root_child0.getComputedTop() + ")"); + console.assert(0 === root_child0.getComputedWidth(), "0 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")"); + console.assert(0 === root_child0.getComputedHeight(), "0 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")"); + + root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_RTL); + + console.assert(0 === root.getComputedLeft(), "0 === root.getComputedLeft() (" + root.getComputedLeft() + ")"); + console.assert(0 === root.getComputedTop(), "0 === root.getComputedTop() (" + root.getComputedTop() + ")"); + console.assert(100 === root.getComputedWidth(), "100 === root.getComputedWidth() (" + root.getComputedWidth() + ")"); + console.assert(100 === root.getComputedHeight(), "100 === root.getComputedHeight() (" + root.getComputedHeight() + ")"); + + console.assert(0 === root_child0.getComputedLeft(), "0 === root_child0.getComputedLeft() (" + root_child0.getComputedLeft() + ")"); + console.assert(0 === root_child0.getComputedTop(), "0 === root_child0.getComputedTop() (" + root_child0.getComputedTop() + ")"); + console.assert(0 === root_child0.getComputedWidth(), "0 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")"); + console.assert(0 === root_child0.getComputedHeight(), "0 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")"); + } finally { + if (typeof root !== "undefined") { + root.freeRecursive(); + } + + config.free(); + } +}); diff --git a/tests/YGDisplayTest.cpp b/tests/YGDisplayTest.cpp index ebd2bcd5..edc53358 100644 --- a/tests/YGDisplayTest.cpp +++ b/tests/YGDisplayTest.cpp @@ -1,9 +1,10 @@ /* * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGDisplayTest.html #include @@ -327,3 +328,45 @@ TEST(YogaTest, display_none_with_position) { YGConfigFree(config); } + +TEST(YogaTest, display_none_with_position_absolute) { + const YGConfigRef config = YGConfigNew(); + + const YGNodeRef root = YGNodeNewWithConfig(config); + YGNodeStyleSetWidth(root, 100); + YGNodeStyleSetHeight(root, 100); + + const YGNodeRef root_child0 = YGNodeNewWithConfig(config); + YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute); + YGNodeStyleSetWidth(root_child0, 100); + YGNodeStyleSetHeight(root_child0, 100); + YGNodeStyleSetDisplay(root_child0, YGDisplayNone); + YGNodeInsertChild(root, root_child0, 0); + YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0)); + + YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root)); + ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root)); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0)); + + YGNodeFreeRecursive(root); + + YGConfigFree(config); +} diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 2db6be21..f24563df 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -3557,7 +3557,8 @@ static void YGNodelayoutImpl( if (performLayout) { // STEP 10: SIZING AND POSITIONING ABSOLUTE CHILDREN for (auto child : node->getChildren()) { - if (child->getStyle().positionType() != YGPositionTypeAbsolute) { + if (child->getStyle().display() == YGDisplayNone || + child->getStyle().positionType() != YGPositionTypeAbsolute) { continue; } YGNodeAbsoluteLayoutChild( From 41384fab7b64824d9e7dd15ba042ee86ad5dc1b6 Mon Sep 17 00:00:00 2001 From: Pieter De Baets Date: Mon, 15 Mar 2021 16:53:05 -0700 Subject: [PATCH 287/347] Optimize edge value resolution Summary: Noticed in simpleperf this was a very hot method, showing 8ms spent in these methods in our sample application. By splitting the method out in a horizontal and vertical variant we can simplify cases enormously and check for begin/end in one go. Changelog: [Internal] Reviewed By: SidharthGuglani Differential Revision: D27010008 fbshipit-source-id: 22fed58c7476e1d716b0191b55997c7a06e63223 --- yoga/YGNode.cpp | 221 ++++++++++++++++++++++--------------------- yoga/YGNode.h | 11 +++ yoga/YGNodePrint.cpp | 11 ++- yoga/Yoga-internal.h | 5 - yoga/Yoga.cpp | 30 ------ 5 files changed, 129 insertions(+), 149 deletions(-) diff --git a/yoga/YGNode.cpp b/yoga/YGNode.cpp index 1ee1bde6..f4c14bf3 100644 --- a/yoga/YGNode.cpp +++ b/yoga/YGNode.cpp @@ -50,89 +50,111 @@ void YGNode::print(void* printContext) { } } +CompactValue YGNode::computeEdgeValueForRow( + const YGStyle::Edges& edges, + YGEdge rowEdge, + YGEdge edge, + CompactValue defaultValue) { + if (!edges[rowEdge].isUndefined()) { + return edges[rowEdge]; + } else if (!edges[edge].isUndefined()) { + return edges[edge]; + } else if (!edges[YGEdgeHorizontal].isUndefined()) { + return edges[YGEdgeHorizontal]; + } else if (!edges[YGEdgeAll].isUndefined()) { + return edges[YGEdgeAll]; + } else { + return defaultValue; + } +} + +CompactValue YGNode::computeEdgeValueForColumn( + const YGStyle::Edges& edges, + YGEdge edge, + CompactValue defaultValue) { + if (!edges[edge].isUndefined()) { + return edges[edge]; + } else if (!edges[YGEdgeVertical].isUndefined()) { + return edges[YGEdgeVertical]; + } else if (!edges[YGEdgeAll].isUndefined()) { + return edges[YGEdgeAll]; + } else { + return defaultValue; + } +} + YGFloatOptional YGNode::getLeadingPosition( const YGFlexDirection axis, const float axisSize) const { - if (YGFlexDirectionIsRow(axis)) { - auto leadingPosition = YGComputedEdgeValue( - style_.position(), YGEdgeStart, CompactValue::ofUndefined()); - if (!leadingPosition.isUndefined()) { - return YGResolveValue(leadingPosition, axisSize); - } - } - - auto leadingPosition = YGComputedEdgeValue( - style_.position(), leading[axis], CompactValue::ofUndefined()); - - return leadingPosition.isUndefined() - ? YGFloatOptional{0} - : YGResolveValue(leadingPosition, axisSize); + auto leadingPosition = YGFlexDirectionIsRow(axis) + ? computeEdgeValueForRow( + style_.position(), + YGEdgeStart, + leading[axis], + CompactValue::ofZero()) + : computeEdgeValueForColumn( + style_.position(), leading[axis], CompactValue::ofZero()); + return YGResolveValue(leadingPosition, axisSize); } YGFloatOptional YGNode::getTrailingPosition( const YGFlexDirection axis, const float axisSize) const { - if (YGFlexDirectionIsRow(axis)) { - auto trailingPosition = YGComputedEdgeValue( - style_.position(), YGEdgeEnd, CompactValue::ofUndefined()); - if (!trailingPosition.isUndefined()) { - return YGResolveValue(trailingPosition, axisSize); - } - } - - auto trailingPosition = YGComputedEdgeValue( - style_.position(), trailing[axis], CompactValue::ofUndefined()); - - return trailingPosition.isUndefined() - ? YGFloatOptional{0} - : YGResolveValue(trailingPosition, axisSize); + auto trailingPosition = YGFlexDirectionIsRow(axis) + ? computeEdgeValueForRow( + style_.position(), + YGEdgeEnd, + trailing[axis], + CompactValue::ofZero()) + : computeEdgeValueForColumn( + style_.position(), trailing[axis], CompactValue::ofZero()); + return YGResolveValue(trailingPosition, axisSize); } bool YGNode::isLeadingPositionDefined(const YGFlexDirection axis) const { - return (YGFlexDirectionIsRow(axis) && - !YGComputedEdgeValue( - style_.position(), YGEdgeStart, CompactValue::ofUndefined()) - .isUndefined()) || - !YGComputedEdgeValue( - style_.position(), leading[axis], CompactValue::ofUndefined()) - .isUndefined(); + auto leadingPosition = YGFlexDirectionIsRow(axis) + ? computeEdgeValueForRow( + style_.position(), + YGEdgeStart, + leading[axis], + CompactValue::ofUndefined()) + : computeEdgeValueForColumn( + style_.position(), leading[axis], CompactValue::ofUndefined()); + return !leadingPosition.isUndefined(); } bool YGNode::isTrailingPosDefined(const YGFlexDirection axis) const { - return (YGFlexDirectionIsRow(axis) && - !YGComputedEdgeValue( - style_.position(), YGEdgeEnd, CompactValue::ofUndefined()) - .isUndefined()) || - !YGComputedEdgeValue( - style_.position(), trailing[axis], CompactValue::ofUndefined()) - .isUndefined(); + auto trailingPosition = YGFlexDirectionIsRow(axis) + ? computeEdgeValueForRow( + style_.position(), + YGEdgeEnd, + trailing[axis], + CompactValue::ofUndefined()) + : computeEdgeValueForColumn( + style_.position(), trailing[axis], CompactValue::ofUndefined()); + return !trailingPosition.isUndefined(); } YGFloatOptional YGNode::getLeadingMargin( const YGFlexDirection axis, const float widthSize) const { - if (YGFlexDirectionIsRow(axis) && - !style_.margin()[YGEdgeStart].isUndefined()) { - return YGResolveValueMargin(style_.margin()[YGEdgeStart], widthSize); - } - - return YGResolveValueMargin( - YGComputedEdgeValue( - style_.margin(), leading[axis], CompactValue::ofZero()), - widthSize); + auto leadingMargin = YGFlexDirectionIsRow(axis) + ? computeEdgeValueForRow( + style_.margin(), YGEdgeStart, leading[axis], CompactValue::ofZero()) + : computeEdgeValueForColumn( + style_.margin(), leading[axis], CompactValue::ofZero()); + return YGResolveValueMargin(leadingMargin, widthSize); } YGFloatOptional YGNode::getTrailingMargin( const YGFlexDirection axis, const float widthSize) const { - if (YGFlexDirectionIsRow(axis) && !style_.margin()[YGEdgeEnd].isUndefined()) { - return YGResolveValueMargin(style_.margin()[YGEdgeEnd], widthSize); - } - - return YGResolveValueMargin( - YGComputedEdgeValue( - style_.margin(), trailing[axis], CompactValue::ofZero()), - widthSize); + auto trailingMargin = YGFlexDirectionIsRow(axis) + ? computeEdgeValueForRow( + style_.margin(), YGEdgeEnd, trailing[axis], CompactValue::ofZero()) + : computeEdgeValueForColumn( + style_.margin(), trailing[axis], CompactValue::ofZero()); + return YGResolveValueMargin(trailingMargin, widthSize); } YGFloatOptional YGNode::getMarginForAxis( @@ -147,7 +169,6 @@ YGSize YGNode::measure( float height, YGMeasureMode heightMode, void* layoutContext) { - return facebook::yoga::detail::getBooleanData(flags, measureUsesContext_) ? measure_.withContext( this, width, widthMode, height, heightMode, layoutContext) @@ -448,68 +469,48 @@ bool YGNode::isNodeFlexible() { } float YGNode::getLeadingBorder(const YGFlexDirection axis) const { - YGValue leadingBorder; - if (YGFlexDirectionIsRow(axis) && - !style_.border()[YGEdgeStart].isUndefined()) { - leadingBorder = style_.border()[YGEdgeStart]; - if (leadingBorder.value >= 0) { - return leadingBorder.value; - } - } - - leadingBorder = YGComputedEdgeValue( - style_.border(), leading[axis], CompactValue::ofZero()); - return YGFloatMax(leadingBorder.value, 0.0f); + YGValue leadingBorder = YGFlexDirectionIsRow(axis) + ? computeEdgeValueForRow( + style_.border(), YGEdgeStart, leading[axis], CompactValue::ofZero()) + : computeEdgeValueForColumn( + style_.border(), leading[axis], CompactValue::ofZero()); + return fmaxf(leadingBorder.value, 0.0f); } -float YGNode::getTrailingBorder(const YGFlexDirection flexDirection) const { - YGValue trailingBorder; - if (YGFlexDirectionIsRow(flexDirection) && - !style_.border()[YGEdgeEnd].isUndefined()) { - trailingBorder = style_.border()[YGEdgeEnd]; - if (trailingBorder.value >= 0.0f) { - return trailingBorder.value; - } - } - - trailingBorder = YGComputedEdgeValue( - style_.border(), trailing[flexDirection], CompactValue::ofZero()); - return YGFloatMax(trailingBorder.value, 0.0f); +float YGNode::getTrailingBorder(const YGFlexDirection axis) const { + YGValue trailingBorder = YGFlexDirectionIsRow(axis) + ? computeEdgeValueForRow( + style_.border(), YGEdgeEnd, trailing[axis], CompactValue::ofZero()) + : computeEdgeValueForColumn( + style_.border(), trailing[axis], CompactValue::ofZero()); + return fmaxf(trailingBorder.value, 0.0f); } YGFloatOptional YGNode::getLeadingPadding( const YGFlexDirection axis, const float widthSize) const { - const YGFloatOptional paddingEdgeStart = - YGResolveValue(style_.padding()[YGEdgeStart], widthSize); - if (YGFlexDirectionIsRow(axis) && - !style_.padding()[YGEdgeStart].isUndefined() && - !paddingEdgeStart.isUndefined() && paddingEdgeStart.unwrap() >= 0.0f) { - return paddingEdgeStart; - } - - YGFloatOptional resolvedValue = YGResolveValue( - YGComputedEdgeValue( - style_.padding(), leading[axis], CompactValue::ofZero()), - widthSize); - return YGFloatOptionalMax(resolvedValue, YGFloatOptional(0.0f)); + auto leadingPadding = YGFlexDirectionIsRow(axis) + ? computeEdgeValueForRow( + style_.padding(), + YGEdgeStart, + leading[axis], + CompactValue::ofZero()) + : computeEdgeValueForColumn( + style_.padding(), leading[axis], CompactValue::ofZero()); + return YGFloatOptionalMax( + YGResolveValue(leadingPadding, widthSize), YGFloatOptional(0.0f)); } YGFloatOptional YGNode::getTrailingPadding( const YGFlexDirection axis, const float widthSize) const { - const YGFloatOptional paddingEdgeEnd = - YGResolveValue(style_.padding()[YGEdgeEnd], widthSize); - if (YGFlexDirectionIsRow(axis) && paddingEdgeEnd >= YGFloatOptional{0.0f}) { - return paddingEdgeEnd; - } - - YGFloatOptional resolvedValue = YGResolveValue( - YGComputedEdgeValue( - style_.padding(), trailing[axis], CompactValue::ofZero()), - widthSize); - - return YGFloatOptionalMax(resolvedValue, YGFloatOptional(0.0f)); + auto trailingPadding = YGFlexDirectionIsRow(axis) + ? computeEdgeValueForRow( + style_.padding(), YGEdgeEnd, trailing[axis], CompactValue::ofZero()) + : computeEdgeValueForColumn( + style_.padding(), trailing[axis], CompactValue::ofZero()); + return YGFloatOptionalMax( + YGResolveValue(trailingPadding, widthSize), YGFloatOptional(0.0f)); } YGFloatOptional YGNode::getLeadingPaddingAndBorder( diff --git a/yoga/YGNode.h b/yoga/YGNode.h index 63d98fe3..4b6e6277 100644 --- a/yoga/YGNode.h +++ b/yoga/YGNode.h @@ -193,6 +193,17 @@ public: return resolvedDimensions_[index]; } + static CompactValue computeEdgeValueForColumn( + const YGStyle::Edges& edges, + YGEdge edge, + CompactValue defaultValue); + + static CompactValue computeEdgeValueForRow( + const YGStyle::Edges& edges, + YGEdge rowEdge, + YGEdge edge, + CompactValue defaultValue); + // Methods related to positions, margin, padding and border YGFloatOptional getLeadingPosition( const YGFlexDirection axis, diff --git a/yoga/YGNodePrint.cpp b/yoga/YGNodePrint.cpp index 26efa485..72d147db 100644 --- a/yoga/YGNodePrint.cpp +++ b/yoga/YGNodePrint.cpp @@ -104,10 +104,13 @@ static void appendEdgeIfNotUndefined( const string& str, const YGStyle::Edges& edges, const YGEdge edge) { - appendNumberIfNotUndefined( - base, - str, - YGComputedEdgeValue(edges, edge, detail::CompactValue::ofUndefined())); + // TODO: this doesn't take RTL / YGEdgeStart / YGEdgeEnd into account + auto value = (edge == YGEdgeLeft || edge == YGEdgeRight) + ? YGNode::computeEdgeValueForRow( + edges, edge, edge, detail::CompactValue::ofUndefined()) + : YGNode::computeEdgeValueForColumn( + edges, edge, detail::CompactValue::ofUndefined()); + appendNumberIfNotUndefined(base, str, value); } void YGNodeToString( diff --git a/yoga/Yoga-internal.h b/yoga/Yoga-internal.h index 1a22f24c..b671f177 100644 --- a/yoga/Yoga-internal.h +++ b/yoga/Yoga-internal.h @@ -144,8 +144,3 @@ static const float kDefaultFlexShrink = 0.0f; static const float kWebDefaultFlexShrink = 1.0f; extern bool YGFloatsEqual(const float a, const float b); -extern facebook::yoga::detail::CompactValue YGComputedEdgeValue( - const facebook::yoga::detail::Values< - facebook::yoga::enums::count()>& edges, - YGEdge edge, - facebook::yoga::detail::CompactValue defaultValue); diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index f24563df..196fc7b7 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -110,36 +110,6 @@ YOGA_EXPORT bool YGFloatIsUndefined(const float value) { return facebook::yoga::isUndefined(value); } -detail::CompactValue YGComputedEdgeValue( - const YGStyle::Edges& edges, - YGEdge edge, - detail::CompactValue defaultValue) { - if (!edges[edge].isUndefined()) { - return edges[edge]; - } - - if ((edge == YGEdgeTop || edge == YGEdgeBottom) && - !edges[YGEdgeVertical].isUndefined()) { - return edges[YGEdgeVertical]; - } - - if ((edge == YGEdgeLeft || edge == YGEdgeRight || edge == YGEdgeStart || - edge == YGEdgeEnd) && - !edges[YGEdgeHorizontal].isUndefined()) { - return edges[YGEdgeHorizontal]; - } - - if (!edges[YGEdgeAll].isUndefined()) { - return edges[YGEdgeAll]; - } - - if (edge == YGEdgeStart || edge == YGEdgeEnd) { - return detail::CompactValue::ofUndefined(); - } - - return defaultValue; -} - YOGA_EXPORT void* YGNodeGetContext(YGNodeRef node) { return node->getContext(); } From e87f429703677061129a39ef6dc5f19da33608e1 Mon Sep 17 00:00:00 2001 From: Pieter De Baets Date: Mon, 15 Mar 2021 16:53:05 -0700 Subject: [PATCH 288/347] Simplify YGNodeCalculateAvailableInnerDim Summary: Avoid recalculating margin and padding by pre-subtracting the margin from `availableWidth` and inlining the calculation of `paddingAndBorderAxisCross`. Changelog: [Internal] Reviewed By: SidharthGuglani Differential Revision: D27010094 fbshipit-source-id: afc3cf251a0306b9e5d7f0dc6856feee8d1dca6e --- yoga/Yoga.cpp | 80 +++++++++++++++++++++++++++------------------------ yoga/Yoga.h | 2 +- 2 files changed, 43 insertions(+), 39 deletions(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 196fc7b7..db3a0704 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -1848,21 +1848,11 @@ static void YGZeroOutLayoutRecursivly( static float YGNodeCalculateAvailableInnerDim( const YGNodeConstRef node, - YGFlexDirection axis, - float availableDim, - float ownerDim, - float ownerDimForMarginPadding) { - YGFlexDirection direction = - YGFlexDirectionIsRow(axis) ? YGFlexDirectionRow : YGFlexDirectionColumn; - YGDimension dimension = - YGFlexDirectionIsRow(axis) ? YGDimensionWidth : YGDimensionHeight; - - const float margin = - node->getMarginForAxis(direction, ownerDimForMarginPadding).unwrap(); - const float paddingAndBorder = - YGNodePaddingAndBorderForAxis(node, direction, ownerDimForMarginPadding); - - float availableInnerDim = availableDim - margin - paddingAndBorder; + const YGDimension dimension, + const float availableDim, + const float paddingAndBorder, + const float ownerDim) { + float availableInnerDim = availableDim - paddingAndBorder; // Max dimension overrides predefined dimension value; Min dimension in turn // overrides both of the above if (!YGFloatIsUndefined(availableInnerDim)) { @@ -2836,12 +2826,14 @@ static void YGNodelayoutImpl( const float mainAxisownerSize = isMainAxisRow ? ownerWidth : ownerHeight; const float crossAxisownerSize = isMainAxisRow ? ownerHeight : ownerWidth; - const float leadingPaddingAndBorderCross = - node->getLeadingPaddingAndBorder(crossAxis, ownerWidth).unwrap(); const float paddingAndBorderAxisMain = YGNodePaddingAndBorderForAxis(node, mainAxis, ownerWidth); + const float leadingPaddingAndBorderCross = + node->getLeadingPaddingAndBorder(crossAxis, ownerWidth).unwrap(); + const float trailingPaddingAndBorderCross = + node->getTrailingPaddingAndBorder(crossAxis, ownerWidth).unwrap(); const float paddingAndBorderAxisCross = - YGNodePaddingAndBorderForAxis(node, crossAxis, ownerWidth); + leadingPaddingAndBorderCross + trailingPaddingAndBorderCross; YGMeasureMode measureModeMainDim = isMainAxisRow ? widthMeasureMode : heightMeasureMode; @@ -2858,30 +2850,20 @@ static void YGNodelayoutImpl( const float marginAxisColumn = node->getMarginForAxis(YGFlexDirectionColumn, ownerWidth).unwrap(); - const auto& minDimensions = node->getStyle().minDimensions(); - const auto& maxDimensions = node->getStyle().maxDimensions(); - const float minInnerWidth = - YGResolveValue(minDimensions[YGDimensionWidth], ownerWidth).unwrap() - - paddingAndBorderAxisRow; - const float maxInnerWidth = - YGResolveValue(maxDimensions[YGDimensionWidth], ownerWidth).unwrap() - - paddingAndBorderAxisRow; - const float minInnerHeight = - YGResolveValue(minDimensions[YGDimensionHeight], ownerHeight).unwrap() - - paddingAndBorderAxisColumn; - const float maxInnerHeight = - YGResolveValue(maxDimensions[YGDimensionHeight], ownerHeight).unwrap() - - paddingAndBorderAxisColumn; - - const float minInnerMainDim = isMainAxisRow ? minInnerWidth : minInnerHeight; - const float maxInnerMainDim = isMainAxisRow ? maxInnerWidth : maxInnerHeight; - // STEP 2: DETERMINE AVAILABLE SIZE IN MAIN AND CROSS DIRECTIONS float availableInnerWidth = YGNodeCalculateAvailableInnerDim( - node, YGFlexDirectionRow, availableWidth, ownerWidth, ownerWidth); + node, + YGDimensionWidth, + availableWidth - marginAxisRow, + paddingAndBorderAxisRow, + ownerWidth); float availableInnerHeight = YGNodeCalculateAvailableInnerDim( - node, YGFlexDirectionColumn, availableHeight, ownerHeight, ownerWidth); + node, + YGDimensionHeight, + availableHeight - marginAxisColumn, + paddingAndBorderAxisColumn, + ownerHeight); float availableInnerMainDim = isMainAxisRow ? availableInnerWidth : availableInnerHeight; @@ -2953,6 +2935,28 @@ static void YGNodelayoutImpl( // If we don't measure with exact main dimension we want to ensure we don't // violate min and max if (measureModeMainDim != YGMeasureModeExactly) { + const auto& minDimensions = node->getStyle().minDimensions(); + const auto& maxDimensions = node->getStyle().maxDimensions(); + const float minInnerWidth = + YGResolveValue(minDimensions[YGDimensionWidth], ownerWidth).unwrap() - + paddingAndBorderAxisRow; + const float maxInnerWidth = + YGResolveValue(maxDimensions[YGDimensionWidth], ownerWidth).unwrap() - + paddingAndBorderAxisRow; + const float minInnerHeight = + YGResolveValue(minDimensions[YGDimensionHeight], ownerHeight) + .unwrap() - + paddingAndBorderAxisColumn; + const float maxInnerHeight = + YGResolveValue(maxDimensions[YGDimensionHeight], ownerHeight) + .unwrap() - + paddingAndBorderAxisColumn; + + const float minInnerMainDim = + isMainAxisRow ? minInnerWidth : minInnerHeight; + const float maxInnerMainDim = + isMainAxisRow ? maxInnerWidth : maxInnerHeight; + if (!YGFloatIsUndefined(minInnerMainDim) && collectedFlexItemsValues.sizeConsumedOnCurrentLine < minInnerMainDim) { diff --git a/yoga/Yoga.h b/yoga/Yoga.h index 87901a28..86cd65e2 100644 --- a/yoga/Yoga.h +++ b/yoga/Yoga.h @@ -107,7 +107,7 @@ WIN_EXPORT void YGNodeMarkDirty(YGNodeRef node); // Marks the current node and all its descendants as dirty. // -// Intended to be used for Uoga benchmarks. Don't use in production, as calling +// Intended to be used for Yoga benchmarks. Don't use in production, as calling // `YGCalculateLayout` will cause the recalculation of each and every node. WIN_EXPORT void YGNodeMarkDirtyAndPropogateToDescendants(YGNodeRef node); From b2095801ba3c5621e33ba7cbd7aae0c0371f40b3 Mon Sep 17 00:00:00 2001 From: Pieter De Baets Date: Mon, 15 Mar 2021 16:53:05 -0700 Subject: [PATCH 289/347] Simplify YGNodeEmptyContainer / YGNodeWithMeasureFunc / YGNodeFixedSize Summary: These methods are only ever called just after setting the various YGStyle props. Therefore we can read any padding / margin / border state from there rather than recalculating it. Changelog: [Internal] Reviewed By: SidharthGuglani Differential Revision: D27010098 fbshipit-source-id: a33f879b25c54cfdb0ffc724b6aa325858e97df5 --- yoga/Yoga.cpp | 124 +++++++++++++++++++++----------------------------- 1 file changed, 52 insertions(+), 72 deletions(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index db3a0704..9553366e 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -1651,40 +1651,33 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( availableHeight = YGUndefined; } - const float paddingAndBorderAxisRow = - YGNodePaddingAndBorderForAxis(node, YGFlexDirectionRow, ownerWidth); - const float paddingAndBorderAxisColumn = - YGNodePaddingAndBorderForAxis(node, YGFlexDirectionColumn, ownerWidth); - const float marginAxisRow = - node->getMarginForAxis(YGFlexDirectionRow, ownerWidth).unwrap(); - const float marginAxisColumn = - node->getMarginForAxis(YGFlexDirectionColumn, ownerWidth).unwrap(); + const auto& padding = node->getLayout().padding; + const auto& border = node->getLayout().border; + const float paddingAndBorderAxisRow = padding[YGEdgeLeft] + + padding[YGEdgeRight] + border[YGEdgeLeft] + border[YGEdgeRight]; + const float paddingAndBorderAxisColumn = padding[YGEdgeTop] + + padding[YGEdgeBottom] + border[YGEdgeTop] + border[YGEdgeBottom]; // We want to make sure we don't call measure with negative size const float innerWidth = YGFloatIsUndefined(availableWidth) ? availableWidth - : YGFloatMax(0, availableWidth - marginAxisRow - paddingAndBorderAxisRow); + : YGFloatMax(0, availableWidth - paddingAndBorderAxisRow); const float innerHeight = YGFloatIsUndefined(availableHeight) ? availableHeight - : YGFloatMax( - 0, availableHeight - marginAxisColumn - paddingAndBorderAxisColumn); + : YGFloatMax(0, availableHeight - paddingAndBorderAxisColumn); if (widthMeasureMode == YGMeasureModeExactly && heightMeasureMode == YGMeasureModeExactly) { // Don't bother sizing the text if both dimensions are already defined. node->setLayoutMeasuredDimension( YGNodeBoundAxis( - node, - YGFlexDirectionRow, - availableWidth - marginAxisRow, - ownerWidth, - ownerWidth), + node, YGFlexDirectionRow, availableWidth, ownerWidth, ownerWidth), YGDimensionWidth); node->setLayoutMeasuredDimension( YGNodeBoundAxis( node, YGFlexDirectionColumn, - availableHeight - marginAxisColumn, + availableHeight, ownerHeight, ownerWidth), YGDimensionHeight); @@ -1721,7 +1714,7 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( (widthMeasureMode == YGMeasureModeUndefined || widthMeasureMode == YGMeasureModeAtMost) ? measuredSize.width + paddingAndBorderAxisRow - : availableWidth - marginAxisRow, + : availableWidth, ownerWidth, ownerWidth), YGDimensionWidth); @@ -1733,7 +1726,7 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( (heightMeasureMode == YGMeasureModeUndefined || heightMeasureMode == YGMeasureModeAtMost) ? measuredSize.height + paddingAndBorderAxisColumn - : availableHeight - marginAxisColumn, + : availableHeight, ownerHeight, ownerWidth), YGDimensionHeight); @@ -1750,37 +1743,28 @@ static void YGNodeEmptyContainerSetMeasuredDimensions( const YGMeasureMode heightMeasureMode, const float ownerWidth, const float ownerHeight) { - const float paddingAndBorderAxisRow = - YGNodePaddingAndBorderForAxis(node, YGFlexDirectionRow, ownerWidth); - const float paddingAndBorderAxisColumn = - YGNodePaddingAndBorderForAxis(node, YGFlexDirectionColumn, ownerWidth); - const float marginAxisRow = - node->getMarginForAxis(YGFlexDirectionRow, ownerWidth).unwrap(); - const float marginAxisColumn = - node->getMarginForAxis(YGFlexDirectionColumn, ownerWidth).unwrap(); + const auto& padding = node->getLayout().padding; + const auto& border = node->getLayout().border; + float width = availableWidth; + if (widthMeasureMode == YGMeasureModeUndefined || + widthMeasureMode == YGMeasureModeAtMost) { + width = padding[YGEdgeLeft] + padding[YGEdgeRight] + border[YGEdgeLeft] + + border[YGEdgeRight]; + } node->setLayoutMeasuredDimension( - YGNodeBoundAxis( - node, - YGFlexDirectionRow, - (widthMeasureMode == YGMeasureModeUndefined || - widthMeasureMode == YGMeasureModeAtMost) - ? paddingAndBorderAxisRow - : availableWidth - marginAxisRow, - ownerWidth, - ownerWidth), + YGNodeBoundAxis(node, YGFlexDirectionRow, width, ownerWidth, ownerWidth), YGDimensionWidth); + float height = availableHeight; + if (heightMeasureMode == YGMeasureModeUndefined || + heightMeasureMode == YGMeasureModeAtMost) { + height = padding[YGEdgeTop] + padding[YGEdgeBottom] + border[YGEdgeTop] + + border[YGEdgeBottom]; + } node->setLayoutMeasuredDimension( YGNodeBoundAxis( - node, - YGFlexDirectionColumn, - (heightMeasureMode == YGMeasureModeUndefined || - heightMeasureMode == YGMeasureModeAtMost) - ? paddingAndBorderAxisColumn - : availableHeight - marginAxisColumn, - ownerHeight, - ownerWidth), + node, YGFlexDirectionColumn, height, ownerHeight, ownerWidth), YGDimensionHeight); } @@ -1798,11 +1782,6 @@ static bool YGNodeFixedSizeSetMeasuredDimensions( heightMeasureMode == YGMeasureModeAtMost && availableHeight <= 0.0f) || (widthMeasureMode == YGMeasureModeExactly && heightMeasureMode == YGMeasureModeExactly)) { - auto marginAxisColumn = - node->getMarginForAxis(YGFlexDirectionColumn, ownerWidth).unwrap(); - auto marginAxisRow = - node->getMarginForAxis(YGFlexDirectionRow, ownerWidth).unwrap(); - node->setLayoutMeasuredDimension( YGNodeBoundAxis( node, @@ -1811,7 +1790,7 @@ static bool YGNodeFixedSizeSetMeasuredDimensions( (widthMeasureMode == YGMeasureModeAtMost && availableWidth < 0.0f) ? 0.0f - : availableWidth - marginAxisRow, + : availableWidth, ownerWidth, ownerWidth), YGDimensionWidth); @@ -1824,7 +1803,7 @@ static bool YGNodeFixedSizeSetMeasuredDimensions( (heightMeasureMode == YGMeasureModeAtMost && availableHeight < 0.0f) ? 0.0f - : availableHeight - marginAxisColumn, + : availableHeight, ownerHeight, ownerWidth), YGDimensionHeight); @@ -2739,16 +2718,22 @@ static void YGNodelayoutImpl( const YGEdge startEdge = direction == YGDirectionLTR ? YGEdgeLeft : YGEdgeRight; const YGEdge endEdge = direction == YGDirectionLTR ? YGEdgeRight : YGEdgeLeft; - node->setLayoutMargin( - node->getLeadingMargin(flexRowDirection, ownerWidth).unwrap(), startEdge); - node->setLayoutMargin( - node->getTrailingMargin(flexRowDirection, ownerWidth).unwrap(), endEdge); - node->setLayoutMargin( - node->getLeadingMargin(flexColumnDirection, ownerWidth).unwrap(), - YGEdgeTop); - node->setLayoutMargin( - node->getTrailingMargin(flexColumnDirection, ownerWidth).unwrap(), - YGEdgeBottom); + + const float marginRowLeading = + node->getLeadingMargin(flexRowDirection, ownerWidth).unwrap(); + node->setLayoutMargin(marginRowLeading, startEdge); + const float marginRowTrailing = + node->getTrailingMargin(flexRowDirection, ownerWidth).unwrap(); + node->setLayoutMargin(marginRowTrailing, endEdge); + const float marginColumnLeading = + node->getLeadingMargin(flexColumnDirection, ownerWidth).unwrap(); + node->setLayoutMargin(marginColumnLeading, YGEdgeTop); + const float marginColumnTrailing = + node->getTrailingMargin(flexColumnDirection, ownerWidth).unwrap(); + node->setLayoutMargin(marginColumnTrailing, YGEdgeBottom); + + const float marginAxisRow = marginRowLeading + marginRowTrailing; + const float marginAxisColumn = marginColumnLeading + marginColumnTrailing; node->setLayoutBorder(node->getLeadingBorder(flexRowDirection), startEdge); node->setLayoutBorder(node->getTrailingBorder(flexRowDirection), endEdge); @@ -2771,8 +2756,8 @@ static void YGNodelayoutImpl( if (node->hasMeasureFunc()) { YGNodeWithMeasureFuncSetMeasuredDimensions( node, - availableWidth, - availableHeight, + availableWidth - marginAxisRow, + availableHeight - marginAxisColumn, widthMeasureMode, heightMeasureMode, ownerWidth, @@ -2787,8 +2772,8 @@ static void YGNodelayoutImpl( if (childCount == 0) { YGNodeEmptyContainerSetMeasuredDimensions( node, - availableWidth, - availableHeight, + availableWidth - marginAxisRow, + availableHeight - marginAxisColumn, widthMeasureMode, heightMeasureMode, ownerWidth, @@ -2801,8 +2786,8 @@ static void YGNodelayoutImpl( if (!performLayout && YGNodeFixedSizeSetMeasuredDimensions( node, - availableWidth, - availableHeight, + availableWidth - marginAxisRow, + availableHeight - marginAxisColumn, widthMeasureMode, heightMeasureMode, ownerWidth, @@ -2845,11 +2830,6 @@ static void YGNodelayoutImpl( const float paddingAndBorderAxisColumn = isMainAxisRow ? paddingAndBorderAxisCross : paddingAndBorderAxisMain; - const float marginAxisRow = - node->getMarginForAxis(YGFlexDirectionRow, ownerWidth).unwrap(); - const float marginAxisColumn = - node->getMarginForAxis(YGFlexDirectionColumn, ownerWidth).unwrap(); - // STEP 2: DETERMINE AVAILABLE SIZE IN MAIN AND CROSS DIRECTIONS float availableInnerWidth = YGNodeCalculateAvailableInnerDim( From 67b6c24d7bd1bac5869f95832ff1cf8b43d4a617 Mon Sep 17 00:00:00 2001 From: Altaibayar Tseveenbayar Date: Thu, 18 Mar 2021 03:42:31 -0700 Subject: [PATCH 290/347] Yoga Visual Studio project file fix Summary: Yoga Visual Studio project file was outdated. Made it back working/compilable Reviewed By: Andrey-Mishanin Differential Revision: D27138942 fbshipit-source-id: 5d57e61dbb415db54e255e148739c2e670f3bd23 --- csharp/Yoga/Yoga.vcxproj | 7 +- csharp/Yoga/Yoga.vcxproj.filters | 221 +++++++++++++++++-------------- 2 files changed, 124 insertions(+), 104 deletions(-) diff --git a/csharp/Yoga/Yoga.vcxproj b/csharp/Yoga/Yoga.vcxproj index 5899a0db..0bb66327 100755 --- a/csharp/Yoga/Yoga.vcxproj +++ b/csharp/Yoga/Yoga.vcxproj @@ -227,6 +227,8 @@ + + @@ -236,6 +238,7 @@ + @@ -243,14 +246,16 @@ + + - + diff --git a/csharp/Yoga/Yoga.vcxproj.filters b/csharp/Yoga/Yoga.vcxproj.filters index 3243c630..c03f853a 100755 --- a/csharp/Yoga/Yoga.vcxproj.filters +++ b/csharp/Yoga/Yoga.vcxproj.filters @@ -1,104 +1,119 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Resource Files - - + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Resource Files + + \ No newline at end of file From db6be5286ebc7e4a824797178c6205613852cd5f Mon Sep 17 00:00:00 2001 From: Altaibayar Tseveenbayar Date: Fri, 19 Mar 2021 19:22:49 -0700 Subject: [PATCH 291/347] C4244 possible precision loss warning fix Summary: Fixing `warning C4244: 'argument': conversion from 'double' to 'float', possible loss of data` Changelog: [Internal] Reviewed By: SidharthGuglani Differential Revision: D27132355 fbshipit-source-id: 55ff35be368ef4f6093865eb88c17e753250d179 --- yoga/Utils.cpp | 2 +- yoga/Yoga-internal.h | 4 ++++ yoga/Yoga.cpp | 28 ++++++++++++++++------------ 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/yoga/Utils.cpp b/yoga/Utils.cpp index edb198d2..eaa74b06 100644 --- a/yoga/Utils.cpp +++ b/yoga/Utils.cpp @@ -55,7 +55,7 @@ bool YGFloatsEqual(const float a, const float b) { bool YGDoubleEqual(const double a, const double b) { if (!yoga::isUndefined(a) && !yoga::isUndefined(b)) { - return fabs(a - b) < 0.0001f; + return fabs(a - b) < 0.0001; } return yoga::isUndefined(a) && yoga::isUndefined(b); } diff --git a/yoga/Yoga-internal.h b/yoga/Yoga-internal.h index b671f177..acd173be 100644 --- a/yoga/Yoga-internal.h +++ b/yoga/Yoga-internal.h @@ -33,6 +33,10 @@ inline bool isUndefined(float value) { return std::isnan(value); } +inline bool isUndefined(double value) { + return std::isnan(value); +} + } // namespace yoga } // namespace facebook diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 9553366e..33f70e82 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -106,6 +106,10 @@ static int YGDefaultLog( #undef YG_UNUSED #endif +static inline bool YGDoubleIsUndefined(const double value) { + return facebook::yoga::isUndefined(value); +} + YOGA_EXPORT bool YGFloatIsUndefined(const float value) { return facebook::yoga::isUndefined(value); } @@ -3620,10 +3624,10 @@ YOGA_EXPORT float YGRoundValueToPixelGrid( const double pointScaleFactor, const bool forceCeil, const bool forceFloor) { - double scaledValue = ((double) value) * pointScaleFactor; + double scaledValue = value * pointScaleFactor; // We want to calculate `fractial` such that `floor(scaledValue) = scaledValue // - fractial`. - double fractial = fmod(scaledValue, 1.0f); + double fractial = fmod(scaledValue, 1.0); if (fractial < 0) { // This branch is for handling negative numbers for `value`. // @@ -3645,25 +3649,25 @@ YOGA_EXPORT float YGRoundValueToPixelGrid( if (YGDoubleEqual(fractial, 0)) { // First we check if the value is already rounded scaledValue = scaledValue - fractial; - } else if (YGDoubleEqual(fractial, 1.0f)) { - scaledValue = scaledValue - fractial + 1.0f; + } else if (YGDoubleEqual(fractial, 1.0)) { + scaledValue = scaledValue - fractial + 1.0; } else if (forceCeil) { // Next we check if we need to use forced rounding - scaledValue = scaledValue - fractial + 1.0f; + scaledValue = scaledValue - fractial + 1.0; } else if (forceFloor) { scaledValue = scaledValue - fractial; } else { // Finally we just round the value scaledValue = scaledValue - fractial + - (!YGFloatIsUndefined(fractial) && - (fractial > 0.5f || YGDoubleEqual(fractial, 0.5f)) - ? 1.0f - : 0.0f); + (!YGDoubleIsUndefined(fractial) && + (fractial > 0.5 || YGDoubleEqual(fractial, 0.5)) + ? 1.0 + : 0.0); } - return (YGFloatIsUndefined(scaledValue) || - YGFloatIsUndefined(pointScaleFactor)) + return (YGDoubleIsUndefined(scaledValue) || + YGDoubleIsUndefined(pointScaleFactor)) ? YGUndefined - : scaledValue / pointScaleFactor; + : (float) (scaledValue / pointScaleFactor); } YOGA_EXPORT bool YGNodeCanUseCachedMeasurement( From 6c2ba945be91cee985a0738552e960f3ed2059d8 Mon Sep 17 00:00:00 2001 From: Altaibayar Tseveenbayar Date: Mon, 22 Mar 2021 04:31:18 -0700 Subject: [PATCH 292/347] Making yoga by default a static library Summary: We are linking yoga as a static library in most of the places Reviewed By: SidharthGuglani Differential Revision: D27228933 fbshipit-source-id: 725d6551198c96925ae80b3a62ef9737ee7e3052 --- csharp/Yoga/Yoga.vcxproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/csharp/Yoga/Yoga.vcxproj b/csharp/Yoga/Yoga.vcxproj index 0bb66327..306e8e15 100755 --- a/csharp/Yoga/Yoga.vcxproj +++ b/csharp/Yoga/Yoga.vcxproj @@ -36,7 +36,7 @@ - DynamicLibrary + StaticLibrary true v141 Unicode From 638690255c24c2d1a6e644b4f2694643408db228 Mon Sep 17 00:00:00 2001 From: Altaibayar Tseveenbayar Date: Mon, 22 Mar 2021 07:41:16 -0700 Subject: [PATCH 293/347] Yoga set as a static library also for debug+release builds in x64 Summary: Yoga set as a static library also for debug+release builds in x64 Reviewed By: SidharthGuglani Differential Revision: D27230019 fbshipit-source-id: d77e2c4130cd8303d1585723bfad927b9ddba23e --- csharp/Yoga/Yoga.vcxproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/csharp/Yoga/Yoga.vcxproj b/csharp/Yoga/Yoga.vcxproj index 306e8e15..974919de 100755 --- a/csharp/Yoga/Yoga.vcxproj +++ b/csharp/Yoga/Yoga.vcxproj @@ -48,7 +48,7 @@ Unicode - DynamicLibrary + StaticLibrary false v141 true @@ -62,13 +62,13 @@ Unicode - DynamicLibrary + StaticLibrary true v141 Unicode - DynamicLibrary + StaticLibrary false v141 true From 07eaeea7a4e5cfe6f0a1da2cb24d5603613a6d25 Mon Sep 17 00:00:00 2001 From: Aditya Sharat Date: Fri, 26 Mar 2021 10:04:04 -0700 Subject: [PATCH 294/347] Create YogaProps Interface Summary: Create YogaProps Interface; this interface represents the inputs to YogaNode for layout calculation. Changelog: [Internal] Create YogaProps Interface; this interface represents the inputs to YogaNode for layout calculation. Reviewed By: mihaelao Differential Revision: D27229274 fbshipit-source-id: 5205caf2384661369d7a2d7e7f3e49ff831a1c92 --- java/com/facebook/yoga/YogaNode.java | 2 +- java/com/facebook/yoga/YogaProps.java | 151 ++++++++++++++++++++++++++ 2 files changed, 152 insertions(+), 1 deletion(-) create mode 100644 java/com/facebook/yoga/YogaProps.java diff --git a/java/com/facebook/yoga/YogaNode.java b/java/com/facebook/yoga/YogaNode.java index dfec8ec5..542d36bf 100644 --- a/java/com/facebook/yoga/YogaNode.java +++ b/java/com/facebook/yoga/YogaNode.java @@ -9,7 +9,7 @@ package com.facebook.yoga; import javax.annotation.Nullable; -public abstract class YogaNode { +public abstract class YogaNode implements YogaProps { /** The interface the {@link #getData()} object can optionally implement. */ public interface Inputs { diff --git a/java/com/facebook/yoga/YogaProps.java b/java/com/facebook/yoga/YogaProps.java new file mode 100644 index 00000000..9faa520f --- /dev/null +++ b/java/com/facebook/yoga/YogaProps.java @@ -0,0 +1,151 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.yoga; + +public interface YogaProps { + + /* Width properties */ + + void setWidth(float width); + + void setWidthPercent(float percent); + + void setMinWidth(float minWidth); + + void setMinWidthPercent(float percent); + + void setMaxWidth(float maxWidth); + + void setMaxWidthPercent(float percent); + + void setWidthAuto(); + + /* Height properties */ + + void setHeight(float height); + + void setHeightPercent(float percent); + + void setMinHeight(float minHeight); + + void setMinHeightPercent(float percent); + + void setMaxHeight(float maxHeight); + + void setMaxHeightPercent(float percent); + + void setHeightAuto(); + + /* Margin properties */ + + void setMargin(YogaEdge edge, float margin); + + void setMarginPercent(YogaEdge edge, float percent); + + void setMarginAuto(YogaEdge edge); + + /* Padding properties */ + + void setPadding(YogaEdge edge, float padding); + + void setPaddingPercent(YogaEdge edge, float percent); + + /* Position properties */ + + void setPositionType(YogaPositionType positionType); + + void setPosition(YogaEdge edge, float position); + + void setPositionPercent(YogaEdge edge, float percent); + + /* Alignment properties */ + + void setAlignContent(YogaAlign alignContent); + + void setAlignItems(YogaAlign alignItems); + + void setAlignSelf(YogaAlign alignSelf); + + /* Flex properties */ + + void setFlex(float flex); + + void setFlexBasisAuto(); + + void setFlexBasisPercent(float percent); + + void setFlexBasis(float flexBasis); + + void setFlexDirection(YogaFlexDirection direction); + + void setFlexGrow(float flexGrow); + + void setFlexShrink(float flexShrink); + + /* Other properties */ + + void setJustifyContent(YogaJustify justifyContent); + + void setDirection(YogaDirection direction); + + void setBorder(YogaEdge edge, float value); + + void setWrap(YogaWrap wrap); + + void setAspectRatio(float aspectRatio); + + void setIsReferenceBaseline(boolean isReferenceBaseline); + + void setMeasureFunction(YogaMeasureFunction measureFunction); + + void setBaselineFunction(YogaBaselineFunction yogaBaselineFunction); + + /* Getters */ + + YogaValue getWidth(); + + YogaValue getMinWidth(); + + YogaValue getMaxWidth(); + + YogaValue getHeight(); + + YogaValue getMinHeight(); + + YogaValue getMaxHeight(); + + YogaDirection getStyleDirection(); + + YogaFlexDirection getFlexDirection(); + + YogaJustify getJustifyContent(); + + YogaAlign getAlignItems(); + + YogaAlign getAlignSelf(); + + YogaAlign getAlignContent(); + + YogaPositionType getPositionType(); + + float getFlexGrow(); + + float getFlexShrink(); + + YogaValue getFlexBasis(); + + float getAspectRatio(); + + YogaValue getMargin(YogaEdge edge); + + YogaValue getPadding(YogaEdge edge); + + YogaValue getPosition(YogaEdge edge); + + float getBorder(YogaEdge edge); +} From cbf6495d66a7a8066d1354daa14d3bb1af19f6ef Mon Sep 17 00:00:00 2001 From: Aditya Sharat Date: Tue, 30 Mar 2021 05:41:22 -0700 Subject: [PATCH 295/347] Refactor YogaNode.Inputs freeze API Summary: `InternalNode` will eventually not have a pointer to its parent. This diff removes one of the usages of the `InternalNode#getParent()` API. `InternalNode` will also not host the `YogaNode` eventually; so this diff also removes one of the usages of the `InternalNode#getYogaNode()` api. Now the `Inputs#freeze` api will pass the parent's `YogaNode` and the `YogaNode` of the node (this) being measured. Changelog: [Internal] Passes The YogaNode and parent YogaNode in the Inputs.freeze API Reviewed By: SidharthGuglani Differential Revision: D27240229 fbshipit-source-id: efc4ec3249a963c3181111f9b989d8ed9e17feb4 --- java/com/facebook/yoga/YogaNode.java | 2 +- java/com/facebook/yoga/YogaNodeJNIBase.java | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/java/com/facebook/yoga/YogaNode.java b/java/com/facebook/yoga/YogaNode.java index 542d36bf..109172ee 100644 --- a/java/com/facebook/yoga/YogaNode.java +++ b/java/com/facebook/yoga/YogaNode.java @@ -15,7 +15,7 @@ public abstract class YogaNode implements YogaProps { public interface Inputs { /** Requests the data object to disable mutations of its inputs. */ - void freeze(); + void freeze(final YogaNode node, final @Nullable YogaNode parent); } public abstract void reset(); diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index 03354556..7efb8ce1 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -197,15 +197,16 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { long[] nativePointers = null; YogaNodeJNIBase[] nodes = null; - freeze(); + freeze(null); ArrayList n = new ArrayList<>(); n.add(this); for (int i = 0; i < n.size(); ++i) { - List children = n.get(i).mChildren; + final YogaNodeJNIBase parent = n.get(i); + List children = parent.mChildren; if (children != null) { for (YogaNodeJNIBase child : children) { - child.freeze(); + child.freeze(parent); n.add(child); } } @@ -220,10 +221,10 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { YogaNative.jni_YGNodeCalculateLayoutJNI(mNativePointer, width, height, nativePointers, nodes); } - private void freeze() { + private void freeze(YogaNode parent) { Object data = getData(); if (data instanceof Inputs) { - ((Inputs) data).freeze(); + ((Inputs) data).freeze(this, parent); } } From a999150c19415c5b40e941da528bc924fb1d73ad Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Thu, 20 May 2021 21:22:47 -0700 Subject: [PATCH 296/347] Apply clang-format Reviewed By: igorsugak Differential Revision: D28477074 fbshipit-source-id: f15dfc45b9fb30c661ebe2899cd882676d0fdf2a --- java/jni/YGJNIVanilla.cpp | 3 +-- tests/YGLoggerTest.cpp | 9 +++------ yoga/Yoga.cpp | 8 ++------ 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp index 65343821..3503be40 100644 --- a/java/jni/YGJNIVanilla.cpp +++ b/java/jni/YGJNIVanilla.cpp @@ -726,8 +726,7 @@ static void jni_YGNodePrintJNI(JNIEnv* env, jobject obj, jlong nativePointer) { const YGNodeRef node = _jlong2YGNodeRef(nativePointer); YGNodePrint( node, - (YGPrintOptions)( - YGPrintOptionsStyle | YGPrintOptionsLayout | YGPrintOptionsChildren)); + (YGPrintOptions) (YGPrintOptionsStyle | YGPrintOptionsLayout | YGPrintOptionsChildren)); #endif } diff --git a/tests/YGLoggerTest.cpp b/tests/YGLoggerTest.cpp index 5c319ba6..f9d8002c 100644 --- a/tests/YGLoggerTest.cpp +++ b/tests/YGLoggerTest.cpp @@ -73,8 +73,7 @@ TEST(YogaTest, logger_default_node_should_print_no_style_info) { YGNodeCalculateLayout(root, YGUnitUndefined, YGUnitUndefined, YGDirectionLTR); YGNodePrint( root, - (YGPrintOptions)( - YGPrintOptionsLayout | YGPrintOptionsChildren | YGPrintOptionsStyle)); + (YGPrintOptions) (YGPrintOptionsLayout | YGPrintOptionsChildren | YGPrintOptionsStyle)); YGConfigSetLogger(config, NULL); YGNodeFree(root); @@ -98,8 +97,7 @@ TEST(YogaTest, logger_node_with_percentage_absolute_position_and_margin) { YGNodeCalculateLayout(root, YGUnitUndefined, YGUnitUndefined, YGDirectionLTR); YGNodePrint( root, - (YGPrintOptions)( - YGPrintOptionsLayout | YGPrintOptionsChildren | YGPrintOptionsStyle)); + (YGPrintOptions) (YGPrintOptionsLayout | YGPrintOptionsChildren | YGPrintOptionsStyle)); YGConfigSetLogger(config, NULL); YGNodeFree(root); @@ -122,8 +120,7 @@ TEST(YogaTest, logger_node_with_children_should_print_indented) { YGNodeCalculateLayout(root, YGUnitUndefined, YGUnitUndefined, YGDirectionLTR); YGNodePrint( root, - (YGPrintOptions)( - YGPrintOptionsLayout | YGPrintOptionsChildren | YGPrintOptionsStyle)); + (YGPrintOptions) (YGPrintOptionsLayout | YGPrintOptionsChildren | YGPrintOptionsStyle)); YGConfigSetLogger(config, NULL); YGNodeFreeRecursive(root); diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 33f70e82..2c68674a 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -4194,9 +4194,7 @@ YOGA_EXPORT void YGNodeCalculateLayoutWithContext( if (node->getConfig()->printTree) { YGNodePrint( node, - (YGPrintOptions)( - YGPrintOptionsLayout | YGPrintOptionsChildren | - YGPrintOptionsStyle)); + (YGPrintOptions) (YGPrintOptionsLayout | YGPrintOptionsChildren | YGPrintOptionsStyle)); } #endif } @@ -4256,9 +4254,7 @@ YOGA_EXPORT void YGNodeCalculateLayoutWithContext( if (nodeWithoutLegacyFlag->getConfig()->printTree) { YGNodePrint( nodeWithoutLegacyFlag, - (YGPrintOptions)( - YGPrintOptionsLayout | YGPrintOptionsChildren | - YGPrintOptionsStyle)); + (YGPrintOptions) (YGPrintOptionsLayout | YGPrintOptionsChildren | YGPrintOptionsStyle)); } #endif } From 508f4eacdf430cec8f163884c6c107dd80ec4712 Mon Sep 17 00:00:00 2001 From: Pascal Hartig Date: Fri, 21 May 2021 10:10:34 -0700 Subject: [PATCH 297/347] Fix env setting and Android setup (#1085) Summary: *Context: The Yoga OSS build has not been given a lot of attention over the past couple of years and is in serious disrepair. I'll try to get the release pipeline going again to publish to Maven Central as JCenter is shutting down. A bunch of intermediate commits may still have broken builds but will be inching closer to a working one.* The current way env variables are set is no longer supported for security reasons: https://github.blog/changelog/2020-10-01-github-actions-deprecating-set-env-and-add-path-commands/. The manual Android setup is also quite tricky to maintain and can mostly be done through GitHub Actions itself. Please note that the actual build is still failing but that's because we're so far behind with the setup here that the Gradle version no longer works on a modern JVM. I'll fix that in subsequent diffs. Pull Request resolved: https://github.com/facebook/yoga/pull/1085 Test Plan: CI Reviewed By: mweststrate Differential Revision: D28602084 Pulled By: passy fbshipit-source-id: e334ed92d16a9baa185a84b23bb62801399e5650 --- .github/workflows/ci.yml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c5f2c014..2c9152f0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,13 +44,8 @@ jobs: cd buck ant popd - echo "::set-env name=PATH::$PATH:$HOME/buck/bin/" + echo "$HOME/buck/bin" >> $GITHUB_PATH export PATH=$PATH:$HOME/buck/bin/ buck --version - export TERMINAL=dumb - source scripts/android-setup.sh && installAndroidSDK - echo "::set-env name=ANDROID_SDK::$ANDROID_HOME" - echo "::set-env name=ANDROID_NDK_REPOSITORY::$HOME/android-ndk" - echo "::set-env name=ANDROID_NDK_HOME::$ANDROID_NDK_REPOSITORY/android-ndk-r15c" - name: Build run: ./gradlew testDebugUnit && scripts/publish-snapshot.sh From 13e079e8f32430d37043a4c1c1ef584ee87db7fb Mon Sep 17 00:00:00 2001 From: Pascal Hartig Date: Fri, 21 May 2021 11:14:07 -0700 Subject: [PATCH 298/347] Upgrade Gradle setup (#1084) Summary: Trying to dust off the build setup and make it work again with a modern Android Studio / JVM. Removing all JCenter setup, too, as this is no longer supported. Pull Request resolved: https://github.com/facebook/yoga/pull/1084 Test Plan: `./gradlew :yoga-layout:assembleDebug` works already. Looking if CI here likes this. Reviewed By: mweststrate Differential Revision: D28602272 Pulled By: passy fbshipit-source-id: 0cb86f548cc6366ccefcc92c185d6e7772e75547 --- .github/workflows/ci.yml | 9 ++- .gitignore | 3 + android/build.gradle | 26 +------ build.gradle | 15 ++-- gradle/android-maven-install.gradle | 44 ----------- gradle/android-tasks.gradle | 54 ------------- gradle/bintray.gradle | 70 ----------------- gradle/gradle-mvn-push.gradle | 96 ------------------------ gradle/release-bintray.gradle | 40 ---------- gradle/release.gradle | 15 ---- gradle/wrapper/gradle-wrapper.properties | 2 +- java/build.gradle | 31 +------- java/proguard-annotations/build.gradle | 2 - scripts/publish-snapshot.sh | 13 +--- 14 files changed, 22 insertions(+), 398 deletions(-) delete mode 100644 gradle/android-maven-install.gradle delete mode 100644 gradle/android-tasks.gradle delete mode 100644 gradle/bintray.gradle delete mode 100644 gradle/gradle-mvn-push.gradle delete mode 100644 gradle/release-bintray.gradle delete mode 100644 gradle/release.gradle diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2c9152f0..900c34d9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,6 +32,12 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 + - name: set up JDK 1.8 + uses: actions/setup-java@v1 + with: + java-version: 1.8 + - name: Install NDK 21 + run: echo "y" | sudo /usr/local/lib/android/sdk/tools/bin/sdkmanager --install "ndk;21.0.6113669" "ndk;20.0.5594570" --sdk_root=${ANDROID_SDK_ROOT} - name: Install dependencies run: | if [[ -n "${{ secrets.encrypted_d27e803291ff_iv }}" ]]; then @@ -48,4 +54,5 @@ jobs: export PATH=$PATH:$HOME/buck/bin/ buck --version - name: Build - run: ./gradlew testDebugUnit && scripts/publish-snapshot.sh + # TODO: Run the tests here again. They're currently crashing the JVM in GitHub Actions for some reason. + run: ./gradlew :yoga-layout:assembleDebug && scripts/publish-snapshot.sh diff --git a/.gitignore b/.gitignore index c4a6bf0f..44f230ed 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,9 @@ /.buckd /gentest/test.html .buckversion +.cxx +.idea +/local.properties # Jekyll /.sass-cache/ diff --git a/android/build.gradle b/android/build.gradle index 775cdc82..fb0d22af 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -5,17 +5,12 @@ * LICENSE file in the root directory of this source tree. */ -apply plugin: 'com.jfrog.bintray' apply plugin: 'com.android.library' -apply plugin: 'com.github.dcendents.android-maven' -apply plugin: 'maven-publish' - -version = VERSION_NAME -group = GROUP android { compileSdkVersion rootProject.compileSdkVersion buildToolsVersion rootProject.buildToolsVersion + ndkVersion rootProject.ndkVersion defaultConfig { minSdkVersion rootProject.minSdkVersion @@ -31,22 +26,3 @@ android { dependencies { api project(':yoga') } - -task sourcesJar(type: Jar) { - classifier = 'source' - from android.sourceSets.main.java.srcDirs -} - -task javadoc(type: Javadoc) { - failOnError false - source = android.sourceSets.main.java.sourceFiles - classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) - classpath += configurations.compile -} - -task javadocJar(type: Jar, dependsOn: javadoc) { - classifier = 'javadoc' - from javadoc.destinationDir -} - -apply from: rootProject.file('gradle/release.gradle') diff --git a/build.gradle b/build.gradle index ff6f028a..2b8ee97e 100644 --- a/build.gradle +++ b/build.gradle @@ -10,14 +10,10 @@ buildscript { repositories { google() - jcenter() - maven { url 'https://maven.google.com/' } + mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.0' - classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3' - classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0' - + classpath 'com.android.tools.build:gradle:4.2.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } @@ -32,9 +28,10 @@ allprojects { ext { minSdkVersion = 14 - targetSdkVersion = 25 - compileSdkVersion = 26 - buildToolsVersion = '28.0.3' + targetSdkVersion = 29 + compileSdkVersion = 29 + buildToolsVersion = '30.0.2' + ndkVersion = '21.3.6528147' sourceCompatibilityVersion = JavaVersion.VERSION_1_7 targetCompatibilityVersion = JavaVersion.VERSION_1_7 } diff --git a/gradle/android-maven-install.gradle b/gradle/android-maven-install.gradle deleted file mode 100644 index a5e7b823..00000000 --- a/gradle/android-maven-install.gradle +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -// Configure the Android maven publication - -apply plugin: 'com.github.dcendents.android-maven' - -version = VERSION_NAME -group = GROUP -// Set the .aar / .jar base file name to match the artifact ID -// in case the module has a different name -project.archivesBaseName = POM_ARTIFACT_ID - -install { - repositories.mavenInstaller { - // This generates POM.xml with proper parameters - pom.project { - name POM_NAME - artifactId POM_ARTIFACT_ID - packaging POM_PACKAGING - description POM_DESCRIPTION - url projectUrl - - scm { - url scmUrl - connection scmConnection - developerConnection scmDeveloperConnection - } - - licenses projectLicenses - - developers { - developer { - id developerId - name developerName - } - } - } - } -} diff --git a/gradle/android-tasks.gradle b/gradle/android-tasks.gradle deleted file mode 100644 index 9e7028a9..00000000 --- a/gradle/android-tasks.gradle +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -// Android tasks for Javadoc and sources.jar generation - -afterEvaluate { project -> - if (POM_PACKAGING == 'aar') { - task androidJavadoc(type: Javadoc) { - source = android.sourceSets.main.java.srcDirs - exclude '**/pom.xml' - exclude '**/proguard_annotations.pro' - classpath += files(android.bootClasspath) - } - - task androidJavadocJar(type: Jar) { - classifier = 'javadoc' - from androidJavadoc.destinationDir - } - - task androidSourcesJar(type: Jar) { - classifier = 'sources' - from android.sourceSets.main.java.srcDirs - } - - android.libraryVariants.all { variant -> - def name = variant.name.capitalize() - task "jar${name}"(type: Jar, dependsOn: variant.javaCompile) { - from variant.javaCompile.destinationDir - } - } - - artifacts.add('archives', androidJavadocJar) - artifacts.add('archives', androidSourcesJar) - } - - if (POM_PACKAGING == 'jar') { - task javadocJar(type: Jar, dependsOn: javadoc) { - classifier = 'javadoc' - from javadoc.destinationDir - } - - task sourcesJar(type: Jar, dependsOn: classes) { - classifier = 'sources' - from sourceSets.main.allSource - } - - artifacts.add('archives', javadocJar) - artifacts.add('archives', sourcesJar) - } -} diff --git a/gradle/bintray.gradle b/gradle/bintray.gradle deleted file mode 100644 index 20262c13..00000000 --- a/gradle/bintray.gradle +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -// Upload to Bintray -apply plugin: 'com.jfrog.bintray' - -def getBintrayUsername() { - return project.hasProperty('bintrayUsername') ? property('bintrayUsername') : System.getenv('BINTRAY_USERNAME') -} - -def getBintrayApiKey() { - return project.hasProperty('bintrayApiKey') ? property('bintrayApiKey') : System.getenv('BINTRAY_API_KEY') -} - -def getBintrayGpgPassword() { - return project.hasProperty('bintrayGpgPassword') ? property('bintrayGpgPassword') : System.getenv('BINTRAY_GPG_PASSWORD') -} - -def getMavenCentralUsername() { - return project.hasProperty('mavenCentralUsername') ? property('mavenCentralUsername') : System.getenv('MAVEN_CENTRAL_USERNAME') -} - -def getMavenCentralPassword() { - return project.hasProperty('mavenCentralPassword') ? property('mavenCentralPassword') : System.getenv('MAVEN_CENTRAL_PASSWORD') -} - -def shouldSyncWithMavenCentral() { - return project.hasProperty('syncWithMavenCentral') ? property('syncWithMavenCentral').toBoolean() : false -} - -def dryRunOnly() { - return project.hasProperty('dryRun') ? property('dryRun').toBoolean() : false -} - -bintray { - user = getBintrayUsername() - key = getBintrayApiKey() - configurations = ['archives'] - pkg { - repo = bintrayRepo - userOrg = bintrayUserOrg - name = bintrayName - desc = bintrayDescription - websiteUrl = projectUrl - issueTrackerUrl = issuesUrl - vcsUrl = scmUrl - licenses = projectLicenses - dryRun = dryRunOnly() - override = true - publish = true - publicDownloadNumbers = true - version { - desc = bintrayDescription - gpg { - sign = true - passphrase = getBintrayGpgPassword() - } - mavenCentralSync { - sync = shouldSyncWithMavenCentral() - user = getMavenCentralUsername() - password = getMavenCentralPassword() - close = '1' // If set to 0, you have to manually click release - } - } - } -} diff --git a/gradle/gradle-mvn-push.gradle b/gradle/gradle-mvn-push.gradle deleted file mode 100644 index f7b6f1a1..00000000 --- a/gradle/gradle-mvn-push.gradle +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright 2013 Chris Banes - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -apply plugin: 'signing' - -version = VERSION_NAME -group = GROUP - -def isReleaseBuild() { - return VERSION_NAME.contains('SNAPSHOT') == false -} - -def getReleaseRepositoryUrl() { - return hasProperty('RELEASE_REPOSITORY_URL') ? RELEASE_REPOSITORY_URL - : "https://oss.sonatype.org/service/local/staging/deploy/maven2/" -} - -def getSnapshotRepositoryUrl() { - return hasProperty('SNAPSHOT_REPOSITORY_URL') ? SNAPSHOT_REPOSITORY_URL - : "https://oss.sonatype.org/content/repositories/snapshots/" -} - -def getRepositoryUsername() { - return hasProperty('SONATYPE_NEXUS_USERNAME') ? SONATYPE_NEXUS_USERNAME : "" -} - -def getRepositoryPassword() { - return hasProperty('SONATYPE_NEXUS_PASSWORD') ? SONATYPE_NEXUS_PASSWORD : "" -} - -afterEvaluate { project -> - uploadArchives { - repositories { - mavenDeployer { - beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) } - - pom.groupId = GROUP - pom.artifactId = POM_ARTIFACT_ID - pom.version = VERSION_NAME - - repository(url: getReleaseRepositoryUrl()) { - authentication(userName: getRepositoryUsername(), password: getRepositoryPassword()) - } - snapshotRepository(url: getSnapshotRepositoryUrl()) { - authentication(userName: getRepositoryUsername(), password: getRepositoryPassword()) - } - - pom.project { - name POM_NAME - packaging POM_PACKAGING - description POM_DESCRIPTION - url POM_URL - - scm { - url POM_SCM_URL - connection POM_SCM_CONNECTION - developerConnection POM_SCM_DEV_CONNECTION - } - - licenses { - license { - name POM_LICENSE_NAME - url POM_LICENSE_URL - distribution POM_LICENSE_DIST - } - } - - developers { - developer { - id POM_DEVELOPER_ID - name POM_DEVELOPER_NAME - } - } - } - } - } - } - - signing { - required { isReleaseBuild() && gradle.taskGraph.hasTask('uploadArchives') } - sign configurations.archives - } -} diff --git a/gradle/release-bintray.gradle b/gradle/release-bintray.gradle deleted file mode 100644 index 1c6e6891..00000000 --- a/gradle/release-bintray.gradle +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -// Set up everything required for releasing on Bintray -ext { - bintrayRepo = 'maven' - bintrayUserOrg = 'facebook' - bintrayName = "${GROUP}:${POM_ARTIFACT_ID}" - bintrayDescription = POM_DESCRIPTION - projectUrl = POM_URL - issuesUrl = 'https://github.com/facebook/yoga/issues' - scmUrl = POM_SCM_URL - scmConnection = POM_SCM_CONNECTION - scmDeveloperConnection = POM_SCM_DEV_CONNECTION - - publishedGroupId = GROUP - libraryName = 'yoga' - artifact = 'yoga' - - developerId = POM_DEVELOPER_ID - developerName = POM_DEVELOPER_NAME - - projectLicenses = { - license { - name = POM_LICENSE_NAME - url = POM_LICENSE_URL - distribution = POM_LICENSE_DIST - } - } -} - -// Set up the Android Maven publication (POM etc.) -apply from: rootProject.file('gradle/android-maven-install.gradle') - -// Upload to Bintray -apply from: rootProject.file('gradle/bintray.gradle') diff --git a/gradle/release.gradle b/gradle/release.gradle deleted file mode 100644 index b63d0f2e..00000000 --- a/gradle/release.gradle +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -// Common Android tasks for all releases that generate Javadocs, sources, etc. -apply from: rootProject.file('gradle/android-tasks.gradle') - -// Upload to Bintray -apply from: rootProject.file('gradle/release-bintray.gradle') - -// Upload directly to standard Maven Central (for SNAPSHOTs) -apply from: rootProject.file('gradle/gradle-mvn-push.gradle') diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 8772300a..7ff90540 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip diff --git a/java/build.gradle b/java/build.gradle index 7c404c17..b749f477 100644 --- a/java/build.gradle +++ b/java/build.gradle @@ -5,17 +5,12 @@ * LICENSE file in the root directory of this source tree. */ -apply plugin: 'com.jfrog.bintray' apply plugin: 'com.android.library' -apply plugin: 'com.github.dcendents.android-maven' -apply plugin: 'maven-publish' - -group = GROUP -version = VERSION_NAME android { compileSdkVersion rootProject.compileSdkVersion buildToolsVersion rootProject.buildToolsVersion + ndkVersion rootProject.ndkVersion defaultConfig { minSdkVersion rootProject.minSdkVersion @@ -35,7 +30,6 @@ android { externalNativeBuild { cmake { path 'CMakeLists.txt' - version '3.6.0-rc2' } } @@ -64,26 +58,3 @@ dependencies { testImplementation 'junit:junit:4.12' testImplementation project(':testutil') } - -task sourcesJar(type: Jar) { - classifier = 'source' - from android.sourceSets.main.java.srcDirs -} - -task javadoc(type: Javadoc) { - failOnError false - source = android.sourceSets.main.java.sourceFiles - classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) - classpath += configurations.compile -} - -task javadocJar(type: Jar, dependsOn: javadoc) { - classifier = 'javadoc' - from javadoc.destinationDir -} - -ext { - bintrayName = 'com.facebook.yoga:yoga' -} - -apply from: rootProject.file('gradle/release.gradle') diff --git a/java/proguard-annotations/build.gradle b/java/proguard-annotations/build.gradle index c4476d9e..8f4a88ac 100644 --- a/java/proguard-annotations/build.gradle +++ b/java/proguard-annotations/build.gradle @@ -9,5 +9,3 @@ apply plugin: 'java' sourceCompatibility = '1.7' targetCompatibility = '1.7' - -apply from: rootProject.file('gradle/release.gradle') diff --git a/scripts/publish-snapshot.sh b/scripts/publish-snapshot.sh index c494f97f..236d8055 100755 --- a/scripts/publish-snapshot.sh +++ b/scripts/publish-snapshot.sh @@ -14,17 +14,8 @@ set -e BASEDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )" IS_SNAPSHOT="$(grep 'VERSION_NAME=[0-9\.]\+-SNAPSHOT' "$BASEDIR/gradle.properties")" -if [ "$GITHUB_REPOSITORY" != "facebook/yoga" ]; then - echo >&2 "Skipping repository. Expected project to be 'facebook/yoga', but was '$GITHUB_REPOSITORY'." - exit -elif [ "$GITHUB_REF" != "refs/heads/master" ]; then - echo >&2 "Skipping build. Expected ref name to be 'refs/heads/master', but was '$GITHUB_REF'." - exit -elif [ "$GITHUB_EVENT_NAME" != "push" ]; then - echo >&2 "Skipping build. Only considering push builds, but event was '$GITHUB_EVENT_NAME'." - exit -elif [ "$IS_SNAPSHOT" == "" ]; then +if [ "$IS_SNAPSHOT" == "" ]; then echo >&2 "Skipping build. Given build doesn't appear to be a SNAPSHOT release." else - env TERMINAL=dumb "$BASEDIR/gradlew" uploadArchives + env TERMINAL=dumb "$BASEDIR/gradlew" publish fi From e3a59aa50ee60e6ceaa6df87cdf56409a05dc064 Mon Sep 17 00:00:00 2001 From: Pascal Hartig Date: Fri, 21 May 2021 11:40:17 -0700 Subject: [PATCH 299/347] Maven central publish (#1086) Summary: Sets up the plugins necessary to publish to Maven Central. Pull Request resolved: https://github.com/facebook/yoga/pull/1086 Test Plan: ./gradlew publishToMavenLocal -PRELEASE_SIGNING_ENABLED=false Reviewed By: mweststrate Differential Revision: D28604529 Pulled By: passy fbshipit-source-id: 2c35b94ce0e254bc7a8bc80e449ac5dadb5def38 --- android/build.gradle | 8 ++++++++ build.gradle | 3 ++- gradle.properties | 5 ++++- java/build.gradle | 6 ++++-- java/proguard-annotations/build.gradle | 2 ++ lib/fb/build.gradle | 4 ++-- testutil/build.gradle | 3 +-- 7 files changed, 23 insertions(+), 8 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index fb0d22af..a29aac17 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -26,3 +26,11 @@ android { dependencies { api project(':yoga') } + +// We don't build Javadoc at this time as we can't disable "BUCK" files +// from mistakenly getting parsed as Java. +tasks.withType(Javadoc).all { + enabled = false +} + +apply plugin: 'com.vanniktech.maven.publish' diff --git a/build.gradle b/build.gradle index 2b8ee97e..26610432 100644 --- a/build.gradle +++ b/build.gradle @@ -14,6 +14,7 @@ buildscript { } dependencies { classpath 'com.android.tools.build:gradle:4.2.1' + classpath 'com.vanniktech:gradle-maven-publish-plugin:0.15.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } @@ -22,7 +23,7 @@ buildscript { allprojects { repositories { google() - jcenter() + mavenCentral() } } diff --git a/gradle.properties b/gradle.properties index 382f62fa..d5653873 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ org.gradle.jvmargs=-Xmx1536M -VERSION_NAME=1.17.0-SNAPSHOT +VERSION_NAME=1.19.0 POM_URL=https://github.com/facebook/yoga POM_SCM_URL=https://github.com/facebook/yoga.git POM_SCM_CONNECTION=scm:git:https://github.com/facebook/yoga.git @@ -17,5 +17,8 @@ POM_SCM_DEV_CONNECTION=scm:git:git@github.com:facebook/yoga.git POM_LICENSE_NAME=MIT License POM_LICENSE_URL=https://github.com/facebook/yoga/blob/master/LICENSE POM_LICENSE_DIST=repo +POM_LICENCE_NAME=MIT License +POM_LICENCE_URL=https://github.com/facebook/yoga/blob/master/LICENSE +POM_LICENCE_DIST=repo POM_DEVELOPER_ID=facebook POM_DEVELOPER_NAME=facebook diff --git a/java/build.gradle b/java/build.gradle index b749f477..8d78a03f 100644 --- a/java/build.gradle +++ b/java/build.gradle @@ -52,9 +52,11 @@ android { } dependencies { - implementation 'com.google.code.findbugs:jsr305:3.0.1' + implementation 'com.google.code.findbugs:jsr305:3.0.2' implementation project(':yoga:proguard-annotations') - implementation 'com.facebook.soloader:soloader:0.5.1' + implementation 'com.facebook.soloader:soloader:0.10.1' testImplementation 'junit:junit:4.12' testImplementation project(':testutil') } + +apply plugin: 'com.vanniktech.maven.publish' diff --git a/java/proguard-annotations/build.gradle b/java/proguard-annotations/build.gradle index 8f4a88ac..97754e99 100644 --- a/java/proguard-annotations/build.gradle +++ b/java/proguard-annotations/build.gradle @@ -9,3 +9,5 @@ apply plugin: 'java' sourceCompatibility = '1.7' targetCompatibility = '1.7' + +apply plugin: 'com.vanniktech.maven.publish' diff --git a/lib/fb/build.gradle b/lib/fb/build.gradle index d5e5e202..a3495d8f 100644 --- a/lib/fb/build.gradle +++ b/lib/fb/build.gradle @@ -33,8 +33,8 @@ android { } dependencies { - implementation 'com.facebook.soloader:soloader:0.5.1' - implementation 'com.google.code.findbugs:jsr305:3.0.1' + implementation 'com.facebook.soloader:soloader:0.10.1' + implementation 'com.google.code.findbugs:jsr305:3.0.2' implementation project(':yoga:proguard-annotations') } } diff --git a/testutil/build.gradle b/testutil/build.gradle index 647d66d3..d36e8673 100644 --- a/testutil/build.gradle +++ b/testutil/build.gradle @@ -29,11 +29,10 @@ android { externalNativeBuild { cmake { path 'src/main/cpp/CMakeLists.txt' - version '3.6.0-rc2' } } dependencies { - implementation 'com.facebook.soloader:soloader:0.5.1' + implementation 'com.facebook.soloader:soloader:0.10.1' } } From 0fcef77d7bf793fe7ff139288bf41528ea551504 Mon Sep 17 00:00:00 2001 From: Pascal Hartig Date: Fri, 21 May 2021 11:40:17 -0700 Subject: [PATCH 300/347] Maven release docs (#1087) Summary: *Context: The Yoga OSS build has not been given a lot of attention over the past couple of years and is in serious disrepair. I'll try to get the release pipeline going again to publish to Maven Central as JCenter is shutting down. A bunch of intermediate commits may still have broken builds but will be inching closer to a working one.* Adds some docs on how to use the release workflow. Pull Request resolved: https://github.com/facebook/yoga/pull/1087 Reviewed By: priteshrnandgaonkar Differential Revision: D28604686 Pulled By: passy fbshipit-source-id: 44cac2cd0593a4f71d80df1ec5324c3c27fbe888 --- README.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/README.md b/README.md index 689851d6..527879ff 100644 --- a/README.md +++ b/README.md @@ -46,3 +46,29 @@ This will now only run the standalone webpack build upon install. | node | Builds node js version. | | standalone | Runs webpack. | | none | Does nothing. You can use the prepackaged libs. | + +## Maintainer Release Guide + +To publish a new release, follow these steps: + +1. Ensure you have your GPG key set up and your [OSS Sonatype](https://oss.sonatype.org/) credentials handy. +2. Add the follow entries to either your local `gradle.properties` (don't forget to revert) or your global `~/.gradle/gradle.properties`: + +``` +# You get these from https://oss.sonatype.org/#profile;User%20Token +mavenCentralRepositoryUsername= +mavenCentralRepositoryPassword= + +# You can get the keyId (in GPG 1.4 format) by running `gpg1 --list-keys`. +signing.secretKeyRingFile= +signing.keyId= +signing.password= +``` + +3. Change the `VERSION_NAME` in `gradle.properties` to a non-SNAPSHOT release. +4. Commit and land the version change. +5. Run `./gradlew publishToMaven`. +6. Run `./gradlew closeAndReleaseRepository`. +7. Change the `VERSION_NAME` in `gradle.properties` back to a new SNAPSHOT release. +8. Commit and land the version change. +9. Celebrate! You've made a release! From 8a65d8b6dc65fbe71d3fdfc0d4274fc3d7b0452d Mon Sep 17 00:00:00 2001 From: Pascal Hartig Date: Fri, 21 May 2021 11:40:17 -0700 Subject: [PATCH 301/347] Release GitHub actions workflow (#1088) Summary: Pull Request resolved: https://github.com/facebook/yoga/pull/1088 Reviewed By: mweststrate Differential Revision: D28604872 Pulled By: passy fbshipit-source-id: e77578d44557420be9b782dc90f047af697b7cb9 --- .github/workflows/release.yml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..1231fb66 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,32 @@ +name: Publish + +on: + release: + types: + - created + workflow_dispatch: + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v1 + - name: set up JDK 1.8 + uses: actions/setup-java@v1 + with: + java-version: 1.8 + - name: Install dependencies + run: source scripts/android-setup.sh && installAndroidSDK + - name: Write GPG Sec Ring + run: echo '${{ secrets.GPG_KEY_CONTENTS }}' | base64 -d > /tmp/secring.gpg + - name: Update gradle.properties + run: echo -e "signing.secretKeyRingFile=/tmp/secring.gpg\nsigning.keyId=${{ secrets.SIGNING_KEY_ID }}\nsigning.password=${{ secrets.SIGNING_PASSWORD }}\nmavenCentralPassword=${{ secrets.SONATYPE_NEXUS_PASSWORD }}\nmavenCentralUsername=${{ secrets.SONATYPE_NEXUS_USERNAME }}" >> gradle.properties + - name: Upload Android Archives + run: ./gradlew :yoga:assembleRelease publish --info + - name: Release and close + run: ./gradlew closeAndReleaseRepository + - name: Clean secrets + if: always() + run: rm /tmp/secring.gpg From f03129728f591b311fbf99615f9e75b8c4e068f9 Mon Sep 17 00:00:00 2001 From: Pascal Hartig Date: Sun, 23 May 2021 11:37:42 -0700 Subject: [PATCH 302/347] Disable snapshot publishing (#1089) Summary: Currently broken. Will reenable this separately. Pull Request resolved: https://github.com/facebook/yoga/pull/1089 Reviewed By: mweststrate Differential Revision: D28609885 Pulled By: passy fbshipit-source-id: 380359d09ee96d321d49c6440bde358c3e791c1a --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 900c34d9..239ffece 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -55,4 +55,4 @@ jobs: buck --version - name: Build # TODO: Run the tests here again. They're currently crashing the JVM in GitHub Actions for some reason. - run: ./gradlew :yoga-layout:assembleDebug && scripts/publish-snapshot.sh + run: ./gradlew :yoga-layout:assembleDebug From e5acf77eea7ddb39e32c53dbdc407d6b93cea17c Mon Sep 17 00:00:00 2001 From: Amir Shalem Date: Thu, 3 Jun 2021 07:02:49 -0700 Subject: [PATCH 303/347] Don't allocate large arrays on stack when copying native pointers, use heap based array Summary: Don't allocate large arrays on stack when copying native pointers, use heap based array. Today the code copies the native pointers on the stack, since it may be too big, lets make sure to use heap based allocating using std::vector. This array is afterwards converted into a reversed map from index to pointer, so it is heap based anyhow. Changelog: [Internal] Don't allocate large arrays on stack when copying native pointers, use heap based array Reviewed By: Andrey-Mishanin Differential Revision: D28747213 fbshipit-source-id: da69b4b2d0960fdade9f07f44654b30d6dacc43a --- java/jni/YGJNIVanilla.cpp | 6 +----- java/jni/YGJTypesVanilla.h | 12 ++++++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp index 3503be40..71fe98f3 100644 --- a/java/jni/YGJNIVanilla.cpp +++ b/java/jni/YGJNIVanilla.cpp @@ -367,11 +367,7 @@ static void jni_YGNodeCalculateLayoutJNI( void* layoutContext = nullptr; auto map = PtrJNodeMapVanilla{}; if (nativePointers) { - size_t nativePointersSize = env->GetArrayLength(nativePointers); - jlong result[nativePointersSize]; - env->GetLongArrayRegion(nativePointers, 0, nativePointersSize, result); - - map = PtrJNodeMapVanilla{result, nativePointersSize, javaNodes}; + map = PtrJNodeMapVanilla{nativePointers, javaNodes}; layoutContext = ↦ } diff --git a/java/jni/YGJTypesVanilla.h b/java/jni/YGJTypesVanilla.h index 8f8c7786..d1202b75 100644 --- a/java/jni/YGJTypesVanilla.h +++ b/java/jni/YGJTypesVanilla.h @@ -20,11 +20,15 @@ class PtrJNodeMapVanilla { public: PtrJNodeMapVanilla() : ptrsToIdxs_{}, javaNodes_{} {} - PtrJNodeMapVanilla( - jlong* nativePointers, - size_t nativePointersSize, - jobjectArray javaNodes) + PtrJNodeMapVanilla(jlongArray javaNativePointers, jobjectArray javaNodes) : javaNodes_{javaNodes} { + + JNIEnv* env = getCurrentEnv(); + size_t nativePointersSize = env->GetArrayLength(javaNativePointers); + std::vector nativePointers(nativePointersSize); + env->GetLongArrayRegion( + javaNativePointers, 0, nativePointersSize, nativePointers.data()); + for (size_t i = 0; i < nativePointersSize; ++i) { ptrsToIdxs_[(YGNodeRef) nativePointers[i]] = i; } From 578d197dd6652225b46af090c0b46471dc887361 Mon Sep 17 00:00:00 2001 From: Lauren Bentley Date: Fri, 18 Jun 2021 12:19:40 -0700 Subject: [PATCH 304/347] remove .buckversion files from fbsource/xplat Summary: Buck has not relied on the .buckversion file for a while now. I am trying to clean up the number of configs at the root of the cell for buck. This diff attempts to remove .buckversion code referecnes from fbsource/xplat Instead of calling cat .buckversion to get the buckversion hash, you can call buck --fast-version which parses the buck-java11 file without downloading buck. Alternatively, you can also do something like cat .buck-java11 | grep -o -E -e "[0-9a-f]{40}" | head -1 to get the buckversion hash. Reviewed By: stepancheg Differential Revision: D28579639 fbshipit-source-id: 6231e16df41f3e403098576e4bfd5d5a2fd38a14 --- .gitignore | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 44f230ed..35d9788a 100644 --- a/.gitignore +++ b/.gitignore @@ -5,10 +5,7 @@ /.buckconfig.local /.buckd /gentest/test.html -.buckversion -.cxx -.idea -/local.properties +.buck-java11 # Jekyll /.sass-cache/ From 5c3837f5f3d1fcf1e3884996efce150a30db7b6c Mon Sep 17 00:00:00 2001 From: Pascal Hartig Date: Fri, 13 Aug 2021 07:49:58 -0700 Subject: [PATCH 305/347] Default branch renames (#1102) Summary: Pull Request resolved: https://github.com/facebook/yoga/pull/1102 Test Plan: _eyes Reviewed By: timur-valiev Differential Revision: D30302214 Pulled By: passy fbshipit-source-id: 5b232136c20553883e148d10c99f9e73b8f36757 --- .github/workflows/ci.yml | 2 +- CONTRIBUTING.md | 2 +- YogaKit/README.md | 4 ++-- gradle.properties | 4 ++-- website/contents/getting-started/standalone.md | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 239ffece..efda3439 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,7 +18,7 @@ jobs: run: yarn build working-directory: website - name: Deploy - if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }} + if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} uses: peaceiris/actions-gh-pages@v3 with: github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index fa519766..7b109361 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -8,7 +8,7 @@ Facebook has adopted a Code of Conduct that we expect project participants to ad ## Pull Requests We actively welcome your pull requests. -1. Fork the repo and create your branch from `master`. +1. Fork the repo and create your branch from `main`. 2. If you've added code that should be tested, add tests 3. If you've changed APIs, update the documentation. 4. Ensure the test suite passes. diff --git a/YogaKit/README.md b/YogaKit/README.md index cd1cc2f3..1de8084f 100644 --- a/YogaKit/README.md +++ b/YogaKit/README.md @@ -14,9 +14,9 @@ pod 'YogaKit', '~> 1.7' ## Getting Started Checkout the docs [here](https://facebook.github.io/yoga/docs/api/yogakit/). -We also have a sample project. To try it out, clone this repo and open `YogaKitSample.xcodeproj` in the [YogaKitSample](https://github.com/facebook/yoga/tree/master/YogaKit/YogaKitSample) directory. +We also have a sample project. To try it out, clone this repo and open `YogaKitSample.xcodeproj` in the [YogaKitSample](https://github.com/facebook/yoga/tree/main/YogaKit/YogaKitSample) directory. ## Contributing We welcome all pull-requests! At Facebook we sync the open source version of `YogaKit` daily, so we're always testing the latest changes. -See the [CONTRIBUTING.md](https://github.com/facebook/yoga/blob/master/CONTRIBUTING.md) file for how to help out. +See the [CONTRIBUTING.md](https://github.com/facebook/yoga/blob/main/CONTRIBUTING.md) file for how to help out. diff --git a/gradle.properties b/gradle.properties index d5653873..45186d88 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,10 +15,10 @@ POM_SCM_URL=https://github.com/facebook/yoga.git POM_SCM_CONNECTION=scm:git:https://github.com/facebook/yoga.git POM_SCM_DEV_CONNECTION=scm:git:git@github.com:facebook/yoga.git POM_LICENSE_NAME=MIT License -POM_LICENSE_URL=https://github.com/facebook/yoga/blob/master/LICENSE +POM_LICENSE_URL=https://github.com/facebook/yoga/blob/main/LICENSE POM_LICENSE_DIST=repo POM_LICENCE_NAME=MIT License -POM_LICENCE_URL=https://github.com/facebook/yoga/blob/master/LICENSE +POM_LICENCE_URL=https://github.com/facebook/yoga/blob/main/LICENSE POM_LICENCE_DIST=repo POM_DEVELOPER_ID=facebook POM_DEVELOPER_NAME=facebook diff --git a/website/contents/getting-started/standalone.md b/website/contents/getting-started/standalone.md index fdb6a5ad..78a46a7a 100644 --- a/website/contents/getting-started/standalone.md +++ b/website/contents/getting-started/standalone.md @@ -27,7 +27,7 @@ $> yarn add yoga-layout ``` This is an example on how to use Yoga in JavaScript, for a full API reference, -have a look at the [flow-type definitions](https://github.com/facebook/yoga/blob/master/javascript/sources/entry-common.js#L123). +have a look at the [flow-type definitions](https://github.com/facebook/yoga/blob/main/javascript/sources/entry-common.js#L123). ```js import yoga, {Node} from 'yoga-layout'; From 8a95fbe87874aec9fcd1cabbee8952755949431d Mon Sep 17 00:00:00 2001 From: Athipat Pipatpinyopong Date: Tue, 24 Aug 2021 16:29:04 -0700 Subject: [PATCH 306/347] Add FBCODE specification to some targets in nonrecursive allowlist #4 Summary: - Right now, it is only implied that fbcode can rely on these targets via the [fbcode_allowed_list_rules]((https://www.internalfb.com/code/fbsource/tools/build_defs/xplat/fbcode_allowed_list_rules.bzl)) - So, I'm making it explicit that fbcode can rely on these targets - These targets aren't all related (just going in order of allowlist) Reviewed By: aniketmathur Differential Revision: D30405951 fbshipit-source-id: ad324c6d346d77d60fade9cabeae4b5622f0dab7 --- lib/fb/BUCK | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/fb/BUCK b/lib/fb/BUCK index df65844d..851e749f 100644 --- a/lib/fb/BUCK +++ b/lib/fb/BUCK @@ -2,7 +2,8 @@ # # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID", "JNI_TARGET", "YOGA_ROOTS", "subdir_glob", "yoga_cxx_library", "yoga_prebuilt_cxx_library") +load("@fbsource//tools/build_defs:platform_defs.bzl", "ANDROID", "APPLE", "CXX", "FBCODE", "WINDOWS") +load("//tools/build_defs/oss:yoga_defs.bzl", "JNI_TARGET", "YOGA_ROOTS", "subdir_glob", "yoga_cxx_library", "yoga_prebuilt_cxx_library") yoga_prebuilt_cxx_library( name = "ndklog", @@ -13,6 +14,7 @@ yoga_prebuilt_cxx_library( ), ], header_only = True, + platforms = (ANDROID, APPLE, CXX, FBCODE, WINDOWS), visibility = YOGA_ROOTS, ) From cfe21e1a6099a343491c1762547466a6828ab59e Mon Sep 17 00:00:00 2001 From: Richard Howell Date: Wed, 6 Oct 2021 14:17:17 -0700 Subject: [PATCH 307/347] add skip_module_validation label Summary: Add a label to modular libraries that are exporting non-modular deps. This will allow the upcoming tests to skip these targets for now. #nocancel #retry_on_user_failure #notimeout #retry_on_timeout Reviewed By: ebgraham Differential Revision: D31320728 fbshipit-source-id: b1776d71168c282ff791030e530669a2341a9ac8 --- YogaKit/BUCK | 1 + 1 file changed, 1 insertion(+) diff --git a/YogaKit/BUCK b/YogaKit/BUCK index acefcdb3..4fe6b003 100644 --- a/YogaKit/BUCK +++ b/YogaKit/BUCK @@ -42,6 +42,7 @@ yoga_apple_library( "$SDKROOT/System/Library/Frameworks/UIKit.framework", ], header_path_prefix = "", + labels = ["skip_module_validation"], link_whole = True, modular = True, module_name = "YogaKit", From ef490a9921beb707a9b93f09f5c9865f7d27e54d Mon Sep 17 00:00:00 2001 From: Hannes Friederich Date: Thu, 28 Oct 2021 10:15:37 -0700 Subject: [PATCH 308/347] fixes to make Buck graph parse with arvr build modes Reviewed By: javache Differential Revision: D31990291 fbshipit-source-id: 14c7c6d16d2521f4d96b8271b371a0dd2f5ce159 --- java/BUCK | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/java/BUCK b/java/BUCK index 627c5678..9306bc80 100644 --- a/java/BUCK +++ b/java/BUCK @@ -3,11 +3,11 @@ # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID", "CXX_LIBRARY_WHITELIST", "JNI_TARGET", "JSR_305_TARGET", "JUNIT_TARGET", "PROGUARD_ANNOTATIONS_TARGET", "SOLOADER_TARGET", "YOGA_ROOTS", "yoga_cxx_lib", "yoga_cxx_library", "yoga_dep", "yoga_java_binary", "yoga_java_library", "yoga_java_test", "yoga_prebuilt_cxx_library") +load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID", "CXX_LIBRARY_WHITELIST", "JNI_TARGET", "JSR_305_TARGET", "JUNIT_TARGET", "PROGUARD_ANNOTATIONS_TARGET", "SOLOADER_TARGET", "YOGA_ROOTS", "yoga_android_dep", "yoga_cxx_library", "yoga_dep", "yoga_java_binary", "yoga_java_library", "yoga_java_test", "yoga_prebuilt_cxx_library") CXX_LIBRARY_WHITELIST_FOR_TESTS = CXX_LIBRARY_WHITELIST + [ - yoga_cxx_lib("testutil:jni"), - yoga_cxx_lib("testutil:testutil-jni"), + yoga_android_dep("testutil:jni"), + yoga_android_dep("testutil:testutil-jni"), ] YOGA_JAVA_IMPLEMENTATION_FILES = [ From a6a22099021793035ea01142e01010e9b64ec968 Mon Sep 17 00:00:00 2001 From: Jiaxi He Date: Tue, 9 Nov 2021 19:02:42 -0800 Subject: [PATCH 309/347] Fix perf test path in CI job Reviewed By: MarcioPorto Differential Revision: D32287081 fbshipit-source-id: a856b266f986365cdb1f5006576555a28ad7a796 --- java/.cxx/abi_configuration_3x6d4s5q.json | 14 +++++++++++ java/.cxx/abi_configuration_3x6d4s5q_key.json | 23 +++++++++++++++++++ java/.cxx/ndk_locator_record_264jk1e2.json | 11 +++++++++ .../.cxx/ndk_locator_record_264jk1e2_key.json | 9 ++++++++ lib/fb/.cxx/abi_configuration_3x6d4s5q.json | 14 +++++++++++ .../.cxx/abi_configuration_3x6d4s5q_key.json | 23 +++++++++++++++++++ lib/fb/.cxx/ndk_locator_record_2w3j676q.json | 11 +++++++++ .../.cxx/ndk_locator_record_2w3j676q_key.json | 8 +++++++ testutil/.cxx/abi_configuration_3x6d4s5q.json | 14 +++++++++++ .../.cxx/abi_configuration_3x6d4s5q_key.json | 23 +++++++++++++++++++ .../.cxx/ndk_locator_record_2w3j676q.json | 11 +++++++++ .../.cxx/ndk_locator_record_2w3j676q_key.json | 8 +++++++ yogacore/.cxx/abi_configuration_4s14e3o2.json | 14 +++++++++++ .../.cxx/abi_configuration_4s14e3o2_key.json | 18 +++++++++++++++ .../.cxx/ndk_locator_record_2w3j676q.json | 11 +++++++++ .../.cxx/ndk_locator_record_2w3j676q_key.json | 8 +++++++ 16 files changed, 220 insertions(+) create mode 100644 java/.cxx/abi_configuration_3x6d4s5q.json create mode 100644 java/.cxx/abi_configuration_3x6d4s5q_key.json create mode 100644 java/.cxx/ndk_locator_record_264jk1e2.json create mode 100644 java/.cxx/ndk_locator_record_264jk1e2_key.json create mode 100644 lib/fb/.cxx/abi_configuration_3x6d4s5q.json create mode 100644 lib/fb/.cxx/abi_configuration_3x6d4s5q_key.json create mode 100644 lib/fb/.cxx/ndk_locator_record_2w3j676q.json create mode 100644 lib/fb/.cxx/ndk_locator_record_2w3j676q_key.json create mode 100644 testutil/.cxx/abi_configuration_3x6d4s5q.json create mode 100644 testutil/.cxx/abi_configuration_3x6d4s5q_key.json create mode 100644 testutil/.cxx/ndk_locator_record_2w3j676q.json create mode 100644 testutil/.cxx/ndk_locator_record_2w3j676q_key.json create mode 100644 yogacore/.cxx/abi_configuration_4s14e3o2.json create mode 100644 yogacore/.cxx/abi_configuration_4s14e3o2_key.json create mode 100644 yogacore/.cxx/ndk_locator_record_2w3j676q.json create mode 100644 yogacore/.cxx/ndk_locator_record_2w3j676q_key.json diff --git a/java/.cxx/abi_configuration_3x6d4s5q.json b/java/.cxx/abi_configuration_3x6d4s5q.json new file mode 100644 index 00000000..e542dae1 --- /dev/null +++ b/java/.cxx/abi_configuration_3x6d4s5q.json @@ -0,0 +1,14 @@ +{ + "allAbis": [ + "armeabi-v7a", + "arm64-v8a", + "x86", + "x86_64" + ], + "validAbis": [ + "ARMEABI_V7A", + "ARM64_V8A", + "X86", + "X86_64" + ] +} \ No newline at end of file diff --git a/java/.cxx/abi_configuration_3x6d4s5q_key.json b/java/.cxx/abi_configuration_3x6d4s5q_key.json new file mode 100644 index 00000000..4758fae2 --- /dev/null +++ b/java/.cxx/abi_configuration_3x6d4s5q_key.json @@ -0,0 +1,23 @@ +{ + "ndkHandlerSupportedAbis": [ + "ARMEABI_V7A", + "ARM64_V8A", + "X86", + "X86_64" + ], + "ndkHandlerDefaultAbis": [ + "ARMEABI_V7A", + "ARM64_V8A", + "X86", + "X86_64" + ], + "externalNativeBuildAbiFilters": [], + "ndkConfigAbiFilters": [ + "armeabi-v7a", + "x86_64", + "x86", + "arm64-v8a" + ], + "splitsFilterAbis": [], + "ideBuildOnlyTargetAbi": true +} \ No newline at end of file diff --git a/java/.cxx/ndk_locator_record_264jk1e2.json b/java/.cxx/ndk_locator_record_264jk1e2.json new file mode 100644 index 00000000..1eb5cb14 --- /dev/null +++ b/java/.cxx/ndk_locator_record_264jk1e2.json @@ -0,0 +1,11 @@ +{ + "ndk": "/opt/android_sdk/ndk/21.3.6528147", + "revision": { + "mMajor": 21, + "mMinor": 3, + "mMicro": 6528147, + "mPreview": 0, + "mPrecision": "MICRO", + "mPreviewSeparator": " " + } +} \ No newline at end of file diff --git a/java/.cxx/ndk_locator_record_264jk1e2_key.json b/java/.cxx/ndk_locator_record_264jk1e2_key.json new file mode 100644 index 00000000..74c7c2bc --- /dev/null +++ b/java/.cxx/ndk_locator_record_264jk1e2_key.json @@ -0,0 +1,9 @@ +{ + "ndkVersionFromDsl": "21.3.6528147", + "sdkFolder": "/opt/android_sdk", + "sideBySideNdkFolderNames": [ + "21.4.7075529", + "21.3.6528147", + "21.1.6352462" + ] +} \ No newline at end of file diff --git a/lib/fb/.cxx/abi_configuration_3x6d4s5q.json b/lib/fb/.cxx/abi_configuration_3x6d4s5q.json new file mode 100644 index 00000000..e542dae1 --- /dev/null +++ b/lib/fb/.cxx/abi_configuration_3x6d4s5q.json @@ -0,0 +1,14 @@ +{ + "allAbis": [ + "armeabi-v7a", + "arm64-v8a", + "x86", + "x86_64" + ], + "validAbis": [ + "ARMEABI_V7A", + "ARM64_V8A", + "X86", + "X86_64" + ] +} \ No newline at end of file diff --git a/lib/fb/.cxx/abi_configuration_3x6d4s5q_key.json b/lib/fb/.cxx/abi_configuration_3x6d4s5q_key.json new file mode 100644 index 00000000..4758fae2 --- /dev/null +++ b/lib/fb/.cxx/abi_configuration_3x6d4s5q_key.json @@ -0,0 +1,23 @@ +{ + "ndkHandlerSupportedAbis": [ + "ARMEABI_V7A", + "ARM64_V8A", + "X86", + "X86_64" + ], + "ndkHandlerDefaultAbis": [ + "ARMEABI_V7A", + "ARM64_V8A", + "X86", + "X86_64" + ], + "externalNativeBuildAbiFilters": [], + "ndkConfigAbiFilters": [ + "armeabi-v7a", + "x86_64", + "x86", + "arm64-v8a" + ], + "splitsFilterAbis": [], + "ideBuildOnlyTargetAbi": true +} \ No newline at end of file diff --git a/lib/fb/.cxx/ndk_locator_record_2w3j676q.json b/lib/fb/.cxx/ndk_locator_record_2w3j676q.json new file mode 100644 index 00000000..7b1fb6ca --- /dev/null +++ b/lib/fb/.cxx/ndk_locator_record_2w3j676q.json @@ -0,0 +1,11 @@ +{ + "ndk": "/opt/android_sdk/ndk/21.4.7075529", + "revision": { + "mMajor": 21, + "mMinor": 4, + "mMicro": 7075529, + "mPreview": 0, + "mPrecision": "MICRO", + "mPreviewSeparator": " " + } +} \ No newline at end of file diff --git a/lib/fb/.cxx/ndk_locator_record_2w3j676q_key.json b/lib/fb/.cxx/ndk_locator_record_2w3j676q_key.json new file mode 100644 index 00000000..83c64818 --- /dev/null +++ b/lib/fb/.cxx/ndk_locator_record_2w3j676q_key.json @@ -0,0 +1,8 @@ +{ + "sdkFolder": "/opt/android_sdk", + "sideBySideNdkFolderNames": [ + "21.4.7075529", + "21.3.6528147", + "21.1.6352462" + ] +} \ No newline at end of file diff --git a/testutil/.cxx/abi_configuration_3x6d4s5q.json b/testutil/.cxx/abi_configuration_3x6d4s5q.json new file mode 100644 index 00000000..e542dae1 --- /dev/null +++ b/testutil/.cxx/abi_configuration_3x6d4s5q.json @@ -0,0 +1,14 @@ +{ + "allAbis": [ + "armeabi-v7a", + "arm64-v8a", + "x86", + "x86_64" + ], + "validAbis": [ + "ARMEABI_V7A", + "ARM64_V8A", + "X86", + "X86_64" + ] +} \ No newline at end of file diff --git a/testutil/.cxx/abi_configuration_3x6d4s5q_key.json b/testutil/.cxx/abi_configuration_3x6d4s5q_key.json new file mode 100644 index 00000000..4758fae2 --- /dev/null +++ b/testutil/.cxx/abi_configuration_3x6d4s5q_key.json @@ -0,0 +1,23 @@ +{ + "ndkHandlerSupportedAbis": [ + "ARMEABI_V7A", + "ARM64_V8A", + "X86", + "X86_64" + ], + "ndkHandlerDefaultAbis": [ + "ARMEABI_V7A", + "ARM64_V8A", + "X86", + "X86_64" + ], + "externalNativeBuildAbiFilters": [], + "ndkConfigAbiFilters": [ + "armeabi-v7a", + "x86_64", + "x86", + "arm64-v8a" + ], + "splitsFilterAbis": [], + "ideBuildOnlyTargetAbi": true +} \ No newline at end of file diff --git a/testutil/.cxx/ndk_locator_record_2w3j676q.json b/testutil/.cxx/ndk_locator_record_2w3j676q.json new file mode 100644 index 00000000..7b1fb6ca --- /dev/null +++ b/testutil/.cxx/ndk_locator_record_2w3j676q.json @@ -0,0 +1,11 @@ +{ + "ndk": "/opt/android_sdk/ndk/21.4.7075529", + "revision": { + "mMajor": 21, + "mMinor": 4, + "mMicro": 7075529, + "mPreview": 0, + "mPrecision": "MICRO", + "mPreviewSeparator": " " + } +} \ No newline at end of file diff --git a/testutil/.cxx/ndk_locator_record_2w3j676q_key.json b/testutil/.cxx/ndk_locator_record_2w3j676q_key.json new file mode 100644 index 00000000..83c64818 --- /dev/null +++ b/testutil/.cxx/ndk_locator_record_2w3j676q_key.json @@ -0,0 +1,8 @@ +{ + "sdkFolder": "/opt/android_sdk", + "sideBySideNdkFolderNames": [ + "21.4.7075529", + "21.3.6528147", + "21.1.6352462" + ] +} \ No newline at end of file diff --git a/yogacore/.cxx/abi_configuration_4s14e3o2.json b/yogacore/.cxx/abi_configuration_4s14e3o2.json new file mode 100644 index 00000000..e542dae1 --- /dev/null +++ b/yogacore/.cxx/abi_configuration_4s14e3o2.json @@ -0,0 +1,14 @@ +{ + "allAbis": [ + "armeabi-v7a", + "arm64-v8a", + "x86", + "x86_64" + ], + "validAbis": [ + "ARMEABI_V7A", + "ARM64_V8A", + "X86", + "X86_64" + ] +} \ No newline at end of file diff --git a/yogacore/.cxx/abi_configuration_4s14e3o2_key.json b/yogacore/.cxx/abi_configuration_4s14e3o2_key.json new file mode 100644 index 00000000..2b2c0ca1 --- /dev/null +++ b/yogacore/.cxx/abi_configuration_4s14e3o2_key.json @@ -0,0 +1,18 @@ +{ + "ndkHandlerSupportedAbis": [ + "ARMEABI_V7A", + "ARM64_V8A", + "X86", + "X86_64" + ], + "ndkHandlerDefaultAbis": [ + "ARMEABI_V7A", + "ARM64_V8A", + "X86", + "X86_64" + ], + "externalNativeBuildAbiFilters": [], + "ndkConfigAbiFilters": [], + "splitsFilterAbis": [], + "ideBuildOnlyTargetAbi": true +} \ No newline at end of file diff --git a/yogacore/.cxx/ndk_locator_record_2w3j676q.json b/yogacore/.cxx/ndk_locator_record_2w3j676q.json new file mode 100644 index 00000000..7b1fb6ca --- /dev/null +++ b/yogacore/.cxx/ndk_locator_record_2w3j676q.json @@ -0,0 +1,11 @@ +{ + "ndk": "/opt/android_sdk/ndk/21.4.7075529", + "revision": { + "mMajor": 21, + "mMinor": 4, + "mMicro": 7075529, + "mPreview": 0, + "mPrecision": "MICRO", + "mPreviewSeparator": " " + } +} \ No newline at end of file diff --git a/yogacore/.cxx/ndk_locator_record_2w3j676q_key.json b/yogacore/.cxx/ndk_locator_record_2w3j676q_key.json new file mode 100644 index 00000000..83c64818 --- /dev/null +++ b/yogacore/.cxx/ndk_locator_record_2w3j676q_key.json @@ -0,0 +1,8 @@ +{ + "sdkFolder": "/opt/android_sdk", + "sideBySideNdkFolderNames": [ + "21.4.7075529", + "21.3.6528147", + "21.1.6352462" + ] +} \ No newline at end of file From b6c71ae58bd42053997cff270e0765cf28815528 Mon Sep 17 00:00:00 2001 From: Richard Howell Date: Tue, 16 Nov 2021 09:06:30 -0800 Subject: [PATCH 310/347] disable submodules when exporting non-modular deps for ig deps Summary: This diff disables submodules for dependencies of IG that are not `ig_apple_library` and are exporting non-modular dependencies. This will allow for migration to using submodules as a default. The list of targets was obtained with: ``` % buck query 'kind(apple_library, attrfilter(labels, skip_module_validation, deps(igios)) - attrfilter(labels, ig_apple_library, deps(igios)))' ``` Reviewed By: ebgraham Differential Revision: D32399636 fbshipit-source-id: f3ba55def8001e8595fe3b1611d2de8ec38c8622 --- YogaKit/BUCK | 1 + 1 file changed, 1 insertion(+) diff --git a/YogaKit/BUCK b/YogaKit/BUCK index 4fe6b003..6ca5401e 100644 --- a/YogaKit/BUCK +++ b/YogaKit/BUCK @@ -46,6 +46,7 @@ yoga_apple_library( link_whole = True, modular = True, module_name = "YogaKit", + use_submodules = False, visibility = ["PUBLIC"], deps = [ yoga_dep(":yoga"), From 8123124c8012fce39a5a0de8ad4b3d5ed1679a90 Mon Sep 17 00:00:00 2001 From: Nolan O'Brien Date: Wed, 29 Dec 2021 09:22:41 -0800 Subject: [PATCH 311/347] Suppress errors in xplat/yoga Summary: Yoga (open source) has errors when `-Wconversion` is enabled. Suppress those to be just warnings. Differential Revision: D33330019 fbshipit-source-id: f5fad5581985942d469cb0689e706403d869323b --- tools/build_defs/oss/yoga_defs.bzl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/build_defs/oss/yoga_defs.bzl b/tools/build_defs/oss/yoga_defs.bzl index 2c108c20..4727feff 100644 --- a/tools/build_defs/oss/yoga_defs.bzl +++ b/tools/build_defs/oss/yoga_defs.bzl @@ -61,6 +61,9 @@ BASE_COMPILER_FLAGS = [ "-O2", "-std=c++11", "-DYG_ENABLE_EVENTS", + # Suppressions + "-Wno-error=enum-float-conversion", + "-Wno-error=implicit-float-conversion", ] LIBRARY_COMPILER_FLAGS = BASE_COMPILER_FLAGS + [ From acbffc8485bc230087ce23b2cb86551e1fa322d7 Mon Sep 17 00:00:00 2001 From: Andres Suarez Date: Thu, 30 Dec 2021 15:08:43 -0800 Subject: [PATCH 312/347] Update copyright headers from Facebook to Meta Reviewed By: aaronabramov Differential Revision: D33367752 fbshipit-source-id: 4ce94d184485e5ee0a62cf67ad2d3ba16e285c8f --- java/com/facebook/yoga/LayoutPassReason.java | 2 +- java/com/facebook/yoga/YogaAlign.java | 2 +- java/com/facebook/yoga/YogaBaselineFunction.java | 2 +- java/com/facebook/yoga/YogaConfig.java | 2 +- java/com/facebook/yoga/YogaConfigFactory.java | 2 +- java/com/facebook/yoga/YogaConfigJNIBase.java | 2 +- java/com/facebook/yoga/YogaConfigJNIFinalizer.java | 2 +- java/com/facebook/yoga/YogaConstants.java | 2 +- java/com/facebook/yoga/YogaDimension.java | 2 +- java/com/facebook/yoga/YogaDirection.java | 2 +- java/com/facebook/yoga/YogaDisplay.java | 2 +- java/com/facebook/yoga/YogaEdge.java | 2 +- java/com/facebook/yoga/YogaExperimentalFeature.java | 2 +- java/com/facebook/yoga/YogaFlexDirection.java | 2 +- java/com/facebook/yoga/YogaJustify.java | 2 +- java/com/facebook/yoga/YogaLayoutType.java | 2 +- java/com/facebook/yoga/YogaLogLevel.java | 2 +- java/com/facebook/yoga/YogaLogger.java | 2 +- java/com/facebook/yoga/YogaMeasureFunction.java | 2 +- java/com/facebook/yoga/YogaMeasureMode.java | 2 +- java/com/facebook/yoga/YogaMeasureOutput.java | 2 +- java/com/facebook/yoga/YogaNative.java | 2 +- java/com/facebook/yoga/YogaNode.java | 2 +- java/com/facebook/yoga/YogaNodeFactory.java | 2 +- java/com/facebook/yoga/YogaNodeJNIBase.java | 2 +- java/com/facebook/yoga/YogaNodeJNIFinalizer.java | 2 +- java/com/facebook/yoga/YogaNodeType.java | 2 +- java/com/facebook/yoga/YogaOverflow.java | 2 +- java/com/facebook/yoga/YogaPositionType.java | 2 +- java/com/facebook/yoga/YogaPrintOptions.java | 2 +- java/com/facebook/yoga/YogaProps.java | 2 +- java/com/facebook/yoga/YogaStyleInputs.java | 2 +- java/com/facebook/yoga/YogaUnit.java | 2 +- java/com/facebook/yoga/YogaValue.java | 2 +- java/com/facebook/yoga/YogaWrap.java | 2 +- java/jni/ScopedGlobalRef.h | 2 +- java/jni/ScopedLocalRef.h | 2 +- java/jni/YGJNI.h | 2 +- java/jni/YGJNIVanilla.cpp | 2 +- java/jni/YGJNIVanilla.h | 2 +- java/jni/YGJTypesVanilla.h | 2 +- java/jni/YogaJniException.cpp | 2 +- java/jni/YogaJniException.h | 2 +- java/jni/common.cpp | 2 +- java/jni/common.h | 2 +- java/jni/corefunctions.cpp | 2 +- java/jni/corefunctions.h | 2 +- java/jni/macros.h | 2 +- java/jni/yogajni.cpp | 3 ++- yoga/BitUtils.h | 2 +- yoga/CompactValue.h | 2 +- yoga/Utils.cpp | 2 +- yoga/Utils.h | 2 +- yoga/YGConfig.cpp | 2 +- yoga/YGConfig.h | 2 +- yoga/YGEnums.cpp | 2 +- yoga/YGEnums.h | 2 +- yoga/YGFloatOptional.h | 2 +- yoga/YGLayout.cpp | 2 +- yoga/YGLayout.h | 2 +- yoga/YGMacros.h | 2 +- yoga/YGNode.cpp | 2 +- yoga/YGNode.h | 2 +- yoga/YGNodePrint.cpp | 2 +- yoga/YGNodePrint.h | 2 +- yoga/YGStyle.cpp | 2 +- yoga/YGStyle.h | 2 +- yoga/YGValue.cpp | 2 +- yoga/YGValue.h | 2 +- yoga/Yoga-internal.h | 2 +- yoga/Yoga.cpp | 2 +- yoga/Yoga.h | 2 +- yoga/event/event.cpp | 2 +- yoga/event/event.h | 2 +- yoga/internal/experiments-inl.h | 2 +- yoga/internal/experiments.cpp | 2 +- yoga/internal/experiments.h | 2 +- yoga/log.cpp | 2 +- yoga/log.h | 2 +- 79 files changed, 80 insertions(+), 79 deletions(-) diff --git a/java/com/facebook/yoga/LayoutPassReason.java b/java/com/facebook/yoga/LayoutPassReason.java index d04ea9df..59046f05 100644 --- a/java/com/facebook/yoga/LayoutPassReason.java +++ b/java/com/facebook/yoga/LayoutPassReason.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaAlign.java b/java/com/facebook/yoga/YogaAlign.java index 82c6cbfb..5411e39f 100644 --- a/java/com/facebook/yoga/YogaAlign.java +++ b/java/com/facebook/yoga/YogaAlign.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaBaselineFunction.java b/java/com/facebook/yoga/YogaBaselineFunction.java index dbd405c6..d3444215 100644 --- a/java/com/facebook/yoga/YogaBaselineFunction.java +++ b/java/com/facebook/yoga/YogaBaselineFunction.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaConfig.java b/java/com/facebook/yoga/YogaConfig.java index 8dd2ce82..a91e5157 100644 --- a/java/com/facebook/yoga/YogaConfig.java +++ b/java/com/facebook/yoga/YogaConfig.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaConfigFactory.java b/java/com/facebook/yoga/YogaConfigFactory.java index 0d9ed50d..631545fa 100644 --- a/java/com/facebook/yoga/YogaConfigFactory.java +++ b/java/com/facebook/yoga/YogaConfigFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaConfigJNIBase.java b/java/com/facebook/yoga/YogaConfigJNIBase.java index fdc351d8..b5820d85 100644 --- a/java/com/facebook/yoga/YogaConfigJNIBase.java +++ b/java/com/facebook/yoga/YogaConfigJNIBase.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaConfigJNIFinalizer.java b/java/com/facebook/yoga/YogaConfigJNIFinalizer.java index bb082e86..a9c3e5f3 100644 --- a/java/com/facebook/yoga/YogaConfigJNIFinalizer.java +++ b/java/com/facebook/yoga/YogaConfigJNIFinalizer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaConstants.java b/java/com/facebook/yoga/YogaConstants.java index 48f39357..f8205fc6 100644 --- a/java/com/facebook/yoga/YogaConstants.java +++ b/java/com/facebook/yoga/YogaConstants.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaDimension.java b/java/com/facebook/yoga/YogaDimension.java index cebcdc47..eeecd85e 100644 --- a/java/com/facebook/yoga/YogaDimension.java +++ b/java/com/facebook/yoga/YogaDimension.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaDirection.java b/java/com/facebook/yoga/YogaDirection.java index 4e75d303..344c0f80 100644 --- a/java/com/facebook/yoga/YogaDirection.java +++ b/java/com/facebook/yoga/YogaDirection.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaDisplay.java b/java/com/facebook/yoga/YogaDisplay.java index 76cbfd77..aa94b053 100644 --- a/java/com/facebook/yoga/YogaDisplay.java +++ b/java/com/facebook/yoga/YogaDisplay.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaEdge.java b/java/com/facebook/yoga/YogaEdge.java index cba17934..929b3315 100644 --- a/java/com/facebook/yoga/YogaEdge.java +++ b/java/com/facebook/yoga/YogaEdge.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaExperimentalFeature.java b/java/com/facebook/yoga/YogaExperimentalFeature.java index 76525eab..f54c7b6e 100644 --- a/java/com/facebook/yoga/YogaExperimentalFeature.java +++ b/java/com/facebook/yoga/YogaExperimentalFeature.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaFlexDirection.java b/java/com/facebook/yoga/YogaFlexDirection.java index 83060e13..c314c0cf 100644 --- a/java/com/facebook/yoga/YogaFlexDirection.java +++ b/java/com/facebook/yoga/YogaFlexDirection.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaJustify.java b/java/com/facebook/yoga/YogaJustify.java index 3d39015e..e19213f7 100644 --- a/java/com/facebook/yoga/YogaJustify.java +++ b/java/com/facebook/yoga/YogaJustify.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaLayoutType.java b/java/com/facebook/yoga/YogaLayoutType.java index 13c707a9..8c861ff7 100644 --- a/java/com/facebook/yoga/YogaLayoutType.java +++ b/java/com/facebook/yoga/YogaLayoutType.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaLogLevel.java b/java/com/facebook/yoga/YogaLogLevel.java index f6a84023..f105145a 100644 --- a/java/com/facebook/yoga/YogaLogLevel.java +++ b/java/com/facebook/yoga/YogaLogLevel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaLogger.java b/java/com/facebook/yoga/YogaLogger.java index d8420ad7..9d439ad3 100644 --- a/java/com/facebook/yoga/YogaLogger.java +++ b/java/com/facebook/yoga/YogaLogger.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaMeasureFunction.java b/java/com/facebook/yoga/YogaMeasureFunction.java index 8b8533ba..21da35fe 100644 --- a/java/com/facebook/yoga/YogaMeasureFunction.java +++ b/java/com/facebook/yoga/YogaMeasureFunction.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaMeasureMode.java b/java/com/facebook/yoga/YogaMeasureMode.java index 848d4aa7..1750d2a1 100644 --- a/java/com/facebook/yoga/YogaMeasureMode.java +++ b/java/com/facebook/yoga/YogaMeasureMode.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaMeasureOutput.java b/java/com/facebook/yoga/YogaMeasureOutput.java index 575129f9..c7a77aba 100644 --- a/java/com/facebook/yoga/YogaMeasureOutput.java +++ b/java/com/facebook/yoga/YogaMeasureOutput.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaNative.java b/java/com/facebook/yoga/YogaNative.java index 3674b42f..1aca4821 100644 --- a/java/com/facebook/yoga/YogaNative.java +++ b/java/com/facebook/yoga/YogaNative.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaNode.java b/java/com/facebook/yoga/YogaNode.java index 109172ee..cbba2f55 100644 --- a/java/com/facebook/yoga/YogaNode.java +++ b/java/com/facebook/yoga/YogaNode.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaNodeFactory.java b/java/com/facebook/yoga/YogaNodeFactory.java index 042c2154..912083a7 100644 --- a/java/com/facebook/yoga/YogaNodeFactory.java +++ b/java/com/facebook/yoga/YogaNodeFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index 7efb8ce1..87517b63 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaNodeJNIFinalizer.java b/java/com/facebook/yoga/YogaNodeJNIFinalizer.java index bffa5c83..424006e9 100644 --- a/java/com/facebook/yoga/YogaNodeJNIFinalizer.java +++ b/java/com/facebook/yoga/YogaNodeJNIFinalizer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaNodeType.java b/java/com/facebook/yoga/YogaNodeType.java index 4386bf38..1d90eec3 100644 --- a/java/com/facebook/yoga/YogaNodeType.java +++ b/java/com/facebook/yoga/YogaNodeType.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaOverflow.java b/java/com/facebook/yoga/YogaOverflow.java index 90c97881..321d4e00 100644 --- a/java/com/facebook/yoga/YogaOverflow.java +++ b/java/com/facebook/yoga/YogaOverflow.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaPositionType.java b/java/com/facebook/yoga/YogaPositionType.java index d61c3244..6663a0ee 100644 --- a/java/com/facebook/yoga/YogaPositionType.java +++ b/java/com/facebook/yoga/YogaPositionType.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaPrintOptions.java b/java/com/facebook/yoga/YogaPrintOptions.java index 9a7f02ec..8c1a34d9 100644 --- a/java/com/facebook/yoga/YogaPrintOptions.java +++ b/java/com/facebook/yoga/YogaPrintOptions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaProps.java b/java/com/facebook/yoga/YogaProps.java index 9faa520f..398bc8f0 100644 --- a/java/com/facebook/yoga/YogaProps.java +++ b/java/com/facebook/yoga/YogaProps.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaStyleInputs.java b/java/com/facebook/yoga/YogaStyleInputs.java index 21ca2803..405a2770 100644 --- a/java/com/facebook/yoga/YogaStyleInputs.java +++ b/java/com/facebook/yoga/YogaStyleInputs.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaUnit.java b/java/com/facebook/yoga/YogaUnit.java index 5a7e5e66..e2ab8bff 100644 --- a/java/com/facebook/yoga/YogaUnit.java +++ b/java/com/facebook/yoga/YogaUnit.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaValue.java b/java/com/facebook/yoga/YogaValue.java index a5679641..2a266b02 100644 --- a/java/com/facebook/yoga/YogaValue.java +++ b/java/com/facebook/yoga/YogaValue.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/com/facebook/yoga/YogaWrap.java b/java/com/facebook/yoga/YogaWrap.java index 7ad00568..e7e60143 100644 --- a/java/com/facebook/yoga/YogaWrap.java +++ b/java/com/facebook/yoga/YogaWrap.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/jni/ScopedGlobalRef.h b/java/jni/ScopedGlobalRef.h index fa98214a..4d06a459 100644 --- a/java/jni/ScopedGlobalRef.h +++ b/java/jni/ScopedGlobalRef.h @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/jni/ScopedLocalRef.h b/java/jni/ScopedLocalRef.h index 2368ced2..bd046a27 100644 --- a/java/jni/ScopedLocalRef.h +++ b/java/jni/ScopedLocalRef.h @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/jni/YGJNI.h b/java/jni/YGJNI.h index dbff73f9..8001681c 100644 --- a/java/jni/YGJNI.h +++ b/java/jni/YGJNI.h @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp index 71fe98f3..6b6fb7f4 100644 --- a/java/jni/YGJNIVanilla.cpp +++ b/java/jni/YGJNIVanilla.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/jni/YGJNIVanilla.h b/java/jni/YGJNIVanilla.h index 4179a488..77b8b11b 100644 --- a/java/jni/YGJNIVanilla.h +++ b/java/jni/YGJNIVanilla.h @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/jni/YGJTypesVanilla.h b/java/jni/YGJTypesVanilla.h index d1202b75..5cf40682 100644 --- a/java/jni/YGJTypesVanilla.h +++ b/java/jni/YGJTypesVanilla.h @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/jni/YogaJniException.cpp b/java/jni/YogaJniException.cpp index 5d6bfbfe..edc20986 100644 --- a/java/jni/YogaJniException.cpp +++ b/java/jni/YogaJniException.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/jni/YogaJniException.h b/java/jni/YogaJniException.h index d333adf5..b0378ab4 100644 --- a/java/jni/YogaJniException.h +++ b/java/jni/YogaJniException.h @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/jni/common.cpp b/java/jni/common.cpp index 37b56770..e8ece68a 100644 --- a/java/jni/common.cpp +++ b/java/jni/common.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/jni/common.h b/java/jni/common.h index fda1e06d..d79c3e50 100644 --- a/java/jni/common.h +++ b/java/jni/common.h @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/jni/corefunctions.cpp b/java/jni/corefunctions.cpp index 8d522289..1f8c3f75 100644 --- a/java/jni/corefunctions.cpp +++ b/java/jni/corefunctions.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/jni/corefunctions.h b/java/jni/corefunctions.h index 18736dbb..e6f2650e 100644 --- a/java/jni/corefunctions.h +++ b/java/jni/corefunctions.h @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/jni/macros.h b/java/jni/macros.h index ea7c554b..2e2632d5 100644 --- a/java/jni/macros.h +++ b/java/jni/macros.h @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/jni/yogajni.cpp b/java/jni/yogajni.cpp index ee126494..cab45a13 100644 --- a/java/jni/yogajni.cpp +++ b/java/jni/yogajni.cpp @@ -1,9 +1,10 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ + #include "YGJNIVanilla.h" #include "common.h" diff --git a/yoga/BitUtils.h b/yoga/BitUtils.h index 2161effc..b17751ad 100644 --- a/yoga/BitUtils.h +++ b/yoga/BitUtils.h @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/CompactValue.h b/yoga/CompactValue.h index f398668e..6879ca14 100644 --- a/yoga/CompactValue.h +++ b/yoga/CompactValue.h @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/Utils.cpp b/yoga/Utils.cpp index eaa74b06..f2af12b2 100644 --- a/yoga/Utils.cpp +++ b/yoga/Utils.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/Utils.h b/yoga/Utils.h index 57e1d45d..d21e8ecb 100644 --- a/yoga/Utils.h +++ b/yoga/Utils.h @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/YGConfig.cpp b/yoga/YGConfig.cpp index fb72e80c..915da52a 100644 --- a/yoga/YGConfig.cpp +++ b/yoga/YGConfig.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/YGConfig.h b/yoga/YGConfig.h index e87d6758..607408ac 100644 --- a/yoga/YGConfig.h +++ b/yoga/YGConfig.h @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/YGEnums.cpp b/yoga/YGEnums.cpp index c01d3d94..b97342d8 100644 --- a/yoga/YGEnums.cpp +++ b/yoga/YGEnums.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/YGEnums.h b/yoga/YGEnums.h index 3dc458dc..c14daaa1 100644 --- a/yoga/YGEnums.h +++ b/yoga/YGEnums.h @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/YGFloatOptional.h b/yoga/YGFloatOptional.h index e4cf0284..4aa9e76e 100644 --- a/yoga/YGFloatOptional.h +++ b/yoga/YGFloatOptional.h @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/YGLayout.cpp b/yoga/YGLayout.cpp index e43213cd..9aadcd4a 100644 --- a/yoga/YGLayout.cpp +++ b/yoga/YGLayout.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/YGLayout.h b/yoga/YGLayout.h index b7604d8e..6c239342 100644 --- a/yoga/YGLayout.h +++ b/yoga/YGLayout.h @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/YGMacros.h b/yoga/YGMacros.h index c6917f1b..9211c87b 100644 --- a/yoga/YGMacros.h +++ b/yoga/YGMacros.h @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/YGNode.cpp b/yoga/YGNode.cpp index f4c14bf3..32eabd1d 100644 --- a/yoga/YGNode.cpp +++ b/yoga/YGNode.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/YGNode.h b/yoga/YGNode.h index 4b6e6277..8c511236 100644 --- a/yoga/YGNode.h +++ b/yoga/YGNode.h @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/YGNodePrint.cpp b/yoga/YGNodePrint.cpp index 72d147db..d46373c4 100644 --- a/yoga/YGNodePrint.cpp +++ b/yoga/YGNodePrint.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/YGNodePrint.h b/yoga/YGNodePrint.h index 3db504b4..0e25b972 100644 --- a/yoga/YGNodePrint.h +++ b/yoga/YGNodePrint.h @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/YGStyle.cpp b/yoga/YGStyle.cpp index e8033bdf..f8bba25d 100644 --- a/yoga/YGStyle.cpp +++ b/yoga/YGStyle.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/YGStyle.h b/yoga/YGStyle.h index aab7599c..b463623a 100644 --- a/yoga/YGStyle.h +++ b/yoga/YGStyle.h @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/YGValue.cpp b/yoga/YGValue.cpp index 37383a55..89ff41ba 100644 --- a/yoga/YGValue.cpp +++ b/yoga/YGValue.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/YGValue.h b/yoga/YGValue.h index a2000978..11beb3ec 100644 --- a/yoga/YGValue.h +++ b/yoga/YGValue.h @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/Yoga-internal.h b/yoga/Yoga-internal.h index acd173be..08f9da17 100644 --- a/yoga/Yoga-internal.h +++ b/yoga/Yoga-internal.h @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 2c68674a..99862797 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/Yoga.h b/yoga/Yoga.h index 86cd65e2..3444658b 100644 --- a/yoga/Yoga.h +++ b/yoga/Yoga.h @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/event/event.cpp b/yoga/event/event.cpp index 3af3e83a..152c4e16 100644 --- a/yoga/event/event.cpp +++ b/yoga/event/event.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/event/event.h b/yoga/event/event.h index 404ec376..a5978914 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/internal/experiments-inl.h b/yoga/internal/experiments-inl.h index 959d9c33..44235590 100644 --- a/yoga/internal/experiments-inl.h +++ b/yoga/internal/experiments-inl.h @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/internal/experiments.cpp b/yoga/internal/experiments.cpp index 16f196d5..016ea208 100644 --- a/yoga/internal/experiments.cpp +++ b/yoga/internal/experiments.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/internal/experiments.h b/yoga/internal/experiments.h index 1bdb7014..2298e247 100644 --- a/yoga/internal/experiments.h +++ b/yoga/internal/experiments.h @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/log.cpp b/yoga/log.cpp index eb3da039..dbf7b437 100644 --- a/yoga/log.cpp +++ b/yoga/log.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/yoga/log.h b/yoga/log.h index ae33744c..1d270e82 100644 --- a/yoga/log.h +++ b/yoga/log.h @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. From bd95b3d243c45ace339bfb5c12d81e66bac5ec74 Mon Sep 17 00:00:00 2001 From: Nolan O'Brien Date: Tue, 4 Jan 2022 10:50:20 -0800 Subject: [PATCH 313/347] Yoga: suppress warnings Summary: There are two `yoga_defs.bzl` files... both need to be updated to suppress warnings Differential Revision: D33393056 fbshipit-source-id: 752416af5386fc0d519689b554d2d6629d186d88 --- tools/build_defs/oss/yoga_defs.bzl | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tools/build_defs/oss/yoga_defs.bzl b/tools/build_defs/oss/yoga_defs.bzl index 4727feff..2e0a2c22 100644 --- a/tools/build_defs/oss/yoga_defs.bzl +++ b/tools/build_defs/oss/yoga_defs.bzl @@ -50,6 +50,11 @@ CXX_LIBRARY_WHITELIST = [ "//java:jni", ] +SUPPRESSION_FLAGS = [ + "-Wno-error=enum-float-conversion", + "-Wno-error=implicit-float-conversion", +] + BASE_COMPILER_FLAGS = [ "-fno-omit-frame-pointer", "-fexceptions", @@ -61,10 +66,7 @@ BASE_COMPILER_FLAGS = [ "-O2", "-std=c++11", "-DYG_ENABLE_EVENTS", - # Suppressions - "-Wno-error=enum-float-conversion", - "-Wno-error=implicit-float-conversion", -] +] + SUPPRESSION_FLAGS LIBRARY_COMPILER_FLAGS = BASE_COMPILER_FLAGS + [ "-fPIC", From 477fedd1b64ad4ac45ef12ef1ea82966fdb7ceeb Mon Sep 17 00:00:00 2001 From: Aniket Mathur Date: Mon, 31 Jan 2022 16:59:28 -0800 Subject: [PATCH 314/347] Rollout to xplat/{t..z} Reviewed By: mzlee Differential Revision: D33810211 fbshipit-source-id: c1a437a3834701d79461365ef503eee9fa4e75bd --- java/BUCK | 4 ++-- lib/fb/BUCK | 2 +- testutil/BUCK | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/java/BUCK b/java/BUCK index 9306bc80..07b653db 100644 --- a/java/BUCK +++ b/java/BUCK @@ -3,7 +3,7 @@ # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID", "CXX_LIBRARY_WHITELIST", "JNI_TARGET", "JSR_305_TARGET", "JUNIT_TARGET", "PROGUARD_ANNOTATIONS_TARGET", "SOLOADER_TARGET", "YOGA_ROOTS", "yoga_android_dep", "yoga_cxx_library", "yoga_dep", "yoga_java_binary", "yoga_java_library", "yoga_java_test", "yoga_prebuilt_cxx_library") +load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID", "CXX", "CXX_LIBRARY_WHITELIST", "JNI_TARGET", "JSR_305_TARGET", "JUNIT_TARGET", "PROGUARD_ANNOTATIONS_TARGET", "SOLOADER_TARGET", "YOGA_ROOTS", "yoga_android_dep", "yoga_cxx_library", "yoga_dep", "yoga_java_binary", "yoga_java_library", "yoga_java_test", "yoga_prebuilt_cxx_library") CXX_LIBRARY_WHITELIST_FOR_TESTS = CXX_LIBRARY_WHITELIST + [ yoga_android_dep("testutil:jni"), @@ -46,7 +46,7 @@ yoga_cxx_library( "-Os", "-std=c++11", ], - platforms = ANDROID, + platforms = (CXX, ANDROID), preprocessor_flags = [ "-DFBJNI_WITH_FAST_CALLS", ], diff --git a/lib/fb/BUCK b/lib/fb/BUCK index 851e749f..f283dca1 100644 --- a/lib/fb/BUCK +++ b/lib/fb/BUCK @@ -37,7 +37,7 @@ yoga_cxx_library( "-Wno-unused-variable", "-std=c++11", ], - platforms = (ANDROID,), + platforms = (CXX, ANDROID), soname = "libfbjni.$(ext)", visibility = ["PUBLIC"], deps = [ diff --git a/testutil/BUCK b/testutil/BUCK index 1a66f91b..b1712055 100644 --- a/testutil/BUCK +++ b/testutil/BUCK @@ -1,4 +1,4 @@ -load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID", "FBJNI_TARGET", "LIBRARY_COMPILER_FLAGS", "SOLOADER_TARGET", "subdir_glob", "yoga_cxx_library", "yoga_dep", "yoga_java_library") +load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID", "CXX", "FBJNI_TARGET", "LIBRARY_COMPILER_FLAGS", "SOLOADER_TARGET", "subdir_glob", "yoga_cxx_library", "yoga_dep", "yoga_java_library") yoga_cxx_library( name = "testutil", @@ -17,7 +17,7 @@ yoga_cxx_library( header_namespace = "", exported_headers = subdir_glob([("src/main/cpp/include", "yoga/testutil/testutil.h")]), compiler_flags = LIBRARY_COMPILER_FLAGS, - platforms = ANDROID, + platforms = (CXX, ANDROID), soname = "libyoga_testutil.$(ext)", visibility = ["PUBLIC"], deps = [ @@ -43,7 +43,7 @@ yoga_cxx_library( srcs = ["src/main/cpp/jni/jni.cpp"], allow_jni_merging = False, compiler_flags = LIBRARY_COMPILER_FLAGS, - platforms = ANDROID, + platforms = (CXX, ANDROID), soname = "libyoga_testutil_jni.$(ext)", visibility = ["PUBLIC"], deps = [ From 4d4918cdafb768541507e26abba8afea85181682 Mon Sep 17 00:00:00 2001 From: Keshav Kolur Date: Tue, 15 Feb 2022 07:24:40 -0800 Subject: [PATCH 315/347] Replace fb_xplat_platform_specific_rule call in yoga_defs with fb_native.android_resource and add aliasing Summary: Replace fb_xplat_platform_specific_rule call in yoga_defs with fb_native.android_resource and add aliasing Reviewed By: alexmalyshev Differential Revision: D34107731 fbshipit-source-id: c4d192e24cb3b86bedaa316b735c43387f6e36d4 --- tools/build_defs/oss/yoga_defs.bzl | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/build_defs/oss/yoga_defs.bzl b/tools/build_defs/oss/yoga_defs.bzl index 2e0a2c22..c519af17 100644 --- a/tools/build_defs/oss/yoga_defs.bzl +++ b/tools/build_defs/oss/yoga_defs.bzl @@ -169,6 +169,11 @@ def yoga_android_library(*args, **kwargs): native.android_library(*args, **kwargs) def yoga_android_resource(*args, **kwargs): + native.alias( + name = kwargs["name"] + "Android", + actual = ":" + kwargs["name"], + visibility = kwargs.get("visibility") or ["PUBLIC"], + ) native.android_resource(*args, **kwargs) def yoga_apple_library(*args, **kwargs): From fba952d5eca2a2ee8298a7cbe66c14d2b969d591 Mon Sep 17 00:00:00 2001 From: Keshav Kolur Date: Tue, 15 Feb 2022 08:53:31 -0800 Subject: [PATCH 316/347] Remove platform specific behavior for fb_xplat_platform_specific_rule where rule = fb_prebuilt_jar Summary: Same as title and added aliasing Reviewed By: aniketmathur Differential Revision: D34216617 fbshipit-source-id: 99de98d2c8264a02a8d6f7ff065adff924dd8060 --- tools/build_defs/oss/yoga_defs.bzl | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/build_defs/oss/yoga_defs.bzl b/tools/build_defs/oss/yoga_defs.bzl index c519af17..ab1fdd0e 100644 --- a/tools/build_defs/oss/yoga_defs.bzl +++ b/tools/build_defs/oss/yoga_defs.bzl @@ -210,6 +210,11 @@ def yoga_prebuilt_cxx_library(*args, **kwargs): native.prebuilt_cxx_library(*args, **kwargs) def yoga_prebuilt_jar(*args, **kwargs): + native.alias( + name = kwargs["name"] + "Android", + actual = ":" + kwargs["name"], + visibility = kwargs.get("visibility") or ["PUBLIC"], + ) native.prebuilt_jar(*args, **kwargs) def yoga_prebuilt_aar(*args, **kwargs): From b4d144a5469a76aecc9666c3602caf28d3077b4a Mon Sep 17 00:00:00 2001 From: Dmitry Vinnik Date: Fri, 4 Mar 2022 11:41:41 -0800 Subject: [PATCH 317/347] docs: add GH button in support of Ukraine (#1134) Summary: Our mission at Meta Open Source is to empower communities through open source, and we believe that it means building a welcoming and safe environment for all. As a part of this work, we are adding this banner in support for Ukraine during this crisis. Pull Request resolved: https://github.com/facebook/yoga/pull/1134 Reviewed By: cortinico Differential Revision: D34635677 Pulled By: dmitryvinn-fb fbshipit-source-id: 492fb66b9d4cb218f422564dcef24089c2847603 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 527879ff..23c26c3b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Yoga [![CocoaPods](https://img.shields.io/cocoapods/v/YogaKit.svg)](http://cocoapods.org/pods/YogaKit) [![npm](https://img.shields.io/npm/v/yoga-layout.svg)](https://www.npmjs.com/package/yoga-layout) [![bintray](https://img.shields.io/bintray/v/facebook/maven/com.facebook.yoga:yoga.svg)](https://bintray.com/facebook/maven/com.facebook.yoga%3Ayoga/_latestVersion) [![NuGet](https://img.shields.io/nuget/v/Facebook.Yoga.svg)](https://www.nuget.org/packages/Facebook.Yoga) +# Yoga [![Support Ukraine](https://img.shields.io/badge/Support-Ukraine-FFD500?style=flat&labelColor=005BBB)](https://opensource.fb.com/support-ukraine) [![CocoaPods](https://img.shields.io/cocoapods/v/YogaKit.svg)](http://cocoapods.org/pods/YogaKit) [![npm](https://img.shields.io/npm/v/yoga-layout.svg)](https://www.npmjs.com/package/yoga-layout) [![bintray](https://img.shields.io/bintray/v/facebook/maven/com.facebook.yoga:yoga.svg)](https://bintray.com/facebook/maven/com.facebook.yoga%3Ayoga/_latestVersion) [![NuGet](https://img.shields.io/nuget/v/Facebook.Yoga.svg)](https://www.nuget.org/packages/Facebook.Yoga) ## Building Yoga builds with [buck](https://buckbuild.com). Make sure you install buck before contributing to Yoga. Yoga's main implementation is in C++, with bindings to supported languages and frameworks. When making changes to Yoga please ensure the changes are also propagated to these bindings when applicable. From 44d8da2520dfcf3e0b9549a4497a804bf043955c Mon Sep 17 00:00:00 2001 From: caioagiani Date: Tue, 8 Mar 2022 03:58:58 -0800 Subject: [PATCH 318/347] fix: typos (#33040) Summary: Fix typos in: - `Libraries/Renderer/implementations/ReactFabric-dev.js`: transfered -> **transferred** - `Libraries/Renderer/implementations/ReactNativeRenderer-dev.js`: transfered -> **transferred** - `ReactAndroid/src/main/java/com/facebook/react/modules/network/ProgressiveStringDecoder.java`: remainderLenght -> **remainderLength** - `ReactAndroid/src/main/jni/first-party/yogajni/jni/ScopedGlobalRef.h`: Transfering -> **Transferring** - `ReactCommon/react/renderer/graphics/Transform.h`: tranformation -> **transformation** - `packages/rn-tester/js/examples/ToastAndroid/ToastAndroidExample.android.js`: occured -> **occurred** ## Changelog [Internal] [Fixed] - fix typos X-link: https://github.com/facebook/react-native/pull/33040 Reviewed By: cortinico, pasqualeanatriello Differential Revision: D34003812 Pulled By: dmitryrykun fbshipit-source-id: 5c8699f8efcc4354854190a9aade30dbc5c90fdb --- java/jni/ScopedGlobalRef.h | 2 +- java/jni/ScopedLocalRef.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/java/jni/ScopedGlobalRef.h b/java/jni/ScopedGlobalRef.h index 4d06a459..e50a5702 100644 --- a/java/jni/ScopedGlobalRef.h +++ b/java/jni/ScopedGlobalRef.h @@ -36,7 +36,7 @@ namespace vanillajni { * This class is very explicit in its behavior, and it does not allow to perform * unexpected conversions or unexpected ownership transfer. In practice, this * class acts as a unique pointer where the underying JNI reference can have one - * and just one owner. Transfering ownership is allowed but it is an explicit + * and just one owner. Transferring ownership is allowed but it is an explicit * operation (implemneted via move semantics and also via explicity API calls). * * Note that this class doesn't receive an explicit JNIEnv at construction time. diff --git a/java/jni/ScopedLocalRef.h b/java/jni/ScopedLocalRef.h index bd046a27..9e127db3 100644 --- a/java/jni/ScopedLocalRef.h +++ b/java/jni/ScopedLocalRef.h @@ -38,7 +38,7 @@ namespace vanillajni { * This class is very explicit in its behavior, and it does not allow to perform * unexpected conversions or unexpected ownership transfer. In practice, this * class acts as a unique pointer where the underying JNI reference can have one - * and just one owner. Transfering ownership is allowed but it is an explicit + * and just one owner. Transferring ownership is allowed but it is an explicit * operation (implemneted via move semantics and also via explicity API calls). * * As with standard JNI local references it is not a valid operation to keep a From f174de70afdde2492e8677bd0e716eb41bf64469 Mon Sep 17 00:00:00 2001 From: Hugo Cuvillier Date: Tue, 12 Apr 2022 09:27:25 -0700 Subject: [PATCH 319/347] Use logical operator instead of bit operation Summary: I guess it's the same since we're working on a `bool` but... this causes some compilation error. Changelog: [General][iOS] - Fix compilation warning in yoga Reviewed By: Andrey-Mishanin Differential Revision: D35438992 fbshipit-source-id: 22bb848dfee435ede66af0a740605d4618585e18 --- yoga/Yoga.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 99862797..20389d4f 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -2229,7 +2229,7 @@ static float YGDistributeFreeSpaceSecondPass( depth, generationCount); node->setLayoutHadOverflow( - node->getLayout().hadOverflow() | + node->getLayout().hadOverflow() || currentRelativeChild->getLayout().hadOverflow()); } return deltaFreeSpace; From 2e1fa58ea58494b8504a1e132a7a53c459ea9fd4 Mon Sep 17 00:00:00 2001 From: Adam Ernst Date: Wed, 13 Apr 2022 10:04:19 -0700 Subject: [PATCH 320/347] Fix up more uses of Wno-error= Summary: This results in compiler warnings. At the scale of our builds, warnings are useless; no one feels empowered to fix thousands of noisy warnings, so they are just noise. Turn them off. Reviewed By: Daij-Djan, nlutsenko Differential Revision: D35579825 fbshipit-source-id: cffb7b4ae94299b78aec057e43e87e756efd2d63 --- tools/build_defs/oss/yoga_defs.bzl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/build_defs/oss/yoga_defs.bzl b/tools/build_defs/oss/yoga_defs.bzl index ab1fdd0e..2bf256eb 100644 --- a/tools/build_defs/oss/yoga_defs.bzl +++ b/tools/build_defs/oss/yoga_defs.bzl @@ -51,8 +51,8 @@ CXX_LIBRARY_WHITELIST = [ ] SUPPRESSION_FLAGS = [ - "-Wno-error=enum-float-conversion", - "-Wno-error=implicit-float-conversion", + "-Wno-enum-float-conversion", + "-Wno-implicit-float-conversion", ] BASE_COMPILER_FLAGS = [ From 4d089ecc7945e35635b30861b2884f5b9081a398 Mon Sep 17 00:00:00 2001 From: Richard Howell Date: Thu, 14 Apr 2022 17:43:52 -0700 Subject: [PATCH 321/347] add missing sdk_modules Summary: Add SDK modules that cannot be inferred from `frameworks`. Reviewed By: jayhickey Differential Revision: D35651890 fbshipit-source-id: 3e6dcdf3ff5db9ef9e1e05e3d4cbe3ff7e0189e3 --- YogaKit/BUCK | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/YogaKit/BUCK b/YogaKit/BUCK index 6ca5401e..b6acee5f 100644 --- a/YogaKit/BUCK +++ b/YogaKit/BUCK @@ -46,6 +46,11 @@ yoga_apple_library( link_whole = True, modular = True, module_name = "YogaKit", + sdk_modules = [ + "CoreGraphics", + "Foundation", + "UIKit", + ], use_submodules = False, visibility = ["PUBLIC"], deps = [ From bfcd15e4a91e3ee83e289c9001ab624b4ba68891 Mon Sep 17 00:00:00 2001 From: Janic Duplessis Date: Tue, 7 Jun 2022 07:42:49 -0700 Subject: [PATCH 322/347] Make all headers public and add #ifdef __cplusplus (#1150) Summary: This change is mostly needed to support the new react-native architecture with Swift. Some private yoga headers end up being included in the swift build and result in compilation failure since swift cannot compile c++ modules. See https://github.com/facebook/react-native/pull/33381. The most reliable fix is to include all headers as public headers, and add `#ifdef __cplusplus` to those that include c++. This is already what we do for other headers, this applies this to all headers. Tested in the YogaKitSample, and also in a react-native app. Changelog: [iOS] [Changed] - Make all Yoga headers public and add #ifdef __cplusplus Pull Request resolved: https://github.com/facebook/yoga/pull/1150 Reviewed By: dmitryrykun Differential Revision: D36966687 Pulled By: cortinico fbshipit-source-id: a34a54d56df43ab4934715070bab8e790b9abd39 --- Yoga.podspec | 5 +++-- yoga/BitUtils.h | 4 ++++ yoga/CompactValue.h | 4 ++++ yoga/Utils.h | 5 +++++ yoga/YGConfig.h | 5 +++++ yoga/YGFloatOptional.h | 4 ++++ yoga/YGLayout.h | 5 +++++ yoga/YGNodePrint.h | 7 +++++++ yoga/Yoga-internal.h | 5 +++++ yoga/log.h | 4 ++++ 10 files changed, 46 insertions(+), 2 deletions(-) diff --git a/Yoga.podspec b/Yoga.podspec index 2b09977d..077f6ccd 100644 --- a/Yoga.podspec +++ b/Yoga.podspec @@ -1,8 +1,9 @@ -# Copyright (c) Facebook, Inc. and its affiliates. +# Copyright (c) Meta Platforms, Inc. and affiliates. # # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. + Pod::Spec.new do |spec| spec.name = 'Yoga' spec.version = '1.14.0' @@ -33,6 +34,6 @@ Pod::Spec.new do |spec| '-fPIC' ] spec.source_files = 'yoga/**/*.{c,h,cpp}' - spec.public_header_files = 'yoga/{Yoga,YGEnums,YGMacros,YGNode,YGStyle,YGValue}.h' + spec.public_header_files = 'yoga/*.h' end diff --git a/yoga/BitUtils.h b/yoga/BitUtils.h index b17751ad..a60ea760 100644 --- a/yoga/BitUtils.h +++ b/yoga/BitUtils.h @@ -7,6 +7,8 @@ #pragma once +#ifdef __cplusplus + #include #include #include "YGEnums.h" @@ -65,3 +67,5 @@ inline void setBooleanData(uint8_t& flags, size_t index, bool value) { } // namespace detail } // namespace yoga } // namespace facebook + +#endif diff --git a/yoga/CompactValue.h b/yoga/CompactValue.h index 6879ca14..1f03cf72 100644 --- a/yoga/CompactValue.h +++ b/yoga/CompactValue.h @@ -7,6 +7,8 @@ #pragma once +#ifdef __cplusplus + #include "YGValue.h" #include "YGMacros.h" #include @@ -182,3 +184,5 @@ constexpr bool operator!=(CompactValue a, CompactValue b) noexcept { } // namespace detail } // namespace yoga } // namespace facebook + +#endif diff --git a/yoga/Utils.h b/yoga/Utils.h index d21e8ecb..8588ecc5 100644 --- a/yoga/Utils.h +++ b/yoga/Utils.h @@ -6,6 +6,9 @@ */ #pragma once + +#ifdef __cplusplus + #include "YGNode.h" #include "Yoga-internal.h" #include "CompactValue.h" @@ -145,3 +148,5 @@ inline YGFloatOptional YGResolveValueMargin( } void throwLogicalErrorWithMessage(const char* message); + +#endif diff --git a/yoga/YGConfig.h b/yoga/YGConfig.h index 607408ac..e15cc122 100644 --- a/yoga/YGConfig.h +++ b/yoga/YGConfig.h @@ -6,6 +6,9 @@ */ #pragma once + +#ifdef __cplusplus + #include "Yoga-internal.h" #include "Yoga.h" @@ -74,3 +77,5 @@ public: setCloneNodeCallback(YGCloneNodeFunc{nullptr}); } }; + +#endif diff --git a/yoga/YGFloatOptional.h b/yoga/YGFloatOptional.h index 4aa9e76e..6af7bbaf 100644 --- a/yoga/YGFloatOptional.h +++ b/yoga/YGFloatOptional.h @@ -7,6 +7,8 @@ #pragma once +#ifdef __cplusplus + #include #include #include "Yoga-internal.h" @@ -68,3 +70,5 @@ inline bool operator>=(YGFloatOptional lhs, YGFloatOptional rhs) { inline bool operator<=(YGFloatOptional lhs, YGFloatOptional rhs) { return lhs < rhs || lhs == rhs; } + +#endif diff --git a/yoga/YGLayout.h b/yoga/YGLayout.h index 6c239342..e3a4a194 100644 --- a/yoga/YGLayout.h +++ b/yoga/YGLayout.h @@ -6,6 +6,9 @@ */ #pragma once + +#ifdef __cplusplus + #include "BitUtils.h" #include "YGFloatOptional.h" #include "Yoga-internal.h" @@ -85,3 +88,5 @@ public: bool operator==(YGLayout layout) const; bool operator!=(YGLayout layout) const { return !(*this == layout); } }; + +#endif diff --git a/yoga/YGNodePrint.h b/yoga/YGNodePrint.h index 0e25b972..83b3f860 100644 --- a/yoga/YGNodePrint.h +++ b/yoga/YGNodePrint.h @@ -6,7 +6,11 @@ */ #ifdef DEBUG + #pragma once + +#ifdef __cplusplus + #include #include "Yoga.h" @@ -22,4 +26,7 @@ void YGNodeToString( } // namespace yoga } // namespace facebook + +#endif + #endif diff --git a/yoga/Yoga-internal.h b/yoga/Yoga-internal.h index 08f9da17..492543ef 100644 --- a/yoga/Yoga-internal.h +++ b/yoga/Yoga-internal.h @@ -6,6 +6,9 @@ */ #pragma once + +#ifdef __cplusplus + #include #include #include @@ -148,3 +151,5 @@ static const float kDefaultFlexShrink = 0.0f; static const float kWebDefaultFlexShrink = 1.0f; extern bool YGFloatsEqual(const float a, const float b); + +#endif diff --git a/yoga/log.h b/yoga/log.h index 1d270e82..b9bfea4f 100644 --- a/yoga/log.h +++ b/yoga/log.h @@ -7,6 +7,8 @@ #pragma once +#ifdef __cplusplus + #include "YGEnums.h" struct YGNode; @@ -36,3 +38,5 @@ struct Log { } // namespace detail } // namespace yoga } // namespace facebook + +#endif From 22eb898e8c5323ed3df215c585a3173cd8bf685d Mon Sep 17 00:00:00 2001 From: Privacy Ownership Team <> Date: Tue, 14 Jun 2022 09:12:55 -0700 Subject: [PATCH 323/347] Asset Ownership Update For asset://code.third_party_library/fbsource/xplat%2Fyoga%2Flib%2Fjunit Reviewed By: SidharthGuglani Differential Revision: D37141168 fbshipit-source-id: 02c2f3b58819cc8f174e5c136e1ad2e40464bcc4 --- lib/junit/METADATA.bzl | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 lib/junit/METADATA.bzl diff --git a/lib/junit/METADATA.bzl b/lib/junit/METADATA.bzl new file mode 100644 index 00000000..bb2b259d --- /dev/null +++ b/lib/junit/METADATA.bzl @@ -0,0 +1,7 @@ +METADATA = { + "maintainers": [ + "yoga", + ], + "name": "junit", + "owner": "yoga", +} From 88c9b046ed8befa0ae1ba642c8b3cf900f24f7ae Mon Sep 17 00:00:00 2001 From: Privacy Ownership Team <> Date: Fri, 17 Jun 2022 07:58:15 -0700 Subject: [PATCH 324/347] Asset Ownership Update For asset://code.third_party_library/fbsource/xplat%2Fyoga%2Flib%2Fappcompat Reviewed By: SidharthGuglani Differential Revision: D37225485 fbshipit-source-id: 2c565d2e373ec50f69a7b8c83e56702b89ea4b68 --- lib/appcompat/METADATA.bzl | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 lib/appcompat/METADATA.bzl diff --git a/lib/appcompat/METADATA.bzl b/lib/appcompat/METADATA.bzl new file mode 100644 index 00000000..c7abacc9 --- /dev/null +++ b/lib/appcompat/METADATA.bzl @@ -0,0 +1,7 @@ +METADATA = { + "maintainers": [ + "yoga", + ], + "name": "appcompat", + "owner": "yoga", +} From a9a21d0aa66c919114968029b264e894613226d9 Mon Sep 17 00:00:00 2001 From: Ron Edelstein Date: Wed, 6 Jul 2022 09:07:07 -0700 Subject: [PATCH 325/347] Explicitly set language to JAVA where it is missing [xplat] (round 1) Reviewed By: IanChilds Differential Revision: D37594044 fbshipit-source-id: 0bbcaaed951a212651d3cc0fc3371751ced13852 --- android/sample/java/com/facebook/samples/yoga/BUCK | 1 + android/src/main/java/com/facebook/yoga/android/BUCK | 1 + 2 files changed, 2 insertions(+) diff --git a/android/sample/java/com/facebook/samples/yoga/BUCK b/android/sample/java/com/facebook/samples/yoga/BUCK index 502c19f3..0bf85aa4 100644 --- a/android/sample/java/com/facebook/samples/yoga/BUCK +++ b/android/sample/java/com/facebook/samples/yoga/BUCK @@ -9,6 +9,7 @@ yoga_android_library( name = "yoga", srcs = glob(["**/*.java"]), autoglob = False, + language = "JAVA", visibility = [ "PUBLIC", ], diff --git a/android/src/main/java/com/facebook/yoga/android/BUCK b/android/src/main/java/com/facebook/yoga/android/BUCK index 20408c78..a854a673 100644 --- a/android/src/main/java/com/facebook/yoga/android/BUCK +++ b/android/src/main/java/com/facebook/yoga/android/BUCK @@ -9,6 +9,7 @@ yoga_android_library( name = "android", srcs = glob(["**/*.java"]), autoglob = False, + language = "JAVA", visibility = [ "PUBLIC", ], From c5a8f447b123a6d3055fca34175b086abb379a53 Mon Sep 17 00:00:00 2001 From: Sim Sun Date: Wed, 20 Jul 2022 15:18:18 -0700 Subject: [PATCH 326/347] Bump SoLoader version to 0.10.4 Differential Revision: D37988585 fbshipit-source-id: 586bf12c76ac6d44c5d46d3e2b5551e46dbc2112 --- java/build.gradle | 5 +++-- lib/fb/build.gradle | 2 +- testutil/build.gradle | 5 +++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/java/build.gradle b/java/build.gradle index 8d78a03f..c77068c3 100644 --- a/java/build.gradle +++ b/java/build.gradle @@ -1,10 +1,11 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ + apply plugin: 'com.android.library' android { @@ -54,7 +55,7 @@ android { dependencies { implementation 'com.google.code.findbugs:jsr305:3.0.2' implementation project(':yoga:proguard-annotations') - implementation 'com.facebook.soloader:soloader:0.10.1' + implementation 'com.facebook.soloader:soloader:0.10.4' testImplementation 'junit:junit:4.12' testImplementation project(':testutil') } diff --git a/lib/fb/build.gradle b/lib/fb/build.gradle index a3495d8f..8194a2b6 100644 --- a/lib/fb/build.gradle +++ b/lib/fb/build.gradle @@ -33,7 +33,7 @@ android { } dependencies { - implementation 'com.facebook.soloader:soloader:0.10.1' + implementation 'com.facebook.soloader:soloader:0.10.4' implementation 'com.google.code.findbugs:jsr305:3.0.2' implementation project(':yoga:proguard-annotations') } diff --git a/testutil/build.gradle b/testutil/build.gradle index d36e8673..40d2ee14 100644 --- a/testutil/build.gradle +++ b/testutil/build.gradle @@ -1,10 +1,11 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ + apply plugin: 'com.android.library' android { @@ -33,6 +34,6 @@ android { } dependencies { - implementation 'com.facebook.soloader:soloader:0.10.1' + implementation 'com.facebook.soloader:soloader:0.10.4' } } From 64f865a639a308aae73daeaf93c68d8666a8e879 Mon Sep 17 00:00:00 2001 From: Michael Sokolnicki Date: Fri, 22 Jul 2022 17:07:26 -0700 Subject: [PATCH 327/347] Remove MaskedViewIOS from react-native-github Summary: Remove MaskedViewIOS from react-native-github, update deprecation warnings, rebuild CocoaPods. Changelog: [General][Removed] - Remove MaskedViewIOS Reviewed By: lunaleaps Differential Revision: D37860775 fbshipit-source-id: 963b4b9891eecf5610cfad1e93ac8bf83f29f521 --- ReactYoga.xcodeproj/project.pbxproj | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/ReactYoga.xcodeproj/project.pbxproj b/ReactYoga.xcodeproj/project.pbxproj index 090c6e09..3a62e5d8 100644 --- a/ReactYoga.xcodeproj/project.pbxproj +++ b/ReactYoga.xcodeproj/project.pbxproj @@ -948,14 +948,6 @@ 657734931EE8356100A0E9EA /* RCTInspector.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6577348B1EE8354A00A0E9EA /* RCTInspector.mm */; }; 657734941EE8356100A0E9EA /* RCTInspectorPackagerConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 6577348C1EE8354A00A0E9EA /* RCTInspectorPackagerConnection.h */; }; 657734951EE8356100A0E9EA /* RCTInspectorPackagerConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 6577348D1EE8354A00A0E9EA /* RCTInspectorPackagerConnection.m */; }; - 66CD94B11F1045E700CB3C7C /* RCTMaskedView.h in Headers */ = {isa = PBXBuildFile; fileRef = 66CD94AD1F1045E700CB3C7C /* RCTMaskedView.h */; }; - 66CD94B21F1045E700CB3C7C /* RCTMaskedView.h in Headers */ = {isa = PBXBuildFile; fileRef = 66CD94AD1F1045E700CB3C7C /* RCTMaskedView.h */; }; - 66CD94B31F1045E700CB3C7C /* RCTMaskedView.m in Sources */ = {isa = PBXBuildFile; fileRef = 66CD94AE1F1045E700CB3C7C /* RCTMaskedView.m */; }; - 66CD94B41F1045E700CB3C7C /* RCTMaskedView.m in Sources */ = {isa = PBXBuildFile; fileRef = 66CD94AE1F1045E700CB3C7C /* RCTMaskedView.m */; }; - 66CD94B51F1045E700CB3C7C /* RCTMaskedViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 66CD94AF1F1045E700CB3C7C /* RCTMaskedViewManager.h */; }; - 66CD94B61F1045E700CB3C7C /* RCTMaskedViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 66CD94AF1F1045E700CB3C7C /* RCTMaskedViewManager.h */; }; - 66CD94B71F1045E700CB3C7C /* RCTMaskedViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 66CD94B01F1045E700CB3C7C /* RCTMaskedViewManager.m */; }; - 66CD94B81F1045E700CB3C7C /* RCTMaskedViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 66CD94B01F1045E700CB3C7C /* RCTMaskedViewManager.m */; }; 68EFE4EE1CF6EB3900A1DE13 /* RCTBundleURLProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 68EFE4ED1CF6EB3900A1DE13 /* RCTBundleURLProvider.m */; }; 6D4C7F86224946B900CBB1EC /* libYogaDev.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D4C7F85224946B900CBB1EC /* libYogaDev.a */; }; 6D4C7FB02249479200CBB1EC /* libYogaDev.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D4C7FAF2249479200CBB1EC /* libYogaDev.a */; }; @@ -2000,10 +1992,6 @@ 6577348B1EE8354A00A0E9EA /* RCTInspector.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = RCTInspector.mm; path = Inspector/RCTInspector.mm; sourceTree = ""; }; 6577348C1EE8354A00A0E9EA /* RCTInspectorPackagerConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RCTInspectorPackagerConnection.h; path = Inspector/RCTInspectorPackagerConnection.h; sourceTree = ""; }; 6577348D1EE8354A00A0E9EA /* RCTInspectorPackagerConnection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RCTInspectorPackagerConnection.m; path = Inspector/RCTInspectorPackagerConnection.m; sourceTree = ""; }; - 66CD94AD1F1045E700CB3C7C /* RCTMaskedView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTMaskedView.h; sourceTree = ""; }; - 66CD94AE1F1045E700CB3C7C /* RCTMaskedView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTMaskedView.m; sourceTree = ""; }; - 66CD94AF1F1045E700CB3C7C /* RCTMaskedViewManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTMaskedViewManager.h; sourceTree = ""; }; - 66CD94B01F1045E700CB3C7C /* RCTMaskedViewManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTMaskedViewManager.m; sourceTree = ""; }; 68EFE4EC1CF6EB3000A1DE13 /* RCTBundleURLProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTBundleURLProvider.h; sourceTree = ""; }; 68EFE4ED1CF6EB3900A1DE13 /* RCTBundleURLProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTBundleURLProvider.m; sourceTree = ""; }; 6A15FB0C1BDF663500531DFB /* RCTRootViewInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTRootViewInternal.h; sourceTree = ""; }; @@ -2381,10 +2369,6 @@ 3D37B5811D522B190042D5B5 /* RCTFont.mm */, 591F78D9202ADB22004A668C /* RCTLayout.h */, 591F78D8202ADB21004A668C /* RCTLayout.m */, - 66CD94AD1F1045E700CB3C7C /* RCTMaskedView.h */, - 66CD94AE1F1045E700CB3C7C /* RCTMaskedView.m */, - 66CD94AF1F1045E700CB3C7C /* RCTMaskedViewManager.h */, - 66CD94B01F1045E700CB3C7C /* RCTMaskedViewManager.m */, 83A1FE8A1B62640A00BE0E65 /* RCTModalHostView.h */, 83A1FE8B1B62640A00BE0E65 /* RCTModalHostView.m */, 83392EB11B6634E10013B15F /* RCTModalHostViewController.h */, @@ -2912,7 +2896,6 @@ 13134C951E296B2A00B9F3CB /* RCTObjcExecutor.h in Headers */, 590D7BFE1EBD458B00D8A370 /* RCTShadowView+Layout.h in Headers */, 13134C9D1E296B2A00B9F3CB /* RCTCxxModule.h in Headers */, - 66CD94B61F1045E700CB3C7C /* RCTMaskedViewManager.h in Headers */, 130443A31E3FEAAE00D93A67 /* RCTFollyConvert.h in Headers */, 3D7BFD1E1EA8E351008DFB7A /* RCTPackagerConnection.h in Headers */, 3D302F241DF828F800D6DDAE /* RCTImageLoader.h in Headers */, @@ -3039,7 +3022,6 @@ CF2731C21E7B8DEF0044CA4F /* RCTDeviceInfo.h in Headers */, 599FAA371FB274980058CCF6 /* RCTSurface.h in Headers */, 3D302F8C1DF828F800D6DDAE /* RCTSegmentedControl.h in Headers */, - 66CD94B21F1045E700CB3C7C /* RCTMaskedView.h in Headers */, 3D302F8D1DF828F800D6DDAE /* RCTSegmentedControlManager.h in Headers */, 3D302F8E1DF828F800D6DDAE /* RCTShadowView.h in Headers */, 59E604A11FE9CCE300BD90C5 /* RCTScrollContentShadowView.h in Headers */, @@ -3253,7 +3235,6 @@ 3DA9819E1E5B0DBB004F2374 /* NSDataBigString.h in Headers */, 59D031F11F8353D3008361F0 /* RCTSafeAreaView.h in Headers */, 3D80DA671DF820620028D040 /* RCTConvert+CoreLocation.h in Headers */, - 66CD94B11F1045E700CB3C7C /* RCTMaskedView.h in Headers */, 3D80DA6B1DF820620028D040 /* RCTFont.h in Headers */, 3D80DA701DF820620028D040 /* RCTModalHostView.h in Headers */, 3D80DA711DF820620028D040 /* RCTModalHostViewController.h in Headers */, @@ -3280,7 +3261,6 @@ 3D80DA851DF820620028D040 /* RCTSliderManager.h in Headers */, 3D80DA861DF820620028D040 /* RCTSwitch.h in Headers */, 3D80DA871DF820620028D040 /* RCTSwitchManager.h in Headers */, - 66CD94B51F1045E700CB3C7C /* RCTMaskedViewManager.h in Headers */, 3D80DA8C1DF820620028D040 /* RCTTextDecorationLineType.h in Headers */, 6577348E1EE8354A00A0E9EA /* RCTInspector.h in Headers */, 3D80DA8D1DF820620028D040 /* RCTView.h in Headers */, @@ -3901,7 +3881,6 @@ 2D0EB9F32021067800CAF88A /* RCTUIUtils.m in Sources */, 2DD0EFE11DA84F2800B0C975 /* RCTStatusBarManager.m in Sources */, 2D3B5EC91D9B095C00451313 /* RCTBorderDrawing.m in Sources */, - 66CD94B81F1045E700CB3C7C /* RCTMaskedViewManager.m in Sources */, 2D3B5E991D9B089A00451313 /* RCTDisplayLink.m in Sources */, 2D3B5EA11D9B08B600451313 /* RCTModuleData.mm in Sources */, 3DCE52F41FEAB10D00613583 /* RCTRedBoxExtraDataViewController.m in Sources */, @@ -3997,7 +3976,6 @@ 2D3B5EC31D9B094800451313 /* RCTProfileTrampoline-arm.S in Sources */, 3D0B842B1EC0B49400B2BD8E /* RCTTVRemoteHandler.m in Sources */, 657734861EE834D900A0E9EA /* RCTInspectorDevServerHelper.mm in Sources */, - 66CD94B41F1045E700CB3C7C /* RCTMaskedView.m in Sources */, 2D74EAFA1DAE9590003B751B /* RCTMultipartDataTask.m in Sources */, 2D3B5EC51D9B094D00451313 /* RCTProfileTrampoline-i386.S in Sources */, 657734951EE8356100A0E9EA /* RCTInspectorPackagerConnection.m in Sources */, @@ -4114,7 +4092,6 @@ 13B07FEF1A69327A00A75B9A /* RCTAlertManager.m in Sources */, 599FAA4C1FB274980058CCF6 /* RCTSurfaceView.mm in Sources */, 352DCFF01D19F4C20056D623 /* RCTI18nUtil.m in Sources */, - 66CD94B71F1045E700CB3C7C /* RCTMaskedViewManager.m in Sources */, 008341F61D1DB34400876D9A /* RCTJSStackFrame.m in Sources */, 13134C961E296B2A00B9F3CB /* RCTObjcExecutor.mm in Sources */, 59D031FB1F8353D3008361F0 /* RCTSafeAreaViewManager.m in Sources */, @@ -4210,7 +4187,6 @@ 50E98FEC21460B0D00CD9289 /* RCTWKWebView.m in Sources */, 590D7BFF1EBD458B00D8A370 /* RCTShadowView+Layout.m in Sources */, 5335D5411FE81A4700883D58 /* RCTShadowView.m in Sources */, - 66CD94B31F1045E700CB3C7C /* RCTMaskedView.m in Sources */, 13C156061AB1A2840079392D /* RCTWebViewManager.m in Sources */, 58114A161AAE854800E7D092 /* RCTPicker.m in Sources */, 83A1FE8C1B62640A00BE0E65 /* RCTModalHostView.m in Sources */, From fbf7a6feb53c6d2e3abae4bdb54b2390c229f2cf Mon Sep 17 00:00:00 2001 From: Harold Pratt <38818465+htpiv@users.noreply.github.com> Date: Mon, 25 Jul 2022 15:35:25 -0700 Subject: [PATCH 328/347] Rewrite CompactValue to avoid undefined behavior from the use of a union for type-punning (#1154) Summary: C++ does not, pedantically, allow the use of unions for type-punning in the way that C does. Most compilers, in practice, do support it; however, recent versions of MSVC appear to have a bug that cause bad code to be generated due to this U.B. (see: https://developercommunity.visualstudio.com/t/Bad-code-generated-for-std::isnan-compil/10082631). This led to a series of issues in the react-native-windows project, see: * https://github.com/microsoft/react-native-windows/issues/4122 * https://github.com/microsoft/react-native-windows/issues/8675 In C++20, the `` header and `bit_cast` function provide a pleasant API for type-punning. Since C++20 is not universally available, if the feature-test macro for `bit_cast` is not defined, memcpy is used instead. Pull Request resolved: https://github.com/facebook/yoga/pull/1154 Reviewed By: Andrey-Mishanin Differential Revision: D38082048 Pulled By: rozele fbshipit-source-id: a5da08cfb7d4296c725fb44871c55dbb12dc71e5 --- yoga/CompactValue.h | 78 ++++++++++++++++++++++++++++----------------- 1 file changed, 49 insertions(+), 29 deletions(-) diff --git a/yoga/CompactValue.h b/yoga/CompactValue.h index 1f03cf72..6568c48a 100644 --- a/yoga/CompactValue.h +++ b/yoga/CompactValue.h @@ -9,6 +9,11 @@ #ifdef __cplusplus +#ifdef __cpp_lib_bit_cast +#include +#else +#include +#endif #include "YGValue.h" #include "YGMacros.h" #include @@ -55,7 +60,7 @@ public: if (value == 0.0f || (value < LOWER_BOUND && value > -LOWER_BOUND)) { constexpr auto zero = Unit == YGUnitPercent ? ZERO_BITS_PERCENT : ZERO_BITS_POINT; - return {Payload{zero}}; + return {zero}; } constexpr auto upperBound = @@ -65,9 +70,9 @@ public: } uint32_t unitBit = Unit == YGUnitPercent ? PERCENT_BIT : 0; - auto data = Payload{value}; - data.repr -= BIAS; - data.repr |= unitBit; + auto data = asU32(value); + data -= BIAS; + data |= unitBit; return {data}; } @@ -78,7 +83,7 @@ public: } static constexpr CompactValue ofZero() noexcept { - return CompactValue{Payload{ZERO_BITS_POINT}}; + return CompactValue{ZERO_BITS_POINT}; } static constexpr CompactValue ofUndefined() noexcept { @@ -86,13 +91,12 @@ public: } static constexpr CompactValue ofAuto() noexcept { - return CompactValue{Payload{AUTO_BITS}}; + return CompactValue{AUTO_BITS}; } - constexpr CompactValue() noexcept - : payload_(std::numeric_limits::quiet_NaN()) {} + constexpr CompactValue() noexcept : repr_(0x7FC00000) {} - CompactValue(const YGValue& x) noexcept : payload_(uint32_t{0}) { + CompactValue(const YGValue& x) noexcept : repr_(uint32_t{0}) { switch (x.unit) { case YGUnitUndefined: *this = ofUndefined(); @@ -110,7 +114,7 @@ public: } operator YGValue() const noexcept { - switch (payload_.repr) { + switch (repr_) { case AUTO_BITS: return YGValueAuto; case ZERO_BITS_POINT: @@ -119,34 +123,28 @@ public: return YGValue{0.0f, YGUnitPercent}; } - if (std::isnan(payload_.value)) { + if (std::isnan(asFloat(repr_))) { return YGValueUndefined; } - auto data = payload_; - data.repr &= ~PERCENT_BIT; - data.repr += BIAS; + auto data = repr_; + data &= ~PERCENT_BIT; + data += BIAS; return YGValue{ - data.value, payload_.repr & 0x40000000 ? YGUnitPercent : YGUnitPoint}; + asFloat(data), repr_ & 0x40000000 ? YGUnitPercent : YGUnitPoint}; } bool isUndefined() const noexcept { return ( - payload_.repr != AUTO_BITS && payload_.repr != ZERO_BITS_POINT && - payload_.repr != ZERO_BITS_PERCENT && std::isnan(payload_.value)); + repr_ != AUTO_BITS && repr_ != ZERO_BITS_POINT && + repr_ != ZERO_BITS_PERCENT && std::isnan(asFloat(repr_))); } - bool isAuto() const noexcept { return payload_.repr == AUTO_BITS; } + bool isAuto() const noexcept { return repr_ == AUTO_BITS; } private: - union Payload { - float value; - uint32_t repr; - Payload() = delete; - constexpr Payload(uint32_t r) : repr(r) {} - constexpr Payload(float v) : value(v) {} - }; + uint32_t repr_; static constexpr uint32_t BIAS = 0x20000000; static constexpr uint32_t PERCENT_BIT = 0x40000000; @@ -157,11 +155,33 @@ private: static constexpr uint32_t ZERO_BITS_POINT = 0x7f8f0f0f; static constexpr uint32_t ZERO_BITS_PERCENT = 0x7f80f0f0; - constexpr CompactValue(Payload data) noexcept : payload_(data) {} + constexpr CompactValue(uint32_t data) noexcept : repr_(data) {} - Payload payload_; + VISIBLE_FOR_TESTING uint32_t repr() { return repr_; } - VISIBLE_FOR_TESTING uint32_t repr() { return payload_.repr; } + static uint32_t asU32(float f) { +#ifdef __cpp_lib_bit_cast + return std::bit_cast(f); +#else + uint32_t u; + static_assert( + sizeof(u) == sizeof(f), "uint32_t and float must have the same size"); + std::memcpy(&u, &f, sizeof(f)); + return u; +#endif + } + + static float asFloat(uint32_t u) { +#ifdef __cpp_lib_bit_cast + return std::bit_cast(u); +#else + float f; + static_assert( + sizeof(f) == sizeof(u), "uint32_t and float must have the same size"); + std::memcpy(&f, &u, sizeof(u)); + return f; +#endif + } }; template <> @@ -174,7 +194,7 @@ template <> CompactValue CompactValue::ofMaybe(float) noexcept = delete; constexpr bool operator==(CompactValue a, CompactValue b) noexcept { - return a.payload_.repr == b.payload_.repr; + return a.repr_ == b.repr_; } constexpr bool operator!=(CompactValue a, CompactValue b) noexcept { From 97c8bbde1201bfef286b5212d6bd41bfaec8a279 Mon Sep 17 00:00:00 2001 From: Evan Charlton Date: Tue, 30 Aug 2022 18:49:10 -0700 Subject: [PATCH 329/347] fix: Correctly resolve classes with FindClass(..) (#34533) Summary: `JNIEnv`'s `FindClass(..)` function takes the classes in the standard `foo/bar/Baz` class specification (unless they're special, like arrays). Specifying them with `Lfoo/bar/Baz;` results in a `ClassNotFoundException` being raised -- which is especially unhelpful when intending to re-throw an exception. The docs for `JNIEnv#FindClass(..)` can be found [here][jnienv]. [jnienv]: https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html#:~:text=The%20name%20argument,java/lang/String%22 ## Changelog [Android] [Fixed] - Correctly resolve classes with FindClass(..) X-link: https://github.com/facebook/react-native/pull/34533 Reviewed By: amir-shalem Differential Revision: D39133326 Pulled By: jacdebug fbshipit-source-id: 86283b7d21aed49ed0e9027b2aef85f0108cdf9a --- java/jni/YGJNIVanilla.cpp | 4 ++-- java/jni/YogaJniException.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp index 6b6fb7f4..8963814a 100644 --- a/java/jni/YGJNIVanilla.cpp +++ b/java/jni/YGJNIVanilla.cpp @@ -147,7 +147,7 @@ static int YGJNILogFunc( if (*jloggerPtr) { JNIEnv* env = getCurrentEnv(); - jclass cl = env->FindClass("Lcom/facebook/yoga/YogaLogLevel;"); + jclass cl = env->FindClass("com/facebook/yoga/YogaLogLevel"); static const jmethodID smethodId = facebook::yoga::vanillajni::getStaticMethodId( env, cl, "fromInt", "(I)Lcom/facebook/yoga/YogaLogLevel;"); @@ -386,7 +386,7 @@ static void jni_YGNodeCalculateLayoutJNI( } } catch (const std::logic_error& ex) { env->ExceptionClear(); - jclass cl = env->FindClass("Ljava/lang/IllegalStateException;"); + jclass cl = env->FindClass("java/lang/IllegalStateException"); static const jmethodID methodId = facebook::yoga::vanillajni::getMethodId( env, cl, "", "(Ljava/lang/String;)V"); auto throwable = env->NewObject(cl, methodId, env->NewStringUTF(ex.what())); diff --git a/java/jni/YogaJniException.cpp b/java/jni/YogaJniException.cpp index edc20986..81bdf28f 100644 --- a/java/jni/YogaJniException.cpp +++ b/java/jni/YogaJniException.cpp @@ -15,7 +15,7 @@ namespace yoga { namespace vanillajni { YogaJniException::YogaJniException() { - jclass cl = getCurrentEnv()->FindClass("Ljava/lang/RuntimeException;"); + jclass cl = getCurrentEnv()->FindClass("java/lang/RuntimeException"); static const jmethodID methodId = facebook::yoga::vanillajni::getMethodId( getCurrentEnv(), cl, "", "()V"); auto throwable = getCurrentEnv()->NewObject(cl, methodId); From 7d37b2e84b32cc7b42f93ee9616b2fa4aa08e712 Mon Sep 17 00:00:00 2001 From: Shiping Yi Date: Fri, 23 Sep 2022 17:27:50 -0700 Subject: [PATCH 330/347] Merge TestTranscoder and TestUploader Activity into TargetedTesting Activity Summary: move testTranscoder and TestUploader functions to TargetedTesting so that they can run batch testing for those as well, add listener for upload media composition Differential Revision: D39299097 fbshipit-source-id: ed40a876875fdc6a0d1db8f283082da8d8dc20f7 --- java/gen/com/facebook/yoga/BuildConfig.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 java/gen/com/facebook/yoga/BuildConfig.java diff --git a/java/gen/com/facebook/yoga/BuildConfig.java b/java/gen/com/facebook/yoga/BuildConfig.java new file mode 100644 index 00000000..d0da9a7b --- /dev/null +++ b/java/gen/com/facebook/yoga/BuildConfig.java @@ -0,0 +1,8 @@ +/*___Generated_by_IDEA___*/ + +package com.facebook.yoga; + +/* This stub is only used by the IDE. It is NOT the BuildConfig class actually packed into the APK */ +public final class BuildConfig { + public final static boolean DEBUG = Boolean.parseBoolean(null); +} \ No newline at end of file From fd180de774824b9b639ddb7fb43d87e983a7c248 Mon Sep 17 00:00:00 2001 From: Nick Gerleman Date: Thu, 29 Sep 2022 22:25:24 -0700 Subject: [PATCH 331/347] Fix Generation of Tests from Fixtures Summary: https://github.com/facebook/yoga/pull/1116 added a change to the test generator "gentests.rb" to support a newer version of chromedriver, along with a change to the enum generator (not touched in this diff) to produce code consistent with the current tests, which seem to have been manually edited since last generation. I had trouble running the test generator locally, because it relies on unversioned third-party dependencies, whose APIs change. Looking at source history, it seems like each time someone wants to run the script, they end up updating its syntax to match whatever versions they pull in. This change adds a Gemfile and lock so that that the version of "watir" is locked, and so that we will also automatically pull in a consistent "chomedriver" version via the "webdrivers" gem. It includes the updates from the PR to be consistent with already output tests, and I have also updated the copyright header generation to no longer create lint warnings on newly generated tests (some of the previous ones were fixed manually it looks like). The test generator would still produce bodies which would fail clang-format, and were manually edited (causing generation to emit new lint warnings), so I updated the generator to suppress clang-format in the body of the generated files. Three tests, around the interaction of minimum dimensions and flexible children produce different results in Chrome now compared to when the tests were added, so running `gentests.rb` creates tests which break UTs. This doesn't seem like any sort of rounding, or device specific difference, so I have disabled these tests for now. While digging around, it does look like Chrome periodically will fix bugs in its own layout implementation which cause differences, like https://bugs.chromium.org/p/chromium/issues/detail?id=927066 Reviewed By: rozele, Andrey-Mishanin Differential Revision: D39907416 fbshipit-source-id: f88714ff038b42f935901783452df25eabb6ebb1 --- README.md | 2 +- .../Facebook.Yoga/YGAbsolutePositionTest.cs | 9 +- .../tests/Facebook.Yoga/YGAlignContentTest.cs | 9 +- .../tests/Facebook.Yoga/YGAlignItemsTest.cs | 9 +- csharp/tests/Facebook.Yoga/YGAlignSelfTest.cs | 9 +- .../tests/Facebook.Yoga/YGAndroidNewsFeed.cs | 9 +- csharp/tests/Facebook.Yoga/YGBorderTest.cs | 9 +- csharp/tests/Facebook.Yoga/YGDimensionTest.cs | 9 +- csharp/tests/Facebook.Yoga/YGDisplayTest.cs | 2 +- .../Facebook.Yoga/YGFlexDirectionTest.cs | 9 +- csharp/tests/Facebook.Yoga/YGFlexTest.cs | 9 +- csharp/tests/Facebook.Yoga/YGFlexWrapTest.cs | 9 +- .../Facebook.Yoga/YGJustifyContentTest.cs | 9 +- csharp/tests/Facebook.Yoga/YGMarginTest.cs | 9 +- .../Facebook.Yoga/YGMinMaxDimensionTest.cs | 118 +---- csharp/tests/Facebook.Yoga/YGPaddingTest.cs | 9 +- .../tests/Facebook.Yoga/YGPercentageTest.cs | 64 +-- csharp/tests/Facebook.Yoga/YGRoundingTest.cs | 9 +- .../tests/Facebook.Yoga/YGSizeOverflowTest.cs | 9 +- gentest/Gemfile | 4 + gentest/Gemfile.lock | 35 ++ gentest/fixtures/YGMinMaxDimensionTest.html | 6 + gentest/fixtures/YGPercentageTest.html | 4 + gentest/gentest.js | 13 +- gentest/gentest.rb | 14 +- .../facebook/yoga/YGAbsolutePositionTest.java | 9 +- .../com/facebook/yoga/YGAlignContentTest.java | 9 +- .../com/facebook/yoga/YGAlignItemsTest.java | 9 +- .../com/facebook/yoga/YGAlignSelfTest.java | 9 +- .../com/facebook/yoga/YGAndroidNewsFeed.java | 9 +- .../tests/com/facebook/yoga/YGBorderTest.java | 9 +- .../com/facebook/yoga/YGDimensionTest.java | 9 +- .../com/facebook/yoga/YGDisplayTest.java | 2 +- .../facebook/yoga/YGFlexDirectionTest.java | 9 +- java/tests/com/facebook/yoga/YGFlexTest.java | 9 +- .../com/facebook/yoga/YGFlexWrapTest.java | 9 +- .../facebook/yoga/YGJustifyContentTest.java | 9 +- .../tests/com/facebook/yoga/YGMarginTest.java | 9 +- .../facebook/yoga/YGMinMaxDimensionTest.java | 116 +---- .../com/facebook/yoga/YGPaddingTest.java | 9 +- .../com/facebook/yoga/YGPercentageTest.java | 63 +-- .../com/facebook/yoga/YGRoundingTest.java | 9 +- .../com/facebook/yoga/YGSizeOverflowTest.java | 9 +- .../Facebook.Yoga/YGAbsolutePositionTest.js | 7 +- .../tests/Facebook.Yoga/YGAlignContentTest.js | 7 +- .../tests/Facebook.Yoga/YGAlignItemsTest.js | 7 +- .../tests/Facebook.Yoga/YGAlignSelfTest.js | 7 +- .../tests/Facebook.Yoga/YGAndroidNewsFeed.js | 7 +- .../tests/Facebook.Yoga/YGBorderTest.js | 7 +- .../tests/Facebook.Yoga/YGDimensionTest.js | 7 +- .../tests/Facebook.Yoga/YGDisplayTest.js | 2 +- .../Facebook.Yoga/YGFlexDirectionTest.js | 7 +- javascript/tests/Facebook.Yoga/YGFlexTest.js | 7 +- .../tests/Facebook.Yoga/YGFlexWrapTest.js | 7 +- .../Facebook.Yoga/YGJustifyContentTest.js | 7 +- .../tests/Facebook.Yoga/YGMarginTest.js | 7 +- .../Facebook.Yoga/YGMinMaxDimensionTest.js | 122 +---- .../tests/Facebook.Yoga/YGPaddingTest.js | 7 +- .../tests/Facebook.Yoga/YGPercentageTest.js | 65 +-- .../tests/Facebook.Yoga/YGRoundingTest.js | 7 +- .../tests/Facebook.Yoga/YGSizeOverflowTest.js | 7 +- tests/YGAbsolutePositionTest.cpp | 31 +- tests/YGAlignContentTest.cpp | 11 +- tests/YGAlignItemsTest.cpp | 8 +- tests/YGAlignSelfTest.cpp | 8 +- tests/YGAndroidNewsFeed.cpp | 418 ++++++------------ tests/YGBorderTest.cpp | 8 +- tests/YGDimensionTest.cpp | 8 +- tests/YGDisplayTest.cpp | 3 +- tests/YGFlexDirectionTest.cpp | 11 +- tests/YGFlexTest.cpp | 126 +----- tests/YGFlexWrapTest.cpp | 8 +- tests/YGJustifyContentTest.cpp | 19 +- tests/YGMarginTest.cpp | 8 +- tests/YGMinMaxDimensionTest.cpp | 199 +-------- tests/YGPaddingTest.cpp | 8 +- tests/YGPercentageTest.cpp | 145 +----- tests/YGRoundingTest.cpp | 8 +- tests/YGSizeOverflowTest.cpp | 11 +- website/contents/contributing/testing.md | 10 +- 80 files changed, 540 insertions(+), 1515 deletions(-) create mode 100644 gentest/Gemfile create mode 100644 gentest/Gemfile.lock diff --git a/README.md b/README.md index 23c26c3b..e8d41231 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Instead of manually writing a test which ensures parity with web implementations Run `gentest/gentest.rb` to generate test code and re-run `buck test //:yoga` to validate the behavior. One test case will be generated for every root `div` in the input html. -You may need to install the latest watir-webdriver gem (`gem install watir-webdriver`) and [ChromeDriver](https://sites.google.com/a/chromium.org/chromedriver/) to run `gentest/gentest.rb` Ruby script. +You should run `bundle install` in the `gentest` directory to install dependencies for the `gentest/gentest.rb` Ruby script. ### .NET .NET testing is not integrated in buck yet, you might need to set up .NET testing environment. We have a script which to launch C# test on macOS, `csharp/tests/Facebook.Yoga/test_macos.sh`. diff --git a/csharp/tests/Facebook.Yoga/YGAbsolutePositionTest.cs b/csharp/tests/Facebook.Yoga/YGAbsolutePositionTest.cs index bf5da18e..9b83ca9e 100644 --- a/csharp/tests/Facebook.Yoga/YGAbsolutePositionTest.cs +++ b/csharp/tests/Facebook.Yoga/YGAbsolutePositionTest.cs @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGAbsolutePositionTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGAlignContentTest.cs b/csharp/tests/Facebook.Yoga/YGAlignContentTest.cs index dda26398..383ac3f4 100644 --- a/csharp/tests/Facebook.Yoga/YGAlignContentTest.cs +++ b/csharp/tests/Facebook.Yoga/YGAlignContentTest.cs @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignContentTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGAlignItemsTest.cs b/csharp/tests/Facebook.Yoga/YGAlignItemsTest.cs index 3042b36b..ea1732dd 100644 --- a/csharp/tests/Facebook.Yoga/YGAlignItemsTest.cs +++ b/csharp/tests/Facebook.Yoga/YGAlignItemsTest.cs @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignItemsTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGAlignSelfTest.cs b/csharp/tests/Facebook.Yoga/YGAlignSelfTest.cs index 0826fab6..88095a39 100644 --- a/csharp/tests/Facebook.Yoga/YGAlignSelfTest.cs +++ b/csharp/tests/Facebook.Yoga/YGAlignSelfTest.cs @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignSelfTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGAndroidNewsFeed.cs b/csharp/tests/Facebook.Yoga/YGAndroidNewsFeed.cs index a55ca044..b3d97bf1 100644 --- a/csharp/tests/Facebook.Yoga/YGAndroidNewsFeed.cs +++ b/csharp/tests/Facebook.Yoga/YGAndroidNewsFeed.cs @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGAndroidNewsFeed.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGBorderTest.cs b/csharp/tests/Facebook.Yoga/YGBorderTest.cs index 2c091537..170ce686 100644 --- a/csharp/tests/Facebook.Yoga/YGBorderTest.cs +++ b/csharp/tests/Facebook.Yoga/YGBorderTest.cs @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGBorderTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGDimensionTest.cs b/csharp/tests/Facebook.Yoga/YGDimensionTest.cs index 214cc712..bfc7df0d 100644 --- a/csharp/tests/Facebook.Yoga/YGDimensionTest.cs +++ b/csharp/tests/Facebook.Yoga/YGDimensionTest.cs @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGDimensionTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGDisplayTest.cs b/csharp/tests/Facebook.Yoga/YGDisplayTest.cs index 659cb37f..422d53e3 100644 --- a/csharp/tests/Facebook.Yoga/YGDisplayTest.cs +++ b/csharp/tests/Facebook.Yoga/YGDisplayTest.cs @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/csharp/tests/Facebook.Yoga/YGFlexDirectionTest.cs b/csharp/tests/Facebook.Yoga/YGFlexDirectionTest.cs index cf9b310a..125beba0 100644 --- a/csharp/tests/Facebook.Yoga/YGFlexDirectionTest.cs +++ b/csharp/tests/Facebook.Yoga/YGFlexDirectionTest.cs @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexDirectionTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGFlexTest.cs b/csharp/tests/Facebook.Yoga/YGFlexTest.cs index 5fc5410e..77819a8d 100644 --- a/csharp/tests/Facebook.Yoga/YGFlexTest.cs +++ b/csharp/tests/Facebook.Yoga/YGFlexTest.cs @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGFlexWrapTest.cs b/csharp/tests/Facebook.Yoga/YGFlexWrapTest.cs index 5e3189d6..9fd72627 100644 --- a/csharp/tests/Facebook.Yoga/YGFlexWrapTest.cs +++ b/csharp/tests/Facebook.Yoga/YGFlexWrapTest.cs @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexWrapTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGJustifyContentTest.cs b/csharp/tests/Facebook.Yoga/YGJustifyContentTest.cs index 6f6a48b5..a73e9d34 100644 --- a/csharp/tests/Facebook.Yoga/YGJustifyContentTest.cs +++ b/csharp/tests/Facebook.Yoga/YGJustifyContentTest.cs @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGJustifyContentTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGMarginTest.cs b/csharp/tests/Facebook.Yoga/YGMarginTest.cs index 9a62a0a3..dbf28bd7 100644 --- a/csharp/tests/Facebook.Yoga/YGMarginTest.cs +++ b/csharp/tests/Facebook.Yoga/YGMarginTest.cs @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGMarginTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGMinMaxDimensionTest.cs b/csharp/tests/Facebook.Yoga/YGMinMaxDimensionTest.cs index 0d9c78c2..044aa14e 100644 --- a/csharp/tests/Facebook.Yoga/YGMinMaxDimensionTest.cs +++ b/csharp/tests/Facebook.Yoga/YGMinMaxDimensionTest.cs @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGMinMaxDimensionTest.html using System; @@ -95,115 +96,6 @@ namespace Facebook.Yoga Assert.AreEqual(50f, root_child0.LayoutHeight); } - [Test] - public void Test_min_height() - { - YogaConfig config = new YogaConfig(); - - YogaNode root = new YogaNode(config); - root.Width = 100; - root.Height = 100; - - YogaNode root_child0 = new YogaNode(config); - root_child0.FlexGrow = 1; - root_child0.MinHeight = 60; - root.Insert(0, root_child0); - - YogaNode root_child1 = new YogaNode(config); - root_child1.FlexGrow = 1; - root.Insert(1, root_child1); - root.StyleDirection = YogaDirection.LTR; - root.CalculateLayout(); - - Assert.AreEqual(0f, root.LayoutX); - Assert.AreEqual(0f, root.LayoutY); - Assert.AreEqual(100f, root.LayoutWidth); - Assert.AreEqual(100f, root.LayoutHeight); - - Assert.AreEqual(0f, root_child0.LayoutX); - Assert.AreEqual(0f, root_child0.LayoutY); - Assert.AreEqual(100f, root_child0.LayoutWidth); - Assert.AreEqual(80f, root_child0.LayoutHeight); - - Assert.AreEqual(0f, root_child1.LayoutX); - Assert.AreEqual(80f, root_child1.LayoutY); - Assert.AreEqual(100f, root_child1.LayoutWidth); - Assert.AreEqual(20f, root_child1.LayoutHeight); - - root.StyleDirection = YogaDirection.RTL; - root.CalculateLayout(); - - Assert.AreEqual(0f, root.LayoutX); - Assert.AreEqual(0f, root.LayoutY); - Assert.AreEqual(100f, root.LayoutWidth); - Assert.AreEqual(100f, root.LayoutHeight); - - Assert.AreEqual(0f, root_child0.LayoutX); - Assert.AreEqual(0f, root_child0.LayoutY); - Assert.AreEqual(100f, root_child0.LayoutWidth); - Assert.AreEqual(80f, root_child0.LayoutHeight); - - Assert.AreEqual(0f, root_child1.LayoutX); - Assert.AreEqual(80f, root_child1.LayoutY); - Assert.AreEqual(100f, root_child1.LayoutWidth); - Assert.AreEqual(20f, root_child1.LayoutHeight); - } - - [Test] - public void Test_min_width() - { - YogaConfig config = new YogaConfig(); - - YogaNode root = new YogaNode(config); - root.FlexDirection = YogaFlexDirection.Row; - root.Width = 100; - root.Height = 100; - - YogaNode root_child0 = new YogaNode(config); - root_child0.FlexGrow = 1; - root_child0.MinWidth = 60; - root.Insert(0, root_child0); - - YogaNode root_child1 = new YogaNode(config); - root_child1.FlexGrow = 1; - root.Insert(1, root_child1); - root.StyleDirection = YogaDirection.LTR; - root.CalculateLayout(); - - Assert.AreEqual(0f, root.LayoutX); - Assert.AreEqual(0f, root.LayoutY); - Assert.AreEqual(100f, root.LayoutWidth); - Assert.AreEqual(100f, root.LayoutHeight); - - Assert.AreEqual(0f, root_child0.LayoutX); - Assert.AreEqual(0f, root_child0.LayoutY); - Assert.AreEqual(80f, root_child0.LayoutWidth); - Assert.AreEqual(100f, root_child0.LayoutHeight); - - Assert.AreEqual(80f, root_child1.LayoutX); - Assert.AreEqual(0f, root_child1.LayoutY); - Assert.AreEqual(20f, root_child1.LayoutWidth); - Assert.AreEqual(100f, root_child1.LayoutHeight); - - root.StyleDirection = YogaDirection.RTL; - root.CalculateLayout(); - - Assert.AreEqual(0f, root.LayoutX); - Assert.AreEqual(0f, root.LayoutY); - Assert.AreEqual(100f, root.LayoutWidth); - Assert.AreEqual(100f, root.LayoutHeight); - - Assert.AreEqual(20f, root_child0.LayoutX); - Assert.AreEqual(0f, root_child0.LayoutY); - Assert.AreEqual(80f, root_child0.LayoutWidth); - Assert.AreEqual(100f, root_child0.LayoutHeight); - - Assert.AreEqual(0f, root_child1.LayoutX); - Assert.AreEqual(0f, root_child1.LayoutY); - Assert.AreEqual(20f, root_child1.LayoutWidth); - Assert.AreEqual(100f, root_child1.LayoutHeight); - } - [Test] public void Test_justify_content_min_max() { diff --git a/csharp/tests/Facebook.Yoga/YGPaddingTest.cs b/csharp/tests/Facebook.Yoga/YGPaddingTest.cs index 9b6533cd..6a1cbfb7 100644 --- a/csharp/tests/Facebook.Yoga/YGPaddingTest.cs +++ b/csharp/tests/Facebook.Yoga/YGPaddingTest.cs @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGPaddingTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGPercentageTest.cs b/csharp/tests/Facebook.Yoga/YGPercentageTest.cs index 237186db..4a066902 100644 --- a/csharp/tests/Facebook.Yoga/YGPercentageTest.cs +++ b/csharp/tests/Facebook.Yoga/YGPercentageTest.cs @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGPercentageTest.html using System; @@ -252,61 +253,6 @@ namespace Facebook.Yoga Assert.AreEqual(75f, root_child1.LayoutHeight); } - [Test] - public void Test_percentage_flex_basis_cross_min_height() - { - YogaConfig config = new YogaConfig(); - - YogaNode root = new YogaNode(config); - root.Width = 200; - root.Height = 200; - - YogaNode root_child0 = new YogaNode(config); - root_child0.FlexGrow = 1; - root_child0.MinHeight = 60.Percent(); - root.Insert(0, root_child0); - - YogaNode root_child1 = new YogaNode(config); - root_child1.FlexGrow = 2; - root_child1.MinHeight = 10.Percent(); - root.Insert(1, root_child1); - root.StyleDirection = YogaDirection.LTR; - root.CalculateLayout(); - - Assert.AreEqual(0f, root.LayoutX); - Assert.AreEqual(0f, root.LayoutY); - Assert.AreEqual(200f, root.LayoutWidth); - Assert.AreEqual(200f, root.LayoutHeight); - - Assert.AreEqual(0f, root_child0.LayoutX); - Assert.AreEqual(0f, root_child0.LayoutY); - Assert.AreEqual(200f, root_child0.LayoutWidth); - Assert.AreEqual(140f, root_child0.LayoutHeight); - - Assert.AreEqual(0f, root_child1.LayoutX); - Assert.AreEqual(140f, root_child1.LayoutY); - Assert.AreEqual(200f, root_child1.LayoutWidth); - Assert.AreEqual(60f, root_child1.LayoutHeight); - - root.StyleDirection = YogaDirection.RTL; - root.CalculateLayout(); - - Assert.AreEqual(0f, root.LayoutX); - Assert.AreEqual(0f, root.LayoutY); - Assert.AreEqual(200f, root.LayoutWidth); - Assert.AreEqual(200f, root.LayoutHeight); - - Assert.AreEqual(0f, root_child0.LayoutX); - Assert.AreEqual(0f, root_child0.LayoutY); - Assert.AreEqual(200f, root_child0.LayoutWidth); - Assert.AreEqual(140f, root_child0.LayoutHeight); - - Assert.AreEqual(0f, root_child1.LayoutX); - Assert.AreEqual(140f, root_child1.LayoutY); - Assert.AreEqual(200f, root_child1.LayoutWidth); - Assert.AreEqual(60f, root_child1.LayoutHeight); - } - [Test] public void Test_percentage_flex_basis_main_max_height() { diff --git a/csharp/tests/Facebook.Yoga/YGRoundingTest.cs b/csharp/tests/Facebook.Yoga/YGRoundingTest.cs index 471d8ea4..cbf3d590 100644 --- a/csharp/tests/Facebook.Yoga/YGRoundingTest.cs +++ b/csharp/tests/Facebook.Yoga/YGRoundingTest.cs @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGRoundingTest.html using System; diff --git a/csharp/tests/Facebook.Yoga/YGSizeOverflowTest.cs b/csharp/tests/Facebook.Yoga/YGSizeOverflowTest.cs index 1f9fae01..dadeb8f1 100644 --- a/csharp/tests/Facebook.Yoga/YGSizeOverflowTest.cs +++ b/csharp/tests/Facebook.Yoga/YGSizeOverflowTest.cs @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGSizeOverflowTest.html using System; diff --git a/gentest/Gemfile b/gentest/Gemfile new file mode 100644 index 00000000..8b3b5ba2 --- /dev/null +++ b/gentest/Gemfile @@ -0,0 +1,4 @@ +source "https://rubygems.org" + +gem 'watir', '~>6.19.0' +gem 'webdrivers', '~> 5.1.0' diff --git a/gentest/Gemfile.lock b/gentest/Gemfile.lock new file mode 100644 index 00000000..a1f1f5c5 --- /dev/null +++ b/gentest/Gemfile.lock @@ -0,0 +1,35 @@ +GEM + remote: https://rubygems.org/ + specs: + childprocess (4.1.0) + mini_portile2 (2.8.0) + nokogiri (1.13.8) + mini_portile2 (~> 2.8.0) + racc (~> 1.4) + racc (1.6.0) + regexp_parser (2.6.0) + rexml (3.2.5) + rubyzip (2.3.2) + selenium-webdriver (4.5.0) + childprocess (>= 0.5, < 5.0) + rexml (~> 3.2, >= 3.2.5) + rubyzip (>= 1.2.2, < 3.0) + websocket (~> 1.0) + watir (6.19.1) + regexp_parser (>= 1.2, < 3) + selenium-webdriver (>= 3.142.7) + webdrivers (5.1.0) + nokogiri (~> 1.6) + rubyzip (>= 1.3.0) + selenium-webdriver (~> 4.0) + websocket (1.2.9) + +PLATFORMS + ruby + +DEPENDENCIES + watir (~> 6.19.0) + webdrivers (~> 5.1.0) + +BUNDLED WITH + 2.1.4 diff --git a/gentest/fixtures/YGMinMaxDimensionTest.html b/gentest/fixtures/YGMinMaxDimensionTest.html index 69e29b90..f083d908 100644 --- a/gentest/fixtures/YGMinMaxDimensionTest.html +++ b/gentest/fixtures/YGMinMaxDimensionTest.html @@ -6,15 +6,21 @@
+ + + +
diff --git a/gentest/fixtures/YGPercentageTest.html b/gentest/fixtures/YGPercentageTest.html index fa722198..98f36604 100644 --- a/gentest/fixtures/YGPercentageTest.html +++ b/gentest/fixtures/YGPercentageTest.html @@ -20,10 +20,14 @@
+ + +
diff --git a/gentest/gentest.js b/gentest/gentest.js index 12e76f33..b2fef03e 100755 --- a/gentest/gentest.js +++ b/gentest/gentest.js @@ -1,5 +1,5 @@ /** - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. @@ -10,24 +10,28 @@ window.onload = function() { printTest( new CPPEmitter(), + 'cpp', document.body.children[0], document.body.children[1], document.body.children[2]); printTest( new JavaEmitter(), + 'java', document.body.children[0], document.body.children[1], document.body.children[2]); printTest( new CSEmitter(), + 'cs', document.body.children[0], document.body.children[1], document.body.children[2]); printTest( new JavascriptEmitter(), + 'js', document.body.children[0], document.body.children[1], document.body.children[2]); @@ -39,14 +43,15 @@ function assert(condition, message) { } } -function printTest(e, LTRContainer, RTLContainer, genericContainer) { +function printTest(e, ext, LTRContainer, RTLContainer, genericContainer) { e.push([ - '/*', - ' * Copyright (c) Facebook, Inc. and its affiliates.', + ext === 'js' ? '/**' : '/*', + ' * Copyright (c) Meta Platforms, Inc. and affiliates.', ' *', ' * This source code is licensed under the MIT license found in the', ' * LICENSE file in the root directory of this source tree.', ' */', + ext === 'cpp' ? '\n// clang-format off' : '', '// @Generated by gentest/gentest.rb from gentest/fixtures/' + document.title + '.html', '', ]); diff --git a/gentest/gentest.rb b/gentest/gentest.rb index 01fec93e..54481ac3 100644 --- a/gentest/gentest.rb +++ b/gentest/gentest.rb @@ -1,20 +1,20 @@ #!/usr/bin/env ruby -# Copyright (c) Facebook, Inc. and its affiliates. +# Copyright (c) Meta Platforms, Inc. and affiliates. # # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. require 'watir' +require 'webdrivers' require 'fileutils' -browser = Watir::Browser.new(:chrome, "goog:loggingPrefs" => { +browser = Watir::Browser.new(:chrome, options: { + "goog:loggingPrefs" => { "browser" => "ALL", "performance" => "ALL" }, - "chromeOptions" => { - "w3c" => "false" - }, - :switches => ['--force-device-scale-factor=1', '--window-position=0,0']) + args: ['--force-device-scale-factor=1', '--window-position=0,0'] +}) Dir.chdir(File.dirname($0)) @@ -40,7 +40,7 @@ Dir['fixtures/*.html'].each do |file| FileUtils.copy('test.html', "#{name}.html") if $DEBUG browser.goto('file://' + Dir.pwd + '/test.html') - logs = browser.driver.manage.logs.get(:browser) + logs = browser.driver.logs.get(:browser) f = File.open("../tests/#{name}.cpp", 'w') f.write eval(logs[0].message.sub(/^[^"]*/, '')) diff --git a/java/tests/com/facebook/yoga/YGAbsolutePositionTest.java b/java/tests/com/facebook/yoga/YGAbsolutePositionTest.java index 7652c919..17e32546 100644 --- a/java/tests/com/facebook/yoga/YGAbsolutePositionTest.java +++ b/java/tests/com/facebook/yoga/YGAbsolutePositionTest.java @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGAbsolutePositionTest.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGAlignContentTest.java b/java/tests/com/facebook/yoga/YGAlignContentTest.java index 9403ec28..135145a8 100644 --- a/java/tests/com/facebook/yoga/YGAlignContentTest.java +++ b/java/tests/com/facebook/yoga/YGAlignContentTest.java @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignContentTest.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGAlignItemsTest.java b/java/tests/com/facebook/yoga/YGAlignItemsTest.java index 1db0a78f..e1e3e703 100644 --- a/java/tests/com/facebook/yoga/YGAlignItemsTest.java +++ b/java/tests/com/facebook/yoga/YGAlignItemsTest.java @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignItemsTest.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGAlignSelfTest.java b/java/tests/com/facebook/yoga/YGAlignSelfTest.java index a35f07a4..f3a76d99 100644 --- a/java/tests/com/facebook/yoga/YGAlignSelfTest.java +++ b/java/tests/com/facebook/yoga/YGAlignSelfTest.java @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignSelfTest.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGAndroidNewsFeed.java b/java/tests/com/facebook/yoga/YGAndroidNewsFeed.java index 1b4fde74..f7c0f52d 100644 --- a/java/tests/com/facebook/yoga/YGAndroidNewsFeed.java +++ b/java/tests/com/facebook/yoga/YGAndroidNewsFeed.java @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGAndroidNewsFeed.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGBorderTest.java b/java/tests/com/facebook/yoga/YGBorderTest.java index 5ecddc11..2f292f7c 100644 --- a/java/tests/com/facebook/yoga/YGBorderTest.java +++ b/java/tests/com/facebook/yoga/YGBorderTest.java @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGBorderTest.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGDimensionTest.java b/java/tests/com/facebook/yoga/YGDimensionTest.java index 3c9b9aa9..7a8659e5 100644 --- a/java/tests/com/facebook/yoga/YGDimensionTest.java +++ b/java/tests/com/facebook/yoga/YGDimensionTest.java @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGDimensionTest.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGDisplayTest.java b/java/tests/com/facebook/yoga/YGDisplayTest.java index 999548bd..511327f7 100644 --- a/java/tests/com/facebook/yoga/YGDisplayTest.java +++ b/java/tests/com/facebook/yoga/YGDisplayTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/java/tests/com/facebook/yoga/YGFlexDirectionTest.java b/java/tests/com/facebook/yoga/YGFlexDirectionTest.java index ee014a02..ae24e4ee 100644 --- a/java/tests/com/facebook/yoga/YGFlexDirectionTest.java +++ b/java/tests/com/facebook/yoga/YGFlexDirectionTest.java @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexDirectionTest.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGFlexTest.java b/java/tests/com/facebook/yoga/YGFlexTest.java index a85c5217..bdd68588 100644 --- a/java/tests/com/facebook/yoga/YGFlexTest.java +++ b/java/tests/com/facebook/yoga/YGFlexTest.java @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexTest.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGFlexWrapTest.java b/java/tests/com/facebook/yoga/YGFlexWrapTest.java index c853642d..8cbfdc3e 100644 --- a/java/tests/com/facebook/yoga/YGFlexWrapTest.java +++ b/java/tests/com/facebook/yoga/YGFlexWrapTest.java @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexWrapTest.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGJustifyContentTest.java b/java/tests/com/facebook/yoga/YGJustifyContentTest.java index 4a1d96b8..3b67e371 100644 --- a/java/tests/com/facebook/yoga/YGJustifyContentTest.java +++ b/java/tests/com/facebook/yoga/YGJustifyContentTest.java @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGJustifyContentTest.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGMarginTest.java b/java/tests/com/facebook/yoga/YGMarginTest.java index b922b084..6508042c 100644 --- a/java/tests/com/facebook/yoga/YGMarginTest.java +++ b/java/tests/com/facebook/yoga/YGMarginTest.java @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGMarginTest.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGMinMaxDimensionTest.java b/java/tests/com/facebook/yoga/YGMinMaxDimensionTest.java index 8280189c..850e1790 100644 --- a/java/tests/com/facebook/yoga/YGMinMaxDimensionTest.java +++ b/java/tests/com/facebook/yoga/YGMinMaxDimensionTest.java @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGMinMaxDimensionTest.html package com.facebook.yoga; @@ -102,113 +103,6 @@ public class YGMinMaxDimensionTest { assertEquals(50f, root_child0.getLayoutHeight(), 0.0f); } - @Test - public void test_min_height() { - YogaConfig config = YogaConfigFactory.create(); - - final YogaNode root = createNode(config); - root.setWidth(100f); - root.setHeight(100f); - - final YogaNode root_child0 = createNode(config); - root_child0.setFlexGrow(1f); - root_child0.setMinHeight(60f); - root.addChildAt(root_child0, 0); - - final YogaNode root_child1 = createNode(config); - root_child1.setFlexGrow(1f); - root.addChildAt(root_child1, 1); - root.setDirection(YogaDirection.LTR); - root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED); - - assertEquals(0f, root.getLayoutX(), 0.0f); - assertEquals(0f, root.getLayoutY(), 0.0f); - assertEquals(100f, root.getLayoutWidth(), 0.0f); - assertEquals(100f, root.getLayoutHeight(), 0.0f); - - assertEquals(0f, root_child0.getLayoutX(), 0.0f); - assertEquals(0f, root_child0.getLayoutY(), 0.0f); - assertEquals(100f, root_child0.getLayoutWidth(), 0.0f); - assertEquals(80f, root_child0.getLayoutHeight(), 0.0f); - - assertEquals(0f, root_child1.getLayoutX(), 0.0f); - assertEquals(80f, root_child1.getLayoutY(), 0.0f); - assertEquals(100f, root_child1.getLayoutWidth(), 0.0f); - assertEquals(20f, root_child1.getLayoutHeight(), 0.0f); - - root.setDirection(YogaDirection.RTL); - root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED); - - assertEquals(0f, root.getLayoutX(), 0.0f); - assertEquals(0f, root.getLayoutY(), 0.0f); - assertEquals(100f, root.getLayoutWidth(), 0.0f); - assertEquals(100f, root.getLayoutHeight(), 0.0f); - - assertEquals(0f, root_child0.getLayoutX(), 0.0f); - assertEquals(0f, root_child0.getLayoutY(), 0.0f); - assertEquals(100f, root_child0.getLayoutWidth(), 0.0f); - assertEquals(80f, root_child0.getLayoutHeight(), 0.0f); - - assertEquals(0f, root_child1.getLayoutX(), 0.0f); - assertEquals(80f, root_child1.getLayoutY(), 0.0f); - assertEquals(100f, root_child1.getLayoutWidth(), 0.0f); - assertEquals(20f, root_child1.getLayoutHeight(), 0.0f); - } - - @Test - public void test_min_width() { - YogaConfig config = YogaConfigFactory.create(); - - final YogaNode root = createNode(config); - root.setFlexDirection(YogaFlexDirection.ROW); - root.setWidth(100f); - root.setHeight(100f); - - final YogaNode root_child0 = createNode(config); - root_child0.setFlexGrow(1f); - root_child0.setMinWidth(60f); - root.addChildAt(root_child0, 0); - - final YogaNode root_child1 = createNode(config); - root_child1.setFlexGrow(1f); - root.addChildAt(root_child1, 1); - root.setDirection(YogaDirection.LTR); - root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED); - - assertEquals(0f, root.getLayoutX(), 0.0f); - assertEquals(0f, root.getLayoutY(), 0.0f); - assertEquals(100f, root.getLayoutWidth(), 0.0f); - assertEquals(100f, root.getLayoutHeight(), 0.0f); - - assertEquals(0f, root_child0.getLayoutX(), 0.0f); - assertEquals(0f, root_child0.getLayoutY(), 0.0f); - assertEquals(80f, root_child0.getLayoutWidth(), 0.0f); - assertEquals(100f, root_child0.getLayoutHeight(), 0.0f); - - assertEquals(80f, root_child1.getLayoutX(), 0.0f); - assertEquals(0f, root_child1.getLayoutY(), 0.0f); - assertEquals(20f, root_child1.getLayoutWidth(), 0.0f); - assertEquals(100f, root_child1.getLayoutHeight(), 0.0f); - - root.setDirection(YogaDirection.RTL); - root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED); - - assertEquals(0f, root.getLayoutX(), 0.0f); - assertEquals(0f, root.getLayoutY(), 0.0f); - assertEquals(100f, root.getLayoutWidth(), 0.0f); - assertEquals(100f, root.getLayoutHeight(), 0.0f); - - assertEquals(20f, root_child0.getLayoutX(), 0.0f); - assertEquals(0f, root_child0.getLayoutY(), 0.0f); - assertEquals(80f, root_child0.getLayoutWidth(), 0.0f); - assertEquals(100f, root_child0.getLayoutHeight(), 0.0f); - - assertEquals(0f, root_child1.getLayoutX(), 0.0f); - assertEquals(0f, root_child1.getLayoutY(), 0.0f); - assertEquals(20f, root_child1.getLayoutWidth(), 0.0f); - assertEquals(100f, root_child1.getLayoutHeight(), 0.0f); - } - @Test public void test_justify_content_min_max() { YogaConfig config = YogaConfigFactory.create(); diff --git a/java/tests/com/facebook/yoga/YGPaddingTest.java b/java/tests/com/facebook/yoga/YGPaddingTest.java index 978ab1c6..a1a09454 100644 --- a/java/tests/com/facebook/yoga/YGPaddingTest.java +++ b/java/tests/com/facebook/yoga/YGPaddingTest.java @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGPaddingTest.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGPercentageTest.java b/java/tests/com/facebook/yoga/YGPercentageTest.java index 33f793ae..77629585 100644 --- a/java/tests/com/facebook/yoga/YGPercentageTest.java +++ b/java/tests/com/facebook/yoga/YGPercentageTest.java @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGPercentageTest.html package com.facebook.yoga; @@ -256,60 +257,6 @@ public class YGPercentageTest { assertEquals(75f, root_child1.getLayoutHeight(), 0.0f); } - @Test - public void test_percentage_flex_basis_cross_min_height() { - YogaConfig config = YogaConfigFactory.create(); - - final YogaNode root = createNode(config); - root.setWidth(200f); - root.setHeight(200f); - - final YogaNode root_child0 = createNode(config); - root_child0.setFlexGrow(1f); - root_child0.setMinHeightPercent(60f); - root.addChildAt(root_child0, 0); - - final YogaNode root_child1 = createNode(config); - root_child1.setFlexGrow(2f); - root_child1.setMinHeightPercent(10f); - root.addChildAt(root_child1, 1); - root.setDirection(YogaDirection.LTR); - root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED); - - assertEquals(0f, root.getLayoutX(), 0.0f); - assertEquals(0f, root.getLayoutY(), 0.0f); - assertEquals(200f, root.getLayoutWidth(), 0.0f); - assertEquals(200f, root.getLayoutHeight(), 0.0f); - - assertEquals(0f, root_child0.getLayoutX(), 0.0f); - assertEquals(0f, root_child0.getLayoutY(), 0.0f); - assertEquals(200f, root_child0.getLayoutWidth(), 0.0f); - assertEquals(140f, root_child0.getLayoutHeight(), 0.0f); - - assertEquals(0f, root_child1.getLayoutX(), 0.0f); - assertEquals(140f, root_child1.getLayoutY(), 0.0f); - assertEquals(200f, root_child1.getLayoutWidth(), 0.0f); - assertEquals(60f, root_child1.getLayoutHeight(), 0.0f); - - root.setDirection(YogaDirection.RTL); - root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED); - - assertEquals(0f, root.getLayoutX(), 0.0f); - assertEquals(0f, root.getLayoutY(), 0.0f); - assertEquals(200f, root.getLayoutWidth(), 0.0f); - assertEquals(200f, root.getLayoutHeight(), 0.0f); - - assertEquals(0f, root_child0.getLayoutX(), 0.0f); - assertEquals(0f, root_child0.getLayoutY(), 0.0f); - assertEquals(200f, root_child0.getLayoutWidth(), 0.0f); - assertEquals(140f, root_child0.getLayoutHeight(), 0.0f); - - assertEquals(0f, root_child1.getLayoutX(), 0.0f); - assertEquals(140f, root_child1.getLayoutY(), 0.0f); - assertEquals(200f, root_child1.getLayoutWidth(), 0.0f); - assertEquals(60f, root_child1.getLayoutHeight(), 0.0f); - } - @Test public void test_percentage_flex_basis_main_max_height() { YogaConfig config = YogaConfigFactory.create(); diff --git a/java/tests/com/facebook/yoga/YGRoundingTest.java b/java/tests/com/facebook/yoga/YGRoundingTest.java index f6752290..8c043d21 100644 --- a/java/tests/com/facebook/yoga/YGRoundingTest.java +++ b/java/tests/com/facebook/yoga/YGRoundingTest.java @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGRoundingTest.html package com.facebook.yoga; diff --git a/java/tests/com/facebook/yoga/YGSizeOverflowTest.java b/java/tests/com/facebook/yoga/YGSizeOverflowTest.java index e76e9cbf..4bdd36d0 100644 --- a/java/tests/com/facebook/yoga/YGSizeOverflowTest.java +++ b/java/tests/com/facebook/yoga/YGSizeOverflowTest.java @@ -1,9 +1,10 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGSizeOverflowTest.html package com.facebook.yoga; diff --git a/javascript/tests/Facebook.Yoga/YGAbsolutePositionTest.js b/javascript/tests/Facebook.Yoga/YGAbsolutePositionTest.js index 0677769f..212b5beb 100644 --- a/javascript/tests/Facebook.Yoga/YGAbsolutePositionTest.js +++ b/javascript/tests/Facebook.Yoga/YGAbsolutePositionTest.js @@ -1,9 +1,10 @@ /** - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGAbsolutePositionTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGAlignContentTest.js b/javascript/tests/Facebook.Yoga/YGAlignContentTest.js index 1ff0eca8..047a9150 100644 --- a/javascript/tests/Facebook.Yoga/YGAlignContentTest.js +++ b/javascript/tests/Facebook.Yoga/YGAlignContentTest.js @@ -1,9 +1,10 @@ /** - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignContentTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGAlignItemsTest.js b/javascript/tests/Facebook.Yoga/YGAlignItemsTest.js index b5b16681..0ca20825 100644 --- a/javascript/tests/Facebook.Yoga/YGAlignItemsTest.js +++ b/javascript/tests/Facebook.Yoga/YGAlignItemsTest.js @@ -1,9 +1,10 @@ /** - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignItemsTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGAlignSelfTest.js b/javascript/tests/Facebook.Yoga/YGAlignSelfTest.js index 7aab341f..94eef4b5 100644 --- a/javascript/tests/Facebook.Yoga/YGAlignSelfTest.js +++ b/javascript/tests/Facebook.Yoga/YGAlignSelfTest.js @@ -1,9 +1,10 @@ /** - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignSelfTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGAndroidNewsFeed.js b/javascript/tests/Facebook.Yoga/YGAndroidNewsFeed.js index 96e7ec04..e26bcadc 100644 --- a/javascript/tests/Facebook.Yoga/YGAndroidNewsFeed.js +++ b/javascript/tests/Facebook.Yoga/YGAndroidNewsFeed.js @@ -1,9 +1,10 @@ /** - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGAndroidNewsFeed.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGBorderTest.js b/javascript/tests/Facebook.Yoga/YGBorderTest.js index 16f33c29..62a2d53c 100644 --- a/javascript/tests/Facebook.Yoga/YGBorderTest.js +++ b/javascript/tests/Facebook.Yoga/YGBorderTest.js @@ -1,9 +1,10 @@ /** - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGBorderTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGDimensionTest.js b/javascript/tests/Facebook.Yoga/YGDimensionTest.js index ac3937da..733479fa 100644 --- a/javascript/tests/Facebook.Yoga/YGDimensionTest.js +++ b/javascript/tests/Facebook.Yoga/YGDimensionTest.js @@ -1,9 +1,10 @@ /** - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGDimensionTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGDisplayTest.js b/javascript/tests/Facebook.Yoga/YGDisplayTest.js index cf65ab22..34949a4c 100644 --- a/javascript/tests/Facebook.Yoga/YGDisplayTest.js +++ b/javascript/tests/Facebook.Yoga/YGDisplayTest.js @@ -1,5 +1,5 @@ /** - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. diff --git a/javascript/tests/Facebook.Yoga/YGFlexDirectionTest.js b/javascript/tests/Facebook.Yoga/YGFlexDirectionTest.js index fe68a6ad..7fa91364 100644 --- a/javascript/tests/Facebook.Yoga/YGFlexDirectionTest.js +++ b/javascript/tests/Facebook.Yoga/YGFlexDirectionTest.js @@ -1,9 +1,10 @@ /** - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexDirectionTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGFlexTest.js b/javascript/tests/Facebook.Yoga/YGFlexTest.js index 3515e46f..08adf542 100644 --- a/javascript/tests/Facebook.Yoga/YGFlexTest.js +++ b/javascript/tests/Facebook.Yoga/YGFlexTest.js @@ -1,9 +1,10 @@ /** - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGFlexWrapTest.js b/javascript/tests/Facebook.Yoga/YGFlexWrapTest.js index 8ea08d21..cc2a4d05 100644 --- a/javascript/tests/Facebook.Yoga/YGFlexWrapTest.js +++ b/javascript/tests/Facebook.Yoga/YGFlexWrapTest.js @@ -1,9 +1,10 @@ /** - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexWrapTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGJustifyContentTest.js b/javascript/tests/Facebook.Yoga/YGJustifyContentTest.js index 83652004..f5297982 100644 --- a/javascript/tests/Facebook.Yoga/YGJustifyContentTest.js +++ b/javascript/tests/Facebook.Yoga/YGJustifyContentTest.js @@ -1,9 +1,10 @@ /** - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGJustifyContentTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGMarginTest.js b/javascript/tests/Facebook.Yoga/YGMarginTest.js index 81f36432..2ccd37d6 100644 --- a/javascript/tests/Facebook.Yoga/YGMarginTest.js +++ b/javascript/tests/Facebook.Yoga/YGMarginTest.js @@ -1,9 +1,10 @@ /** - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGMarginTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGMinMaxDimensionTest.js b/javascript/tests/Facebook.Yoga/YGMinMaxDimensionTest.js index c52ea6e9..95883fba 100644 --- a/javascript/tests/Facebook.Yoga/YGMinMaxDimensionTest.js +++ b/javascript/tests/Facebook.Yoga/YGMinMaxDimensionTest.js @@ -1,9 +1,10 @@ /** - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGMinMaxDimensionTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); @@ -95,121 +96,6 @@ it("max_height", function () { config.free(); } }); -it("min_height", function () { - var config = Yoga.Config.create(); - - try { - var root = Yoga.Node.create(config); - root.setWidth(100); - root.setHeight(100); - - var root_child0 = Yoga.Node.create(config); - root_child0.setFlexGrow(1); - root_child0.setMinHeight(60); - root.insertChild(root_child0, 0); - - var root_child1 = Yoga.Node.create(config); - root_child1.setFlexGrow(1); - root.insertChild(root_child1, 1); - root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_LTR); - - console.assert(0 === root.getComputedLeft(), "0 === root.getComputedLeft() (" + root.getComputedLeft() + ")"); - console.assert(0 === root.getComputedTop(), "0 === root.getComputedTop() (" + root.getComputedTop() + ")"); - console.assert(100 === root.getComputedWidth(), "100 === root.getComputedWidth() (" + root.getComputedWidth() + ")"); - console.assert(100 === root.getComputedHeight(), "100 === root.getComputedHeight() (" + root.getComputedHeight() + ")"); - - console.assert(0 === root_child0.getComputedLeft(), "0 === root_child0.getComputedLeft() (" + root_child0.getComputedLeft() + ")"); - console.assert(0 === root_child0.getComputedTop(), "0 === root_child0.getComputedTop() (" + root_child0.getComputedTop() + ")"); - console.assert(100 === root_child0.getComputedWidth(), "100 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")"); - console.assert(80 === root_child0.getComputedHeight(), "80 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")"); - - console.assert(0 === root_child1.getComputedLeft(), "0 === root_child1.getComputedLeft() (" + root_child1.getComputedLeft() + ")"); - console.assert(80 === root_child1.getComputedTop(), "80 === root_child1.getComputedTop() (" + root_child1.getComputedTop() + ")"); - console.assert(100 === root_child1.getComputedWidth(), "100 === root_child1.getComputedWidth() (" + root_child1.getComputedWidth() + ")"); - console.assert(20 === root_child1.getComputedHeight(), "20 === root_child1.getComputedHeight() (" + root_child1.getComputedHeight() + ")"); - - root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_RTL); - - console.assert(0 === root.getComputedLeft(), "0 === root.getComputedLeft() (" + root.getComputedLeft() + ")"); - console.assert(0 === root.getComputedTop(), "0 === root.getComputedTop() (" + root.getComputedTop() + ")"); - console.assert(100 === root.getComputedWidth(), "100 === root.getComputedWidth() (" + root.getComputedWidth() + ")"); - console.assert(100 === root.getComputedHeight(), "100 === root.getComputedHeight() (" + root.getComputedHeight() + ")"); - - console.assert(0 === root_child0.getComputedLeft(), "0 === root_child0.getComputedLeft() (" + root_child0.getComputedLeft() + ")"); - console.assert(0 === root_child0.getComputedTop(), "0 === root_child0.getComputedTop() (" + root_child0.getComputedTop() + ")"); - console.assert(100 === root_child0.getComputedWidth(), "100 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")"); - console.assert(80 === root_child0.getComputedHeight(), "80 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")"); - - console.assert(0 === root_child1.getComputedLeft(), "0 === root_child1.getComputedLeft() (" + root_child1.getComputedLeft() + ")"); - console.assert(80 === root_child1.getComputedTop(), "80 === root_child1.getComputedTop() (" + root_child1.getComputedTop() + ")"); - console.assert(100 === root_child1.getComputedWidth(), "100 === root_child1.getComputedWidth() (" + root_child1.getComputedWidth() + ")"); - console.assert(20 === root_child1.getComputedHeight(), "20 === root_child1.getComputedHeight() (" + root_child1.getComputedHeight() + ")"); - } finally { - if (typeof root !== "undefined") { - root.freeRecursive(); - } - - config.free(); - } -}); -it("min_width", function () { - var config = Yoga.Config.create(); - - try { - var root = Yoga.Node.create(config); - root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW); - root.setWidth(100); - root.setHeight(100); - - var root_child0 = Yoga.Node.create(config); - root_child0.setFlexGrow(1); - root_child0.setMinWidth(60); - root.insertChild(root_child0, 0); - - var root_child1 = Yoga.Node.create(config); - root_child1.setFlexGrow(1); - root.insertChild(root_child1, 1); - root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_LTR); - - console.assert(0 === root.getComputedLeft(), "0 === root.getComputedLeft() (" + root.getComputedLeft() + ")"); - console.assert(0 === root.getComputedTop(), "0 === root.getComputedTop() (" + root.getComputedTop() + ")"); - console.assert(100 === root.getComputedWidth(), "100 === root.getComputedWidth() (" + root.getComputedWidth() + ")"); - console.assert(100 === root.getComputedHeight(), "100 === root.getComputedHeight() (" + root.getComputedHeight() + ")"); - - console.assert(0 === root_child0.getComputedLeft(), "0 === root_child0.getComputedLeft() (" + root_child0.getComputedLeft() + ")"); - console.assert(0 === root_child0.getComputedTop(), "0 === root_child0.getComputedTop() (" + root_child0.getComputedTop() + ")"); - console.assert(80 === root_child0.getComputedWidth(), "80 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")"); - console.assert(100 === root_child0.getComputedHeight(), "100 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")"); - - console.assert(80 === root_child1.getComputedLeft(), "80 === root_child1.getComputedLeft() (" + root_child1.getComputedLeft() + ")"); - console.assert(0 === root_child1.getComputedTop(), "0 === root_child1.getComputedTop() (" + root_child1.getComputedTop() + ")"); - console.assert(20 === root_child1.getComputedWidth(), "20 === root_child1.getComputedWidth() (" + root_child1.getComputedWidth() + ")"); - console.assert(100 === root_child1.getComputedHeight(), "100 === root_child1.getComputedHeight() (" + root_child1.getComputedHeight() + ")"); - - root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_RTL); - - console.assert(0 === root.getComputedLeft(), "0 === root.getComputedLeft() (" + root.getComputedLeft() + ")"); - console.assert(0 === root.getComputedTop(), "0 === root.getComputedTop() (" + root.getComputedTop() + ")"); - console.assert(100 === root.getComputedWidth(), "100 === root.getComputedWidth() (" + root.getComputedWidth() + ")"); - console.assert(100 === root.getComputedHeight(), "100 === root.getComputedHeight() (" + root.getComputedHeight() + ")"); - - console.assert(20 === root_child0.getComputedLeft(), "20 === root_child0.getComputedLeft() (" + root_child0.getComputedLeft() + ")"); - console.assert(0 === root_child0.getComputedTop(), "0 === root_child0.getComputedTop() (" + root_child0.getComputedTop() + ")"); - console.assert(80 === root_child0.getComputedWidth(), "80 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")"); - console.assert(100 === root_child0.getComputedHeight(), "100 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")"); - - console.assert(0 === root_child1.getComputedLeft(), "0 === root_child1.getComputedLeft() (" + root_child1.getComputedLeft() + ")"); - console.assert(0 === root_child1.getComputedTop(), "0 === root_child1.getComputedTop() (" + root_child1.getComputedTop() + ")"); - console.assert(20 === root_child1.getComputedWidth(), "20 === root_child1.getComputedWidth() (" + root_child1.getComputedWidth() + ")"); - console.assert(100 === root_child1.getComputedHeight(), "100 === root_child1.getComputedHeight() (" + root_child1.getComputedHeight() + ")"); - } finally { - if (typeof root !== "undefined") { - root.freeRecursive(); - } - - config.free(); - } -}); it("justify_content_min_max", function () { var config = Yoga.Config.create(); diff --git a/javascript/tests/Facebook.Yoga/YGPaddingTest.js b/javascript/tests/Facebook.Yoga/YGPaddingTest.js index a9f0b458..0cb7bc88 100644 --- a/javascript/tests/Facebook.Yoga/YGPaddingTest.js +++ b/javascript/tests/Facebook.Yoga/YGPaddingTest.js @@ -1,9 +1,10 @@ /** - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGPaddingTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGPercentageTest.js b/javascript/tests/Facebook.Yoga/YGPercentageTest.js index 5ee49bcc..c211b3a7 100644 --- a/javascript/tests/Facebook.Yoga/YGPercentageTest.js +++ b/javascript/tests/Facebook.Yoga/YGPercentageTest.js @@ -1,9 +1,10 @@ /** - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGPercentageTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); @@ -261,64 +262,6 @@ it("percentage_flex_basis_cross", function () { config.free(); } }); -it("percentage_flex_basis_cross_min_height", function () { - var config = Yoga.Config.create(); - - try { - var root = Yoga.Node.create(config); - root.setWidth(200); - root.setHeight(200); - - var root_child0 = Yoga.Node.create(config); - root_child0.setFlexGrow(1); - root_child0.setMinHeight("60%"); - root.insertChild(root_child0, 0); - - var root_child1 = Yoga.Node.create(config); - root_child1.setFlexGrow(2); - root_child1.setMinHeight("10%"); - root.insertChild(root_child1, 1); - root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_LTR); - - console.assert(0 === root.getComputedLeft(), "0 === root.getComputedLeft() (" + root.getComputedLeft() + ")"); - console.assert(0 === root.getComputedTop(), "0 === root.getComputedTop() (" + root.getComputedTop() + ")"); - console.assert(200 === root.getComputedWidth(), "200 === root.getComputedWidth() (" + root.getComputedWidth() + ")"); - console.assert(200 === root.getComputedHeight(), "200 === root.getComputedHeight() (" + root.getComputedHeight() + ")"); - - console.assert(0 === root_child0.getComputedLeft(), "0 === root_child0.getComputedLeft() (" + root_child0.getComputedLeft() + ")"); - console.assert(0 === root_child0.getComputedTop(), "0 === root_child0.getComputedTop() (" + root_child0.getComputedTop() + ")"); - console.assert(200 === root_child0.getComputedWidth(), "200 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")"); - console.assert(140 === root_child0.getComputedHeight(), "140 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")"); - - console.assert(0 === root_child1.getComputedLeft(), "0 === root_child1.getComputedLeft() (" + root_child1.getComputedLeft() + ")"); - console.assert(140 === root_child1.getComputedTop(), "140 === root_child1.getComputedTop() (" + root_child1.getComputedTop() + ")"); - console.assert(200 === root_child1.getComputedWidth(), "200 === root_child1.getComputedWidth() (" + root_child1.getComputedWidth() + ")"); - console.assert(60 === root_child1.getComputedHeight(), "60 === root_child1.getComputedHeight() (" + root_child1.getComputedHeight() + ")"); - - root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_RTL); - - console.assert(0 === root.getComputedLeft(), "0 === root.getComputedLeft() (" + root.getComputedLeft() + ")"); - console.assert(0 === root.getComputedTop(), "0 === root.getComputedTop() (" + root.getComputedTop() + ")"); - console.assert(200 === root.getComputedWidth(), "200 === root.getComputedWidth() (" + root.getComputedWidth() + ")"); - console.assert(200 === root.getComputedHeight(), "200 === root.getComputedHeight() (" + root.getComputedHeight() + ")"); - - console.assert(0 === root_child0.getComputedLeft(), "0 === root_child0.getComputedLeft() (" + root_child0.getComputedLeft() + ")"); - console.assert(0 === root_child0.getComputedTop(), "0 === root_child0.getComputedTop() (" + root_child0.getComputedTop() + ")"); - console.assert(200 === root_child0.getComputedWidth(), "200 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")"); - console.assert(140 === root_child0.getComputedHeight(), "140 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")"); - - console.assert(0 === root_child1.getComputedLeft(), "0 === root_child1.getComputedLeft() (" + root_child1.getComputedLeft() + ")"); - console.assert(140 === root_child1.getComputedTop(), "140 === root_child1.getComputedTop() (" + root_child1.getComputedTop() + ")"); - console.assert(200 === root_child1.getComputedWidth(), "200 === root_child1.getComputedWidth() (" + root_child1.getComputedWidth() + ")"); - console.assert(60 === root_child1.getComputedHeight(), "60 === root_child1.getComputedHeight() (" + root_child1.getComputedHeight() + ")"); - } finally { - if (typeof root !== "undefined") { - root.freeRecursive(); - } - - config.free(); - } -}); it("percentage_flex_basis_main_max_height", function () { var config = Yoga.Config.create(); diff --git a/javascript/tests/Facebook.Yoga/YGRoundingTest.js b/javascript/tests/Facebook.Yoga/YGRoundingTest.js index 69caba7d..564faab6 100644 --- a/javascript/tests/Facebook.Yoga/YGRoundingTest.js +++ b/javascript/tests/Facebook.Yoga/YGRoundingTest.js @@ -1,9 +1,10 @@ /** - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGRoundingTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/javascript/tests/Facebook.Yoga/YGSizeOverflowTest.js b/javascript/tests/Facebook.Yoga/YGSizeOverflowTest.js index 7d94d200..b9751e33 100644 --- a/javascript/tests/Facebook.Yoga/YGSizeOverflowTest.js +++ b/javascript/tests/Facebook.Yoga/YGSizeOverflowTest.js @@ -1,9 +1,10 @@ /** - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + // @Generated by gentest/gentest.rb from gentest/fixtures/YGSizeOverflowTest.html var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY); diff --git a/tests/YGAbsolutePositionTest.cpp b/tests/YGAbsolutePositionTest.cpp index eea56132..b7038918 100644 --- a/tests/YGAbsolutePositionTest.cpp +++ b/tests/YGAbsolutePositionTest.cpp @@ -1,11 +1,12 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ -// @Generated by gentest/gentest.rb from -// gentest/fixtures/YGAbsolutePositionTest.html + +// clang-format off +// @Generated by gentest/gentest.rb from gentest/fixtures/YGAbsolutePositionTest.html #include #include @@ -184,9 +185,7 @@ TEST(YogaTest, absolute_layout_width_height_start_top_end_bottom) { YGConfigFree(config); } -TEST( - YogaTest, - do_not_clamp_height_of_absolute_node_to_height_of_its_overflow_hidden_parent) { +TEST(YogaTest, do_not_clamp_height_of_absolute_node_to_height_of_its_overflow_hidden_parent) { const YGConfigRef config = YGConfigNew(); const YGNodeRef root = YGNodeNewWithConfig(config); @@ -578,9 +577,7 @@ TEST(YogaTest, absolute_layout_align_items_center_on_child_only) { YGConfigFree(config); } -TEST( - YogaTest, - absolute_layout_align_items_and_justify_content_center_and_top_position) { +TEST(YogaTest, absolute_layout_align_items_and_justify_content_center_and_top_position) { const YGConfigRef config = YGConfigNew(); const YGNodeRef root = YGNodeNewWithConfig(config); @@ -625,9 +622,7 @@ TEST( YGConfigFree(config); } -TEST( - YogaTest, - absolute_layout_align_items_and_justify_content_center_and_bottom_position) { +TEST(YogaTest, absolute_layout_align_items_and_justify_content_center_and_bottom_position) { const YGConfigRef config = YGConfigNew(); const YGNodeRef root = YGNodeNewWithConfig(config); @@ -672,9 +667,7 @@ TEST( YGConfigFree(config); } -TEST( - YogaTest, - absolute_layout_align_items_and_justify_content_center_and_left_position) { +TEST(YogaTest, absolute_layout_align_items_and_justify_content_center_and_left_position) { const YGConfigRef config = YGConfigNew(); const YGNodeRef root = YGNodeNewWithConfig(config); @@ -719,9 +712,7 @@ TEST( YGConfigFree(config); } -TEST( - YogaTest, - absolute_layout_align_items_and_justify_content_center_and_right_position) { +TEST(YogaTest, absolute_layout_align_items_and_justify_content_center_and_right_position) { const YGConfigRef config = YGConfigNew(); const YGNodeRef root = YGNodeNewWithConfig(config); diff --git a/tests/YGAlignContentTest.cpp b/tests/YGAlignContentTest.cpp index 1bb3dce5..8e072f4a 100644 --- a/tests/YGAlignContentTest.cpp +++ b/tests/YGAlignContentTest.cpp @@ -1,11 +1,12 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ -// @Generated by gentest/gentest.rb from -// gentest/fixtures/YGAlignContentTest.html + +// clang-format off +// @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignContentTest.html #include #include diff --git a/tests/YGAlignItemsTest.cpp b/tests/YGAlignItemsTest.cpp index 2a581da8..30575f84 100644 --- a/tests/YGAlignItemsTest.cpp +++ b/tests/YGAlignItemsTest.cpp @@ -1,9 +1,11 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + +// clang-format off // @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignItemsTest.html #include diff --git a/tests/YGAlignSelfTest.cpp b/tests/YGAlignSelfTest.cpp index afa3870a..40b35b1f 100644 --- a/tests/YGAlignSelfTest.cpp +++ b/tests/YGAlignSelfTest.cpp @@ -1,9 +1,11 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + +// clang-format off // @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignSelfTest.html #include diff --git a/tests/YGAndroidNewsFeed.cpp b/tests/YGAndroidNewsFeed.cpp index bb4125df..0107b877 100644 --- a/tests/YGAndroidNewsFeed.cpp +++ b/tests/YGAndroidNewsFeed.cpp @@ -1,9 +1,11 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + +// clang-format off // @Generated by gentest/gentest.rb from gentest/fixtures/YGAndroidNewsFeed.html #include @@ -27,157 +29,89 @@ TEST(YogaTest, android_news_feed) { YGNodeStyleSetAlignContent(root_child0_child0_child0, YGAlignStretch); YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0); - const YGNodeRef root_child0_child0_child0_child0 = - YGNodeNewWithConfig(config); - YGNodeStyleSetFlexDirection( - root_child0_child0_child0_child0, YGFlexDirectionRow); + const YGNodeRef root_child0_child0_child0_child0 = YGNodeNewWithConfig(config); + YGNodeStyleSetFlexDirection(root_child0_child0_child0_child0, YGFlexDirectionRow); YGNodeStyleSetAlignContent(root_child0_child0_child0_child0, YGAlignStretch); YGNodeStyleSetAlignItems(root_child0_child0_child0_child0, YGAlignFlexStart); YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeStart, 36); YGNodeStyleSetMargin(root_child0_child0_child0_child0, YGEdgeTop, 24); - YGNodeInsertChild( - root_child0_child0_child0, root_child0_child0_child0_child0, 0); + YGNodeInsertChild(root_child0_child0_child0, root_child0_child0_child0_child0, 0); - const YGNodeRef root_child0_child0_child0_child0_child0 = - YGNodeNewWithConfig(config); - YGNodeStyleSetFlexDirection( - root_child0_child0_child0_child0_child0, YGFlexDirectionRow); - YGNodeStyleSetAlignContent( - root_child0_child0_child0_child0_child0, YGAlignStretch); - YGNodeInsertChild( - root_child0_child0_child0_child0, - root_child0_child0_child0_child0_child0, - 0); + const YGNodeRef root_child0_child0_child0_child0_child0 = YGNodeNewWithConfig(config); + YGNodeStyleSetFlexDirection(root_child0_child0_child0_child0_child0, YGFlexDirectionRow); + YGNodeStyleSetAlignContent(root_child0_child0_child0_child0_child0, YGAlignStretch); + YGNodeInsertChild(root_child0_child0_child0_child0, root_child0_child0_child0_child0_child0, 0); - const YGNodeRef root_child0_child0_child0_child0_child0_child0 = - YGNodeNewWithConfig(config); - YGNodeStyleSetAlignContent( - root_child0_child0_child0_child0_child0_child0, YGAlignStretch); + const YGNodeRef root_child0_child0_child0_child0_child0_child0 = YGNodeNewWithConfig(config); + YGNodeStyleSetAlignContent(root_child0_child0_child0_child0_child0_child0, YGAlignStretch); YGNodeStyleSetWidth(root_child0_child0_child0_child0_child0_child0, 120); YGNodeStyleSetHeight(root_child0_child0_child0_child0_child0_child0, 120); - YGNodeInsertChild( - root_child0_child0_child0_child0_child0, - root_child0_child0_child0_child0_child0_child0, - 0); + YGNodeInsertChild(root_child0_child0_child0_child0_child0, root_child0_child0_child0_child0_child0_child0, 0); - const YGNodeRef root_child0_child0_child0_child0_child1 = - YGNodeNewWithConfig(config); - YGNodeStyleSetAlignContent( - root_child0_child0_child0_child0_child1, YGAlignStretch); + const YGNodeRef root_child0_child0_child0_child0_child1 = YGNodeNewWithConfig(config); + YGNodeStyleSetAlignContent(root_child0_child0_child0_child0_child1, YGAlignStretch); YGNodeStyleSetFlexShrink(root_child0_child0_child0_child0_child1, 1); - YGNodeStyleSetMargin( - root_child0_child0_child0_child0_child1, YGEdgeRight, 36); - YGNodeStyleSetPadding( - root_child0_child0_child0_child0_child1, YGEdgeLeft, 36); + YGNodeStyleSetMargin(root_child0_child0_child0_child0_child1, YGEdgeRight, 36); + YGNodeStyleSetPadding(root_child0_child0_child0_child0_child1, YGEdgeLeft, 36); YGNodeStyleSetPadding(root_child0_child0_child0_child0_child1, YGEdgeTop, 21); - YGNodeStyleSetPadding( - root_child0_child0_child0_child0_child1, YGEdgeRight, 36); - YGNodeStyleSetPadding( - root_child0_child0_child0_child0_child1, YGEdgeBottom, 18); - YGNodeInsertChild( - root_child0_child0_child0_child0, - root_child0_child0_child0_child0_child1, - 1); + YGNodeStyleSetPadding(root_child0_child0_child0_child0_child1, YGEdgeRight, 36); + YGNodeStyleSetPadding(root_child0_child0_child0_child0_child1, YGEdgeBottom, 18); + YGNodeInsertChild(root_child0_child0_child0_child0, root_child0_child0_child0_child0_child1, 1); - const YGNodeRef root_child0_child0_child0_child0_child1_child0 = - YGNodeNewWithConfig(config); - YGNodeStyleSetFlexDirection( - root_child0_child0_child0_child0_child1_child0, YGFlexDirectionRow); - YGNodeStyleSetAlignContent( - root_child0_child0_child0_child0_child1_child0, YGAlignStretch); + const YGNodeRef root_child0_child0_child0_child0_child1_child0 = YGNodeNewWithConfig(config); + YGNodeStyleSetFlexDirection(root_child0_child0_child0_child0_child1_child0, YGFlexDirectionRow); + YGNodeStyleSetAlignContent(root_child0_child0_child0_child0_child1_child0, YGAlignStretch); YGNodeStyleSetFlexShrink(root_child0_child0_child0_child0_child1_child0, 1); - YGNodeInsertChild( - root_child0_child0_child0_child0_child1, - root_child0_child0_child0_child0_child1_child0, - 0); + YGNodeInsertChild(root_child0_child0_child0_child0_child1, root_child0_child0_child0_child0_child1_child0, 0); - const YGNodeRef root_child0_child0_child0_child0_child1_child1 = - YGNodeNewWithConfig(config); - YGNodeStyleSetAlignContent( - root_child0_child0_child0_child0_child1_child1, YGAlignStretch); + const YGNodeRef root_child0_child0_child0_child0_child1_child1 = YGNodeNewWithConfig(config); + YGNodeStyleSetAlignContent(root_child0_child0_child0_child0_child1_child1, YGAlignStretch); YGNodeStyleSetFlexShrink(root_child0_child0_child0_child0_child1_child1, 1); - YGNodeInsertChild( - root_child0_child0_child0_child0_child1, - root_child0_child0_child0_child0_child1_child1, - 1); + YGNodeInsertChild(root_child0_child0_child0_child0_child1, root_child0_child0_child0_child0_child1_child1, 1); const YGNodeRef root_child0_child0_child1 = YGNodeNewWithConfig(config); YGNodeStyleSetAlignContent(root_child0_child0_child1, YGAlignStretch); YGNodeInsertChild(root_child0_child0, root_child0_child0_child1, 1); - const YGNodeRef root_child0_child0_child1_child0 = - YGNodeNewWithConfig(config); - YGNodeStyleSetFlexDirection( - root_child0_child0_child1_child0, YGFlexDirectionRow); + const YGNodeRef root_child0_child0_child1_child0 = YGNodeNewWithConfig(config); + YGNodeStyleSetFlexDirection(root_child0_child0_child1_child0, YGFlexDirectionRow); YGNodeStyleSetAlignContent(root_child0_child0_child1_child0, YGAlignStretch); YGNodeStyleSetAlignItems(root_child0_child0_child1_child0, YGAlignFlexStart); YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeStart, 174); YGNodeStyleSetMargin(root_child0_child0_child1_child0, YGEdgeTop, 24); - YGNodeInsertChild( - root_child0_child0_child1, root_child0_child0_child1_child0, 0); + YGNodeInsertChild(root_child0_child0_child1, root_child0_child0_child1_child0, 0); - const YGNodeRef root_child0_child0_child1_child0_child0 = - YGNodeNewWithConfig(config); - YGNodeStyleSetFlexDirection( - root_child0_child0_child1_child0_child0, YGFlexDirectionRow); - YGNodeStyleSetAlignContent( - root_child0_child0_child1_child0_child0, YGAlignStretch); - YGNodeInsertChild( - root_child0_child0_child1_child0, - root_child0_child0_child1_child0_child0, - 0); + const YGNodeRef root_child0_child0_child1_child0_child0 = YGNodeNewWithConfig(config); + YGNodeStyleSetFlexDirection(root_child0_child0_child1_child0_child0, YGFlexDirectionRow); + YGNodeStyleSetAlignContent(root_child0_child0_child1_child0_child0, YGAlignStretch); + YGNodeInsertChild(root_child0_child0_child1_child0, root_child0_child0_child1_child0_child0, 0); - const YGNodeRef root_child0_child0_child1_child0_child0_child0 = - YGNodeNewWithConfig(config); - YGNodeStyleSetAlignContent( - root_child0_child0_child1_child0_child0_child0, YGAlignStretch); + const YGNodeRef root_child0_child0_child1_child0_child0_child0 = YGNodeNewWithConfig(config); + YGNodeStyleSetAlignContent(root_child0_child0_child1_child0_child0_child0, YGAlignStretch); YGNodeStyleSetWidth(root_child0_child0_child1_child0_child0_child0, 72); YGNodeStyleSetHeight(root_child0_child0_child1_child0_child0_child0, 72); - YGNodeInsertChild( - root_child0_child0_child1_child0_child0, - root_child0_child0_child1_child0_child0_child0, - 0); + YGNodeInsertChild(root_child0_child0_child1_child0_child0, root_child0_child0_child1_child0_child0_child0, 0); - const YGNodeRef root_child0_child0_child1_child0_child1 = - YGNodeNewWithConfig(config); - YGNodeStyleSetAlignContent( - root_child0_child0_child1_child0_child1, YGAlignStretch); + const YGNodeRef root_child0_child0_child1_child0_child1 = YGNodeNewWithConfig(config); + YGNodeStyleSetAlignContent(root_child0_child0_child1_child0_child1, YGAlignStretch); YGNodeStyleSetFlexShrink(root_child0_child0_child1_child0_child1, 1); - YGNodeStyleSetMargin( - root_child0_child0_child1_child0_child1, YGEdgeRight, 36); - YGNodeStyleSetPadding( - root_child0_child0_child1_child0_child1, YGEdgeLeft, 36); + YGNodeStyleSetMargin(root_child0_child0_child1_child0_child1, YGEdgeRight, 36); + YGNodeStyleSetPadding(root_child0_child0_child1_child0_child1, YGEdgeLeft, 36); YGNodeStyleSetPadding(root_child0_child0_child1_child0_child1, YGEdgeTop, 21); - YGNodeStyleSetPadding( - root_child0_child0_child1_child0_child1, YGEdgeRight, 36); - YGNodeStyleSetPadding( - root_child0_child0_child1_child0_child1, YGEdgeBottom, 18); - YGNodeInsertChild( - root_child0_child0_child1_child0, - root_child0_child0_child1_child0_child1, - 1); + YGNodeStyleSetPadding(root_child0_child0_child1_child0_child1, YGEdgeRight, 36); + YGNodeStyleSetPadding(root_child0_child0_child1_child0_child1, YGEdgeBottom, 18); + YGNodeInsertChild(root_child0_child0_child1_child0, root_child0_child0_child1_child0_child1, 1); - const YGNodeRef root_child0_child0_child1_child0_child1_child0 = - YGNodeNewWithConfig(config); - YGNodeStyleSetFlexDirection( - root_child0_child0_child1_child0_child1_child0, YGFlexDirectionRow); - YGNodeStyleSetAlignContent( - root_child0_child0_child1_child0_child1_child0, YGAlignStretch); + const YGNodeRef root_child0_child0_child1_child0_child1_child0 = YGNodeNewWithConfig(config); + YGNodeStyleSetFlexDirection(root_child0_child0_child1_child0_child1_child0, YGFlexDirectionRow); + YGNodeStyleSetAlignContent(root_child0_child0_child1_child0_child1_child0, YGAlignStretch); YGNodeStyleSetFlexShrink(root_child0_child0_child1_child0_child1_child0, 1); - YGNodeInsertChild( - root_child0_child0_child1_child0_child1, - root_child0_child0_child1_child0_child1_child0, - 0); + YGNodeInsertChild(root_child0_child0_child1_child0_child1, root_child0_child0_child1_child0_child1_child0, 0); - const YGNodeRef root_child0_child0_child1_child0_child1_child1 = - YGNodeNewWithConfig(config); - YGNodeStyleSetAlignContent( - root_child0_child0_child1_child0_child1_child1, YGAlignStretch); + const YGNodeRef root_child0_child0_child1_child0_child1_child1 = YGNodeNewWithConfig(config); + YGNodeStyleSetAlignContent(root_child0_child0_child1_child0_child1_child1, YGAlignStretch); YGNodeStyleSetFlexShrink(root_child0_child0_child1_child0_child1_child1, 1); - YGNodeInsertChild( - root_child0_child0_child1_child0_child1, - root_child0_child0_child1_child0_child1_child1, - 1); + YGNodeInsertChild(root_child0_child0_child1_child0_child1, root_child0_child0_child1_child0_child1_child1, 1); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); @@ -205,52 +139,30 @@ TEST(YogaTest, android_news_feed) { ASSERT_FLOAT_EQ(1044, YGNodeLayoutGetWidth(root_child0_child0_child0_child0)); ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root_child0_child0_child0_child0)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child0)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child0)); - ASSERT_FLOAT_EQ( - 120, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child0)); - ASSERT_FLOAT_EQ( - 120, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child0)); + ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child0)); + ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child0)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child0_child0)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child0_child0)); - ASSERT_FLOAT_EQ( - 120, - YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child0_child0)); - ASSERT_FLOAT_EQ( - 120, - YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child0_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child0_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child0_child0)); + ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child0_child0)); + ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child0_child0)); - ASSERT_FLOAT_EQ( - 120, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child1)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child1)); - ASSERT_FLOAT_EQ( - 72, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child1)); - ASSERT_FLOAT_EQ( - 39, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child1)); + ASSERT_FLOAT_EQ(120, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child1)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child1)); + ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child1)); + ASSERT_FLOAT_EQ(39, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child1)); - ASSERT_FLOAT_EQ( - 36, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child1_child0)); - ASSERT_FLOAT_EQ( - 21, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child1_child0)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child1_child0)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child1_child0)); + ASSERT_FLOAT_EQ(36, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child1_child0)); + ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child1_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child1_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child1_child0)); - ASSERT_FLOAT_EQ( - 36, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child1_child1)); - ASSERT_FLOAT_EQ( - 21, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child1_child1)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child1_child1)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child1_child1)); + ASSERT_FLOAT_EQ(36, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child1_child1)); + ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child1_child1)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child1_child1)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child1_child1)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child1)); ASSERT_FLOAT_EQ(144, YGNodeLayoutGetTop(root_child0_child0_child1)); @@ -262,51 +174,30 @@ TEST(YogaTest, android_news_feed) { ASSERT_FLOAT_EQ(906, YGNodeLayoutGetWidth(root_child0_child0_child1_child0)); ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0_child0_child1_child0)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child0)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child0)); - ASSERT_FLOAT_EQ( - 72, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child0)); - ASSERT_FLOAT_EQ( - 72, YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child0)); + ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child0)); + ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child0)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child0_child0)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child0_child0)); - ASSERT_FLOAT_EQ( - 72, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child0_child0)); - ASSERT_FLOAT_EQ( - 72, - YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child0_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child0_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child0_child0)); + ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child0_child0)); + ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child0_child0)); - ASSERT_FLOAT_EQ( - 72, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child1)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child1)); - ASSERT_FLOAT_EQ( - 72, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child1)); - ASSERT_FLOAT_EQ( - 39, YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child1)); + ASSERT_FLOAT_EQ(72, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child1)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child1)); + ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child1)); + ASSERT_FLOAT_EQ(39, YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child1)); - ASSERT_FLOAT_EQ( - 36, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child1_child0)); - ASSERT_FLOAT_EQ( - 21, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child1_child0)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child1_child0)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child1_child0)); + ASSERT_FLOAT_EQ(36, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child1_child0)); + ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child1_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child1_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child1_child0)); - ASSERT_FLOAT_EQ( - 36, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child1_child1)); - ASSERT_FLOAT_EQ( - 21, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child1_child1)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child1_child1)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child1_child1)); + ASSERT_FLOAT_EQ(36, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child1_child1)); + ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child1_child1)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child1_child1)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child1_child1)); YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); @@ -335,52 +226,30 @@ TEST(YogaTest, android_news_feed) { ASSERT_FLOAT_EQ(1044, YGNodeLayoutGetWidth(root_child0_child0_child0_child0)); ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root_child0_child0_child0_child0)); - ASSERT_FLOAT_EQ( - 924, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child0)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child0)); - ASSERT_FLOAT_EQ( - 120, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child0)); - ASSERT_FLOAT_EQ( - 120, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child0)); + ASSERT_FLOAT_EQ(924, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child0)); + ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child0)); + ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child0)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child0_child0)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child0_child0)); - ASSERT_FLOAT_EQ( - 120, - YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child0_child0)); - ASSERT_FLOAT_EQ( - 120, - YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child0_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child0_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child0_child0)); + ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child0_child0)); + ASSERT_FLOAT_EQ(120, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child0_child0)); - ASSERT_FLOAT_EQ( - 816, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child1)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child1)); - ASSERT_FLOAT_EQ( - 72, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child1)); - ASSERT_FLOAT_EQ( - 39, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child1)); + ASSERT_FLOAT_EQ(816, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child1)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child1)); + ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child1)); + ASSERT_FLOAT_EQ(39, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child1)); - ASSERT_FLOAT_EQ( - 36, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child1_child0)); - ASSERT_FLOAT_EQ( - 21, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child1_child0)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child1_child0)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child1_child0)); + ASSERT_FLOAT_EQ(36, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child1_child0)); + ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child1_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child1_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child1_child0)); - ASSERT_FLOAT_EQ( - 36, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child1_child1)); - ASSERT_FLOAT_EQ( - 21, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child1_child1)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child1_child1)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child1_child1)); + ASSERT_FLOAT_EQ(36, YGNodeLayoutGetLeft(root_child0_child0_child0_child0_child1_child1)); + ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0_child0_child0_child1_child1)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child0_child0_child1_child1)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child0_child0_child1_child1)); ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child1)); ASSERT_FLOAT_EQ(144, YGNodeLayoutGetTop(root_child0_child0_child1)); @@ -392,51 +261,30 @@ TEST(YogaTest, android_news_feed) { ASSERT_FLOAT_EQ(906, YGNodeLayoutGetWidth(root_child0_child0_child1_child0)); ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0_child0_child1_child0)); - ASSERT_FLOAT_EQ( - 834, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child0)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child0)); - ASSERT_FLOAT_EQ( - 72, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child0)); - ASSERT_FLOAT_EQ( - 72, YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child0)); + ASSERT_FLOAT_EQ(834, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child0)); + ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child0)); + ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child0)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child0_child0)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child0_child0)); - ASSERT_FLOAT_EQ( - 72, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child0_child0)); - ASSERT_FLOAT_EQ( - 72, - YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child0_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child0_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child0_child0)); + ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child0_child0)); + ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child0_child0)); - ASSERT_FLOAT_EQ( - 726, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child1)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child1)); - ASSERT_FLOAT_EQ( - 72, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child1)); - ASSERT_FLOAT_EQ( - 39, YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child1)); + ASSERT_FLOAT_EQ(726, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child1)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child1)); + ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child1)); + ASSERT_FLOAT_EQ(39, YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child1)); - ASSERT_FLOAT_EQ( - 36, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child1_child0)); - ASSERT_FLOAT_EQ( - 21, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child1_child0)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child1_child0)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child1_child0)); + ASSERT_FLOAT_EQ(36, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child1_child0)); + ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child1_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child1_child0)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child1_child0)); - ASSERT_FLOAT_EQ( - 36, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child1_child1)); - ASSERT_FLOAT_EQ( - 21, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child1_child1)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child1_child1)); - ASSERT_FLOAT_EQ( - 0, YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child1_child1)); + ASSERT_FLOAT_EQ(36, YGNodeLayoutGetLeft(root_child0_child0_child1_child0_child1_child1)); + ASSERT_FLOAT_EQ(21, YGNodeLayoutGetTop(root_child0_child0_child1_child0_child1_child1)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child1_child0_child1_child1)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child1_child0_child1_child1)); YGNodeFreeRecursive(root); diff --git a/tests/YGBorderTest.cpp b/tests/YGBorderTest.cpp index 39318214..3bd0f2c9 100644 --- a/tests/YGBorderTest.cpp +++ b/tests/YGBorderTest.cpp @@ -1,9 +1,11 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + +// clang-format off // @Generated by gentest/gentest.rb from gentest/fixtures/YGBorderTest.html #include diff --git a/tests/YGDimensionTest.cpp b/tests/YGDimensionTest.cpp index c4e50718..02ccb06c 100644 --- a/tests/YGDimensionTest.cpp +++ b/tests/YGDimensionTest.cpp @@ -1,9 +1,11 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + +// clang-format off // @Generated by gentest/gentest.rb from gentest/fixtures/YGDimensionTest.html #include diff --git a/tests/YGDisplayTest.cpp b/tests/YGDisplayTest.cpp index edc53358..e28d79a4 100644 --- a/tests/YGDisplayTest.cpp +++ b/tests/YGDisplayTest.cpp @@ -1,10 +1,11 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ +// clang-format off // @Generated by gentest/gentest.rb from gentest/fixtures/YGDisplayTest.html #include diff --git a/tests/YGFlexDirectionTest.cpp b/tests/YGFlexDirectionTest.cpp index 976ca82a..7eb4b81d 100644 --- a/tests/YGFlexDirectionTest.cpp +++ b/tests/YGFlexDirectionTest.cpp @@ -1,11 +1,12 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ -// @Generated by gentest/gentest.rb from -// gentest/fixtures/YGFlexDirectionTest.html + +// clang-format off +// @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexDirectionTest.html #include #include diff --git a/tests/YGFlexTest.cpp b/tests/YGFlexTest.cpp index ab6dec76..82543c95 100644 --- a/tests/YGFlexTest.cpp +++ b/tests/YGFlexTest.cpp @@ -1,9 +1,11 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + +// clang-format off // @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexTest.html #include @@ -605,121 +607,3 @@ TEST(YogaTest, flex_grow_less_than_factor_one) { YGConfigFree(config); } - -TEST(YogaTest, flex_shrink_min_width) { - const YGConfigRef config = YGConfigNew(); - YGConfigSetUseWebDefaults(config, true); - - const YGNodeRef root = YGNodeNewWithConfig(config); - YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow); - YGNodeStyleSetWidth(root, 500); - YGNodeStyleSetHeight(root, 500); - - const YGNodeRef root_child0 = YGNodeNewWithConfig(config); - YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow); - YGNodeStyleSetWidth(root_child0, 100); - YGNodeStyleSetMinWidth(root_child0, 301); - YGNodeStyleSetHeight(root_child0, 100); - YGNodeInsertChild(root, root_child0, 0); - - const YGNodeRef root_child1 = YGNodeNewWithConfig(config); - YGNodeStyleSetFlexDirection(root_child1, YGFlexDirectionRow); - YGNodeStyleSetWidth(root_child1, 100); - YGNodeStyleSetMinWidth(root_child1, 25); - YGNodeStyleSetHeight(root_child1, 100); - YGNodeInsertChild(root, root_child1, 1); - - const YGNodeRef root_child2 = YGNodeNewWithConfig(config); - YGNodeStyleSetFlexDirection(root_child2, YGFlexDirectionRow); - YGNodeStyleSetWidth(root_child2, 100); - YGNodeStyleSetHeight(root_child2, 100); - YGNodeInsertChild(root, root_child2, 2); - - YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); - ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root)); - ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root)); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); - ASSERT_FLOAT_EQ(301, YGNodeLayoutGetWidth(root_child0)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0)); - - ASSERT_FLOAT_EQ(301, YGNodeLayoutGetLeft(root_child1)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1)); - - ASSERT_FLOAT_EQ(401, YGNodeLayoutGetLeft(root_child2)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2)); - ASSERT_FLOAT_EQ(99, YGNodeLayoutGetWidth(root_child2)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2)); - - YGNodeFreeRecursive(root); - - YGConfigFree(config); -} - -TEST(YogaTest, flex_shrink_flex_grow_min_width) { - const YGConfigRef config = YGConfigNew(); - YGConfigSetUseWebDefaults(config, true); - - const YGNodeRef root = YGNodeNewWithConfig(config); - YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow); - YGNodeStyleSetWidth(root, 500); - YGNodeStyleSetHeight(root, 500); - - const YGNodeRef root_child0 = YGNodeNewWithConfig(config); - YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow); - YGNodeStyleSetFlexGrow(root_child0, 0); - YGNodeStyleSetFlexShrink(root_child0, 1); - YGNodeStyleSetWidth(root_child0, 100); - YGNodeStyleSetMinWidth(root_child0, 301); - YGNodeStyleSetHeight(root_child0, 100); - YGNodeInsertChild(root, root_child0, 0); - - const YGNodeRef root_child1 = YGNodeNewWithConfig(config); - YGNodeStyleSetFlexDirection(root_child1, YGFlexDirectionRow); - YGNodeStyleSetFlexGrow(root_child1, 1); - YGNodeStyleSetFlexShrink(root_child1, 1); - YGNodeStyleSetWidth(root_child1, 100); - YGNodeStyleSetMinWidth(root_child1, 25); - YGNodeStyleSetHeight(root_child1, 100); - YGNodeInsertChild(root, root_child1, 1); - - const YGNodeRef root_child2 = YGNodeNewWithConfig(config); - YGNodeStyleSetFlexDirection(root_child2, YGFlexDirectionRow); - YGNodeStyleSetWidth(root_child2, 100); - YGNodeStyleSetHeight(root_child2, 100); - YGNodeStyleSetFlexShrink(root_child2, 1); - YGNodeStyleSetFlexGrow(root_child2, 1); - YGNodeInsertChild(root, root_child2, 2); - - YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); - ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root)); - ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root)); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); - ASSERT_FLOAT_EQ(301, YGNodeLayoutGetWidth(root_child0)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0)); - - ASSERT_FLOAT_EQ(301, YGNodeLayoutGetLeft(root_child1)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1)); - - ASSERT_FLOAT_EQ(401, YGNodeLayoutGetLeft(root_child2)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2)); - ASSERT_FLOAT_EQ(99, YGNodeLayoutGetWidth(root_child2)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2)); - - YGNodeFreeRecursive(root); - - YGConfigFree(config); -} diff --git a/tests/YGFlexWrapTest.cpp b/tests/YGFlexWrapTest.cpp index 38a9c51e..c0c59b75 100644 --- a/tests/YGFlexWrapTest.cpp +++ b/tests/YGFlexWrapTest.cpp @@ -1,9 +1,11 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + +// clang-format off // @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexWrapTest.html #include diff --git a/tests/YGJustifyContentTest.cpp b/tests/YGJustifyContentTest.cpp index e82263c5..013792d2 100644 --- a/tests/YGJustifyContentTest.cpp +++ b/tests/YGJustifyContentTest.cpp @@ -1,11 +1,12 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ -// @Generated by gentest/gentest.rb from -// gentest/fixtures/YGJustifyContentTest.html + +// clang-format off +// @Generated by gentest/gentest.rb from gentest/fixtures/YGJustifyContentTest.html #include #include @@ -998,9 +999,7 @@ TEST(YogaTest, justify_content_row_space_evenly) { YGConfigFree(config); } -TEST( - YogaTest, - justify_content_min_width_with_padding_child_width_greater_than_parent) { +TEST(YogaTest, justify_content_min_width_with_padding_child_width_greater_than_parent) { const YGConfigRef config = YGConfigNew(); const YGNodeRef root = YGNodeNewWithConfig(config); @@ -1077,9 +1076,7 @@ TEST( YGConfigFree(config); } -TEST( - YogaTest, - justify_content_min_width_with_padding_child_width_lower_than_parent) { +TEST(YogaTest, justify_content_min_width_with_padding_child_width_lower_than_parent) { const YGConfigRef config = YGConfigNew(); const YGNodeRef root = YGNodeNewWithConfig(config); diff --git a/tests/YGMarginTest.cpp b/tests/YGMarginTest.cpp index e857da09..fe6c2074 100644 --- a/tests/YGMarginTest.cpp +++ b/tests/YGMarginTest.cpp @@ -1,9 +1,11 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + +// clang-format off // @Generated by gentest/gentest.rb from gentest/fixtures/YGMarginTest.html #include diff --git a/tests/YGMinMaxDimensionTest.cpp b/tests/YGMinMaxDimensionTest.cpp index 621aff4d..9a6ce263 100644 --- a/tests/YGMinMaxDimensionTest.cpp +++ b/tests/YGMinMaxDimensionTest.cpp @@ -1,11 +1,12 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ -// @Generated by gentest/gentest.rb from -// gentest/fixtures/YGMinMaxDimensionTest.html + +// clang-format off +// @Generated by gentest/gentest.rb from gentest/fixtures/YGMinMaxDimensionTest.html #include #include @@ -91,115 +92,6 @@ TEST(YogaTest, max_height) { YGConfigFree(config); } -TEST(YogaTest, min_height) { - const YGConfigRef config = YGConfigNew(); - - const YGNodeRef root = YGNodeNewWithConfig(config); - YGNodeStyleSetWidth(root, 100); - YGNodeStyleSetHeight(root, 100); - - const YGNodeRef root_child0 = YGNodeNewWithConfig(config); - YGNodeStyleSetFlexGrow(root_child0, 1); - YGNodeStyleSetMinHeight(root_child0, 60); - YGNodeInsertChild(root, root_child0, 0); - - const YGNodeRef root_child1 = YGNodeNewWithConfig(config); - YGNodeStyleSetFlexGrow(root_child1, 1); - YGNodeInsertChild(root, root_child1, 1); - YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root)); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0)); - ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0)); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1)); - ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child1)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1)); - ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1)); - - YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root)); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0)); - ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0)); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1)); - ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child1)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1)); - ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1)); - - YGNodeFreeRecursive(root); - - YGConfigFree(config); -} - -TEST(YogaTest, min_width) { - const YGConfigRef config = YGConfigNew(); - - const YGNodeRef root = YGNodeNewWithConfig(config); - YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow); - YGNodeStyleSetWidth(root, 100); - YGNodeStyleSetHeight(root, 100); - - const YGNodeRef root_child0 = YGNodeNewWithConfig(config); - YGNodeStyleSetFlexGrow(root_child0, 1); - YGNodeStyleSetMinWidth(root_child0, 60); - YGNodeInsertChild(root, root_child0, 0); - - const YGNodeRef root_child1 = YGNodeNewWithConfig(config); - YGNodeStyleSetFlexGrow(root_child1, 1); - YGNodeInsertChild(root, root_child1, 1); - YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root)); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); - ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0)); - - ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child1)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1)); - ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1)); - - YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root)); - - ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); - ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0)); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1)); - ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1)); - ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1)); - - YGNodeFreeRecursive(root); - - YGConfigFree(config); -} - TEST(YogaTest, justify_content_min_max) { const YGConfigRef config = YGConfigNew(); @@ -1295,82 +1187,3 @@ TEST(YogaTest, min_max_percent_no_width_height) { YGConfigFree(config); } - -static YGSize _measureCk_test_label_shrink_based_on_height( - YGNodeRef node, - float width, - YGMeasureMode widthMode, - float height, - YGMeasureMode heightMode) { - - if (heightMode == YGMeasureModeAtMost) { - return YGSize{ - .width = 290, - .height = 103, - }; - } else { - return YGSize{ - .width = 290, - .height = height, - }; - } -} - -TEST(YogaTest, min_max_percent_margin_percent_no_width_height) { - const YGConfigRef config = YGConfigNew(); - - const YGNodeRef root = YGNodeNewWithConfig(config); - YGNodeStyleSetWidth(root, 320); - - const YGNodeRef root_child0 = YGNodeNewWithConfig(config); - YGNodeInsertChild(root, root_child0, 0); - - const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config); - YGNodeStyleSetHeight(root_child0_child0, 450); - YGNodeInsertChild(root_child0, root_child0_child0, 0); - - const YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config); - YGNodeStyleSetFlexDirection(root_child0_child0_child0, YGFlexDirectionRow); - YGNodeStyleSetMarginPercent(root_child0_child0_child0, YGEdgeTop, 5); - YGNodeStyleSetMaxHeightPercent(root_child0_child0_child0, 10); - YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0); - - const YGNodeRef root_child0_child0_child0_child0 = - YGNodeNewWithConfig(config); - YGNodeSetMeasureFunc( - root_child0_child0_child0_child0, - _measureCk_test_label_shrink_based_on_height); - YGNodeInsertChild( - root_child0_child0_child0, root_child0_child0_child0_child0, 0); - - YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); - ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root)); - ASSERT_FLOAT_EQ(450, YGNodeLayoutGetHeight(root)); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); - ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root_child0)); - ASSERT_FLOAT_EQ(450, YGNodeLayoutGetHeight(root_child0)); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0)); - ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root_child0_child0)); - ASSERT_FLOAT_EQ(450, YGNodeLayoutGetHeight(root_child0_child0)); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0)); - ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child0)); - ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root_child0_child0_child0)); - ASSERT_FLOAT_EQ(45, YGNodeLayoutGetHeight(root_child0_child0_child0)); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0_child0)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0_child0)); - ASSERT_FLOAT_EQ(290, YGNodeLayoutGetWidth(root_child0_child0_child0_child0)); - ASSERT_FLOAT_EQ(45, YGNodeLayoutGetHeight(root_child0_child0_child0_child0)); - - YGNodeFreeRecursive(root); - - YGConfigFree(config); -} diff --git a/tests/YGPaddingTest.cpp b/tests/YGPaddingTest.cpp index bc3847d8..818c086d 100644 --- a/tests/YGPaddingTest.cpp +++ b/tests/YGPaddingTest.cpp @@ -1,9 +1,11 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + +// clang-format off // @Generated by gentest/gentest.rb from gentest/fixtures/YGPaddingTest.html #include diff --git a/tests/YGPercentageTest.cpp b/tests/YGPercentageTest.cpp index 805df24b..38f7f897 100644 --- a/tests/YGPercentageTest.cpp +++ b/tests/YGPercentageTest.cpp @@ -1,9 +1,11 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + +// clang-format off // @Generated by gentest/gentest.rb from gentest/fixtures/YGPercentageTest.html #include @@ -247,61 +249,6 @@ TEST(YogaTest, percentage_flex_basis_cross) { YGConfigFree(config); } -TEST(YogaTest, percentage_flex_basis_cross_min_height) { - const YGConfigRef config = YGConfigNew(); - - const YGNodeRef root = YGNodeNewWithConfig(config); - YGNodeStyleSetWidth(root, 200); - YGNodeStyleSetHeight(root, 200); - - const YGNodeRef root_child0 = YGNodeNewWithConfig(config); - YGNodeStyleSetFlexGrow(root_child0, 1); - YGNodeStyleSetMinHeightPercent(root_child0, 60); - YGNodeInsertChild(root, root_child0, 0); - - const YGNodeRef root_child1 = YGNodeNewWithConfig(config); - YGNodeStyleSetFlexGrow(root_child1, 2); - YGNodeStyleSetMinHeightPercent(root_child1, 10); - YGNodeInsertChild(root, root_child1, 1); - YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); - ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); - ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root)); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); - ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0)); - ASSERT_FLOAT_EQ(140, YGNodeLayoutGetHeight(root_child0)); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1)); - ASSERT_FLOAT_EQ(140, YGNodeLayoutGetTop(root_child1)); - ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1)); - ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child1)); - - YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); - ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root)); - ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root)); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); - ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0)); - ASSERT_FLOAT_EQ(140, YGNodeLayoutGetHeight(root_child0)); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1)); - ASSERT_FLOAT_EQ(140, YGNodeLayoutGetTop(root_child1)); - ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1)); - ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child1)); - - YGNodeFreeRecursive(root); - - YGConfigFree(config); -} - TEST(YogaTest, percentage_flex_basis_main_max_height) { const YGConfigRef config = YGConfigNew(); @@ -647,9 +594,7 @@ TEST(YogaTest, percentage_flex_basis_cross_min_width) { YGConfigFree(config); } -TEST( - YogaTest, - percentage_multiple_nested_with_padding_margin_and_percentage_values) { +TEST(YogaTest, percentage_multiple_nested_with_padding_margin_and_percentage_values) { const YGConfigRef config = YGConfigNew(); const YGNodeRef root = YGNodeNewWithConfig(config); @@ -1193,81 +1138,3 @@ TEST(YogaTest, percent_absolute_position) { YGConfigFree(config); } - -static YGSize _measureCk_test_label_shrink_based_on_height( - YGNodeRef node, - float width, - YGMeasureMode widthMode, - float height, - YGMeasureMode heightMode) { - - if (heightMode == YGMeasureModeAtMost) { - return YGSize{ - .width = 290, - .height = 103, - }; - } else { - return YGSize{ - .width = 290, - .height = height, - }; - } -} - -TEST(YogaTest, margin_percent_with_measure_func) { - const YGConfigRef config = YGConfigNew(); - - const YGNodeRef root = YGNodeNewWithConfig(config); - YGNodeStyleSetWidth(root, 320); - - const YGNodeRef root_child0 = YGNodeNewWithConfig(config); - YGNodeInsertChild(root, root_child0, 0); - - const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config); - YGNodeStyleSetHeight(root_child0_child0, 450); - YGNodeInsertChild(root_child0, root_child0_child0, 0); - - const YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config); - YGNodeStyleSetFlexDirection(root_child0_child0_child0, YGFlexDirectionRow); - YGNodeStyleSetMarginPercent(root_child0_child0_child0, YGEdgeTop, 5); - YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0); - - const YGNodeRef root_child0_child0_child0_child0 = - YGNodeNewWithConfig(config); - YGNodeSetMeasureFunc( - root_child0_child0_child0_child0, - _measureCk_test_label_shrink_based_on_height); - YGNodeInsertChild( - root_child0_child0_child0, root_child0_child0_child0_child0, 0); - - YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root)); - ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root)); - ASSERT_FLOAT_EQ(450, YGNodeLayoutGetHeight(root)); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0)); - ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root_child0)); - ASSERT_FLOAT_EQ(450, YGNodeLayoutGetHeight(root_child0)); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0)); - ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root_child0_child0)); - ASSERT_FLOAT_EQ(450, YGNodeLayoutGetHeight(root_child0_child0)); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0)); - ASSERT_FLOAT_EQ(16, YGNodeLayoutGetTop(root_child0_child0_child0)); - ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root_child0_child0_child0)); - ASSERT_FLOAT_EQ(103, YGNodeLayoutGetHeight(root_child0_child0_child0)); - - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0_child0)); - ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0_child0)); - ASSERT_FLOAT_EQ(290, YGNodeLayoutGetWidth(root_child0_child0_child0_child0)); - ASSERT_FLOAT_EQ(103, YGNodeLayoutGetHeight(root_child0_child0_child0_child0)); - - YGNodeFreeRecursive(root); - - YGConfigFree(config); -} diff --git a/tests/YGRoundingTest.cpp b/tests/YGRoundingTest.cpp index 1b3af640..63dfdad5 100644 --- a/tests/YGRoundingTest.cpp +++ b/tests/YGRoundingTest.cpp @@ -1,9 +1,11 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ + +// clang-format off // @Generated by gentest/gentest.rb from gentest/fixtures/YGRoundingTest.html #include diff --git a/tests/YGSizeOverflowTest.cpp b/tests/YGSizeOverflowTest.cpp index 4cfa0a68..62fb5087 100644 --- a/tests/YGSizeOverflowTest.cpp +++ b/tests/YGSizeOverflowTest.cpp @@ -1,11 +1,12 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. */ -// @Generated by gentest/gentest.rb from -// gentest/fixtures/YGSizeOverflowTest.html + +// clang-format off +// @Generated by gentest/gentest.rb from gentest/fixtures/YGSizeOverflowTest.html #include #include diff --git a/website/contents/contributing/testing.md b/website/contents/contributing/testing.md index 5c120032..a1808920 100644 --- a/website/contents/contributing/testing.md +++ b/website/contents/contributing/testing.md @@ -8,7 +8,7 @@ hasPlayground: false Yoga tries to be as close as possible to chrome in its flexbox behaviour. To ensure this most of Yoga's test suite is automatically generateded from -running the corresponding layout in chrome using a webdriver which then generates +running the corresponding layout in chrome using a webdriver which then generates C++ test which asserts that Yoga will produce matching outputs for that layout. ## Running the Test Suite @@ -34,12 +34,10 @@ Run `gentest/gentest.rb` to generate test code and re-run `buck test //:yoga` to validate the behavior. One test case will be generated for every root `div` in the input html with the string in the `id` corresponding to the test name. -You may need to install the latest watir gem (`gem install watir`) and -[ChromeDriver](https://sites.google.com/a/chromium.org/chromedriver/) to -run `gentest/gentest.rb` Ruby script. +You should run `bundle install` in the `gentest` directory to install dependencies for the `gentest/gentest.rb` Ruby script. ## Manual test For some aspects of Yoga we cannot generate a test using the test generation -infrastructure described earlier. For these cases we manually write a test in -the `/tests` directory. +infrastructure described earlier. For these cases we manually write a test in +the `/tests` directory. From 5a18ccdbe2f9363ddbe2d0bb78f3a7add2bc3ff8 Mon Sep 17 00:00:00 2001 From: Nick Gerleman Date: Thu, 29 Sep 2022 22:25:24 -0700 Subject: [PATCH 332/347] Fixup Enum Generator Summary: https://github.com/facebook/yoga/pull/1116 adds a new enum. The enum generator is out of date with copyright header, and some codemods, but it also looks like there were manual changes, types added, etc since generation. I fixed up the script to incorporate generating the changes folks made manually, and also added an enum that was previously only added manually to the C ABI. Changelog: [General][Fixed] - Fixup Yoga Enum Generator Reviewed By: yungsters Differential Revision: D39922252 fbshipit-source-id: b678fa9a43a896873d8c434745bdaf3f16fd991f --- csharp/Facebook.Yoga/YogaAlign.cs | 4 +- csharp/Facebook.Yoga/YogaDimension.cs | 4 +- csharp/Facebook.Yoga/YogaDirection.cs | 4 +- csharp/Facebook.Yoga/YogaDisplay.cs | 4 +- csharp/Facebook.Yoga/YogaEdge.cs | 4 +- .../Facebook.Yoga/YogaExperimentalFeature.cs | 4 +- csharp/Facebook.Yoga/YogaFlexDirection.cs | 4 +- csharp/Facebook.Yoga/YogaJustify.cs | 4 +- csharp/Facebook.Yoga/YogaLogLevel.cs | 4 +- csharp/Facebook.Yoga/YogaMeasureMode.cs | 4 +- csharp/Facebook.Yoga/YogaNodeType.cs | 4 +- csharp/Facebook.Yoga/YogaOverflow.cs | 4 +- csharp/Facebook.Yoga/YogaPositionType.cs | 5 +- csharp/Facebook.Yoga/YogaPrintOptions.cs | 4 +- csharp/Facebook.Yoga/YogaUnit.cs | 4 +- csharp/Facebook.Yoga/YogaWrap.cs | 4 +- enums.py | 109 ++++++++++++----- java/com/facebook/yoga/YogaAlign.java | 2 + java/com/facebook/yoga/YogaDimension.java | 2 + java/com/facebook/yoga/YogaDirection.java | 2 + java/com/facebook/yoga/YogaDisplay.java | 2 + java/com/facebook/yoga/YogaEdge.java | 2 + .../yoga/YogaExperimentalFeature.java | 2 + java/com/facebook/yoga/YogaFlexDirection.java | 2 + java/com/facebook/yoga/YogaJustify.java | 5 +- java/com/facebook/yoga/YogaLogLevel.java | 2 + java/com/facebook/yoga/YogaMeasureMode.java | 2 + java/com/facebook/yoga/YogaNodeType.java | 2 + java/com/facebook/yoga/YogaOverflow.java | 2 + java/com/facebook/yoga/YogaPositionType.java | 2 + java/com/facebook/yoga/YogaPrintOptions.java | 2 + java/com/facebook/yoga/YogaUnit.java | 2 + java/com/facebook/yoga/YogaWrap.java | 2 + javascript/sources/YGEnums.js | 114 +++++++++++------- javascript/sources/entry-browser.js | 6 +- javascript/sources/entry-common.js | 15 +-- javascript/sources/entry-node.js | 6 +- .../components/Playground/src/LayoutRecord.js | 11 +- yoga/YGEnums.cpp | 2 + yoga/YGEnums.h | 76 ++++-------- yoga/YGMacros.h | 43 +++++++ 41 files changed, 320 insertions(+), 162 deletions(-) diff --git a/csharp/Facebook.Yoga/YogaAlign.cs b/csharp/Facebook.Yoga/YogaAlign.cs index 7a47e81b..b80987bb 100644 --- a/csharp/Facebook.Yoga/YogaAlign.cs +++ b/csharp/Facebook.Yoga/YogaAlign.cs @@ -1,10 +1,12 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + namespace Facebook.Yoga { public enum YogaAlign diff --git a/csharp/Facebook.Yoga/YogaDimension.cs b/csharp/Facebook.Yoga/YogaDimension.cs index db2fba3f..33ac99bd 100644 --- a/csharp/Facebook.Yoga/YogaDimension.cs +++ b/csharp/Facebook.Yoga/YogaDimension.cs @@ -1,10 +1,12 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + namespace Facebook.Yoga { public enum YogaDimension diff --git a/csharp/Facebook.Yoga/YogaDirection.cs b/csharp/Facebook.Yoga/YogaDirection.cs index 81797bf4..de31a0bd 100644 --- a/csharp/Facebook.Yoga/YogaDirection.cs +++ b/csharp/Facebook.Yoga/YogaDirection.cs @@ -1,10 +1,12 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + namespace Facebook.Yoga { public enum YogaDirection diff --git a/csharp/Facebook.Yoga/YogaDisplay.cs b/csharp/Facebook.Yoga/YogaDisplay.cs index 065c3fe9..6e7ee6e2 100644 --- a/csharp/Facebook.Yoga/YogaDisplay.cs +++ b/csharp/Facebook.Yoga/YogaDisplay.cs @@ -1,10 +1,12 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + namespace Facebook.Yoga { public enum YogaDisplay diff --git a/csharp/Facebook.Yoga/YogaEdge.cs b/csharp/Facebook.Yoga/YogaEdge.cs index d3e0ad9d..2d1937d0 100644 --- a/csharp/Facebook.Yoga/YogaEdge.cs +++ b/csharp/Facebook.Yoga/YogaEdge.cs @@ -1,10 +1,12 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + namespace Facebook.Yoga { public enum YogaEdge diff --git a/csharp/Facebook.Yoga/YogaExperimentalFeature.cs b/csharp/Facebook.Yoga/YogaExperimentalFeature.cs index 0e7879a6..c78a77ba 100644 --- a/csharp/Facebook.Yoga/YogaExperimentalFeature.cs +++ b/csharp/Facebook.Yoga/YogaExperimentalFeature.cs @@ -1,10 +1,12 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + namespace Facebook.Yoga { public enum YogaExperimentalFeature diff --git a/csharp/Facebook.Yoga/YogaFlexDirection.cs b/csharp/Facebook.Yoga/YogaFlexDirection.cs index 1d4f9c12..38d75ffb 100644 --- a/csharp/Facebook.Yoga/YogaFlexDirection.cs +++ b/csharp/Facebook.Yoga/YogaFlexDirection.cs @@ -1,10 +1,12 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + namespace Facebook.Yoga { public enum YogaFlexDirection diff --git a/csharp/Facebook.Yoga/YogaJustify.cs b/csharp/Facebook.Yoga/YogaJustify.cs index 09f4d5cc..696325b6 100644 --- a/csharp/Facebook.Yoga/YogaJustify.cs +++ b/csharp/Facebook.Yoga/YogaJustify.cs @@ -1,10 +1,12 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + namespace Facebook.Yoga { public enum YogaJustify diff --git a/csharp/Facebook.Yoga/YogaLogLevel.cs b/csharp/Facebook.Yoga/YogaLogLevel.cs index 9f587ab7..b1236e63 100644 --- a/csharp/Facebook.Yoga/YogaLogLevel.cs +++ b/csharp/Facebook.Yoga/YogaLogLevel.cs @@ -1,10 +1,12 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + namespace Facebook.Yoga { public enum YogaLogLevel diff --git a/csharp/Facebook.Yoga/YogaMeasureMode.cs b/csharp/Facebook.Yoga/YogaMeasureMode.cs index 457f1fd7..6c9b8c3b 100644 --- a/csharp/Facebook.Yoga/YogaMeasureMode.cs +++ b/csharp/Facebook.Yoga/YogaMeasureMode.cs @@ -1,10 +1,12 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + namespace Facebook.Yoga { public enum YogaMeasureMode diff --git a/csharp/Facebook.Yoga/YogaNodeType.cs b/csharp/Facebook.Yoga/YogaNodeType.cs index 9a17c4d1..8834589b 100644 --- a/csharp/Facebook.Yoga/YogaNodeType.cs +++ b/csharp/Facebook.Yoga/YogaNodeType.cs @@ -1,10 +1,12 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + namespace Facebook.Yoga { public enum YogaNodeType diff --git a/csharp/Facebook.Yoga/YogaOverflow.cs b/csharp/Facebook.Yoga/YogaOverflow.cs index b2a99e5c..02b1f805 100644 --- a/csharp/Facebook.Yoga/YogaOverflow.cs +++ b/csharp/Facebook.Yoga/YogaOverflow.cs @@ -1,10 +1,12 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + namespace Facebook.Yoga { public enum YogaOverflow diff --git a/csharp/Facebook.Yoga/YogaPositionType.cs b/csharp/Facebook.Yoga/YogaPositionType.cs index d63b7eab..f1ac93ad 100644 --- a/csharp/Facebook.Yoga/YogaPositionType.cs +++ b/csharp/Facebook.Yoga/YogaPositionType.cs @@ -1,14 +1,17 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + namespace Facebook.Yoga { public enum YogaPositionType { + Static, Relative, Absolute, } diff --git a/csharp/Facebook.Yoga/YogaPrintOptions.cs b/csharp/Facebook.Yoga/YogaPrintOptions.cs index 82183db2..a268f7b4 100644 --- a/csharp/Facebook.Yoga/YogaPrintOptions.cs +++ b/csharp/Facebook.Yoga/YogaPrintOptions.cs @@ -1,10 +1,12 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + namespace Facebook.Yoga { [System.Flags] diff --git a/csharp/Facebook.Yoga/YogaUnit.cs b/csharp/Facebook.Yoga/YogaUnit.cs index bb424be1..0b62efc0 100644 --- a/csharp/Facebook.Yoga/YogaUnit.cs +++ b/csharp/Facebook.Yoga/YogaUnit.cs @@ -1,10 +1,12 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + namespace Facebook.Yoga { public enum YogaUnit diff --git a/csharp/Facebook.Yoga/YogaWrap.cs b/csharp/Facebook.Yoga/YogaWrap.cs index 541e06f9..a1835777 100644 --- a/csharp/Facebook.Yoga/YogaWrap.cs +++ b/csharp/Facebook.Yoga/YogaWrap.cs @@ -1,10 +1,12 @@ /* - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + namespace Facebook.Yoga { public enum YogaWrap diff --git a/enums.py b/enums.py index 4fe43f7b..81966bee 100644 --- a/enums.py +++ b/enums.py @@ -1,4 +1,4 @@ -# Copyright (c) Facebook, Inc. and its affiliates. +# Copyright (c) Meta Platforms, Inc. and affiliates. # # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. @@ -31,7 +31,7 @@ ENUMS = { "SpaceBetween", "SpaceAround", ], - "PositionType": ["Relative", "Absolute"], + "PositionType": ["Static", "Relative", "Absolute"], "Display": ["Flex", "None"], "Wrap": ["NoWrap", "Wrap", "WrapReverse"], "MeasureMode": ["Undefined", "Exactly", "AtMost"], @@ -56,14 +56,26 @@ ENUMS = { "PrintOptions": [("Layout", 1), ("Style", 2), ("Children", 4)], } -LICENSE = """/** - * Copyright (c) Facebook, Inc. and its affiliates. +# Generated Java enums used to emit @DoNotStrip, but D17519844 removed them +# manually from all but YogaLogLevel. TODO: Is it safe to remove from it as +# well? +DO_NOT_STRIP = ["LogLevel"] + + +def get_license(ext): + prologue = "/**" if ext == "js" else "/*" + return """{} + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ -""" +// @generated by enums.py + +""".format( + prologue + ) def to_java_upper(symbol): @@ -92,32 +104,40 @@ root = os.path.dirname(os.path.abspath(__file__)) # write out C & Objective-C headers with open(root + "/yoga/YGEnums.h", "w") as f: - f.write(LICENSE) - f.write("#pragma once\n\n") + f.write(get_license("cpp")) + f.write("#pragma once\n") + f.write("// clang-format: off\n\n") f.write('#include "YGMacros.h"\n\n') - f.write("YG_EXTERN_C_BEGIN\n\n") - for name, values in sorted(ENUMS.items()): - f.write("#define YG%sCount %s\n" % (name, len(values))) - f.write("typedef YG_ENUM_BEGIN(YG%s) {\n" % name) + + f.write('YG_EXTERN_C_BEGIN\n\n') + items = sorted(ENUMS.items()) + for name, values in items: + if (isinstance(values[0], tuple)): + f.write("YG_ENUM_DECL(\n") + else: + f.write("YG_ENUM_SEQ_DECL(\n") + + f.write(" YG%s,\n" % name) for value in values: if isinstance(value, tuple): - f.write(" YG%s%s = %d,\n" % (name, value[0], value[1])) + f.write(" YG%s%s = %d" % (name, value[0], value[1])) else: - f.write(" YG%s%s,\n" % (name, value)) - f.write("} YG_ENUM_END(YG%s);\n" % name) - f.write( - "WIN_EXPORT const char *YG%sToString(const YG%s value);\n" % (name, name) - ) + f.write(" YG%s%s" % (name, value)) + if value == values[-1]: + f.write(")\n") + else: + f.write(",\n") f.write("\n") f.write("YG_EXTERN_C_END\n") # write out C body for printing with open(root + "/yoga/YGEnums.cpp", "w") as f: - f.write(LICENSE) + f.write(get_license("cpp")) f.write('#include "YGEnums.h"\n\n') - for name, values in sorted(ENUMS.items()): - f.write("const char *YG%sToString(const YG%s value){\n" % (name, name)) - f.write(" switch(value){\n") + items = sorted(ENUMS.items()) + for name, values in items: + f.write("const char* YG%sToString(const YG%s value) {\n" % (name, name)) + f.write(" switch (value) {\n") for value in values: if isinstance(value, tuple): f.write(" case YG%s%s:\n" % (name, value[0])) @@ -127,15 +147,18 @@ with open(root + "/yoga/YGEnums.cpp", "w") as f: f.write(' return "%s";\n' % to_log_lower(value)) f.write(" }\n") f.write(' return "unknown";\n') - f.write("}\n\n") + f.write("}\n") + if name != items[-1][0]: + f.write("\n") # write out java files for name, values in sorted(ENUMS.items()): with open(root + "/java/com/facebook/yoga/Yoga%s.java" % name, "w") as f: - f.write(LICENSE.replace("/**", "/*", 1)) + f.write(get_license("java")) f.write("package com.facebook.yoga;\n\n") - f.write("import com.facebook.proguard.annotations.DoNotStrip;\n\n") - f.write("@DoNotStrip\n") + if name in DO_NOT_STRIP: + f.write("import com.facebook.proguard.annotations.DoNotStrip;\n\n") + f.write("@DoNotStrip\n") f.write("public enum Yoga%s {\n" % name) if len(values) > 0: for value in values: @@ -150,7 +173,7 @@ for name, values in sorted(ENUMS.items()): else: f.write("__EMPTY(-1);") f.write("\n") - f.write(" private int mIntValue;\n") + f.write(" private final int mIntValue;\n") f.write("\n") f.write(" Yoga%s(int intValue) {\n" % name) f.write(" mIntValue = intValue;\n") @@ -160,6 +183,8 @@ for name, values in sorted(ENUMS.items()): f.write(" return mIntValue;\n") f.write(" }\n") f.write("\n") + if name in DO_NOT_STRIP: + f.write(" @DoNotStrip\n") f.write(" public static Yoga%s fromInt(int value) {\n" % name) f.write(" switch (value) {\n") for value in values: @@ -182,7 +207,7 @@ for name, values in sorted(ENUMS.items()): # write out csharp files for name, values in sorted(ENUMS.items()): with open(root + "/csharp/Facebook.Yoga/Yoga%s.cs" % name, "w") as f: - f.write(LICENSE) + f.write(get_license("cs")) f.write("namespace Facebook.Yoga\n{\n") if isinstance(next(iter(values or []), None), tuple): f.write(" [System.Flags]\n") @@ -197,9 +222,12 @@ for name, values in sorted(ENUMS.items()): # write out javascript file with open(root + "/javascript/sources/YGEnums.js", "w") as f: - f.write(LICENSE) - f.write("module.exports = {\n\n") - for name, values in sorted(ENUMS.items()): + f.write(get_license("js")) + f.write("// @flow\n") + f.write("// @format\n") + f.write("const CONSTANTS = {\n") + items = sorted(ENUMS.items()) + for name, values in items: f.write(" %s_COUNT: %s,\n" % (to_java_upper(name), len(values))) base = 0 for value in values: @@ -214,5 +242,24 @@ with open(root + "/javascript/sources/YGEnums.js", "w") as f: " %s_%s: %d,\n" % (to_java_upper(name), to_java_upper(value), base) ) base += 1 - f.write("\n") + + if name != items[-1][0]: + f.write("\n") f.write("};\n") + + for name, values in sorted(ENUMS.items()): + f.write("export type Yoga${} =\n".format(name)) + for value in values: + unpackedValue = value[0] if isinstance(value, tuple) else value + f.write( + " | typeof CONSTANTS.{}_{}".format( + to_java_upper(name), to_java_upper(unpackedValue) + ) + ) + if values[-1] == value: + f.write(";\n") + else: + f.write("\n") + + f.write("\n") + f.write("module.exports = CONSTANTS;\n") diff --git a/java/com/facebook/yoga/YogaAlign.java b/java/com/facebook/yoga/YogaAlign.java index 5411e39f..a60d77e0 100644 --- a/java/com/facebook/yoga/YogaAlign.java +++ b/java/com/facebook/yoga/YogaAlign.java @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + package com.facebook.yoga; public enum YogaAlign { diff --git a/java/com/facebook/yoga/YogaDimension.java b/java/com/facebook/yoga/YogaDimension.java index eeecd85e..a949ddc3 100644 --- a/java/com/facebook/yoga/YogaDimension.java +++ b/java/com/facebook/yoga/YogaDimension.java @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + package com.facebook.yoga; public enum YogaDimension { diff --git a/java/com/facebook/yoga/YogaDirection.java b/java/com/facebook/yoga/YogaDirection.java index 344c0f80..7cedba3a 100644 --- a/java/com/facebook/yoga/YogaDirection.java +++ b/java/com/facebook/yoga/YogaDirection.java @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + package com.facebook.yoga; public enum YogaDirection { diff --git a/java/com/facebook/yoga/YogaDisplay.java b/java/com/facebook/yoga/YogaDisplay.java index aa94b053..d4c4685f 100644 --- a/java/com/facebook/yoga/YogaDisplay.java +++ b/java/com/facebook/yoga/YogaDisplay.java @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + package com.facebook.yoga; public enum YogaDisplay { diff --git a/java/com/facebook/yoga/YogaEdge.java b/java/com/facebook/yoga/YogaEdge.java index 929b3315..6b915348 100644 --- a/java/com/facebook/yoga/YogaEdge.java +++ b/java/com/facebook/yoga/YogaEdge.java @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + package com.facebook.yoga; public enum YogaEdge { diff --git a/java/com/facebook/yoga/YogaExperimentalFeature.java b/java/com/facebook/yoga/YogaExperimentalFeature.java index f54c7b6e..3fabbb91 100644 --- a/java/com/facebook/yoga/YogaExperimentalFeature.java +++ b/java/com/facebook/yoga/YogaExperimentalFeature.java @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + package com.facebook.yoga; public enum YogaExperimentalFeature { diff --git a/java/com/facebook/yoga/YogaFlexDirection.java b/java/com/facebook/yoga/YogaFlexDirection.java index c314c0cf..719888a1 100644 --- a/java/com/facebook/yoga/YogaFlexDirection.java +++ b/java/com/facebook/yoga/YogaFlexDirection.java @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + package com.facebook.yoga; public enum YogaFlexDirection { diff --git a/java/com/facebook/yoga/YogaJustify.java b/java/com/facebook/yoga/YogaJustify.java index e19213f7..4be1ed71 100644 --- a/java/com/facebook/yoga/YogaJustify.java +++ b/java/com/facebook/yoga/YogaJustify.java @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + package com.facebook.yoga; public enum YogaJustify { @@ -32,8 +34,7 @@ public enum YogaJustify { case 2: return FLEX_END; case 3: return SPACE_BETWEEN; case 4: return SPACE_AROUND; - case 5: - return SPACE_EVENLY; + case 5: return SPACE_EVENLY; default: throw new IllegalArgumentException("Unknown enum value: " + value); } } diff --git a/java/com/facebook/yoga/YogaLogLevel.java b/java/com/facebook/yoga/YogaLogLevel.java index f105145a..85076706 100644 --- a/java/com/facebook/yoga/YogaLogLevel.java +++ b/java/com/facebook/yoga/YogaLogLevel.java @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + package com.facebook.yoga; import com.facebook.proguard.annotations.DoNotStrip; diff --git a/java/com/facebook/yoga/YogaMeasureMode.java b/java/com/facebook/yoga/YogaMeasureMode.java index 1750d2a1..0c77c238 100644 --- a/java/com/facebook/yoga/YogaMeasureMode.java +++ b/java/com/facebook/yoga/YogaMeasureMode.java @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + package com.facebook.yoga; public enum YogaMeasureMode { diff --git a/java/com/facebook/yoga/YogaNodeType.java b/java/com/facebook/yoga/YogaNodeType.java index 1d90eec3..b8828014 100644 --- a/java/com/facebook/yoga/YogaNodeType.java +++ b/java/com/facebook/yoga/YogaNodeType.java @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + package com.facebook.yoga; public enum YogaNodeType { diff --git a/java/com/facebook/yoga/YogaOverflow.java b/java/com/facebook/yoga/YogaOverflow.java index 321d4e00..8e59966b 100644 --- a/java/com/facebook/yoga/YogaOverflow.java +++ b/java/com/facebook/yoga/YogaOverflow.java @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + package com.facebook.yoga; public enum YogaOverflow { diff --git a/java/com/facebook/yoga/YogaPositionType.java b/java/com/facebook/yoga/YogaPositionType.java index 6663a0ee..cf735fbe 100644 --- a/java/com/facebook/yoga/YogaPositionType.java +++ b/java/com/facebook/yoga/YogaPositionType.java @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + package com.facebook.yoga; public enum YogaPositionType { diff --git a/java/com/facebook/yoga/YogaPrintOptions.java b/java/com/facebook/yoga/YogaPrintOptions.java index 8c1a34d9..54eacc51 100644 --- a/java/com/facebook/yoga/YogaPrintOptions.java +++ b/java/com/facebook/yoga/YogaPrintOptions.java @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + package com.facebook.yoga; public enum YogaPrintOptions { diff --git a/java/com/facebook/yoga/YogaUnit.java b/java/com/facebook/yoga/YogaUnit.java index e2ab8bff..3614ec10 100644 --- a/java/com/facebook/yoga/YogaUnit.java +++ b/java/com/facebook/yoga/YogaUnit.java @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + package com.facebook.yoga; public enum YogaUnit { diff --git a/java/com/facebook/yoga/YogaWrap.java b/java/com/facebook/yoga/YogaWrap.java index e7e60143..cf87e9ef 100644 --- a/java/com/facebook/yoga/YogaWrap.java +++ b/java/com/facebook/yoga/YogaWrap.java @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + package com.facebook.yoga; public enum YogaWrap { diff --git a/javascript/sources/YGEnums.js b/javascript/sources/YGEnums.js index 4fd232b3..c3d4cb3c 100644 --- a/javascript/sources/YGEnums.js +++ b/javascript/sources/YGEnums.js @@ -1,13 +1,14 @@ /** - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @flow - * @format */ +// @generated by enums.py + +// @flow +// @format const CONSTANTS = { ALIGN_COUNT: 8, ALIGN_AUTO: 0, @@ -82,9 +83,10 @@ const CONSTANTS = { OVERFLOW_HIDDEN: 1, OVERFLOW_SCROLL: 2, - POSITION_TYPE_COUNT: 2, - POSITION_TYPE_RELATIVE: 0, - POSITION_TYPE_ABSOLUTE: 1, + POSITION_TYPE_COUNT: 3, + POSITION_TYPE_STATIC: 0, + POSITION_TYPE_RELATIVE: 1, + POSITION_TYPE_ABSOLUTE: 2, PRINT_OPTIONS_COUNT: 3, PRINT_OPTIONS_LAYOUT: 1, @@ -102,41 +104,28 @@ const CONSTANTS = { WRAP_WRAP: 1, WRAP_WRAP_REVERSE: 2, }; - -export type Yoga$JustifyContent = - | typeof CONSTANTS.JUSTIFY_CENTER - | typeof CONSTANTS.JUSTIFY_FLEX_END - | typeof CONSTANTS.JUSTIFY_FLEX_START - | typeof CONSTANTS.JUSTIFY_SPACE_AROUND - | typeof CONSTANTS.JUSTIFY_SPACE_BETWEEN - | typeof CONSTANTS.JUSTIFY_SPACE_EVENLY; - export type Yoga$Align = | typeof CONSTANTS.ALIGN_AUTO - | typeof CONSTANTS.ALIGN_BASELINE + | typeof CONSTANTS.ALIGN_FLEX_START | typeof CONSTANTS.ALIGN_CENTER | typeof CONSTANTS.ALIGN_FLEX_END - | typeof CONSTANTS.ALIGN_FLEX_START - | typeof CONSTANTS.ALIGN_SPACE_AROUND + | typeof CONSTANTS.ALIGN_STRETCH + | typeof CONSTANTS.ALIGN_BASELINE | typeof CONSTANTS.ALIGN_SPACE_BETWEEN - | typeof CONSTANTS.ALIGN_STRETCH; + | typeof CONSTANTS.ALIGN_SPACE_AROUND; -export type Yoga$FlexDirection = - | typeof CONSTANTS.FLEX_DIRECTION_COLUMN - | typeof CONSTANTS.FLEX_DIRECTION_COLUMN_REVERSE - | typeof CONSTANTS.FLEX_DIRECTION_COUNT - | typeof CONSTANTS.FLEX_DIRECTION_ROW - | typeof CONSTANTS.FLEX_DIRECTION_ROW_REVERSE; +export type Yoga$Dimension = + | typeof CONSTANTS.DIMENSION_WIDTH + | typeof CONSTANTS.DIMENSION_HEIGHT; export type Yoga$Direction = | typeof CONSTANTS.DIRECTION_INHERIT | typeof CONSTANTS.DIRECTION_LTR | typeof CONSTANTS.DIRECTION_RTL; -export type Yoga$FlexWrap = - | typeof CONSTANTS.WRAP_NO_WRAP - | typeof CONSTANTS.WRAP_WRAP - | typeof CONSTANTS.WRAP_WRAP_REVERSE; +export type Yoga$Display = + | typeof CONSTANTS.DISPLAY_FLEX + | typeof CONSTANTS.DISPLAY_NONE; export type Yoga$Edge = | typeof CONSTANTS.EDGE_LEFT @@ -149,25 +138,64 @@ export type Yoga$Edge = | typeof CONSTANTS.EDGE_VERTICAL | typeof CONSTANTS.EDGE_ALL; -export type Yoga$Display = - | typeof CONSTANTS.DISPLAY_FLEX - | typeof CONSTANTS.DISPLAY_NONE; +export type Yoga$ExperimentalFeature = + | typeof CONSTANTS.EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS; -export type Yoga$Unit = - | typeof CONSTANTS.UNIT_AUTO - | typeof CONSTANTS.UNIT_PERCENT - | typeof CONSTANTS.UNIT_POINT - | typeof CONSTANTS.UNIT_UNDEFINED; +export type Yoga$FlexDirection = + | typeof CONSTANTS.FLEX_DIRECTION_COLUMN + | typeof CONSTANTS.FLEX_DIRECTION_COLUMN_REVERSE + | typeof CONSTANTS.FLEX_DIRECTION_ROW + | typeof CONSTANTS.FLEX_DIRECTION_ROW_REVERSE; + +export type Yoga$Justify = + | typeof CONSTANTS.JUSTIFY_FLEX_START + | typeof CONSTANTS.JUSTIFY_CENTER + | typeof CONSTANTS.JUSTIFY_FLEX_END + | typeof CONSTANTS.JUSTIFY_SPACE_BETWEEN + | typeof CONSTANTS.JUSTIFY_SPACE_AROUND + | typeof CONSTANTS.JUSTIFY_SPACE_EVENLY; + +export type Yoga$LogLevel = + | typeof CONSTANTS.LOG_LEVEL_ERROR + | typeof CONSTANTS.LOG_LEVEL_WARN + | typeof CONSTANTS.LOG_LEVEL_INFO + | typeof CONSTANTS.LOG_LEVEL_DEBUG + | typeof CONSTANTS.LOG_LEVEL_VERBOSE + | typeof CONSTANTS.LOG_LEVEL_FATAL; + +export type Yoga$MeasureMode = + | typeof CONSTANTS.MEASURE_MODE_UNDEFINED + | typeof CONSTANTS.MEASURE_MODE_EXACTLY + | typeof CONSTANTS.MEASURE_MODE_AT_MOST; + +export type Yoga$NodeType = + | typeof CONSTANTS.NODE_TYPE_DEFAULT + | typeof CONSTANTS.NODE_TYPE_TEXT; export type Yoga$Overflow = + | typeof CONSTANTS.OVERFLOW_VISIBLE | typeof CONSTANTS.OVERFLOW_HIDDEN - | typeof CONSTANTS.OVERFLOW_SCROLL - | typeof CONSTANTS.OVERFLOW_VISIBLE; + | typeof CONSTANTS.OVERFLOW_SCROLL; export type Yoga$PositionType = - | typeof CONSTANTS.POSITION_TYPE_ABSOLUTE - | typeof CONSTANTS.POSITION_TYPE_RELATIVE; + | typeof CONSTANTS.POSITION_TYPE_STATIC + | typeof CONSTANTS.POSITION_TYPE_RELATIVE + | typeof CONSTANTS.POSITION_TYPE_ABSOLUTE; -export type Yoga$ExperimentalFeature = typeof CONSTANTS.EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS; +export type Yoga$PrintOptions = + | typeof CONSTANTS.PRINT_OPTIONS_LAYOUT + | typeof CONSTANTS.PRINT_OPTIONS_STYLE + | typeof CONSTANTS.PRINT_OPTIONS_CHILDREN; + +export type Yoga$Unit = + | typeof CONSTANTS.UNIT_UNDEFINED + | typeof CONSTANTS.UNIT_POINT + | typeof CONSTANTS.UNIT_PERCENT + | typeof CONSTANTS.UNIT_AUTO; + +export type Yoga$Wrap = + | typeof CONSTANTS.WRAP_NO_WRAP + | typeof CONSTANTS.WRAP_WRAP + | typeof CONSTANTS.WRAP_WRAP_REVERSE; module.exports = CONSTANTS; diff --git a/javascript/sources/entry-browser.js b/javascript/sources/entry-browser.js index cd162ed5..5007b9f2 100644 --- a/javascript/sources/entry-browser.js +++ b/javascript/sources/entry-browser.js @@ -1,5 +1,5 @@ /** - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. @@ -38,11 +38,11 @@ if (!ran) { module.exports = Yoga(ret.bind, ret.lib); export type { - Yoga$JustifyContent, + Yoga$Justify, Yoga$Align, Yoga$FlexDirection, Yoga$Direction, - Yoga$FlexWrap, + Yoga$Wrap, Yoga$Edge, Yoga$Display, Yoga$Unit, diff --git a/javascript/sources/entry-common.js b/javascript/sources/entry-common.js index b9ade022..1f885e6e 100644 --- a/javascript/sources/entry-common.js +++ b/javascript/sources/entry-common.js @@ -1,5 +1,5 @@ /** - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. @@ -8,16 +8,17 @@ * @format */ + const CONSTANTS = require('./YGEnums'); import type { Yoga$Edge, - Yoga$FlexWrap, + Yoga$Wrap, Yoga$Align, Yoga$FlexDirection, Yoga$Direction, Yoga$PositionType, Yoga$Overflow, - Yoga$JustifyContent, + Yoga$Justify, Yoga$Display, Yoga$ExperimentalFeature, } from './YGEnums'; @@ -151,9 +152,9 @@ export type Yoga$Node = { getFlexDirection(): Yoga$FlexDirection, getFlexGrow(): number, getFlexShrink(): number, - getFlexWrap(): Yoga$FlexWrap, + getFlexWrap(): Yoga$Wrap, getHeight(): Value, - getJustifyContent(): Yoga$JustifyContent, + getJustifyContent(): Yoga$Justify, getMargin(edge: Yoga$Edge): Value, getMaxHeight(): Value, getMaxWidth(): Value, @@ -182,11 +183,11 @@ export type Yoga$Node = { setFlexDirection(flexDirection: Yoga$FlexDirection): void, setFlexGrow(flexGrow: number): void, setFlexShrink(flexShrink: number): void, - setFlexWrap(flexWrap: Yoga$FlexWrap): void, + setFlexWrap(flexWrap: Yoga$Wrap): void, setHeight(height: number | string): void, setHeightAuto(): void, setHeightPercent(height: number): void, - setJustifyContent(justifyContent: Yoga$JustifyContent): void, + setJustifyContent(justifyContent: Yoga$Justify): void, setMargin(edge: Yoga$Edge, margin: number): void, setMarginAuto(edge: Yoga$Edge): void, setMarginPercent(edge: Yoga$Edge, margin: number): void, diff --git a/javascript/sources/entry-node.js b/javascript/sources/entry-node.js index 3cd67643..c9243be6 100644 --- a/javascript/sources/entry-node.js +++ b/javascript/sources/entry-node.js @@ -1,5 +1,5 @@ /** - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. @@ -13,11 +13,11 @@ const nbind = require('nbind'); const {bind, lib} = nbind.init(__dirname + '/../'); module.exports = Yoga(bind, lib); export type { - Yoga$JustifyContent, + Yoga$Justify, Yoga$Align, Yoga$FlexDirection, Yoga$Direction, - Yoga$FlexWrap, + Yoga$Wrap, Yoga$Edge, Yoga$Display, Yoga$Unit, diff --git a/website/src/components/Playground/src/LayoutRecord.js b/website/src/components/Playground/src/LayoutRecord.js index 2574f546..3113a313 100644 --- a/website/src/components/Playground/src/LayoutRecord.js +++ b/website/src/components/Playground/src/LayoutRecord.js @@ -1,5 +1,5 @@ /** - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. @@ -8,6 +8,7 @@ * @format */ + import {Record, List} from 'immutable'; import type {RecordOf} from 'immutable'; import PositionRecord from './PositionRecord'; @@ -16,9 +17,9 @@ import yoga from 'yoga-layout/dist/entry-browser'; import type { Yoga$Align, - Yoga$JustifyContent, + Yoga$Justify, Yoga$FlexDirection, - Yoga$FlexWrap, + Yoga$Wrap, Yoga$PositionType, } from 'yoga-layout'; @@ -29,7 +30,7 @@ export type LayoutRecordT = RecordOf<{ minHeight?: ?number, maxWidth?: ?number, maxHeight?: ?number, - justifyContent?: Yoga$JustifyContent, + justifyContent?: Yoga$Justify, padding: PositionRecordT, border: PositionRecordT, margin: PositionRecordT, @@ -43,7 +44,7 @@ export type LayoutRecordT = RecordOf<{ flexGrow?: number, flexShrink?: number, padding?: number, - flexWrap?: Yoga$FlexWrap, + flexWrap?: Yoga$Wrap, aspectRatio?: number, children?: List, minWidth?: number, diff --git a/yoga/YGEnums.cpp b/yoga/YGEnums.cpp index b97342d8..b67b0dac 100644 --- a/yoga/YGEnums.cpp +++ b/yoga/YGEnums.cpp @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + #include "YGEnums.h" const char* YGAlignToString(const YGAlign value) { diff --git a/yoga/YGEnums.h b/yoga/YGEnums.h index c14daaa1..9d6abfb1 100644 --- a/yoga/YGEnums.h +++ b/yoga/YGEnums.h @@ -5,53 +5,13 @@ * LICENSE file in the root directory of this source tree. */ +// @generated by enums.py + #pragma once +// clang-format: off #include "YGMacros.h" -#ifdef __cplusplus -namespace facebook { -namespace yoga { -namespace enums { - -template -constexpr int count(); // can't use `= delete` due to a defect in clang < 3.9 - -namespace detail { -template -constexpr int n() { - return sizeof...(xs); -} -} // namespace detail - -} // namespace enums -} // namespace yoga -} // namespace facebook -#endif - -#define YG_ENUM_DECL(NAME, ...) \ - typedef YG_ENUM_BEGIN(NAME){__VA_ARGS__} YG_ENUM_END(NAME); \ - WIN_EXPORT const char* NAME##ToString(NAME); - -#ifdef __cplusplus -#define YG_ENUM_SEQ_DECL(NAME, ...) \ - YG_ENUM_DECL(NAME, __VA_ARGS__) \ - YG_EXTERN_C_END \ - namespace facebook { \ - namespace yoga { \ - namespace enums { \ - template <> \ - constexpr int count() { \ - return detail::n<__VA_ARGS__>(); \ - } \ - } \ - } \ - } \ - YG_EXTERN_C_BEGIN -#else -#define YG_ENUM_SEQ_DECL YG_ENUM_DECL -#endif - YG_EXTERN_C_BEGIN YG_ENUM_SEQ_DECL( @@ -63,9 +23,12 @@ YG_ENUM_SEQ_DECL( YGAlignStretch, YGAlignBaseline, YGAlignSpaceBetween, - YGAlignSpaceAround); + YGAlignSpaceAround) -YG_ENUM_SEQ_DECL(YGDimension, YGDimensionWidth, YGDimensionHeight) +YG_ENUM_SEQ_DECL( + YGDimension, + YGDimensionWidth, + YGDimensionHeight) YG_ENUM_SEQ_DECL( YGDirection, @@ -73,7 +36,10 @@ YG_ENUM_SEQ_DECL( YGDirectionLTR, YGDirectionRTL) -YG_ENUM_SEQ_DECL(YGDisplay, YGDisplayFlex, YGDisplayNone) +YG_ENUM_SEQ_DECL( + YGDisplay, + YGDisplayFlex, + YGDisplayNone) YG_ENUM_SEQ_DECL( YGEdge, @@ -87,7 +53,9 @@ YG_ENUM_SEQ_DECL( YGEdgeVertical, YGEdgeAll) -YG_ENUM_SEQ_DECL(YGExperimentalFeature, YGExperimentalFeatureWebFlexBasis) +YG_ENUM_SEQ_DECL( + YGExperimentalFeature, + YGExperimentalFeatureWebFlexBasis) YG_ENUM_SEQ_DECL( YGFlexDirection, @@ -120,7 +88,10 @@ YG_ENUM_SEQ_DECL( YGMeasureModeExactly, YGMeasureModeAtMost) -YG_ENUM_SEQ_DECL(YGNodeType, YGNodeTypeDefault, YGNodeTypeText) +YG_ENUM_SEQ_DECL( + YGNodeType, + YGNodeTypeDefault, + YGNodeTypeText) YG_ENUM_SEQ_DECL( YGOverflow, @@ -147,9 +118,10 @@ YG_ENUM_SEQ_DECL( YGUnitPercent, YGUnitAuto) -YG_ENUM_SEQ_DECL(YGWrap, YGWrapNoWrap, YGWrapWrap, YGWrapWrapReverse) +YG_ENUM_SEQ_DECL( + YGWrap, + YGWrapNoWrap, + YGWrapWrap, + YGWrapWrapReverse) YG_EXTERN_C_END - -#undef YG_ENUM_DECL -#undef YG_ENUM_SEQ_DECL diff --git a/yoga/YGMacros.h b/yoga/YGMacros.h index 9211c87b..ee143c29 100644 --- a/yoga/YGMacros.h +++ b/yoga/YGMacros.h @@ -40,6 +40,49 @@ #define YG_ENUM_END(name) name #endif +#ifdef __cplusplus +namespace facebook { +namespace yoga { +namespace enums { + +template +constexpr int count(); // can't use `= delete` due to a defect in clang < 3.9 + +namespace detail { +template +constexpr int n() { + return sizeof...(xs); +} +} // namespace detail + +} // namespace enums +} // namespace yoga +} // namespace facebook +#endif + +#define YG_ENUM_DECL(NAME, ...) \ + typedef YG_ENUM_BEGIN(NAME){__VA_ARGS__} YG_ENUM_END(NAME); \ + WIN_EXPORT const char* NAME##ToString(NAME); + +#ifdef __cplusplus +#define YG_ENUM_SEQ_DECL(NAME, ...) \ + YG_ENUM_DECL(NAME, __VA_ARGS__) \ + YG_EXTERN_C_END \ + namespace facebook { \ + namespace yoga { \ + namespace enums { \ + template <> \ + constexpr int count() { \ + return detail::n<__VA_ARGS__>(); \ + } \ + } \ + } \ + } \ + YG_EXTERN_C_BEGIN +#else +#define YG_ENUM_SEQ_DECL YG_ENUM_DECL +#endif + #ifdef __GNUC__ #define YG_DEPRECATED __attribute__((deprecated)) #elif defined(_MSC_VER) From 206bf414ec6ce5e41b6fb923e871e143522ddd06 Mon Sep 17 00:00:00 2001 From: Nick Gerleman Date: Thu, 29 Sep 2022 22:25:24 -0700 Subject: [PATCH 333/347] Add YGGutter Enum Summary: This adds the YGGutter enum, used to choose between row/column gap variants (row-gap, column-gap, gap). This used later in changes from https://github.com/facebook/yoga/pull/1116, in the APIs which deal with setting gap on style on yoga node. Note the original PR called this `YGGap`, but this ending up leading to a couple public method signatures that could appear ambiguous: 1. `SetGap(YGGap gap, float gapLength)`: Enums like `YGAlign` are the vaues for an `align` prop. `YGGap` controls the variant of the gap (like `YGEdge` does for left/right/top/bottom variants). So the enum reads as if it is the `gapValue`, and it looks like we have two of the same parameter. 2. `SetGap(YGGap gapDirection, float gap)`: This is misleading, because the direction gaps flow is the cross-axis of flex-direction. 3. `GetGap(YGGap gap)`: `gap` is the variant, but looks like an out param. The [CSS Box Alignment](https://www.w3.org/TR/css-align-3/#column-row-gap) spec refers to these gaps as "Gutters", which removes the ambiguity. Changelog: [General][Added] - Add YGGutter Enum Reviewed By: yungsters Differential Revision: D39922412 fbshipit-source-id: 4b0baf800fecb3d03560a4267c7fb4c4330fd39e --- csharp/Facebook.Yoga/YogaGutter.cs | 18 +++++++++++++ enums.py | 1 + java/com/facebook/yoga/YogaGutter.java | 35 ++++++++++++++++++++++++++ javascript/sources/YGEnums.js | 10 ++++++++ yoga/YGEnums.cpp | 12 +++++++++ yoga/YGEnums.h | 6 +++++ 6 files changed, 82 insertions(+) create mode 100644 csharp/Facebook.Yoga/YogaGutter.cs create mode 100644 java/com/facebook/yoga/YogaGutter.java diff --git a/csharp/Facebook.Yoga/YogaGutter.cs b/csharp/Facebook.Yoga/YogaGutter.cs new file mode 100644 index 00000000..3a16d796 --- /dev/null +++ b/csharp/Facebook.Yoga/YogaGutter.cs @@ -0,0 +1,18 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +// @generated by enums.py + +namespace Facebook.Yoga +{ + public enum YogaGutter + { + Column, + Row, + All, + } +} diff --git a/enums.py b/enums.py index 81966bee..8e37c7c7 100644 --- a/enums.py +++ b/enums.py @@ -54,6 +54,7 @@ ENUMS = { "WebFlexBasis" ], "PrintOptions": [("Layout", 1), ("Style", 2), ("Children", 4)], + "Gutter": ["Column", "Row", "All"], } # Generated Java enums used to emit @DoNotStrip, but D17519844 removed them diff --git a/java/com/facebook/yoga/YogaGutter.java b/java/com/facebook/yoga/YogaGutter.java new file mode 100644 index 00000000..2b4be1c0 --- /dev/null +++ b/java/com/facebook/yoga/YogaGutter.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +// @generated by enums.py + +package com.facebook.yoga; + +public enum YogaGutter { + COLUMN(0), + ROW(1), + ALL(2); + + private final int mIntValue; + + YogaGutter(int intValue) { + mIntValue = intValue; + } + + public int intValue() { + return mIntValue; + } + + public static YogaGutter fromInt(int value) { + switch (value) { + case 0: return COLUMN; + case 1: return ROW; + case 2: return ALL; + default: throw new IllegalArgumentException("Unknown enum value: " + value); + } + } +} diff --git a/javascript/sources/YGEnums.js b/javascript/sources/YGEnums.js index c3d4cb3c..96905ce4 100644 --- a/javascript/sources/YGEnums.js +++ b/javascript/sources/YGEnums.js @@ -53,6 +53,11 @@ const CONSTANTS = { FLEX_DIRECTION_ROW: 2, FLEX_DIRECTION_ROW_REVERSE: 3, + GUTTER_COUNT: 3, + GUTTER_COLUMN: 0, + GUTTER_ROW: 1, + GUTTER_ALL: 2, + JUSTIFY_COUNT: 6, JUSTIFY_FLEX_START: 0, JUSTIFY_CENTER: 1, @@ -147,6 +152,11 @@ export type Yoga$FlexDirection = | typeof CONSTANTS.FLEX_DIRECTION_ROW | typeof CONSTANTS.FLEX_DIRECTION_ROW_REVERSE; +export type Yoga$Gutter = + | typeof CONSTANTS.GUTTER_COLUMN + | typeof CONSTANTS.GUTTER_ROW + | typeof CONSTANTS.GUTTER_ALL; + export type Yoga$Justify = | typeof CONSTANTS.JUSTIFY_FLEX_START | typeof CONSTANTS.JUSTIFY_CENTER diff --git a/yoga/YGEnums.cpp b/yoga/YGEnums.cpp index b67b0dac..3c3c0929 100644 --- a/yoga/YGEnums.cpp +++ b/yoga/YGEnums.cpp @@ -109,6 +109,18 @@ const char* YGFlexDirectionToString(const YGFlexDirection value) { return "unknown"; } +const char* YGGutterToString(const YGGutter value) { + switch (value) { + case YGGutterColumn: + return "column"; + case YGGutterRow: + return "row"; + case YGGutterAll: + return "all"; + } + return "unknown"; +} + const char* YGJustifyToString(const YGJustify value) { switch (value) { case YGJustifyFlexStart: diff --git a/yoga/YGEnums.h b/yoga/YGEnums.h index 9d6abfb1..8faec2eb 100644 --- a/yoga/YGEnums.h +++ b/yoga/YGEnums.h @@ -64,6 +64,12 @@ YG_ENUM_SEQ_DECL( YGFlexDirectionRow, YGFlexDirectionRowReverse) +YG_ENUM_SEQ_DECL( + YGGutter, + YGGutterColumn, + YGGutterRow, + YGGutterAll) + YG_ENUM_SEQ_DECL( YGJustify, YGJustifyFlexStart, From 29bb669adf3dc433cce81fd26bb0d24b3961b229 Mon Sep 17 00:00:00 2001 From: Nick Gerleman Date: Mon, 3 Oct 2022 08:03:09 -0700 Subject: [PATCH 334/347] Rebuild yarn lockfiles Summary: Yoga has 35 open dependabot PRs targeting these two packages. This change generates fresh lockfiles for each version, which should close most of them I think. For each lockfile: 1. Delete lockfile 2. Run `yarn --ignore-scripts` Full-fat rebuilds of lockfiles are normally bit dangerous compared to more targeted dependency upgrades, but rebuilding the lockfile felt like a better option because of the duration since last update, number of pending updates, and the low risk due to neither package being installable on Node 12+ at the moment. allow-large-files Reviewed By: mdvacca Differential Revision: D39987360 fbshipit-source-id: 86febac73b90b6c9f1fe2345325b59d14463d28b --- javascript/yarn.lock | 2244 ++++++++++------ website/yarn.lock | 5850 ++++++++++++++++++++++++++++-------------- 2 files changed, 5362 insertions(+), 2732 deletions(-) diff --git a/javascript/yarn.lock b/javascript/yarn.lock index f3b8cc48..08abeebf 100644 --- a/javascript/yarn.lock +++ b/javascript/yarn.lock @@ -3,186 +3,228 @@ abbrev@1: - version "1.0.9" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +ajv@^6.12.3: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" ansi-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107" + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== -ansi-styles@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== +ansi-styles@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: - color-convert "^1.9.0" + color-convert "^2.0.1" anymatch@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" + version "1.3.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" + integrity sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA== dependencies: - arrify "^1.0.0" micromatch "^2.1.5" + normalize-path "^2.0.0" -anymatch@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.0.3.tgz#2fb624fe0e84bccab00afee3d0006ed310f22f09" - integrity sha512-c6IvoeBECQlMVuYUjSwimnhmztImpErfxJzWZhIQinIvQWoGOnB0dLIgifbPHQt5heS6mNlaZG16f06H3C8t1g== +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" aproba@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0" + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== are-we-there-yet@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3" + version "1.1.7" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" + integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== dependencies: delegates "^1.0.0" - readable-stream "^2.0.0 || ^1.1.13" + readable-stream "^2.0.6" arr-diff@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + integrity sha512-dtXTVMkh6VkEEA7OhXnN1Ecb8aAGFdZ1LFxtOCoqj4qkyOJMt7+qs6Ahdy6p/NQCPYsRSXXivhSB/J5E9jmYKA== dependencies: arr-flatten "^1.0.1" -arr-flatten@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b" +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== + +arr-flatten@^1.0.1, arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + integrity sha512-G2n5bG5fSUCpnsXz4+8FUkYsGPkNfLn9YvS66U5qbTIXI2Ynnlo4Bi42bWv+omKUCqz+ejzfClwne0alJWJPhg== -arrify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" - -assert-plus@^1.0.0: +assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== async-each@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== autogypi@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/autogypi/-/autogypi-0.2.2.tgz#258bab5f7857755b09beac6a641fea130ff4622d" + integrity sha512-NkDsjbybxo98NEUpvDULvV6w4OxhnX8owBptd8/GlQLhi81TZrh7siRYX9zVEoAYpYaX5QrRuIZAtgYD9PGDXg== dependencies: bluebird "^3.4.0" commander "~2.9.0" resolve "~1.1.7" -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== -aws4@^1.2.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755" +aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== babel-cli@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.24.1.tgz#207cd705bba61489b2ea41b5312341cf6aca2283" + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1" + integrity sha512-wau+BDtQfuSBGQ9PzzFL3REvR9Sxnd4LKwtcHAiPjhugA7K/80vpHXafj+O5bAqJOuSefjOx5ZJnNSR2J1Qw6Q== dependencies: - babel-core "^6.24.1" - babel-polyfill "^6.23.0" - babel-register "^6.24.1" - babel-runtime "^6.22.0" - commander "^2.8.1" - convert-source-map "^1.1.0" + babel-core "^6.26.0" + babel-polyfill "^6.26.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + commander "^2.11.0" + convert-source-map "^1.5.0" fs-readdir-recursive "^1.0.0" - glob "^7.0.0" - lodash "^4.2.0" - output-file-sync "^1.1.0" - path-is-absolute "^1.0.0" + glob "^7.1.2" + lodash "^4.17.4" + output-file-sync "^1.1.2" + path-is-absolute "^1.0.1" slash "^1.0.0" - source-map "^0.5.0" - v8flags "^2.0.10" + source-map "^0.5.6" + v8flags "^2.1.1" optionalDependencies: chokidar "^1.6.1" -babel-code-frame@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" - dependencies: - chalk "^1.1.0" - esutils "^2.0.2" - js-tokens "^3.0.0" - babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g== dependencies: chalk "^1.1.3" esutils "^2.0.2" js-tokens "^3.0.2" -babel-core@^6.24.1, babel-core@^6.25.0: - version "6.25.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.25.0.tgz#7dd42b0463c742e9d5296deb3ec67a9322dad729" +babel-core@^6.25.0, babel-core@^6.26.0: + version "6.26.3" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" + integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== dependencies: - babel-code-frame "^6.22.0" - babel-generator "^6.25.0" + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" babel-helpers "^6.24.1" babel-messages "^6.23.0" - babel-register "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.25.0" - babel-traverse "^6.25.0" - babel-types "^6.25.0" - babylon "^6.17.2" - convert-source-map "^1.1.0" - debug "^2.1.1" - json5 "^0.5.0" - lodash "^4.2.0" - minimatch "^3.0.2" - path-is-absolute "^1.0.0" - private "^0.1.6" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.1" + debug "^2.6.9" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.8" slash "^1.0.0" - source-map "^0.5.0" + source-map "^0.5.7" -babel-generator@^6.25.0: - version "6.25.0" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.25.0.tgz#33a1af70d5f2890aeb465a4a7793c1df6a9ea9fc" +babel-generator@^6.26.0: + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== dependencies: babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-types "^6.25.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" detect-indent "^4.0.0" jsesc "^1.3.0" - lodash "^4.2.0" - source-map "^0.5.0" + lodash "^4.17.4" + source-map "^0.5.7" trim-right "^1.0.1" babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + integrity sha512-gCtfYORSG1fUMX4kKraymq607FWgMWg+j42IFPc18kFQEsmtaibP4UrqsXt8FlEJle25HUd4tsoDR7H2wDhe9Q== dependencies: babel-helper-explode-assignable-expression "^6.24.1" babel-runtime "^6.22.0" @@ -191,6 +233,7 @@ babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: babel-helper-call-delegate@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + integrity sha512-RL8n2NiEj+kKztlrVJM9JT1cXzzAdvWFh76xh/H1I4nKwunzE4INBXn8ieCZ+wh4zWszZk7NBS1s/8HR5jDkzQ== dependencies: babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" @@ -200,6 +243,7 @@ babel-helper-call-delegate@^6.24.1: babel-helper-define-map@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + integrity sha512-bHkmjcC9lM1kmZcVpA5t2om2nzT/xiZpo6TJq7UlZ3wqKfzia4veeXbIhKvJXAMzhhEBd3cR1IElL5AenWEUpA== dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.26.0" @@ -209,6 +253,7 @@ babel-helper-define-map@^6.24.1: babel-helper-explode-assignable-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + integrity sha512-qe5csbhbvq6ccry9G7tkXbzNtcDiH4r51rrPUbwwoTzZ18AqxWYRZT6AOmxrpxKnQBW0pYlBI/8vh73Z//78nQ== dependencies: babel-runtime "^6.22.0" babel-traverse "^6.24.1" @@ -217,6 +262,7 @@ babel-helper-explode-assignable-expression@^6.24.1: babel-helper-function-name@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + integrity sha512-Oo6+e2iX+o9eVvJ9Y5eKL5iryeRdsIkwRYheCuhYdVHsdEQysbc2z2QkqCLIYnNxkT5Ss3ggrHdXiDI7Dhrn4Q== dependencies: babel-helper-get-function-arity "^6.24.1" babel-runtime "^6.22.0" @@ -227,6 +273,7 @@ babel-helper-function-name@^6.24.1: babel-helper-get-function-arity@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + integrity sha512-WfgKFX6swFB1jS2vo+DwivRN4NB8XUdM3ij0Y1gnC21y1tdBoe6xjVnd7NSI6alv+gZXCtJqvrTeMW3fR/c0ng== dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -234,6 +281,7 @@ babel-helper-get-function-arity@^6.24.1: babel-helper-hoist-variables@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + integrity sha512-zAYl3tqerLItvG5cKYw7f1SpvIxS9zi7ohyGHaI9cgDUjAT6YcY9jIEH5CstetP5wHIVSceXwNS7Z5BpJg+rOw== dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -241,6 +289,7 @@ babel-helper-hoist-variables@^6.24.1: babel-helper-optimise-call-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + integrity sha512-Op9IhEaxhbRT8MDXx2iNuMgciu2V8lDvYCNQbDGjdBNCjaMvyLf4wl4A3b8IgndCyQF8TwfgsQ8T3VD8aX1/pA== dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -248,6 +297,7 @@ babel-helper-optimise-call-expression@^6.24.1: babel-helper-regex@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + integrity sha512-VlPiWmqmGJp0x0oK27Out1D+71nVVCTSdlbhIVoaBAj2lUgrNjBCRR9+llO4lTSb2O4r7PJg+RobRkhBrf6ofg== dependencies: babel-runtime "^6.26.0" babel-types "^6.26.0" @@ -256,6 +306,7 @@ babel-helper-regex@^6.24.1: babel-helper-remap-async-to-generator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + integrity sha512-RYqaPD0mQyQIFRu7Ho5wE2yvA/5jxqCIj/Lv4BXNq23mHYu/vxikOy2JueLiBxQknwapwrJeNCesvY0ZcfnlHg== dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.22.0" @@ -266,6 +317,7 @@ babel-helper-remap-async-to-generator@^6.24.1: babel-helper-replace-supers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + integrity sha512-sLI+u7sXJh6+ToqDr57Bv973kCepItDhMou0xCP2YPVmR1jkHSCY+p1no8xErbV1Siz5QE8qKT1WIwybSWlqjw== dependencies: babel-helper-optimise-call-expression "^6.24.1" babel-messages "^6.23.0" @@ -277,6 +329,7 @@ babel-helper-replace-supers@^6.24.1: babel-helpers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + integrity sha512-n7pFrqQm44TCYvrCDb0MqabAF+JUBq+ijBvNMUxpkLjJaAu32faIexewMumrH5KLLJ1HDyT0PTEqRyAe/GwwuQ== dependencies: babel-runtime "^6.22.0" babel-template "^6.24.1" @@ -284,48 +337,58 @@ babel-helpers@^6.24.1: babel-messages@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + integrity sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w== dependencies: babel-runtime "^6.22.0" babel-plugin-check-es2015-constants@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + integrity sha512-B1M5KBP29248dViEo1owyY32lk1ZSH2DaNNrXLGt8lyjjHm7pBqAdQ7VKUPR6EEDO323+OvT3MQXbCin8ooWdA== dependencies: babel-runtime "^6.22.0" babel-plugin-replace-require@^0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/babel-plugin-replace-require/-/babel-plugin-replace-require-0.0.4.tgz#2afe99c8cfd1a9faf5fa2a807bdb35c30a4970f8" + integrity sha512-d9P6UT7ffqRfuM8Kaec4YMpC1XyQE8bbRgM2OsMNZO5xwE2OzmKIDg3qajjOG2iInMQSOQDXviyDYZx8hYf5Nw== dependencies: babylon "^6.14.1" babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + integrity sha512-4Zp4unmHgw30A1eWI5EpACji2qMocisdXhAftfhXoSV9j0Tvj6nRFE3tOmRY912E0FMRm/L5xWE7MGVT2FoLnw== babel-plugin-syntax-async-generators@^6.5.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" + integrity sha512-EbciFN5Jb9iqU9bqaLmmFLx2G8pAUsvpWJ6OzOWBNrSY9qTohXj+7YfZx6Ug1Qqh7tCb1EA7Jvn9bMC1HBiucg== babel-plugin-syntax-exponentiation-operator@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + integrity sha512-Z/flU+T9ta0aIEKl1tGEmN/pZiI1uXmCiGFRegKacQfEJzp7iNsKloZmyJlQr+75FCJtiFfGIK03SiCvCt9cPQ== babel-plugin-syntax-flow@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" + integrity sha512-HbTDIoG1A1op7Tl/wIFQPULIBA61tsJ8Ntq2FAhLwuijrzosM/92kAfgU1Q3Kc7DH/cprJg5vDfuTY4QUL4rDA== babel-plugin-syntax-object-rest-spread@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + integrity sha512-C4Aq+GaAj83pRQ0EFgTvw5YO6T3Qz2KGrNRwIj9mSoNHVvdZY4KO2uA6HNtNXCw993iSZnckY1aLW8nOi8i4+w== babel-plugin-syntax-trailing-function-commas@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + integrity sha512-Gx9CH3Q/3GKbhs07Bszw5fPTlU+ygrOGfAhEt7W2JICwufpC4SuO0mG0+4NykPBSYPMJhqvVlDBU17qB1D+hMQ== babel-plugin-transform-async-generator-functions@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" + integrity sha512-uT7eovUxtXe8Q2ufcjRuJIOL0hg6VAUJhiWJBLxH/evYAw+aqoJLcYTR8hqx13iOx/FfbCMHgBmXWZjukbkyPg== dependencies: babel-helper-remap-async-to-generator "^6.24.1" babel-plugin-syntax-async-generators "^6.5.0" @@ -334,6 +397,7 @@ babel-plugin-transform-async-generator-functions@^6.24.1: babel-plugin-transform-async-to-generator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + integrity sha512-7BgYJujNCg0Ti3x0c/DL3tStvnKS6ktIYOmo9wginv/dfZOrbSZ+qG4IRRHMBOzZ5Awb1skTiAsQXg/+IWkZYw== dependencies: babel-helper-remap-async-to-generator "^6.24.1" babel-plugin-syntax-async-functions "^6.8.0" @@ -342,18 +406,21 @@ babel-plugin-transform-async-to-generator@^6.24.1: babel-plugin-transform-es2015-arrow-functions@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + integrity sha512-PCqwwzODXW7JMrzu+yZIaYbPQSKjDTAsNNlK2l5Gg9g4rz2VzLnZsStvp/3c46GfXpwkyufb3NCyG9+50FF1Vg== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + integrity sha512-2+ujAT2UMBzYFm7tidUsYh+ZoIutxJ3pN9IYrF1/H6dCKtECfhmB8UkHVpyxDwkj0CYbQG35ykoz925TUnBc3A== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-block-scoping@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + integrity sha512-YiN6sFAQ5lML8JjCmr7uerS5Yc/EMbgg9G8ZNmk2E3nYX4ckHR01wrkeeMijEf5WHNK5TW0Sl0Uu3pv3EdOJWw== dependencies: babel-runtime "^6.26.0" babel-template "^6.26.0" @@ -364,6 +431,7 @@ babel-plugin-transform-es2015-block-scoping@^6.24.1: babel-plugin-transform-es2015-classes@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + integrity sha512-5Dy7ZbRinGrNtmWpquZKZ3EGY8sDgIVB4CU8Om8q8tnMLrD/m94cKglVcHps0BCTdZ0TJeeAWOq2TK9MIY6cag== dependencies: babel-helper-define-map "^6.24.1" babel-helper-function-name "^6.24.1" @@ -378,6 +446,7 @@ babel-plugin-transform-es2015-classes@^6.24.1: babel-plugin-transform-es2015-computed-properties@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + integrity sha512-C/uAv4ktFP/Hmh01gMTvYvICrKze0XVX9f2PdIXuriCSvUmV9j+u+BB9f5fJK3+878yMK6dkdcq+Ymr9mrcLzw== dependencies: babel-runtime "^6.22.0" babel-template "^6.24.1" @@ -385,12 +454,14 @@ babel-plugin-transform-es2015-computed-properties@^6.24.1: babel-plugin-transform-es2015-destructuring@^6.22.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + integrity sha512-aNv/GDAW0j/f4Uy1OEPZn1mqD+Nfy9viFGBfQ5bZyT35YqOiqx7/tXdyfZkJ1sC21NyEsBdfDY6PYmLHF4r5iA== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-duplicate-keys@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + integrity sha512-ossocTuPOssfxO2h+Z3/Ea1Vo1wWx31Uqy9vIiJusOP4TbF7tPs9U0sJ9pX9OJPf4lXRGj5+6Gkl/HHKiAP5ug== dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -398,12 +469,14 @@ babel-plugin-transform-es2015-duplicate-keys@^6.24.1: babel-plugin-transform-es2015-for-of@^6.22.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + integrity sha512-DLuRwoygCoXx+YfxHLkVx5/NpeSbVwfoTeBykpJK7JhYWlL/O8hgAK/reforUnZDlxasOrVPPJVI/guE3dCwkw== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-function-name@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + integrity sha512-iFp5KIcorf11iBqu/y/a7DK3MN5di3pNCzto61FqCNnUX4qeBwcV1SLqe10oXNnCaxBUImX3SckX2/o1nsrTcg== dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.22.0" @@ -412,20 +485,23 @@ babel-plugin-transform-es2015-function-name@^6.24.1: babel-plugin-transform-es2015-literals@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + integrity sha512-tjFl0cwMPpDYyoqYA9li1/7mGFit39XiNX5DKC/uCNjBctMxyL1/PT/l4rSlbvBG1pOKI88STRdUsWXB3/Q9hQ== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-modules-amd@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + integrity sha512-LnIIdGWIKdw7zwckqx+eGjcS8/cl8D74A3BpJbGjKTFFNJSMrjN4bIh22HY1AlkUbeLG6X6OZj56BDvWD+OeFA== dependencies: babel-plugin-transform-es2015-modules-commonjs "^6.24.1" babel-runtime "^6.22.0" babel-template "^6.24.1" babel-plugin-transform-es2015-modules-commonjs@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" + version "6.26.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" + integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== dependencies: babel-plugin-transform-strict-mode "^6.24.1" babel-runtime "^6.26.0" @@ -435,6 +511,7 @@ babel-plugin-transform-es2015-modules-commonjs@^6.24.1: babel-plugin-transform-es2015-modules-systemjs@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + integrity sha512-ONFIPsq8y4bls5PPsAWYXH/21Hqv64TBxdje0FvU3MhIV6QM2j5YS7KvAzg/nTIVLot2D2fmFQrFWCbgHlFEjg== dependencies: babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" @@ -443,6 +520,7 @@ babel-plugin-transform-es2015-modules-systemjs@^6.24.1: babel-plugin-transform-es2015-modules-umd@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + integrity sha512-LpVbiT9CLsuAIp3IG0tfbVo81QIhn6pE8xBJ7XSeCtFlMltuar5VuBV6y6Q45tpui9QWcy5i0vLQfCfrnF7Kiw== dependencies: babel-plugin-transform-es2015-modules-amd "^6.24.1" babel-runtime "^6.22.0" @@ -451,6 +529,7 @@ babel-plugin-transform-es2015-modules-umd@^6.24.1: babel-plugin-transform-es2015-object-super@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + integrity sha512-8G5hpZMecb53vpD3mjs64NhI1au24TAmokQ4B+TBFBjN9cVoGoOvotdrMMRmHvVZUEvqGUPWL514woru1ChZMA== dependencies: babel-helper-replace-supers "^6.24.1" babel-runtime "^6.22.0" @@ -458,6 +537,7 @@ babel-plugin-transform-es2015-object-super@^6.24.1: babel-plugin-transform-es2015-parameters@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + integrity sha512-8HxlW+BB5HqniD+nLkQ4xSAVq3bR/pcYW9IigY+2y0dI+Y7INFeTbfAQr+63T3E4UDsZGjyb+l9txUnABWxlOQ== dependencies: babel-helper-call-delegate "^6.24.1" babel-helper-get-function-arity "^6.24.1" @@ -469,6 +549,7 @@ babel-plugin-transform-es2015-parameters@^6.24.1: babel-plugin-transform-es2015-shorthand-properties@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + integrity sha512-mDdocSfUVm1/7Jw/FIRNw9vPrBQNePy6wZJlR8HAUBLybNp1w/6lr6zZ2pjMShee65t/ybR5pT8ulkLzD1xwiw== dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -476,12 +557,14 @@ babel-plugin-transform-es2015-shorthand-properties@^6.24.1: babel-plugin-transform-es2015-spread@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + integrity sha512-3Ghhi26r4l3d0Js933E5+IhHwk0A1yiutj9gwvzmFbVV0sPMYk2lekhOufHBswX7NCoSeF4Xrl3sCIuSIa+zOg== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-sticky-regex@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + integrity sha512-CYP359ADryTo3pCsH0oxRo/0yn6UsEZLqYohHmvLQdfS9xkf+MbCzE3/Kolw9OYIY4ZMilH25z/5CbQbwDD+lQ== dependencies: babel-helper-regex "^6.24.1" babel-runtime "^6.22.0" @@ -490,18 +573,21 @@ babel-plugin-transform-es2015-sticky-regex@^6.24.1: babel-plugin-transform-es2015-template-literals@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + integrity sha512-x8b9W0ngnKzDMHimVtTfn5ryimars1ByTqsfBDwAqLibmuuQY6pgBQi5z1ErIsUOWBdw1bW9FSz5RZUojM4apg== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-typeof-symbol@^6.22.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + integrity sha512-fz6J2Sf4gYN6gWgRZaoFXmq93X+Li/8vf+fb0sGDVtdeWvxC9y5/bTD7bvfWMEq6zetGEHpWjtzRGSugt5kNqw== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-unicode-regex@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + integrity sha512-v61Dbbihf5XxnYjtBN04B/JBvsScY37R1cZT5r9permN1cp+b70DY3Ib3fIkgn1DI9U3tGgBJZVD8p/mE/4JbQ== dependencies: babel-helper-regex "^6.24.1" babel-runtime "^6.22.0" @@ -510,6 +596,7 @@ babel-plugin-transform-es2015-unicode-regex@^6.24.1: babel-plugin-transform-exponentiation-operator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + integrity sha512-LzXDmbMkklvNhprr20//RStKVcT8Cu+SQtX18eMHLhjHf2yFzwtQ0S2f0jQ+89rokoNdmwoSqYzAhq86FxlLSQ== dependencies: babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" babel-plugin-syntax-exponentiation-operator "^6.8.0" @@ -518,6 +605,7 @@ babel-plugin-transform-exponentiation-operator@^6.24.1: babel-plugin-transform-flow-strip-types@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" + integrity sha512-TxIM0ZWNw9oYsoTthL3lvAK3+eTujzktoXJg4ubGvICGbVuXVYv5hHv0XXpz8fbqlJaGYY4q5SVzaSmsg3t4Fg== dependencies: babel-plugin-syntax-flow "^6.18.0" babel-runtime "^6.22.0" @@ -525,6 +613,7 @@ babel-plugin-transform-flow-strip-types@^6.22.0: babel-plugin-transform-object-rest-spread@^6.22.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" + integrity sha512-ocgA9VJvyxwt+qJB0ncxV8kb/CjfTcECUY4tQ5VT7nP6Aohzobm8CDFaQ5FHdvZQzLmf0sgDxB8iRXZXxwZcyA== dependencies: babel-plugin-syntax-object-rest-spread "^6.8.0" babel-runtime "^6.26.0" @@ -532,27 +621,31 @@ babel-plugin-transform-object-rest-spread@^6.22.0: babel-plugin-transform-regenerator@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + integrity sha512-LS+dBkUGlNR15/5WHKe/8Neawx663qttS6AGqoOUhICc9d1KciBvtrQSuc0PI+CxQ2Q/S1aKuJ+u64GtLdcEZg== dependencies: regenerator-transform "^0.10.0" babel-plugin-transform-strict-mode@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + integrity sha512-j3KtSpjyLSJxNoCDrhwiJad8kw0gJ9REGj8/CqL0HeRyLnvUNYV9zcqluL6QJSXh3nfsLEmSLvwRfGzrgR96Pw== dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" -babel-polyfill@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d" +babel-polyfill@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" + integrity sha512-F2rZGQnAdaHWQ8YAoeRbukc7HS9QgdgeyJ0rQDd485v9opwuPvjpPFcOOT/WmkKTdgy9ESgSPXDcTNpzrGr6iQ== dependencies: - babel-runtime "^6.22.0" - core-js "^2.4.0" - regenerator-runtime "^0.10.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + regenerator-runtime "^0.10.5" babel-preset-es2015@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" + integrity sha512-XfwUqG1Ry6R43m4Wfob+vHbIVBIqTg/TJY4Snku1iIzeH7mUnwHA8Vagmv+ZQbPwhS8HgsdQvy28Py3k5zpoFQ== dependencies: babel-plugin-check-es2015-constants "^6.22.0" babel-plugin-transform-es2015-arrow-functions "^6.22.0" @@ -582,6 +675,7 @@ babel-preset-es2015@^6.24.1: babel-preset-stage-3@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" + integrity sha512-eCbEOF8uN0KypFXJmZXn2sTk7bPV9uM5xov7G/7BM08TbQEObsVs0cEWfy6NQySlfk7JBi/t+XJP1JkruYfthA== dependencies: babel-plugin-syntax-trailing-function-commas "^6.22.0" babel-plugin-transform-async-generator-functions "^6.24.1" @@ -589,45 +683,31 @@ babel-preset-stage-3@^6.24.1: babel-plugin-transform-exponentiation-operator "^6.24.1" babel-plugin-transform-object-rest-spread "^6.22.0" -babel-register@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.1.tgz#7e10e13a2f71065bdfad5a1787ba45bca6ded75f" +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + integrity sha512-veliHlHX06wjaeY8xNITbveXSiI+ASFnOqvne/LaIJIqOWi2Ogmj91KOugEz/hoh/fwMhXNBJPCv8Xaz5CyM4A== dependencies: - babel-core "^6.24.1" - babel-runtime "^6.22.0" - core-js "^2.4.0" + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" home-or-tmp "^2.0.0" - lodash "^4.2.0" + lodash "^4.17.4" mkdirp "^0.5.1" - source-map-support "^0.4.2" + source-map-support "^0.4.15" -babel-runtime@^6.18.0, babel-runtime@^6.26.0: +babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g== dependencies: core-js "^2.4.0" regenerator-runtime "^0.11.0" -babel-runtime@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.10.0" - -babel-template@^6.24.1, babel-template@^6.25.0: - version "6.25.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.25.0.tgz#665241166b7c2aa4c619d71e192969552b10c071" - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.25.0" - babel-types "^6.25.0" - babylon "^6.17.2" - lodash "^4.2.0" - -babel-template@^6.26.0: +babel-template@^6.24.1, babel-template@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + integrity sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg== dependencies: babel-runtime "^6.26.0" babel-traverse "^6.26.0" @@ -638,6 +718,7 @@ babel-template@^6.26.0: babel-traverse@^6.24.1, babel-traverse@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + integrity sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA== dependencies: babel-code-frame "^6.26.0" babel-messages "^6.23.0" @@ -649,97 +730,109 @@ babel-traverse@^6.24.1, babel-traverse@^6.26.0: invariant "^2.2.2" lodash "^4.17.4" -babel-traverse@^6.25.0: - version "6.25.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.25.0.tgz#2257497e2fcd19b89edc13c4c91381f9512496f1" - dependencies: - babel-code-frame "^6.22.0" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-types "^6.25.0" - babylon "^6.17.2" - debug "^2.2.0" - globals "^9.0.0" - invariant "^2.2.0" - lodash "^4.2.0" - babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g== dependencies: babel-runtime "^6.26.0" esutils "^2.0.2" lodash "^4.17.4" to-fast-properties "^1.0.3" -babel-types@^6.25.0: - version "6.25.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.25.0.tgz#70afb248d5660e5d18f811d91c8303b54134a18e" - dependencies: - babel-runtime "^6.22.0" - esutils "^2.0.2" - lodash "^4.2.0" - to-fast-properties "^1.0.1" - -babylon@^6.14.1, babylon@^6.17.2: - version "6.17.4" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.4.tgz#3e8b7402b88d22c3423e137a1577883b15ff869a" - -babylon@^6.18.0: +babylon@^6.14.1, babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== -balanced-match@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" bcrypt-pbkdf@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4" + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== dependencies: tweetnacl "^0.14.3" binary-extensions@^1.0.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== binary-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" - integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + integrity sha512-OorbnJVPII4DuUKbjARAe8u8EfqOmkEEaSFIyoQ7OjTHn6kafxWl0wLgoZ2rXaYd7MyLcDaU4TmhfxtwgcccMQ== dependencies: inherits "~2.0.0" bluebird@^3.4.0: - version "3.4.7" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: - hoek "2.x.x" - -brace-expansion@^1.0.0: - version "1.1.6" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" - dependencies: - balanced-match "^0.4.1" + balanced-match "^1.0.0" concat-map "0.0.1" braces@^1.8.2: version "1.8.5" resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + integrity sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw== dependencies: expand-range "^1.8.1" preserve "^0.2.0" repeat-element "^1.1.2" -braces@^3.0.2: +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -749,23 +842,37 @@ braces@^3.0.2: browser-stdout@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" + integrity sha512-7Rfk377tpSM9TWBEeHs0FlDZGoAIei2V/4MdZJoFMBFAK6BqLpxAIUepGRHGdPFgGsLb02PXovC4qddyHvQqTg== -buffer-shims@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" camelcase@^5.0.0: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caseless@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== -chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: +chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== dependencies: ansi-styles "^2.2.1" escape-string-regexp "^1.0.2" @@ -774,8 +881,9 @@ chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: supports-color "^2.0.0" chokidar@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" + version "1.7.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" + integrity sha512-mk8fAWcRUOxY7btlLtitj3A45jOwSAxH4tOFOoEGbVsl6cL6pPMWUy7dwZ/canfj3QEdP6FHSnf/l1c6/WkzVg== dependencies: anymatch "^1.3.0" async-each "^1.0.0" @@ -789,80 +897,129 @@ chokidar@^1.6.1: fsevents "^1.0.0" chokidar@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.0.2.tgz#0d1cd6d04eb2df0327446188cd13736a3367d681" - integrity sha512-c4PR2egjNjI1um6bamCQ6bUNPDiyofNQruHvKgHQ4gDUP/ITSVSzNsiI5OWtHOsX323i5ha/kk4YmOZ1Ktg7KA== + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: - anymatch "^3.0.1" - braces "^3.0.2" - glob-parent "^5.0.0" - is-binary-path "^2.1.0" - is-glob "^4.0.1" - normalize-path "^3.0.0" - readdirp "^3.1.1" + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" optionalDependencies: - fsevents "^2.0.6" + fsevents "~2.3.2" -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== dependencies: - color-name "1.1.3" + map-visit "^1.0.0" + object-visit "^1.0.0" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" -combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" -commander@2.9.0, commander@^2.8.1, commander@^2.9.0, commander@~2.9.0: +commander@2.9.0, commander@~2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + integrity sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A== dependencies: graceful-readlink ">= 1.0.0" +commander@^2.11.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== -convert-source-map@^1.1.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" +convert-source-map@^1.5.0, convert-source-map@^1.5.1: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" -core-js@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== -core-util-is@~1.0.0: +core-js@^2.4.0, core-js@^2.5.0: + version "2.6.12" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== + +core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== cross-env@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-4.0.0.tgz#16083862d08275a4628b0b243b121bedaa55dd80" + integrity sha512-dofkcyPqOy/AR14nbYSpk+TZ4IJZqg2as+/mQNkzh+7Xba2I1I1eyg/1G2dtSpD2LHjcEWwnGquiH2OP5LoeOw== dependencies: cross-spawn "^5.1.0" is-windows "^1.0.0" @@ -870,125 +1027,234 @@ cross-env@^4.0.0: cross-spawn@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A== dependencies: lru-cache "^4.0.1" shebang-command "^1.2.0" which "^1.2.9" -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - dependencies: - boom "2.x.x" - dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== dependencies: assert-plus "^1.0.0" -debug@2.2.0, debug@^2.1.1, debug@^2.2.0, debug@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" +debug@2.6.8: + version "2.6.8" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" + integrity sha512-E22fsyWPt/lr4/UgQLt/pXqerGMDsanhbnmqIS3VAXuDi1v3IpiwXe2oncEIondHSBuPDWRoK/pMjlvi8FuOXQ== dependencies: - ms "0.7.1" + ms "2.0.0" -debug@^2.6.8: +debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== -deep-extend@~0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== detect-indent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + integrity sha512-BDKtmHlOzwI7iRuEkhzsnPoi5ypEhWAJB5RvHWe1kMr06js3uK5B3734i3ui5Yd+wOJV1cpE4JnivPD283GU/A== dependencies: repeating "^2.0.0" -diff@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" +diff@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" + integrity sha512-597ykPFhtJYaXqPq6fF7Vl1fXTKgPdLOntyxpmdzUOKiYGqK7zcnbplj5088+8qJnWdzXhyeau5iVr8HVo9dgg== ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== dependencies: jsbn "~0.1.0" + safer-buffer "^2.1.0" -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emscripten-library-decorator@~0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/emscripten-library-decorator/-/emscripten-library-decorator-0.2.2.tgz#d035f023e2a84c68305cc842cdeea38e67683c40" + integrity sha512-kDmAu7dLbBisaCGrWSNmoZPWeRyHcaJ2k5+z7IgStgZfCNYQmtADRvSic/qHvN+rf6US3HHTfrQ0/D8UdfF1CQ== escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + integrity sha512-hxx03P2dJxss6ceIeri9cmYOT4SRs3Zk3afZwWpOsRqLqprhTR8u++SlC+sFGsQr7WGFPdMF7Gjc1njDLDK6UA== dependencies: is-posix-bracket "^0.1.0" +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + expand-range@^1.8.1: version "1.8.2" resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + integrity sha512-AFASGfIlnIbkKPQwX1yHaDjFvh/1gyKJODme52V6IORh69uEYgZp0o9C+qsIGNVEiuuhQU0CSSl++Rlegg1qvA== dependencies: fill-range "^2.1.0" -extend@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== extglob@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + integrity sha512-1FOj1LOwn42TMrruOHGt18HemVnbwAmAak7krWk+wa93KXxGbK+2jpezm+ytJYDaBX0/SPLZFHKM7m+tKobWGg== dependencies: is-extglob "^1.0.0" -extsprintf@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== filename-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + integrity sha512-BTCqyBaWBTsauvnHiE8i562+EdJj+oUpkqWp2R1iCoR8f6oo8STRu3of7WJJ0TqWtxN50a5YFpzYK4Jj9esYfQ== fill-range@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + version "2.2.4" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" + integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q== dependencies: is-number "^2.1.0" isobject "^2.0.0" - randomatic "^1.1.3" + randomatic "^3.0.0" repeat-element "^1.1.2" repeat-string "^1.5.2" +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -996,46 +1262,58 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: - locate-path "^3.0.0" + locate-path "^5.0.0" + path-exists "^4.0.0" flow-copy-source@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/flow-copy-source/-/flow-copy-source-2.0.7.tgz#3b5634ac552c539a40093ed09d9e645e67f95212" - integrity sha512-/9oYivwSRgIyRMWqRkzJgulUCRPqMA8JSt7l0uoW0Xmtp8ItJpURnBczJUvnAKnHp0TNttNILCeuqW2w9cwTFg== + version "2.0.9" + resolved "https://registry.yarnpkg.com/flow-copy-source/-/flow-copy-source-2.0.9.tgz#0c94ad842f2ae544d5a6b8ae720cee0b8678d742" + integrity sha512-7zX/oHSIHe8YRGiA9QIcC4SW6KF667ikdmiDfbST15up1Ona8dn7Xy0PmSrfw6ceBWDww8sRKlCLKsztStpYkQ== dependencies: chokidar "^3.0.0" fs-extra "^8.1.0" glob "^7.0.0" kefir "^3.7.3" - yargs "^13.1.0" + yargs "^15.0.1" -for-in@^0.1.5: - version "0.1.6" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8" +for-in@^1.0.1, for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== for-own@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072" + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + integrity sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw== dependencies: - for-in "^0.1.5" + for-in "^1.0.1" forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== -form-data@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4" +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== dependencies: asynckit "^0.4.0" - combined-stream "^1.0.5" + combined-stream "^1.0.6" mime-types "^2.1.12" +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== + dependencies: + map-cache "^0.2.2" + fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -1046,59 +1324,42 @@ fs-extra@^8.1.0: universalify "^0.1.0" fs-readdir-recursive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560" + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@^1.0.0: - version "1.0.15" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.15.tgz#fa63f590f3c2ad91275e4972a6cea545fb0aae44" + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== dependencies: - nan "^2.3.0" - node-pre-gyp "^0.6.29" + bindings "^1.5.0" + nan "^2.12.1" -fsevents@^2.0.6: - version "2.0.7" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.0.7.tgz#382c9b443c6cbac4c57187cdda23aa3bf1ccfc2a" - integrity sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ== +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -fstream-ignore@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" - dependencies: - fstream "^1.0.0" - inherits "2" - minimatch "^3.0.0" - -fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822" +fstream@^1.0.0, fstream@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== dependencies: graceful-fs "^4.1.2" inherits "~2.0.0" mkdirp ">=0.5 0" rimraf "2" -gauge@~2.7.1: - version "2.7.2" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.2.tgz#15cecc31b02d05345a5d6b0e171cdb3ad2307774" - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - supports-color "^0.2.0" - wide-align "^1.1.0" - gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg== dependencies: aproba "^1.0.3" console-control-strings "^1.0.0" @@ -1109,30 +1370,27 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -generate-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" - -generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - dependencies: - is-property "^1.0.0" - get-caller-file@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== + getpass@^0.1.1: - version "0.1.6" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== dependencies: assert-plus "^1.0.0" glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + integrity sha512-ab1S1g1EbO7YzauaJLkgLp7DZVAqj9M/dvKlTt8DkXA2tiOIcSMrlVI2J1RZyB5iJVccEscjGn+kpOG9788MHA== dependencies: glob-parent "^2.0.0" is-glob "^2.0.0" @@ -1140,30 +1398,21 @@ glob-base@^0.3.0: glob-parent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + integrity sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w== dependencies: is-glob "^2.0.0" -glob-parent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954" - integrity sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg== +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" -glob@7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5: +glob@7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" + integrity sha512-mRyN/EsN2SyNhKWykF3eEGhDpeNplMWaW18Bmh76tnOqk5TbELAVwFAYOCmKVssOYFrYvvLMguiA+NXO3ZTuVA== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -1172,310 +1421,456 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.5: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^9.0.0, globals@^9.18.0: +glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== -graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.6: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - -graceful-fs@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b" - integrity sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg== +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== "graceful-readlink@>= 1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + integrity sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w== growl@1.9.2: version "1.9.2" resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" + integrity sha512-RTBwDHhNuOx4F0hqzItc/siXCasGfC4DeWcBamclWd+6jWtBaeB/SGbMkGf0eiQoW7ib8JpvOgnUsmgMHI3Mfw== -har-validator@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== dependencies: - chalk "^1.1.1" - commander "^2.9.0" - is-my-json-valid "^2.12.4" - pinkie-promise "^2.0.0" + ajv "^6.12.3" + har-schema "^2.0.0" has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== dependencies: ansi-regex "^2.0.0" has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA== has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== -hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +he@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + integrity sha512-z/GDPjlRMNOa2XJiB4em8wJpuuBfrFOlYKTZxtpkdr1uPdibHI8rYA3MY0KDObpVyaes0e/aunid/t88ZI2EKA== home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + integrity sha512-ycURW7oUxE2sNiPVw1HVEFsW+ecOpJ5zaj7eC0RlwhibhRBod20muUN8qu/gzx956YrLolVvs1MTXwKgC2rVEg== dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.1" -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== dependencies: - assert-plus "^0.2.0" + assert-plus "^1.0.0" jsprim "^1.2.2" sshpk "^1.7.0" inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" +inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@~1.3.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" - -invariant@^2.2.0, invariant@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" +invariant@^2.2.2: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== dependencies: loose-envify "^1.0.0" +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A== + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q== dependencies: binary-extensions "^1.0.0" -is-binary-path@^2.1.0: +is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" -is-buffer@^1.0.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b" +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg== + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" is-dotfile@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + integrity sha512-9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg== is-equal-shallow@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + integrity sha512-0EygVC5qPvIyb+gSz7zdD5/AAoS6Qrx1e//6N4yv4oNm30kqvdmG66oZFWVlQHUWe5OjP08FuTw2IdT0EOTcYA== dependencies: is-primitive "^2.0.0" -is-extendable@^0.1.1: +is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + integrity sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww== is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - dependencies: - number-is-nan "^1.0.0" + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== dependencies: number-is-nan "^1.0.0" -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + integrity sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg== dependencies: is-extglob "^1.0.0" -is-glob@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" -is-my-json-valid@^2.12.4: - version "2.15.0" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b" - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" - -is-number@^2.0.2, is-number@^2.1.0: +is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + integrity sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg== dependencies: kind-of "^3.0.2" +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== + dependencies: + kind-of "^3.0.2" + +is-number@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== + is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + integrity sha512-Yu68oeXJ7LeWNmZ3Zov/xg/oDBnBK2RNxwYY1ilNJX+tKKZqgPK+qOn/Gs9jEu66KDY9Netf5XLKNGzas/vPfQ== is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - -is-property@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + integrity sha512-N3w1tFaRfk3UrPfqeRyD+GYDASU3W5VinKhlORy8EWVf/sIdDL9GAcew85XmktCfH+ngG7SRXEVDoO18WMdB/Q== is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== -is-windows@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.1.tgz#310db70f742d259a16a369202b51af84233310d9" +is-windows@^1.0.0, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== -isexe@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== dependencies: isarray "1.0.0" +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== -jodid25519@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" - dependencies: - jsbn "~0.1.0" - -js-tokens@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg== jsbn@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + integrity sha512-Mke0DA0QjUWuJlhsE0ZPPhYiJkRap642SmI/4ztCFaUs6V2AiH1sfecc+57NgaryfAA2VR3v6O+CSjC1jZJKOA== jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== json3@3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + integrity sha512-I5YLeauH3rIaE99EE++UeH2M2gSYo8/2TqDac7oZEH6D/DSQ4Woa628Qrfj1X9/OY5Mk5VvIDQaKCDchXaKrmA== -json5@^0.5.0: +json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw== jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== optionalDependencies: graceful-fs "^4.1.6" -jsonpointer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" - jsprim@^1.2.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252" + version "1.4.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== dependencies: - extsprintf "1.0.2" - json-schema "0.2.3" - verror "1.3.6" + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" kefir@^3.7.3: - version "3.8.1" - resolved "https://registry.yarnpkg.com/kefir/-/kefir-3.8.1.tgz#6b202bc78c01ed4aa1c329e885b43631bf62ec0c" - dependencies: - symbol-observable "1.0.4" + version "3.8.8" + resolved "https://registry.yarnpkg.com/kefir/-/kefir-3.8.8.tgz#235932ddfbed422acebf5d7cba503035e9ea05c5" + integrity sha512-xWga7QCZsR2Wjy2vNL3Kq/irT+IwxwItEWycRRlT5yhqHZK2fmEhziP+LzcJBWSTAMranGKtGTQ6lFpyJS3+jA== -kind-of@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== dependencies: - is-buffer "^1.0.2" + is-buffer "^1.1.5" -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" lodash._baseassign@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + integrity sha512-t3N26QR2IdSN+gqSy9Ds9pBu/J1EAFEshKlUHpJG3rvyJOYgcELIxcIeKKfZk7sjOz11cFfzJRsyFry/JyabJQ== dependencies: lodash._basecopy "^3.0.0" lodash.keys "^3.0.0" @@ -1483,22 +1878,27 @@ lodash._baseassign@^3.0.0: lodash._basecopy@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + integrity sha512-rFR6Vpm4HeCK1WPGvjZSJ+7yik8d8PVUdCJx5rT2pogG4Ve/2ZS7kfmO5l5T2o5V2mqlNIfSF5MZlr1+xOoYQQ== lodash._basecreate@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" + integrity sha512-EDem6C9iQpn7fxnGdmhXmqYGjCkStmDXT4AeyB2Ph8WKbglg4aJZczNkQglj+zWXcOEEkViK8THuV2JvugW47g== lodash._getnative@^3.0.0: version "3.9.1" resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + integrity sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA== lodash._isiterateecall@^3.0.0: version "3.0.9" resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + integrity sha512-De+ZbrMu6eThFti/CSzhRvTKMgQToLxbij58LMfM8JnYDNSOjkjTCIaa8ixglOeGh2nyPlakbt5bJWJ7gvpYlQ== lodash.create@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" + integrity sha512-IUfOYwDEbI8JbhW6psW+Ig01BOVK67dTSCUAbS58M0HBkPcAv/jHuxD+oJVP2tUCo3H9L6f/8GM6rxwY+oc7/w== dependencies: lodash._baseassign "^3.0.0" lodash._basecreate "^3.0.0" @@ -1507,43 +1907,63 @@ lodash.create@3.1.1: lodash.isarguments@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== lodash.isarray@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + integrity sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ== lodash.keys@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + integrity sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ== dependencies: lodash._getnative "^3.0.0" lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" lodash@^4.17.4: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" - -lodash@^4.2.0: - version "4.17.3" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.3.tgz#557ed7d2a9438cac5fd5a43043ca60cb455e01f7" + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== loose-envify@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: - js-tokens "^3.0.0" + js-tokens "^3.0.0 || ^4.0.0" lru-cache@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== dependencies: pseudomap "^1.0.2" yallist "^2.1.2" +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== + dependencies: + object-visit "^1.0.0" + +math-random@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" + integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== + micromatch@^2.1.5: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + integrity sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA== dependencies: arr-diff "^2.0.0" array-unique "^0.2.1" @@ -1559,119 +1979,163 @@ micromatch@^2.1.5: parse-glob "^3.0.4" regex-cache "^0.4.2" -mime-db@~1.25.0: - version "1.25.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392" - -mime-types@^2.1.12, mime-types@~2.1.7: - version "2.1.13" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.13.tgz#e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88" +micromatch@^3.1.10: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== dependencies: - mime-db "~1.25.0" + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" -minimatch@^3.0.0, minimatch@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: - brace-expansion "^1.0.0" + mime-db "1.52.0" + +minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q== -minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" +minimist@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== -mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA== dependencies: minimist "0.0.8" +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + mocha@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.2.0.tgz#7dc4f45e5088075171a68896814e6ae9eb7a85e3" + version "3.5.3" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.5.3.tgz#1e0480fe36d2da5858d1eb6acc38418b26eaa20d" + integrity sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg== dependencies: browser-stdout "1.3.0" commander "2.9.0" - debug "2.2.0" - diff "1.4.0" + debug "2.6.8" + diff "3.2.0" escape-string-regexp "1.0.5" - glob "7.0.5" + glob "7.1.1" growl "1.9.2" + he "1.1.1" json3 "3.3.2" lodash.create "3.1.1" mkdirp "0.5.1" supports-color "3.1.2" -ms@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== -nan@^2.3.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45" +nan@^2.12.1, nan@^2.9.2: + version "2.16.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.16.0.tgz#664f43e45460fb98faf00edca0bb0d7b8dce7916" + integrity sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA== -nan@^2.7.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" nbind@^0.3.14: - version "0.3.14" - resolved "https://registry.yarnpkg.com/nbind/-/nbind-0.3.14.tgz#ea85b685ae86801012509062f6ce4d639a19b864" + version "0.3.15" + resolved "https://registry.yarnpkg.com/nbind/-/nbind-0.3.15.tgz#20c74d77d54e28627ab8268c2767f7e40aef8c53" + integrity sha512-TrKLNRj5D8wZRJb7XmUNbA1W3iTigAEpm3qaGig5bEWY/iCT2IQBgBc2EUGO59FbRIGhx5hB/McVwqxlSGScVw== dependencies: emscripten-library-decorator "~0.2.2" mkdirp "~0.5.1" - nan "^2.7.0" + nan "^2.9.2" node-gyp@^3.6.2: - version "3.6.2" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60" + version "3.8.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" + integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== dependencies: fstream "^1.0.0" glob "^7.0.3" graceful-fs "^4.1.2" - minimatch "^3.0.2" mkdirp "^0.5.0" nopt "2 || 3" npmlog "0 || 1 || 2 || 3 || 4" osenv "0" - request "2" + request "^2.87.0" rimraf "2" semver "~5.3.0" tar "^2.0.0" which "1" -node-pre-gyp@^0.6.29: - version "0.6.32" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.32.tgz#fc452b376e7319b3d255f5f34853ef6fd8fe1fd5" - dependencies: - mkdirp "~0.5.1" - nopt "~3.0.6" - npmlog "^4.0.1" - rc "~1.1.6" - request "^2.79.0" - rimraf "~2.5.4" - semver "~5.3.0" - tar "~2.2.1" - tar-pack "~3.3.0" - -"nopt@2 || 3", nopt@~3.0.6: +"nopt@2 || 3": version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + integrity sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg== dependencies: abbrev "1" -normalize-path@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" +normalize-path@^2.0.0, normalize-path@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== + dependencies: + remove-trailing-separator "^1.0.1" -normalize-path@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== @@ -1679,88 +2143,106 @@ normalize-path@^3.0.0: "npmlog@0 || 1 || 2 || 3 || 4": version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== dependencies: are-we-there-yet "~1.1.2" console-control-strings "~1.1.0" gauge "~2.7.3" set-blocking "~2.0.0" -npmlog@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.1" - set-blocking "~2.0.0" - 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" + integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== -oauth-sign@~0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== object-assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== + dependencies: + isobject "^3.0.0" object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + integrity sha512-UiAM5mhmIuKLsOvrL+B0U2d1hXHF3bFYWIuH1LMpuV2EJEHG1Ntz06PgLEHjm6VFd87NpH8rastvPoyv6UW2fA== dependencies: for-own "^0.1.4" is-extendable "^0.1.1" +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== + dependencies: + isobject "^3.0.1" + once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - dependencies: - wrappy "1" - -once@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== osenv@0: - version "0.1.4" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -output-file-sync@^1.1.0: +output-file-sync@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" + integrity sha512-uQLlclru4xpCi+tfs80l3QF24KL81X57ELNMy7W/dox+JTtxUf1bLyQ8968fFCmSqqbokjW0kn+WBIlO+rSkNg== dependencies: graceful-fs "^4.1.4" mkdirp "^0.5.1" object-assign "^4.1.0" -p-limit@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" - integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: - p-limit "^2.0.0" + p-limit "^2.2.0" p-try@^2.0.0: version "2.2.0" @@ -1770,145 +2252,159 @@ p-try@^2.0.0: parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + integrity sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA== dependencies: glob-base "^0.3.0" is-dotfile "^1.0.0" is-extglob "^1.0.0" is-glob "^2.0.0" -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== -path-is-absolute@^1.0.0: +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== -picomatch@^2.0.4: - version "2.0.7" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6" - integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA== +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - dependencies: - pinkie "^2.0.0" +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + integrity sha512-s/46sYeylUfHNjI+sA/78FAHlmIuKqI9wNnzEOGehAlUUYeObv5C2mOinXBjyUyWmJ2SfcS2/ydApH4hTF4WXQ== -private@^0.1.6: - version "0.1.7" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" +private@^0.1.6, private@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" +psl@^1.1.28: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== -qs@~6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -randomatic@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" +qs@~6.5.2: + version "6.5.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== + +randomatic@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" + integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== dependencies: - is-number "^2.0.2" - kind-of "^3.0.2" + is-number "^4.0.0" + kind-of "^6.0.0" + math-random "^1.0.1" -rc@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9" +readable-stream@^2.0.2, readable-stream@^2.0.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== dependencies: - deep-extend "~0.4.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~1.0.4" - -"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e" - dependencies: - buffer-shims "^1.0.0" core-util-is "~1.0.0" - inherits "~2.0.1" + inherits "~2.0.3" isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" - -readable-stream@~2.1.4: - version "2.1.5" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" - dependencies: - buffer-shims "^1.0.0" - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" util-deprecate "~1.0.1" readdirp@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== dependencies: - graceful-fs "^4.1.2" - minimatch "^3.0.2" + graceful-fs "^4.1.11" + micromatch "^3.1.10" readable-stream "^2.0.2" - set-immediate-shim "^1.0.1" -readdirp@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.1.1.tgz#b158123ac343c8b0f31d65680269cc0fc1025db1" - integrity sha512-XXdSXZrQuvqoETj50+JAitxz1UPdt5dupjT6T5nVB+WvjMv2XKYj+s7hPeAVCXvmJrL36O4YYyWlIC3an2ePiQ== +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: - picomatch "^2.0.4" + picomatch "^2.2.1" regenerate@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.10.0: +regenerator-runtime@^0.10.5: version "0.10.5" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + integrity sha512-02YopEIhAgiBHWeoTiA8aitHDt8z6w+rQqNuIftlM+ZtvSl/brTouaU7DW6GO/cHtvxJvS4Hwv2ibKdxIRi24w== regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== regenerator-transform@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q== dependencies: babel-runtime "^6.18.0" babel-types "^6.19.0" private "^0.1.6" regex-cache@^0.4.2: - version "0.4.3" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== dependencies: is-equal-shallow "^0.1.3" - is-primitive "^2.0.0" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" regexpu-core@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + integrity sha512-tJ9+S4oKjxY8IZ9jmjnp/mtytu1u3iyIQAfmI51IKWH6bFf7XR1ybtaO6j7INhZKXOTYADk7V5qxaqLkmNxiZQ== dependencies: regenerate "^1.2.1" regjsgen "^0.2.0" @@ -1917,216 +2413,326 @@ regexpu-core@^2.0.0: regjsgen@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + integrity sha512-x+Y3yA24uF68m5GA+tBjbGYo64xXVJpbToBaWCoSNSc1hdk6dfctaRWrNFTVJZIIhL5GxW8zwjoixbnifnK59g== regjsparser@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + integrity sha512-jlQ9gYLfk2p3V5Ag5fYhA7fv7OHzd1KUH0PRP46xc3TgwjwgROIW572AfYg/X9kaNq/LJnu6oJcFRXlIrGoTRw== dependencies: jsesc "~0.5.0" -repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== -repeat-string@^1.5.2: +repeat-element@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== + +repeat-string@^1.5.2, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== repeating@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A== dependencies: is-finite "^1.0.0" -request@2, request@^2.79.0: - version "2.79.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" +request@^2.87.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~2.0.6" - hawk "~3.1.3" - http-signature "~1.1.0" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" is-typedarray "~1.0.0" isstream "~0.1.2" json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - qs "~6.3.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - uuid "^3.0.0" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== + resolve@~1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg== -rimraf@2, rimraf@~2.5.1, rimraf@~2.5.4: - version "2.5.4" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +rimraf@2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: - glob "^7.0.5" + glob "^7.1.3" + +safe-buffer@^5.0.1, safe-buffer@^5.1.2: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== + dependencies: + ret "~0.1.10" + +safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + integrity sha512-mfmm3/H9+67MCVix1h+IXTpDwL6710LyHuk7+cWC9T1mE0qz4iHhh6r4hU2wrIT9iTsAAC2XQRvfblL028cpLw== set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== -set-immediate-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== dependencies: shebang-regex "^1.0.0" shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== signal-exit@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg== -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== dependencies: - hoek "2.x.x" + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" -source-map-support@^0.4.2: - version "0.4.15" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.15.tgz#03202df65c06d2bd8c7ec2362a193056fef8d3b1" +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== dependencies: source-map "^0.5.6" -source-map@^0.5.0, source-map@^0.5.6: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + +source-map@^0.5.6, source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" sshpk@^1.7.0: - version "1.10.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0" + version "1.17.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" + integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - optionalDependencies: bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" ecc-jsbn "~0.1.1" - jodid25519 "^1.0.0" + getpass "^0.1.1" jsbn "~0.1.0" + safer-buffer "^2.0.2" tweetnacl "~0.14.0" +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== dependencies: code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - -stringstream@~0.0.4: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== dependencies: ansi-regex "^2.0.0" -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - ansi-regex "^4.1.0" - -strip-json-comments@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" + ansi-regex "^5.0.1" supports-color@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" + integrity sha512-F8dvPrZJtNzvDRX26eNXT4a7AecAvTGljmmnI39xEgSpbHKhQ7N0dO/NTxUExd0wuLHp4zbwYY7lvHq0aKpwrA== dependencies: has-flag "^1.0.0" -supports-color@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" - supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== -symbol-observable@1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" - -tar-pack@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae" - dependencies: - debug "~2.2.0" - fstream "~1.0.10" - fstream-ignore "~1.0.5" - once "~1.3.3" - readable-stream "~2.1.4" - rimraf "~2.5.1" - tar "~2.2.1" - uid-number "~0.0.6" - -tar@^2.0.0, tar@~2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" +tar@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" + integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA== dependencies: block-stream "*" - fstream "^1.0.2" + fstream "^1.0.12" inherits "2" -to-fast-properties@^1.0.1, to-fast-properties@^1.0.3: +to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og== + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" to-regex-range@^5.0.1: version "5.0.1" @@ -2135,118 +2741,176 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -tough-cookie@~2.3.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== dependencies: - punycode "^1.4.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw== -tunnel-agent@~0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== -uid-number@~0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" universalify@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== user-home@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" + integrity sha512-aggiKfEEubv3UwRNqTzLInZpAOmKzwdHqEBmW/hBA/mt99eg+b4VrX6i+IRLxU8+WJYfa33rGwRseg4eElUgsQ== util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -uuid@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -v8flags@^2.0.10: +v8flags@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" + integrity sha512-SKfhk/LlaXzvtowJabLZwD4K6SGRYeoxA7KJeISlUMAB/NT4CBkZjMq3WceX2Ckm4llwqYVo8TICgsDYCBU2tA== dependencies: user-home "^1.1.1" -verror@1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== dependencies: - extsprintf "1.0.2" + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== which@1, which@^1.2.9: - version "1.2.12" - resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: - isexe "^1.1.1" + isexe "^2.0.0" wide-align@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: - string-width "^1.0.1" + string-width "^1.0.2 || 2 || 3 || 4" -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - -xtend@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== -yargs-parser@^13.1.1: - version "13.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" - integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@^13.1.0: - version "13.3.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" - integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== +yargs@^15.0.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== dependencies: - cliui "^5.0.0" - find-up "^3.0.0" + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" get-caller-file "^2.0.1" require-directory "^2.1.1" require-main-filename "^2.0.0" set-blocking "^2.0.0" - string-width "^3.0.0" + string-width "^4.2.0" which-module "^2.0.0" y18n "^4.0.0" - yargs-parser "^13.1.1" + yargs-parser "^18.1.2" diff --git a/website/yarn.lock b/website/yarn.lock index fa5a26e2..8db32f75 100644 --- a/website/yarn.lock +++ b/website/yarn.lock @@ -2,142 +2,267 @@ # yarn lockfile v1 -"@babel/helper-module-imports@^7.0.0-beta.34": - version "7.0.0-beta.51" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.51.tgz#ce00428045fbb7d5ebc0ea7bf835789f15366ab2" +"@ant-design/colors@^3.1.0": + version "3.2.2" + resolved "https://registry.yarnpkg.com/@ant-design/colors/-/colors-3.2.2.tgz#5ad43d619e911f3488ebac303d606e66a8423903" + integrity sha512-YKgNbG2dlzqMhA9NtI3/pbY16m3Yl/EeWBRa+lB1X1YaYxHrxNexiQYCLTWO/uDvAjLFMEDU+zR901waBtMtjQ== dependencies: - "@babel/types" "7.0.0-beta.51" - lodash "^4.17.5" + tinycolor2 "^1.4.1" -"@babel/types@7.0.0-beta.51": - version "7.0.0-beta.51" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.51.tgz#d802b7b543b5836c778aa691797abf00f3d97ea9" +"@ant-design/create-react-context@^0.2.4": + version "0.2.6" + resolved "https://registry.yarnpkg.com/@ant-design/create-react-context/-/create-react-context-0.2.6.tgz#4833a1e4422e5bda5211965e6fed984659c6e4a1" + integrity sha512-pHUuaE50/WEek4w2Q+QYVieLPIGfXM+nUsGSsg8xO6oHBw7dfd14Ws/6q3/L6eZ60zjUiv3WUlSzpWyCOXLqbQ== dependencies: - esutils "^2.0.2" - lodash "^4.17.5" + gud "^1.0.0" + warning "^4.0.3" + +"@ant-design/css-animation@^1.7.2": + version "1.7.3" + resolved "https://registry.yarnpkg.com/@ant-design/css-animation/-/css-animation-1.7.3.tgz#60a1c970014e86b28f940510d69e503e428f1136" + integrity sha512-LrX0OGZtW+W6iLnTAqnTaoIsRelYeuLZWsrmBJFUXDALQphPsN8cE5DCsmoSlL0QYb94BQxINiuS70Ar/8BNgA== + +"@ant-design/icons-react@~2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@ant-design/icons-react/-/icons-react-2.0.1.tgz#17a2513571ab317aca2927e58cea25dd31e536fb" + integrity sha512-r1QfoltMuruJZqdiKcbPim3d8LNsVPB733U0gZEUSxBLuqilwsW28K2rCTWSMTjmFX7Mfpf+v/wdiFe/XCqThw== + dependencies: + "@ant-design/colors" "^3.1.0" + babel-runtime "^6.26.0" + +"@ant-design/icons@~2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@ant-design/icons/-/icons-2.1.1.tgz#7b9c08dffd4f5d41db667d9dbe5e0107d0bd9a4a" + integrity sha512-jCH+k2Vjlno4YWl6g535nHR09PwCEmTBKAG6VqF+rhkrSPRLfgpU2maagwbZPLjaHuU5Jd1DFQ2KJpQuI6uG8w== + +"@babel/helper-module-imports@^7.0.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" + integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== + +"@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/runtime@^7.1.2", "@babel/runtime@^7.7.6": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.0.tgz#22b11c037b094d27a8a2504ea4dcff00f50e2259" + integrity sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/types@^7.18.6": + version "7.19.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.3.tgz#fc420e6bbe54880bce6779ffaf315f5e43ec9624" + integrity sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw== + dependencies: + "@babel/helper-string-parser" "^7.18.10" + "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" "@types/configstore@^2.1.1": version "2.1.1" resolved "https://registry.yarnpkg.com/@types/configstore/-/configstore-2.1.1.tgz#cd1e8553633ad3185c3f2f239ecff5d2643e92b6" + integrity sha512-YY+hm3afkDHeSM2rsFXxeZtu0garnusBWNG1+7MknmDWQHqcH2w21/xOU9arJUi8ch4qyFklidANLCu3ihhVwQ== "@types/debug@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/debug/-/debug-0.0.29.tgz#a1e514adfbd92f03a224ba54d693111dbf1f3754" + integrity sha512-e+ecEzEzjUcoWIx/Sc1rNGGCQPIutBoe8Fh/4C9GarzmpwaqT90Jqkud+nJg9AODR/VOSjMyIJ5gMunZ/5hB2A== "@types/estree@0.0.38": version "0.0.38" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.38.tgz#c1be40aa933723c608820a99a373a16d215a1ca2" - -"@types/events@*": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@types/events/-/events-1.2.0.tgz#81a6731ce4df43619e5c8c945383b3e62a89ea86" + integrity sha512-F/v7t1LwS4vnXuPooJQGBRKRGIoxWUTmA4VHfqjOccFsNDThD5bfUNpITive6s352O7o384wcpEaDV8rHCehDA== "@types/get-port@^0.0.4": version "0.0.4" resolved "https://registry.yarnpkg.com/@types/get-port/-/get-port-0.0.4.tgz#eb6bb7423d9f888b632660dc7d2fd3e69a35643e" + integrity sha512-4uILUlwekrgG+bUNikPDEeAVFdIpTAZD7+lLGcfHHUaeBST9ArGoET0uGFtk0R6xvXdKKJWFAphS8fwVHsg0PQ== "@types/glob@^5.0.30": - version "5.0.35" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-5.0.35.tgz#1ae151c802cece940443b5ac246925c85189f32a" + version "5.0.37" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-5.0.37.tgz#d0982abc88f9aebbd62099d3d70440cbcea692de" + integrity sha512-ATA/xrS7CZ3A2WCPVY4eKdNpybq56zqlTirnHhhyOztZM/lPxJzusOBI3BsaXbu6FrUluqzvMlI4sZ6BDYMlMg== dependencies: - "@types/events" "*" "@types/minimatch" "*" "@types/node" "*" -"@types/history@*", "@types/history@^4.6.2": - version "4.6.2" - resolved "https://registry.yarnpkg.com/@types/history/-/history-4.6.2.tgz#12cfaba693ba20f114ed5765467ff25fdf67ddb0" +"@types/history@*": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@types/history/-/history-5.0.0.tgz#29f919f0c8e302763798118f45b19cab4a886f14" + integrity sha512-hy8b7Y1J8OGe6LbAjj3xniQrj3v6lsivCcrmf4TzSgPzLkhIeKgc5IZnT7ReIqmEuodjfO8EYAuoFvIrHi/+jQ== + dependencies: + history "*" + +"@types/history@^4.6.2", "@types/history@^4.7.11": + version "4.7.11" + resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64" + integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== "@types/minimatch@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== "@types/mkdirp@^0.3.29": version "0.3.29" resolved "https://registry.yarnpkg.com/@types/mkdirp/-/mkdirp-0.3.29.tgz#7f2ad7ec55f914482fc9b1ec4bb1ae6028d46066" + integrity sha512-QRLQpFsIQGO2k8pupga9abfei85GKotAtQ+F6xuQmSGomUt6C52TyMiTFpP8kUwuPKr00gNtu3itLlC6gvI/NA== "@types/node@*": - version "10.5.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.5.1.tgz#d578446f4abff5c0b49ade9b4e5274f6badaadfc" + version "18.7.23" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.23.tgz#75c580983846181ebe5f4abc40fe9dfb2d65665f" + integrity sha512-DWNcCHolDq0ZKGizjx2DZjR/PqsYwAcYUJmfMWqtVU2MBMG5Mo+xFZrhGId5r/O5HOuMPyQEcM6KUBp5lBZZBg== "@types/node@^7.0.11": - version "7.0.66" - resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.66.tgz#3d1dc4d6f52e484e843806ff456379f7e6ad5553" + version "7.10.14" + resolved "https://registry.yarnpkg.com/@types/node/-/node-7.10.14.tgz#06fa7319b8131b969a8da4a14c487e6f28abacf7" + integrity sha512-29GS75BE8asnTno3yB6ubOJOO0FboExEqNJy4bpz0GSmW/8wPTNL4h9h63c6s1uTrOopCmJYe/4yJLh5r92ZUA== + +"@types/prop-types@*": + version "15.7.5" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== "@types/react-router-dom@^4.2.2": - version "4.2.7" - resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-4.2.7.tgz#9d36bfe175f916dd8d7b6b0237feed6cce376b4c" + version "4.3.5" + resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-4.3.5.tgz#72f229967690c890d00f96e6b85e9ee5780db31f" + integrity sha512-eFajSUASYbPHg2BDM1G8Btx+YqGgvROPIg6sBhl3O4kbDdYXdFdfrgQFf/pcBuQVObjfT9AL/dd15jilR5DIEA== dependencies: "@types/history" "*" "@types/react" "*" "@types/react-router" "*" "@types/react-router@*": - version "4.0.28" - resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-4.0.28.tgz#b0445fc38613c81e92ca9ec0e08ab36697d51003" + version "5.1.19" + resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.19.tgz#9b404246fba7f91474d7008a3d48c17b6e075ad6" + integrity sha512-Fv/5kb2STAEMT3wHzdKQK2z8xKq38EDIGVrutYLmQVVLe+4orDFquU52hQrULnEHinMKv9FSA6lf9+uNT1ITtA== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + +"@types/react-slick@^0.23.4": + version "0.23.10" + resolved "https://registry.yarnpkg.com/@types/react-slick/-/react-slick-0.23.10.tgz#56126e6e4e95cdce7771535b2811c2c1931a7caa" + integrity sha512-ZiqdencANDZy6sWOWJ54LDvebuXFEhDlHtXU9FFipQR2BcYU2QJxZhvJPW6YK7cocibUiNn+YvDTbt1HtCIBVA== dependencies: - "@types/history" "*" "@types/react" "*" "@types/react@*": - version "16.4.6" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.4.6.tgz#5024957c6bcef4f02823accf5974faba2e54fada" + version "18.0.21" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.21.tgz#b8209e9626bb00a34c76f55482697edd2b43cc67" + integrity sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA== dependencies: - csstype "^2.2.0" + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/scheduler@*": + version "0.16.2" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" + integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== "@types/tmp@^0.0.32": version "0.0.32" resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.0.32.tgz#0d3cb31022f8427ea58c008af32b80da126ca4e3" + integrity sha512-AA8RS1x/5wL8Gmy9TTYSM7NweiX5uE1V1KGvnCyPcn/TPV5UgfCuVzo9CdP4uqmcNB/rIRkktXfqVqIEozu4bQ== + +"@zeit/schemas@2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@zeit/schemas/-/schemas-2.1.1.tgz#bca9d84df177c85f2d2a7dad37512f384761b23d" + integrity sha512-7uBms9Uwzq1GnLK7ar4FvhUONW5PuuASBomeMJ5rREMYxWdm2R0/5iXH2gUm8uqVT1x8U51CGuoaF40Tc0xoJA== abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -accepts@^1.3.0, accepts@~1.3.4, accepts@~1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" +accepts@^1.3.0, accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: - mime-types "~2.1.18" - negotiator "0.6.1" + mime-types "~2.1.34" + negotiator "0.6.3" acorn@^3.0.0: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + integrity sha512-OLUyIIZ7mF5oaAUT1w0TFqQS81q3saT46x8t7ukpPjMNk+nbs4ZHhs7ToV8EWnLYLepjETXd4XaCE4uxkMeqUw== -add-dom-event-listener@1.x: - version "1.0.2" - resolved "https://registry.yarnpkg.com/add-dom-event-listener/-/add-dom-event-listener-1.0.2.tgz#8faed2c41008721cf111da1d30d995b85be42bed" +add-dom-event-listener@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz#6a92db3a0dd0abc254e095c0f1dc14acbbaae310" + integrity sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw== dependencies: object-assign "4.x" -address@1.0.3, address@^1.0.1: +address@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9" + integrity sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg== + +address@^1.0.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/address/-/address-1.2.1.tgz#25bb61095b7522d65b357baa11bc05492d4c8acd" + integrity sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA== after@0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" + integrity sha512-QbJ0NTQ/I9DI3uSJA4cbexiwQeRAfjPScqIbSjUDd9TOrcg6pTkdgziesOqxBMBzit8vFCTwrP27t13vFOORRA== + +ajv@6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.2.tgz#678495f9b82f7cca6be248dd92f59bff5e1f4360" + integrity sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA== + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.1" ajv@^4.9.1: version "4.11.8" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + integrity sha512-I/bSHSNEcFFqXLf91nchoNB9D1Kie3QKcWdchYUaoIg1+1bdWDkdfdlvdIOJbi9U8xR0y+MWc5D+won9v95WlQ== dependencies: co "^4.6.0" json-stable-stringify "^1.0.1" -ajv@^5.0.0, ajv@^5.1.0: +ajv@^5.0.0: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + integrity sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw== dependencies: co "^4.6.0" fast-deep-equal "^1.0.0" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" +ajv@^6.12.3: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + integrity sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg== dependencies: kind-of "^3.0.2" longest "^1.0.1" @@ -146,103 +271,131 @@ align-text@^0.1.1, align-text@^0.1.3: alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ== amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg== ansi-align@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + integrity sha512-TdlOggdA/zURfMYa7ABC66j+oqfMew58KpJMbUlH3bcZP1b+cBHIHDDn5uH9INsxrHBPjsqM0tDB4jPTF/vgJA== dependencies: string-width "^2.0.0" ansi-escapes@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== -ansi-html@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" +ansi-html-community@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" + integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi@^0.3.0, ansi@~0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/ansi/-/ansi-0.3.1.tgz#0c42d4fb17160d5a9af1e484bace1c66922c1b21" + integrity sha512-iFY7JCgHbepc0b82yLaw4IMortylNb6wG4kL+4R0C3iv6i+RHGHux/yUX5BTiRvSX/shMnngjR1YyNMnXEFh5A== -antd@^3.5.1, antd@^3.6.5: - version "3.6.5" - resolved "https://registry.yarnpkg.com/antd/-/antd-3.6.5.tgz#bed51a7e8c557a9c6331065087929f8ac4800cb2" +antd@^3.6.5, antd@^3.8.4: + version "3.26.20" + resolved "https://registry.yarnpkg.com/antd/-/antd-3.26.20.tgz#f3f570efaaa5950a144942f21eb2aaaa088e9407" + integrity sha512-VIous4ofZfxFtd9K1h9MpRX2sDDpj3QcOFi3YgIc9B/uyDli/GlLb8SWKfQfJaMkaxwatIv503dag2Tog+hiEg== dependencies: - array-tree-filter "^2.0.0" + "@ant-design/create-react-context" "^0.2.4" + "@ant-design/icons" "~2.1.1" + "@ant-design/icons-react" "~2.0.1" + "@types/react-slick" "^0.23.4" + array-tree-filter "^2.1.0" babel-runtime "6.x" - classnames "~2.2.0" - create-react-class "^15.6.0" - css-animation "^1.2.5" + classnames "~2.2.6" + copy-to-clipboard "^3.2.0" + css-animation "^1.5.0" dom-closest "^0.2.0" - enquire.js "^2.1.1" - intersperse "^1.0.0" - lodash "^4.17.5" - moment "^2.19.3" - omit.js "^1.0.0" - prop-types "^15.5.7" - raf "^3.4.0" - rc-animate "^2.4.1" - rc-calendar "~9.6.0" - rc-cascader "~0.13.0" - rc-checkbox "~2.1.5" - rc-collapse "~1.9.0" - rc-dialog "~7.1.0" - rc-dropdown "~2.1.0" - rc-editor-mention "^1.0.2" - rc-form "^2.1.0" - rc-input-number "~4.0.0" - rc-menu "~7.0.2" - rc-notification "~3.1.1" - rc-pagination "~1.16.1" - rc-progress "~2.2.2" - rc-rate "~2.4.0" - rc-select "~8.0.7" - rc-slider "~8.6.0" - rc-steps "~3.1.0" - rc-switch "~1.6.0" - rc-table "~6.1.0" - rc-tabs "~9.2.0" - rc-time-picker "~3.3.0" - rc-tooltip "~3.7.0" - rc-tree "~1.8.0" - rc-tree-select "~1.12.0" - rc-upload "~2.4.0" - rc-util "^4.0.4" - react-lazy-load "^3.0.12" - react-slick "~0.23.1" - shallowequal "^1.0.1" - warning "~4.0.1" + enquire.js "^2.1.6" + is-mobile "^2.1.0" + lodash "^4.17.13" + moment "^2.24.0" + omit.js "^1.0.2" + prop-types "^15.7.2" + raf "^3.4.1" + rc-animate "^2.10.2" + rc-calendar "~9.15.7" + rc-cascader "~0.17.4" + rc-checkbox "~2.1.6" + rc-collapse "~1.11.3" + rc-dialog "~7.6.0" + rc-drawer "~3.1.1" + rc-dropdown "~2.4.1" + rc-editor-mention "^1.1.13" + rc-form "^2.4.10" + rc-input-number "~4.5.0" + rc-mentions "~0.4.0" + rc-menu "~7.5.1" + rc-notification "~3.3.1" + rc-pagination "~1.20.11" + rc-progress "~2.5.0" + rc-rate "~2.5.0" + rc-resize-observer "^0.1.0" + rc-select "~9.2.0" + rc-slider "~8.7.1" + rc-steps "~3.5.0" + rc-switch "~1.9.0" + rc-table "~6.10.5" + rc-tabs "~9.7.0" + rc-time-picker "~3.7.1" + rc-tooltip "~3.7.3" + rc-tree "~2.1.0" + rc-tree-select "~2.9.1" + rc-trigger "^2.6.2" + rc-upload "~2.9.1" + rc-util "^4.16.1" + react-lazy-load "^3.0.13" + react-lifecycles-compat "^3.0.4" + react-slick "~0.25.2" + resize-observer-polyfill "^1.5.1" + shallowequal "^1.1.0" + warning "~4.0.3" any-promise@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-0.1.0.tgz#830b680aa7e56f33451d4b049f3bd8044498ee27" + integrity sha512-lqzY9o+BbeGHRCOyxQkt/Tgvz0IZhTmQiA+LxQW8wSNpcTbj8K+0cZiSEvbpNZZP9/11Gy7dnLO3GNWUXO4d1g== anymatch@^1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" + integrity sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA== dependencies: micromatch "^2.1.5" normalize-path "^2.0.0" @@ -250,14 +403,17 @@ anymatch@^1.3.0: aproba@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== arch@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.1.tgz#8f5c2731aa35a30929221bb0640eed65175ec84e" + version "2.2.0" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" + integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + version "1.1.7" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" + integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== dependencies: delegates "^1.0.0" readable-stream "^2.0.6" @@ -265,179 +421,200 @@ are-we-there-yet@~1.1.2: arg@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arg/-/arg-2.0.0.tgz#c06e7ff69ab05b3a4a03ebe0407fac4cba657545" + integrity sha512-XxNTUzKnz1ctK3ZIcI2XUPlD96wbHP2nGqkPKpvk/HNRlPveYrXIVSTk9m3LcqOgDPg3B1nMvdV/K8wZd7PG4w== argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" -args@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/args/-/args-4.0.0.tgz#5ca24cdba43d4b17111c56616f5f2e9d91933954" - dependencies: - camelcase "5.0.0" - chalk "2.3.2" - leven "2.1.0" - mri "1.1.0" - arr-diff@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + integrity sha512-dtXTVMkh6VkEEA7OhXnN1Ecb8aAGFdZ1LFxtOCoqj4qkyOJMt7+qs6Ahdy6p/NQCPYsRSXXivhSB/J5E9jmYKA== dependencies: arr-flatten "^1.0.1" arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== arr-flatten@^1.0.1, arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== array-each@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" + integrity sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA== array-filter@~0.0.0: version "0.0.1" resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + integrity sha512-VW0FpCIhjZdarWjIz8Vpva7U95fl2Jn+b+mmFFMLn8PIVscOQcAgEznwUzTEuUHuqZqIxwzRlcaN/urTFFQoiw== array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw== array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== array-iterate@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/array-iterate/-/array-iterate-1.1.2.tgz#f66a57e84426f8097f4197fbb6c051b8e5cdf7d8" + version "1.1.4" + resolved "https://registry.yarnpkg.com/array-iterate/-/array-iterate-1.1.4.tgz#add1522e9dd9749bb41152d08b845bd08d6af8b7" + integrity sha512-sNRaPGh9nnmdC8Zf+pT3UqP8rnWj5Hf9wiFGsX3wUQ2yVSIhO2ShFwCoceIPpB41QF6i2OEmrHmCo36xronCVA== array-map@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" + integrity sha512-123XMszMB01QKVptpDQ7x1m1pP5NmJIG1kbl0JSPPRezvwQChxAN0Gvzo7rvR1IZ2tOL2tmiy7kY/KKgnpVVpg== array-reduce@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + integrity sha512-8jR+StqaC636u7h3ye1co3lQRefgVVUQUhuAmRbDqIMeR2yuXzRvkCNQiQ5J/wbREmoBLNtp13dhaaVpZQDRUw== array-slice@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" + integrity sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w== -array-tree-filter@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/array-tree-filter/-/array-tree-filter-1.0.1.tgz#0a8ad1eefd38ce88858632f9cc0423d7634e4d5d" - -array-tree-filter@^2.0.0: +array-tree-filter@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz#873ac00fec83749f255ac8dd083814b4f6329190" + integrity sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw== array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== dependencies: array-uniq "^1.0.1" -array-uniq@^1.0.1, array-uniq@^1.0.2: +array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + integrity sha512-G2n5bG5fSUCpnsXz4+8FUkYsGPkNfLn9YvS66U5qbTIXI2Ynnlo4Bi42bWv+omKUCqz+ejzfClwne0alJWJPhg== array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== arraybuffer.slice@~0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" + integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== asap@~2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== -asn1.js@^4.0.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== dependencies: bn.js "^4.0.0" inherits "^2.0.1" minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== assert-plus@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + integrity sha512-u1L0ZLywRziOVjUhRxI0Qg9G+4RnFB9H/Rq40YWn0dieDgO7vAYeJz6jKAO6t/aruzlDFLAPkQTT87e+f8Imaw== assert@^1.1.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== dependencies: + object-assign "^4.1.1" util "0.10.3" assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== async-each@^1.0.0, async-each@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== -async-limiter@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" - -async-validator@1.x: - version "1.8.2" - resolved "https://registry.yarnpkg.com/async-validator/-/async-validator-1.8.2.tgz#b77597226e96242f8d531c0d46ae295f62422ba4" - dependencies: - babel-runtime "6.x" +async-validator@~1.11.3: + version "1.11.5" + resolved "https://registry.yarnpkg.com/async-validator/-/async-validator-1.11.5.tgz#9d43cf49ef6bb76be5442388d19fb9a6e47597ea" + integrity sha512-XNtCsMAeAH1pdLMEg1z8/Bb3a8cdCbui9QbJATRFHHHW5kT6+NPI3zSVQUXgikTFITzsg+kYY5NTWhM2Orwt9w== async@^0.9.0: version "0.9.2" resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" + integrity sha512-l6ToIJIotphWahxxHyzK9bnLR6kM4jJIIgLShZeqLY7iboHoGkdgFl7W2/Ivi4SkMJYGKqW8vSuk0uKUj6qsSw== -async@^1.3.0, async@^1.4.0, async@^1.5.0: +async@^1.3.0, async@^1.5.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== async@^2.1.2: - version "2.6.1" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== dependencies: - lodash "^4.17.10" + lodash "^4.17.14" async@~0.2.6: version "0.2.10" resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" + integrity sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ== asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -atob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.1.tgz#ae2d5a729477f289d60dd7f96a6314a22dd6c22a" +atob@^2.1.1, atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== autogypi@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/autogypi/-/autogypi-0.2.2.tgz#258bab5f7857755b09beac6a641fea130ff4622d" + integrity sha512-NkDsjbybxo98NEUpvDULvV6w4OxhnX8owBptd8/GlQLhi81TZrh7siRYX9zVEoAYpYaX5QrRuIZAtgYD9PGDXg== dependencies: bluebird "^3.4.0" commander "~2.9.0" @@ -446,6 +623,7 @@ autogypi@^0.2.2: autoprefixer@^6.0.2, autoprefixer@^6.3.1: version "6.7.7" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" + integrity sha512-WKExI/eSGgGAkWAO+wMVdFObZV7hQen54UpD1kCCTN3tvlL3W1jL4+lPP/M7MwoP7Q4RHzKtO3JQ4HxYEcd+xQ== dependencies: browserslist "^1.7.6" caniuse-db "^1.0.30000634" @@ -457,18 +635,22 @@ autoprefixer@^6.0.2, autoprefixer@^6.3.1: aws-sign2@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + integrity sha512-JnJpAS0p9RmixkOvW2XwDxxzs1bd4/VAGIl6Q0EC5YOo+p+hqIhtDhn/nmFnB/xUNXbLkpE2mOjgVIBRKD4xYw== aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== -aws4@^1.2.1, aws4@^1.6.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289" +aws4@^1.2.1, aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== babel-cli@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1" + integrity sha512-wau+BDtQfuSBGQ9PzzFL3REvR9Sxnd4LKwtcHAiPjhugA7K/80vpHXafj+O5bAqJOuSefjOx5ZJnNSR2J1Qw6Q== dependencies: babel-core "^6.26.0" babel-polyfill "^6.26.0" @@ -490,6 +672,7 @@ babel-cli@^6.26.0: babel-code-frame@6.26.0, babel-code-frame@^6.11.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g== dependencies: chalk "^1.1.3" esutils "^2.0.2" @@ -498,6 +681,7 @@ babel-code-frame@6.26.0, babel-code-frame@^6.11.0, babel-code-frame@^6.22.0, bab babel-core@^6.24.1, babel-core@^6.26.0: version "6.26.3" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" + integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== dependencies: babel-code-frame "^6.26.0" babel-generator "^6.26.0" @@ -522,6 +706,7 @@ babel-core@^6.24.1, babel-core@^6.26.0: babel-generator@^6.24.1, babel-generator@^6.26.0: version "6.26.1" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== dependencies: babel-messages "^6.23.0" babel-runtime "^6.26.0" @@ -535,6 +720,7 @@ babel-generator@^6.24.1, babel-generator@^6.26.0: babel-helper-bindify-decorators@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" + integrity sha512-TYX2QQATKA6Wssp6j7jqlw4QLmABDN1olRdEHndYvBXdaXM5dcx6j5rN0+nd+aVL+Th40fAEYvvw/Xxd/LETuQ== dependencies: babel-runtime "^6.22.0" babel-traverse "^6.24.1" @@ -543,6 +729,7 @@ babel-helper-bindify-decorators@^6.24.1: babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + integrity sha512-gCtfYORSG1fUMX4kKraymq607FWgMWg+j42IFPc18kFQEsmtaibP4UrqsXt8FlEJle25HUd4tsoDR7H2wDhe9Q== dependencies: babel-helper-explode-assignable-expression "^6.24.1" babel-runtime "^6.22.0" @@ -551,6 +738,7 @@ babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: babel-helper-builder-react-jsx@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" + integrity sha512-02I9jDjnVEuGy2BR3LRm9nPRb/+Ja0pvZVLr1eI5TYAA/dB0Xoc+WBo50+aDfhGDLhlBY1+QURjn9uvcFd8gzg== dependencies: babel-runtime "^6.26.0" babel-types "^6.26.0" @@ -559,6 +747,7 @@ babel-helper-builder-react-jsx@^6.24.1: babel-helper-call-delegate@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + integrity sha512-RL8n2NiEj+kKztlrVJM9JT1cXzzAdvWFh76xh/H1I4nKwunzE4INBXn8ieCZ+wh4zWszZk7NBS1s/8HR5jDkzQ== dependencies: babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" @@ -568,6 +757,7 @@ babel-helper-call-delegate@^6.24.1: babel-helper-define-map@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + integrity sha512-bHkmjcC9lM1kmZcVpA5t2om2nzT/xiZpo6TJq7UlZ3wqKfzia4veeXbIhKvJXAMzhhEBd3cR1IElL5AenWEUpA== dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.26.0" @@ -577,6 +767,7 @@ babel-helper-define-map@^6.24.1: babel-helper-explode-assignable-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + integrity sha512-qe5csbhbvq6ccry9G7tkXbzNtcDiH4r51rrPUbwwoTzZ18AqxWYRZT6AOmxrpxKnQBW0pYlBI/8vh73Z//78nQ== dependencies: babel-runtime "^6.22.0" babel-traverse "^6.24.1" @@ -585,6 +776,7 @@ babel-helper-explode-assignable-expression@^6.24.1: babel-helper-explode-class@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" + integrity sha512-SFbWewr0/0U4AiRzsHqwsbOQeLXVa9T1ELdqEa2efcQB5KopTnunAqoj07TuHlN2lfTQNPGO/rJR4FMln5fVcA== dependencies: babel-helper-bindify-decorators "^6.24.1" babel-runtime "^6.22.0" @@ -594,6 +786,7 @@ babel-helper-explode-class@^6.24.1: babel-helper-function-name@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + integrity sha512-Oo6+e2iX+o9eVvJ9Y5eKL5iryeRdsIkwRYheCuhYdVHsdEQysbc2z2QkqCLIYnNxkT5Ss3ggrHdXiDI7Dhrn4Q== dependencies: babel-helper-get-function-arity "^6.24.1" babel-runtime "^6.22.0" @@ -604,6 +797,7 @@ babel-helper-function-name@^6.24.1: babel-helper-get-function-arity@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + integrity sha512-WfgKFX6swFB1jS2vo+DwivRN4NB8XUdM3ij0Y1gnC21y1tdBoe6xjVnd7NSI6alv+gZXCtJqvrTeMW3fR/c0ng== dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -611,6 +805,7 @@ babel-helper-get-function-arity@^6.24.1: babel-helper-hoist-variables@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + integrity sha512-zAYl3tqerLItvG5cKYw7f1SpvIxS9zi7ohyGHaI9cgDUjAT6YcY9jIEH5CstetP5wHIVSceXwNS7Z5BpJg+rOw== dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -618,6 +813,7 @@ babel-helper-hoist-variables@^6.24.1: babel-helper-optimise-call-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + integrity sha512-Op9IhEaxhbRT8MDXx2iNuMgciu2V8lDvYCNQbDGjdBNCjaMvyLf4wl4A3b8IgndCyQF8TwfgsQ8T3VD8aX1/pA== dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -625,6 +821,7 @@ babel-helper-optimise-call-expression@^6.24.1: babel-helper-regex@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + integrity sha512-VlPiWmqmGJp0x0oK27Out1D+71nVVCTSdlbhIVoaBAj2lUgrNjBCRR9+llO4lTSb2O4r7PJg+RobRkhBrf6ofg== dependencies: babel-runtime "^6.26.0" babel-types "^6.26.0" @@ -633,6 +830,7 @@ babel-helper-regex@^6.24.1: babel-helper-remap-async-to-generator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + integrity sha512-RYqaPD0mQyQIFRu7Ho5wE2yvA/5jxqCIj/Lv4BXNq23mHYu/vxikOy2JueLiBxQknwapwrJeNCesvY0ZcfnlHg== dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.22.0" @@ -643,6 +841,7 @@ babel-helper-remap-async-to-generator@^6.24.1: babel-helper-replace-supers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + integrity sha512-sLI+u7sXJh6+ToqDr57Bv973kCepItDhMou0xCP2YPVmR1jkHSCY+p1no8xErbV1Siz5QE8qKT1WIwybSWlqjw== dependencies: babel-helper-optimise-call-expression "^6.24.1" babel-messages "^6.23.0" @@ -654,6 +853,7 @@ babel-helper-replace-supers@^6.24.1: babel-helpers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + integrity sha512-n7pFrqQm44TCYvrCDb0MqabAF+JUBq+ijBvNMUxpkLjJaAu32faIexewMumrH5KLLJ1HDyT0PTEqRyAe/GwwuQ== dependencies: babel-runtime "^6.22.0" babel-template "^6.24.1" @@ -661,6 +861,7 @@ babel-helpers@^6.24.1: babel-loader@^6.0.0: version "6.4.1" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.4.1.tgz#0b34112d5b0748a8dcdbf51acf6f9bd42d50b8ca" + integrity sha512-hHvbCsXtwKIznu5Qmqfe/IwZ4O5frqe+j04fN/5u/9Rg48dpWIKyYqAN68N1wwqGSMToo4FhU9/MrH+QZlFdkQ== dependencies: find-cache-dir "^0.1.1" loader-utils "^0.2.16" @@ -670,90 +871,110 @@ babel-loader@^6.0.0: babel-messages@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + integrity sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w== dependencies: babel-runtime "^6.22.0" babel-plugin-add-module-exports@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.2.1.tgz#9ae9a1f4a8dc67f0cdec4f4aeda1e43a5ff65e25" + integrity sha512-3AN/9V/rKuv90NG65m4tTHsI04XrCKsWbztIcW7a8H5iIN7WlvWucRtVV0V/rT4QvtA11n5Vmp20fLwfMWqp6g== babel-plugin-check-es2015-constants@^6.22.0, babel-plugin-check-es2015-constants@^6.8.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + integrity sha512-B1M5KBP29248dViEo1owyY32lk1ZSH2DaNNrXLGt8lyjjHm7pBqAdQ7VKUPR6EEDO323+OvT3MQXbCin8ooWdA== dependencies: babel-runtime "^6.22.0" -babel-plugin-import@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-import/-/babel-plugin-import-1.8.0.tgz#260deddd78f6fea0d110e1d106ba72a518d3c88c" +babel-plugin-import@^1.8.0: + version "1.13.5" + resolved "https://registry.yarnpkg.com/babel-plugin-import/-/babel-plugin-import-1.13.5.tgz#42eed1c5afd9a35ee1b1f8fe922b07c44077d753" + integrity sha512-IkqnoV+ov1hdJVofly9pXRJmeDm9EtROfrc5i6eII0Hix2xMs5FEm8FG3ExMvazbnZBbgHIt6qdO8And6lCloQ== dependencies: - "@babel/helper-module-imports" "^7.0.0-beta.34" + "@babel/helper-module-imports" "^7.0.0" babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + integrity sha512-4Zp4unmHgw30A1eWI5EpACji2qMocisdXhAftfhXoSV9j0Tvj6nRFE3tOmRY912E0FMRm/L5xWE7MGVT2FoLnw== babel-plugin-syntax-async-generators@^6.5.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" + integrity sha512-EbciFN5Jb9iqU9bqaLmmFLx2G8pAUsvpWJ6OzOWBNrSY9qTohXj+7YfZx6Ug1Qqh7tCb1EA7Jvn9bMC1HBiucg== babel-plugin-syntax-class-constructor-call@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416" + integrity sha512-EEuBcXz/wZ81Jaac0LnMHtD4Mfz9XWn2oH2Xj+CHwz2SZWUqqdtR2BgWPSdTGMmxN/5KLSh4PImt9+9ZedDarA== babel-plugin-syntax-class-properties@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + integrity sha512-chI3Rt9T1AbrQD1s+vxw3KcwC9yHtF621/MacuItITfZX344uhQoANjpoSJZleAmW2tjlolqB/f+h7jIqXa7pA== babel-plugin-syntax-decorators@^6.13.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" + integrity sha512-AWj19x2aDm8qFQ5O2JcD6pwJDW1YdcnO+1b81t7gxrGjz5VHiUqeYWAR4h7zueWMalRelrQDXprv2FrY1dbpbw== babel-plugin-syntax-do-expressions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz#5747756139aa26d390d09410b03744ba07e4796d" + integrity sha512-HD/5qJB9oSXzl0caxM+aRD7ENICXqcc3Up/8toDQk7zNIDE7TzsqtxC5f4t9Rwhu2Ya8l9l4j6b3vOsy+a6qxg== babel-plugin-syntax-dynamic-import@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + integrity sha512-MioUE+LfjCEz65Wf7Z/Rm4XCP5k2c+TbMd2Z2JKc7U9uwjBhAfNPE48KC4GTGKhppMeYVepwDBNO/nGY6NYHBA== babel-plugin-syntax-exponentiation-operator@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + integrity sha512-Z/flU+T9ta0aIEKl1tGEmN/pZiI1uXmCiGFRegKacQfEJzp7iNsKloZmyJlQr+75FCJtiFfGIK03SiCvCt9cPQ== babel-plugin-syntax-export-extensions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" + integrity sha512-Eo0rcRaIDMld/W6mVhePiudIuLW+Cr/8eveW3mBREfZORScZgx4rh6BAPyvzdEc/JZvQ+LkC80t0VGFs6FX+lg== babel-plugin-syntax-flow@^6.18.0, babel-plugin-syntax-flow@^6.8.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" + integrity sha512-HbTDIoG1A1op7Tl/wIFQPULIBA61tsJ8Ntq2FAhLwuijrzosM/92kAfgU1Q3Kc7DH/cprJg5vDfuTY4QUL4rDA== babel-plugin-syntax-function-bind@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz#48c495f177bdf31a981e732f55adc0bdd2601f46" + integrity sha512-m8yMoh9LIiNyeLdQs5I9G+3YXo4nqVsKQkk7YplrG4qAFbNi9hkZlow8HDHxhH9QOVFPHmy8+03NzRCdyChIKw== babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + integrity sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw== babel-plugin-syntax-object-rest-spread@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + integrity sha512-C4Aq+GaAj83pRQ0EFgTvw5YO6T3Qz2KGrNRwIj9mSoNHVvdZY4KO2uA6HNtNXCw993iSZnckY1aLW8nOi8i4+w== babel-plugin-syntax-trailing-function-commas@^6.22.0, babel-plugin-syntax-trailing-function-commas@^6.8.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + integrity sha512-Gx9CH3Q/3GKbhs07Bszw5fPTlU+ygrOGfAhEt7W2JICwufpC4SuO0mG0+4NykPBSYPMJhqvVlDBU17qB1D+hMQ== babel-plugin-transform-amd-system-wrapper@^0.3.7: version "0.3.7" resolved "https://registry.yarnpkg.com/babel-plugin-transform-amd-system-wrapper/-/babel-plugin-transform-amd-system-wrapper-0.3.7.tgz#521c782d35644491c979ea683e8a5e1caff0ba42" + integrity sha512-dRL+LfRZrMfq7N4zlHRpBJq3/Moxg+dVcLIyg1YrYDuecgX4jSzn1f4OwjTrK/Xk+p+afNzNaHRQT3RTF8F6yw== dependencies: babel-template "^6.9.0" babel-plugin-transform-async-generator-functions@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" + integrity sha512-uT7eovUxtXe8Q2ufcjRuJIOL0hg6VAUJhiWJBLxH/evYAw+aqoJLcYTR8hqx13iOx/FfbCMHgBmXWZjukbkyPg== dependencies: babel-helper-remap-async-to-generator "^6.24.1" babel-plugin-syntax-async-generators "^6.5.0" @@ -762,6 +983,7 @@ babel-plugin-transform-async-generator-functions@^6.24.1: babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-to-generator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + integrity sha512-7BgYJujNCg0Ti3x0c/DL3tStvnKS6ktIYOmo9wginv/dfZOrbSZ+qG4IRRHMBOzZ5Awb1skTiAsQXg/+IWkZYw== dependencies: babel-helper-remap-async-to-generator "^6.24.1" babel-plugin-syntax-async-functions "^6.8.0" @@ -770,12 +992,14 @@ babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async- babel-plugin-transform-cjs-system-wrapper@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/babel-plugin-transform-cjs-system-wrapper/-/babel-plugin-transform-cjs-system-wrapper-0.6.2.tgz#bd7494775289424ff493b6ed455de495bd71ba1d" + integrity sha512-POp05zg9/3MtDK5QcmsaOasCKWIgbnma8+DLwQAl45Plw5ub1PEr37rG3eNrHb/dP0LEyWjTT3PYu2TDA0owsA== dependencies: babel-template "^6.9.0" babel-plugin-transform-class-constructor-call@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz#80dc285505ac067dcb8d6c65e2f6f11ab7765ef9" + integrity sha512-RvYukT1Nh7njz8P8326ztpQUGCKwmjgu6aRIx1lkvylWITYcskg29vy1Kp8WXIq7FvhXsz0Crf2kS94bjB690A== dependencies: babel-plugin-syntax-class-constructor-call "^6.18.0" babel-runtime "^6.22.0" @@ -784,6 +1008,7 @@ babel-plugin-transform-class-constructor-call@^6.24.1: babel-plugin-transform-class-properties@^6.24.1, babel-plugin-transform-class-properties@^6.8.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" + integrity sha512-n4jtBA3OYBdvG5PRMKsMXJXHfLYw/ZOmtxCLOOwz6Ro5XlrColkStLnz1AS1L2yfPA9BKJ1ZNlmVCLjAL9DSIg== dependencies: babel-helper-function-name "^6.24.1" babel-plugin-syntax-class-properties "^6.8.0" @@ -793,6 +1018,7 @@ babel-plugin-transform-class-properties@^6.24.1, babel-plugin-transform-class-pr babel-plugin-transform-decorators@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" + integrity sha512-skQ2CImwDkCHu0mkWvCOlBCpBIHW4/49IZWVwV4A/EnWjL9bB6UBvLyMNe3Td5XDStSZNhe69j4bfEW8dvUbew== dependencies: babel-helper-explode-class "^6.24.1" babel-plugin-syntax-decorators "^6.13.0" @@ -803,6 +1029,7 @@ babel-plugin-transform-decorators@^6.24.1: babel-plugin-transform-do-expressions@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz#28ccaf92812d949c2cd1281f690c8fdc468ae9bb" + integrity sha512-yQwYqYg+Tnj1InA8W1rsItsZVhkv1Euc4KVua9ledtPz5PDWYz7LVyy6rDBpVYUWFZj5k6GUm3YZpCbIm8Tqew== dependencies: babel-plugin-syntax-do-expressions "^6.8.0" babel-runtime "^6.22.0" @@ -810,18 +1037,21 @@ babel-plugin-transform-do-expressions@^6.22.0: babel-plugin-transform-es2015-arrow-functions@^6.22.0, babel-plugin-transform-es2015-arrow-functions@^6.8.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + integrity sha512-PCqwwzODXW7JMrzu+yZIaYbPQSKjDTAsNNlK2l5Gg9g4rz2VzLnZsStvp/3c46GfXpwkyufb3NCyG9+50FF1Vg== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-block-scoped-functions@^6.22.0, babel-plugin-transform-es2015-block-scoped-functions@^6.8.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + integrity sha512-2+ujAT2UMBzYFm7tidUsYh+ZoIutxJ3pN9IYrF1/H6dCKtECfhmB8UkHVpyxDwkj0CYbQG35ykoz925TUnBc3A== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-block-scoping@^6.23.0, babel-plugin-transform-es2015-block-scoping@^6.24.1, babel-plugin-transform-es2015-block-scoping@^6.8.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + integrity sha512-YiN6sFAQ5lML8JjCmr7uerS5Yc/EMbgg9G8ZNmk2E3nYX4ckHR01wrkeeMijEf5WHNK5TW0Sl0Uu3pv3EdOJWw== dependencies: babel-runtime "^6.26.0" babel-template "^6.26.0" @@ -832,6 +1062,7 @@ babel-plugin-transform-es2015-block-scoping@^6.23.0, babel-plugin-transform-es20 babel-plugin-transform-es2015-classes@^6.23.0, babel-plugin-transform-es2015-classes@^6.24.1, babel-plugin-transform-es2015-classes@^6.8.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + integrity sha512-5Dy7ZbRinGrNtmWpquZKZ3EGY8sDgIVB4CU8Om8q8tnMLrD/m94cKglVcHps0BCTdZ0TJeeAWOq2TK9MIY6cag== dependencies: babel-helper-define-map "^6.24.1" babel-helper-function-name "^6.24.1" @@ -846,6 +1077,7 @@ babel-plugin-transform-es2015-classes@^6.23.0, babel-plugin-transform-es2015-cla babel-plugin-transform-es2015-computed-properties@^6.22.0, babel-plugin-transform-es2015-computed-properties@^6.24.1, babel-plugin-transform-es2015-computed-properties@^6.8.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + integrity sha512-C/uAv4ktFP/Hmh01gMTvYvICrKze0XVX9f2PdIXuriCSvUmV9j+u+BB9f5fJK3+878yMK6dkdcq+Ymr9mrcLzw== dependencies: babel-runtime "^6.22.0" babel-template "^6.24.1" @@ -853,12 +1085,14 @@ babel-plugin-transform-es2015-computed-properties@^6.22.0, babel-plugin-transfor babel-plugin-transform-es2015-destructuring@^6.22.0, babel-plugin-transform-es2015-destructuring@^6.23.0, babel-plugin-transform-es2015-destructuring@^6.8.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + integrity sha512-aNv/GDAW0j/f4Uy1OEPZn1mqD+Nfy9viFGBfQ5bZyT35YqOiqx7/tXdyfZkJ1sC21NyEsBdfDY6PYmLHF4r5iA== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-duplicate-keys@^6.22.0, babel-plugin-transform-es2015-duplicate-keys@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + integrity sha512-ossocTuPOssfxO2h+Z3/Ea1Vo1wWx31Uqy9vIiJusOP4TbF7tPs9U0sJ9pX9OJPf4lXRGj5+6Gkl/HHKiAP5ug== dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -866,12 +1100,14 @@ babel-plugin-transform-es2015-duplicate-keys@^6.22.0, babel-plugin-transform-es2 babel-plugin-transform-es2015-for-of@^6.22.0, babel-plugin-transform-es2015-for-of@^6.23.0, babel-plugin-transform-es2015-for-of@^6.8.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + integrity sha512-DLuRwoygCoXx+YfxHLkVx5/NpeSbVwfoTeBykpJK7JhYWlL/O8hgAK/reforUnZDlxasOrVPPJVI/guE3dCwkw== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-function-name@^6.22.0, babel-plugin-transform-es2015-function-name@^6.24.1, babel-plugin-transform-es2015-function-name@^6.8.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + integrity sha512-iFp5KIcorf11iBqu/y/a7DK3MN5di3pNCzto61FqCNnUX4qeBwcV1SLqe10oXNnCaxBUImX3SckX2/o1nsrTcg== dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.22.0" @@ -880,12 +1116,14 @@ babel-plugin-transform-es2015-function-name@^6.22.0, babel-plugin-transform-es20 babel-plugin-transform-es2015-literals@^6.22.0, babel-plugin-transform-es2015-literals@^6.8.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + integrity sha512-tjFl0cwMPpDYyoqYA9li1/7mGFit39XiNX5DKC/uCNjBctMxyL1/PT/l4rSlbvBG1pOKI88STRdUsWXB3/Q9hQ== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + integrity sha512-LnIIdGWIKdw7zwckqx+eGjcS8/cl8D74A3BpJbGjKTFFNJSMrjN4bIh22HY1AlkUbeLG6X6OZj56BDvWD+OeFA== dependencies: babel-plugin-transform-es2015-modules-commonjs "^6.24.1" babel-runtime "^6.22.0" @@ -894,6 +1132,7 @@ babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015 babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1, babel-plugin-transform-es2015-modules-commonjs@^6.8.0: version "6.26.2" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" + integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== dependencies: babel-plugin-transform-strict-mode "^6.24.1" babel-runtime "^6.26.0" @@ -903,6 +1142,7 @@ babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-e babel-plugin-transform-es2015-modules-systemjs@^6.23.0, babel-plugin-transform-es2015-modules-systemjs@^6.24.1, babel-plugin-transform-es2015-modules-systemjs@^6.6.5: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + integrity sha512-ONFIPsq8y4bls5PPsAWYXH/21Hqv64TBxdje0FvU3MhIV6QM2j5YS7KvAzg/nTIVLot2D2fmFQrFWCbgHlFEjg== dependencies: babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" @@ -911,6 +1151,7 @@ babel-plugin-transform-es2015-modules-systemjs@^6.23.0, babel-plugin-transform-e babel-plugin-transform-es2015-modules-umd@^6.23.0, babel-plugin-transform-es2015-modules-umd@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + integrity sha512-LpVbiT9CLsuAIp3IG0tfbVo81QIhn6pE8xBJ7XSeCtFlMltuar5VuBV6y6Q45tpui9QWcy5i0vLQfCfrnF7Kiw== dependencies: babel-plugin-transform-es2015-modules-amd "^6.24.1" babel-runtime "^6.22.0" @@ -919,6 +1160,7 @@ babel-plugin-transform-es2015-modules-umd@^6.23.0, babel-plugin-transform-es2015 babel-plugin-transform-es2015-object-super@^6.22.0, babel-plugin-transform-es2015-object-super@^6.24.1, babel-plugin-transform-es2015-object-super@^6.8.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + integrity sha512-8G5hpZMecb53vpD3mjs64NhI1au24TAmokQ4B+TBFBjN9cVoGoOvotdrMMRmHvVZUEvqGUPWL514woru1ChZMA== dependencies: babel-helper-replace-supers "^6.24.1" babel-runtime "^6.22.0" @@ -926,6 +1168,7 @@ babel-plugin-transform-es2015-object-super@^6.22.0, babel-plugin-transform-es201 babel-plugin-transform-es2015-parameters@^6.23.0, babel-plugin-transform-es2015-parameters@^6.24.1, babel-plugin-transform-es2015-parameters@^6.8.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + integrity sha512-8HxlW+BB5HqniD+nLkQ4xSAVq3bR/pcYW9IigY+2y0dI+Y7INFeTbfAQr+63T3E4UDsZGjyb+l9txUnABWxlOQ== dependencies: babel-helper-call-delegate "^6.24.1" babel-helper-get-function-arity "^6.24.1" @@ -937,6 +1180,7 @@ babel-plugin-transform-es2015-parameters@^6.23.0, babel-plugin-transform-es2015- babel-plugin-transform-es2015-shorthand-properties@^6.22.0, babel-plugin-transform-es2015-shorthand-properties@^6.24.1, babel-plugin-transform-es2015-shorthand-properties@^6.8.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + integrity sha512-mDdocSfUVm1/7Jw/FIRNw9vPrBQNePy6wZJlR8HAUBLybNp1w/6lr6zZ2pjMShee65t/ybR5pT8ulkLzD1xwiw== dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -944,12 +1188,14 @@ babel-plugin-transform-es2015-shorthand-properties@^6.22.0, babel-plugin-transfo babel-plugin-transform-es2015-spread@^6.22.0, babel-plugin-transform-es2015-spread@^6.8.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + integrity sha512-3Ghhi26r4l3d0Js933E5+IhHwk0A1yiutj9gwvzmFbVV0sPMYk2lekhOufHBswX7NCoSeF4Xrl3sCIuSIa+zOg== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-sticky-regex@^6.22.0, babel-plugin-transform-es2015-sticky-regex@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + integrity sha512-CYP359ADryTo3pCsH0oxRo/0yn6UsEZLqYohHmvLQdfS9xkf+MbCzE3/Kolw9OYIY4ZMilH25z/5CbQbwDD+lQ== dependencies: babel-helper-regex "^6.24.1" babel-runtime "^6.22.0" @@ -958,18 +1204,21 @@ babel-plugin-transform-es2015-sticky-regex@^6.22.0, babel-plugin-transform-es201 babel-plugin-transform-es2015-template-literals@^6.22.0, babel-plugin-transform-es2015-template-literals@^6.8.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + integrity sha512-x8b9W0ngnKzDMHimVtTfn5ryimars1ByTqsfBDwAqLibmuuQY6pgBQi5z1ErIsUOWBdw1bW9FSz5RZUojM4apg== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-typeof-symbol@^6.22.0, babel-plugin-transform-es2015-typeof-symbol@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + integrity sha512-fz6J2Sf4gYN6gWgRZaoFXmq93X+Li/8vf+fb0sGDVtdeWvxC9y5/bTD7bvfWMEq6zetGEHpWjtzRGSugt5kNqw== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-unicode-regex@^6.22.0, babel-plugin-transform-es2015-unicode-regex@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + integrity sha512-v61Dbbihf5XxnYjtBN04B/JBvsScY37R1cZT5r9permN1cp+b70DY3Ib3fIkgn1DI9U3tGgBJZVD8p/mE/4JbQ== dependencies: babel-helper-regex "^6.24.1" babel-runtime "^6.22.0" @@ -978,18 +1227,21 @@ babel-plugin-transform-es2015-unicode-regex@^6.22.0, babel-plugin-transform-es20 babel-plugin-transform-es3-member-expression-literals@^6.8.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es3-member-expression-literals/-/babel-plugin-transform-es3-member-expression-literals-6.22.0.tgz#733d3444f3ecc41bef8ed1a6a4e09657b8969ebb" + integrity sha512-pnvDBkNkRJnBlmcopdp/bqeWd3++ENojjNrudnWNs8rhhZRlsDG88KJhkQyWmaqPHZw0O5Z7X+gFGu2c8Fw94w== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es3-property-literals@^6.8.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es3-property-literals/-/babel-plugin-transform-es3-property-literals-6.22.0.tgz#b2078d5842e22abf40f73e8cde9cd3711abd5758" + integrity sha512-2tZlDbsRfGeTIBgJiQpduyFC8XDyyH34HLXRg4OqW08gJvUmUwW24inoY5/6tdJlf8Upn8+cmQkfflNATt466A== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-exponentiation-operator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + integrity sha512-LzXDmbMkklvNhprr20//RStKVcT8Cu+SQtX18eMHLhjHf2yFzwtQ0S2f0jQ+89rokoNdmwoSqYzAhq86FxlLSQ== dependencies: babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" babel-plugin-syntax-exponentiation-operator "^6.8.0" @@ -998,6 +1250,7 @@ babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-e babel-plugin-transform-export-extensions@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653" + integrity sha512-mtzELzINaYqdVglyZrDDVwkcFRuE7s6QUFWXxwffKAHB/NkfbJ2NJSytugB43ytIC8UVt30Ereyx+7gNyTkDLg== dependencies: babel-plugin-syntax-export-extensions "^6.8.0" babel-runtime "^6.22.0" @@ -1005,6 +1258,7 @@ babel-plugin-transform-export-extensions@^6.22.0: babel-plugin-transform-flow-strip-types@^6.22.0, babel-plugin-transform-flow-strip-types@^6.8.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" + integrity sha512-TxIM0ZWNw9oYsoTthL3lvAK3+eTujzktoXJg4ubGvICGbVuXVYv5hHv0XXpz8fbqlJaGYY4q5SVzaSmsg3t4Fg== dependencies: babel-plugin-syntax-flow "^6.18.0" babel-runtime "^6.22.0" @@ -1012,6 +1266,7 @@ babel-plugin-transform-flow-strip-types@^6.22.0, babel-plugin-transform-flow-str babel-plugin-transform-function-bind@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz#c6fb8e96ac296a310b8cf8ea401462407ddf6a97" + integrity sha512-9Ec4KYf1GurT39mlUjDSlN7HWSlB3u3mWRMogQbb+Y88lO0ZM3rJ0ADhPnQwWK9TbO6e/4E+Et1rrfGY9mFimA== dependencies: babel-plugin-syntax-function-bind "^6.8.0" babel-runtime "^6.22.0" @@ -1019,18 +1274,21 @@ babel-plugin-transform-function-bind@^6.22.0: babel-plugin-transform-global-system-wrapper@^0.3.4: version "0.3.4" resolved "https://registry.yarnpkg.com/babel-plugin-transform-global-system-wrapper/-/babel-plugin-transform-global-system-wrapper-0.3.4.tgz#948dd7d29fc21447e39bd3447f2debc7f2f73aac" + integrity sha512-WDCmdUeRLqn25gzR7fYmNOWVXwnDOhR0cM0uOJ0kDP3EdF2Y1I6G6y5pBDeZoLOgu5xCe8cEzOMKRljxu0oGdw== dependencies: babel-template "^6.9.0" babel-plugin-transform-object-assign@^6.8.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz#f99d2f66f1a0b0d498e346c5359684740caa20ba" + integrity sha512-N6Pddn/0vgLjnGr+mS7ttlFkQthqcnINE9EMOxB0CF8F4t6kuJXz6NUeLfSoRbLmkGh0mgDs9i2isdaZj0Ghtg== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-object-rest-spread@^6.22.0, babel-plugin-transform-object-rest-spread@^6.8.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" + integrity sha512-ocgA9VJvyxwt+qJB0ncxV8kb/CjfTcECUY4tQ5VT7nP6Aohzobm8CDFaQ5FHdvZQzLmf0sgDxB8iRXZXxwZcyA== dependencies: babel-plugin-syntax-object-rest-spread "^6.8.0" babel-runtime "^6.26.0" @@ -1038,12 +1296,14 @@ babel-plugin-transform-object-rest-spread@^6.22.0, babel-plugin-transform-object babel-plugin-transform-react-display-name@^6.23.0, babel-plugin-transform-react-display-name@^6.8.0: version "6.25.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" + integrity sha512-QLYkLiZeeED2PKd4LuXGg5y9fCgPB5ohF8olWUuETE2ryHNRqqnXlEVP7RPuef89+HTfd3syptMGVHeoAu0Wig== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-react-jsx-self@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" + integrity sha512-Y3ZHP1nunv0U1+ysTNwLK39pabHj6cPVsfN4TRC7BDBfbgbyF4RifP5kd6LnbuMV9wcfedQMe7hn1fyKc7IzTQ== dependencies: babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.22.0" @@ -1051,6 +1311,7 @@ babel-plugin-transform-react-jsx-self@^6.22.0: babel-plugin-transform-react-jsx-source@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" + integrity sha512-pcDNDsZ9q/6LJmujQ/OhjeoIlp5Nl546HJ2yiFIJK3mYpgNXhI5/S9mXfVxu5yqWAi7HdI7e/q6a9xtzwL69Vw== dependencies: babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.22.0" @@ -1058,6 +1319,7 @@ babel-plugin-transform-react-jsx-source@^6.22.0: babel-plugin-transform-react-jsx@^6.24.1, babel-plugin-transform-react-jsx@^6.8.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" + integrity sha512-s+q/Y2u2OgDPHRuod3t6zyLoV8pUHc64i/O7ZNgIOEdYTq+ChPeybcKBi/xk9VI60VriILzFPW+dUxAEbTxh2w== dependencies: babel-helper-builder-react-jsx "^6.24.1" babel-plugin-syntax-jsx "^6.8.0" @@ -1066,12 +1328,14 @@ babel-plugin-transform-react-jsx@^6.24.1, babel-plugin-transform-react-jsx@^6.8. babel-plugin-transform-regenerator@^6.22.0, babel-plugin-transform-regenerator@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + integrity sha512-LS+dBkUGlNR15/5WHKe/8Neawx663qttS6AGqoOUhICc9d1KciBvtrQSuc0PI+CxQ2Q/S1aKuJ+u64GtLdcEZg== dependencies: regenerator-transform "^0.10.0" babel-plugin-transform-strict-mode@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + integrity sha512-j3KtSpjyLSJxNoCDrhwiJad8kw0gJ9REGj8/CqL0HeRyLnvUNYV9zcqluL6QJSXh3nfsLEmSLvwRfGzrgR96Pw== dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -1079,10 +1343,12 @@ babel-plugin-transform-strict-mode@^6.24.1: babel-plugin-transform-system-register@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-system-register/-/babel-plugin-transform-system-register-0.0.1.tgz#9dff40390c2763ac518f0b2ad7c5ea4f65a5be25" + integrity sha512-i3Y0KdBxgaZg82RLN3M+wD452yZbf6kE1WhcXpb4ZxHqRnekBljwoYj5N5PuzZ6JVqA3V7tYNea1qwiERFnmVw== babel-polyfill@^6.20.0, babel-polyfill@^6.23.0, babel-polyfill@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" + integrity sha512-F2rZGQnAdaHWQ8YAoeRbukc7HS9QgdgeyJ0rQDd485v9opwuPvjpPFcOOT/WmkKTdgy9ESgSPXDcTNpzrGr6iQ== dependencies: babel-runtime "^6.26.0" core-js "^2.5.0" @@ -1091,6 +1357,7 @@ babel-polyfill@^6.20.0, babel-polyfill@^6.23.0, babel-polyfill@^6.26.0: babel-preset-env@^1.6.0: version "1.7.0" resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" + integrity sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg== dependencies: babel-plugin-check-es2015-constants "^6.22.0" babel-plugin-syntax-trailing-function-commas "^6.22.0" @@ -1126,6 +1393,7 @@ babel-preset-env@^1.6.0: babel-preset-es2015@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" + integrity sha512-XfwUqG1Ry6R43m4Wfob+vHbIVBIqTg/TJY4Snku1iIzeH7mUnwHA8Vagmv+ZQbPwhS8HgsdQvy28Py3k5zpoFQ== dependencies: babel-plugin-check-es2015-constants "^6.22.0" babel-plugin-transform-es2015-arrow-functions "^6.22.0" @@ -1153,8 +1421,9 @@ babel-preset-es2015@^6.24.1: babel-plugin-transform-regenerator "^6.24.1" babel-preset-fbjs@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-2.1.4.tgz#22f358e6654073acf61e47a052a777d7bccf03af" + version "2.3.0" + resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-2.3.0.tgz#92ff81307c18b926895114f9828ae1674c097f80" + integrity sha512-ZOpAI1/bN0Y3J1ZAK9gRsFkHy9gGgJoDRUjtUCla/129LC7uViq9nIK22YdHfey8szohYoZY3f9L2lGOv0Edqw== dependencies: babel-plugin-check-es2015-constants "^6.8.0" babel-plugin-syntax-class-properties "^6.8.0" @@ -1188,12 +1457,14 @@ babel-preset-fbjs@^2.1.4: babel-preset-flow@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" + integrity sha512-PQZFJXnM3d80Vq4O67OE6EMVKIw2Vmzy8UXovqulNogCtblWU8rzP7Sm5YgHiCg4uejUxzCkHfNXQ4Z6GI+Dhw== dependencies: babel-plugin-transform-flow-strip-types "^6.22.0" babel-preset-react@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" + integrity sha512-phQe3bElbgF887UM0Dhz55d22ob8czTL1kbhZFwpCE6+R/X9kHktfwmx9JZb+bBSVRGphP5tZ9oWhVhlgjrX3Q== dependencies: babel-plugin-syntax-jsx "^6.3.13" babel-plugin-transform-react-display-name "^6.23.0" @@ -1205,6 +1476,7 @@ babel-preset-react@^6.24.1: babel-preset-stage-0@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz#5642d15042f91384d7e5af8bc88b1db95b039e6a" + integrity sha512-MJD+xBbpsApbKlzAX0sOBF+VeFaUmv5s8FSOO7SSZpes1QgphCjq/UIGRFWSmQ/0i5bqQjLGCTXGGXqcLQ9JDA== dependencies: babel-plugin-transform-do-expressions "^6.22.0" babel-plugin-transform-function-bind "^6.22.0" @@ -1213,6 +1485,7 @@ babel-preset-stage-0@^6.24.1: babel-preset-stage-1@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz#7692cd7dcd6849907e6ae4a0a85589cfb9e2bfb0" + integrity sha512-rn+UOcd7BHDniq1SVxv2/AVVSVI1NK+hfS0I/iR6m6KbOi/aeBRcqBilqO73pd9VUpRXF2HFtlDuC9F2BEQqmg== dependencies: babel-plugin-transform-class-constructor-call "^6.24.1" babel-plugin-transform-export-extensions "^6.22.0" @@ -1221,6 +1494,7 @@ babel-preset-stage-1@^6.24.1: babel-preset-stage-2@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" + integrity sha512-9F+nquz+37PrlTSBdpeQBKnQfAMNBnryXw+m4qBh35FNbJPfzZz+sjN2G5Uf1CRedU9PH7fJkTbYijxmkLX8Og== dependencies: babel-plugin-syntax-dynamic-import "^6.18.0" babel-plugin-transform-class-properties "^6.24.1" @@ -1230,6 +1504,7 @@ babel-preset-stage-2@^6.24.1: babel-preset-stage-3@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" + integrity sha512-eCbEOF8uN0KypFXJmZXn2sTk7bPV9uM5xov7G/7BM08TbQEObsVs0cEWfy6NQySlfk7JBi/t+XJP1JkruYfthA== dependencies: babel-plugin-syntax-trailing-function-commas "^6.22.0" babel-plugin-transform-async-generator-functions "^6.24.1" @@ -1240,6 +1515,7 @@ babel-preset-stage-3@^6.24.1: babel-register@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + integrity sha512-veliHlHX06wjaeY8xNITbveXSiI+ASFnOqvne/LaIJIqOWi2Ogmj91KOugEz/hoh/fwMhXNBJPCv8Xaz5CyM4A== dependencies: babel-core "^6.26.0" babel-runtime "^6.26.0" @@ -1252,6 +1528,7 @@ babel-register@^6.26.0: babel-runtime@6.x, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0, babel-runtime@^6.6.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g== dependencies: core-js "^2.4.0" regenerator-runtime "^0.11.0" @@ -1259,6 +1536,7 @@ babel-runtime@6.x, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^ babel-template@^6.24.1, babel-template@^6.26.0, babel-template@^6.9.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + integrity sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg== dependencies: babel-runtime "^6.26.0" babel-traverse "^6.26.0" @@ -1269,6 +1547,7 @@ babel-template@^6.24.1, babel-template@^6.26.0, babel-template@^6.9.0: babel-traverse@^6.24.1, babel-traverse@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + integrity sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA== dependencies: babel-code-frame "^6.26.0" babel-messages "^6.23.0" @@ -1283,6 +1562,7 @@ babel-traverse@^6.24.1, babel-traverse@^6.26.0: babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g== dependencies: babel-runtime "^6.26.0" esutils "^2.0.2" @@ -1292,50 +1572,57 @@ babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: babylon@^6.17.3, babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== backo2@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + integrity sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA== bail@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.3.tgz#63cfb9ddbac829b02a3128cd53224be78e6c21a3" + version "1.0.5" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" + integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== balanced-match@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.1.0.tgz#b504bd05869b39259dd0c5efc35d843176dccc4a" + integrity sha512-4xb6XqAEo3Z+5pEDJz33R8BZXI8FRJU+cDNLdKgDpmnz+pKKRVYLpdv+VvUAC7yUhBMj4izmyt19eCGv1QGV7A== balanced-match@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.2.1.tgz#7bc658b4bed61eee424ad74f75f5c3e2c4df3cc7" + integrity sha512-euSOvfze1jPOf85KQOmZ2UcWDJ/dUJukTJdj4o9ZZLyjl7IjdIyE4fAQRSuGrxAjB9nvvvrl4N3bPtRq+W+SyQ== balanced-match@^0.4.1, balanced-match@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + integrity sha512-STw03mQKnGUYtoNjmowo4F2cRmIIxYEGiMsjjwla/u5P1lxadj/05WkNaFjNiKTgJkj8KiXbgAiRTmcQRwQNtg== balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base-64@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb" +base64-arraybuffer@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz#9818c79e059b1355f97e0428a017c838e90ba812" + integrity sha512-a1eIFi4R9ySrbiMuyTGx5e92uRH5tQY6kArNcFaKBUleIoLjdjBg7Zxm3Mqm3Kmkf27HLR/1fnxX9q8GQ7Iavg== -base64-arraybuffer@0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" +base64-js@^1.0.2, base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -base64-js@^1.0.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" - -base64id@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" +base64id@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" + integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== dependencies: cache-base "^1.0.1" class-utils "^0.3.5" @@ -1348,10 +1635,12 @@ base@^0.11.1: basename@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/basename/-/basename-0.1.2.tgz#d6039bef939863160c78048cced3c5e7f88cb261" + integrity sha512-A/kA5Ow/F5ydLNYPBSJAUZNzLCJGQnntwmc02W/AKJhkCuv72/1DKQ+rYaeWvK9b41ez0o23TEGp7Mm12uTk4w== bash-glob@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/bash-glob/-/bash-glob-1.0.2.tgz#95ac5631fdd7a8fc569f267167a84eb831979a1b" + integrity sha512-E0TTxH9T/tklSXt5R5X0zwxjW56su2VIE+sAruXbd8AtMjYZxtvioybVdptbRk0/0Nvdz0TVVShKhN9sH5dMpg== dependencies: async-each "^1.0.1" bash-path "^1.0.1" @@ -1364,105 +1653,128 @@ bash-glob@^1.0.1: bash-path@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/bash-path/-/bash-path-1.0.3.tgz#dbc9efbdf18b1c11413dcb59b960e6aa56c84258" + integrity sha512-mGrYvOa6yTY/qNCiZkPFJqWmODK68y6kmVRAJ1NNbWlNoJrUrsFxu7FU2EKg7gbrer6ttrKkF2s/E/lhRy7/OA== dependencies: arr-union "^3.1.0" is-windows "^1.0.1" -basic-auth@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.0.tgz#015db3f353e02e56377755f962742e8981e7bbba" - dependencies: - safe-buffer "5.1.1" - batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== dependencies: tweetnacl "^0.14.3" -better-assert@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" - dependencies: - callsite "1.0.0" - better-queue-memory@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/better-queue-memory/-/better-queue-memory-1.0.2.tgz#aa6d169aa1d0cc77409185cb9cb5c7dc251bcd41" + version "1.0.4" + resolved "https://registry.yarnpkg.com/better-queue-memory/-/better-queue-memory-1.0.4.tgz#f390d6b30bb3b36aaf2ce52b37a483e8a7a81a22" + integrity sha512-SWg5wFIShYffEmJpI6LgbL8/3Dqhku7xI1oEiy6FroP9DbcZlG0ZDjxvPdP9t7hTGW40IpIcC6zVoGT1oxjOuA== better-queue@^3.8.6, better-queue@^3.8.7: - version "3.8.7" - resolved "https://registry.yarnpkg.com/better-queue/-/better-queue-3.8.7.tgz#de39b82b05f55d92ba065c9066958dad80789ab3" + version "3.8.12" + resolved "https://registry.yarnpkg.com/better-queue/-/better-queue-3.8.12.tgz#15c18923d0f9778be94f19c3ef2bd85c632d0db3" + integrity sha512-D9KZ+Us+2AyaCz693/9AyjTg0s8hEmkiM/MB3i09cs4MdK1KgTSGJluXRYmOulR69oLZVo2XDFtqsExDt8oiLA== dependencies: better-queue-memory "^1.0.1" node-eta "^0.9.0" - uuid "^3.0.0" + uuid "^9.0.0" big.js@^3.1.3: version "3.2.0" resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" + integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== binary-extensions@^1.0.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" bl@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" + version "1.2.3" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7" + integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww== dependencies: readable-stream "^2.3.5" safe-buffer "^5.1.1" -blob@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" +blob@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" + integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + integrity sha512-OorbnJVPII4DuUKbjARAe8u8EfqOmkEEaSFIyoQ7OjTHn6kafxWl0wLgoZ2rXaYd7MyLcDaU4TmhfxtwgcccMQ== dependencies: inherits "~2.0.0" -bluebird@3.5.1, bluebird@^3.0.5, bluebird@^3.3.4, bluebird@^3.4.0, bluebird@^3.5.0: - version "3.5.1" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" +bluebird@^3.0.5, bluebird@^3.3.4, bluebird@^3.4.0, bluebird@^3.5.0: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== -body-parser@1.18.2: - version "1.18.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" +bn.js@^5.0.0, bn.js@^5.1.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +body-parser@1.20.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" + integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== dependencies: - bytes "3.0.0" + bytes "3.1.2" content-type "~1.0.4" debug "2.6.9" - depd "~1.1.1" - http-errors "~1.6.2" - iconv-lite "0.4.19" - on-finished "~2.3.0" - qs "6.5.1" - raw-body "2.3.2" - type-is "~1.6.15" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.10.3" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" -boolbase@~1.0.0: +boolbase@^1.0.0, boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== boom@2.x.x: version "2.10.1" resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + integrity sha512-KbiZEa9/vofNcVJXGwdWWn25reQ3V3dHBWbS07FTF3/TOehLnm9GEhJV4T6ZvGPkShRpmUqYwnaCrkj0mRnP6Q== dependencies: hoek "2.x.x" boxen@1.3.0, boxen@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" + integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== dependencies: ansi-align "^2.0.0" camelcase "^4.0.0" @@ -1475,6 +1787,7 @@ boxen@1.3.0, boxen@^1.2.1: brace-expansion@^1.0.0, brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" @@ -1482,6 +1795,7 @@ brace-expansion@^1.0.0, brace-expansion@^1.1.7: braces@^1.8.2: version "1.8.5" resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + integrity sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw== dependencies: expand-range "^1.8.1" preserve "^0.2.0" @@ -1490,6 +1804,7 @@ braces@^1.8.2: braces@^2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== dependencies: arr-flatten "^1.1.0" array-unique "^0.3.2" @@ -1502,19 +1817,22 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" -brorand@^1.0.1: +brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== browserify-aes@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-0.4.0.tgz#067149b668df31c4b58533e02d01e806d8608e2c" + integrity sha512-hnvbMhZ/Ete34qnoKKyjikiYQfZbl89d5UZ29cz3EG13cv/8VRyM8Zs84luB/O7BRzC3qSng9dVovJ6jghcAvg== dependencies: inherits "^2.0.1" browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== dependencies: buffer-xor "^1.0.3" cipher-base "^1.0.0" @@ -1526,53 +1844,63 @@ browserify-aes@^1.0.0, browserify-aes@^1.0.4: browserify-cipher@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== dependencies: browserify-aes "^1.0.4" browserify-des "^1.0.0" evp_bytestokey "^1.0.0" browserify-des@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.1.tgz#3343124db6d7ad53e26a8826318712bdc8450f9c" + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== dependencies: cipher-base "^1.0.1" des.js "^1.0.0" inherits "^2.0.1" + safe-buffer "^5.1.2" -browserify-rsa@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== dependencies: - bn.js "^4.1.0" + bn.js "^5.0.0" randombytes "^2.0.1" browserify-sign@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" browserify-zlib@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" + integrity sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ== dependencies: pako "~0.2.0" browserify-zlib@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== dependencies: pako "~1.0.5" browserslist@^1.0.0, browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: version "1.7.7" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" + integrity sha512-qHJblDE2bXVRYzuDetv/wAeHOJyO97+9wxC1cdCtyzgNuSozOyRCiiLaCR1f71AN66lQdVVBipWm63V+a7bPOw== dependencies: caniuse-db "^1.0.30000639" electron-to-chromium "^1.2.7" @@ -1580,27 +1908,32 @@ browserslist@^1.0.0, browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7 browserslist@^3.2.6: version "3.2.8" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" + integrity sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ== dependencies: caniuse-lite "^1.0.30000844" electron-to-chromium "^1.3.47" -bser@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== dependencies: node-int64 "^0.4.0" btoa@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73" + integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g== buffer-alloc-unsafe@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== -buffer-alloc@^1.1.0: +buffer-alloc@^1.1.0, buffer-alloc@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== dependencies: buffer-alloc-unsafe "^1.1.0" buffer-fill "^1.0.0" @@ -1608,38 +1941,59 @@ buffer-alloc@^1.1.0: buffer-fill@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ== buffer-peek-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-peek-stream/-/buffer-peek-stream-1.0.1.tgz#53b47570a1347787c5bad4ca2ca3021f9d8b3cfd" + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-peek-stream/-/buffer-peek-stream-1.1.0.tgz#4d0c3605274e1af479a2654b9b9674458897cd86" + integrity sha512-b3MXlJ52rPOL5xCAQsiCOy/tY9WXOP/hwATporJriUDxnT3MjJgVppDzTFegpg2Nw7NMS28MKC6IKvaXLnGr+Q== buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== buffer@^4.3.0, buffer@^4.9.0: - version "4.9.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== dependencies: base64-js "^1.0.2" ieee754 "^1.1.4" isarray "^1.0.0" +buffer@^5.2.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + builtin-modules@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + integrity sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ== builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ== bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== dependencies: collection-visit "^1.0.0" component-emitter "^1.2.1" @@ -1651,33 +2005,38 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +call-bind@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - -callsite@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" - -camelcase@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" + integrity sha512-wCyFsDQkKPwwF8BDwOiWNx/9K45L/hvggQiDbve+viMNMQnWhrlYIuBk09offfwCRtCO9P6XwUttufzU11WCVw== camelcase@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + integrity sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g== camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + integrity sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg== camelcase@^4.0.0, camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw== caniuse-api@^1.5.2, caniuse-api@^1.5.3: version "1.6.1" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" + integrity sha512-SBTl70K0PkDUIebbkXrxWqZlHNs0wRgRD6QZ8guctShjbh63gEPfF+Wj0Yw+75f5Y8tSzqAI/NcisYv/cCah2Q== dependencies: browserslist "^1.3.6" caniuse-db "^1.0.30000529" @@ -1685,28 +2044,34 @@ caniuse-api@^1.5.2, caniuse-api@^1.5.3: lodash.uniq "^4.5.0" caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000864" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000864.tgz#35a4b2325a8d4553a46b516dbc233bf391d75555" + version "1.0.30001414" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30001414.tgz#761c1eb9357e6bb1bb369cc7ac0dd270fc2e2e6f" + integrity sha512-tQbbE/z0qT3e1pd7JCqLv/W+tlKu++18cc/Xc3nYQOtcS3YHtav54PlMC9Bi4LHWLv4C28SUXwC/aTv/yTW8kg== caniuse-lite@^1.0.30000844: - version "1.0.30000864" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000864.tgz#7a08c78da670f23c06f11aa918831b8f2dd60ddc" + version "1.0.30001414" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001414.tgz#5f1715e506e71860b4b07c50060ea6462217611e" + integrity sha512-t55jfSaWjCdocnFdKQoO+d2ct9C59UZg4dY3OnUlSZ447r8pUtIKdp0hpAzrGFultmTC+Us+KpKi4GZl/LXlFg== capture-stack-trace@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" + version "1.0.1" + resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" + integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== ccount@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.3.tgz#f1cec43f332e2ea5a569fd46f9f5bde4e6102aff" + version "1.1.0" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" + integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== center-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + integrity sha512-Baz3aNe2gd2LP2qk5U+sDk/m4oSuwSDcBfayTCTBoWpfIGO5XFxPmjILQII4NGiZjD6DoDI6kf7gKaxkf7s3VQ== dependencies: align-text "^0.1.3" lazy-cache "^1.0.3" @@ -1714,6 +2079,7 @@ center-align@^0.1.1: chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== dependencies: ansi-styles "^2.2.1" escape-string-regexp "^1.0.2" @@ -1721,57 +2087,58 @@ chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65" - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.0.tgz#a060a297a6b57e15b61ca63ce84995daa0fe6e52" - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@2.4.1, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.1: +chalk@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" + integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" supports-color "^5.3.0" character-entities-html4@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.2.tgz#c44fdde3ce66b52e8d321d6c1bf46101f0150610" + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125" + integrity sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g== character-entities-legacy@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz#7c6defb81648498222c9855309953d05f4d63a9c" + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" + integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== character-entities@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.2.tgz#58c8f371c0774ef0ba9b2aca5f00d8f100e6e363" + version "1.2.4" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" + integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== character-reference-invalid@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz#21e421ad3d84055952dab4a43a04e73cd425d3ed" + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" + integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== chardet@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + integrity sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg== -charenc@~0.0.1: +charenc@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== cheerio@^0.22.0: version "0.22.0" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" + integrity sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA== dependencies: css-select "~1.2.0" dom-serializer "~0.1.0" @@ -1793,6 +2160,7 @@ cheerio@^0.22.0: chokidar@^1.0.0, chokidar@^1.6.1, chokidar@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" + integrity sha512-mk8fAWcRUOxY7btlLtitj3A45jOwSAxH4tOFOoEGbVsl6cL6pPMWUy7dwZ/canfj3QEdP6FHSnf/l1c6/WkzVg== dependencies: anymatch "^1.3.0" async-each "^1.0.0" @@ -1806,22 +2174,26 @@ chokidar@^1.0.0, chokidar@^1.6.1, chokidar@^1.7.0: fsevents "^1.0.0" chownr@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== chunk-manifest-webpack-plugin@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/chunk-manifest-webpack-plugin/-/chunk-manifest-webpack-plugin-0.1.0.tgz#6138488fc21ddab4ccfb7c1c11d51bb80a943186" + integrity sha512-dJqpH6R/bFJgAJVPXqnWFuy+E63TndbfoY97dLLcPD8EqoiqWt1+AgauJH2eHrwQL9zeqRGa0EnfJz0dAzP90Q== dependencies: webpack-core "^0.4.8" -ci-info@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.3.tgz#710193264bb05c77b8c90d02f5aaf22216a667b2" +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" @@ -1829,39 +2201,51 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: clap@^1.0.9: version "1.2.3" resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" + integrity sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA== dependencies: chalk "^1.1.3" class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== dependencies: arr-union "^3.1.0" define-property "^0.2.5" isobject "^3.0.0" static-extend "^0.1.1" -classnames@2.x, classnames@^2.2.0, classnames@^2.2.1, classnames@^2.2.3, classnames@^2.2.5, classnames@^2.2.6, classnames@~2.2.0: +classnames@2.x, classnames@^2.2.0, classnames@^2.2.1, classnames@^2.2.3, classnames@^2.2.5, classnames@^2.2.6: + version "2.3.2" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" + integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== + +classnames@~2.2.6: version "2.2.6" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" + integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== cli-boxes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + integrity sha512-3Fo5wu8Ytle8q9iCzS4D2MWVL2X7JVWRiS1BnXbTFDhS9c/REkM9vd1AmabsoZoY5/dGi5TT9iKL8Kb6DeBRQg== cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== dependencies: restore-cursor "^2.0.0" cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== clipboard@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.1.tgz#a12481e1c13d8a50f5f036b0560fe5d16d74e46a" + version "2.0.11" + resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.11.tgz#62180360b97dd668b6b3a84ec226975762a70be5" + integrity sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw== dependencies: good-listener "^1.2.2" select "^1.1.2" @@ -1870,6 +2254,7 @@ clipboard@^2.0.0: clipboardy@1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-1.2.3.tgz#0526361bf78724c1f20be248d428e365433c07ef" + integrity sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA== dependencies: arch "^2.1.0" execa "^0.8.0" @@ -1877,6 +2262,7 @@ clipboardy@1.2.3: cliui@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + integrity sha512-GIOYRizG+TGoc7Wgc1LiOTLare95R3mzKgoln+Q/lE4ceiYH19gUpl0l0Ffq4lJDEf3FxujMe6IBfOCs7pfqNA== dependencies: center-align "^0.1.1" right-align "^0.1.1" @@ -1885,6 +2271,7 @@ cliui@^2.1.0: cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w== dependencies: string-width "^1.0.1" strip-ansi "^3.0.1" @@ -1893,6 +2280,7 @@ cliui@^3.2.0: cliui@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== dependencies: string-width "^2.1.1" strip-ansi "^4.0.0" @@ -1901,6 +2289,7 @@ cliui@^4.0.0: clone-deep@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-0.2.4.tgz#4e73dd09e9fb971cc38670c5dced9c1896481cc6" + integrity sha512-we+NuQo2DHhSl+DP6jlUiAhyAjBQrYnpOk15rN6c6JSPScjiCLh8IbSU+VTcph6YS3o7mASE8a0+gbZ7ChLpgg== dependencies: for-own "^0.1.3" is-plain-object "^2.0.1" @@ -1911,32 +2300,39 @@ clone-deep@^0.2.4: clone@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb" + integrity sha512-h5FLmEMFHeuzqmpVRcDayNlVZ+k4uK1niyKQN6oUMe7ieJihv44Vc3dY/kDnnWX4PDQSwes48s965PG/D4GntQ== clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== coa@~1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" + integrity sha512-KAGck/eNAmCL0dcT3BiuYwLbExK6lduR8DxM3C1TyDzaXhZHyZ8ooX5I5+na2e3dPFuibfxrGdorr0/Lr7RYCQ== dependencies: q "^1.1.2" code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== collapse-white-space@^1.0.0, collapse-white-space@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.4.tgz#ce05cf49e54c3277ae573036a26851ba430a0091" + version "1.0.6" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" + integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== dependencies: map-visit "^1.0.0" object-visit "^1.0.0" @@ -1944,30 +2340,36 @@ collection-visit@^1.0.0: color-convert@^0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-0.5.3.tgz#bdb6c69ce660fadffe0b0007cc447e1b9f7282bd" + integrity sha512-RwBeO/B/vZR3dfKL1ye/vx8MHZ40ugzpyfeVG5GsiuGnrlMWe2o8wxBbLCpw9CsxV+wHuzYlCiWnybrIA0ling== color-convert@^1.3.0, color-convert@^1.9.0: - version "1.9.2" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.2.tgz#49881b8fba67df12a96bdf3f56c0aab9e7913147" + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: - color-name "1.1.1" + color-name "1.1.3" -color-name@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" - -color-name@^1.0.0: +color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== color-string@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" + integrity sha512-sz29j1bmSDfoAxKIEU6zwoIZXN6BrFbAMIhfYCNyiZXBDuU/aiHlN84lp/xDzL2ubyFhLDobHIlU1X70XRrMDA== dependencies: color-name "^1.0.0" color@^0.10.1: version "0.10.1" resolved "https://registry.yarnpkg.com/color/-/color-0.10.1.tgz#c04188df82a209ddebccecdacd3ec320f193739f" + integrity sha512-MGvoNNG3vGqFdWjEaj4/6aPqfzLEIlN30YEuSDRaJMujUMx7KTdizi1VzkGnp8Q+nX031k7BnbLv5q7ZkcN14A== dependencies: color-convert "^0.5.3" color-string "^0.3.0" @@ -1975,6 +2377,7 @@ color@^0.10.1: color@^0.11.0, color@^0.11.3, color@^0.11.4: version "0.11.4" resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" + integrity sha512-Ajpjd8asqZ6EdxQeqGzU5WBhhTfJ/0cA4Wlbre7e5vXfmDSmda7Ov6jeKoru+b0vHcb1CqvuroTHp5zIWzhVMA== dependencies: clone "^1.0.2" color-convert "^1.3.0" @@ -1983,6 +2386,7 @@ color@^0.11.0, color@^0.11.3, color@^0.11.4: colormin@^1.0.5: version "1.1.2" resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" + integrity sha512-XSEQUUQUR/lXqGyddiNH3XYFUPYlYr1vXy9rTFMsSOw+J7Q6EQkdlQIrTlYn4TccpsOaUE1PYQNjBn20gwCdgQ== dependencies: color "^0.11.0" css-color-names "0.0.4" @@ -1991,100 +2395,117 @@ colormin@^1.0.5: colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + integrity sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w== -combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" +combined-stream@^1.0.5, combined-stream@^1.0.6, combined-stream@~1.0.5, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" comma-separated-tokens@^1.0.0, comma-separated-tokens@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.5.tgz#b13793131d9ea2d2431cf5b507ddec258f0ce0db" - dependencies: - trim "0.0.1" + version "1.0.8" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" + integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== command-exists@^1.2.2: - version "1.2.7" - resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.7.tgz#16828f0c3ff2b0c58805861ef211b64fc15692a8" + version "1.2.9" + resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== commander@2.9.0, commander@2.9.x, commander@~2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + integrity sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A== dependencies: graceful-readlink ">= 1.0.0" commander@^2.11.0: - version "2.16.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.16.0.tgz#f16390593996ceb4f3eeb020b31d78528f7f8a50" + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== common-tags@0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-0.1.1.tgz#d893486ecc6df22cffe6c393c88c12f71e7e8871" + integrity sha512-RY9tb5l8oFR8kGLRmjoyL7X6ySkq72z3LD94YN25m8cNVcVhW1I42MqT/2eDLazRmicvehmnKZnusWPcHChD1w== dependencies: babel-runtime "^6.6.1" common-tags@^1.4.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" + version "1.8.2" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" + integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== component-bind@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" + integrity sha512-WZveuKPeKAG9qY+FkYDeADzdHyTYdIboXS59ixDeRJL5ZhxpqUnxSOwop4FQjMsiYm3/Or8cegVbpAHNA7pHxw== component-classes@1.x, component-classes@^1.2.5, component-classes@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/component-classes/-/component-classes-1.2.6.tgz#c642394c3618a4d8b0b8919efccbbd930e5cd691" + integrity sha512-hPFGULxdwugu1QWW3SvVOCUHLzO34+a2J6Wqy0c5ASQkfi9/8nZcBB0ZohaEbXOQlCflMAEMmEWk7u7BVs4koA== dependencies: component-indexof "0.0.3" -component-emitter@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.0.tgz#ccd113a86388d06482d03de3fc7df98526ba8efe" - -component-emitter@1.2.1, component-emitter@^1.2.1: +component-emitter@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + integrity sha512-jPatnhd33viNplKjqXKRkGU345p263OIWzDL2wH3LGIGp5Kojo+uXizHmOADRvhGFFTnJqX3jBAKP6vvmSDKcA== + +component-emitter@^1.2.1, component-emitter@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== component-indexof@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/component-indexof/-/component-indexof-0.0.3.tgz#11d091312239eb8f32c8f25ae9cb002ffe8d3c24" + integrity sha512-puDQKvx/64HZXb4hBwIcvQLaLgux8o1CbWl39s41hrIIZDl1lJiD5jc22gj3RBeGK0ovxALDYpIbyjqDUUl0rw== component-inherit@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" + integrity sha512-w+LhYREhatpVqTESyGFg3NlP6Iu0kEKUHETY9GoZP/pQyW4mHFZuFWRUCIqVPZ36ueVLtoOEZaAqbCF2RDndaA== -compressible@~2.0.13: - version "2.0.14" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.14.tgz#326c5f507fbb055f54116782b969a81b67a29da7" +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== dependencies: - mime-db ">= 1.34.0 < 2" + mime-db ">= 1.43.0 < 2" -compression@^1.5.2, compression@^1.6.2: - version "1.7.2" - resolved "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz#aaffbcd6aaf854b44ebb280353d5ad1651f59a69" +compression@^1.5.2: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== dependencies: - accepts "~1.3.4" + accepts "~1.3.5" bytes "3.0.0" - compressible "~2.0.13" + compressible "~2.0.16" debug "2.6.9" - on-headers "~1.0.1" - safe-buffer "5.1.1" + on-headers "~1.0.2" + safe-buffer "5.1.2" vary "~1.1.2" concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== configstore@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" + version "3.1.5" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.5.tgz#e9af331fadc14dabd544d3e7e76dc446a09a530f" + integrity sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA== dependencies: - dot-prop "^4.1.0" + dot-prop "^4.2.1" graceful-fs "^4.1.2" make-dir "^1.0.0" unique-string "^1.0.0" @@ -2092,54 +2513,85 @@ configstore@^3.0.0: xdg-basedir "^3.0.0" connect-history-api-fallback@^1.3.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== console-browserify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" - dependencies: - date-now "^0.1.4" + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ== content-disposition@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + integrity sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA== -content-type@1.0.4, content-type@^1.0.4, content-type@~1.0.4: +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@^1.0.4, content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== convert-hrtime@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/convert-hrtime/-/convert-hrtime-2.0.0.tgz#19bfb2c9162f9e11c2f04c2c79de2b7e8095c627" + integrity sha512-yDqabFVYEYlq5sSgg7bNFktjySVQjyXy1Rhv7HWyPVb+Qd/dQNev80wP1D/LkCd0gNpi3Z6GPhqsvUsNHF6sUg== convert-source-map@^1.5.0, convert-source-map@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +cookie@~0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== + +copy-to-clipboard@^3.2.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.2.tgz#5b263ec2366224b100181dded7ce0579b340c107" + integrity sha512-Vme1Z6RUDzrb6xAI7EZlVZ5uvOk2F//GaxKUxajDqm9LhOVM1inxNAD2vy+UZDYsd0uyA9s7b3/FVZPSxqrCfg== + dependencies: + toggle-selection "^1.0.6" copyfiles@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/copyfiles/-/copyfiles-1.2.0.tgz#a8da3ac41aa2220ae29bd3c58b6984294f2c593c" + integrity sha512-OwCtFvWPBl3DrfW2Bgi9RylnYZv2T0MruQeRyR38tC/KkFx5VZxAVfYI78hcAXeGvZKtu+pa8o8+SwINU0PbJA== dependencies: glob "^7.0.5" ltcdr "^2.2.1" @@ -2151,31 +2603,42 @@ copyfiles@^1.2.0: core-js@^1.0.0, core-js@^1.2.6: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + integrity sha512-ZiPp9pZlgxpWRu0M+YWbm6+aQ84XEfH1JRXvfOc/fILWI0VKhLC2LX13X1NYq4fULzLMq7Hfh43CSo2/aIaUPA== core-js@^2.4.0, core-js@^2.5.0, core-js@^2.5.1: - version "2.5.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" + version "2.6.12" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== -core-util-is@1.0.2, core-util-is@~1.0.0: +core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== create-ecdh@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== dependencies: bn.js "^4.1.0" - elliptic "^6.0.0" + elliptic "^6.5.3" create-error-class@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + integrity sha512-gYTKKexFO3kh200H1Nit76sRwRtOY32vQd3jpAQKpLtZqyNsSQNfI4N7o3eP2wUjV35pTWKRYqFUDBvUha/Pkw== dependencies: capture-stack-trace "^1.0.0" -create-hash@^1.1.0, create-hash@^1.1.2: +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== dependencies: cipher-base "^1.0.1" inherits "^2.0.1" @@ -2183,9 +2646,10 @@ create-hash@^1.1.0, create-hash@^1.1.2: ripemd160 "^2.0.1" sha.js "^2.4.0" -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== dependencies: cipher-base "^1.0.3" create-hash "^1.1.0" @@ -2194,17 +2658,18 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" -create-react-class@15.x, create-react-class@^15.5.2, create-react-class@^15.5.3, create-react-class@^15.6.0: - version "15.6.3" - resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036" +create-react-class@^15.5.3, create-react-class@^15.6.0: + version "15.7.0" + resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.7.0.tgz#7499d7ca2e69bb51d13faf59bd04f0c65a1d6c1e" + integrity sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng== dependencies: - fbjs "^0.8.9" loose-envify "^1.3.1" object-assign "^4.1.1" cross-env@^3.1.1: version "3.2.4" resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-3.2.4.tgz#9e0585f277864ed421ce756f81a980ff0d698aba" + integrity sha512-T8AFEAiuJ0w53ou6rnu3Fipaiu1W6ZO9GYfd33uxe1kAIiXM0fD8QnIm7orcJBOt7WQC5Ply63E7WZW/jSM+FA== dependencies: cross-spawn "^5.1.0" is-windows "^1.0.0" @@ -2212,24 +2677,39 @@ cross-env@^3.1.1: cross-spawn@5.1.0, cross-spawn@^5.0.1, cross-spawn@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A== dependencies: lru-cache "^4.0.1" shebang-command "^1.2.0" which "^1.2.9" -crypt@~0.0.1: +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypt@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== cryptiles@2.x.x: version "2.0.5" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + integrity sha512-FFN5KwpvvQTTS5hWPxrU8/QE4kQUc6uwZcrnlMBN82t1MgAtq8mnoDwINBly9Tdr02seeIIhtdF+UH1feBYGog== dependencies: boom "2.x.x" crypto-browserify@3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.3.0.tgz#b9fc75bb4a0ed61dcf1cd5dae96eb30c9c3e506c" + integrity sha512-9n5nGl6D8zb29Ui8Ji8pVdUIE3RUe6A9zQf2iLPjFKftnkkkJBCGb7TkYAFNjt9nfsvZTLL52CwxzS9Tw7Bujw== dependencies: browserify-aes "0.4.0" pbkdf2-compat "2.0.1" @@ -2239,6 +2719,7 @@ crypto-browserify@3.3.0: crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== dependencies: browserify-cipher "^1.0.0" browserify-sign "^4.0.0" @@ -2255,10 +2736,12 @@ crypto-browserify@^3.11.0: crypto-random-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + integrity sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg== -css-animation@1.x, css-animation@^1.2.5, css-animation@^1.3.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/css-animation/-/css-animation-1.4.1.tgz#5b8813125de0fbbbb0bbe1b472ae84221469b7a8" +css-animation@1.x, css-animation@^1.3.2, css-animation@^1.5.0: + version "1.6.1" + resolved "https://registry.yarnpkg.com/css-animation/-/css-animation-1.6.1.tgz#162064a3b0d51f958b7ff37b3d6d4de18e17039e" + integrity sha512-/48+/BaEaHRY6kNQ2OIPzKf9A6g8WjZYjhiNDNuIVbsm5tXCGIAsHDjB4Xu1C4vXJtUWZo26O68OQkDpNBaPog== dependencies: babel-runtime "6.x" component-classes "^1.2.5" @@ -2266,6 +2749,7 @@ css-animation@1.x, css-animation@^1.2.5, css-animation@^1.3.2: css-color-function@^1.2.0: version "1.3.3" resolved "https://registry.yarnpkg.com/css-color-function/-/css-color-function-1.3.3.tgz#8ed24c2c0205073339fafa004bc8c141fccb282e" + integrity sha512-YD/WhiRZIYgadwFJ48X5QmlOQ/w8Me4yQI6/eSUoiE8spIFp+S/rGpsAH48iyq/0ZWkCDWqVQKUlQmUzn7BQ9w== dependencies: balanced-match "0.1.0" color "^0.11.0" @@ -2275,10 +2759,12 @@ css-color-function@^1.2.0: css-color-names@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q== css-loader@^0.26.1: version "0.26.4" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.26.4.tgz#b61e9e30db94303e6ffc892f10ecd09ad025a1fd" + integrity sha512-BpErUP1CcAdW8IQ0834qG+5yGMzCRKEXH+HmJ/rXNAfOeOY4GwNDOG16Oil7G7MpeP+1QQ9NGCjzI6MebqO+rA== dependencies: babel-code-frame "^6.11.0" css-selector-tokenizer "^0.7.0" @@ -2293,9 +2779,21 @@ css-loader@^0.26.1: postcss-modules-values "^1.1.0" source-list-map "^0.1.7" -css-select@^1.1.0, css-select@~1.2.0: +css-select@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== + dependencies: + boolbase "^1.0.0" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.0.1" + +css-select@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + integrity sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA== dependencies: boolbase "~1.0.0" css-what "2.1" @@ -2303,28 +2801,37 @@ css-select@^1.1.0, css-select@~1.2.0: nth-check "~1.0.1" css-selector-parser@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/css-selector-parser/-/css-selector-parser-1.3.0.tgz#5f1ad43e2d8eefbfdc304fcd39a521664943e3eb" + version "1.4.1" + resolved "https://registry.yarnpkg.com/css-selector-parser/-/css-selector-parser-1.4.1.tgz#03f9cb8a81c3e5ab2c51684557d5aaf6d2569759" + integrity sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g== css-selector-tokenizer@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86" + version "0.7.3" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz#735f26186e67c749aaf275783405cf0661fae8f1" + integrity sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg== dependencies: - cssesc "^0.1.0" - fastparse "^1.1.1" - regexpu-core "^1.0.0" + cssesc "^3.0.0" + fastparse "^1.1.2" css-what@2.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" + version "2.1.3" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" + integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== -cssesc@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" +css-what@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== "cssnano@>=2.6.1 <4": version "3.10.0" resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" + integrity sha512-0o0IMQE0Ezo4b41Yrm8U6Rp9/Ag81vNXY1gZMnT1XhO4DpjEf2utKERqWJbOoz3g1Wdc1d3QSta/cIuJ1wSTEg== dependencies: autoprefixer "^6.3.1" decamelize "^1.1.2" @@ -2362,104 +2869,131 @@ cssesc@^0.1.0: csso@~2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" + integrity sha512-FmCI/hmqDeHHLaIQckMhMZneS84yzUZdrWDAvJVVxOwcKE1P1LF9FGmzr1ktIQSxOw6fl3PaQsmfg+GN+VvR3w== dependencies: clap "^1.0.9" source-map "^0.5.3" -csstype@^2.2.0: - version "2.5.5" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.5.5.tgz#4125484a3d42189a863943f23b9e4b80fedfa106" +csstype@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" + integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng== dependencies: array-find-index "^1.0.1" -d@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== dependencies: - es5-ext "^0.10.9" - -dargs@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/dargs/-/dargs-5.1.0.tgz#ec7ea50c78564cd36c9d5ec18f66329fade27829" + es5-ext "^0.10.50" + type "^1.0.1" dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== dependencies: assert-plus "^1.0.0" data-uri-to-buffer@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-0.0.4.tgz#46e13ab9da8e309745c8d01ce547213ebdb2fe3f" - -date-now@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + integrity sha512-nntmCbCupHk2zFSWe64pTt0LJ2U6Bt3K1MWgwXiEAj9IEaowSXbGLYN7m8xCb4hbpQl8QSCRBkKT9tFRUMkU7A== death@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318" + integrity sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w== -debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.3, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.3, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^3.1.0, debug@~3.1.0: +debug@4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@^3.1.0, debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@~3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== dependencies: ms "2.0.0" +debug@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== decompress-response@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== dependencies: mimic-response "^1.0.0" -deep-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -define-properties@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" +define-properties@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== dependencies: - foreach "^2.0.5" - object-keys "^1.0.8" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== dependencies: is-descriptor "^1.0.0" define-property@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== dependencies: is-descriptor "^1.0.2" isobject "^3.0.1" @@ -2467,10 +3001,12 @@ define-property@^2.0.2: defined@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ== del@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" + integrity sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A== dependencies: globby "^6.1.0" is-path-cwd "^1.0.0" @@ -2482,81 +3018,92 @@ del@^3.0.0: delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== delegate@^3.1.2: version "3.2.0" resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" + integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== -depd@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -depd@~1.1.1, depd@~1.1.2: +depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== des.js@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== dependencies: inherits "^2.0.1" minimalistic-assert "^1.0.0" -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== detab@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.1.tgz#531f5e326620e2fd4f03264a905fb3bcc8af4df4" + version "2.0.4" + resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.4.tgz#b927892069aff405fbb9a186fe97a44a92a94b43" + integrity sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g== dependencies: repeat-string "^1.5.4" detect-file@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-0.1.0.tgz#4935dedfd9488648e006b0129566e9386711ea63" + integrity sha512-akiVcMZym+vO3IxctGG9dnuJT4AYQTAhjsGbjeGqqMUr9Ffy7XEAUmfKLSHugr/tGLaAZ4jWROErPPrsfG8+bQ== dependencies: fs-exists-sync "^0.1.0" detect-file@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== detect-indent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + integrity sha512-BDKtmHlOzwI7iRuEkhzsnPoi5ypEhWAJB5RvHWe1kMr06js3uK5B3734i3ui5Yd+wOJV1cpE4JnivPD283GU/A== dependencies: repeating "^2.0.0" detect-indent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== detect-port-alt@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.3.tgz#a4d2f061d757a034ecf37c514260a98750f2b131" + integrity sha512-Mo7vtTJBvCsLphxecZllzDq24288TBYPOEP3OyFdbLXxoS6j2Nusl5KWh14z6IG6tskKisUsTc/jPLk2nsQaOw== dependencies: address "^1.0.1" debug "^2.6.0" -detect-port@1.2.3, detect-port@^1.2.1: - version "1.2.3" - resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.2.3.tgz#15bf49820d02deb84bfee0a74876b32d791bf610" +detect-port@^1.2.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.5.1.tgz#451ca9b6eaf20451acb0799b8ab40dff7718727b" + integrity sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ== dependencies: address "^1.0.1" - debug "^2.6.0" + debug "4" devcert-san@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/devcert-san/-/devcert-san-0.3.3.tgz#aa77244741b2d831771c011f22ee25e396ad4ba9" + integrity sha512-D14zyhECK3stRUcypfR8hfgBm4tUZG9/ylM8C578ui1QRzhjj/yzw/C5//C2ixo2Lc9r3F/0yxuTKooQZ05aqQ== dependencies: "@types/configstore" "^2.1.1" "@types/debug" "^0.0.29" @@ -2578,87 +3125,123 @@ devcert-san@^0.3.3: diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== dependencies: bn.js "^4.1.0" miller-rabin "^4.0.0" randombytes "^2.0.0" dom-align@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/dom-align/-/dom-align-1.8.0.tgz#c0e89b5b674c6e836cd248c52c2992135f093654" + version "1.12.3" + resolved "https://registry.yarnpkg.com/dom-align/-/dom-align-1.12.3.tgz#a36d02531dae0eefa2abb0c4db6595250526f103" + integrity sha512-Gj9hZN3a07cbR6zviMUBOMPdWxYhbMI+x+WS0NAIu2zFZmbK8ys9R79g+iG9qLnlCwpFoaB+fKy8Pdv470GsPA== dom-closest@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/dom-closest/-/dom-closest-0.2.0.tgz#ebd9f91d1bf22e8d6f477876bbcd3ec90216c0cf" + integrity sha512-6neTn1BtJlTSt+XSISXpnOsF1uni1CHsP/tmzZMGWxasYFHsBOqrHPnzmneqEgKhpagnfnfSfbvRRW0xFsBHAA== dependencies: dom-matches ">=1.0.1" -dom-converter@~0.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b" +dom-converter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== dependencies: - utila "~0.3" + utila "~0.4" -dom-helpers@^3.2.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.3.1.tgz#fc1a4e15ffdf60ddde03a480a9c0fece821dd4a6" +dom-helpers@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" + integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA== + dependencies: + "@babel/runtime" "^7.1.2" dom-matches@>=1.0.1: version "2.0.0" resolved "https://registry.yarnpkg.com/dom-matches/-/dom-matches-2.0.0.tgz#d2728b416a87533980eb089b848d253cf23a758c" + integrity sha512-2VI856xEDCLXi19W+4BechR5/oIS6bKCKqcf16GR8Pg7dGLJ/eBOWVbCmQx2ISvYH6wTNx5Ef7JTOw1dRGRx6A== -dom-scroll-into-view@1.x, dom-scroll-into-view@^1.2.0: +dom-scroll-into-view@1.x, dom-scroll-into-view@^1.2.0, dom-scroll-into-view@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/dom-scroll-into-view/-/dom-scroll-into-view-1.2.1.tgz#e8f36732dd089b0201a88d7815dc3f88e6d66c7e" + integrity sha512-LwNVg3GJOprWDO+QhLL1Z9MMgWe/KAFLxVWKzjRTxNSPn8/LLDIfmuG71YHznXCqaqTjvHJDYO1MEAgX6XCNbQ== -dom-serializer@0, dom-serializer@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== dependencies: - domelementtype "~1.1.1" - entities "~1.1.1" + domelementtype "^2.0.1" + entities "^2.0.0" + +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +dom-serializer@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" + integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== + dependencies: + domelementtype "^1.3.0" + entities "^1.1.1" dom-walk@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" + version "0.1.2" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== -domelementtype@1, domelementtype@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" +domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== -domelementtype@~1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" - -domhandler@2.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594" - dependencies: - domelementtype "1" +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== domhandler@^2.3.0: version "2.4.2" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== dependencies: domelementtype "1" +domhandler@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" + integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== + dependencies: + domelementtype "^2.0.1" + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + domready@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/domready/-/domready-1.0.8.tgz#91f252e597b65af77e745ae24dd0185d5e26d58c" - -domutils@1.1: - version "1.1.6" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" - dependencies: - domelementtype "1" + integrity sha512-uIzsOJUNk+AdGE9a6VDeessoMCzF8RrZvJCX/W8QtyfgdR6Uofn/MvRonih3OtCO79b2VDzDOymuiABrQ4z3XA== domutils@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + integrity sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw== dependencies: dom-serializer "0" domelementtype "1" @@ -2666,209 +3249,263 @@ domutils@1.5.1: domutils@^1.5.1: version "1.7.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== dependencies: dom-serializer "0" domelementtype "1" -dot-prop@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" +domutils@^2.0.0, domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +dot-prop@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4" + integrity sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ== dependencies: is-obj "^1.0.0" dotenv@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d" + integrity sha512-XcaMACOr3JMVcEv0Y/iUM2XaOsATRZ3U1In41/1jjK6vJZ2PZbQ1bzCG8uvaByfaBpl9gqc9QWJovpUGBXLLYQ== draft-js@^0.10.0, draft-js@~0.10.0: version "0.10.5" resolved "https://registry.yarnpkg.com/draft-js/-/draft-js-0.10.5.tgz#bfa9beb018fe0533dbb08d6675c371a6b08fa742" + integrity sha512-LE6jSCV9nkPhfVX2ggcRLA4FKs6zWq9ceuO/88BpXdNCS7mjRTgs0NsV6piUCJX9YxMsB9An33wnkMmU2sD2Zg== dependencies: fbjs "^0.8.15" immutable "~3.7.4" object-assign "^4.1.0" duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + version "0.1.5" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" + integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== duplexer@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== dependencies: jsbn "~0.1.0" + safer-buffer "^2.1.0" ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.47: - version "1.3.51" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.51.tgz#6a42b49daaf7f22a5b37b991daf949f34dbdb9b5" + version "1.4.269" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.269.tgz#93ea2724b07f5f562daa7dd3740a1d28572b028b" + integrity sha512-7mHFONwp7MNvdyto1v70fCwk28NJMFgsK79op+iYHzz1BLE8T66a1B2qW5alb8XgE0yi3FL3ZQjSYZpJpF6snw== -elliptic@^6.0.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" +elliptic@^6.5.3: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" + bn.js "^4.11.9" + brorand "^1.1.0" hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" -"emoji-regex@>=6.0.0 <=6.1.1": - version "6.1.1" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.1.tgz#c6cd0ec1b0642e2a3c67a1137efc5e796da4f88e" +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== emscripten-library-decorator@~0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/emscripten-library-decorator/-/emscripten-library-decorator-0.2.2.tgz#d035f023e2a84c68305cc842cdeea38e67683c40" + integrity sha512-kDmAu7dLbBisaCGrWSNmoZPWeRyHcaJ2k5+z7IgStgZfCNYQmtADRvSic/qHvN+rf6US3HHTfrQ0/D8UdfF1CQ== encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== encoding@^0.1.11: - version "0.1.12" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: - iconv-lite "~0.4.13" + iconv-lite "^0.6.2" end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" -engine.io-client@~3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.2.1.tgz#6f54c0475de487158a1a7c77d10178708b6add36" +engine.io-client@~3.5.0: + version "3.5.3" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.5.3.tgz#3254f61fdbd53503dc9a6f9d46a52528871ca0d7" + integrity sha512-qsgyc/CEhJ6cgMUwxRRtOndGVhIu5hpL5tR4umSpmX/MvkFoIxUTM7oFMDQumHNzlNLwSVy6qhstFPoWTf7dOw== dependencies: - component-emitter "1.2.1" + component-emitter "~1.3.0" component-inherit "0.0.3" debug "~3.1.0" - engine.io-parser "~2.1.1" + engine.io-parser "~2.2.0" has-cors "1.1.0" indexof "0.0.1" - parseqs "0.0.5" - parseuri "0.0.5" - ws "~3.3.1" - xmlhttprequest-ssl "~1.5.4" + parseqs "0.0.6" + parseuri "0.0.6" + ws "~7.4.2" + xmlhttprequest-ssl "~1.6.2" yeast "0.1.2" -engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.2.tgz#4c0f4cff79aaeecbbdcfdea66a823c6085409196" +engine.io-parser@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.2.1.tgz#57ce5611d9370ee94f99641b589f94c97e4f5da7" + integrity sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg== dependencies: after "0.8.2" arraybuffer.slice "~0.0.7" - base64-arraybuffer "0.1.5" - blob "0.0.4" + base64-arraybuffer "0.1.4" + blob "0.0.5" has-binary2 "~1.0.2" -engine.io@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.2.0.tgz#54332506f42f2edc71690d2f2a42349359f3bf7d" +engine.io@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.6.0.tgz#8760e8cd5b8454bd0f422b6466426ac6f598f296" + integrity sha512-Kc8fo5bbg8F4a2f3HPHTEpGyq/IRIQpyeHu3H1ThR14XDD7VrLcsGBo16HUpahgp8YkHJDaU5gNxJZbuGcuueg== dependencies: accepts "~1.3.4" - base64id "1.0.0" - cookie "0.3.1" - debug "~3.1.0" - engine.io-parser "~2.1.0" - ws "~3.3.1" + base64id "2.0.0" + cookie "~0.4.1" + debug "~4.1.0" + engine.io-parser "~2.2.0" + ws "~7.4.2" enhanced-resolve@~0.9.0: version "0.9.1" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e" + integrity sha512-kxpoMgrdtkXZ5h0SeraBS1iRntpTpQ3R8ussdb38+UAFnMGX5DDyJXePm+OCHOcoXvHDw7mc2erbJBpDnl7TPw== dependencies: graceful-fs "^4.1.2" memory-fs "^0.2.0" tapable "^0.1.8" -enquire.js@^2.1.1, enquire.js@^2.1.6: +enquire.js@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/enquire.js/-/enquire.js-2.1.6.tgz#3e8780c9b8b835084c3f60e166dbc3c2a3c89814" + integrity sha512-/KujNpO+PT63F7Hlpu4h3pE3TokKRHN26JYmQpPyjkRD/N57R7bPDNojMXdi7uveAKjYB7yQnartCxZnFWr0Xw== entities@^1.1.1, entities@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== envinfo@^5.8.1: - version "5.10.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-5.10.0.tgz#503a9774ae15b93ea68bdfae2ccd6306624ea6df" + version "5.12.1" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-5.12.1.tgz#83068c33e0972eb657d6bc69a6df30badefb46ef" + integrity sha512-pwdo0/G3CIkQ0y6PCXq4RdkvId2elvtPCJMG0konqlrfkWQbf1DWeH9K2b/cvu2YgGvPPTOnonZxXM1gikFu1w== eol@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/eol/-/eol-0.8.1.tgz#defc3224990c7eca73bb34461a56cf9dc24761d0" + integrity sha512-epQVXqLW/Q0FDlxr5G9NT4V96IsHMiwseOglmD9Tr237QHuBUcAKe/NLqzVVzgGJt7NJ1RoMxBTMVtajQCMbyQ== err-code@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" + integrity sha512-CJAN+O0/yA1CKfRn9SXOGctSpEM7DCon/r/5r2eXFMY2zCCJBasFhcM5I+1kh3Ap11FsQCX+vGHceNPvpWKhoA== errno@^0.1.1, errno@^0.1.3: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== dependencies: prr "~1.0.1" error-ex@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" error-stack-parser@^1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-1.3.6.tgz#e0e73b93e417138d1cd7c0b746b1a4a14854c292" + integrity sha512-xhuSYd8wLgOXwNgjcPeXMPL/IiiA1Huck+OPvClpJViVNNlJVtM41o+1emp7bPvlCJwCatFX2DWc05/DgfbWzA== dependencies: stackframe "^0.3.1" error-stack-parser@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.2.tgz#4ae8dbaa2bf90a8b450707b9149dcabca135520d" + version "2.1.4" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" + integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== dependencies: - stackframe "^1.0.4" + stackframe "^1.3.4" -es5-ext@^0.10.12, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.45" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.45.tgz#0bfdf7b473da5919d5adf3bd25ceb754fccc3653" +es5-ext@^0.10.12, es5-ext@^0.10.35, es5-ext@^0.10.50: + version "0.10.62" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" + integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.1" - next-tick "1" + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + next-tick "^1.1.0" -es6-iterator@~2.0.3: +es6-iterator@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== dependencies: d "1" es5-ext "^0.10.35" es6-symbol "^3.1.1" es6-promise@^4.1.0: - version "4.2.4" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29" + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== -es6-symbol@^3.1.1, es6-symbol@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" +es6-symbol@^3.1.1, es6-symbol@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== dependencies: - d "1" - es5-ext "~0.10.14" + d "^1.0.1" + ext "^1.1.2" es6-template-strings@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/es6-template-strings/-/es6-template-strings-2.0.1.tgz#b166c6a62562f478bb7775f6ca96103a599b4b2c" + integrity sha512-5kTq0dEJfsm/EAteUCgLazcvWEhriVGwWFY3YgIsz89fJd+smi65/N1eS1Hn3B2dAngiqd0EvpXjr8lb7Quzkw== dependencies: es5-ext "^0.10.12" esniff "^1.1" @@ -2876,14 +3513,17 @@ es6-template-strings@^2.0.0: escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== escape-string-regexp@1.0.5, 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" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== esniff@^1.1: version "1.1.0" resolved "https://registry.yarnpkg.com/esniff/-/esniff-1.1.0.tgz#c66849229f91464dede2e0d40201ed6abf65f2ac" + integrity sha512-vmHXOeOt7FJLsqofvFk4WB3ejvcHizCd8toXXwADmYfd02p2QwHRgkUbhYDX54y08nqk818CUTWipgZGlyN07g== dependencies: d "1" es5-ext "^0.10.12" @@ -2891,46 +3531,67 @@ esniff@^1.1: esprima@^2.6.0: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + integrity sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A== esprima@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== eval@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/eval/-/eval-0.1.2.tgz#9f7103284c105a66df4030b2b3273165837013da" + version "0.1.8" + resolved "https://registry.yarnpkg.com/eval/-/eval-0.1.8.tgz#2b903473b8cc1d1989b83a1e7923f883eb357f85" + integrity sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw== dependencies: + "@types/node" "*" require-like ">= 0.1.1" -eventemitter3@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== eventlistener@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/eventlistener/-/eventlistener-0.0.1.tgz#ed2baabb852227af2bcf889152c72c63ca532eb8" + integrity sha512-hXZ5N9hmp3n7ovmVgG+2vIO6KcjSU10/d0A1Ixcf0i29dxCwAGTNGrSJCfLmlvmgQD8FYzyp//S8+Hpq4Nd7uA== events@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + integrity sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw== + +events@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== eventsource@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" + integrity sha512-bbB5tEuvC+SuRUG64X8ghvjgiRniuA4WlehWbFnoN4z6TxDXpyX+BMHF7rMgZAqoe+EbyNRUbHN0uuP9phy5jQ== dependencies: original ">=0.0.5" +eventsource@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-2.0.2.tgz#76dfcc02930fb2ff339520b6d290da573a9e8508" + integrity sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA== + evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== dependencies: md5.js "^1.3.4" safe-buffer "^5.1.1" @@ -2938,12 +3599,14 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: exec-sh@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" + integrity sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw== dependencies: merge "^1.2.0" execa@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw== dependencies: cross-spawn "^5.0.1" get-stream "^3.0.0" @@ -2956,6 +3619,7 @@ execa@^0.7.0: execa@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" + integrity sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA== dependencies: cross-spawn "^5.0.1" get-stream "^3.0.0" @@ -2965,19 +3629,30 @@ execa@^0.8.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -exenv@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + integrity sha512-hxx03P2dJxss6ceIeri9cmYOT4SRs3Zk3afZwWpOsRqLqprhTR8u++SlC+sFGsQr7WGFPdMF7Gjc1njDLDK6UA== dependencies: is-posix-bracket "^0.1.0" expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== dependencies: debug "^2.3.3" define-property "^0.2.5" @@ -2990,24 +3665,28 @@ expand-brackets@^2.1.4: expand-range@^1.8.1: version "1.8.2" resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + integrity sha512-AFASGfIlnIbkKPQwX1yHaDjFvh/1gyKJODme52V6IORh69uEYgZp0o9C+qsIGNVEiuuhQU0CSSl++Rlegg1qvA== dependencies: fill-range "^2.1.0" expand-tilde@^1.2.0, expand-tilde@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-1.2.2.tgz#0b81eba897e5a3d31d1c3d102f8f01441e559449" + integrity sha512-rtmc+cjLZqnu9dSYosX9EWmSJhTwpACgJQTfj4hgg2JjOD/6SIQalZrt4a3aQeh++oNxkazcaxrhPUj6+g5G/Q== dependencies: os-homedir "^1.0.1" expand-tilde@^2.0.0, expand-tilde@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw== dependencies: homedir-polyfill "^1.0.1" express-graphql@^0.6.6: version "0.6.12" resolved "https://registry.yarnpkg.com/express-graphql/-/express-graphql-0.6.12.tgz#dfcb2058ca72ed5190b140830ad8cdbf76a9128a" + integrity sha512-ouLWV0hRw4hnaLtXzzwhdC79ewxKbY2PRvm05mPc/zOH5W5WVCHDQ1SmNxEPBQdUeeSNh29aIqW9zEQkA3kMuA== dependencies: accepts "^1.3.0" content-type "^1.0.4" @@ -3015,60 +3694,73 @@ express-graphql@^0.6.6: raw-body "^2.3.2" express@^4.13.3, express@^4.14.0: - version "4.16.3" - resolved "https://registry.yarnpkg.com/express/-/express-4.16.3.tgz#6af8a502350db3246ecc4becf6b5a34d22f7ed53" + version "4.18.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" + integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== dependencies: - accepts "~1.3.5" + accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.18.2" - content-disposition "0.5.2" + body-parser "1.20.0" + content-disposition "0.5.4" content-type "~1.0.4" - cookie "0.3.1" + cookie "0.5.0" cookie-signature "1.0.6" debug "2.6.9" - depd "~1.1.2" + depd "2.0.0" encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" - finalhandler "1.1.1" + finalhandler "1.2.0" fresh "0.5.2" + http-errors "2.0.0" merge-descriptors "1.0.1" methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.2" + on-finished "2.4.1" + parseurl "~1.3.3" path-to-regexp "0.1.7" - proxy-addr "~2.0.3" - qs "6.5.1" - range-parser "~1.2.0" - safe-buffer "5.1.1" - send "0.16.2" - serve-static "1.13.2" - setprototypeof "1.1.0" - statuses "~1.4.0" - type-is "~1.6.16" + proxy-addr "~2.0.7" + qs "6.10.3" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" utils-merge "1.0.1" vary "~1.1.2" +ext@^1.1.2: + version "1.7.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" + integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== + dependencies: + type "^2.7.2" + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== dependencies: is-extendable "^0.1.0" extend-shallow@^3.0.0, extend-shallow@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== dependencies: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" +extend@^3.0.0, extend@~3.0.0, extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== external-editor@^2.0.4: version "2.2.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" + integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== dependencies: chardet "^0.4.0" iconv-lite "^0.4.17" @@ -3077,12 +3769,14 @@ external-editor@^2.0.4: extglob@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + integrity sha512-1FOj1LOwn42TMrruOHGt18HemVnbwAmAak7krWk+wa93KXxGbK+2jpezm+ytJYDaBX0/SPLZFHKM7m+tKobWGg== dependencies: is-extglob "^1.0.0" extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== dependencies: array-unique "^0.3.2" define-property "^1.0.0" @@ -3096,6 +3790,7 @@ extglob@^2.0.4: extract-text-webpack-plugin@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-1.0.1.tgz#c95bf3cbaac49dc96f1dc6e072549fbb654ccd2c" + integrity sha512-cl5NaZf1uB2ijZsLmoaPaaDMDBkd4ll5fv0b9BUmNADAg537ArDwvcvUY46KR+GI4uWwF7aF3MEo4GKKWv/+vg== dependencies: async "^1.5.0" loader-utils "^0.2.3" @@ -3104,18 +3799,32 @@ extract-text-webpack-plugin@^1.0.1: extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== fast-deep-equal@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + integrity sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw== + +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w== + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-glob@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-1.0.1.tgz#30f9b1120fd57a7f172364a6458fbdbd98187b3c" + integrity sha512-C2VHbdBwSkaQDyavjQZDflZzmZKrsUK3fTdJtsOnED0L0vtHCw+NL0h8pRcydbpRHlNJLZ4/LbOfEdJKspK91A== dependencies: bash-glob "^1.0.1" glob-parent "^3.1.0" @@ -3123,44 +3832,52 @@ fast-glob@^1.0.1: readdir-enhanced "^1.5.2" fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== -fastparse@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" +fast-url-parser@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" + integrity sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ== + dependencies: + punycode "^1.3.2" + +fastparse@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" + integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== fault@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.2.tgz#c3d0fec202f172a3a4d414042ad2bb5e2a3ffbaa" + version "1.0.4" + resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.4.tgz#eafcfc0a6d214fc94601e170df29954a4f842f13" + integrity sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA== dependencies: - format "^0.2.2" + format "^0.2.0" -faye-websocket@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" - dependencies: - websocket-driver ">=0.5.1" - -faye-websocket@~0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" +faye-websocket@^0.11.3, faye-websocket@^0.11.4, faye-websocket@~0.11.0: + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== dependencies: websocket-driver ">=0.5.1" fb-watchman@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== dependencies: - bser "^2.0.0" + bser "2.1.1" -fbjs@^0.8.14, fbjs@^0.8.15, fbjs@^0.8.16, fbjs@^0.8.9: - version "0.8.17" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" +fbjs@^0.8.14, fbjs@^0.8.15, fbjs@^0.8.9: + version "0.8.18" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.18.tgz#9835e0addb9aca2eff53295cd79ca1cfc7c9662a" + integrity sha512-EQaWFK+fEPSoibjNy8IxUtaFOMXcWsY0JaVrQoZR9zC8N2Ygf9iDITPWjUTVIax95b6I742JFLqASHfsag/vKA== dependencies: core-js "^1.0.0" isomorphic-fetch "^2.1.1" @@ -3168,35 +3885,41 @@ fbjs@^0.8.14, fbjs@^0.8.15, fbjs@^0.8.16, fbjs@^0.8.9: object-assign "^4.1.0" promise "^7.1.1" setimmediate "^1.0.5" - ua-parser-js "^0.7.18" + ua-parser-js "^0.7.30" figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== dependencies: escape-string-regexp "^1.0.5" file-loader@^0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.9.0.tgz#1d2daddd424ce6d1b07cfe3f79731bed3617ab42" + integrity sha512-Zi8JbkzqIv7uYncY4yHtzMJAM09/t0uXzDXfOkdKl0vIRsQxxnjZXriiY9aKdzDic/I4Zit5uM+zY5gbVxcZ4A== dependencies: loader-utils "~0.2.5" +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + integrity sha512-BTCqyBaWBTsauvnHiE8i562+EdJj+oUpkqWp2R1iCoR8f6oo8STRu3of7WJJ0TqWtxN50a5YFpzYK4Jj9esYfQ== filesize@3.5.11: version "3.5.11" resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.11.tgz#1919326749433bb3cf77368bd158caabcc19e9ee" - -filesize@3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" + integrity sha512-ZH7loueKBoDb7yG9esn1U+fgq7BzlzW6NRi5/rMdxIZ05dj7GFD/Xc5rq2CDt5Yq86CyfSYVyx4242QQNZbx1g== fill-range@^2.1.0: version "2.2.4" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" + integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q== dependencies: is-number "^2.1.0" isobject "^2.0.0" @@ -3207,27 +3930,30 @@ fill-range@^2.1.0: fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== dependencies: extend-shallow "^2.0.1" is-number "^3.0.0" repeat-string "^1.6.1" to-regex-range "^2.1.0" -finalhandler@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== dependencies: debug "2.6.9" encodeurl "~1.0.2" escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.2" - statuses "~1.4.0" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" unpipe "~1.0.0" find-cache-dir@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" + integrity sha512-Z9XSBoNE7xQiV6MSgPuCfyMokH2K7JdpRkOYE1+mu3d4BFJtx3GW+f6Bo4q8IX6rlf5MYbLBKW0pjl2cWdkm2A== dependencies: commondir "^1.0.1" mkdirp "^0.5.1" @@ -3236,6 +3962,7 @@ find-cache-dir@^0.1.1: find-node-modules@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/find-node-modules/-/find-node-modules-1.0.4.tgz#b6deb3cccb699c87037677bcede2c5f5862b2550" + integrity sha512-BxNd+z0yQ64ipAlUz81RS42RTeLx5XsdyBIlFr5pIG2VGCy9+p+4XhZwgljL1987B8k03cZIZqbcWRlOkmz1Ew== dependencies: findup-sync "0.4.2" merge "^1.2.0" @@ -3243,6 +3970,7 @@ find-node-modules@^1.0.1: find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA== dependencies: path-exists "^2.0.0" pinkie-promise "^2.0.0" @@ -3250,12 +3978,14 @@ find-up@^1.0.0: find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== dependencies: locate-path "^2.0.0" findup-sync@0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.4.2.tgz#a8117d0f73124f5a4546839579fe52d7129fb5e5" + integrity sha512-5rUA3v5FP0hN2hxVA9WEOYn8xEyzqR6yB0q+jK+UDQnSwrTRJwY2jfnxQd3t3enZ6JvPlJYwUfAfjzJp+jsYuw== dependencies: detect-file "^0.1.0" is-glob "^2.0.1" @@ -3265,6 +3995,7 @@ findup-sync@0.4.2: findup-sync@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" + integrity sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g== dependencies: detect-file "^1.0.0" is-glob "^3.1.0" @@ -3272,8 +4003,9 @@ findup-sync@^2.0.0: resolve-dir "^1.0.1" fined@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fined/-/fined-1.1.0.tgz#b37dc844b76a2f5e7081e884f7c0ae344f153476" + version "1.2.0" + resolved "https://registry.yarnpkg.com/fined/-/fined-1.2.0.tgz#d00beccf1aa2b475d16d423b0238b713a2c4a37b" + integrity sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng== dependencies: expand-tilde "^2.0.2" is-plain-object "^2.0.3" @@ -3282,90 +4014,100 @@ fined@^1.0.1: parse-filepath "^1.0.1" flagged-respawn@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.0.tgz#4e79ae9b2eb38bf86b3bb56bf3e0a56aa5fcabd7" + version "1.0.1" + resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41" + integrity sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q== flat@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat/-/flat-2.0.1.tgz#70e29188a74be0c3c89409eed1fa9577907ae32f" + version "2.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-2.0.2.tgz#d631430678b023a2f9bc10a23ac4ffad7e16b0f2" + integrity sha512-b/cdFAr468cVs8XoG62dbGf9YegchdgEPX6sP7rppE0a4+RZF19kseTiDKGA1rIr3hOvOD0QIlSmaFlOlT0gfA== dependencies: is-buffer "~1.1.2" flatten@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" + version "1.0.3" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b" + integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== follow-redirects@^1.0.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.0.tgz#234f49cf770b7f35b40e790f636ceba0c3a0ab77" - dependencies: - debug "^3.1.0" + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== for-in@^0.1.3: version "0.1.8" resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" + integrity sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g== for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== for-own@^0.1.3, for-own@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + integrity sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw== dependencies: for-in "^1.0.1" for-own@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" + integrity sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg== dependencies: for-in "^1.0.1" -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== form-data@~2.1.1: version "2.1.4" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + integrity sha512-8HWGSLAPr+AG0hBpsqi5Ob8HrLStN/LWeqhpFl14d7FJgHK48TmgLoALPz69XSUR65YJzDfLUX/BM8+MLJLghQ== dependencies: asynckit "^0.4.0" combined-stream "^1.0.5" mime-types "^2.1.12" -form-data@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== dependencies: asynckit "^0.4.0" - combined-stream "1.0.6" + combined-stream "^1.0.6" mime-types "^2.1.12" -format@^0.2.2: +format@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" + integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww== -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== dependencies: map-cache "^0.2.2" fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== friendly-errors-webpack-plugin@^1.6.1: version "1.7.0" resolved "https://registry.yarnpkg.com/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.0.tgz#efc86cbb816224565861a1be7a9d84d0aafea136" + integrity sha512-K27M3VK30wVoOarP651zDmb93R9zF28usW4ocaK3mfQeIEI5BPht/EzZs5E8QLLwbLRJQMwscAjDxYPb1FuNiw== dependencies: chalk "^1.1.3" error-stack-parser "^2.0.0" @@ -3374,57 +4116,51 @@ friendly-errors-webpack-plugin@^1.6.1: front-matter@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/front-matter/-/front-matter-2.3.0.tgz#7203af896ce357ee04e2aa45169ea91ed7f67504" + integrity sha512-+gOIDsGWHVAiWSDfg3vpiHwkOrwO4XNS3YQH5DMmneLEPWzdCAnbSQCtxReF4yPK1nszLvAmLeR2SprnDQDnyQ== dependencies: js-yaml "^3.10.0" fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== fs-exists-sync@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" - -fs-extra@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-6.0.1.tgz#8abc128f7946e310135ddc93b98bddb410e7a34b" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" + integrity sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg== fs-extra@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== dependencies: graceful-fs "^4.1.2" jsonfile "^4.0.0" universalify "^0.1.0" -fs-minipass@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" - dependencies: - minipass "^2.2.1" - fs-readdir-recursive@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@^1.0.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== dependencies: - nan "^2.9.2" - node-pre-gyp "^0.10.0" + bindings "^1.5.0" + nan "^2.12.1" -fstream@^1.0.0, fstream@^1.0.2: - version "1.0.11" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" +fstream@^1.0.0, fstream@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== dependencies: graceful-fs "^4.1.2" inherits "~2.0.0" @@ -3434,16 +4170,19 @@ fstream@^1.0.0, fstream@^1.0.2: function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== gatsby-1-config-css-modules@^1.0.11: version "1.0.11" resolved "https://registry.yarnpkg.com/gatsby-1-config-css-modules/-/gatsby-1-config-css-modules-1.0.11.tgz#5a102c6b11f9a6963b3892ecc959511e1688e525" + integrity sha512-fGNsriiVMyrno8a+DbGem2ZbmmC2FiJTil5Y91QVSrLXpZ0iuEifol2Kes9gRY4Kkrzg4l3dGnqz1oBjoimOxg== dependencies: babel-runtime "^6.26.0" gatsby-1-config-extract-plugin@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/gatsby-1-config-extract-plugin/-/gatsby-1-config-extract-plugin-1.0.3.tgz#9e2c962d4563c95fa29da83e3d93017129af0115" + integrity sha512-iq0OdZs2diJ9rMB2qolkczpKcMRmmHAXGDvjjevkdNsdY7kGWPCyVJ60Qtz6XIXzZHJf07ZdbTBBZMuo8y4Hdw== dependencies: babel-runtime "^6.26.0" extract-text-webpack-plugin "^1.0.1" @@ -3451,6 +4190,7 @@ gatsby-1-config-extract-plugin@^1.0.3: gatsby-cli@^1.1.58: version "1.1.58" resolved "https://registry.yarnpkg.com/gatsby-cli/-/gatsby-cli-1.1.58.tgz#5dda246b9877ab925f6a512f723c20557af22d57" + integrity sha512-1OXMvQ56nBdBdzf/hJuXLCczxUVnqLnogLanro/ZuJNHAXM9oeWX0o2uZvWTiVg11wujmWxVSnp+IP1vmYS0+A== dependencies: babel-code-frame "^6.26.0" babel-runtime "^6.26.0" @@ -3471,9 +4211,10 @@ gatsby-cli@^1.1.58: yargs "^11.1.0" yurnalist "^0.2.1" -gatsby-link@^1.6.45: - version "1.6.45" - resolved "https://registry.yarnpkg.com/gatsby-link/-/gatsby-link-1.6.45.tgz#6a28d377cd9eee4bf5454be5a9292550b5d1d929" +gatsby-link@^1.6.45, gatsby-link@^1.6.46: + version "1.6.46" + resolved "https://registry.yarnpkg.com/gatsby-link/-/gatsby-link-1.6.46.tgz#1f9f6bd7a4d448a856c2035e54f2263d7933f4fd" + integrity sha512-Fm3A2GTLffpwOyaN7AcF5sN2P1WvwLjq1V1QQSC1ZJX60ID8ijpe+rr7ST/wUdSxFgDeeFn1Baqoqz7jo8gjGw== dependencies: "@types/history" "^4.6.2" "@types/react-router-dom" "^4.2.2" @@ -3484,26 +4225,30 @@ gatsby-link@^1.6.45: gatsby-module-loader@^1.0.11: version "1.0.11" resolved "https://registry.yarnpkg.com/gatsby-module-loader/-/gatsby-module-loader-1.0.11.tgz#35f269456f6a6d85c693bdc2b3b3b3432987f55b" + integrity sha512-9lwBCR8MO0ZyTMvFBTUeesJiXOusmzyJqijkvLaFLg/eg57a2kYjPKBvaPXlsu1/bHtQEJyNESCeO4VoHGM1ig== dependencies: babel-runtime "^6.26.0" loader-utils "^0.2.16" gatsby-plugin-antd@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/gatsby-plugin-antd/-/gatsby-plugin-antd-1.0.12.tgz#bd1c5b02b9951f36171a8209df4bf52c85c94bb2" + version "1.0.15" + resolved "https://registry.yarnpkg.com/gatsby-plugin-antd/-/gatsby-plugin-antd-1.0.15.tgz#17b6596f6af5bc3d4b1a88c8497c8ac7a3d80294" + integrity sha512-VVcU2vWRMGVBrMZR70aMQldm8iMDTAsdhU+IQ3XM9XRQFEqzggKRjn7sI+iTJZ1hVbhOWcz52IF3X7sAHp/sLA== dependencies: - antd "^3.5.1" - babel-plugin-import "^1.7.0" + antd "^3.8.4" + babel-plugin-import "^1.8.0" gatsby-plugin-google-analytics@^1.0.31: version "1.0.31" resolved "https://registry.yarnpkg.com/gatsby-plugin-google-analytics/-/gatsby-plugin-google-analytics-1.0.31.tgz#eaf16e1809461b10badf12c05038c429745783c0" + integrity sha512-Gg7I5o6jnpHxESGqJPgt15Tvfo9EAbA5B3LpiZcasUU6iHdqIiBV8Yx7iX+hi1jubToEcEQAEfcSK8ZqV8nRBQ== dependencies: babel-runtime "^6.26.0" gatsby-plugin-less@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/gatsby-plugin-less/-/gatsby-plugin-less-1.1.8.tgz#206e6b44996e976856260ff3ff2fe166ddd6173e" + integrity sha512-aeaGJHybrylcJwNhEv7OjOKzQ6VN1zeRQu2+vR1y1BzGjn/ky6VaS82VxmyNbDrB89Be1rjSPZ30y8NSAu8xIA== dependencies: babel-runtime "^6.26.0" extract-text-webpack-plugin "^1.0.1" @@ -3515,6 +4260,7 @@ gatsby-plugin-less@^1.1.8: gatsby-plugin-page-creator@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-1.0.1.tgz#6bad33a7f46cb5b87dbdaacc3c1bbd81ac63bc20" + integrity sha512-tu1BI2sMpKotogWAbaH9C/uBBogyDsZR9xNILoj4vQuP8YOjB4pE6Me0BVEBF5sdxKnR3t3y6ng6skl8LI8kyw== dependencies: babel-runtime "^6.26.0" bluebird "^3.5.0" @@ -3527,12 +4273,14 @@ gatsby-plugin-page-creator@^1.0.1: gatsby-plugin-react-helmet@^2.0.11: version "2.0.11" resolved "https://registry.yarnpkg.com/gatsby-plugin-react-helmet/-/gatsby-plugin-react-helmet-2.0.11.tgz#a2db81755f5b41d54e0e535ca1d9a008d3ccff0a" + integrity sha512-1OPMRAFiS23WWF2QSbepHdqz/p01PqZLz6t78Rz6eW1D4BWz9kCDU2Htz2SB1vb+/wNv2NTyNK36FNmViO2gTg== dependencies: babel-runtime "^6.26.0" gatsby-plugin-react-next@^1.0.11: version "1.0.11" resolved "https://registry.yarnpkg.com/gatsby-plugin-react-next/-/gatsby-plugin-react-next-1.0.11.tgz#715cab5ea86f64664f96af3e7f3640eecd9de5e3" + integrity sha512-UdE1yHhbGQoE12sF5qTfwA18n7J28UlPF8rhrC9jUBDapO+p7KCoSr/JyBGoKbOPbeSkrEaCWDN1MFeTFoxLYA== dependencies: babel-runtime "^6.26.0" core-js "^2.5.1" @@ -3542,14 +4290,16 @@ gatsby-plugin-react-next@^1.0.11: gatsby-react-router-scroll@^1.0.18: version "1.0.18" resolved "https://registry.yarnpkg.com/gatsby-react-router-scroll/-/gatsby-react-router-scroll-1.0.18.tgz#616ffb801dbdbe4598611e2ff3861b91ac3eecbf" + integrity sha512-e0Wx6wJioopc01XbhjTyQcONjhMPKSejIBbmVEQjWkXCSqdrjrjVrj9r+HZg951uStnvp7MnzMpQ4foiK6KLWw== dependencies: babel-runtime "^6.26.0" scroll-behavior "^0.9.9" warning "^3.0.0" gatsby-remark-prismjs@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/gatsby-remark-prismjs/-/gatsby-remark-prismjs-2.0.4.tgz#31243fe887c07b889c52bfdc68b53c83a42554e7" + version "2.0.5" + resolved "https://registry.yarnpkg.com/gatsby-remark-prismjs/-/gatsby-remark-prismjs-2.0.5.tgz#fda6c6a19604d153dc1be609465b22f5229c3c6b" + integrity sha512-ebxNBhdRHddSO+/uZaCQr5XDj19rKfB53j2hx3a921noCrNq3fI5R7BgIapz6O3MHHJRHsd1r7Hr59Ym4FcmWA== dependencies: babel-runtime "^6.26.0" parse-numeric-range "0.0.2" @@ -3558,6 +4308,7 @@ gatsby-remark-prismjs@^2.0.4: gatsby-source-filesystem@^1.5.39: version "1.5.39" resolved "https://registry.yarnpkg.com/gatsby-source-filesystem/-/gatsby-source-filesystem-1.5.39.tgz#c7e49b7809632b53c827e66ff3ee0ba74ef62dd8" + integrity sha512-Vknv+2wkmCnQeGuCuu30fJYxf1/M+w/48bDnMh4lOVu02bzRpAAKuKtEFbZ6mW0P5NMqEWH7kOtOvkJQfMNgdw== dependencies: babel-cli "^6.26.0" babel-runtime "^6.26.0" @@ -3575,6 +4326,7 @@ gatsby-source-filesystem@^1.5.39: gatsby-transformer-remark@^1.7.44: version "1.7.44" resolved "https://registry.yarnpkg.com/gatsby-transformer-remark/-/gatsby-transformer-remark-1.7.44.tgz#69b45f377a68484d1eab13f1feb7924428378ce1" + integrity sha512-Xxc7u0t5px+30pJocXdTQWDVJMIN8WByqCOpk+ysglNo9BAFJVjhbC2xkAjhYHq0YO8tQkON+5E5xgDIzPU37g== dependencies: babel-runtime "^6.26.0" bluebird "^3.5.0" @@ -3598,8 +4350,9 @@ gatsby-transformer-remark@^1.7.44: unist-util-visit "^1.1.1" gatsby@^1.9.273: - version "1.9.273" - resolved "https://registry.yarnpkg.com/gatsby/-/gatsby-1.9.273.tgz#bf3d685cbd5112a55514ca0450888d2da95d4444" + version "1.9.279" + resolved "https://registry.yarnpkg.com/gatsby/-/gatsby-1.9.279.tgz#e035bcac78b8280e12d42a3d068af4dcda5fcfd6" + integrity sha512-JpXW0l2bWpqxlrjnFm4GSoy1JgFaI9p9rlKOzDGBaLnwFHDHp2G8tgbcQmIH+RNf5m5okPDSgJySS/PjaKjWeg== dependencies: async "^2.1.2" babel-code-frame "^6.22.0" @@ -3642,7 +4395,7 @@ gatsby@^1.9.273: gatsby-1-config-css-modules "^1.0.11" gatsby-1-config-extract-plugin "^1.0.3" gatsby-cli "^1.1.58" - gatsby-link "^1.6.45" + gatsby-link "^1.6.46" gatsby-module-loader "^1.0.11" gatsby-plugin-page-creator "^1.0.1" gatsby-react-router-scroll "^1.0.18" @@ -3689,7 +4442,7 @@ gatsby@^1.9.273: redux "^3.6.0" relay-compiler "1.4.1" remote-redux-devtools "^0.5.7" - serve "^6.4.0" + serve "^9.2.0" shallow-compare "^1.2.2" sift "^3.2.6" signal-exit "^3.0.2" @@ -3715,6 +4468,7 @@ gatsby@^1.9.273: gauge@~1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/gauge/-/gauge-1.2.7.tgz#e9cec5483d3d4ee0ef44b60a7d99e4935e136d93" + integrity sha512-fVbU2wRE91yDvKUnrIaQlHKAWKY5e08PmztCrwuH5YVQ+Z/p3d0ny2T48o6uvAAXHIUnfaQdHkmxYbQft1eHVA== dependencies: ansi "^0.3.0" has-unicode "^2.0.0" @@ -3725,6 +4479,7 @@ gauge@~1.2.5: gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg== dependencies: aproba "^1.0.3" console-control-strings "^1.0.0" @@ -3736,40 +4491,62 @@ gauge@~2.7.3: wide-align "^1.1.0" get-caller-file@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" + integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" get-params@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/get-params/-/get-params-0.1.2.tgz#bae0dfaba588a0c60d7834c0d8dc2ff60eeef2fe" + integrity sha512-41eOxtlGgHQRbFyA8KTH+w+32Em3cRdfBud7j67ulzmIfmaHX9doq47s0fa4P5o9H64BZX9nrYI6sJvk46Op+Q== get-port@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" + integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== dependencies: assert-plus "^1.0.0" github-slugger@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.2.0.tgz#8ada3286fd046d8951c3c952a8d7854cfd90fd9a" - dependencies: - emoji-regex ">=6.0.0 <=6.1.1" + version "1.4.0" + resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.4.0.tgz#206eb96cdb22ee56fdc53a28d5a302338463444e" + integrity sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ== glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + integrity sha512-ab1S1g1EbO7YzauaJLkgLp7DZVAqj9M/dvKlTt8DkXA2tiOIcSMrlVI2J1RZyB5iJVccEscjGn+kpOG9788MHA== dependencies: glob-parent "^2.0.0" is-glob "^2.0.0" @@ -3777,23 +4554,41 @@ glob-base@^0.3.0: glob-parent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + integrity sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w== dependencies: is-glob "^2.0.0" glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA== dependencies: is-glob "^3.1.0" path-dirname "^1.0.0" +glob-slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/glob-slash/-/glob-slash-1.0.0.tgz#fe52efa433233f74a2fe64c7abb9bc848202ab95" + integrity sha512-ZwFh34WZhZX28ntCMAP1mwyAJkn8+Omagvt/GvA+JQM/qgT0+MR2NPF3vhvgdshfdvDyGZXs8fPXW84K32Wjuw== + +glob-slasher@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/glob-slasher/-/glob-slasher-1.0.1.tgz#747a0e5bb222642ee10d3e05443e109493cb0f8e" + integrity sha512-5MUzqFiycIKLMD1B0dYOE4hGgLLUZUNGGYO4BExdwT32wUwW3DBOE7lMQars7vB1q43Fb3Tyt+HmgLKsJhDYdg== + dependencies: + glob-slash "^1.0.0" + lodash.isobject "^2.4.1" + toxic "^1.0.0" + glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + integrity sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig== glob@5.0.x: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + integrity sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA== dependencies: inflight "^1.0.4" inherits "2" @@ -3804,6 +4599,7 @@ glob@5.0.x: glob@^6.0.1: version "6.0.4" resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" + integrity sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A== dependencies: inflight "^1.0.4" inherits "2" @@ -3811,26 +4607,29 @@ glob@^6.0.1: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" global-dirs@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + integrity sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg== dependencies: ini "^1.3.4" global-modules@1.0.0, global-modules@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== dependencies: global-prefix "^1.0.1" is-windows "^1.0.1" @@ -3839,6 +4638,7 @@ global-modules@1.0.0, global-modules@^1.0.0: global-modules@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-0.2.3.tgz#ea5a3bed42c6d6ce995a4f8a1269b5dae223828d" + integrity sha512-JeXuCbvYzYXcwE6acL9V2bAOeSIGl4dD+iwLY9iUx2VBJJ80R18HCn+JCwHM9Oegdfya3lEkGCdaRkSyc10hDA== dependencies: global-prefix "^0.1.4" is-windows "^0.2.0" @@ -3846,6 +4646,7 @@ global-modules@^0.2.3: global-prefix@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-0.1.5.tgz#8d3bc6b8da3ca8112a160d8d496ff0462bfef78f" + integrity sha512-gOPiyxcD9dJGCEArAhF4Hd0BAqvAe/JzERP7tYumE4yIkmIedPUVXcJFWbV3/p/ovIIvKjkrTk+f1UVkq7vvbw== dependencies: homedir-polyfill "^1.0.0" ini "^1.3.4" @@ -3855,6 +4656,7 @@ global-prefix@^0.1.4: global-prefix@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg== dependencies: expand-tilde "^2.0.2" homedir-polyfill "^1.0.1" @@ -3863,19 +4665,22 @@ global-prefix@^1.0.1: which "^1.2.14" global@^4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== dependencies: min-document "^2.19.0" - process "~0.5.1" + process "^0.11.10" globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw== dependencies: array-union "^1.0.1" glob "^7.0.3" @@ -3886,12 +4691,14 @@ globby@^6.1.0: good-listener@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" + integrity sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw== dependencies: delegate "^3.1.2" got@^6.7.1: version "6.7.1" resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + integrity sha512-Y/K3EDuiQN9rTZhBvPRWMLXIKdeD1Rj0nzunfoi0Yyn5WBEbzxXKU9Ub2X41oZBagVWOBU3MuDonFMgPWQFnwg== dependencies: create-error-class "^3.0.0" duplexer3 "^0.1.4" @@ -3908,6 +4715,7 @@ got@^6.7.1: got@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" + integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw== dependencies: decompress-response "^3.2.0" duplexer3 "^0.1.4" @@ -3925,20 +4733,24 @@ got@^7.1.0: url-to-options "^1.0.1" graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.4, graceful-fs@^4.1.6: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== "graceful-readlink@>= 1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + integrity sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w== graphql-relay@^0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/graphql-relay/-/graphql-relay-0.5.5.tgz#d6815e6edd618e878d5d921c13fc66033ec867e2" + integrity sha512-CTsapMI0MZc0antZp+9ZcVcNiVoaXncc2xALCxe2Md25quAUxTjH2135xPRNb6BMOoTiY54HtglfxxUCDTUEbA== graphql-skip-limit@^1.0.11: version "1.0.11" resolved "https://registry.yarnpkg.com/graphql-skip-limit/-/graphql-skip-limit-1.0.11.tgz#c6970d11bdfe7aa001f96c8ba41b9a93a6dc805c" + integrity sha512-QBrtFfLECTmNEhxzzGXCwmAfXsXiy0Zvmdl9coXWdVbrA44XymKBe250KrwUB52MFY9pJsdwIiE51LiCbe60JA== dependencies: babel-runtime "^6.26.0" graphql "^0.11.7" @@ -3946,105 +4758,130 @@ graphql-skip-limit@^1.0.11: graphql-type-json@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/graphql-type-json/-/graphql-type-json-0.1.4.tgz#89f13f5d32ce08c9a76c79fdf9c1968384d81a4e" + integrity sha512-B1zeWRF50alRvW94s/hpkGbVqvRLTtJD0yEyMs6KAvDSlNyBzJCu/d51fLZalqrVntuJAVgXYh13GbUEqe9MrQ== graphql@^0.11.3, graphql@^0.11.7: version "0.11.7" resolved "https://registry.yarnpkg.com/graphql/-/graphql-0.11.7.tgz#e5abaa9cb7b7cccb84e9f0836bf4370d268750c6" + integrity sha512-x7uDjyz8Jx+QPbpCFCMQ8lltnQa4p4vSYHx6ADe8rVYRTdsyhCJbvSty5DAsLVmU6cGakl+r8HQYolKHxk/tiw== dependencies: iterall "1.1.3" gray-matter@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-3.1.1.tgz#101f80d9e69eeca6765cdce437705b18f40876ac" + integrity sha512-nZ1qjLmayEv0/wt3sHig7I0s3/sJO0dkAaKYQ5YAOApUtYEOonXSFdWvL1khvnZMTvov4UufkqlFsilPnejEXA== dependencies: extend-shallow "^2.0.1" js-yaml "^3.10.0" kind-of "^5.0.2" strip-bom-string "^1.0.0" +gud@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" + integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== + gzip-size@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520" + integrity sha512-6s8trQiK+OMzSaCSVXX+iqIcLV9tC+E73jrJrJTyS4h/AJhlxHvzFKqM1YLDJWRGgHX8uLkBeXkA0njNj39L4w== dependencies: duplexer "^0.1.1" hammerjs@^2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/hammerjs/-/hammerjs-2.0.8.tgz#04ef77862cff2bb79d30f7692095930222bf60f1" - -handlebars@4.0.11: - version "4.0.11" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" - dependencies: - async "^1.4.0" - optimist "^0.6.1" - source-map "^0.4.4" - optionalDependencies: - uglify-js "^2.6" + integrity sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ== har-schema@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + integrity sha512-f8xf2GOR6Rgwc9FPTLNzgwB+JQ2/zMauYXSWmX5YV5acex6VomT0ocSuwR7BfXo5MpHi+jL+saaux2fwsGJDKQ== har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== har-validator@~4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + integrity sha512-5Gbp6RAftMYYV3UEI4c4Vv3+a4dQ7taVyvHt+/L6kRt+f4HX1GweAk5UDWN0SvdVnRBzGQ6OG89pGaD9uSFnVw== dependencies: ajv "^4.9.1" har-schema "^1.0.5" -har-validator@~5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== dependencies: - ajv "^5.1.0" + ajv "^6.12.3" har-schema "^2.0.0" has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== dependencies: ansi-regex "^2.0.0" has-binary2@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" + integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw== dependencies: isarray "2.0.1" has-cors@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" + integrity sha512-g5VNKdkFuUuVCP9gYfDJHjK2nqdQJ7aDLTnycnc2+RvsOQbuLdF5pm7vuE5J76SEBIQjs4kQY/BWq74JUmjbXA== has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA== has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" has-symbol-support-x@^1.4.1: version "1.4.2" resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" + integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== has-to-string-tag-x@^1.2.0: version "1.4.1" resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" + integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== dependencies: has-symbol-support-x "^1.4.1" has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== dependencies: get-value "^2.0.3" has-values "^0.1.4" @@ -4053,6 +4890,7 @@ has-value@^0.3.1: has-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== dependencies: get-value "^2.0.6" has-values "^1.0.0" @@ -4061,37 +4899,44 @@ has-value@^1.0.0: has-values@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== has-values@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== dependencies: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.1: +has@^1.0.1, has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.4.tgz#8b50e1f35d51bd01e5ed9ece4dbe3549ccfa0a3c" + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== dependencies: inherits "^2.0.3" - minimalistic-assert "^1.0.0" + minimalistic-assert "^1.0.1" hast-to-hyperscript@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-3.1.0.tgz#58ef4af5344f4da22f0622e072a8d5fa062693d3" + integrity sha512-/At2y6sQLTAcL6y+3hRQFcaBoRlKrmHSpvvdOZqRz6uI2YyjrU8rJ7e1LbmLtWUmzaIqKEdNSku+AJC0pt4+aw== dependencies: comma-separated-tokens "^1.0.0" is-nan "^1.2.1" @@ -4104,6 +4949,7 @@ hast-to-hyperscript@^3.0.0: hast-util-from-parse5@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-2.1.0.tgz#f6123d83d3689630b097e13e430d16d9d1bd8884" + integrity sha512-SVS5RVojGiwCQ61Rc/k5TZg3mqfQ+h0B9jTdrz5qfI1MVNfS1YnoUpROOk6uSUnE74m0206ksGcv7wMiVFV8Pg== dependencies: camelcase "^3.0.0" hastscript "^3.0.0" @@ -4111,16 +4957,19 @@ hast-util-from-parse5@^2.0.0: vfile-location "^2.0.0" hast-util-is-element@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-1.0.1.tgz#c76e8aafbdb6e5c83265bf50324e2f2e024eb12a" + version "1.1.0" + resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz#3b3ed5159a2707c6137b48637fbfe068e175a425" + integrity sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ== hast-util-parse-selector@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.1.1.tgz#fc06985272f5d204a25187f002bb916521e74f3a" + version "2.2.5" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" + integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== hast-util-raw@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-2.0.2.tgz#20674cfb45428213917a54ec929e6774df0642d8" + integrity sha512-ujytXSAZC85bvh38f8ALzfE2IZDdCwB9XeHUs9l20C1p4/1YeAoZqq9z9U17vWQ9hMmqbVaROuSK8feL3wTCJg== dependencies: hast-util-from-parse5 "^2.0.0" hast-util-to-parse5 "^2.0.0" @@ -4133,6 +4982,7 @@ hast-util-raw@^2.0.2: hast-util-to-html@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-3.1.0.tgz#882c99849e40130e991c042e456d453d95c36cff" + integrity sha512-tqEzbKkAmTinH/f7UMOiljc1lTmpcsGwp5ihijX6X8GluuLE3yhLkWyf6uT1o0yDTWgjpKu1jllIjcbqGXpV7A== dependencies: ccount "^1.0.0" comma-separated-tokens "^1.0.1" @@ -4149,6 +4999,7 @@ hast-util-to-html@^3.0.0: hast-util-to-parse5@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-2.2.0.tgz#48c8f7f783020c04c3625db06109d02017033cbc" + integrity sha512-Eg1mrf0VTT/PipFN5z1+mVi+4GNhinKk/i/HKeX1h17IYiMdm3G8vgA0FU04XCuD1cWV58f5zziFKcBkr+WuKw== dependencies: hast-to-hyperscript "^3.0.0" mapz "^1.0.0" @@ -4157,12 +5008,14 @@ hast-util-to-parse5@^2.0.0: zwitch "^1.0.0" hast-util-whitespace@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-1.0.1.tgz#d67da2c87637b1ce1d85dd15b270ba057930149a" + version "1.0.4" + resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz#e4fe77c4a9ae1cb2e6c25e02df0043d0164f6e41" + integrity sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A== -hastscript@^3.0.0, hastscript@^3.1.0: +hastscript@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-3.1.0.tgz#66628ba6d7f1ad07d9277dd09028aba7f4934599" + integrity sha512-8V34dMSDT1Ik+ZSgTzCLdyp89MrWxcxctXPxhmb72GQj1Xkw1aHPM9UaHCWewvH2Q+PVkYUm4ZJVw4T0dgEGNA== dependencies: camelcase "^3.0.0" comma-separated-tokens "^1.0.0" @@ -4170,9 +5023,20 @@ hastscript@^3.0.0, hastscript@^3.1.0: property-information "^3.0.0" space-separated-tokens "^1.0.0" +hastscript@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.1.2.tgz#bde2c2e56d04c62dd24e8c5df288d050a355fb8a" + integrity sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ== + dependencies: + comma-separated-tokens "^1.0.0" + hast-util-parse-selector "^2.0.0" + property-information "^5.0.0" + space-separated-tokens "^1.0.0" + hawk@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + integrity sha512-X8xbmTc1cbPXcQV4WkLcRMALuyoxhfpFATmyuCxJPOAvrDS4DNnsTAOmKUxMTOWU6TzrTOkxPKwIx5ZOpJVSrg== dependencies: boom "2.x.x" cryptiles "2.x.x" @@ -4182,20 +5046,31 @@ hawk@~3.1.3: highlight.js@~9.12.0: version "9.12.0" resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e" + integrity sha512-qNnYpBDO/FQwYVur1+sQBQw7v0cxso1nOYLklqWh6af8ROwwTVoII5+kf/BVa8354WL4ad6rURHYGUXCbD9mMg== + +history@*: + version "5.3.0" + resolved "https://registry.yarnpkg.com/history/-/history-5.3.0.tgz#1548abaa245ba47992f063a0783db91ef201c73b" + integrity sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ== + dependencies: + "@babel/runtime" "^7.7.6" history@^4.6.2, history@^4.7.2: - version "4.7.2" - resolved "https://registry.yarnpkg.com/history/-/history-4.7.2.tgz#22b5c7f31633c5b8021c7f4a8a954ac139ee8d5b" + version "4.10.1" + resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" + integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== dependencies: - invariant "^2.2.1" + "@babel/runtime" "^7.1.2" loose-envify "^1.2.0" - resolve-pathname "^2.2.0" - value-equal "^0.4.0" - warning "^3.0.0" + resolve-pathname "^3.0.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + value-equal "^1.0.1" -hmac-drbg@^1.0.0: +hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== dependencies: hash.js "^1.0.3" minimalistic-assert "^1.0.0" @@ -4204,89 +5079,133 @@ hmac-drbg@^1.0.0: hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + integrity sha512-V6Yw1rIcYV/4JsnggjBU0l4Kr+EXhpwqXRusENU1Xx6ro00IHPHYNynCuBTOZAPlr3AAmLvchH9I7N/VUdvOwQ== hoek@4.x.x: version "4.2.1" resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" + integrity sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA== hoist-non-react-statics@^2.3.1, hoist-non-react-statics@^2.5.0: version "2.5.5" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" + integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== + +hoist-non-react-statics@^3.3.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + integrity sha512-ycURW7oUxE2sNiPVw1HVEFsW+ecOpJ5zaj7eC0RlwhibhRBod20muUN8qu/gzx956YrLolVvs1MTXwKgC2rVEg== dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.1" homedir-polyfill@^1.0.0, homedir-polyfill@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== dependencies: parse-passwd "^1.0.0" hosted-git-info@^2.1.4, hosted-git-info@^2.5.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.1.tgz#6e4cee78b01bb849dcf93527708c69fdbee410df" + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== html-comment-regex@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" + version "1.1.2" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" + integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== -html-entities@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" +html-entities@^2.1.0: + version "2.3.3" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" + integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== html-void-elements@^1.0.0, html-void-elements@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.3.tgz#956707dbecd10cf658c92c5d27fee763aa6aa982" + version "1.0.5" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483" + integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== -htmlparser2@^3.9.0, htmlparser2@^3.9.1: - version "3.9.2" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" +htmlparser2@^3.9.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== dependencies: - domelementtype "^1.3.0" + domelementtype "^1.3.1" domhandler "^2.3.0" domutils "^1.5.1" entities "^1.1.1" inherits "^2.0.1" - readable-stream "^2.0.2" + readable-stream "^3.1.1" -htmlparser2@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" +htmlparser2@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" + integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== dependencies: - domelementtype "1" - domhandler "2.1" - domutils "1.1" - readable-stream "1.0" + domelementtype "^2.0.1" + domhandler "^3.0.0" + domutils "^2.0.0" + entities "^2.0.0" -http-errors@1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== dependencies: - depd "1.1.1" - inherits "2.0.3" - setprototypeof "1.0.3" - statuses ">= 1.3.1 < 2" + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" -http-errors@1.6.3, http-errors@^1.3.0, http-errors@~1.6.2: +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-errors@^1.3.0: + version "1.8.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" + integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.1" + +http-errors@~1.6.2: version "1.6.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== dependencies: depd "~1.1.2" inherits "2.0.3" setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" -http-parser-js@>=0.4.0: - version "0.4.13" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.13.tgz#3bd6d6fde6e3172c9334c3b33b6c193d80fe1137" +http-parser-js@>=0.5.1: + version "0.5.8" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" + integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== http-proxy-middleware@~0.17.1: version "0.17.4" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833" + integrity sha512-JtH3UZju4oXDdca28/kknbm/CFmt35vy0YV0PNOMWWWpn3rT9WV95IXN451xwBGSjy9L0Cah1O9TCMytboLdfw== dependencies: http-proxy "^1.16.2" is-glob "^3.1.0" @@ -4294,16 +5213,18 @@ http-proxy-middleware@~0.17.1: micromatch "^2.3.11" http-proxy@^1.16.2: - version "1.17.0" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a" + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== dependencies: - eventemitter3 "^3.0.0" + eventemitter3 "^4.0.0" follow-redirects "^1.0.0" requires-port "^1.0.0" http-signature@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + integrity sha512-iUn0NcRULlDGtqNLN1Jxmzayk8ogm7NToldASyZBpM2qggbphjXzNOiw3piN8tgz+e/DRs6X5gAzFwTI6BCRcg== dependencies: assert-plus "^0.2.0" jsprim "^1.2.2" @@ -4312,6 +5233,7 @@ http-signature@~1.1.0: http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== dependencies: assert-plus "^1.0.0" jsprim "^1.2.2" @@ -4320,89 +5242,109 @@ http-signature@~1.2.0: https-browserify@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" + integrity sha512-EjDQFbgJr1vDD/175UJeSX3ncQ3+RUnCL5NkthQGHvF4VNHlzTy8ifJfTqz47qiPRqaFH58+CbuG3x51WuB1XQ== https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg== -iconv-lite@0.4.19: - version "0.4.19" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" - -iconv-lite@0.4.23, iconv-lite@^0.4.17, iconv-lite@^0.4.4, iconv-lite@~0.4.13: - version "0.4.23" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" +iconv-lite@0.4.24, iconv-lite@^0.4.17: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + icss-replace-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" + integrity sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg== -ieee754@^1.1.4: - version "1.1.12" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" - -ignore-walk@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - dependencies: - minimatch "^3.0.4" +ieee754@^1.1.13, ieee754@^1.1.4: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== image-size@~0.5.0: version "0.5.5" resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" + integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ== immutable@^3.7.4: version "3.8.2" resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" + integrity sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg== immutable@^4.0.0-rc.9: - version "4.0.0-rc.9" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0-rc.9.tgz#1e6e0094e649013ec3742d2b5aeeca5eeda4f0bf" + version "4.1.0" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef" + integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== immutable@~3.7.4, immutable@~3.7.6: version "3.7.6" resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.7.6.tgz#13b4d3cb12befa15482a26fe1b2ebae640071e4b" + integrity sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw== import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA== indexof@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + integrity sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg== inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.3, 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" +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== ini@^1.3.4, ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== inquirer@3.3.0, inquirer@^3.0.1: version "3.3.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" + integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== dependencies: ansi-escapes "^3.0.0" chalk "^2.0.0" @@ -4422,40 +5364,44 @@ inquirer@3.3.0, inquirer@^3.0.1: interpret@^0.6.4: version "0.6.6" resolved "https://registry.yarnpkg.com/interpret/-/interpret-0.6.6.tgz#fecd7a18e7ce5ca6abfb953e1f86213a49f1625b" + integrity sha512-Vg6X07U0AOZb4HF6CWHa+jnJU8j71buKQ9Pc0C75qBXgvCYbxWBkGo4jnTS3O0MIc9FZtt0mB7h+uclojqdw1Q== interpret@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== -intersperse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/intersperse/-/intersperse-1.0.0.tgz#f2561fb1cfef9f5277cc3347a22886b4351a5181" - -invariant@^2.2.0, invariant@^2.2.1, invariant@^2.2.2, invariant@^2.2.4: +invariant@^2.2.0, invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== dependencies: loose-envify "^1.0.0" invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ== -ip@1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== -ipaddr.js@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.6.0.tgz#e3fa357b773da619f26e95f049d055c72796f86b" +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== is-absolute-url@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg== is-absolute@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" + integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== dependencies: is-relative "^1.0.0" is-windows "^1.0.1" @@ -4463,26 +5409,31 @@ is-absolute@^1.0.0: is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A== dependencies: kind-of "^3.0.2" is-accessor-descriptor@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== dependencies: kind-of "^6.0.0" is-alphabetical@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.2.tgz#1fa6e49213cb7885b75d15862fb3f3d96c884f41" + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" + integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== is-alphanumeric@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4" + integrity sha512-ZmRL7++ZkcMOfDuWZuMJyIVLr2keE1o/DeNWh1EmgqGhUcV+9BIVsx0BcSBOHTZqzjs4+dISzr2KAeBEWGgXeA== is-alphanumerical@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz#1138e9ae5040158dc6ff76b820acd6b7a181fd40" + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" + integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== dependencies: is-alphabetical "^1.0.0" is-decimal "^1.0.0" @@ -4490,48 +5441,64 @@ is-alphanumerical@^1.0.0: is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q== dependencies: binary-extensions "^1.0.0" -is-buffer@^1.0.2, is-buffer@^1.1.4, is-buffer@^1.1.5, is-buffer@~1.1.1, is-buffer@~1.1.2: +is-buffer@^1.0.2, is-buffer@^1.1.4, is-buffer@^1.1.5, is-buffer@~1.1.2, is-buffer@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== is-builtin-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + integrity sha512-C2wz7Juo5pUZTFQVer9c+9b4qw3I5T/CHQxQyhVu7BJel6C22FmsLIWsdseYyOw6xz9Pqy9eJWSkQ7+3iN1HVw== dependencies: builtin-modules "^1.0.0" is-ci@^1.0.10: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== dependencies: - ci-info "^1.0.0" + ci-info "^1.5.0" + +is-core-module@^2.9.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" + integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== + dependencies: + has "^1.0.3" is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg== dependencies: kind-of "^3.0.2" is-data-descriptor@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== dependencies: kind-of "^6.0.0" is-decimal@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.2.tgz#894662d6a8709d307f3a276ca4339c8fa5dff0ff" + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" + integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== dependencies: is-accessor-descriptor "^0.1.6" is-data-descriptor "^0.1.4" @@ -4540,6 +5507,7 @@ is-descriptor@^0.1.0: is-descriptor@^1.0.0, is-descriptor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== dependencies: is-accessor-descriptor "^1.0.0" is-data-descriptor "^1.0.0" @@ -4548,275 +5516,336 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-dotfile@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + integrity sha512-9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg== is-equal-shallow@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + integrity sha512-0EygVC5qPvIyb+gSz7zdD5/AAoS6Qrx1e//6N4yv4oNm30kqvdmG66oZFWVlQHUWe5OjP08FuTw2IdT0EOTcYA== dependencies: is-primitive "^2.0.0" is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== is-extendable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== dependencies: is-plain-object "^2.0.4" is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + integrity sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww== is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - dependencies: - number-is-nan "^1.0.0" + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + integrity sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg== dependencies: is-extglob "^1.0.0" is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw== dependencies: is-extglob "^2.1.0" is-glob@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-hexadecimal@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz#b6e710d7d07bb66b98cb8cece5c9b4921deeb835" + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== is-installed-globally@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + integrity sha512-ERNhMg+i/XgDwPIPF3u24qpajVreaiSuvpb1Uu0jugw7KKcxGyCX8cgp8P5fwTmAuXku6beDHHECdKArjlg7tw== dependencies: global-dirs "^0.1.0" is-path-inside "^1.0.0" -is-nan@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.2.1.tgz#9faf65b6fb6db24b7f5c0628475ea71f988401e2" - dependencies: - define-properties "^1.1.1" +is-mobile@^2.1.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/is-mobile/-/is-mobile-2.2.2.tgz#f6c9c5d50ee01254ce05e739bdd835f1ed4e9954" + integrity sha512-wW/SXnYJkTjs++tVK5b6kVITZpAZPtUrt9SF80vvxGiF/Oywal+COk1jlRkiVq15RFNEQKQY31TkV24/1T5cVg== -is-negative-zero@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" +is-nan@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" + integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" is-npm@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + integrity sha512-9r39FIr3d+KD9SbX0sfMsHzb5PP3uimOiwr3YupUaUFG4W0l1U57Rx3utpttV7qz5U3jmrO5auUa04LU9pyHsg== is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + integrity sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg== dependencies: kind-of "^3.0.2" is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== dependencies: kind-of "^3.0.2" is-number@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== is-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== is-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" + integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== is-path-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + integrity sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw== is-path-in-cwd@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== dependencies: is-path-inside "^1.0.0" is-path-inside@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g== dependencies: path-is-inside "^1.0.1" is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + integrity sha512-Yu68oeXJ7LeWNmZ3Zov/xg/oDBnBK2RNxwYY1ilNJX+tKKZqgPK+qOn/Gs9jEu66KDY9Netf5XLKNGzas/vPfQ== is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + integrity sha512-N3w1tFaRfk3UrPfqeRyD+GYDASU3W5VinKhlORy8EWVf/sIdDL9GAcew85XmktCfH+ngG7SRXEVDoO18WMdB/Q== is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + version "2.2.2" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" + integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + integrity sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw== is-relative-url@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-relative-url/-/is-relative-url-2.0.0.tgz#72902d7fe04b3d4792e7db15f9db84b7204c9cef" + integrity sha512-UMyEi3F+Rvjpc29IAQQ5OuMoKylt8npO0eQdXPQ2M3A5iFvh1qG+MtiLQR2tyHcVVsqwWrQiztjPAe9hnSHYeQ== dependencies: is-absolute-url "^2.0.0" is-relative@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5" + integrity sha512-9AMzjRmLqcue629b4ezEVSK6kJsYJlUIhMcygmYORUgwUNJiavHcC3HkaGx0XYpyVKQSOqFbMEZmW42cY87sYw== dependencies: is-unc-path "^0.1.1" is-relative@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" + integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== dependencies: is-unc-path "^1.0.0" is-retry-allowed@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== is-root@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-root/-/is-root-1.0.0.tgz#07b6c233bc394cd9d02ba15c966bd6660d6342d5" + integrity sha512-1d50EJ7ipFxb9bIx213o6KPaJmHN8f+nR48UZWxWVzDx+NA3kpscxi02oQX3rGkEaLBi9m3ZayHngQc3+bBX9w== -is-stream@1.1.0, is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: +is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== is-svg@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" + integrity sha512-Ya1giYJUkcL/94quj0+XGcmts6cETPBW1MiFz1ReJrnDJ680F52qpAEGAEGU0nq96FRGIGPx6Yo1CyPXcOoyGw== dependencies: html-comment-regex "^1.1.0" is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== is-unc-path@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-0.1.2.tgz#6ab053a72573c10250ff416a3814c35178af39b9" + integrity sha512-HhLc5VDMH4pu3oMtIuunz/DFQUIoR561kMME3U3Afhj8b7vH085vkIkemrz1kLXCEIuoMAmO3yVmafWdSbGW8w== dependencies: unc-path-regex "^0.1.0" is-unc-path@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" + integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== dependencies: unc-path-regex "^0.1.2" is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== is-whitespace-character@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz#ede53b4c6f6fb3874533751ec9280d01928d03ed" + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" + integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w== is-windows@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" + integrity sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q== is-windows@^1.0.0, is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== is-word-character@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.2.tgz#46a5dac3f2a1840898b91e576cd40d493f3ae553" + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" + integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw== isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isarray@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" + integrity sha512-c2cu3UxbI+b6kR3fy0nRnAhodsvR9dx7U5+znCOzdj6IfP3upFURTr0Xl5BlQZNKZjEtxrmVyfSdeE3O57smoQ== isemail@2.x.x: version "2.2.1" resolved "https://registry.yarnpkg.com/isemail/-/isemail-2.2.1.tgz#0353d3d9a62951080c262c2aa0a42b8ea8e9e2a6" + integrity sha512-LPjFxaTatluwGAJlGe4FtRdzg0a9KlXrahHoHAR4HwRNf90Ttwi6sOQ9zj+EoCPmk9yyK+WFUqkm0imUo8UJbw== isemail@3.x.x: - version "3.1.2" - resolved "https://registry.yarnpkg.com/isemail/-/isemail-3.1.2.tgz#937cf919002077999a73ea8b1951d590e84e01dd" + version "3.2.0" + resolved "https://registry.yarnpkg.com/isemail/-/isemail-3.2.0.tgz#59310a021931a9fb06bbb51e155ce0b3f236832c" + integrity sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg== dependencies: punycode "2.x.x" isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isnumeric@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/isnumeric/-/isnumeric-0.2.0.tgz#a2347ba360de19e33d0ffd590fddf7755cbf2e64" + integrity sha512-uSJoAwnN1eCKDFKi8hL3UCYJSkQv+NwhKzhevUPIn/QZ8ILO21f+wQnlZHU0eh1rsLO1gI4w/HQdeOSTKwlqMg== isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== isomorphic-fetch@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + integrity sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA== dependencies: node-fetch "^1.0.1" whatwg-fetch ">=0.10.0" @@ -4824,25 +5853,30 @@ isomorphic-fetch@^2.1.1: isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== isurl@^1.0.0-alpha5: version "1.0.0" resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" + integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== dependencies: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" items@2.x.x: - version "2.1.1" - resolved "https://registry.yarnpkg.com/items/-/items-2.1.1.tgz#8bd16d9c83b19529de5aea321acaada78364a198" + version "2.1.2" + resolved "https://registry.yarnpkg.com/items/-/items-2.1.2.tgz#0849354595805d586dac98e7e6e85556ea838558" + integrity sha512-kezcEqgB97BGeZZYtX/MA8AG410ptURstvnz5RAgyFZ8wQFPMxHY8GpTq+/ZHKT3frSlIthUq7EvLt9xn3TvXg== iterall@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.1.3.tgz#1cbbff96204056dde6656e2ed2e2226d0e6d72c9" + integrity sha512-Cu/kb+4HiNSejAPhSaN1VukdNTTi/r4/e+yykqjlG/IW+1gZH5b4+Bq3whDX4tvbYugta3r8KTMUiqT3fIGxuQ== joi@12.x.x: version "12.0.0" resolved "https://registry.yarnpkg.com/joi/-/joi-12.0.0.tgz#46f55e68f4d9628f01bbb695902c8b307ad8d33a" + integrity sha512-z0FNlV4NGgjQN1fdtHYXf5kmgludM65fG/JlXzU6+rwkt9U5UWuXVYnXa2FpK0u6+qBuCmrm5byPNuiiddAHvQ== dependencies: hoek "4.x.x" isemail "3.x.x" @@ -4851,6 +5885,7 @@ joi@12.x.x: joi@9.0.0-0: version "9.0.0-0" resolved "https://registry.yarnpkg.com/joi/-/joi-9.0.0-0.tgz#a7ca4219602149ae0da7a7c5ca1d63d3c79e096b" + integrity sha512-1ZHieO/s4JKry7OsiNY0D27BIiaktO+6taY5P0g8pu/s0NYdegdf3ia7heMSdFjmJQHJE+IG1PhTmkrJX0S8AQ== dependencies: hoek "4.x.x" isemail "2.x.x" @@ -4859,16 +5894,24 @@ joi@9.0.0-0: topo "2.x.x" js-base64@^2.1.9: - version "2.4.5" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.5.tgz#e293cd3c7c82f070d700fc7a1ca0a2e69f101f92" + version "2.6.4" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" + integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== -js-tokens@^3.0.0, js-tokens@^3.0.2: +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg== js-yaml@^3.10.0, js-yaml@^3.5.2: - version "3.12.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -4876,90 +5919,119 @@ js-yaml@^3.10.0, js-yaml@^3.5.2: js-yaml@~3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" + integrity sha512-eIlkGty7HGmntbV6P/ZlAsoncFLGsNoM27lkTzS+oneY/EiNhj+geqD9ezg/ip+SW6Var0BJU2JtV0vEUZpWVQ== dependencies: argparse "^1.0.7" esprima "^2.6.0" -jsan@^3.1.5, jsan@^3.1.9: - version "3.1.10" - resolved "https://registry.yarnpkg.com/jsan/-/jsan-3.1.10.tgz#ba9917b864defff567e0c990a34ae7a8d5eb1d90" +jsan@^3.1.13: + version "3.1.14" + resolved "https://registry.yarnpkg.com/jsan/-/jsan-3.1.14.tgz#197fee2d260b85acacb049c1ffa41bd09fb1f213" + integrity sha512-wStfgOJqMv4QKktuH273f5fyi3D3vy2pHOiSDGPvpcS/q+wb/M7AK3vkCcaHbkZxDOlDU/lDJgccygKSG2OhtA== jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + integrity sha512-Mke0DA0QjUWuJlhsE0ZPPhYiJkRap642SmI/4ztCFaUs6V2AiH1sfecc+57NgaryfAA2VR3v6O+CSjC1jZJKOA== jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== json-loader@^0.5.2: version "0.5.7" resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" + integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w== json-schema-traverse@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + integrity sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA== -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== json-stable-stringify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + integrity sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg== dependencies: jsonify "~0.0.0" json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== json2mq@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/json2mq/-/json2mq-0.2.0.tgz#b637bd3ba9eabe122c83e9720483aeb10d2c904a" + integrity sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA== dependencies: string-convert "^0.2.0" json3@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== json5@^0.5.0, json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== optionalDependencies: graceful-fs "^4.1.6" jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA== jspm-github@^0.14.11: - version "0.14.13" - resolved "https://registry.yarnpkg.com/jspm-github/-/jspm-github-0.14.13.tgz#326e5217d3639b21609293b01e7e18775dd3dcc7" + version "0.14.14" + resolved "https://registry.yarnpkg.com/jspm-github/-/jspm-github-0.14.14.tgz#66bd412e22d3b9a53837b51000f85c9146797a5a" + integrity sha512-KqSUVqbyiZAlQ+EPDmRzZ1QUdFs5X8hlvo/bKU9/vyv4MsYcGGD6rOEHzcya0nETinRXQrlCRPfnZt1SzrPotQ== dependencies: - bluebird "^3.0.5" + bluebird "^3.5.0" expand-tilde "^1.2.0" graceful-fs "^4.1.3" mkdirp "^0.5.1" netrc "^0.1.3" request "^2.74.0" - rimraf "^2.5.4" + rimraf "^2.6.1" semver "^5.0.1" - tar-fs "^1.13.0" + tar-fs "^1.15.3" which "^1.0.9" jspm-npm@^0.30.3: - version "0.30.4" - resolved "https://registry.yarnpkg.com/jspm-npm/-/jspm-npm-0.30.4.tgz#60f48811af3866ddb16b90c1a91427aec7c3b337" + version "0.30.5" + resolved "https://registry.yarnpkg.com/jspm-npm/-/jspm-npm-0.30.5.tgz#35f67155e04fdcc0837254b80be5bf4dd89afe59" + integrity sha512-3ewCGIScE4wXyqRNPg12O/qgs2rrRiLqhD4aJpRySpr+5pyNFIQuBTSbyAwTqAjjBjYEMX1f1KkuUP99Yxz+Xg== dependencies: bluebird "^3.0.5" buffer-peek-stream "^1.0.1" @@ -4975,6 +6047,7 @@ jspm-npm@^0.30.3: jspm-registry@^0.4.1: version "0.4.4" resolved "https://registry.yarnpkg.com/jspm-registry/-/jspm-registry-0.4.4.tgz#d53166035a87cdce585d62baa397568546996d70" + integrity sha512-xxH4RklolZMa+f/Y6aRExrLeJbk/en5jB+rq9/eKx5lpdzGWgyKT6tfvMFZKpM+9JTdxmQtvp3+NG7gyshkYKg== dependencies: graceful-fs "^4.1.3" rimraf "^2.3.2" @@ -4982,8 +6055,9 @@ jspm-registry@^0.4.1: semver "^4.3.3" jspm@^0.17.0-beta.13: - version "0.17.0-beta.48" - resolved "https://registry.yarnpkg.com/jspm/-/jspm-0.17.0-beta.48.tgz#3d0980709dd547b6eddd2fa520d1948e3c44b6ef" + version "0.17.0-beta.49" + resolved "https://registry.yarnpkg.com/jspm/-/jspm-0.17.0-beta.49.tgz#900b8e9714d3839dafbe2996284cdd2736a6ebb0" + integrity sha512-66Kr63r7VqpwSrmCzpFn0FAwmWH2AmwIkU6Y8rB0ET16zoJo73wxoDfBNPtgT1ONOG7l5gvoUqmT3K4rHtX2Xg== dependencies: bluebird "^3.0.5" chalk "^1.1.1" @@ -5002,73 +6076,92 @@ jspm@^0.17.0-beta.13: rimraf "^2.4.4" sane "^1.3.3" semver "^5.1.0" - systemjs "0.21.3" + systemjs "0.21.4" systemjs-builder "0.16.13" traceur "0.0.105" uglify-js "^2.6.1" jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + version "1.4.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== dependencies: assert-plus "1.0.0" extsprintf "1.3.0" - json-schema "0.2.3" + json-schema "0.4.0" verror "1.10.0" kebab-case@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/kebab-case/-/kebab-case-1.0.0.tgz#3f9e4990adcad0c686c0e701f7645868f75f91eb" + version "1.0.1" + resolved "https://registry.yarnpkg.com/kebab-case/-/kebab-case-1.0.1.tgz#bf734fc95400a3701869215d99a902bd3fe72f60" + integrity sha512-txPHx6nVLhv8PHGXIlAk0nYoh894SpAqGPXNvbg2hh8spvHXIah3+vT87DLoa59nKgC6scD3u3xAuRIgiMqbfQ== kind-of@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-2.0.1.tgz#018ec7a4ce7e3a86cb9141be519d24c8faa981b5" + integrity sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg== dependencies: is-buffer "^1.0.2" kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== dependencies: is-buffer "^1.1.5" kind-of@^5.0.0, kind-of@^5.0.2: version "5.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== latest-version@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + integrity sha512-Be1YRHWWlZaSsrz2U+VInk+tO0EwLIyV+23RhWLINJYwg/UIikxjlj3MhH37/6/EDCAusjajvMkMMUXRaMWl/w== dependencies: package-json "^4.0.0" lazy-cache@^0.2.3: version "0.2.7" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-0.2.7.tgz#7feddf2dcb6edb77d11ef1d117ab5ffdf0ab1b65" + integrity sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ== lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + integrity sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ== lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw== dependencies: invert-kv "^1.0.0" +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + less-loader@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-3.0.0.tgz#199f7f4a79ff8a195ab47649d71c6d7109da32b9" + integrity sha512-lGa3jE5tfBjgNkl/3z04GRJSb9RSEmhWJe23t7dfH/5vqley0UlIqR5lVjpO9Yxp1dUuV0SCtVWzSwHzLhh3cg== dependencies: clone-deep "^0.2.4" loader-utils "^1.0.2" @@ -5076,6 +6169,7 @@ less-loader@^3.0.0: less@^2.7.2: version "2.7.3" resolved "https://registry.yarnpkg.com/less/-/less-2.7.3.tgz#cc1260f51c900a9ec0d91fb6998139e02507b63b" + integrity sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ== optionalDependencies: errno "^0.1.1" graceful-fs "^4.1.2" @@ -5086,13 +6180,15 @@ less@^2.7.2: request "2.81.0" source-map "^0.5.3" -leven@2.1.0, leven@^2.0.0: +leven@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + integrity sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA== liftoff@^2.2.0: version "2.5.0" resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.5.0.tgz#2009291bb31cea861bbf10a7c15a28caf75c31ec" + integrity sha512-01zfGFqfORP1CGmZZP2Zn51zsqz4RltDi0RDOhbGoLYdUT5Lw+I2gX6QdwXhPITF6hPOHEOp+At6/L24hIg9WQ== dependencies: extend "^3.0.0" findup-sync "^2.0.0" @@ -5106,10 +6202,12 @@ liftoff@^2.2.0: linked-list@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/linked-list/-/linked-list-0.1.0.tgz#798b0ff97d1b92a4fd08480f55aea4e9d49d37bf" + integrity sha512-Zr4ovrd0ODzF3ut2TWZMdHIxb8iFdJc/P3QM4iCJdlxxGHXo69c9hGIHzLo8/FtuR9E6WUZc5irKhtPUgOKMAg== load-json-file@^1.0.0, load-json-file@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A== dependencies: graceful-fs "^4.1.2" parse-json "^2.2.0" @@ -5120,6 +6218,7 @@ load-json-file@^1.0.0, load-json-file@^1.1.0: load-json-file@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ== dependencies: graceful-fs "^4.1.2" parse-json "^2.2.0" @@ -5129,6 +6228,7 @@ load-json-file@^2.0.0: loader-utils@^0.2.11, loader-utils@^0.2.15, loader-utils@^0.2.16, loader-utils@^0.2.3, loader-utils@~0.2.5: version "0.2.17" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" + integrity sha512-tiv66G0SmiOx+pLWMtGEkfSEejxvb6N6uRrQjfWJIT79W9GMpgKeCAmm9aVBKtd4WEgntciI8CsGqjpDoCWJug== dependencies: big.js "^3.1.3" emojis-list "^2.0.0" @@ -5136,208 +6236,227 @@ loader-utils@^0.2.11, loader-utils@^0.2.15, loader-utils@^0.2.16, loader-utils@^ object-assign "^4.0.1" loader-utils@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== dependencies: p-locate "^2.0.0" path-exists "^3.0.0" lodash-es@^4.2.1: - version "4.17.10" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.10.tgz#62cd7104cdf5dd87f235a837f0ede0e8e5117e05" + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== lodash-id@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/lodash-id/-/lodash-id-0.14.0.tgz#baf48934e543a1b5d6346f8c84698b1a8c803896" + version "0.14.1" + resolved "https://registry.yarnpkg.com/lodash-id/-/lodash-id-0.14.1.tgz#dffa1f1f8b90d1803bb0d70b7d7547e10751e80b" + integrity sha512-ikQPBTiq/d5m6dfKQlFdIXFzvThPi2Be9/AHxktOnDSfSxE1j9ICbBT5Elk1ke7HSTgM38LHTpmJovo9/klnLg== -lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" +lodash._objecttypes@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz#7c0b7f69d98a1f76529f890b0cdb1b4dfec11c11" + integrity sha512-XpqGh1e7hhkOzftBfWE7zt+Yn9mVHFkDhicVttvKLsoCMLVVL+xTQjfjB4X4vtznauxv0QZ5ZAeqjvat0dh62Q== -lodash._reinterpolate@~3.0.0: +lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA== lodash.assign@^4.0.3, lodash.assign@^4.0.6: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" + integrity sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw== lodash.assignin@^4.0.9: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" + integrity sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg== lodash.bind@^4.1.4: version "4.2.1" resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" + integrity sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA== lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== lodash.debounce@^4.0.0, lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== lodash.defaults@^4.0.1: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== -lodash.escaperegexp@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" +lodash.every@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.every/-/lodash.every-4.6.0.tgz#eb89984bebc4364279bb3aefbbd1ca19bfa6c6a7" + integrity sha512-isF82d+65/sNvQ3aaQAW7LLHnnTxSN/2fm4rhYyuufLzA4VtHz6y6S5vFwe6PQVr2xdqUOyxBbTNKDpnmeu50w== lodash.filter@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" + integrity sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ== lodash.flatten@^4.2.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== -lodash.foreach@^4.3.0: +lodash.flattendeep@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" + integrity sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ== + +lodash.foreach@^4.3.0, lodash.foreach@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" + integrity sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ== -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - -lodash.isarray@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - -lodash.keys@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" +lodash.isobject@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-2.4.1.tgz#5a2e47fe69953f1ee631a7eba1fe64d2d06558f5" + integrity sha512-sTebg2a1PoicYEZXD5PBdQcTlIJ6hUslrlWr7iV0O7n+i4596s2NQ9I5CaZ5FbXSfya/9WQsrYLANUJv9paYVA== dependencies: - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" + lodash._objecttypes "~2.4.1" -lodash.map@^4.4.0: +lodash.map@^4.4.0, lodash.map@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + integrity sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q== + +lodash.maxby@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.maxby/-/lodash.maxby-4.6.0.tgz#082240068f3c7a227aa00a8380e4f38cf0786e3d" + integrity sha512-QfTqQTwzmKxLy7VZlbx2M/ipWv8DCQ2F5BI/MRxLharOQ5V78yMSuB+JE+EuUM22txYfj09R2Q7hUlEYj7KdNg== lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== lodash.merge@^4.4.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54" - -lodash.mergewith@^4.6.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927" + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash.pad@^4.1.0: version "4.5.1" resolved "https://registry.yarnpkg.com/lodash.pad/-/lodash.pad-4.5.1.tgz#4330949a833a7c8da22cc20f6a26c4d59debba70" + integrity sha512-mvUHifnLqM+03YNzeTBS1/Gr6JRFjd3rRx88FHWUvamVaT9k2O/kXha3yBSOwB9/DTQrSTLJNHvLBBt2FdX7Mg== lodash.padend@^4.1.0: version "4.6.1" resolved "https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e" + integrity sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw== lodash.padstart@^4.1.0: version "4.6.1" resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b" + integrity sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw== lodash.pick@^4.2.1: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" + integrity sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q== lodash.reduce@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" + integrity sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw== lodash.reject@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" + integrity sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ== lodash.some@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" + integrity sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ== lodash.template@^4.2.4: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0" + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" + integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== dependencies: - lodash._reinterpolate "~3.0.0" + lodash._reinterpolate "^3.0.0" lodash.templatesettings "^4.0.0" lodash.templatesettings@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316" + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" + integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== dependencies: - lodash._reinterpolate "~3.0.0" + lodash._reinterpolate "^3.0.0" lodash.throttle@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" - -lodash.toarray@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" + integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ== lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== lodash@3.10.1: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" + integrity sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ== -lodash@4, lodash@^4.0.0, lodash@^4.1.0, lodash@^4.13.1, lodash@^4.16.5, lodash@^4.17.10, lodash@^4.17.2, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.6.1: - version "4.17.10" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" +lodash@4, lodash@^4.1.0, lodash@^4.16.5, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.2, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.6.1: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== lodash@4.11.1: version "4.11.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.11.1.tgz#a32106eb8e2ec8e82c241611414773c9df15f8bc" + integrity sha512-zQXZjpw5m367A/MrkEIx1xEJISQmZykAJ5EzCPznYZiVLK211R1hDiye+TU4eyWKDfsaBsLW6/7gH5juuZ4J6Q== log-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + integrity sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ== dependencies: chalk "^1.0.0" longest-streak@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.2.tgz#2421b6ba939a443bb9ffebf596585a50b4c38e2e" + version "2.0.4" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4" + integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg== longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + integrity sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg== -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: - js-tokens "^3.0.0" + js-tokens "^3.0.0 || ^4.0.0" loud-rejection@^1.2.0: version "1.6.0" resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ== dependencies: currently-unhandled "^0.4.1" signal-exit "^3.0.0" @@ -5345,6 +6464,7 @@ loud-rejection@^1.2.0: lowdb@^0.16.2: version "0.16.2" resolved "https://registry.yarnpkg.com/lowdb/-/lowdb-0.16.2.tgz#a2a976eb66ec57797291970f3c87cdb61126fa3a" + integrity sha512-e8/j729JIQiFoIf/+hVo2rPPyOjPUm76hc1ieJRD9XrQFcMWoXEGanUQ+QisZh8roPou+qaL9PPCgN031MMz6Q== dependencies: graceful-fs "^4.1.3" is-promise "^2.1.0" @@ -5354,17 +6474,20 @@ lowdb@^0.16.2: lowercase-keys@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== lowlight@~1.9.1: version "1.9.2" resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.9.2.tgz#0b9127e3cec2c3021b7795dd81005c709a42fdd1" + integrity sha512-Ek18ElVCf/wF/jEm1b92gTnigh94CtBNWiZ2ad+vTgW7cTmQxUY3I98BjHK68gZAJEWmybGBZgx9qv3QxLQB/Q== dependencies: fault "^1.0.2" highlight.js "~9.12.0" lru-cache@^4.0.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== dependencies: pseudomap "^1.0.2" yallist "^2.1.2" @@ -5372,94 +6495,118 @@ lru-cache@^4.0.1: ltcdr@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ltcdr/-/ltcdr-2.2.1.tgz#5ab87ad1d4c1dab8e8c08bbf037ee0c1902287cf" + integrity sha512-HzFIfBAGsI6MWpRQhtaS9MJ22C5hb/0qY9aLZ41PIbYjFP36nodWU1THvVXwYRcCeMdq0dkTVO80vnmjBB6c1w== make-dir@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== dependencies: pify "^3.0.0" make-iterator@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" + integrity sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw== dependencies: kind-of "^6.0.2" -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== dependencies: - tmpl "1.0.x" + tmpl "1.0.5" + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" map-cache@^0.2.0, map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== dependencies: object-visit "^1.0.0" mapz@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/mapz/-/mapz-1.0.2.tgz#f6af94c425db0874ac2c4e67a76f5df1724b1322" + version "1.0.4" + resolved "https://registry.yarnpkg.com/mapz/-/mapz-1.0.4.tgz#1d29d162e41c22124490a20aba3da24540bf19fb" + integrity sha512-kzzJ9ithc1f81XpY5IcqABqapPbitinC+FKE/5uHD/dmNokI4SYZ+pPwrBsoLmWcZ/wmqMjks61nN5mLuNuKrA== dependencies: x-is-array "^0.1.0" markdown-escapes@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.2.tgz#e639cbde7b99c841c0bacc8a07982873b46d2122" + version "1.0.4" + resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" + integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== markdown-table@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.2.tgz#c78db948fa879903a41bce522e3b96f801c63786" + version "1.1.3" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" + integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== math-expression-evaluator@^1.2.14: - version "1.2.17" - resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" + version "1.4.0" + resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.4.0.tgz#3d66031117fbb7b9715ea6c9c68c2cd2eebd37e2" + integrity sha512-4vRUvPyxdO8cWULGTh9dZWL2tZK6LDBvj+OGHBER7poH9Qdt7kXEoj20wiz4lQUbUXQZFjPbe5mVDo9nutizCw== math-random@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" + version "1.0.4" + resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" + integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== md5-file@^3.1.1: version "3.2.3" resolved "https://registry.yarnpkg.com/md5-file/-/md5-file-3.2.3.tgz#f9bceb941eca2214a4c0727f5e700314e770f06f" + integrity sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw== dependencies: buffer-alloc "^1.1.0" md5.js@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== dependencies: hash-base "^3.0.0" inherits "^2.0.1" + safe-buffer "^5.1.2" md5@^2.0.0, md5@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9" + version "2.3.0" + resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" + integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== dependencies: - charenc "~0.0.1" - crypt "~0.0.1" - is-buffer "~1.1.1" + charenc "0.0.2" + crypt "0.0.2" + is-buffer "~1.1.6" mdast-util-compact@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.1.tgz#cdb5f84e2b6a2d3114df33bd05d9cb32e3c4083a" + version "1.0.4" + resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz#d531bb7667b5123abf20859be086c4d06c894593" + integrity sha512-3YDMQHI5vRiS2uygEFYaqckibpJtKq5Sj2c8JioeOQBU6INpKbdWzfyLqFFnDwEcEnRFIdMsguzs5pC1Jp4Isg== dependencies: - unist-util-modify-children "^1.0.0" unist-util-visit "^1.1.0" mdast-util-definitions@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-1.2.2.tgz#673f4377c3e23d3de7af7a4fe2214c0e221c5ac7" + version "1.2.5" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-1.2.5.tgz#3fe622a4171c774ebd06f11e9f8af7ec53ea5c74" + integrity sha512-CJXEdoLfiISCDc2JB6QLb79pYfI6+GcIH+W2ox9nMc7od0Pz+bovcHsiq29xAQY6ayqe/9CsK2VzkSJdg1pFYA== dependencies: unist-util-visit "^1.0.0" mdast-util-to-hast@^2.4.0: version "2.5.0" resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-2.5.0.tgz#f087844d255c7540f36906da30ba106c0ee5ee2f" + integrity sha512-TWcl+BAK3ksLcm2No8n95hsdq1DdGByGqIzG07kXMBdS4h3+qN06mVD07HQHCHZMglBG1R6I5iasSL/rpK7qPA== dependencies: collapse-white-space "^1.0.0" detab "^2.0.0" @@ -5474,8 +6621,9 @@ mdast-util-to-hast@^2.4.0: xtend "^4.0.1" mdast-util-to-nlcst@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-nlcst/-/mdast-util-to-nlcst-3.2.0.tgz#dad262857658d1eab4b5814a20e2f93d7ca1e3b6" + version "3.2.3" + resolved "https://registry.yarnpkg.com/mdast-util-to-nlcst/-/mdast-util-to-nlcst-3.2.3.tgz#dcd0f51b59515b11a0700aeb40f168ed7ba9ed3d" + integrity sha512-hPIsgEg7zCvdU6/qvjcR6lCmJeRuIEpZGY5xBV+pqzuMOvQajyyF8b6f24f8k3Rw8u40GwkI3aAxUXr3bB2xag== dependencies: nlcst-to-string "^2.0.0" repeat-string "^1.5.2" @@ -5483,12 +6631,14 @@ mdast-util-to-nlcst@^3.2.0: vfile-location "^2.0.0" mdast-util-to-string@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-1.0.4.tgz#5c455c878c9355f0c1e7f3e8b719cf583691acfb" + version "1.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz#27055500103f51637bd07d01da01eb1967a43527" + integrity sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A== mdast-util-toc@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-toc/-/mdast-util-toc-2.0.1.tgz#b1d2cb23bfb01f812fa7b55bffe8b0a8bedf6f21" + version "2.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-toc/-/mdast-util-toc-2.1.0.tgz#82b6b218577bb0e67b23abf5c3f7ac73a4b5389f" + integrity sha512-ove/QQWSrYOrf9G3xn2MTAjy7PKCtCmm261wpQwecoPAsUtkihkMVczxFqil7VihxgSz4ID9c8bBTsyXR30gQg== dependencies: github-slugger "^1.1.1" mdast-util-to-string "^1.0.2" @@ -5497,24 +6647,38 @@ mdast-util-toc@^2.0.1: mdurl@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== mem@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + integrity sha512-nOBDrc/wgpkd3X/JOhMqYR+/eLqlfLP4oQfoBA6QExIxEl+GU01oyEkwWyueyO8110pUKijtiHGhEmYoOn88oQ== dependencies: mimic-fn "^1.0.0" +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + memory-fs@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290" + integrity sha512-+y4mDxU4rvXXu5UDSGCGNiesFmwCHuefGMoPCO1WYucNYj7DsLqrFaa2fXVI0H+NNiPTwwzKwspn9yTZqUGqng== memory-fs@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.3.0.tgz#7bcc6b629e3a43e871d7e29aca6ae8a7f15cbb20" + integrity sha512-QTNXnl79X97kZ9jJk/meJrtDuvgvRakX5LU7HZW1L7MsXHuSTwoMIzN9tOLLH3Xfsj/gbsSqX/ovnsqz246zKQ== dependencies: errno "^0.1.3" readable-stream "^2.0.1" @@ -5522,6 +6686,7 @@ memory-fs@~0.3.0: memory-fs@~0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ== dependencies: errno "^0.1.3" readable-stream "^2.0.1" @@ -5529,34 +6694,22 @@ memory-fs@~0.4.1: merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== merge@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" + version "1.2.1" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" + integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - -micro-compress@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/micro-compress/-/micro-compress-1.0.0.tgz#53f5a80b4ad0320ca165a559b6e3df145d4f704f" - dependencies: - compression "^1.6.2" - -micro@9.3.1: - version "9.3.1" - resolved "https://registry.yarnpkg.com/micro/-/micro-9.3.1.tgz#0c37eba0171554b1beccda5215ff8ea4e7aa59d6" - dependencies: - arg "2.0.0" - chalk "2.4.0" - content-type "1.0.4" - is-stream "1.1.0" - raw-body "2.3.2" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== micromatch@^2.1.5, micromatch@^2.3.11, micromatch@^2.3.7: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + integrity sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA== dependencies: arr-diff "^2.0.0" array-unique "^0.2.1" @@ -5572,9 +6725,10 @@ micromatch@^2.1.5, micromatch@^2.3.11, micromatch@^2.3.7: parse-glob "^3.0.4" regex-cache "^0.4.2" -micromatch@^3.0.3, micromatch@^3.0.4: +micromatch@^3.0.3, micromatch@^3.0.4, micromatch@^3.1.10: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" @@ -5593,106 +6747,122 @@ micromatch@^3.0.3, micromatch@^3.0.4: miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== dependencies: bn.js "^4.0.0" brorand "^1.0.1" -"mime-db@>= 1.34.0 < 2": - version "1.34.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.34.0.tgz#452d0ecff5c30346a6dc1e64b1eaee0d3719ff9a" +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-db@~1.33.0: version "1.33.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== -mime-types@2.1.18, mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.7: +mime-types@2.1.18: version "2.1.18" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ== dependencies: mime-db "~1.33.0" -mime@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34, mime-types@~2.1.7: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" -mime@^1.2.11, mime@^1.3.6, mime@^1.4.1, mime@^1.5.0: +mime@1.6.0, mime@^1.2.11, mime@^1.3.6, mime@^1.4.1, mime@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== mimic-response@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.0.tgz#df3d3652a73fded6b9b0b24146e6fd052353458e" + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== dependencies: dom-walk "^0.1.0" -mini-store@^1.0.2, mini-store@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mini-store/-/mini-store-1.1.0.tgz#4d6b3fb5c89aa0303d9b39475efb3439cd42f04f" +mini-store@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mini-store/-/mini-store-2.0.0.tgz#0843c048d6942ce55e3e78b1b67fc063022b5488" + integrity sha512-EG0CuwpQmX+XL4QVS0kxNwHW5ftSbhygu1qxQH0pipugjnPkbvkalCdQbEihMwtQY6d3MTN+MS0q+aurs+RfLQ== dependencies: hoist-non-react-statics "^2.3.1" prop-types "^15.6.0" + react-lifecycles-compat "^3.0.4" shallowequal "^1.0.2" -minimalistic-assert@^1.0.0: +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: +minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimatch@3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" + integrity sha512-NyXjqu1IwcqH6nv5vmMtaG3iw7kdV3g6MwlUBZkc3Vn5b5AMIWYKfptvzipoyFfhlfOgBQ9zoTxQMravF1QTnw== dependencies: brace-expansion "^1.0.0" -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" +minimatch@3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" -minimist@^1.1.1, minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - -minipass@^2.2.1, minipass@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.3.tgz#a7dcc8b7b833f5d368759cce544dccb55f50f233" - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb" - dependencies: - minipass "^2.2.1" + integrity sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw== mitt@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/mitt/-/mitt-1.1.3.tgz#528c506238a05dce11cd914a741ea2cc332da9b8" + version "1.2.0" + resolved "https://registry.yarnpkg.com/mitt/-/mitt-1.2.0.tgz#cb24e6569c806e31bd4e3995787fe38a04fdf90d" + integrity sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw== mixin-deep@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== dependencies: for-in "^1.0.2" is-extendable "^1.0.1" @@ -5700,39 +6870,67 @@ mixin-deep@^1.2.0: mixin-object@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e" + integrity sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA== dependencies: for-in "^0.1.3" is-extendable "^0.1.1" "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: - minimist "0.0.8" + minimist "^1.2.6" -moment@2.x, moment@2.x.x, moment@^2.16.0, moment@^2.19.3: - version "2.22.2" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.2.tgz#3c257f9839fc0e93ff53149632239eb90783ff66" - -mri@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.0.tgz#5c0a3f29c8ccffbbb1ec941dcec09d71fa32f36a" +moment@2.x, moment@2.x.x, moment@^2.16.0, moment@^2.24.0: + version "2.29.4" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" + integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== -mute-stream@0.0.7, mute-stream@~0.0.4: +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +mutationobserver-shim@^0.3.2: + version "0.3.7" + resolved "https://registry.yarnpkg.com/mutationobserver-shim/-/mutationobserver-shim-0.3.7.tgz#8bf633b0c0b0291a1107255ed32c13088a8c5bf3" + integrity sha512-oRIDTyZQU96nAiz2AQyngwx1e89iApl2hN5AOYwyxLUB47UYsU3Wv9lJWqH5y/QdiYkc5HQLi23ZNB3fELdHcQ== + +mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ== -nan@^2.9.2: - version "2.10.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" +mute-stream@~0.0.4: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +nan@^2.12.1, nan@^2.9.2: + version "2.16.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.16.0.tgz#664f43e45460fb98faf00edca0bb0d7b8dce7916" + integrity sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA== + +nanoid@^2.0.0: + version "2.1.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280" + integrity sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA== nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" @@ -5749,6 +6947,7 @@ nanomatch@^1.2.9: nbind@^0.3.14: version "0.3.15" resolved "https://registry.yarnpkg.com/nbind/-/nbind-0.3.15.tgz#20c74d77d54e28627ab8268c2767f7e40aef8c53" + integrity sha512-TrKLNRj5D8wZRJb7XmUNbA1W3iTigAEpm3qaGig5bEWY/iCT2IQBgBc2EUGO59FbRIGhx5hB/McVwqxlSGScVw== dependencies: emscripten-library-decorator "~0.2.2" mkdirp "~0.5.1" @@ -5757,51 +6956,57 @@ nbind@^0.3.14: ncp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3" + integrity sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA== -needle@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.1.tgz#b5e325bd3aae8c2678902fa296f729455d1d3a7d" - dependencies: - debug "^2.1.2" - iconv-lite "^0.4.4" - sax "^1.2.4" - -negotiator@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== netrc@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/netrc/-/netrc-0.1.4.tgz#6be94fcaca8d77ade0a9670dc460914c94472444" + integrity sha512-ye8AIYWQcP9MvoM1i0Z2jV0qed31Z8EWXYnyGNkiUAd+Fo8J+7uy90xTV8g/oAbhtjkY7iZbNTizQaXdKUuwpQ== -next-tick@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" +next-tick@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== nlcst-to-string@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/nlcst-to-string/-/nlcst-to-string-2.0.2.tgz#7125af4d4d369850c697192a658f01f36af9937b" + version "2.0.4" + resolved "https://registry.yarnpkg.com/nlcst-to-string/-/nlcst-to-string-2.0.4.tgz#9315dfab80882bbfd86ddf1b706f53622dc400cc" + integrity sha512-3x3jwTd6UPG7vi5k4GEzvxJ5rDA7hVUIRNHPblKuMVP9Z3xmlsd9cgLcpAMkc5uPOBna82EeshROFhsPkbnTZg== node-emoji@^1.0.4: - version "1.8.1" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.8.1.tgz#6eec6bfb07421e2148c75c6bba72421f8530a826" + version "1.11.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" + integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== dependencies: - lodash.toarray "^4.4.0" + lodash "^4.17.21" node-eta@^0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/node-eta/-/node-eta-0.9.0.tgz#9fb0b099bcd2a021940e603c64254dc003d9a7a8" + integrity sha512-mTCTZk29tmX1OGfVkPt63H3c3VqXrI2Kvua98S7iUIB/Gbp0MNw05YtUomxQIxnnKMyRIIuY9izPcFixzhSBrA== node-fetch@^1.0.1: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== dependencies: encoding "^0.1.11" is-stream "^1.0.1" node-gyp@^3.6.2: - version "3.7.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.7.0.tgz#789478e8f6c45e277aa014f3e28f958f286f9203" + version "3.8.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" + integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== dependencies: fstream "^1.0.0" glob "^7.0.3" @@ -5810,7 +7015,7 @@ node-gyp@^3.6.2: nopt "2 || 3" npmlog "0 || 1 || 2 || 3 || 4" osenv "0" - request ">=2.9.0 <2.82.0" + request "^2.87.0" rimraf "2" semver "~5.3.0" tar "^2.0.0" @@ -5819,10 +7024,12 @@ node-gyp@^3.6.2: node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== node-libs-browser@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-0.7.0.tgz#3e272c0819e308935e26674408d7af0e1491b83b" + integrity sha512-V0EeBff5/nauAta4yGYMdn/CYXpn2KYcE8r6rwU9qJDXG6wMrBhtWVfoKWphSvsnX+mZk6DzaGSO+Yz/MGBAGQ== dependencies: assert "^1.1.1" browserify-zlib "^0.1.4" @@ -5849,8 +7056,9 @@ node-libs-browser@^0.7.0: vm-browserify "0.0.4" node-libs-browser@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== dependencies: assert "^1.1.1" browserify-zlib "^0.2.0" @@ -5859,10 +7067,10 @@ node-libs-browser@^2.0.0: constants-browserify "^1.0.0" crypto-browserify "^3.11.0" domain-browser "^1.1.1" - events "^1.0.0" + events "^3.0.0" https-browserify "^1.0.0" os-browserify "^0.3.0" - path-browserify "0.0.0" + path-browserify "0.0.1" process "^0.11.10" punycode "^1.2.4" querystring-es3 "^0.2.0" @@ -5873,31 +7081,13 @@ node-libs-browser@^2.0.0: timers-browserify "^2.0.4" tty-browserify "0.0.0" url "^0.11.0" - util "^0.10.3" - vm-browserify "0.0.4" - -node-pre-gyp@^0.10.0: - version "0.10.2" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.2.tgz#e8945c20ef6795a20aac2b44f036eb13cf5146e3" - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.0" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - -node-version@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/node-version/-/node-version-1.1.3.tgz#1081c87cce6d2dbbd61d0e51e28c287782678496" + util "^0.11.0" + vm-browserify "^1.0.1" noms@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/noms/-/noms-0.0.0.tgz#da8ebd9f3af9d6760919b27d9cdc8092a7332859" + integrity sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow== dependencies: inherits "^2.0.1" readable-stream "~1.0.31" @@ -5905,64 +7095,53 @@ noms@0.0.0: "nopt@2 || 3": version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + integrity sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg== dependencies: abbrev "1" -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - dependencies: - abbrev "1" - osenv "^0.1.4" - normalize-package-data@^2.3.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" + resolve "^1.10.0" semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== dependencies: remove-trailing-separator "^1.0.1" normalize-range@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== normalize-url@^1.4.0: version "1.9.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + integrity sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ== dependencies: object-assign "^4.0.1" prepend-http "^1.0.0" query-string "^4.1.0" sort-keys "^1.0.0" -npm-bundled@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.3.tgz#7e71703d973af3370a9591bafe3a63aca0be2308" - -npm-packlist@^1.1.6: - version "1.1.10" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.10.tgz#1039db9e985727e464df066f4cf0ab6ef85c398a" - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== dependencies: path-key "^2.0.0" -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.2: +"npmlog@0 || 1 || 2 || 3 || 4": version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== dependencies: are-we-there-yet "~1.1.2" console-control-strings "~1.1.0" @@ -5972,66 +7151,91 @@ npm-run-path@^2.0.0: npmlog@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.3.tgz#020f99351f0c02e399c674ba256e7c4d3b3dd298" + integrity sha512-fi2RmbJV0702nTZJQsGg8lVOU19VeIUZp+LPd7ce2XaZHe77TEcsKUlpBp6jGdARYVCMJPcHTaIYCU5LY7/tsQ== dependencies: ansi "~0.3.1" are-we-there-yet "~1.1.2" gauge "~1.2.5" nth-check@^1.0.1, nth-check@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== dependencies: boolbase "~1.0.0" +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + null-loader@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/null-loader/-/null-loader-0.1.1.tgz#17be9abfcd3ff0e1512f6fc4afcb1f5039378fae" + integrity sha512-F3qrYC3mFAUEx3TxX/y6xbRmt3S7EVuVqOV00xPBB/oIJNjtTMZUN5Z9pxY10oL5dhuyHuOY96A5JoxPdY3Myg== num2fraction@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg== 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" + integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== -oauth-sign@~0.8.1, oauth-sign@~0.8.2: +oauth-sign@~0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + integrity sha512-VlF07iu3VV3+BTXj43Nmp6Irt/G7j/NgEctUS6IweH1RGhURjjCc2NWtzXFPXXWWfc7hgbXQdtiQu2LGp6MxUg== + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== object-assign@4.x, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - -object-component@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" kind-of "^3.0.3" -object-keys@^1.0.8: - version "1.0.12" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" +object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object-path@^0.11.2: - version "0.11.4" - resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.4.tgz#370ae752fbf37de3ea70a861c23bba8915691949" + version "0.11.8" + resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.8.tgz#ed002c02bbdd0070b78a27455e8ae01fc14d4742" + integrity sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA== object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== dependencies: isobject "^3.0.0" object.defaults@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" + integrity sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA== dependencies: array-each "^1.0.1" array-slice "^1.0.0" @@ -6041,6 +7245,7 @@ object.defaults@^1.1.0: object.map@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37" + integrity sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w== dependencies: for-own "^1.0.0" make-iterator "^1.0.0" @@ -6048,6 +7253,7 @@ object.map@^1.0.0: object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + integrity sha512-UiAM5mhmIuKLsOvrL+B0U2d1hXHF3bFYWIuH1LMpuV2EJEHG1Ntz06PgLEHjm6VFd87NpH8rastvPoyv6UW2fA== dependencies: for-own "^0.1.4" is-extendable "^0.1.1" @@ -6055,107 +7261,131 @@ object.omit@^2.0.0: object.pick@^1.2.0, object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== dependencies: isobject "^3.0.1" -omit.js@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/omit.js/-/omit.js-1.0.0.tgz#e013cb86a7517b9cf6f7cfb0ddb4297256a99288" +omit.js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/omit.js/-/omit.js-1.0.2.tgz#91a14f0eba84066dfa015bf30e474c47f30bc858" + integrity sha512-/QPc6G2NS+8d4L/cQhbk6Yit1WTB6Us2g84A7A/1+w9d/eRGHyEqC5kkQtHVoHZ5NFWGG7tUGgrhVZwgZanKrQ== dependencies: babel-runtime "^6.23.0" -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: ee-first "1.1.1" -on-headers@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" onecolor@~2.4.0: version "2.4.2" resolved "https://registry.yarnpkg.com/onecolor/-/onecolor-2.4.2.tgz#a53ec3ff171c3446016dd5210d1a1b544bf7d874" + integrity sha512-V2BitXZgajFyGmUNh+lYfoOQAKj31YhOBjqYVsVEkYUYUCr7MsVQbBKJdUWmLhu1c+y3imbdagOjbeC8ygrTyA== onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ== dependencies: mimic-fn "^1.0.0" open@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/open/-/open-0.0.5.tgz#42c3e18ec95466b6bf0dc42f3a2945c3f0cad8fc" - -openssl-self-signed-certificate@1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/openssl-self-signed-certificate/-/openssl-self-signed-certificate-1.1.6.tgz#9d3a4776b1a57e9847350392114ad2f915a83dd4" + integrity sha512-+X/dJYLapVO1VbC620DhtNZK9U4/kQVaTQp/Gh7cb6UTLYfGZzzU2ZXkWrOA/wBrf4UqAFwtLqXYTxe4tSnWQQ== opn@5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/opn/-/opn-5.1.0.tgz#72ce2306a17dbea58ff1041853352b4a8fc77519" + integrity sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg== dependencies: is-wsl "^1.1.0" -opn@5.3.0, opn@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.3.0.tgz#64871565c863875f052cfdf53d3e3cb5adb53b1c" +opn@^5.1.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== dependencies: is-wsl "^1.1.0" -optimist@^0.6.1, optimist@~0.6.0, optimist@~0.6.1: +optimist@~0.6.0, optimist@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g== dependencies: minimist "~0.0.1" wordwrap "~0.0.2" original@>=0.0.5: - version "1.0.1" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.1.tgz#b0a53ff42ba997a8c9cd1fb5daaeb42b9d693190" + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== dependencies: - url-parse "~1.4.0" + url-parse "^1.4.3" os-browserify@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f" + integrity sha512-vHbnbzdqWJWvGOm7aOMDXHVUykPG0GdhfLkn5ZDmvbRI+wPj/XoB0/CRAkP9v28eZ7REIPPHJa+8ZEYixsWKmQ== os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A== os-homedir@^1.0.0, os-homedir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== os-locale@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + integrity sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g== dependencies: lcid "^1.0.0" os-locale@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== dependencies: execa "^0.7.0" lcid "^1.0.0" mem "^1.1.0" +os-locale@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + 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" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== -osenv@0, osenv@^0.1.4: +osenv@0: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.0" @@ -6163,6 +7393,7 @@ osenv@0, osenv@^0.1.4: output-file-sync@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" + integrity sha512-uQLlclru4xpCi+tfs80l3QF24KL81X57ELNMy7W/dox+JTtxUf1bLyQ8968fFCmSqqbokjW0kn+WBIlO+rSkNg== dependencies: graceful-fs "^4.1.4" mkdirp "^0.5.1" @@ -6171,40 +7402,58 @@ output-file-sync@^1.1.2: p-cancelable@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" + integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw== + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== dependencies: p-try "^1.0.0" p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== dependencies: p-limit "^1.1.0" p-map@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== p-timeout@^1.1.1: version "1.2.1" resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" + integrity sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA== dependencies: p-finally "^1.0.0" p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== package-json@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + integrity sha512-q/R5GrMek0vzgoomq6rm9OX+3PQve8sLwTirmK30YB3Cu0Bbt9OX9M/SIUnroN5BGJkzwGsFwDaRGD9EwBOlCA== dependencies: got "^6.7.1" registry-auth-token "^3.0.1" @@ -6214,33 +7463,38 @@ package-json@^4.0.0: pako@~0.2.0: version "0.2.9" resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA== pako@~1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== -parse-asn1@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8" +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== dependencies: - asn1.js "^4.0.0" + asn1.js "^5.2.0" browserify-aes "^1.0.0" - create-hash "^1.1.0" evp_bytestokey "^1.0.0" pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" parse-english@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/parse-english/-/parse-english-4.1.1.tgz#2f75872e617769d857d9b6992dcde2a891f1b2d3" + version "4.2.0" + resolved "https://registry.yarnpkg.com/parse-english/-/parse-english-4.2.0.tgz#037b68f34d1a1bdf3d33668b87791bdfc1f01e1e" + integrity sha512-jw5N6wZUZViIw3VLG/FUSeL3vDhfw5Q2g4E3nYC69Mm5ANbh9ZWd+eligQbeUoyObZM8neynTn3l14e09pjEWg== dependencies: nlcst-to-string "^2.0.0" parse-latin "^4.0.0" - unist-util-modify-children "^1.0.0" + unist-util-modify-children "^2.0.0" unist-util-visit-children "^1.0.0" -parse-entities@^1.0.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.1.2.tgz#9eaf719b29dc3bd62246b4332009072e01527777" +parse-entities@^1.0.2, parse-entities@^1.1.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" + integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg== dependencies: character-entities "^1.0.0" character-entities-legacy "^1.0.0" @@ -6252,6 +7506,7 @@ parse-entities@^1.0.2: parse-filepath@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" + integrity sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q== dependencies: is-absolute "^1.0.0" map-cache "^0.2.0" @@ -6260,6 +7515,7 @@ parse-filepath@^1.0.1: parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + integrity sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA== dependencies: glob-base "^0.3.0" is-dotfile "^1.0.0" @@ -6269,114 +7525,141 @@ parse-glob@^3.0.4: parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ== dependencies: error-ex "^1.2.0" parse-latin@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/parse-latin/-/parse-latin-4.1.1.tgz#3a3edef405b2d5dce417b7157d3d8a5c7cdfab1d" + version "4.3.0" + resolved "https://registry.yarnpkg.com/parse-latin/-/parse-latin-4.3.0.tgz#1a70fc5601743baa06c5f12253c334fc94b4a917" + integrity sha512-TYKL+K98dcAWoCw/Ac1yrPviU8Trk+/gmjQVaoWEFDZmVD4KRg6c/80xKqNNFQObo2mTONgF8trzAf2UTwKafw== dependencies: nlcst-to-string "^2.0.0" - unist-util-modify-children "^1.0.0" + unist-util-modify-children "^2.0.0" unist-util-visit-children "^1.0.0" parse-numeric-range@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-0.0.2.tgz#b4f09d413c7adbcd987f6e9233c7b4b210c938e4" + integrity sha512-m6xRZuda9v6EGdnPMIkcyB3/NpdgbMJG8yPAQ0Mwm1nGlm2OE/o6YS0EAxAqv6u4/PKQPp6BNoylZnRb2U2/OA== parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== + +parse-srcset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/parse-srcset/-/parse-srcset-1.0.2.tgz#f2bd221f6cc970a938d88556abc589caaaa2bde1" + integrity sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q== parse5@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" + integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA== dependencies: "@types/node" "*" -parseqs@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" - dependencies: - better-assert "~1.0.0" +parseqs@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.6.tgz#8e4bb5a19d1cdc844a08ac974d34e273afa670d5" + integrity sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w== -parseuri@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" - dependencies: - better-assert "~1.0.0" +parseuri@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.6.tgz#e1496e829e3ac2ff47f39a4dd044b32823c4a25a" + integrity sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow== -parseurl@~1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== path-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + integrity sha512-WA3pxi1olUQcsl82W576vkqhUSGp0uBtr/381pxx5WXLp3NC+AB99hUG3aGW7H0Kg9PFr1D8wv1iJeICe+9Mhw== + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q== path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ== dependencies: pinkie-promise "^2.0.0" path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-is-inside@1.0.2, path-is-inside@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== -path-key@^2.0.0: +path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== -path-parse@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-root-regex@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" + integrity sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ== path-root@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" + integrity sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg== dependencies: path-root-regex "^0.1.0" path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +path-to-regexp@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.2.1.tgz#90b617025a16381a879bc82a38d4e8bdeb2bcf45" + integrity sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ== path-to-regexp@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== dependencies: isarray "0.0.1" -path-type@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - dependencies: - pify "^3.0.0" - path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg== dependencies: graceful-fs "^4.1.2" pify "^2.0.0" @@ -6385,16 +7668,19 @@ path-type@^1.0.0: path-type@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ== dependencies: pify "^2.0.0" pbkdf2-compat@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz#b6e0c8fa99494d94e0511575802a59a5c142f288" + integrity sha512-JYubxYhymODUUWVq9/Tmo9VQFZ8LyrD/pbXVpwmt1Npr2z29KZwp7+IBT3/PRjr1xpecX4W1EcbjFjp8nE3stQ== pbkdf2@^3.0.3: - version "3.0.16" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.16.tgz#7404208ec6b01b62d85bf83853a8064f8d9c2a5c" + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -6405,32 +7691,44 @@ pbkdf2@^3.0.3: performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + integrity sha512-YHk5ez1hmMR5LOkb9iJkLKqoBlL7WD5M8ljC75ZfzXriuBIVNuecaXuU7e+hOwyqf24Wxhh7Vxgt7Hnw9288Tg== performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +picocolors@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" + integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== pixrem@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/pixrem/-/pixrem-3.0.2.tgz#30d1bafb4c3bdce8e9bb4bd56a13985619320c34" + integrity sha512-sOvRS25lBgH91Isn2ewxpc3GRvkRlXW1hgb/hcjXz1URERtLVsT3fblTpKyBXP8Cw/EOjUqwtIs7x4uG7sppVg== dependencies: browserslist "^1.0.0" postcss "^5.0.0" @@ -6439,6 +7737,7 @@ pixrem@^3.0.0: pkg-conf@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-1.1.3.tgz#378e56d6fd13e88bfb6f4a25df7a83faabddba5b" + integrity sha512-9hHgE5+Xai/ChrnahNP8Ke0VNF/s41IZIB/d24eMHEaRamdPg+wwlRm2lTb5wMvE8eTIKrYZsrxfuOwt3dpsIQ== dependencies: find-up "^1.0.0" load-json-file "^1.1.0" @@ -6448,12 +7747,14 @@ pkg-conf@^1.1.2: pkg-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + integrity sha512-c6pv3OE78mcZ92ckebVDqg0aWSoKhOTbwCV6qbCWMk546mAL9pZln0+QsN/yQ7fkucd4+yJPLrCBXNt8Ruk+Eg== dependencies: find-up "^1.0.0" pkg-resolve@^0.1.7: version "0.1.14" resolved "https://registry.yarnpkg.com/pkg-resolve/-/pkg-resolve-0.1.14.tgz#329b2e76ccbb372e22e6a3a41cb30ab0457836ba" + integrity sha512-AYy7QzJAYH25nWegF1rHM81V8J0NjQM59Q4XCVZbDmFQPtfQ6p2YqPXlEedvAUedx5Sq5MmL3jjNMMOlb4jwCQ== dependencies: jspm "^0.17.0-beta.13" resolve "^1.1.7" @@ -6461,6 +7762,7 @@ pkg-resolve@^0.1.7: pleeease-filters@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/pleeease-filters/-/pleeease-filters-3.0.1.tgz#4dfe0e8f1046613517c64b728bc80608a7ebf22f" + integrity sha512-qZlMatnRDR3WiuERBuDK6oDBj+1s5mQ4XL0jxJ0NUHMhiECIzz1d7W9yyRp3byZ2vIG+JPvBelOaQAuU4uNNog== dependencies: onecolor "~2.4.0" postcss "^5.0.4" @@ -6468,10 +7770,12 @@ pleeease-filters@^3.0.0: posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== postcss-apply@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/postcss-apply/-/postcss-apply-0.3.0.tgz#a2f37c5bdfa881e4c15f4f245ec0cd96dd2e70d5" + integrity sha512-awYTBqGlhC9UJD6zMXgurC8AIrBOdpZzUqZj0QpkFl9XqAnIpeBOmWarSSgRS4/IREC2kCjQcAi9GDkb3gyQRg== dependencies: balanced-match "^0.4.1" postcss "^5.0.21" @@ -6479,6 +7783,7 @@ postcss-apply@^0.3.0: postcss-attribute-case-insensitive@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-1.0.1.tgz#ceb73777e106167eb233f1938c9bd9f2e697308d" + integrity sha512-lORletJWptL5LO+7lXp2fcnPNrDc6kJ5Z9TL/U6Mru3cPMSNM8X1droa2J61CHEoodk0uCj+PV7nbY5+enSMUw== dependencies: postcss "^5.1.1" postcss-selector-parser "^2.2.0" @@ -6486,12 +7791,14 @@ postcss-attribute-case-insensitive@^1.0.1: postcss-browser-reporter@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/postcss-browser-reporter/-/postcss-browser-reporter-0.5.0.tgz#ae069dd086d57388d196e1dac39cb8d7626feb48" + integrity sha512-QGTSyG9m+QaL3L6f0ymRHIVz0KWUDS+Yy3N/nPslds8D16x7pmZusnlKSmFL8ybMrxehufp0HwMjsTRLn8/xIQ== dependencies: postcss "^5.0.4" postcss-calc@^5.0.0, postcss-calc@^5.2.0: version "5.3.1" resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" + integrity sha512-iBcptYFq+QUh9gzP7ta2btw50o40s4uLI4UDVgd5yRAZtUDWc5APdl5yQDd2h/TyiZNbJrv0HiYhT102CMgN7Q== dependencies: postcss "^5.0.2" postcss-message-helpers "^2.0.0" @@ -6500,6 +7807,7 @@ postcss-calc@^5.0.0, postcss-calc@^5.2.0: postcss-color-function@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/postcss-color-function/-/postcss-color-function-2.0.1.tgz#9ad226f550e8a7c7f8b8a77860545b6dd7f55241" + integrity sha512-zTc0wNpIcNJgp4TAugk+RgzNpSlFQniJw3lTGT+oPhteDvxjBc3d86aoY87DmHMfsiyYYb4VJrvOq3PHFDQoWw== dependencies: css-color-function "^1.2.0" postcss "^5.0.4" @@ -6509,6 +7817,7 @@ postcss-color-function@^2.0.0: postcss-color-gray@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/postcss-color-gray/-/postcss-color-gray-3.0.1.tgz#74432ede66dd83b1d1363565c68b376e18ff6770" + integrity sha512-82c8n0A4w4Yj77BfqrmOB8zmrzaj58xq5wvEPV2G90EiAtGYM8Tl2TuJkTjyRUbJpbyd2vFEW4Jf92/h3eDh1g== dependencies: color "^0.11.3" postcss "^5.0.4" @@ -6518,6 +7827,7 @@ postcss-color-gray@^3.0.0: postcss-color-hex-alpha@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-2.0.0.tgz#44fd6ecade66028648c881cb6504cdcbfdc6cd09" + integrity sha512-n+xKCx1RVexr616Iglj7KboV0BRGDYermmiMPcetxAWIQK4AY1teMEP2OHXGoskgKDGpe7ugmK6T/BCB8QRhfg== dependencies: color "^0.10.1" postcss "^5.0.4" @@ -6526,6 +7836,7 @@ postcss-color-hex-alpha@^2.0.0: postcss-color-hsl@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/postcss-color-hsl/-/postcss-color-hsl-1.0.5.tgz#f53bb1c348310ce307ad89e3181a864738b5e687" + integrity sha512-yLo21cctVYRMcmJoXlJRjnx5N9V9aTfn6TN3pJ96wNJ4WRfgeKaQ/aW6WgfQJVlhbw/2EIFEqIgcmAAEsShc2Q== dependencies: postcss "^5.2.0" postcss-value-parser "^3.3.0" @@ -6534,6 +7845,7 @@ postcss-color-hsl@^1.0.5: postcss-color-hwb@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/postcss-color-hwb/-/postcss-color-hwb-2.0.1.tgz#d63afaf9b70cb595f900a29c9fe57bf2a32fabec" + integrity sha512-LpMUq8D+RSK/IuvT/GE0bcIkjWzPK50uBjrz1ziKLLGObquhGlGsH+gsyNGIWUzSBQo6U5JoDfKllhD/FQb8Kw== dependencies: color "^0.11.4" postcss "^5.0.4" @@ -6543,6 +7855,7 @@ postcss-color-hwb@^2.0.0: postcss-color-rebeccapurple@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-2.0.1.tgz#74c6444e7cbb7d85613b5f7286df7a491608451c" + integrity sha512-JaY7hcXntTIrKziFUiuEsPzcpO2ucd9XfQ7EN8VT4vEaCZYaciBRQCMigY85IRjfFEPXIxH27r9NF66FuubG8g== dependencies: color "^0.11.4" postcss "^5.0.4" @@ -6550,6 +7863,7 @@ postcss-color-rebeccapurple@^2.0.0: postcss-color-rgb@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/postcss-color-rgb/-/postcss-color-rgb-1.1.4.tgz#f29243e22e8e8c13434474092372d4ce605be8bc" + integrity sha512-UCxYTD1X7+c4TSiSH5/2IhLbqrN7Ec2FQYMdugiqVQSnVGuKn9Pynj5SeaMYUu2qnomYbiTa4qMspbZQxFYHLw== dependencies: postcss "^5.2.0" postcss-value-parser "^3.3.0" @@ -6557,6 +7871,7 @@ postcss-color-rgb@^1.1.4: postcss-color-rgba-fallback@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/postcss-color-rgba-fallback/-/postcss-color-rgba-fallback-2.2.0.tgz#6d29491be5990a93173d47e7c76f5810b09402ba" + integrity sha512-AfA5ez+UyKso6Mz7/Y3F1fqPrMOxD65RGpazCm3pANziZXNf0ptvAdZdX3sggflQ4DgHSD+z14GIT+9rggVGkQ== dependencies: postcss "^5.0.0" postcss-value-parser "^3.0.2" @@ -6565,6 +7880,7 @@ postcss-color-rgba-fallback@^2.0.0: postcss-colormin@^2.1.8: version "2.2.2" resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" + integrity sha512-XXitQe+jNNPf+vxvQXIQ1+pvdQKWKgkx8zlJNltcMEmLma1ypDRDQwlLt+6cP26fBreihNhZxohh1rcgCH2W5w== dependencies: colormin "^1.0.5" postcss "^5.0.13" @@ -6573,6 +7889,7 @@ postcss-colormin@^2.1.8: postcss-convert-values@^2.3.4: version "2.6.1" resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" + integrity sha512-SE7mf25D3ORUEXpu3WUqQqy0nCbMuM5BEny+ULE/FXdS/0UMA58OdzwvzuHJRpIFlk1uojt16JhaEogtP6W2oA== dependencies: postcss "^5.0.11" postcss-value-parser "^3.1.2" @@ -6580,6 +7897,7 @@ postcss-convert-values@^2.3.4: postcss-cssnext@^2.8.0: version "2.11.0" resolved "https://registry.yarnpkg.com/postcss-cssnext/-/postcss-cssnext-2.11.0.tgz#31e68f001e409604da703b66de14b8b8c8c9f2b1" + integrity sha512-b3JoGAbAFGxPNyy/MQtG4ZqLvi2VNLHwvtFLlLdEnImXNEFGUrXlWvGh6Tva7Ln/ahEq1yRf4jVRFZjQObY14Q== dependencies: autoprefixer "^6.0.2" caniuse-api "^1.5.3" @@ -6616,12 +7934,14 @@ postcss-cssnext@^2.8.0: postcss-custom-media@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-5.0.1.tgz#138d25a184bf2eb54de12d55a6c01c30a9d8bd81" + integrity sha512-EdojG8oK+4Io0IzTOrz7+5Czd0BtLgtlCcTCjxJoj02RD8vQxo7PbcpmX7qL0uxeVyDOiOoJtx91Uu3ymLyaEQ== dependencies: postcss "^5.0.0" postcss-custom-properties@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-5.0.2.tgz#9719d78f2da9cf9f53810aebc23d4656130aceb1" + integrity sha512-9nuxFdFgbzd7EVBzvMTJHdd1+4XKBtm8sj1EnjqnaoO/my9h3KWxBHlk5Uxeka35vR35f+byMqAP2zePdJ8NEg== dependencies: balanced-match "^0.4.2" postcss "^5.0.0" @@ -6629,6 +7949,7 @@ postcss-custom-properties@^5.0.0: postcss-custom-selectors@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-3.0.0.tgz#8f81249f5ed07a8d0917cf6a39fe5b056b7f96ac" + integrity sha512-7vYr2XuV3avGdv0h4hLq4A+V+HFCD56e5uIBJjqSyvaLp24xyBWdvekJHhYUC95+2w3e3SNsrFWkf46CY7/FdA== dependencies: balanced-match "^0.2.0" postcss "^5.0.0" @@ -6637,30 +7958,35 @@ postcss-custom-selectors@^3.0.0: postcss-discard-comments@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" + integrity sha512-yGbyBDo5FxsImE90LD8C87vgnNlweQkODMkUZlDVM/CBgLr9C5RasLGJxxh9GjVOBeG8NcCMatoqI1pXg8JNXg== dependencies: postcss "^5.0.14" postcss-discard-duplicates@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" + integrity sha512-+lk5W1uqO8qIUTET+UETgj9GWykLC3LOldr7EehmymV0Wu36kyoHimC4cILrAAYpHQ+fr4ypKcWcVNaGzm0reA== dependencies: postcss "^5.0.4" postcss-discard-empty@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" + integrity sha512-IBFoyrwk52dhF+5z/ZAbzq5Jy7Wq0aLUsOn69JNS+7YeuyHaNzJwBIYE0QlUH/p5d3L+OON72Fsexyb7OK/3og== dependencies: postcss "^5.0.14" postcss-discard-overridden@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" + integrity sha512-IyKoDL8QNObOiUc6eBw8kMxBHCfxUaERYTUe2QF8k7j/xiirayDzzkmlR6lMQjrAM1p1DDRTvWrS7Aa8lp6/uA== dependencies: postcss "^5.0.16" postcss-discard-unused@^2.2.1: version "2.2.3" resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" + integrity sha512-nCbFNfqYAbKCw9J6PSJubpN9asnrwVLkRDFc4KCwyUEdOtM5XDE/eTW3OpqHrYY1L4fZxgan7LLRAAYYBzwzrg== dependencies: postcss "^5.0.14" uniqs "^2.0.0" @@ -6668,12 +7994,14 @@ postcss-discard-unused@^2.2.1: postcss-filter-plugins@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec" + integrity sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ== dependencies: postcss "^5.0.4" postcss-font-family-system-ui@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/postcss-font-family-system-ui/-/postcss-font-family-system-ui-1.0.2.tgz#3e1a5e3fb7e31e5e9e71439ccb0e8014556927c7" + integrity sha512-b/7asK2mKX/GU3lE7W5Qvs0m8XjbeQlcILgAlAfDyn8vfDRVsLZg8WZ4qglyLT0myC6pEMi68ckLFJ7ZGRpnLQ== dependencies: lodash "^4.17.4" postcss "^5.2.12" @@ -6682,12 +8010,14 @@ postcss-font-family-system-ui@^1.0.1: postcss-font-variant@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-2.0.1.tgz#7ca29103f59fa02ca3ace2ca22b2f756853d4ef8" + integrity sha512-0o0p9BAAbzRSST0NGjo6GwFGyIKp3JW9GeypeL+2UwQcVj876tzaX3yHe/UprnFZOdFbpgYJ4eWrNillEWfaqA== dependencies: postcss "^5.0.4" postcss-image-set-polyfill@^0.3.3: version "0.3.5" resolved "https://registry.yarnpkg.com/postcss-image-set-polyfill/-/postcss-image-set-polyfill-0.3.5.tgz#0f193413700cf1f82bd39066ef016d65a4a18181" + integrity sha512-4Df/0UNixbXqkw8k+j4CWbicfeZe8/pzkePgBRwWk+iA8wpz1r9ac0YZoXAFAtGISGrw+2d+Kzm/RItZIlu43Q== dependencies: postcss "^6.0.1" postcss-media-query-parser "^0.2.3" @@ -6695,6 +8025,7 @@ postcss-image-set-polyfill@^0.3.3: postcss-import@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-8.2.0.tgz#f92fd2454e21ef4efb1e75c00c47ac03f4d1397c" + integrity sha512-S/bPBRCk0+Ww5kFxE/11/RiQm8gdX7cKru9EolsBO52HJDJC1tuoSjVv7fSIG+2pKZfUNVJk78Tpy87ZhBeANw== dependencies: object-assign "^4.0.1" postcss "^5.0.14" @@ -6708,6 +8039,7 @@ postcss-import@^8.2.0: postcss-initial@^1.3.1: version "1.5.3" resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-1.5.3.tgz#20c3e91c96822ddb1bed49508db96d56bac377d0" + integrity sha512-2ch6DIKqqfOVNVCgi82wnKl2Hr+wxYKC8cjVRZlc2U/cn6Ikk8KYpPGeLITzXc8cZZheI3SWuKvBn1RKIIC+Dg== dependencies: lodash.template "^4.2.4" postcss "^5.0.19" @@ -6715,6 +8047,7 @@ postcss-initial@^1.3.1: postcss-loader@^0.13.0: version "0.13.0" resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-0.13.0.tgz#72fdaf0d29444df77d3751ce4e69dc40bc99ed85" + integrity sha512-72YGNaZrG8FTV8vKpHSjVI5MW8XBtH9CN//EXUbvpMjWw5js8ZXVkL/fRKD3W8K2FH4oO8t4UQfveoUBTwPGaA== dependencies: loader-utils "^0.2.15" postcss "^5.2.0" @@ -6722,16 +8055,19 @@ postcss-loader@^0.13.0: postcss-media-minmax@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-2.1.2.tgz#444c5cf8926ab5e4fd8a2509e9297e751649cdf8" + integrity sha512-VpT8UQp260A3sA7oNN3XSJ5tGRUvuzRNpwObKfj5Ch6ivek4wsLSlG0lNYa1Nrty/M0Lpc7FKqgUd6cmZg7x0Q== dependencies: postcss "^5.0.4" postcss-media-query-parser@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" + integrity sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig== postcss-merge-idents@^2.1.5: version "2.1.7" resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" + integrity sha512-9DHmfCZ7/hNHhIKnNkz4CU0ejtGen5BbTRJc13Z2uHfCedeCUsK2WEQoAJRBL+phs68iWK6Qf8Jze71anuysWA== dependencies: has "^1.0.1" postcss "^5.0.10" @@ -6740,12 +8076,14 @@ postcss-merge-idents@^2.1.5: postcss-merge-longhand@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" + integrity sha512-ma7YvxjdLQdifnc1HFsW/AW6fVfubGyR+X4bE3FOSdBVMY9bZjKVdklHT+odknKBB7FSCfKIHC3yHK7RUAqRPg== dependencies: postcss "^5.0.4" postcss-merge-rules@^2.0.3: version "2.1.2" resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" + integrity sha512-Wgg2FS6W3AYBl+5L9poL6ZUISi5YzL+sDCJfM7zNw/Q1qsyVQXXZ2cbVui6mu2cYJpt1hOKCGj1xA4mq/obz/Q== dependencies: browserslist "^1.5.2" caniuse-api "^1.5.2" @@ -6756,10 +8094,12 @@ postcss-merge-rules@^2.0.3: postcss-message-helpers@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" + integrity sha512-tPLZzVAiIJp46TBbpXtrUAKqedXSyW5xDEo1sikrfEfnTs+49SBZR/xDdqCiJvSSbtr615xDsaMF3RrxS2jZlA== postcss-minify-font-values@^1.0.2: version "1.0.5" resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" + integrity sha512-vFSPzrJhNe6/8McOLU13XIsERohBJiIFFuC1PolgajOZdRWqRgKITP/A4Z/n4GQhEmtbxmO9NDw3QLaFfE1dFQ== dependencies: object-assign "^4.0.1" postcss "^5.0.4" @@ -6768,6 +8108,7 @@ postcss-minify-font-values@^1.0.2: postcss-minify-gradients@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" + integrity sha512-DZhT0OE+RbVqVyGsTIKx84rU/5cury1jmwPa19bViqYPQu499ZU831yMzzsyC8EhiZVd73+h5Z9xb/DdaBpw7Q== dependencies: postcss "^5.0.12" postcss-value-parser "^3.3.0" @@ -6775,6 +8116,7 @@ postcss-minify-gradients@^1.0.1: postcss-minify-params@^1.0.4: version "1.2.2" resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" + integrity sha512-hhJdMVgP8vasrHbkKAk+ab28vEmPYgyuDzRl31V3BEB3QOR3L5TTIVEWLDNnZZ3+fiTi9d6Ker8GM8S1h8p2Ow== dependencies: alphanum-sort "^1.0.1" postcss "^5.0.2" @@ -6784,6 +8126,7 @@ postcss-minify-params@^1.0.4: postcss-minify-selectors@^2.0.4: version "2.1.1" resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" + integrity sha512-e13vxPBSo3ZaPne43KVgM+UETkx3Bs4/Qvm6yXI9HQpQp4nyb7HZ0gKpkF+Wn2x+/dbQ+swNpCdZSbMOT7+TIA== dependencies: alphanum-sort "^1.0.2" has "^1.0.1" @@ -6791,14 +8134,16 @@ postcss-minify-selectors@^2.0.4: postcss-selector-parser "^2.0.0" postcss-modules-extract-imports@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz#b614c9720be6816eaee35fb3a5faa1dba6a05ddb" + version "1.2.1" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a" + integrity sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw== dependencies: postcss "^6.0.1" postcss-modules-local-by-default@^1.0.1: version "1.2.0" resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" + integrity sha512-X4cquUPIaAd86raVrBwO8fwRfkIdbwFu7CTfEOjiZQHVQwlHRSkTgH5NLDmMm5+1hQO8u6dZ+TOOJDbay1hYpA== dependencies: css-selector-tokenizer "^0.7.0" postcss "^6.0.1" @@ -6806,6 +8151,7 @@ postcss-modules-local-by-default@^1.0.1: postcss-modules-scope@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" + integrity sha512-LTYwnA4C1He1BKZXIx1CYiHixdSe9LWYVKadq9lK5aCCMkoOkFyZ7aigt+srfjlRplJY3gIol6KUNefdMQJdlw== dependencies: css-selector-tokenizer "^0.7.0" postcss "^6.0.1" @@ -6813,6 +8159,7 @@ postcss-modules-scope@^1.0.0: postcss-modules-values@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" + integrity sha512-i7IFaR9hlQ6/0UgFuqM6YWaCfA1Ej8WMg8A5DggnH1UGKJvTV/ugqq/KaULixzzOi3T/tF6ClBXcHGCzdd5unA== dependencies: icss-replace-symbols "^1.1.0" postcss "^6.0.1" @@ -6820,18 +8167,21 @@ postcss-modules-values@^1.1.0: postcss-nesting@^2.0.5: version "2.3.1" resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-2.3.1.tgz#94a6b6a4ef707fbec20a87fee5c957759b4e01cf" + integrity sha512-gcLJUzCctlWzYHpZYMjdUoDe0/D//FYjfMaWtsl4jsJt8vD9kovp9v9nWN5q1LDlT1VmbDaH1FKRJhrKR9u/kQ== dependencies: postcss "^5.0.19" postcss-normalize-charset@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" + integrity sha512-RKgjEks83l8w4yEhztOwNZ+nLSrJ+NvPNhpS+mVDzoaiRHZQVoG7NF2TP5qjwnaN9YswUhj6m1E0S0Z+WDCgEQ== dependencies: postcss "^5.0.5" postcss-normalize-url@^3.0.7: version "3.0.8" resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" + integrity sha512-WqtWG6GV2nELsQEFES0RzfL2ebVwmGl/M8VmMbshKto/UClBo+mznX8Zi4/hkThdqx7ijwv+O8HWPdpK7nH/Ig== dependencies: is-absolute-url "^2.0.0" normalize-url "^1.4.0" @@ -6841,6 +8191,7 @@ postcss-normalize-url@^3.0.7: postcss-ordered-values@^2.1.0: version "2.2.3" resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" + integrity sha512-5RB1IUZhkxDCfa5fx/ogp/A82mtq+r7USqS+7zt0e428HJ7+BHCxyeY39ClmkkUtxdOd3mk8gD6d9bjH2BECMg== dependencies: postcss "^5.0.4" postcss-value-parser "^3.0.1" @@ -6848,6 +8199,7 @@ postcss-ordered-values@^2.1.0: postcss-pseudo-class-any-link@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-1.0.0.tgz#903239196401d335fe73ac756186fa62e693af26" + integrity sha512-rzDdAGAZTjNlNsMvG/rbx7NYeiEbdAdt5c36j4gHjWp5lNtYVIPtatnwmLCbSW5GtC0EvnnBtOrX2mHAaBe6iw== dependencies: postcss "^5.0.3" postcss-selector-parser "^1.1.4" @@ -6855,12 +8207,14 @@ postcss-pseudo-class-any-link@^1.0.0: postcss-pseudoelements@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/postcss-pseudoelements/-/postcss-pseudoelements-3.0.0.tgz#6c682177c7900ba053b6df17f8c590284c7b8bbc" + integrity sha512-v8MXqK2UZ/UHeHlpnQYyNL3bSO3eLqo+hEQY/hGFTePfF5l6dZrmVkf7nEvtrsyhSMF7h4lvrhukKZPicr7MFQ== dependencies: postcss "^5.0.4" postcss-reduce-idents@^2.2.2: version "2.4.0" resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" + integrity sha512-0+Ow9e8JLtffjumJJFPqvN4qAvokVbdQPnijUDSOX8tfTwrILLP4ETvrZcXZxAtpFLh/U0c+q8oRMJLr1Kiu4w== dependencies: postcss "^5.0.4" postcss-value-parser "^3.0.2" @@ -6868,12 +8222,14 @@ postcss-reduce-idents@^2.2.2: postcss-reduce-initial@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" + integrity sha512-jJFrV1vWOPCQsIVitawGesRgMgunbclERQ/IRGW7r93uHrVzNQQmHQ7znsOIjJPZ4yWMzs5A8NFhp3AkPHPbDA== dependencies: postcss "^5.0.4" postcss-reduce-transforms@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" + integrity sha512-lGgRqnSuAR5i5uUg1TA33r9UngfTadWxOyL2qx1KuPoCQzfmtaHjp9PuwX7yVyRxG3BWBzeFUaS5uV9eVgnEgQ== dependencies: has "^1.0.1" postcss "^5.0.8" @@ -6882,12 +8238,14 @@ postcss-reduce-transforms@^1.0.3: postcss-replace-overflow-wrap@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-1.0.0.tgz#f0a03b31eab9636a6936bfd210e2aef1b434a643" + integrity sha512-+BvOHP3pKThKadaoNfYXmnE3Eg6UzCUFNjcbwOdE2lhBgOOevAJjq4/HZ66W0T9Uju3pYqJh9E0PmPb4M2Ocqw== dependencies: postcss "^5.0.16" postcss-reporter@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-1.4.1.tgz#c136f0a5b161915f379dd3765c61075f7e7b9af2" + integrity sha512-h9yLwoenfn2GZFINc42nCJInko4rZom3Ud0aEQhOQLa3PlgOUbfQH7/yEwVQLUqX84BwX3ekcwUDic/mpNTx9w== dependencies: chalk "^1.0.0" lodash "^4.1.0" @@ -6897,6 +8255,7 @@ postcss-reporter@^1.4.1: postcss-selector-matches@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/postcss-selector-matches/-/postcss-selector-matches-2.0.5.tgz#fa0f43be57b68e77aa4cd11807023492a131027f" + integrity sha512-6YLOtKjm4oP/ebSA3NCPCEviNAABqQZZfBmQJgj8B+FHntJbeT6+MrxNAm/sbsMk2B7gvcPaxyPR7ycooFIGQA== dependencies: balanced-match "^0.4.2" postcss "^5.0.0" @@ -6904,6 +8263,7 @@ postcss-selector-matches@^2.0.0: postcss-selector-not@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-2.0.0.tgz#c73ad21a3f75234bee7fee269e154fd6a869798d" + integrity sha512-lIhdTJD/4GfyxUgurf3GN6WznAsj76pIb0B8ovw7buK3X/Mqo7h+eEb7sniykbXs1fwJ9S/Ht0VqLOsMQTMing== dependencies: balanced-match "^0.2.0" postcss "^5.0.0" @@ -6911,6 +8271,7 @@ postcss-selector-not@^2.0.0: postcss-selector-parser@^1.1.4: version "1.3.3" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-1.3.3.tgz#d2ee19df7a64f8ef21c1a71c86f7d4835c88c281" + integrity sha512-YVWTPQprpsXhiQyZe3PW1U5stw+/OI7mMG7REN5sx9z6eaIpuzTUm5vy9RI4NTLR7hC9SqNYmxhyxTkorC2KFg== dependencies: flatten "^1.0.2" indexes-of "^1.0.1" @@ -6919,6 +8280,7 @@ postcss-selector-parser@^1.1.4: postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.0, postcss-selector-parser@^2.2.2: version "2.2.3" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" + integrity sha512-3pqyakeGhrO0BQ5+/tGTfvi5IAUAhHRayGK8WFSu06aEv2BmHoXw/Mhb+w7VY5HERIuC+QoUI7wgrCcq2hqCVA== dependencies: flatten "^1.0.2" indexes-of "^1.0.1" @@ -6927,6 +8289,7 @@ postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.0, postcss-selector postcss-svgo@^2.1.1: version "2.1.6" resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" + integrity sha512-y5AdQdgBoF4rbpdbeWAJuxE953g/ylRfVNp6mvAi61VCN/Y25Tu9p5mh3CyI42WbTRIiwR9a1GdFtmDnNPeskQ== dependencies: is-svg "^2.0.0" postcss "^5.0.14" @@ -6936,18 +8299,21 @@ postcss-svgo@^2.1.1: postcss-unique-selectors@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" + integrity sha512-WZX8r1M0+IyljoJOJleg3kYm10hxNYF9scqAT7v/xeSX1IdehutOM85SNO0gP9K+bgs86XERr7Ud5u3ch4+D8g== dependencies: alphanum-sort "^1.0.1" postcss "^5.0.4" uniqs "^2.0.0" postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== postcss-zindex@^2.0.1: version "2.2.0" resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" + integrity sha512-uhRZ2hRgj0lorxm9cr62B01YzpUe63h0RXMXQ4gWW3oa2rpJh+FJAiEAytaFCPU/VgaBS+uW2SJ1XKyDNz1h4w== dependencies: has "^1.0.1" postcss "^5.0.4" @@ -6956,27 +8322,39 @@ postcss-zindex@^2.0.1: postcss@^5.0.0, postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.19, postcss@^5.0.2, postcss@^5.0.21, postcss@^5.0.3, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.1.1, postcss@^5.2.0, postcss@^5.2.12, postcss@^5.2.16: version "5.2.18" resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" + integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg== dependencies: chalk "^1.1.3" js-base64 "^2.1.9" source-map "^0.5.6" supports-color "^3.2.3" -postcss@^6.0.1, postcss@^6.0.14: +postcss@^6.0.1: version "6.0.23" resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" + integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== dependencies: chalk "^2.4.1" source-map "^0.6.1" supports-color "^5.4.0" +postcss@^7.0.27: + version "7.0.39" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" + integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== + dependencies: + picocolors "^0.2.1" + source-map "^0.6.1" + prepend-http@^1.0.0, prepend-http@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg== preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + integrity sha512-s/46sYeylUfHNjI+sA/78FAHlmIuKqI9wNnzEOGehAlUUYeObv5C2mOinXBjyUyWmJ2SfcS2/ydApH4hTF4WXQ== prettier@1.19.1: version "1.19.1" @@ -6986,64 +8364,70 @@ prettier@1.19.1: pretty-bytes@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" + integrity sha512-yJAF+AjbHKlxQ8eezMd/34Mnj/YTQ3i6kLzvVsH4l/BfIFtp444n0wVbnsn66JimZ9uBofv815aRp1zCppxlWw== pretty-error@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" + version "2.1.2" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" + integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== dependencies: - renderkid "^2.0.1" - utila "~0.4" + lodash "^4.17.20" + renderkid "^2.0.4" prismjs@^1.8.4: - version "1.15.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.15.0.tgz#8801d332e472091ba8def94976c8877ad60398d9" - optionalDependencies: - clipboard "^2.0.0" + version "1.29.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12" + integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== -prismjs@~1.14.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.14.0.tgz#bbccfdb8be5d850d26453933cb50122ca0362ae0" +prismjs@~1.17.0: + version "1.17.1" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.17.1.tgz#e669fcbd4cdd873c35102881c33b14d0d68519be" + integrity sha512-PrEDJAFdUGbOP6xK/UsfkC5ghJsPJviKgnQOoxaDbBjwc8op68Quupwt1DeAFoG8GImPhiKXAvvsH7wDSLsu1Q== optionalDependencies: clipboard "^2.0.0" private@^0.1.6, private@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== process-nextick-args@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== process@^0.11.0, process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - -process@~0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== promise-each@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/promise-each/-/promise-each-2.2.0.tgz#3353174eff2694481037e04e01f77aa0fb6d1b60" + integrity sha512-67roqt1k3QDA41DZ8xi0V+rF3GoaMiX7QilbXu0vXimut+9RcKBNZ/t60xCRgcsihmNUsEjh48xLfNqOrKblUg== dependencies: any-promise "^0.1.0" promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== dependencies: asap "~2.0.3" -prop-types@15.x, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.5.9, prop-types@^15.6.0, prop-types@^15.6.1: - version "15.6.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" +prop-types@15.x, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.5.9, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== dependencies: - loose-envify "^1.3.1" + loose-envify "^1.4.0" object-assign "^4.1.1" + react-is "^16.13.1" proper-lockfile@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-1.2.0.tgz#ceff5dd89d3e5f10fb75e1e8e76bc75801a59c34" + integrity sha512-YNjxtCoY3A+lohlLXWCYrHDhUdfU3MMnuC+ADhloDvJo586LKW23dPrjxGvRGuus05Amcf0cQy6vrjjtbJhWpw== dependencies: err-code "^1.0.0" extend "^3.0.0" @@ -7053,35 +8437,62 @@ proper-lockfile@^1.1.2: property-information@^3.0.0, property-information@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/property-information/-/property-information-3.2.0.tgz#fd1483c8fbac61808f5fe359e7693a1f48a58331" + integrity sha512-BKU45RMZAA+3npkQ/VxEH7EeZImQcfV6rfKH0O4HkkDz3uqqz+689dbkjiWia00vK390MY6EARPS6TzNS4tXPg== -proxy-addr@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341" +property-information@^5.0.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69" + integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== dependencies: - forwarded "~0.1.2" - ipaddr.js "1.6.0" + xtend "^4.0.0" + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== + +psl@^1.1.28: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== public-encrypt@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.2.tgz#46eb9107206bf73489f8b85b69d91334c6610994" + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== dependencies: bn.js "^4.1.0" browserify-rsa "^4.0.0" create-hash "^1.1.0" parse-asn1 "^5.0.0" randombytes "^2.0.1" + safe-buffer "^5.1.2" pump@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" + integrity sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" once "^1.3.1" @@ -7089,34 +8500,44 @@ pump@^1.0.0: punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== -punycode@2.x.x: +punycode@2.x.x, punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -punycode@^1.2.4, punycode@^1.4.1: +punycode@^1.2.4, punycode@^1.3.2, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== -qs@6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" +qs@6.10.3: + version "6.10.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" + integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== + dependencies: + side-channel "^1.0.4" qs@~6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + version "6.4.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.1.tgz#2bad97710a5b661c366b378b1e3a44a592ff45e6" + integrity sha512-LQy1Q1fcva/UsnP/6Iaa4lVeM49WiOitu2T4hZCyA/elLKu37L99qcBJk4VCCk+rdLvnMzfKyiN3SZTqdAZGSQ== -qs@~6.5.1: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" +qs@~6.5.2: + version "6.5.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== query-string@^4.1.0: version "4.3.4" resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q== dependencies: object-assign "^4.1.0" strict-uri-encode "^1.0.0" @@ -7124,145 +8545,194 @@ query-string@^4.1.0: querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA== -querystring@0.2.0, querystring@^0.2.0: +querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== -querystringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.0.0.tgz#fa3ed6e68eb15159457c89b37bc6472833195755" +querystring@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd" + integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg== -raf@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575" +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +raf@^3.4.0, raf@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" + integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== dependencies: performance-now "^2.1.0" randomatic@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.0.0.tgz#d35490030eb4f7578de292ce6dfb04a91a128923" + version "3.1.1" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" + integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== dependencies: is-number "^4.0.0" kind-of "^6.0.0" math-random "^1.0.1" randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" randomfill@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== dependencies: randombytes "^2.0.5" safe-buffer "^5.1.0" -range-parser@^1.0.3, range-parser@~1.2.0: +range-parser@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A== -raw-body@2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" - dependencies: - bytes "3.0.0" - http-errors "1.6.2" - iconv-lite "0.4.19" - unpipe "1.0.0" +range-parser@^1.0.3, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" +raw-body@2.5.1, raw-body@^2.3.2: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== dependencies: - bytes "3.0.0" - http-errors "1.6.3" - iconv-lite "0.4.23" + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" unpipe "1.0.0" raw-loader@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" + integrity sha512-sf7oGoLuaYAScB4VGr0tzetsYlS8EJH6qnTCfQ/WVEa89hALQ4RQfCKt5xCyPQKPDUbVUAIP1QsxAwfAjlDp7Q== -rc-align@^2.4.0: - version "2.4.3" - resolved "https://registry.yarnpkg.com/rc-align/-/rc-align-2.4.3.tgz#b9b3c2a6d68adae71a8e1d041cd5e3b2a655f99a" +rc-align@^2.4.0, rc-align@^2.4.1: + version "2.4.5" + resolved "https://registry.yarnpkg.com/rc-align/-/rc-align-2.4.5.tgz#c941a586f59d1017f23a428f0b468663fb7102ab" + integrity sha512-nv9wYUYdfyfK+qskThf4BQUSIadeI/dCsfaMZfNEoxm9HwOIioQ+LyqmMK6jWHAZQgOzMLaqawhuBXlF63vgjw== dependencies: babel-runtime "^6.26.0" dom-align "^1.7.0" prop-types "^15.5.8" rc-util "^4.0.4" -rc-animate@2.x, rc-animate@^2.0.2, rc-animate@^2.3.0, rc-animate@^2.4.1: - version "2.4.4" - resolved "https://registry.yarnpkg.com/rc-animate/-/rc-animate-2.4.4.tgz#a05a784c747beef140d99ff52b6117711bef4b1e" +rc-animate@2.x, rc-animate@^2.10.1, rc-animate@^2.10.2, rc-animate@^2.3.0, rc-animate@^2.6.0, rc-animate@^2.8.2: + version "2.11.1" + resolved "https://registry.yarnpkg.com/rc-animate/-/rc-animate-2.11.1.tgz#2666eeb6f1f2a495a13b2af09e236712278fdb2c" + integrity sha512-1NyuCGFJG/0Y+9RKh5y/i/AalUCA51opyyS/jO2seELpgymZm2u9QV3xwODwEuzkmeQ1BDPxMLmYLcTJedPlkQ== dependencies: babel-runtime "6.x" + classnames "^2.2.6" css-animation "^1.3.2" prop-types "15.x" + raf "^3.4.0" + rc-util "^4.15.3" + react-lifecycles-compat "^3.0.4" -rc-calendar@~9.6.0: - version "9.6.2" - resolved "https://registry.yarnpkg.com/rc-calendar/-/rc-calendar-9.6.2.tgz#c7309db41225f4b8c81d5a1dcbe46d8ce07b6aee" +rc-animate@^3.0.0-rc.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/rc-animate/-/rc-animate-3.1.1.tgz#defdd863f56816c222534e4dc68feddecd081386" + integrity sha512-8wg2Zg3EETy0k/9kYuis30NJNQg1D6/WSQwnCiz6SvyxQXNet/rVraRz3bPngwY6rcU2nlRvoShiYOorXyF7Sg== + dependencies: + "@ant-design/css-animation" "^1.7.2" + classnames "^2.2.6" + raf "^3.4.0" + rc-util "^4.15.3" + +rc-calendar@~9.15.7: + version "9.15.11" + resolved "https://registry.yarnpkg.com/rc-calendar/-/rc-calendar-9.15.11.tgz#ce1e5ea8e4d77435be66a8c77db12f1f0f9a345f" + integrity sha512-qv0VXfAAnysMWJigxaP6se4bJHvr17D9qsLbi8BOpdgEocsS0RkgY1IUiFaOVYKJDy/EyLC447O02sV/y5YYBg== dependencies: babel-runtime "6.x" classnames "2.x" - create-react-class "^15.5.2" moment "2.x" prop-types "^15.5.8" rc-trigger "^2.2.0" rc-util "^4.1.1" + react-lifecycles-compat "^3.0.4" -rc-cascader@~0.13.0: - version "0.13.1" - resolved "https://registry.yarnpkg.com/rc-cascader/-/rc-cascader-0.13.1.tgz#157df251c5da734bf134b7a595a9b06446a6db80" +rc-cascader@~0.17.4: + version "0.17.5" + resolved "https://registry.yarnpkg.com/rc-cascader/-/rc-cascader-0.17.5.tgz#4fde91d23b7608c420263c38eee9c0687f80f7dc" + integrity sha512-WYMVcxU0+Lj+xLr4YYH0+yXODumvNXDcVEs5i7L1mtpWwYkubPV/zbQpn+jGKFCIW/hOhjkU4J1db8/P/UKE7A== dependencies: - array-tree-filter "^1.0.0" + array-tree-filter "^2.1.0" prop-types "^15.5.8" rc-trigger "^2.2.0" rc-util "^4.0.4" + react-lifecycles-compat "^3.0.4" shallow-equal "^1.0.0" + warning "^4.0.1" -rc-checkbox@~2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/rc-checkbox/-/rc-checkbox-2.1.5.tgz#411858448c0ee2a797ef8544dac63bcaeef722ef" +rc-checkbox@~2.1.6: + version "2.1.8" + resolved "https://registry.yarnpkg.com/rc-checkbox/-/rc-checkbox-2.1.8.tgz#eedd9ef9c2f3af5b3b8e5cde5254aa89ad1a880a" + integrity sha512-6qOgh0/by0nVNASx6LZnhRTy17Etcgav+IrI7kL9V9kcDZ/g7K14JFlqrtJ3NjDq/Kyn+BPI1st1XvbkhfaJeg== dependencies: babel-runtime "^6.23.0" classnames "2.x" prop-types "15.x" - rc-util "^4.0.4" + react-lifecycles-compat "^3.0.4" -rc-collapse@~1.9.0: - version "1.9.2" - resolved "https://registry.yarnpkg.com/rc-collapse/-/rc-collapse-1.9.2.tgz#baa88a724ebbf444ad1f7776fe912f2f894e4099" +rc-collapse@~1.11.3: + version "1.11.8" + resolved "https://registry.yarnpkg.com/rc-collapse/-/rc-collapse-1.11.8.tgz#66a40089d469519e9424009ab1c927e214041d80" + integrity sha512-8EhfPyScTYljkbRuIoHniSwZagD5UPpZ3CToYgoNYWC85L2qCbPYF7+OaC713FOrIkp6NbfNqXsITNxmDAmxog== dependencies: classnames "2.x" css-animation "1.x" prop-types "^15.5.6" rc-animate "2.x" + react-is "^16.7.0" + react-lifecycles-compat "^3.0.4" + shallowequal "^1.1.0" -rc-dialog@~7.1.0: - version "7.1.7" - resolved "https://registry.yarnpkg.com/rc-dialog/-/rc-dialog-7.1.7.tgz#75d65203be91af8e02f582166a7cf7d713b69e59" +rc-dialog@~7.6.0: + version "7.6.1" + resolved "https://registry.yarnpkg.com/rc-dialog/-/rc-dialog-7.6.1.tgz#11545ccc0b945934fa76079726e0d853e52d705f" + integrity sha512-KUKf+2eZ4YL+lnXMG3hR4ZtIhC9glfH27NtTVz3gcoDIPAf3uUvaXVRNoDCiSi+OGKLyIb/b6EoidFh6nQC5Wg== dependencies: babel-runtime "6.x" rc-animate "2.x" - rc-util "^4.4.0" + rc-util "^4.16.1" -rc-dropdown@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/rc-dropdown/-/rc-dropdown-2.1.2.tgz#f99844d2ec17707232f244dda75c8d8a623d0272" +rc-drawer@~3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/rc-drawer/-/rc-drawer-3.1.3.tgz#cbcb04d4c07f0b66f2ece11d847f4a1bd80ea0b7" + integrity sha512-2z+RdxmzXyZde/1OhVMfDR1e/GBswFeWSZ7FS3Fdd0qhgVdpV1wSzILzzxRaT481ItB5hOV+e8pZT07vdJE8kg== + dependencies: + classnames "^2.2.6" + rc-util "^4.16.1" + react-lifecycles-compat "^3.0.4" + +rc-dropdown@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/rc-dropdown/-/rc-dropdown-2.4.1.tgz#aaef6eb3a5152cdd9982895c2a78d9b5f046cdec" + integrity sha512-p0XYn0wrOpAZ2fUGE6YJ6U8JBNc5ASijznZ6dkojdaEfQJAeZtV9KMEewhxkVlxGSbbdXe10ptjBlTEW9vEwEg== dependencies: babel-runtime "^6.26.0" + classnames "^2.2.6" prop-types "^15.5.8" - rc-trigger "^2.2.2" + rc-trigger "^2.5.1" react-lifecycles-compat "^3.0.2" rc-editor-core@~0.8.3: - version "0.8.6" - resolved "https://registry.yarnpkg.com/rc-editor-core/-/rc-editor-core-0.8.6.tgz#e48b288286effb3272cbc9c6f801450dcdb0b247" + version "0.8.10" + resolved "https://registry.yarnpkg.com/rc-editor-core/-/rc-editor-core-0.8.10.tgz#6f215bc5df9c33ffa9f6c5b30ca73a7dabe8ab7c" + integrity sha512-T3aHpeMCIYA1sdAI7ynHHjXy5fqp83uPlD68ovZ0oClTSc3tbHmyCxXlA+Ti4YgmcpCYv7avF6a+TIbAka53kw== dependencies: babel-runtime "^6.26.0" classnames "^2.2.5" @@ -7272,78 +8742,86 @@ rc-editor-core@~0.8.3: prop-types "^15.5.8" setimmediate "^1.0.5" -rc-editor-mention@^1.0.2: - version "1.1.7" - resolved "https://registry.yarnpkg.com/rc-editor-mention/-/rc-editor-mention-1.1.7.tgz#c72d181859beda96669f4b43e19a941e68fa985b" +rc-editor-mention@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/rc-editor-mention/-/rc-editor-mention-1.1.13.tgz#9f1cab1065f86b01523840321790c2ab12ac5e8b" + integrity sha512-3AOmGir91Fi2ogfRRaXLtqlNuIwQpvla7oUnGHS1+3eo7b+fUp5IlKcagqtwUBB5oDNofoySXkLBxzWvSYNp/Q== dependencies: babel-runtime "^6.23.0" classnames "^2.2.5" dom-scroll-into-view "^1.2.0" draft-js "~0.10.0" + immutable "~3.7.4" prop-types "^15.5.8" rc-animate "^2.3.0" rc-editor-core "~0.8.3" -rc-form@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/rc-form/-/rc-form-2.2.0.tgz#ea596c6c92c7df6092f95cbbf8f15014ea07e9f5" +rc-form@^2.4.10: + version "2.4.12" + resolved "https://registry.yarnpkg.com/rc-form/-/rc-form-2.4.12.tgz#4ee8711e90a2584baa7ac276de96bee0d9b0f5f1" + integrity sha512-sHfyWRrnjCHkeCYfYAGop2GQBUC6CKMPcJF9h/gL/vTmZB/RN6fNOGKjXrXjFbwFwKXUWBoPtIDDDmXQW9xNdw== dependencies: - async-validator "1.x" + async-validator "~1.11.3" babel-runtime "6.x" create-react-class "^15.5.3" dom-scroll-into-view "1.x" - hoist-non-react-statics "^2.3.1" + hoist-non-react-statics "^3.3.0" lodash "^4.17.4" - warning "^3.0.0" + rc-util "^4.15.3" + react-is "^16.13.1" + warning "^4.0.3" rc-hammerjs@~0.6.0: - version "0.6.9" - resolved "https://registry.yarnpkg.com/rc-hammerjs/-/rc-hammerjs-0.6.9.tgz#9a4ddbda1b2ec8f9b9596091a6a989842a243907" + version "0.6.10" + resolved "https://registry.yarnpkg.com/rc-hammerjs/-/rc-hammerjs-0.6.10.tgz#1831a3bd8f2199700bfcc5ad6b20a35630aeb5e0" + integrity sha512-Vgh9qIudyN5CHRop4M+v+xUniQBFWXKrsJxQRVtJOi2xgRrCeI52/bkpaL5HWwUhqTK9Ayq0n7lYTItT6ld5rg== dependencies: babel-runtime "6.x" hammerjs "^2.0.8" prop-types "^15.5.9" -rc-input-number@~4.0.0: - version "4.0.12" - resolved "https://registry.yarnpkg.com/rc-input-number/-/rc-input-number-4.0.12.tgz#99b62f0b2395e1e76c9f72142b4ad7ea46f97d06" +rc-input-number@~4.5.0: + version "4.5.9" + resolved "https://registry.yarnpkg.com/rc-input-number/-/rc-input-number-4.5.9.tgz#1cbf735e24fe23c4eb9a4301031720b95f2a3e3d" + integrity sha512-wAT4EBpLDW4+27c935k4F1JLk+gnhyGBkpzBmtkNvIHLG8yTndZSJ2bFfSYfkA6C82IxmAztXs3ffCeUd/rkbg== dependencies: babel-runtime "6.x" classnames "^2.2.0" - is-negative-zero "^2.0.0" prop-types "^15.5.7" rc-util "^4.5.1" rmc-feedback "^2.0.0" -rc-menu@^7.0.2: - version "7.1.0" - resolved "https://registry.yarnpkg.com/rc-menu/-/rc-menu-7.1.0.tgz#37edf49a68c1ca43cbbe859bd7dddcf177568892" +rc-mentions@~0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/rc-mentions/-/rc-mentions-0.4.2.tgz#c18ab701efb9e4b75b3851a0c0d2dd698640e246" + integrity sha512-DTZurQzacLXOfVuiHydGzqkq7cFMHXF18l2jZ9PhWUn2cqvOSY3W4osN0Pq29AOMOBpcxdZCzgc7Lb0r/bgkDw== + dependencies: + "@ant-design/create-react-context" "^0.2.4" + classnames "^2.2.6" + rc-menu "^7.4.22" + rc-trigger "^2.6.2" + rc-util "^4.6.0" + react-lifecycles-compat "^3.0.4" + +rc-menu@^7.3.0, rc-menu@^7.4.22, rc-menu@~7.5.1: + version "7.5.5" + resolved "https://registry.yarnpkg.com/rc-menu/-/rc-menu-7.5.5.tgz#78cdc817d86fc353a1430b864d3d96c7489600ca" + integrity sha512-4YJXJgrpUGEA1rMftXN7bDhrV5rPB8oBJoHqT+GVXtIWCanfQxEnM3fmhHQhatL59JoAFMZhJaNzhJIk4FUWCQ== dependencies: - babel-runtime "6.x" classnames "2.x" dom-scroll-into-view "1.x" - mini-store "^1.1.0" - prop-types "^15.5.6" - rc-animate "2.x" + mini-store "^2.0.0" + mutationobserver-shim "^0.3.2" + rc-animate "^2.10.1" rc-trigger "^2.3.0" - rc-util "^4.1.0" + rc-util "^4.13.0" + resize-observer-polyfill "^1.5.0" + shallowequal "^1.1.0" -rc-menu@~7.0.2: - version "7.0.5" - resolved "https://registry.yarnpkg.com/rc-menu/-/rc-menu-7.0.5.tgz#986b65df5ad227aadf399ea374b98d2313802316" - dependencies: - babel-runtime "6.x" - classnames "2.x" - dom-scroll-into-view "1.x" - mini-store "^1.1.0" - prop-types "^15.5.6" - rc-animate "2.x" - rc-trigger "^2.3.0" - rc-util "^4.1.0" - -rc-notification@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/rc-notification/-/rc-notification-3.1.1.tgz#14eac6730db1d59adaf569dad9fe82a2f33cd23a" +rc-notification@~3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/rc-notification/-/rc-notification-3.3.1.tgz#0baa3e70f8d40ab015ce8fa78c260c490fc7beb4" + integrity sha512-U5+f4BmBVfMSf3OHSLyRagsJ74yKwlrQAtbbL5ijoA0F2C60BufwnOcHG18tVprd7iaIjzZt1TKMmQSYSvgrig== dependencies: babel-runtime "6.x" classnames "2.x" @@ -7351,156 +8829,180 @@ rc-notification@~3.1.1: rc-animate "2.x" rc-util "^4.0.4" -rc-pagination@~1.16.1: - version "1.16.4" - resolved "https://registry.yarnpkg.com/rc-pagination/-/rc-pagination-1.16.4.tgz#239442d5cabfc531d1a2e53f87d92140085e9b0d" +rc-pagination@~1.20.11: + version "1.20.15" + resolved "https://registry.yarnpkg.com/rc-pagination/-/rc-pagination-1.20.15.tgz#ccb4cd0e9bd4e47f72f29ea432c0350bf7b3d807" + integrity sha512-/Xr4/3GOa1DtL8iCYl7qRUroEMrRDhZiiuHwcVFfSiwa9LYloMlUWcOJsnr8LN6A7rLPdm3/CHStUNeYd+2pKw== dependencies: babel-runtime "6.x" + classnames "^2.2.6" prop-types "^15.5.7" + react-lifecycles-compat "^3.0.4" -rc-progress@~2.2.2: - version "2.2.5" - resolved "https://registry.yarnpkg.com/rc-progress/-/rc-progress-2.2.5.tgz#e61d0544bf9d4208e5ba32fc50962159e7f952a3" +rc-progress@~2.5.0: + version "2.5.3" + resolved "https://registry.yarnpkg.com/rc-progress/-/rc-progress-2.5.3.tgz#00f01b95bdbe1856d3a5f82242051902e8b7a8e7" + integrity sha512-K2fa4CnqGehLZoMrdmBeZ86ONSTVcdk5FlqetbwJ3R/+42XfqhwQVOjWp2MH4P7XSQOMAGcNOy1SFfCP3415sg== dependencies: babel-runtime "6.x" prop-types "^15.5.8" -rc-rate@~2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/rc-rate/-/rc-rate-2.4.0.tgz#97ebcc5876e2e498b9f5f65ced256d8ab54e5f06" +rc-rate@~2.5.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/rc-rate/-/rc-rate-2.5.1.tgz#55fc5fd23ea9dcc72250b9a889803479f4842961" + integrity sha512-3iJkNJT8xlHklPCdeZtUZmJmRVUbr6AHRlfSsztfYTXVlHrv2TcPn3XkHsH+12j812WVB7gvilS2j3+ffjUHXg== dependencies: - babel-runtime "^6.26.0" classnames "^2.2.5" prop-types "^15.5.8" rc-util "^4.3.0" + react-lifecycles-compat "^3.0.4" -rc-select@~8.0.7: - version "8.0.14" - resolved "https://registry.yarnpkg.com/rc-select/-/rc-select-8.0.14.tgz#ff1763458a15519bea010ea15fecf6f59095b346" +rc-resize-observer@^0.1.0: + version "0.1.3" + resolved "https://registry.yarnpkg.com/rc-resize-observer/-/rc-resize-observer-0.1.3.tgz#097191f9c3ab186ed907b553ba6ef565df11c249" + integrity sha512-uzOQEwx83xdQSFOkOAM7x7GHIQKYnrDV4dWxtCxyG1BS1pkfJ4EvDeMfsvAJHSYkQXVBu+sgRHGbRtLG3qiuUg== + dependencies: + classnames "^2.2.1" + rc-util "^4.13.0" + resize-observer-polyfill "^1.5.1" + +rc-select@~9.2.0: + version "9.2.3" + resolved "https://registry.yarnpkg.com/rc-select/-/rc-select-9.2.3.tgz#64340e2d6ef64e8bc3cfc6f468ffd28625589ac2" + integrity sha512-WhswxOMWiNnkXRbxyrj0kiIvyCfo/BaRPaYbsDetSIAU2yEDwKHF798blCP5u86KLOBKBvtxWLFCkSsQw1so5w== dependencies: babel-runtime "^6.23.0" classnames "2.x" component-classes "1.x" dom-scroll-into-view "1.x" prop-types "^15.5.8" + raf "^3.4.0" rc-animate "2.x" - rc-menu "^7.0.2" - rc-trigger "^2.2.0" + rc-menu "^7.3.0" + rc-trigger "^2.5.4" rc-util "^4.0.4" react-lifecycles-compat "^3.0.2" - warning "^3.0.0" + warning "^4.0.2" -rc-slider@~8.6.0: - version "8.6.1" - resolved "https://registry.yarnpkg.com/rc-slider/-/rc-slider-8.6.1.tgz#ee5e0380dbdf4b5de6955a265b0d4ff6196405d1" +rc-slider@~8.7.1: + version "8.7.1" + resolved "https://registry.yarnpkg.com/rc-slider/-/rc-slider-8.7.1.tgz#9ed07362dc93489a38e654b21b8122ad70fd3c42" + integrity sha512-WMT5mRFUEcrLWwTxsyS8jYmlaMsTVCZIGENLikHsNv+tE8ThU2lCoPfi/xFNUfJFNFSBFP3MwPez9ZsJmNp13g== dependencies: babel-runtime "6.x" classnames "^2.2.5" prop-types "^15.5.4" rc-tooltip "^3.7.0" rc-util "^4.0.4" - shallowequal "^1.0.1" - warning "^3.0.0" + react-lifecycles-compat "^3.0.4" + shallowequal "^1.1.0" + warning "^4.0.3" -rc-steps@~3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/rc-steps/-/rc-steps-3.1.1.tgz#79583ad808309d82b8e011676321d153fd7ca403" +rc-steps@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/rc-steps/-/rc-steps-3.5.0.tgz#36b2a7f1f49907b0d90363884b18623caf9fb600" + integrity sha512-2Vkkrpa7PZbg7qPsqTNzVDov4u78cmxofjjnIHiGB9+9rqKS8oTLPzbW2uiWDr3Lk+yGwh8rbpGO1E6VAgBCOg== dependencies: babel-runtime "^6.23.0" classnames "^2.2.3" lodash "^4.17.5" prop-types "^15.5.7" -rc-switch@~1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/rc-switch/-/rc-switch-1.6.0.tgz#c2d7369bdb87c1fd45e84989a27c1fb2f201d2fd" +rc-switch@~1.9.0: + version "1.9.2" + resolved "https://registry.yarnpkg.com/rc-switch/-/rc-switch-1.9.2.tgz#7921c766411fe9a6426510c3429022d6ba4dfde2" + integrity sha512-qaK7mY4FLDKy99Hq3A1tf8CcqfzKtHp9LPX8WTnZ0MzdHCTneSARb1XD7Eqeu8BactasYGsi2bF9p18Q+/5JEw== dependencies: - babel-runtime "^6.23.0" classnames "^2.2.1" prop-types "^15.5.6" + react-lifecycles-compat "^3.0.4" -rc-table@~6.1.0: - version "6.1.15" - resolved "https://registry.yarnpkg.com/rc-table/-/rc-table-6.1.15.tgz#c2da37118626604de70742ae87bffafe17351189" +rc-table@~6.10.5: + version "6.10.15" + resolved "https://registry.yarnpkg.com/rc-table/-/rc-table-6.10.15.tgz#181f4c70c4fd74f657ee8f23196e7eb08a0365ca" + integrity sha512-LAr0M/gqt+irOjvPNBLApmQ0CUHNOfKsEBhu1uIuB3OlN1ynA9z+sdoTQyNd9+8NSl0MYnQOOfhtLChAY7nU0A== dependencies: - babel-runtime "6.x" + classnames "^2.2.5" component-classes "^1.2.6" lodash "^4.17.5" - mini-store "^1.0.2" + mini-store "^2.0.0" prop-types "^15.5.8" - rc-util "^4.0.4" + rc-util "^4.13.0" react-lifecycles-compat "^3.0.2" shallowequal "^1.0.2" - warning "^3.0.0" -rc-tabs@~9.2.0: - version "9.2.5" - resolved "https://registry.yarnpkg.com/rc-tabs/-/rc-tabs-9.2.5.tgz#fdd8e0633247f50c533030b73e3992270849f1f6" +rc-tabs@~9.7.0: + version "9.7.0" + resolved "https://registry.yarnpkg.com/rc-tabs/-/rc-tabs-9.7.0.tgz#ae09695bef5963d6e64e7bc10521c76dfdd8448b" + integrity sha512-kvmgp8/MfLzFZ06hWHignqomFQ5nF7BqKr5O1FfhE4VKsGrep52YSF/1MvS5oe0NPcI9XGNS2p751C5v6cYDpQ== dependencies: + "@ant-design/create-react-context" "^0.2.4" babel-runtime "6.x" classnames "2.x" - create-react-class "15.x" lodash "^4.17.5" prop-types "15.x" + raf "^3.4.1" rc-hammerjs "~0.6.0" rc-util "^4.0.4" - warning "^3.0.0" + react-lifecycles-compat "^3.0.4" + resize-observer-polyfill "^1.5.1" + warning "^4.0.3" -rc-time-picker@~3.3.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/rc-time-picker/-/rc-time-picker-3.3.1.tgz#94f8bbd51e6b93de1f01e78064aef1e6d765b367" +rc-time-picker@~3.7.1: + version "3.7.3" + resolved "https://registry.yarnpkg.com/rc-time-picker/-/rc-time-picker-3.7.3.tgz#65a8de904093250ae9c82b02a4905e0f995e23e2" + integrity sha512-Lv1Mvzp9fRXhXEnRLO4nW6GLNxUkfAZ3RsiIBsWjGjXXvMNjdr4BX/ayElHAFK0DoJqOhm7c5tjmIYpEOwcUXg== dependencies: - babel-runtime "6.x" classnames "2.x" moment "2.x" prop-types "^15.5.8" + raf "^3.4.1" rc-trigger "^2.2.0" + react-lifecycles-compat "^3.0.4" -rc-tooltip@^3.7.0, rc-tooltip@~3.7.0: - version "3.7.2" - resolved "https://registry.yarnpkg.com/rc-tooltip/-/rc-tooltip-3.7.2.tgz#3698656d4bacd51b72d9e327bed15d1d5a9f1b27" +rc-tooltip@^3.7.0, rc-tooltip@~3.7.3: + version "3.7.3" + resolved "https://registry.yarnpkg.com/rc-tooltip/-/rc-tooltip-3.7.3.tgz#280aec6afcaa44e8dff0480fbaff9e87fc00aecc" + integrity sha512-dE2ibukxxkrde7wH9W8ozHKUO4aQnPZ6qBHtrTH9LoO836PjDdiaWO73fgPB05VfJs9FbZdmGPVEbXCeOP99Ww== dependencies: babel-runtime "6.x" prop-types "^15.5.8" rc-trigger "^2.2.2" -rc-tree-select@~1.12.0: - version "1.12.13" - resolved "https://registry.yarnpkg.com/rc-tree-select/-/rc-tree-select-1.12.13.tgz#3bf5684a3e38fbfbf8cc149d4f4a5d62f5ef0d47" +rc-tree-select@~2.9.1: + version "2.9.4" + resolved "https://registry.yarnpkg.com/rc-tree-select/-/rc-tree-select-2.9.4.tgz#6aa794e1f0e65c66c406aa0a2a0e74fd0a557b09" + integrity sha512-0HQkXAN4XbfBW20CZYh3G+V+VMrjX42XRtDCpyv6PDUm5vikC0Ob682ZBCVS97Ww2a5Hf6Ajmu0ahWEdIEpwhg== dependencies: - babel-runtime "^6.23.0" classnames "^2.2.1" + dom-scroll-into-view "^1.2.1" prop-types "^15.5.8" - rc-animate "^2.0.2" - rc-tree "~1.7.1" - rc-trigger "^2.2.2" + raf "^3.4.0" + rc-animate "^2.8.2" + rc-tree "~2.1.0" + rc-trigger "^3.0.0" rc-util "^4.5.0" + react-lifecycles-compat "^3.0.4" + shallowequal "^1.0.2" + warning "^4.0.1" -rc-tree@~1.7.1: - version "1.7.11" - resolved "https://registry.yarnpkg.com/rc-tree/-/rc-tree-1.7.11.tgz#349de6383fc7d22bf4c13b0751794111022adddf" +rc-tree@~2.1.0: + version "2.1.4" + resolved "https://registry.yarnpkg.com/rc-tree/-/rc-tree-2.1.4.tgz#ef759f3e799a21b43c1ecf9c794ea1c14e70b59b" + integrity sha512-Xey794Iavgs8YldFlXcZLOhfcIhlX5Oz/yfKufknBXf2AlZCOkc7aHqSM9uTF7fBPtTGPhPxNEfOqHfY7b7xng== dependencies: - babel-runtime "^6.23.0" + "@ant-design/create-react-context" "^0.2.4" classnames "2.x" prop-types "^15.5.8" - rc-animate "2.x" - rc-util "^4.0.4" - warning "^3.0.0" + rc-animate "^2.6.0" + rc-util "^4.5.1" + react-lifecycles-compat "^3.0.4" + warning "^4.0.3" -rc-tree@~1.8.0: - version "1.8.3" - resolved "https://registry.yarnpkg.com/rc-tree/-/rc-tree-1.8.3.tgz#2875e83bc951b5ed7577c1038490f8245d79a37f" - dependencies: - babel-runtime "^6.23.0" - classnames "2.x" - prop-types "^15.5.8" - rc-animate "2.x" - rc-util "^4.0.4" - warning "^3.0.0" - -rc-trigger@^2.2.0, rc-trigger@^2.2.2, rc-trigger@^2.3.0: - version "2.5.4" - resolved "https://registry.yarnpkg.com/rc-trigger/-/rc-trigger-2.5.4.tgz#9088a24ba5a811b254f742f004e38a9e2f8843fb" +rc-trigger@^2.2.0, rc-trigger@^2.2.2, rc-trigger@^2.3.0, rc-trigger@^2.5.1, rc-trigger@^2.5.4, rc-trigger@^2.6.2: + version "2.6.5" + resolved "https://registry.yarnpkg.com/rc-trigger/-/rc-trigger-2.6.5.tgz#140a857cf28bd0fa01b9aecb1e26a50a700e9885" + integrity sha512-m6Cts9hLeZWsTvWnuMm7oElhf+03GOjOLfTuU0QmdB9ZrW7jR2IpI5rpNM7i9MvAAlMAmTx5Zr7g3uu/aMvZAw== dependencies: babel-runtime "6.x" classnames "^2.2.6" @@ -7508,28 +9010,46 @@ rc-trigger@^2.2.0, rc-trigger@^2.2.2, rc-trigger@^2.3.0: rc-align "^2.4.0" rc-animate "2.x" rc-util "^4.4.0" + react-lifecycles-compat "^3.0.4" -rc-upload@~2.4.0: - version "2.4.4" - resolved "https://registry.yarnpkg.com/rc-upload/-/rc-upload-2.4.4.tgz#28e1e6a3e44d1b1f92e57e21927cfa2763ac2a21" +rc-trigger@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/rc-trigger/-/rc-trigger-3.0.0.tgz#f6d9b1da8a26b2b2d1d912a06876c1a486f5980f" + integrity sha512-hQxbbJpo23E2QnYczfq3Ec5J5tVl2mUDhkqxrEsQAqk16HfADQg+iKNWzEYXyERSncdxfnzYuaBgy764mNRzTA== + dependencies: + babel-runtime "6.x" + classnames "^2.2.6" + prop-types "15.x" + raf "^3.4.0" + rc-align "^2.4.1" + rc-animate "^3.0.0-rc.1" + rc-util "^4.15.7" + +rc-upload@~2.9.1: + version "2.9.4" + resolved "https://registry.yarnpkg.com/rc-upload/-/rc-upload-2.9.4.tgz#8e34a73a468d7907fe31982c38100e4593857d32" + integrity sha512-WXt0HGxXyzLrPV6iec/96Rbl/6dyrAW8pKuY6wwD7yFYwfU5bjgKjv7vC8KNMJ6wzitFrZjnoiogNL3dF9dj3Q== dependencies: babel-runtime "6.x" classnames "^2.2.5" prop-types "^15.5.7" - warning "2.x" + warning "4.x" -rc-util@^4.0.4, rc-util@^4.1.0, rc-util@^4.1.1, rc-util@^4.3.0, rc-util@^4.4.0, rc-util@^4.5.0, rc-util@^4.5.1: - version "4.5.1" - resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-4.5.1.tgz#0e435057174c024901c7600ba8903dd03da3ab39" +rc-util@^4.0.4, rc-util@^4.1.1, rc-util@^4.13.0, rc-util@^4.15.3, rc-util@^4.15.7, rc-util@^4.16.1, rc-util@^4.3.0, rc-util@^4.4.0, rc-util@^4.5.0, rc-util@^4.5.1, rc-util@^4.6.0: + version "4.21.1" + resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-4.21.1.tgz#88602d0c3185020aa1053d9a1e70eac161becb05" + integrity sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg== dependencies: - add-dom-event-listener "1.x" - babel-runtime "6.x" + add-dom-event-listener "^1.1.0" prop-types "^15.5.10" - shallowequal "^0.2.2" + react-is "^16.12.0" + react-lifecycles-compat "^3.0.4" + shallowequal "^1.1.0" -rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: +rc@^1.0.1, rc@^1.1.6: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: deep-extend "^0.6.0" ini "~1.3.0" @@ -7537,12 +9057,14 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: strip-json-comments "~2.0.1" react-deep-force-update@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-2.1.1.tgz#8ea4263cd6455a050b37445b3f08fd839d86e909" + version "2.1.3" + resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-2.1.3.tgz#740612322e617bcced38f61794a4af75dc3d98e7" + integrity sha512-lqD4eHKVuB65RyO/hGbEST53E2/GPbcIPcFYyeW/p4vNngtH4G7jnKGlU6u1OqrFo0uNfIvwuBOg98IbLHlNEA== react-dev-utils@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-4.2.1.tgz#9f2763e7bafa1a1b9c52254d2a479deec280f111" + version "4.2.3" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-4.2.3.tgz#5b42d9ea58d5e9e017a2f57a40a8af408a3a46fb" + integrity sha512-uvmkwl5uMexCmC0GUv1XGQP0YjfYePJufGg4YYiukhqk2vN1tQxwWJIBERqhOmSi80cppZg8mZnPP/kOMf1sUQ== dependencies: address "1.0.3" babel-code-frame "6.26.0" @@ -7564,8 +9086,9 @@ react-dev-utils@^4.2.1: text-table "0.2.0" react-dom@^15.6.0: - version "15.6.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.6.2.tgz#41cfadf693b757faf2708443a1d1fd5a02bef730" + version "15.7.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.7.0.tgz#39106dee996d0742fb0f43d567ef8b8153483ab2" + integrity sha512-mpjXqC2t1FuYsILOLCj0kg6pbg460byZkVA/80VtDmKU/pYmoTdHOtaMcTRIDiyXLz4sIur0cQ04nOC6iGndJg== dependencies: fbjs "^0.8.9" loose-envify "^1.1.0" @@ -7573,30 +9096,39 @@ react-dom@^15.6.0: prop-types "^15.5.10" react-dom@^16.0.0: - version "16.4.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.4.1.tgz#7f8b0223b3a5fbe205116c56deb85de32685dad6" + version "16.14.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89" + integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== dependencies: - fbjs "^0.8.16" loose-envify "^1.1.0" object-assign "^4.1.1" - prop-types "^15.6.0" + prop-types "^15.6.2" + scheduler "^0.19.1" react-error-overlay@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-3.0.0.tgz#c2bc8f4d91f1375b3dad6d75265d51cd5eeaf655" + integrity sha512-XzgvowFrwDo6TWcpJ/WTiarb9UI6lhA4PMzS7n1joK3sHfBBBOQHUc0U4u57D6DWO9vHv6lVSWx2Q/Ymfyv4hw== + +react-fast-compare@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" + integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== react-helmet@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-5.2.0.tgz#a81811df21313a6d55c5f058c4aeba5d6f3d97a7" + version "5.2.1" + resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-5.2.1.tgz#16a7192fdd09951f8e0fe22ffccbf9bb3e591ffa" + integrity sha512-CnwD822LU8NDBnjCpZ4ySh8L6HYyngViTZLfBBb3NjtrpN8m49clH8hidHouq20I51Y6TpCTISCBbqiY5GamwA== dependencies: - deep-equal "^1.0.1" object-assign "^4.1.1" prop-types "^15.5.4" + react-fast-compare "^2.0.2" react-side-effect "^1.1.0" react-hot-loader@^3.0.0-beta.6: version "3.1.3" resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-3.1.3.tgz#6f92877326958c7cb0134b512474517869126082" + integrity sha512-d7nZf78irxoGN5PY4zd6CSgZiroOhvIWzRast3qwTn4sSnBwlt08kV8WMQ9mitmxEdlCTwZt+5ClrRSjxWguMQ== dependencies: global "^4.3.0" react-deep-force-update "^2.1.1" @@ -7604,28 +9136,37 @@ react-hot-loader@^3.0.0-beta.6: redbox-react "^1.3.6" source-map "^0.6.1" -react-lazy-load@^3.0.12: - version "3.0.13" - resolved "https://registry.yarnpkg.com/react-lazy-load/-/react-lazy-load-3.0.13.tgz#3b0a92d336d43d3f0d73cbe6f35b17050b08b824" +react-is@^16.12.0, react-is@^16.13.1, react-is@^16.7.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-lazy-load@^3.0.13: + version "3.1.14" + resolved "https://registry.yarnpkg.com/react-lazy-load/-/react-lazy-load-3.1.14.tgz#536047d295f578614540a5b417b70b1155f36d9a" + integrity sha512-7tsOItf2HmEwhEWMaA/a2XlShuya7rBxqWAR0TPMO1XSf6ybxSDI2bMV8M6vtWkveX9TlSpb0qLB7NMMpDHVDQ== dependencies: eventlistener "0.0.1" lodash.debounce "^4.0.0" lodash.throttle "^4.0.0" prop-types "^15.5.8" -react-lifecycles-compat@^3.0.2: +react-lifecycles-compat@^3.0.2, react-lifecycles-compat@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== react-proxy@^3.0.0-alpha.0: version "3.0.0-alpha.1" resolved "https://registry.yarnpkg.com/react-proxy/-/react-proxy-3.0.0-alpha.1.tgz#4400426bcfa80caa6724c7755695315209fa4b07" + integrity sha512-uyPHKDJ99eBf/wTi768z176I8+c2NvGG5wKdctvHJO5XyZl/brIiwDQ+HBA8Zag5nDdTICYxdBafxBiUxJARrQ== dependencies: lodash "^4.6.1" react-router-dom@^4.1.1: version "4.3.1" resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-4.3.1.tgz#4c2619fc24c4fa87c9fd18f4fb4a43fe63fbd5c6" + integrity sha512-c/MlywfxDdCp7EnB7YfPMOfMD3tOtIjrQlj/CKfNMBxdmpJP8xcz5P/UAFn3JbnQCNUxsHyVVqllF9LhgVyFCA== dependencies: history "^4.7.2" invariant "^2.2.4" @@ -7637,6 +9178,7 @@ react-router-dom@^4.1.1: react-router@^4.1.1, react-router@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/react-router/-/react-router-4.3.1.tgz#aada4aef14c809cb2e686b05cee4742234506c4e" + integrity sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg== dependencies: history "^4.7.2" hoist-non-react-statics "^2.5.0" @@ -7647,15 +9189,16 @@ react-router@^4.1.1, react-router@^4.3.1: warning "^4.0.1" react-side-effect@^1.1.0: - version "1.1.5" - resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-1.1.5.tgz#f26059e50ed9c626d91d661b9f3c8bb38cd0ff2d" + version "1.2.0" + resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-1.2.0.tgz#0e940c78faba0c73b9b0eba9cd3dda8dfb7e7dae" + integrity sha512-v1ht1aHg5k/thv56DRcjw+WtojuuDHFUgGfc+bFHOWsF4ZK6C2V57DO0Or0GPsg6+LSTE0M6Ry/gfzhzSwbc5w== dependencies: - exenv "^1.2.1" shallowequal "^1.0.1" -react-slick@~0.23.1: - version "0.23.1" - resolved "https://registry.yarnpkg.com/react-slick/-/react-slick-0.23.1.tgz#15791c4107f0ba3a5688d5bd97b7b7ceaa0dd181" +react-slick@~0.25.2: + version "0.25.2" + resolved "https://registry.yarnpkg.com/react-slick/-/react-slick-0.25.2.tgz#56331b67d47d8bcfe2dceb6acab1c8fd5bd1f6bc" + integrity sha512-8MNH/NFX/R7zF6W/w+FS5VXNyDusF+XDW1OU0SzODEU7wqYB+ZTGAiNJ++zVNAVqCAHdyCybScaUB+FCZOmBBw== dependencies: classnames "^2.2.5" enquire.js "^2.1.6" @@ -7664,8 +9207,9 @@ react-slick@~0.23.1: resize-observer-polyfill "^1.5.0" react-syntax-highlighter@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-8.0.0.tgz#d093c8cadca0ac27a5b6e1aedfcc7c9c215da36a" + version "8.1.0" + resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-8.1.0.tgz#59103ff17a828a27ed7c8f035ae2558f09b6b78c" + integrity sha512-G2bkZxmF3VOa4atEdXIDSfwwCqjw6ZQX5znfTaHcErA1WqHIS0o6DaSCDKFPVaOMXQEB9Hf1UySYQvuJmV8CXg== dependencies: babel-runtime "^6.18.0" highlight.js "~9.12.0" @@ -7674,8 +9218,9 @@ react-syntax-highlighter@^8.0.0: refractor "^2.4.1" react@^15.6.0: - version "15.6.2" - resolved "https://registry.yarnpkg.com/react/-/react-15.6.2.tgz#dba0434ab439cfe82f108f0f511663908179aa72" + version "15.7.0" + resolved "https://registry.yarnpkg.com/react/-/react-15.7.0.tgz#10308fd42ac6912a250bf00380751abc41ac7106" + integrity sha512-5/MMRYmpmM0sMTHGLossnJCrmXQIiJilD6y3YN3TzAwGFj6zdnMtFv6xmi65PHKRV+pehIHpT7oy67Sr6s9AHA== dependencies: create-react-class "^15.6.0" fbjs "^0.8.9" @@ -7684,23 +9229,25 @@ react@^15.6.0: prop-types "^15.5.10" react@^16.0.0: - version "16.4.1" - resolved "https://registry.yarnpkg.com/react/-/react-16.4.1.tgz#de51ba5764b5dbcd1f9079037b862bd26b82fe32" + version "16.14.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" + integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== dependencies: - fbjs "^0.8.16" loose-envify "^1.1.0" object-assign "^4.1.1" - prop-types "^15.6.0" + prop-types "^15.6.2" read-cache@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== dependencies: pify "^2.3.0" read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A== dependencies: find-up "^1.0.0" read-pkg "^1.0.0" @@ -7708,6 +9255,7 @@ read-pkg-up@^1.0.1: read-pkg-up@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w== dependencies: find-up "^2.0.0" read-pkg "^2.0.0" @@ -7715,6 +9263,7 @@ read-pkg-up@^2.0.0: read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ== dependencies: load-json-file "^1.0.0" normalize-package-data "^2.3.2" @@ -7723,6 +9272,7 @@ read-pkg@^1.0.0: read-pkg@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA== dependencies: load-json-file "^2.0.0" normalize-package-data "^2.3.2" @@ -7731,21 +9281,14 @@ read-pkg@^2.0.0: read@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ== dependencies: mute-stream "~0.0.4" -readable-stream@1.0, readable-stream@~1.0.31: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" +readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -7755,38 +9298,61 @@ readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" +readable-stream@^3.1.1, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@~1.0.31: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + readdir-enhanced@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/readdir-enhanced/-/readdir-enhanced-1.5.2.tgz#61463048690ac6a455b75b62fa78a88f8dc85e53" + integrity sha512-oncAoS9LLjy/+DeZfSAdZBI/iFJGcPCOp44RPFI6FIMHuxt5CC5P0cUZ9mET+EZB9ONhcEvAids/lVRkj0sTHw== dependencies: call-me-maybe "^1.0.1" es6-promise "^4.1.0" glob-to-regexp "^0.3.0" readdirp@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== dependencies: - graceful-fs "^4.1.2" - minimatch "^3.0.2" + graceful-fs "^4.1.11" + micromatch "^3.1.10" readable-stream "^2.0.2" - set-immediate-shim "^1.0.1" rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== dependencies: resolve "^1.1.6" recursive-readdir@2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.1.tgz#90ef231d0778c5ce093c9a48d74e5c5422d13a99" + integrity sha512-BKWLxPZb4B07G/4LzyzsHaw24fC41/tL7LrECr1//X9ykRhmxlYgyl7G7X+6A7nvJyOGE/ED7refqmSGORVYqQ== dependencies: minimatch "3.0.3" redbox-react@^1.3.6: version "1.6.0" resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.6.0.tgz#e753ac02595bc1bf695b3935889a4f5b1b5a21a1" + integrity sha512-mLjM5eYR41yOp5YKHpd3syFeGq6B4Wj5vZr64nbLvTZW5ZLff4LYk7VE4ITpVxkZpCY6OZuqh0HiP3A3uEaCpg== dependencies: error-stack-parser "^1.3.6" object-assign "^4.0.1" @@ -7796,27 +9362,42 @@ redbox-react@^1.3.6: reduce-css-calc@^1.2.6, reduce-css-calc@^1.2.7: version "1.3.0" resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" + integrity sha512-0dVfwYVOlf/LBA2ec4OwQ6p3X9mYxn/wOl2xTcLwjnPYrkgEfPx3VI4eGCH3rQLlPISG5v9I9bkZosKsNRTRKA== dependencies: balanced-match "^0.4.2" math-expression-evaluator "^1.2.14" reduce-function-call "^1.0.1" reduce-function-call@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" + version "1.0.3" + resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.3.tgz#60350f7fb252c0a67eb10fd4694d16909971300f" + integrity sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ== dependencies: - balanced-match "^0.4.2" + balanced-match "^1.0.0" -redux-devtools-instrument@^1.3.3: - version "1.8.3" - resolved "https://registry.yarnpkg.com/redux-devtools-instrument/-/redux-devtools-instrument-1.8.3.tgz#c510d67ab4e5e4525acd6e410c25ab46b85aca7c" +redux-devtools-core@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/redux-devtools-core/-/redux-devtools-core-0.2.1.tgz#4e43cbe590a1f18c13ee165d2d42e0bc77a164d8" + integrity sha512-RAGOxtUFdr/1USAvxrWd+Gq/Euzgw7quCZlO5TgFpDfG7rB5tMhZUrNyBjpzgzL2yMk0eHnPYIGm7NkIfRzHxQ== dependencies: - lodash "^4.2.0" - symbol-observable "^1.0.2" + get-params "^0.1.2" + jsan "^3.1.13" + lodash "^4.17.11" + nanoid "^2.0.0" + remotedev-serialize "^0.1.8" + +redux-devtools-instrument@^1.9.4: + version "1.10.0" + resolved "https://registry.yarnpkg.com/redux-devtools-instrument/-/redux-devtools-instrument-1.10.0.tgz#036caf79fa1e5f25ec4bae38a9af4f08c69e323a" + integrity sha512-X8JRBCzX2ADSMp+iiV7YQ8uoTNyEm0VPFPd4T854coz6lvRiBrFSqAr9YAS2n8Kzxx8CJQotR0QF9wsMM+3DvA== + dependencies: + lodash "^4.17.19" + symbol-observable "^1.2.0" redux@^3.6.0: version "3.7.2" resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b" + integrity sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A== dependencies: lodash "^4.2.1" lodash-es "^4.2.1" @@ -7824,27 +9405,38 @@ redux@^3.6.0: symbol-observable "^1.0.3" refractor@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/refractor/-/refractor-2.4.1.tgz#067654311ed1618fc2dd76e9263c8cf05ab6298b" + version "2.10.1" + resolved "https://registry.yarnpkg.com/refractor/-/refractor-2.10.1.tgz#166c32f114ed16fd96190ad21d5193d3afc7d34e" + integrity sha512-Xh9o7hQiQlDbxo5/XkOX6H+x/q8rmlmZKr97Ie1Q8ZM32IRRd3B/UxuA/yXDW79DBSXGWxm2yRTbcTVmAciJRw== dependencies: - hastscript "^3.1.0" - prismjs "~1.14.0" + hastscript "^5.0.0" + parse-entities "^1.1.2" + prismjs "~1.17.0" regenerate@^1.2.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== regenerator-runtime@^0.10.5: version "0.10.5" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + integrity sha512-02YopEIhAgiBHWeoTiA8aitHDt8z6w+rQqNuIftlM+ZtvSl/brTouaU7DW6GO/cHtvxJvS4Hwv2ibKdxIRi24w== regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regenerator-runtime@^0.13.4: + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== regenerator-transform@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q== dependencies: babel-runtime "^6.18.0" babel-types "^6.19.0" @@ -7853,35 +9445,39 @@ regenerator-transform@^0.10.0: regex-cache@^0.4.2: version "0.4.4" resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== dependencies: is-equal-shallow "^0.1.3" regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== dependencies: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexpu-core@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - regexpu-core@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + integrity sha512-tJ9+S4oKjxY8IZ9jmjnp/mtytu1u3iyIQAfmI51IKWH6bFf7XR1ybtaO6j7INhZKXOTYADk7V5qxaqLkmNxiZQ== dependencies: regenerate "^1.2.1" regjsgen "^0.2.0" regjsparser "^0.1.4" -registry-auth-token@3.3.2, registry-auth-token@^3.0.1: +registry-auth-token@3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" + integrity sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ== + dependencies: + rc "^1.1.6" + safe-buffer "^5.0.1" + +registry-auth-token@^3.0.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" + integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== dependencies: rc "^1.1.6" safe-buffer "^5.0.1" @@ -7889,22 +9485,26 @@ registry-auth-token@3.3.2, registry-auth-token@^3.0.1: registry-url@3.1.0, registry-url@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + integrity sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA== dependencies: rc "^1.0.1" regjsgen@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + integrity sha512-x+Y3yA24uF68m5GA+tBjbGYo64xXVJpbToBaWCoSNSc1hdk6dfctaRWrNFTVJZIIhL5GxW8zwjoixbnifnK59g== regjsparser@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + integrity sha512-jlQ9gYLfk2p3V5Ag5fYhA7fv7OHzd1KUH0PRP46xc3TgwjwgROIW572AfYg/X9kaNq/LJnu6oJcFRXlIrGoTRw== dependencies: jsesc "~0.5.0" relay-compiler@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/relay-compiler/-/relay-compiler-1.4.1.tgz#10e83f0f5de8db3d000851a4c0e435e7dd1deb95" + integrity sha512-8O9dVIOOTp1TlbQhdNp2EBO/WUaSEPaYhQ8HFgMVjpvLTCaCfHEpptNQPJf5uDG/AH1p2qhPtLaCyQ2pBYh7Cw== dependencies: babel-generator "^6.24.1" babel-polyfill "^6.20.0" @@ -7926,10 +9526,12 @@ relay-compiler@1.4.1: relay-debugger-react-native-runtime@0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/relay-debugger-react-native-runtime/-/relay-debugger-react-native-runtime-0.0.10.tgz#0ef36012a1fba928962205514b46f635c652f235" + integrity sha512-mQ/6Ue5WhoZ6BIi5rN3bqK3L1MqZ9Oq4dYCEXO5d9M0mc4JSXEkWuPEEymywiYNMbFOSDUjIGIReltTzE4vgrg== relay-runtime@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/relay-runtime/-/relay-runtime-1.4.1.tgz#f88dcd0a422700a04563f291f570e4ce368e36d0" + integrity sha512-hsEVCPik0Wo+8xvVqaMK96d45fqYAcHz/UCAw2qy1dxY+2kHUhnDUh6CGilFKB1H3f+DLzvqIHUyNYKWS/jZ/g== dependencies: babel-runtime "^6.23.0" fbjs "^0.8.14" @@ -7938,6 +9540,7 @@ relay-runtime@1.4.1: remark-parse@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-3.0.1.tgz#1b9f841a44d8f4fbf2246850265459a4eb354c80" + integrity sha512-B0IoK9ZGTUBTrbM1m+HHM4ai/vNSUmmAm6OMIng/+yuzpygZieVQ99oD7DXrdE5pOPhUfvrekmA+hqaDCLYHcw== dependencies: collapse-white-space "^1.0.2" has "^1.0.1" @@ -7959,6 +9562,7 @@ remark-parse@^3.0.0: remark-parse@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-4.0.0.tgz#99f1f049afac80382366e2e0d0bd55429dd45d8b" + integrity sha512-XZgICP2gJ1MHU7+vQaRM+VA9HEL3X253uwUM/BGgx3iv6TH2B3bF3B8q00DKcyP9YrJV+/7WOWEWBFF/u8cIsw== dependencies: collapse-white-space "^1.0.2" is-alphabetical "^1.0.0" @@ -7977,14 +9581,16 @@ remark-parse@^4.0.0: xtend "^4.0.1" remark-retext@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/remark-retext/-/remark-retext-3.1.0.tgz#1b3df2d49469c0d3596cad86e91503a8b600fdcc" + version "3.1.3" + resolved "https://registry.yarnpkg.com/remark-retext/-/remark-retext-3.1.3.tgz#77173b1d9d13dab15ce5b38d996195fea522ee7f" + integrity sha512-UujXAm28u4lnUvtOZQFYfRIhxX+auKI9PuA2QpQVTT7gYk1OgX6o0OUrSo1KOa6GNrFX+OODOtS5PWIHPxM7qw== dependencies: mdast-util-to-nlcst "^3.2.0" remark-stringify@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-3.0.1.tgz#79242bebe0a752081b5809516fa0c06edec069cf" + integrity sha512-N+tG/oO0pjH41FxAGEonHOUHxXbBItICPQlb2mWpXLPJjlRf0pDTxw3a01bnDt2i2S4xH8nuQgiPnk9UU5TQdg== dependencies: ccount "^1.0.0" is-alphanumeric "^1.0.0" @@ -8004,6 +9610,7 @@ remark-stringify@^3.0.0: remark-stringify@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-4.0.0.tgz#4431884c0418f112da44991b4e356cfe37facd87" + integrity sha512-xLuyKTnuQer3ke9hkU38SUYLiTmS078QOnoFavztmbt/pAJtNSkNtFgR0U//uCcmG0qnyxao+PDuatQav46F1w== dependencies: ccount "^1.0.0" is-alphanumeric "^1.0.0" @@ -8023,73 +9630,73 @@ remark-stringify@^4.0.0: remark@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/remark/-/remark-7.0.1.tgz#a5de4dacfabf0f60a49826ef24c479807f904bfb" + integrity sha512-o/g1606svQVO+1FLf3r+pzzRtMA/AQGTF+LlaBG1AOc75JdLkxTeK8nY7RqEjfSjDXZQ1QvzTpp84ko4PAb8bQ== dependencies: remark-parse "^3.0.0" remark-stringify "^3.0.0" unified "^6.0.0" remote-redux-devtools@^0.5.7: - version "0.5.12" - resolved "https://registry.yarnpkg.com/remote-redux-devtools/-/remote-redux-devtools-0.5.12.tgz#42cb95dfa9e54c1d9671317c5e7bba41e68caec2" + version "0.5.16" + resolved "https://registry.yarnpkg.com/remote-redux-devtools/-/remote-redux-devtools-0.5.16.tgz#95b1a4a1988147ca04f3368f3573b661748b3717" + integrity sha512-xZ2D1VRIWzat5nsvcraT6fKEX9Cfi+HbQBCwzNnUAM8Uicm/anOc60XGalcaDPrVmLug7nhDl2nimEa3bL3K9w== dependencies: - jsan "^3.1.5" + jsan "^3.1.13" querystring "^0.2.0" - redux-devtools-instrument "^1.3.3" - remotedev-utils "^0.1.1" - rn-host-detect "^1.0.1" - socketcluster-client "^5.3.1" + redux-devtools-core "^0.2.1" + redux-devtools-instrument "^1.9.4" + rn-host-detect "^1.1.5" + socketcluster-client "^14.2.1" -remotedev-serialize@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/remotedev-serialize/-/remotedev-serialize-0.1.1.tgz#0f598000b7dd7515d67f9b51a61d211e18ce9554" +remotedev-serialize@^0.1.8: + version "0.1.9" + resolved "https://registry.yarnpkg.com/remotedev-serialize/-/remotedev-serialize-0.1.9.tgz#5e67e05cbca75d408d769d057dc59d0f56cd2c43" + integrity sha512-5tFdZg9mSaAWTv6xmQ7HtHjKMLSFQFExEZOtJe10PLsv1wb7cy7kYHtBvTYRro27/3fRGEcQBRNKSaixOpb69w== dependencies: - jsan "^3.1.9" - -remotedev-utils@^0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/remotedev-utils/-/remotedev-utils-0.1.4.tgz#643700819a943678073c75eb185e81d96620b348" - dependencies: - get-params "^0.1.2" - jsan "^3.1.5" - lodash "^4.0.0" - remotedev-serialize "^0.1.0" - shortid "^2.2.6" + jsan "^3.1.13" remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== -renderkid@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.1.tgz#898cabfc8bede4b7b91135a3ffd323e58c0db319" +renderkid@^2.0.4: + version "2.0.7" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.7.tgz#464f276a6bdcee606f4a15993f9b29fc74ca8609" + integrity sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ== dependencies: - css-select "^1.1.0" - dom-converter "~0.1" - htmlparser2 "~3.3.0" - strip-ansi "^3.0.0" - utila "~0.3" + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^3.0.1" repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== repeating@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A== dependencies: is-finite "^1.0.0" replace-ext@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" + integrity sha512-vuNYXC7gG7IeVNBC1xUllqCcZKRbJoSPOBhnTEcAIiKCsbuef6zO3F0Rve3isPMMoNoQRWjQwbAgAjHUHniyEA== -request@2.81.0, "request@>=2.9.0 <2.82.0": +request@2.81.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + integrity sha512-IZnsR7voF0miGSu29EXPRgPTuEsI/+aibNSBbN1pplrfartF5wDYGADz3iD9vmBVf2r00rckWZf8BtS5kk7Niw== dependencies: aws-sign2 "~0.6.0" aws4 "^1.2.1" @@ -8114,60 +9721,68 @@ request@2.81.0, "request@>=2.9.0 <2.82.0": tunnel-agent "^0.6.0" uuid "^3.0.0" -request@^2.58.0, request@^2.67.0, request@^2.74.0: - version "2.87.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e" +request@^2.58.0, request@^2.67.0, request@^2.74.0, request@^2.87.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== dependencies: aws-sign2 "~0.7.0" - aws4 "^1.6.0" + aws4 "^1.8.0" caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.1" + combined-stream "~1.0.6" + extend "~3.0.2" forever-agent "~0.6.1" - form-data "~2.3.1" - har-validator "~5.0.3" + form-data "~2.3.2" + har-validator "~5.1.3" http-signature "~1.2.0" is-typedarray "~1.0.0" isstream "~0.1.2" json-stringify-safe "~5.0.1" - mime-types "~2.1.17" - oauth-sign "~0.8.2" + mime-types "~2.1.19" + oauth-sign "~0.9.0" performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - tough-cookie "~2.3.3" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" tunnel-agent "^0.6.0" - uuid "^3.1.0" + uuid "^3.3.2" require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== "require-like@>= 0.1.1": version "0.1.2" resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa" + integrity sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A== require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug== requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== -resize-observer-polyfill@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.0.tgz#660ff1d9712a2382baa2cad450a4716209f9ca69" +resize-observer-polyfill@^1.5.0, resize-observer-polyfill@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg== dependencies: resolve-from "^3.0.0" resolve-dir@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-0.1.1.tgz#b219259a5602fac5c5c496ad894a6e8cc430261e" + integrity sha512-QxMPqI6le2u0dCLyiGzgy92kjkkL6zO0XyvHzjdTNH3zM6e5Hz3BwG6+aEyNgiQ5Xz6PwTwgQEj3U50dByPKIA== dependencies: expand-tilde "^1.2.2" global-modules "^0.2.3" @@ -8175,6 +9790,7 @@ resolve-dir@^0.1.0: resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg== dependencies: expand-tilde "^2.0.0" global-modules "^1.0.0" @@ -8182,28 +9798,36 @@ resolve-dir@^1.0.0, resolve-dir@^1.0.1: resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== -resolve-pathname@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-2.2.0.tgz#7e9ae21ed815fd63ab189adeee64dc831eefa879" +resolve-pathname@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" + integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== -resolve@^1.1.6, resolve@^1.1.7: - version "1.8.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== dependencies: - path-parse "^1.0.5" + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" resolve@~1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg== restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q== dependencies: onetime "^2.0.0" signal-exit "^3.0.2" @@ -8211,10 +9835,12 @@ restore-cursor@^2.0.0: ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== retext-english@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/retext-english/-/retext-english-3.0.0.tgz#c17cb56bd5f1ba3dee3355ddbab79f1c4894a809" + version "3.0.4" + resolved "https://registry.yarnpkg.com/retext-english/-/retext-english-3.0.4.tgz#f978828d51fbcee842bc3807a45b7f709822ea8d" + integrity sha512-yr1PgaBDde+25aJXrnt3p1jvT8FVLVat2Bx8XeAWX13KXo8OT+3nWGU3HWxM4YFJvmfqvJYJZG2d7xxaO774gw== dependencies: parse-english "^4.0.0" unherit "^1.0.4" @@ -8222,38 +9848,46 @@ retext-english@^3.0.0: retry@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + integrity sha512-ZXUSQYTHdl3uS7IuCehYfMzKyIDBNoAuUblvy5oGO5UJSUTmStUUVPXbA9Qxd173Bgre53yCQczQuHgRWAdvJQ== rgb-hex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/rgb-hex/-/rgb-hex-1.0.0.tgz#bfaf8cd9cd9164b5a26d71eb4f15a0965324b3c1" + integrity sha512-wKTWuX7IF4CeR5QMmrJIKuV6E9P4bpiJWKEQot3xbfMp8GJYDL7pm5dWAQ88F0DnSGcjQqX+YdvxChd30NE7PA== rgb@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/rgb/-/rgb-0.1.0.tgz#be27b291e8feffeac1bd99729721bfa40fc037b5" + integrity sha512-F49dXX73a92N09uQkfCp2QjwXpmJcn9/i9PvjmwsSIXUGqRLCf/yx5Q9gRxuLQTq248kakqQuc8GX/U/CxSqlA== ric@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/ric/-/ric-1.3.0.tgz#8e95042609ce8213548a83164d08e94fae94909f" + integrity sha512-Qv/EIoIhCuOR0Q3YYMiLBz81MCXjOCuq6eq4NIKPC5IAI2OsHZOeF+xIBDnvnNqQs8Gi3YfS83Ox9jx1UnDArw== right-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + integrity sha512-yqINtL/G7vs2v+dFIZmFUDbnVyFUJFKd6gK22Kgo6R4jfJGFtisKyncWDDULgjfqf4ASQuIQyjJ7XZ+3aWpsAg== dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.8, rimraf@^2.3.2, rimraf@^2.4.4, rimraf@^2.5.0, rimraf@^2.5.4, rimraf@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" +rimraf@2, rimraf@^2.2.8, rimraf@^2.3.2, rimraf@^2.4.4, rimraf@^2.5.0, rimraf@^2.6.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: - glob "^7.0.5" + glob "^7.1.3" ripemd160@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-0.2.0.tgz#2bf198bde167cacfa51c0a928e84b68bbe171fce" + integrity sha512-JJsJ74Mw4sUDDisXGDnNNyN9xWmt5HcH6Kwvb/0m/IvTKjnLAtZfzeoLdpxk44AxQZki54oCCd+Kt0nPQ2AF2g== ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== dependencies: hash-base "^3.0.0" inherits "^2.0.1" @@ -8261,17 +9895,20 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: rmc-feedback@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/rmc-feedback/-/rmc-feedback-2.0.0.tgz#cbc6cb3ae63c7a635eef0e25e4fbaf5ac366eeaa" + integrity sha512-5PWOGOW7VXks/l3JzlOU9NIxRpuaSS8d9zA3UULUCuTKnpwBHNvv1jSJzxgbbCQeYzROWUpgKI4za3X4C/mKmQ== dependencies: babel-runtime "6.x" classnames "^2.2.5" -rn-host-detect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/rn-host-detect/-/rn-host-detect-1.1.3.tgz#242d76e2fa485c48d751416e65b7cce596969e91" +rn-host-detect@^1.1.5: + version "1.2.0" + resolved "https://registry.yarnpkg.com/rn-host-detect/-/rn-host-detect-1.2.0.tgz#8b0396fc05631ec60c1cb8789e5070cdb04d0da0" + integrity sha512-btNg5kzHcjZZ7t7mvvV/4wNJ9e3MPgrWivkRgWURzXL0JJ0pwWlU4zrbmdlz3HHzHOxhBhHB4D+/dbMFfu4/4A== rollup@^0.58.2: version "0.58.2" resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.58.2.tgz#2feddea8c0c022f3e74b35c48e3c21b3433803ce" + integrity sha512-RZVvCWm9BHOYloaE6LLiE/ibpjv1CmI8F8k0B0Cp+q1eezo3cswszJH1DN0djgzSlo0hjuuCmyeI+1XOYLl4wg== dependencies: "@types/estree" "0.0.38" "@types/node" "*" @@ -8279,48 +9916,51 @@ rollup@^0.58.2: rsvp@^3.0.13, rsvp@^3.0.18: version "3.6.2" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" + integrity sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw== run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - dependencies: - is-promise "^2.1.0" + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== rx-lite-aggregates@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + integrity sha512-3xPNZGW93oCjiO7PtKxRK6iOVYBWBvtf9QHDfU23Oc+dLIQmAV//UnyXV/yihv81VS/UqoQPk4NegS8EFi55Hg== dependencies: rx-lite "*" rx-lite@*, rx-lite@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + integrity sha512-Cun9QucwK6MIrp3mry/Y7hqD1oFqTYLQ4pGxaHTjIdaFDWRGGLikqp6u8LcWJnzpoALg9hap+JGk8sFIUuEGNA== -safe-buffer@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sane@^1.3.3: version "1.7.0" resolved "https://registry.yarnpkg.com/sane/-/sane-1.7.0.tgz#b3579bccb45c94cf20355cc81124990dfd346e30" + integrity sha512-wxna76E1fVwXoNSUfSDGB1KKY/+ZIydOdQoFnMloJZTrkuJI4Twkr+2qn864GkzzPwXATHRUwhF9OpQWzIN+Kw== dependencies: anymatch "^1.3.0" exec-sh "^0.2.0" @@ -8331,100 +9971,125 @@ sane@^1.3.3: watch "~0.10.0" sanitize-html@^1.14.1: - version "1.18.2" - resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.18.2.tgz#61877ba5a910327e42880a28803c2fbafa8e4642" + version "1.27.5" + resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.27.5.tgz#6c8149462adb23e360e1bb71cc0bae7f08c823c7" + integrity sha512-M4M5iXDAUEcZKLXkmk90zSYWEtk5NH3JmojQxKxV371fnMh+x9t1rqdmXaGoyEHw3z/X/8vnFhKjGL5xFGOJ3A== dependencies: - chalk "^2.3.0" - htmlparser2 "^3.9.0" - lodash.clonedeep "^4.5.0" - lodash.escaperegexp "^4.1.2" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.mergewith "^4.6.0" - postcss "^6.0.14" - srcset "^1.0.0" - xtend "^4.0.0" + htmlparser2 "^4.1.0" + lodash "^4.17.15" + parse-srcset "^1.0.2" + postcss "^7.0.27" -sax@^1.2.4, sax@~1.2.1: +sax@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -sc-channel@~1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/sc-channel/-/sc-channel-1.0.6.tgz#b38bd47a993e78290fbc53467867f6b2a0a08639" +sc-channel@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/sc-channel/-/sc-channel-1.2.0.tgz#d9209f3a91e3fa694c66b011ce55c4ad8c3087d9" + integrity sha512-M3gdq8PlKg0zWJSisWqAsMmTVxYRTpVRqw4CWAdKBgAfVKumFcTjoCV0hYu7lgUXccCtCD8Wk9VkkE+IXCxmZA== dependencies: - sc-emitter "1.x.x" + component-emitter "1.2.1" -sc-emitter@1.x.x, sc-emitter@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/sc-emitter/-/sc-emitter-1.1.0.tgz#ef119d4222f4c64f887b486964ef11116cdd0e75" +sc-errors@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/sc-errors/-/sc-errors-2.0.1.tgz#3af2d934dfd82116279a4b2c1552c1e021ddcb03" + integrity sha512-JoVhq3Ud+3Ujv2SIG7W0XtjRHsrNgl6iXuHHsh0s+Kdt5NwI6N2EGAZD4iteitdDv68ENBkpjtSvN597/wxPSQ== + +sc-formatter@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/sc-formatter/-/sc-formatter-3.0.3.tgz#caeb1e9bf3145dc77b7128b2a8abbb14bad3162e" + integrity sha512-lYI/lTs1u1c0geKElcj+bmEUfcP/HuKg2iDeTijPSjiTNFzN3Cf8Qh6tVd65oi7Qn+2/oD7LP4s6GC13v/9NiQ== + +scheduler@^0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" + integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== dependencies: - component-emitter "1.2.0" - -sc-errors@~1.3.0: - version "1.3.3" - resolved "https://registry.yarnpkg.com/sc-errors/-/sc-errors-1.3.3.tgz#c00bc4c766a970cc8d5937d08cd58e931d7dae05" - -sc-formatter@~3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/sc-formatter/-/sc-formatter-3.0.2.tgz#9abdb14e71873ce7157714d3002477bbdb33c4e6" + loose-envify "^1.1.0" + object-assign "^4.1.1" schema-utils@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf" + integrity sha512-QaVYBaD9U8scJw2EBWnCBY+LJ0AD+/2edTaigDs0XLDLBfJmSUK9KGqktg1rb32U3z4j/XwvFwHHH1YfbYFd7Q== dependencies: ajv "^5.0.0" scroll-behavior@^0.9.9: - version "0.9.9" - resolved "https://registry.yarnpkg.com/scroll-behavior/-/scroll-behavior-0.9.9.tgz#ebfe0658455b82ad885b66195215416674dacce2" + version "0.9.12" + resolved "https://registry.yarnpkg.com/scroll-behavior/-/scroll-behavior-0.9.12.tgz#1c22d273ec4ce6cd4714a443fead50227da9424c" + integrity sha512-18sirtyq1P/VsBX6O/vgw20Np+ngduFXEMO4/NDFXabdOKBL2kjPVUpz1y0+jm99EWwFJafxf5/tCyMeXt9Xyg== dependencies: - dom-helpers "^3.2.1" - invariant "^2.2.2" + dom-helpers "^3.4.0" + invariant "^2.2.4" select@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" + integrity sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA== semver-diff@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + integrity sha512-gL8F8L4ORwsS0+iQ34yCYv///jsOq0ZL7WP55d1HnJ32o7tyFYEFQZQA22mrLIacZdU6xecaBBZ+uEiffGNyXw== dependencies: semver "^5.0.3" -"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" +"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== semver@^4.3.3: version "4.3.6" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" + integrity sha512-IrpJ+yoG4EOH8DFWuVg+8H1kW1Oaof0Wxe7cPcXW3x9BjkN/eVo54F15LyqemnDIUYskQWr9qvl/RihmSy6+xQ== semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + integrity sha512-mfmm3/H9+67MCVix1h+IXTpDwL6710LyHuk7+cWC9T1mE0qz4iHhh6r4hU2wrIT9iTsAAC2XQRvfblL028cpLw== -send@0.16.2: - version "0.16.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== dependencies: debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" + depd "2.0.0" + destroy "1.2.0" encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" fresh "0.5.2" - http-errors "~1.6.2" - mime "1.4.1" - ms "2.0.0" - on-finished "~2.3.0" - range-parser "~1.2.0" - statuses "~1.4.0" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serve-handler@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-4.0.0.tgz#cf2a40f27f7a5ec29cbbd1732fcd6a16afdc0c41" + integrity sha512-zCRfTTfE7Fit2k4JQC/EoKhDyPqMv3FTIQZ/Pvg0ec4d22LdWeqArPCpQmrnnSXlHMbcgFJ/3r7bCuhvrkwFbg== + dependencies: + bytes "3.0.0" + content-disposition "0.5.2" + fast-url-parser "1.1.3" + glob-slasher "1.0.1" + mime-types "2.1.18" + minimatch "3.0.4" + path-is-inside "1.0.2" + path-to-regexp "2.2.1" + range-parser "1.2.0" serve-index@^1.7.2: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== dependencies: accepts "~1.3.4" batch "0.6.1" @@ -8434,66 +10099,44 @@ serve-index@^1.7.2: mime-types "~2.1.17" parseurl "~1.3.2" -serve-static@1.13.2: - version "1.13.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== dependencies: encodeurl "~1.0.2" escape-html "~1.0.3" - parseurl "~1.3.2" - send "0.16.2" + parseurl "~1.3.3" + send "0.18.0" -serve@^6.4.0: - version "6.5.8" - resolved "https://registry.yarnpkg.com/serve/-/serve-6.5.8.tgz#fd7ad6b9c10ba12084053030cc1a8b636c0a10a7" +serve@^9.2.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/serve/-/serve-9.6.0.tgz#303f198c03ad2d47eb90972447c7bd5878a4c7ac" + integrity sha512-E5wtMirS9ADD+bs99GofXsLUxwW8EJWc2zQA+x4FwgVGAVnJdzTWIJeFtbVFLaheBewCfN849RwZU2tyAUTIZg== dependencies: - args "4.0.0" - basic-auth "2.0.0" - bluebird "3.5.1" + "@zeit/schemas" "2.1.1" + ajv "6.5.2" + arg "2.0.0" boxen "1.3.0" chalk "2.4.1" clipboardy "1.2.3" - dargs "5.1.0" - detect-port "1.2.3" - filesize "3.6.1" - fs-extra "6.0.1" - handlebars "4.0.11" - ip "1.1.5" - micro "9.3.1" - micro-compress "1.0.0" - mime-types "2.1.18" - node-version "1.1.3" - openssl-self-signed-certificate "1.1.6" - opn "5.3.0" - path-is-inside "1.0.2" - path-type "3.0.0" - send "0.16.2" - update-check "1.5.1" + serve-handler "4.0.0" + update-check "1.5.2" set-blocking@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-1.0.0.tgz#cd5e5d938048df1ac92dfe92e1f16add656f5ec5" + integrity sha512-iBe7pLhQGlNw7om7kiwfHyWAZkD2gR9yTHu66xvjxQYTrJw73z2sxcBkKeyZQ/RrzUipgpxaATrtJlw3ezbnUA== set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== -set-immediate-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - -set-value@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.1" - to-object-path "^0.3.0" - -set-value@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== dependencies: extend-shallow "^2.0.1" is-extendable "^0.1.1" @@ -8503,22 +10146,27 @@ set-value@^2.0.0: setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - -setprototypeof@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== sha.js@2.2.6: version "2.2.6" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.2.6.tgz#17ddeddc5f722fb66501658895461977867315ba" + integrity sha512-GC+qN4sf/O6bDwz6CHaz8HVQfLbbNyIsXpTZLiD5c1badnWA63WVAH1msoCq+fXcV0dZ50jxTqKA8seu40845A== sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" @@ -8526,6 +10174,7 @@ sha.js@^2.4.0, sha.js@^2.4.8: shallow-clone@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-0.1.2.tgz#5909e874ba77106d73ac414cfec1ffca87d97060" + integrity sha512-J1zdXCky5GmNnuauESROVu31MQSnLoYvlyEn6j2Ztk6Q5EHFIhxkMhYcv6vuDzl2XEzoRr856QwzMgWM/TmZgw== dependencies: is-extendable "^0.1.1" kind-of "^2.0.1" @@ -8535,34 +10184,34 @@ shallow-clone@^0.1.2: shallow-compare@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/shallow-compare/-/shallow-compare-1.2.2.tgz#fa4794627bf455a47c4f56881d8a6132d581ffdb" + integrity sha512-LUMFi+RppPlrHzbqmFnINTrazo0lPNwhcgzuAXVVcfy/mqPDrQmHAyz5bvV0gDAuRFrk804V0HpQ6u9sZ0tBeg== shallow-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shallow-equal/-/shallow-equal-1.0.0.tgz#508d1838b3de590ab8757b011b25e430900945f7" + version "1.2.1" + resolved "https://registry.yarnpkg.com/shallow-equal/-/shallow-equal-1.2.1.tgz#4c16abfa56043aa20d050324efa68940b0da79da" + integrity sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA== -shallowequal@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-0.2.2.tgz#1e32fd5bcab6ad688a4812cb0cc04efc75c7014e" - dependencies: - lodash.keys "^3.1.2" - -shallowequal@^1.0.1, shallowequal@^1.0.2: +shallowequal@^1.0.1, shallowequal@^1.0.2, shallowequal@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== dependencies: shebang-regex "^1.0.0" shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== shell-quote@1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" + integrity sha512-V0iQEZ/uoem3NmD91rD8XiuozJnq9/ZJnbHVXHnWqP1ucAhS3yJ7sLIIzEi57wFFcK3oi3kFUC46uSyWr35mxg== dependencies: array-filter "~0.0.0" array-map "~0.0.0" @@ -8572,34 +10221,45 @@ shell-quote@1.6.1: shelljs@0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.0.tgz#3f6f2e4965cec565f65ff3861d644f879281a576" + integrity sha512-TgJOWiF/MJKenAfEzVYzcXugLXn0t6hzE3KZzNoPccGT6qVz/FrtkhQjDg5X7px4rkw9l4mL7SBta06L5KqEXA== dependencies: glob "^7.0.0" interpret "^1.0.0" rechoir "^0.6.2" -shortid@^2.2.6: - version "2.2.8" - resolved "https://registry.yarnpkg.com/shortid/-/shortid-2.2.8.tgz#033b117d6a2e975804f6f0969dbe7d3d0b355131" +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" sift@^3.2.6: version "3.3.12" resolved "https://registry.yarnpkg.com/sift/-/sift-3.3.12.tgz#4f5cdf16af3db32afa04ab25297b0e20ad98294a" + integrity sha512-Sn1XNVAlP5w7BJVk3IPM9Mz3PKf9XDasMTFF++5Z8ThPVRVvmJL5s4QGbLxKvOe1O77caevcwEyuBU3k1jF/hw== signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== signedsource@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/signedsource/-/signedsource-1.0.0.tgz#1ddace4981798f93bd833973803d80d52e93ad6a" + integrity sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww== slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg== snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== dependencies: define-property "^1.0.0" isobject "^3.0.0" @@ -8608,12 +10268,14 @@ snapdragon-node@^2.0.1: snapdragon-util@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== dependencies: kind-of "^3.2.0" snapdragon@^0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== dependencies: base "^0.11.1" debug "^2.2.0" @@ -8627,68 +10289,82 @@ snapdragon@^0.8.1: sntp@1.x.x: version "1.0.9" resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + integrity sha512-7bgVOAnPj3XjrKY577S+puCKGCRlUrcrEdsMeRXlg9Ghf5df/xNi6sONUa43WrHUd3TjJBF7O04jYoiY0FVa0A== dependencies: hoek "2.x.x" socket.io-adapter@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" + version "1.1.2" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz#ab3f0d6f66b8fc7fca3959ab5991f82221789be9" + integrity sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g== -socket.io-client@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.1.1.tgz#dcb38103436ab4578ddb026638ae2f21b623671f" +socket.io-client@2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.5.0.tgz#34f486f3640dde9c2211fce885ac2746f9baf5cb" + integrity sha512-lOO9clmdgssDykiOmVQQitwBAF3I6mYcQAo7hQ7AM6Ny5X7fp8hIJ3HcQs3Rjz4SoggoxA1OgrQyY8EgTbcPYw== dependencies: backo2 "1.0.2" - base64-arraybuffer "0.1.5" component-bind "1.0.0" - component-emitter "1.2.1" + component-emitter "~1.3.0" debug "~3.1.0" - engine.io-client "~3.2.0" + engine.io-client "~3.5.0" has-binary2 "~1.0.2" - has-cors "1.1.0" indexof "0.0.1" - object-component "0.0.3" - parseqs "0.0.5" - parseuri "0.0.5" - socket.io-parser "~3.2.0" + parseqs "0.0.6" + parseuri "0.0.6" + socket.io-parser "~3.3.0" to-array "0.1.4" -socket.io-parser@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.2.0.tgz#e7c6228b6aa1f814e6148aea325b51aa9499e077" +socket.io-parser@~3.3.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.3.2.tgz#ef872009d0adcf704f2fbe830191a14752ad50b6" + integrity sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg== dependencies: - component-emitter "1.2.1" + component-emitter "~1.3.0" debug "~3.1.0" isarray "2.0.1" -socket.io@^2.0.3: - version "2.1.1" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.1.1.tgz#a069c5feabee3e6b214a75b40ce0652e1cfb9980" +socket.io-parser@~3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.4.1.tgz#b06af838302975837eab2dc980037da24054d64a" + integrity sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A== dependencies: - debug "~3.1.0" - engine.io "~3.2.0" + component-emitter "1.2.1" + debug "~4.1.0" + isarray "2.0.1" + +socket.io@^2.0.3: + version "2.5.0" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.5.0.tgz#e1c7fb1823f7fa09dfebb5bb68f9d2ee03a0a2e3" + integrity sha512-gGunfS0od3VpwDBpGwVkzSZx6Aqo9uOcf1afJj2cKnKFAoyl16fvhpsUhmUFd4Ldbvl5JvRQed6eQw6oQp6n8w== + dependencies: + debug "~4.1.0" + engine.io "~3.6.0" has-binary2 "~1.0.2" socket.io-adapter "~1.1.0" - socket.io-client "2.1.1" - socket.io-parser "~3.2.0" + socket.io-client "2.5.0" + socket.io-parser "~3.4.0" -socketcluster-client@^5.3.1: - version "5.5.2" - resolved "https://registry.yarnpkg.com/socketcluster-client/-/socketcluster-client-5.5.2.tgz#9d4369e0e722ff7e55e5422c2d44f5afe1aff128" +socketcluster-client@^14.2.1: + version "14.3.2" + resolved "https://registry.yarnpkg.com/socketcluster-client/-/socketcluster-client-14.3.2.tgz#c0d245233b114a4972857dc81049c710b7691fb7" + integrity sha512-xDtgW7Ss0ARlfhx53bJ5GY5THDdEOeJnT+/C9Rmrj/vnZr54xeiQfrCZJbcglwe732nK3V+uZq87IvrRl7Hn4g== dependencies: - base-64 "0.1.0" + buffer "^5.2.1" clone "2.1.1" + component-emitter "1.2.1" linked-list "0.1.0" querystring "0.2.0" - sc-channel "~1.0.6" - sc-emitter "~1.1.0" - sc-errors "~1.3.0" - sc-formatter "~3.0.0" - ws "3.0.0" + sc-channel "^1.2.0" + sc-errors "^2.0.1" + sc-formatter "^3.0.1" + uuid "3.2.1" + ws "^7.5.0" sockjs-client@1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12" + integrity sha512-hkDiI0wOmGmoUG3TSIrbDt8AhyzhePuNT3nogc5+c0amyUHu091y+jRK2h/e36olKRG+tSbhlQYHWqdsuW0CtQ== dependencies: debug "^2.6.6" eventsource "0.1.6" @@ -8698,42 +10374,48 @@ sockjs-client@1.1.4: url-parse "^1.1.8" sockjs-client@^1.0.3: - version "1.1.5" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.5.tgz#1bb7c0f7222c40f42adf14f4442cbd1269771a83" + version "1.6.1" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.6.1.tgz#350b8eda42d6d52ddc030c39943364c11dcad806" + integrity sha512-2g0tjOR+fRs0amxENLi/q5TiJTqY+WXFOzb5UwXndlK6TO3U/mirZznpx6w34HVMoc3g7cY24yC/ZMIYnDlfkw== dependencies: - debug "^2.6.6" - eventsource "0.1.6" - faye-websocket "~0.11.0" - inherits "^2.0.1" - json3 "^3.3.2" - url-parse "^1.1.8" + debug "^3.2.7" + eventsource "^2.0.2" + faye-websocket "^0.11.4" + inherits "^2.0.4" + url-parse "^1.5.10" sockjs@^0.3.15: - version "0.3.19" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" + version "0.3.24" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" + integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== dependencies: - faye-websocket "^0.10.0" - uuid "^3.0.1" + faye-websocket "^0.11.3" + uuid "^8.3.2" + websocket-driver "^0.7.4" sort-keys@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg== dependencies: is-plain-obj "^1.0.0" source-list-map@^0.1.7, source-list-map@~0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" + integrity sha512-cabwdhnSNf/tTDMh/DXZXlkeQLvdYT5xfGYBohqHG7wb3bBQrQlHQNWM9NWSOboXXK1zgwz6JzS5e4hZq9vxMw== source-list-map@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-1.1.2.tgz#9889019d1024cce55cdc069498337ef6186a11a1" + integrity sha512-FqR2O+cX+toUD3ULVIgTtiqYIqPnA62ehJD47mf4LG1PZCB+xmIa3gcTEhegGbP22aRPh88dJSdgDIolrvSxBQ== source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== dependencies: - atob "^2.1.1" + atob "^2.1.2" decode-uri-component "^0.2.0" resolve-url "^0.2.1" source-map-url "^0.4.0" @@ -8742,145 +10424,160 @@ source-map-resolve@^0.5.0: source-map-support@^0.4.15: version "0.4.18" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== dependencies: source-map "^0.5.6" source-map-support@~0.2.8: version "0.2.10" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.2.10.tgz#ea5a3900a1c1cb25096a0ae8cc5c2b4b10ded3dc" + integrity sha512-gGKOSat73z0V8wBKo9AGxZZyekczBireh1hHktbt+kb9acsCB5OfVCF2DCWlztcQ3r5oNN7f2BL0B2xOcoJ/DQ== dependencies: source-map "0.1.32" source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== source-map@0.1.32: version "0.1.32" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.32.tgz#c8b6c167797ba4740a8ea33252162ff08591b266" + integrity sha512-htQyLrrRLkQ87Zfrir4/yN+vAUd6DNjVayEjTSHXu29AYQJw57I4/xEL/M6p6E/woPNJwvZt6rVlzc7gFEJccQ== dependencies: amdefine ">=0.0.4" source-map@0.5.6: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" - -source-map@^0.4.4, source-map@~0.4.1: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - dependencies: - amdefine ">=0.0.4" + integrity sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA== source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1, source-map@~0.5.3: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== source-map@~0.1.38: version "0.1.43" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" + integrity sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ== + dependencies: + amdefine ">=0.0.4" + +source-map@~0.4.1: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + integrity sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A== dependencies: amdefine ">=0.0.4" sourcemapped-stacktrace@^1.1.6: - version "1.1.8" - resolved "https://registry.yarnpkg.com/sourcemapped-stacktrace/-/sourcemapped-stacktrace-1.1.8.tgz#6b7a3f1a6fb15f6d40e701e23ce404553480d688" + version "1.1.11" + resolved "https://registry.yarnpkg.com/sourcemapped-stacktrace/-/sourcemapped-stacktrace-1.1.11.tgz#e2dede7fc148599c52a4f883276e527f8452657d" + integrity sha512-O0pcWjJqzQFVsisPlPXuNawJHHg9N9UgpJ/aDmvi9+vnS3x1C0NhwkVFzzZ1VN0Xo+bekyweoqYvBw5ZBKiNnQ== dependencies: source-map "0.5.6" space-separated-tokens@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.2.tgz#e95ab9d19ae841e200808cd96bc7bd0adbbb3412" - dependencies: - trim "0.0.1" + version "1.1.5" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" + integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== spdx-correct@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" + version "3.0.12" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" + integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== dependencies: extend-shallow "^3.0.0" -sprintf-js@^1.0.3: - version "1.1.1" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.1.tgz#36be78320afe5801f6cea3ee78b6e5aab940ea0c" +sprintf-js@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - -srcset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/srcset/-/srcset-1.0.0.tgz#a5669de12b42f3b1d5e83ed03c71046fc48f41ef" - dependencies: - array-uniq "^1.0.2" - number-is-nan "^1.0.0" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== sshpk@^1.7.0: - version "1.14.2" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98" + version "1.17.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" + integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - safer-buffer "^2.0.2" - optionalDependencies: bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" ecc-jsbn "~0.1.1" + getpass "^0.1.1" jsbn "~0.1.0" + safer-buffer "^2.0.2" tweetnacl "~0.14.0" stack-trace@^0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== stackframe@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-0.3.1.tgz#33aa84f1177a5548c8935533cbfeb3420975f5a4" + integrity sha512-XmoiF4T5nuWEp2x2w92WdGjdHGY/cZa6LIbRsDRQR/Xlk4uW0PAUlH1zJYVffocwKpCdwyuypIp25xsSXEtZHw== -stackframe@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.0.4.tgz#357b24a992f9427cba6b545d96a14ed2cbca187b" +stackframe@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" + integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== state-toggle@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.1.tgz#c3cb0974f40a6a0f8e905b96789eb41afa1cde3a" + version "1.0.3" + resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" + integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ== static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== dependencies: define-property "^0.2.5" object-copy "^0.1.0" static-site-generator-webpack-plugin@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-3.4.1.tgz#6ee22468830bc546798a37e0fca6fd699cc93b81" + version "3.4.2" + resolved "https://registry.yarnpkg.com/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-3.4.2.tgz#ad9fd0a4fb8b6f439a7a66018320b459bdb6d916" + integrity sha512-39Kn+fZDVjolLYuX5y1rDvksJIW0QEUaEC/AVO/UewNXxGzoSQI1UYnRsL+ocAcN5Yti6d6rJgEL0qZ5tNXfdw== dependencies: bluebird "^3.0.5" cheerio "^0.22.0" @@ -8888,23 +10585,27 @@ static-site-generator-webpack-plugin@^3.4.1: url "^0.11.0" webpack-sources "^0.2.0" -"statuses@>= 1.3.1 < 2", "statuses@>= 1.4.0 < 2": +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2": version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - -statuses@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== steno@^0.4.1: version "0.4.4" resolved "https://registry.yarnpkg.com/steno/-/steno-0.4.4.tgz#071105bdfc286e6615c0403c27e9d7b5dcb855cb" + integrity sha512-EEHMVYHNXFHfGtgjNITnka0aHhiAlo93F7z2/Pwd+g0teG9CnM3JIINM7hVVB5/rhw9voufD7Wukwgtw2uqh6w== dependencies: graceful-fs "^4.1.3" stream-browserify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== dependencies: inherits "~2.0.1" readable-stream "^2.0.2" @@ -8912,10 +10613,12 @@ stream-browserify@^2.0.1: stream-cache@~0.0.1: version "0.0.2" resolved "https://registry.yarnpkg.com/stream-cache/-/stream-cache-0.0.2.tgz#1ac5ad6832428ca55667dbdee395dad4e6db118f" + integrity sha512-FsMTiRi4aXOcbL3M2lh7yAOWqM7kfVWQfkJ6kelrhdKNpJJVm0IebICQ2LURsbC5w9XfPSRwd9DkfqDHR9OP3g== stream-http@^2.3.1, stream-http@^2.7.2: version "2.8.3" resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" @@ -8926,28 +10629,46 @@ stream-http@^2.3.1, stream-http@^2.7.2: strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== string-convert@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97" + integrity sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A== string-similarity@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/string-similarity/-/string-similarity-1.2.0.tgz#d75153cb383846318b7a39a8d9292bb4db4e9c30" + version "1.2.2" + resolved "https://registry.yarnpkg.com/string-similarity/-/string-similarity-1.2.2.tgz#99b2c20a3c9bbb3903964eae1d89856db3d8db9b" + integrity sha512-IoHUjcw3Srl8nsPlW04U3qwWPk3oG2ffLM0tN853d/E/JlIvcmZmDY2Kz5HzKp4lEi2T7QD7Zuvjq/1rDw+XcQ== dependencies: - lodash "^4.13.1" + lodash.every "^4.6.0" + lodash.flattendeep "^4.4.0" + lodash.foreach "^4.5.0" + lodash.map "^4.6.0" + lodash.maxby "^4.6.0" string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== dependencies: code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2 || 3 || 4": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== dependencies: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" @@ -8955,16 +10676,26 @@ string-width@^1.0.1: string_decoder@^0.10.25, string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== -string_decoder@^1.0.0, string_decoder@~1.1.1: +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" stringify-entities@^1.0.1: version "1.3.2" resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.2.tgz#a98417e5471fd227b3e45d3db1861c11caf668f7" + integrity sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A== dependencies: character-entities-html4 "^1.0.0" character-entities-legacy "^1.0.0" @@ -8974,66 +10705,91 @@ stringify-entities@^1.0.1: stringstream@~0.0.4: version "0.0.6" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72" + integrity sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA== strip-ansi@3.0.1, strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== dependencies: ansi-regex "^2.0.0" strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== dependencies: ansi-regex "^3.0.0" +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-bom-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g== dependencies: is-utf8 "^0.2.0" strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== style-loader@^0.13.0: version "0.13.2" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.13.2.tgz#74533384cf698c7104c7951150b49717adc2f3bb" + integrity sha512-0lN0o7DS1G/HRoYJQMEO3yP+tNCuAnNuX1mt/2Yw4edSok45vebtyJoHUyBREasuPYBtZpC3d8wvgY/WD68ZJg== dependencies: loader-utils "^1.0.2" supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== supports-color@^3.1.0, supports-color@^3.1.1, supports-color@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A== dependencies: has-flag "^1.0.0" supports-color@^5.3.0, supports-color@^5.4.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + svgo@^0.7.0: version "0.7.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" + integrity sha512-jT/g9FFMoe9lu2IT6HtAxTA7RR2XOrmcrmCtGnyB/+GQnV6ZjNn+KOHZbZ35yL81+1F/aB6OeEsJztzBQ2EEwA== dependencies: coa "~1.0.1" colors "~1.1.2" @@ -9043,17 +10799,20 @@ svgo@^0.7.0: sax "~1.2.1" whet.extend "~0.9.9" -symbol-observable@^1.0.2, symbol-observable@^1.0.3: +symbol-observable@^1.0.3, symbol-observable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== symbol@^0.2.1: version "0.2.3" resolved "https://registry.yarnpkg.com/symbol/-/symbol-0.2.3.tgz#3b9873b8a901e47c6efe21526a3ac372ef28bbc7" + integrity sha512-IUW+ek7apEaW5bFhS6WpYoNtVpNTlNoqB/PH7YiMWQTxSPeXCzG4PILVakwXivJt3ZXWeO1fIJnUd/L9A/VeGA== systemjs-builder@0.16.13: version "0.16.13" resolved "https://registry.yarnpkg.com/systemjs-builder/-/systemjs-builder-0.16.13.tgz#02b47d03afd1e2f29562b11ec8bc13457e785c76" + integrity sha512-ual5RmcBt7yeXrmpEQIHmITZpNIf289hCTixo/gSOQpdVLLC5v7/W//qn3ZgK6YNdUBptS4szaGVrh7LxOqSHg== dependencies: babel-core "^6.24.1" babel-plugin-syntax-dynamic-import "^6.18.0" @@ -9073,23 +10832,27 @@ systemjs-builder@0.16.13: traceur "0.0.105" uglify-js "^2.6.1" -systemjs@0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/systemjs/-/systemjs-0.21.3.tgz#76467a34a9a12ead3b11028a27345f7649e46204" +systemjs@0.21.4: + version "0.21.4" + resolved "https://registry.yarnpkg.com/systemjs/-/systemjs-0.21.4.tgz#043996efcac3fefcb7d62e8c40457a42e9c86e1e" + integrity sha512-l1O8boHjAIY5UG74Xk4B63LK9QbFxv/FkQa//GGGWaTeQoMhTsWnFrYwPWBScSF4xQFMO/+v9QB4i633h8Oytw== systemjs@^0.19.46: version "0.19.47" resolved "https://registry.yarnpkg.com/systemjs/-/systemjs-0.19.47.tgz#c8c93937180f3f5481c769cd2720763fb4a31c6f" + integrity sha512-6P+63y7bQhZXqOcim7QU0TKEjCmQArFkKa+CxlDchIerej7wrXLUoyGuWk+L0yC5rYrZ5LI6Eh1QOawttQq5xw== dependencies: when "^3.7.5" tapable@^0.1.8, tapable@~0.1.8: version "0.1.10" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4" + integrity sha512-jX8Et4hHg57mug1/079yitEKWGB3LCwoxByLsNim89LABq8NqgiX+6iYVOsq0vX8uJHkU+DZ5fnq95f800bEsQ== -tar-fs@^1.13.0: +tar-fs@^1.13.0, tar-fs@^1.15.3: version "1.16.3" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.3.tgz#966a628841da2c4010406a82167cbd5e0c72d509" + integrity sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw== dependencies: chownr "^1.0.1" mkdirp "^0.5.1" @@ -9097,121 +10860,144 @@ tar-fs@^1.13.0: tar-stream "^1.1.2" tar-stream@^1.1.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.1.tgz#f84ef1696269d6223ca48f6e1eeede3f7e81f395" + version "1.6.2" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" + integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== dependencies: bl "^1.0.0" - buffer-alloc "^1.1.0" + buffer-alloc "^1.2.0" end-of-stream "^1.0.0" fs-constants "^1.0.0" readable-stream "^2.3.0" - to-buffer "^1.1.0" + to-buffer "^1.1.1" xtend "^4.0.0" tar@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + version "2.2.2" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" + integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA== dependencies: block-stream "*" - fstream "^1.0.2" + fstream "^1.0.12" inherits "2" -tar@^4: - version "4.4.4" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.4.tgz#ec8409fae9f665a4355cc3b4087d0820232bb8cd" - dependencies: - chownr "^1.0.1" - fs-minipass "^1.2.5" - minipass "^2.3.3" - minizlib "^1.1.0" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.2" - term-size@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + integrity sha512-7dPUZQGy/+m3/wjVz3ZW5dobSoD/02NxJpoXUX0WIyjfVS3l0c+b/+9phIDFA7FHzkYtwtMFgeGZ/Y8jVTeqQQ== dependencies: execa "^0.7.0" text-table@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== through2@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== dependencies: - readable-stream "^2.1.5" + readable-stream "~2.3.6" xtend "~4.0.1" through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== time-stamp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz#95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357" + version "2.2.0" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.2.0.tgz#917e0a66905688790ec7bbbde04046259af83f57" + integrity sha512-zxke8goJQpBeEgD82CXABeMh0LSJcj7CXEd0OHOg45HgcofF7pxNwZm9+RknpxpDhwN4gFpySkApKfFYfRQnUA== timed-out@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== timers-browserify@^2.0.2, timers-browserify@^2.0.4: - version "2.0.10" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== dependencies: setimmediate "^1.0.4" tiny-emitter@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.0.2.tgz#82d27468aca5ade8e5fd1e6d22b57dd43ebdfb7c" + version "2.1.0" + resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" + integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== + +tiny-invariant@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" + integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== + +tiny-warning@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + +tinycolor2@^1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803" + integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA== tmp@^0.0.31: version "0.0.31" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7" + integrity sha512-lfyEfOppKvWNeId5CArFLwgwef+iCnbEIy0JWYf1httIEXnx4ndL4Dr1adw7hPgeQfSlTbc/gqn6iaKcROpw5Q== dependencies: os-tmpdir "~1.0.1" tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" -tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== to-array@0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" + integrity sha512-LhVdShQD/4Mk4zXNroIQZJC+Ap3zgLcDuwEdcmLv9CCO73NWockQDwyUnW/m8VX/EElfL6FcYx7EeutN4HJA6A== to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA== -to-buffer@^1.1.0: +to-buffer@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" + integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og== to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== dependencies: kind-of "^3.0.2" to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== dependencies: is-number "^3.0.0" repeat-string "^1.6.1" @@ -9219,27 +11005,56 @@ to-regex-range@^2.1.0: to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== dependencies: define-property "^2.0.2" extend-shallow "^3.0.2" regex-not "^1.0.2" safe-regex "^1.1.0" +toggle-selection@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" + integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + topo@2.x.x: version "2.0.2" resolved "https://registry.yarnpkg.com/topo/-/topo-2.0.2.tgz#cd5615752539057c0dc0491a621c3bc6fbe1d182" + integrity sha512-QMfJ9TC5lKcmLZImOZ/BTSWJeVbay7XK2nlzvFALW3BA5OkvBnbs0poku4EsRpDMndDVnM58EU/8D3ZcoVehWg== dependencies: hoek "4.x.x" -tough-cookie@~2.3.0, tough-cookie@~2.3.3: +tough-cookie@~2.3.0: version "2.3.4" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" + integrity sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA== dependencies: punycode "^1.4.1" +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +toxic@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toxic/-/toxic-1.0.1.tgz#8c2e2528da591100adc3883f2c0e56acfb1c7288" + integrity sha512-WI3rIGdcaKULYg7KVoB0zcjikqvcYYvcuT6D89bFPz2rVR0Rl0PK6x8/X62rtdLtBKIE985NzVf/auTtGegIIg== + dependencies: + lodash "^4.17.10" + traceur@0.0.105: version "0.0.105" resolved "https://registry.yarnpkg.com/traceur/-/traceur-0.0.105.tgz#5cf9dee83d6b77861c3d6c44d53859aed7ab0479" + integrity sha512-WCcn9XUOl8ZxAlWFvZK2N36bwXwc+WqB72rMx8/XXA57ba3mtz/L9piMxiefM5RwFZlxK22SC/yKKQw1VcJsXA== dependencies: commander "2.9.x" glob "5.0.x" @@ -9248,61 +11063,84 @@ traceur@0.0.105: source-map-support "~0.2.8" trim-lines@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-1.1.1.tgz#da738ff58fa74817588455e30b11b85289f2a396" + version "1.1.3" + resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-1.1.3.tgz#839514be82428fd9e7ec89e35081afe8f6f93115" + integrity sha512-E0ZosSWYK2mkSu+KEtQ9/KqarVjA9HztOSX+9FDdNacRAq29RRV6ZQNgob3iuW8Htar9vAfEa6yyt5qBAHZDBA== trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw== trim-trailing-lines@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz#e0ec0810fd3c3f1730516b45f49083caaf2774d9" + version "1.1.4" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0" + integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ== trim@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + integrity sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ== trough@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.2.tgz#7f1663ec55c480139e2de5e486c6aef6cc24a535" + version "1.0.5" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" + integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== tslib@^1.6.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw== tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== dependencies: safe-buffer "^5.0.1" tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== -type-is@~1.6.15, type-is@~1.6.16: - version "1.6.16" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" - mime-types "~2.1.18" + mime-types "~2.1.24" type-of@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/type-of/-/type-of-2.0.1.tgz#e72a1741896568e9f628378d816d6912f7f23972" + integrity sha512-39wxbwHdQ2sTiBB8wAzKfQ9GN+om8w+sjNWzr+vZJR5AMD5J+J7Yc8AtXnU9r/r2c8XiDZ/smxutDmZehX/qpQ== -ua-parser-js@^0.7.18: - version "0.7.18" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.18.tgz#a7bfd92f56edfb117083b69e31d2aa8882d4b1ed" +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== -uglify-js@^2.6, uglify-js@^2.6.1: +type@^2.7.2: + version "2.7.2" + resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" + integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== + +ua-parser-js@^0.7.30: + version "0.7.31" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.31.tgz#649a656b191dffab4f21d5e053e27ca17cbff5c6" + integrity sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ== + +uglify-js@^2.6.1: version "2.8.29" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + integrity sha512-qLq/4y2pjcU3vhlhseXGGJ7VbFO4pBANu0kwl8VCa9KEI0V8VfZIx2Fy3w01iSTA/pGwKZSmu/+I4etLNDdt5w== dependencies: source-map "~0.5.1" yargs "~3.10.0" @@ -9312,6 +11150,7 @@ uglify-js@^2.6, uglify-js@^2.6.1: uglify-js@~2.7.3: version "2.7.5" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" + integrity sha512-RvbIYn4DIadCg1MV7YP7OrpxnVrtEieZzbK0KSQvwWGAHojqWJxInkQhmtYGRo9PTwwkJkljIgzMyA1VitEc4Q== dependencies: async "~0.2.6" source-map "~0.5.1" @@ -9321,32 +11160,33 @@ uglify-js@~2.7.3: uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" - -ultron@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + integrity sha512-vb2s1lYx2xBtUgy+ta+b2J/GLVUR+wmpINwHePmPRhOsIVCG2wDzKJ0n14GslH1BifsqVzSOwQhRaCAsZ/nI4Q== unc-path-regex@^0.1.0, unc-path-regex@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" + integrity sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg== underscore.string@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.4.tgz#2c2a3f9f83e64762fdc45e6ceac65142864213db" + version "3.3.6" + resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.6.tgz#ad8cf23d7423cb3b53b898476117588f4e2f9159" + integrity sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ== dependencies: - sprintf-js "^1.0.3" + sprintf-js "^1.1.1" util-deprecate "^1.0.2" unherit@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.1.tgz#132748da3e88eab767e08fabfbb89c5e9d28628c" + version "1.1.3" + resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" + integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ== dependencies: - inherits "^2.0.1" - xtend "^4.0.1" + inherits "^2.0.0" + xtend "^4.0.0" unified@^6.0.0, unified@^6.1.5: version "6.2.0" resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba" + integrity sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA== dependencies: bail "^1.0.0" extend "^3.0.0" @@ -9356,61 +11196,77 @@ unified@^6.0.0, unified@^6.1.5: x-is-string "^0.1.0" union-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== dependencies: arr-union "^3.1.0" get-value "^2.0.6" is-extendable "^0.1.1" - set-value "^0.4.3" + set-value "^2.0.1" uniq@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA== uniqs@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ== unique-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + integrity sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg== dependencies: crypto-random-string "^1.0.0" unist-builder@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-1.0.2.tgz#8c3b9903ef64bcfb117dd7cf6a5d98fc1b3b27b6" + version "1.0.4" + resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-1.0.4.tgz#e1808aed30bd72adc3607f25afecebef4dd59e17" + integrity sha512-v6xbUPP7ILrT15fHGrNyHc1Xda8H3xVhP7/HAIotHOhVPjH5dCXA097C3Rry1Q2O+HbOLCao4hfPB+EYEjHgVg== dependencies: object-assign "^4.1.0" unist-util-generated@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.2.tgz#8b993f9239d8e560be6ee6e91c3f7b7208e5ce25" + version "1.1.6" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.6.tgz#5ab51f689e2992a472beb1b35f2ce7ff2f324d4b" + integrity sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg== -unist-util-is@^2.0.0, unist-util-is@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.2.tgz#1193fa8f2bfbbb82150633f3a8d2eb9a1c1d55db" +unist-util-is@^2.0.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.3.tgz#459182db31f4742fceaea88d429693cbf0043d20" + integrity sha512-4WbQX2iwfr/+PfM4U3zd2VNXY+dWtZsN1fLnWEi2QQXA4qyDYAZcDMfXUX0Cu6XZUHHAO9q4nyxxLT4Awk1qUA== -unist-util-modify-children@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/unist-util-modify-children/-/unist-util-modify-children-1.1.2.tgz#c7f1b91712554ee59c47a05b551ed3e052a4e2d1" +unist-util-is@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd" + integrity sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A== + +unist-util-modify-children@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unist-util-modify-children/-/unist-util-modify-children-2.0.0.tgz#9c9c30d4e32502aabb3fde10d7872a17c86801e2" + integrity sha512-HGrj7JQo9DwZt8XFsX8UD4gGqOsIlCih9opG6Y+N11XqkBGKzHo8cvDi+MfQQgiZ7zXRUiQREYHhjOBHERTMdg== dependencies: array-iterate "^1.0.0" unist-util-position@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.0.1.tgz#8e220c24658239bf7ddafada5725ed0ea1ebbc26" + version "3.1.0" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47" + integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA== unist-util-remove-position@^1.0.0, unist-util-remove-position@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz#86b5dad104d0bbfbeb1db5f5c92f3570575c12cb" + version "1.1.4" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz#ec037348b6102c897703eee6d0294ca4755a2020" + integrity sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A== dependencies: unist-util-visit "^1.1.0" unist-util-select@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/unist-util-select/-/unist-util-select-1.5.0.tgz#a93c2be8c0f653827803b81331adec2aa24cd933" + integrity sha512-/Ukg/X76ljCVYbisAGJm0HOgy3MfYmjAdVOYUfBleuTtOmRZVzbW7+ZAQqJQi6ObITtcpRv7uNwoUG1RF7vJ9Q== dependencies: css-selector-parser "^1.1.0" debug "^2.2.0" @@ -9419,20 +11275,31 @@ unist-util-select@^1.5.0: unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6" + integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ== unist-util-visit-children@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/unist-util-visit-children/-/unist-util-visit-children-1.1.2.tgz#bd78b53db9644b9c339ac502854f15471f964f5b" + version "1.1.4" + resolved "https://registry.yarnpkg.com/unist-util-visit-children/-/unist-util-visit-children-1.1.4.tgz#e8a087e58a33a2815f76ea1901c15dec2cb4b432" + integrity sha512-sA/nXwYRCQVRwZU2/tQWUqJ9JSFM1X3x7JIOsIgSzrFHcfVt6NkzDtKzyxg2cZWkCwGF9CO8x4QNZRJRMK8FeQ== + +unist-util-visit-parents@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz#25e43e55312166f3348cae6743588781d112c1e9" + integrity sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g== + dependencies: + unist-util-is "^3.0.0" unist-util-visit@^1.0.0, unist-util-visit@^1.1.0, unist-util-visit@^1.1.1, unist-util-visit@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.3.1.tgz#c019ac9337a62486be58531bc27e7499ae7d55c7" + version "1.4.1" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3" + integrity sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw== dependencies: - unist-util-is "^2.1.1" + unist-util-visit-parents "^2.0.0" units-css@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/units-css/-/units-css-0.4.0.tgz#d6228653a51983d7c16ff28f8b9dc3b1ffed3a07" + integrity sha512-WijzYC+chwzg2D6HmNGUSzPAgFRJfuxVyG9oiY28Ei5E+g6fHoPkhXUr5GV+5hE/RTHZNd9SuX2KLioYHdttoA== dependencies: isnumeric "^0.2.0" viewport-dimensions "^0.2.0" @@ -9440,14 +11307,17 @@ units-css@^0.4.0: universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== dependencies: has-value "^0.3.1" isobject "^3.0.0" @@ -9455,10 +11325,12 @@ unset-value@^1.0.0: unzip-response@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + integrity sha512-N0XH6lqDtFH84JxptQoZYmloF4nzrQqqrAymNj+/gW60AO2AZgOcf4O/nUXJcYfyQkqvMo9lSupBZmmgvuVXlw== -update-check@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/update-check/-/update-check-1.5.1.tgz#24fc52266273cb8684d2f1bf9687c0e52dcf709f" +update-check@1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/update-check/-/update-check-1.5.2.tgz#2fe09f725c543440b3d7dabe8971f2d5caaedc28" + integrity sha512-1TrmYLuLj/5ZovwUS7fFd1jMH3NnFDN1y1A8dboedIDt7zs/zJMo6TwwlhYKkSeEwzleeiSBV5/3c9ufAQWDaQ== dependencies: registry-auth-token "3.3.2" registry-url "3.1.0" @@ -9466,6 +11338,7 @@ update-check@1.5.1: update-notifier@^2.3.0: version "2.5.0" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" + integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== dependencies: boxen "^1.2.1" chalk "^2.0.1" @@ -9478,13 +11351,22 @@ update-notifier@^2.3.0: semver-diff "^2.0.0" xdg-basedir "^3.0.0" +uri-js@^4.2.1, uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== url-loader@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.6.2.tgz#a007a7109620e9d988d14bce677a1decb9a993f7" + integrity sha512-h3qf9TNn53BpuXTTcpC+UehiRrl0Cv45Yr/xWayApjw6G8Bg2dGke7rIwDQ39piciWCWrC+WiqLjOh3SUp9n0Q== dependencies: loader-utils "^1.0.2" mime "^1.4.1" @@ -9493,123 +11375,162 @@ url-loader@^0.6.2: url-parse-lax@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA== dependencies: prepend-http "^1.0.1" -url-parse@^1.1.8, url-parse@~1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.1.tgz#4dec9dad3dc8585f862fed461d2e19bbf623df30" +url-parse@^1.1.8, url-parse@^1.4.3, url-parse@^1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== dependencies: - querystringify "^2.0.0" + querystringify "^2.1.1" requires-port "^1.0.0" url-to-options@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" + integrity sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A== url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ== dependencies: punycode "1.3.2" querystring "0.2.0" use@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.0.tgz#14716bf03fdfefd03040aef58d8b4b85f3a7c544" - dependencies: - kind-of "^6.0.2" + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== user-home@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" + integrity sha512-aggiKfEEubv3UwRNqTzLInZpAOmKzwdHqEBmW/hBA/mt99eg+b4VrX6i+IRLxU8+WJYfa33rGwRseg4eElUgsQ== -util-deprecate@^1.0.2, util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== util@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ== dependencies: inherits "2.0.1" util@^0.10.3: version "0.10.4" resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" + integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== dependencies: inherits "2.0.3" -utila@~0.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226" +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" utila@~0.4: version "0.4.0" resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0: - version "3.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" +uuid@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" + integrity sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA== + +uuid@^3.0.0, uuid@^3.1.0, uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uuid@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== v8-compile-cache@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-1.1.2.tgz#8d32e4f16974654657e676e0e467a348e89b0dc4" + integrity sha512-ejdrifsIydN1XDH7EuR2hn8ZrkRKUYF7tUcBjBy/lhrCvs2K+zRlbW9UHc0IQ9RsYFZJFqJrieoIHfkCa0DBRA== v8flags@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" + integrity sha512-SKfhk/LlaXzvtowJabLZwD4K6SGRYeoxA7KJeISlUMAB/NT4CBkZjMq3WceX2Ckm4llwqYVo8TICgsDYCBU2tA== dependencies: user-home "^1.1.1" valid-url@^1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200" + integrity sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA== validate-npm-package-license@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338" + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -value-equal@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-0.4.0.tgz#c5bdd2f54ee093c04839d71ce2e4758a6890abc7" +value-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" + integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== vendors@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801" + version "1.0.4" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" + integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== dependencies: assert-plus "^1.0.0" core-util-is "1.0.2" extsprintf "^1.2.0" vfile-location@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.3.tgz#083ba80e50968e8d420be49dd1ea9a992131df77" + version "2.0.6" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.6.tgz#8a274f39411b8719ea5728802e10d9e0dff1519e" + integrity sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA== vfile-message@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.0.1.tgz#51a2ccd8a6b97a7980bb34efb9ebde9632e93677" + version "1.1.1" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.1.1.tgz#5833ae078a1dfa2d96e9647886cd32993ab313e1" + integrity sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA== dependencies: unist-util-stringify-position "^1.1.1" vfile@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a" + integrity sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w== dependencies: is-buffer "^1.1.4" replace-ext "1.0.0" @@ -9619,68 +11540,78 @@ vfile@^2.0.0: viewport-dimensions@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/viewport-dimensions/-/viewport-dimensions-0.2.0.tgz#de740747db5387fd1725f5175e91bac76afdf36c" + integrity sha512-94JqlKxEP4m7WO+N3rm4tFRGXZmXXwSPQCoV+EPxDnn8YAGiLU3T+Ha1imLreAjXsHl0K+ELnIqv64i1XZHLFQ== vm-browserify@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" + integrity sha512-NyZNR3WDah+NPkjh/YmhuWSsT4a0mF0BJYgUmvrJ70zxjTXh5Y2Asobxlh0Nfs0PCFB5FVpRJft7NozAWFMwLQ== dependencies: indexof "0.0.1" -walker@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - dependencies: - makeerror "1.0.x" +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== -warning@2.x: - version "2.1.0" - resolved "https://registry.yarnpkg.com/warning/-/warning-2.1.0.tgz#21220d9c63afc77a8c92111e011af705ce0c6901" +walker@~1.0.5: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +warning@4.x, warning@^4.0.1, warning@^4.0.2, warning@^4.0.3, warning@~4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== dependencies: loose-envify "^1.0.0" warning@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" - dependencies: - loose-envify "^1.0.0" - -warning@^4.0.1, warning@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.1.tgz#66ce376b7fbfe8a887c22bdf0e7349d73d397745" + integrity sha512-jMBt6pUrKn5I+OGgtQ4YZLdhIeJmObddh6CsibPxyQ5yPZm1XExSyzC1LCNX7BzhxWgiHmizBWJTHJIjMjTQYQ== dependencies: loose-envify "^1.0.0" watch@~0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" + integrity sha512-FAk18nzhYggg939xgRRLJjvqmAKZciO24wr8neoxNPl87w8J3m784wxL4zFBwME+0gNQ2Sv/vfsCrUxPxU2Dmg== watchpack@^0.2.1: version "0.2.9" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-0.2.9.tgz#62eaa4ab5e5ba35fdfc018275626e3c0f5e3fb0b" + integrity sha512-hmLWdxNfe0Ou1xaRj+ublbOYUaZJfVz1VuHQfERLVlUrLS21gUaGa2gWRl8L5Ej1aUS3KxFN+1qoWK4kZLMvKw== dependencies: async "^0.9.0" chokidar "^1.0.0" graceful-fs "^4.1.2" web-namespaces@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.2.tgz#c8dc267ab639505276bae19e129dbd6ae72b22b4" + version "1.1.4" + resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" + integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== webpack-configurator@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/webpack-configurator/-/webpack-configurator-0.3.1.tgz#d16802afa674101a0cbfa6fc344d415c9649540b" + integrity sha512-x+8/sc7lURAVorBLAqs/ag0bMMrk1t4LWJxnL1iVEvFCeu1lRshXEcZCXV9pJDIbJb11nN+QpAgrbA4xBLBDXQ== dependencies: lodash "3.10.1" webpack-core@^0.4.8: version "0.4.8" resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.4.8.tgz#07fc55aba81d17dba8cae5a43d6bd69236f8b5f8" + integrity sha512-r0eyc4Iwe8RiGsy6d7+ido/xQ9iYqGSh4H8WrCdixrGHPKWn73CrX4f76xaJ/rcSk/82/2PqxAkeMdyeQzKRuQ== dependencies: source-map "~0.1.38" webpack-core@~0.6.9: version "0.6.9" resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2" + integrity sha512-P6ZUGXn5buTEZyTStCHHLwtWGKSm/jA629Zgp4pcHSsy60CCsT9MaHDxNIPL+GGJ2KwOgI6ORwQtHcrYHAt2UQ== dependencies: source-list-map "~0.1.7" source-map "~0.4.1" @@ -9688,6 +11619,7 @@ webpack-core@~0.6.9: webpack-dev-middleware@^1.10.2, webpack-dev-middleware@^1.8.4: version "1.12.2" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e" + integrity sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A== dependencies: memory-fs "~0.4.1" mime "^1.5.0" @@ -9698,6 +11630,7 @@ webpack-dev-middleware@^1.10.2, webpack-dev-middleware@^1.8.4: webpack-dev-server@^1.16.1: version "1.16.5" resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-1.16.5.tgz#0cbd5f2d2ac8d4e593aacd5c9702e7bbd5e59892" + integrity sha512-on9j8SBuJXa2lzyIAv0DasJT8SteshUrEjjKc/mc8D68U7RN0mIBZksAcjnPW72RSJa9scWZ+C+Dme76LDH+lA== dependencies: compression "^1.5.2" connect-history-api-fallback "^1.3.0" @@ -9714,23 +11647,25 @@ webpack-dev-server@^1.16.1: webpack-dev-middleware "^1.10.2" webpack-hot-middleware@^2.13.2: - version "2.22.2" - resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.22.2.tgz#623b77ce591fcd4e1fb99f18167781443e50afac" + version "2.25.2" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.25.2.tgz#f7f936f3871d8c4eb95ecdf23a34e9cefe9806e8" + integrity sha512-CVgm3NAQyfdIonRvXisRwPTUYuSbyZ6BY7782tMeUzWOO7RmVI2NaBYuCp41qyD4gYCkJyTneAJdK69A13B0+A== dependencies: - ansi-html "0.0.7" - html-entities "^1.2.0" - querystring "^0.2.0" - strip-ansi "^3.0.0" + ansi-html-community "0.0.8" + html-entities "^2.1.0" + strip-ansi "^6.0.0" webpack-md5-hash@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/webpack-md5-hash/-/webpack-md5-hash-0.0.5.tgz#d9f1899ead664459dd8b6b0c926ac71cfbd7bc7a" + integrity sha512-D58vvw1wsOl+pBctRjHoInq4CBsVHIkyjF9nyUo1yGJunGtaxjkMLhHTPXwGwC/Xe8MR9rKLbdQvfnIt/hBu4w== dependencies: md5 "^2.0.0" webpack-sources@^0.1.0: version "0.1.5" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.1.5.tgz#aa1f3abf0f0d74db7111c40e500b84f966640750" + integrity sha512-8CXYfPZkWvY0VWadHDQ3q2hUBqk2IJKTTdDPYb5hwnGVVma8bzqTJEerUDrpWwXnuY9vxZ0mGEnjYD0XLhRHeQ== dependencies: source-list-map "~0.1.7" source-map "~0.5.3" @@ -9738,6 +11673,7 @@ webpack-sources@^0.1.0: webpack-sources@^0.2.0: version "0.2.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.2.3.tgz#17c62bfaf13c707f9d02c479e0dcdde8380697fb" + integrity sha512-iqanNZjOHLdPn/R0e/nKVn90dm4IsUMxKam0MZD1btWhFub/Cdo1nWdMio6yEqBc0F8mEieOjc+jfBSXwna94Q== dependencies: source-list-map "^1.1.1" source-map "~0.5.3" @@ -9745,10 +11681,12 @@ webpack-sources@^0.2.0: webpack-stats-plugin@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/webpack-stats-plugin/-/webpack-stats-plugin-0.1.5.tgz#29e5f12ebfd53158d31d656a113ac1f7b86179d9" + integrity sha512-BirW2q4JI49zJVD315kRu6n2gdT9PsHwgOfoF+IQJbuXi662SJ/nTia6xrepdFqJ4k0oqAJL29pR1XKmcUHf5g== webpack-validator@^2.2.7: version "2.3.0" resolved "https://registry.yarnpkg.com/webpack-validator/-/webpack-validator-2.3.0.tgz#235c6ea69aa930a90262bbbf9bd45ad8bd497310" + integrity sha512-+21DlA7yldOyIsRimbA9xlEkFJQ16xW8xi/T5/pNMwBMXYlbE5EakgwR3zdCltJaVnyVjH0oXPaLySQEby0R7w== dependencies: basename "0.1.2" chalk "1.1.3" @@ -9765,6 +11703,7 @@ webpack-validator@^2.2.7: webpack@^1.13.3: version "1.15.0" resolved "https://registry.yarnpkg.com/webpack/-/webpack-1.15.0.tgz#4ff31f53db03339e55164a9d468ee0324968fe98" + integrity sha512-+8bxNSHMZCWBa6hi++2A2pw9GmLUWY6lII+aIXlgUPpB+ClNrUKgP8hx0w+hxjWhX81hclUYPGFg+7NxgLTUYQ== dependencies: acorn "^3.0.0" async "^1.3.0" @@ -9782,70 +11721,85 @@ webpack@^1.13.3: watchpack "^0.2.1" webpack-core "~0.6.9" -websocket-driver@>=0.5.1: - version "0.7.0" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== dependencies: - http-parser-js ">=0.4.0" + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" websocket-extensions ">=0.1.1" websocket-extensions@>=0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== whatwg-fetch@>=0.10.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" + version "3.6.2" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" + integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== when@^3.7.5: version "3.7.8" resolved "https://registry.yarnpkg.com/when/-/when-3.7.8.tgz#c7130b6a7ea04693e842cdc9e7a1f2aa39a39f82" + integrity sha512-5cZ7mecD3eYcMiCH4wtRPA5iFJZ50BJYDfckI5RRpQiktMiYTcn0ccLTZOvcbBume+1304fQztxeNzNS9Gvrnw== whet.extend@~0.9.9: version "0.9.9" resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" + integrity sha512-mmIPAft2vTgEILgPeZFqE/wWh24SEsR/k+N9fJ3Jxrz44iDFy9aemCxdksfURSHYFCLmvs/d/7Iso5XjPpNfrA== which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== which@1, which@^1.0.9, which@^1.1.1, which@^1.2.12, which@^1.2.14, which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: - string-width "^1.0.2 || 2" + string-width "^1.0.2 || 2 || 3 || 4" widest-line@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.0.tgz#0142a4e8a243f8882c0233aa0e0281aa76152273" + version "2.0.1" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" + integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== dependencies: string-width "^2.1.1" window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + integrity sha512-1pTPQDKTdd61ozlKGNCjhNRd+KPmgLSGa3mZTHoOliaGcESD8G1PXhh7c1fgiPjVbNVfgy2Faw4BI8/m0cC8Mg== window-size@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" + integrity sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw== wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + integrity sha512-xSBsCeh+g+dinoBv3GAOWM4LcVVO68wLXRanibtBSdUvkGWQRGeE9P7IwU9EmDDi4jA6L44lz15CGMwdw9N5+Q== wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw== wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw== dependencies: string-width "^1.0.1" strip-ansi "^3.0.1" @@ -9853,71 +11807,73 @@ wrap-ansi@^2.0.0: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== write-file-atomic@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== dependencies: graceful-fs "^4.1.11" imurmurhash "^0.1.4" signal-exit "^3.0.2" -ws@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-3.0.0.tgz#98ddb00056c8390cb751e7788788497f99103b6c" - dependencies: - safe-buffer "~5.0.1" - ultron "~1.1.0" +ws@^7.5.0: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== -ws@~3.3.1: - version "3.3.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" - dependencies: - async-limiter "~1.0.0" - safe-buffer "~5.1.0" - ultron "~1.1.0" +ws@~7.4.2: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== x-is-array@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/x-is-array/-/x-is-array-0.1.0.tgz#de520171d47b3f416f5587d629b89d26b12dc29d" + integrity sha512-goHPif61oNrr0jJgsXRfc8oqtYzvfiMJpTqwE7Z4y9uH+T3UozkGqQ4d2nX9mB9khvA8U2o/UbPOFjgC7hLWIA== x-is-string@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" + integrity sha512-GojqklwG8gpzOVEVki5KudKNoq7MbbjYZCbyWzEz7tyPA7eleiE0+ePwOWQQRb5fm86rD3S8Tc0tSFf3AOv50w== xdg-basedir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" + integrity sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ== -xmlhttprequest-ssl@~1.5.4: - version "1.5.5" - resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" +xmlhttprequest-ssl@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz#03b713873b01659dfa2c1c5d056065b27ddc2de6" + integrity sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q== xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + version "3.2.2" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" + integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - -yallist@^3.0.0, yallist@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" + integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== yaml-loader@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/yaml-loader/-/yaml-loader-0.4.0.tgz#4aae447d13c1aa73a989d8a2a5309b0b1a3ca353" + integrity sha512-Vp2Ce8w1Lx3kLKnfktz00pFnQ9hm998XfYA3gf0dNKhy01e0lSnMUrfE18MO2Zne8yheF+95oMHo5s2KpTVfTw== dependencies: js-yaml "^3.5.2" yargs-parser@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" + integrity sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA== dependencies: camelcase "^3.0.0" lodash.assign "^4.0.6" @@ -9925,18 +11881,21 @@ yargs-parser@^2.4.0: yargs-parser@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + integrity sha512-WhzC+xgstid9MbVUktco/bf+KJG+Uu6vMX0LN1sLJvwmbCQVxb4D8LzogobonKycNasCZLdOzTAk1SK7+K7swg== dependencies: camelcase "^4.1.0" yargs-parser@^9.0.2: version "9.0.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" + integrity sha512-CswCfdOgCr4MMsT1GzbEJ7Z2uYudWyrGX8Bgh/0eyCzj/DXWdKq6a/ADufkzI1WAOIW6jYaXJvRyLhDO0kfqBw== dependencies: camelcase "^4.1.0" yargs@4.7.1: version "4.7.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.7.1.tgz#e60432658a3387ff269c028eacde4a512e438dff" + integrity sha512-T8W8Q04y0uWmRmnbBfLTFNTpn2NdYs+pJd1G7ziRjyRFqSJhMRzIznjafyLFTcK4DIGVPVs1zyH0OoSjN/k/jw== dependencies: camelcase "^3.0.0" cliui "^3.2.0" @@ -9953,14 +11912,15 @@ yargs@4.7.1: yargs-parser "^2.4.0" yargs@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.1.tgz#5052efe3446a4df5ed669c995886cc0f13702766" + integrity sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw== 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" + os-locale "^3.1.0" require-directory "^2.1.1" require-main-filename "^1.0.1" set-blocking "^2.0.0" @@ -9972,6 +11932,7 @@ yargs@^11.1.0: yargs@^9.0.0: version "9.0.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c" + integrity sha512-XS0NJoM9Iz0azh1cdgfLF5VFK6BSWfrrqA0V2tIx3fV6aGrWCseVDwOkIBg746ev0hes59od5ZvQAfdET4H0pw== dependencies: camelcase "^4.1.0" cliui "^3.2.0" @@ -9990,6 +11951,7 @@ yargs@^9.0.0: yargs@~3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + integrity sha512-QFzUah88GAGy9lyDKGBqZdkYApt63rCXYBGYnEP4xDJPXNqXXnBDACnbrXnViV6jRSqAePwrATi2i8mfYm4L1A== dependencies: camelcase "^1.0.2" cliui "^2.1.0" @@ -9999,10 +11961,12 @@ yargs@~3.10.0: yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" + integrity sha512-8HFIh676uyGYP6wP13R/j6OJ/1HwJ46snpvzE7aHAN3Ryqh2yX6Xox2B4CUmTwwOIzlG3Bs7ocsP5dZH/R1Qbg== yoga-layout@^1.9.3: version "1.9.3" resolved "https://registry.yarnpkg.com/yoga-layout/-/yoga-layout-1.9.3.tgz#f851935187f6d2945639b79c57ee0eac2fb7d886" + integrity sha512-DFN0q9IGk/MOkv5/YQurbjWaE2OAzWzM5nKnWFTiJoQEo/7OZ07wtOXuUbZlnSxbwqBhtGc4x2PD4KqBXoVvDg== dependencies: autogypi "^0.2.2" nbind "^0.3.14" @@ -10011,6 +11975,7 @@ yoga-layout@^1.9.3: yurnalist@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/yurnalist/-/yurnalist-0.2.1.tgz#2d32b9618ab6491891c131bd90a5295e19fd4bad" + integrity sha512-Oh/URqMNUTvU4Jq8KZN9+KKWb0qTIu6W6u2oKCBLdOkeiJ/BtGG8NgQJLVm3cQ5IsuD0bT5tDsxfMwV3UmKIAg== dependencies: chalk "^1.1.1" death "^1.0.0" @@ -10030,5 +11995,6 @@ yurnalist@^0.2.1: strip-bom "^3.0.0" zwitch@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.3.tgz#159fae4b3f737db1e42bf321d3423e4c96688a18" + version "1.0.5" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920" + integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw== From 40c600434e22f5b3a763c857bf52fd1c23e3b73f Mon Sep 17 00:00:00 2001 From: Damoness Date: Mon, 3 Oct 2022 14:42:06 -0700 Subject: [PATCH 335/347] Update flex-direction.md (#1007) Summary: Spelling mistake Pull Request resolved: https://github.com/facebook/yoga/pull/1007 Reviewed By: yungsters Differential Revision: D40027434 Pulled By: yungsters fbshipit-source-id: 8d13e54e9cb9633282dadadad545d1b92ae3ba5c --- website/contents/properties/flex-direction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/contents/properties/flex-direction.md b/website/contents/properties/flex-direction.md index ec88778a..95fbf6ca 100644 --- a/website/contents/properties/flex-direction.md +++ b/website/contents/properties/flex-direction.md @@ -8,7 +8,7 @@ hasPlayground: true Flex direction controls the direction in which children of a node are laid out. This is also referred to as the main axis. The main axis is the direction in -which children are laid out. The cross axis the the axis perpendicular to the +which children are laid out. The cross axis is the axis perpendicular to the main axis, or the axis which wrapping lines are laid out in. **ROW (DEFAULT)** Align children from left to right. If [wrapping](/docs/flex-wrap) is enabled then From 4ca1bfeff64df2b47f42bb88cdb3a497276b48a1 Mon Sep 17 00:00:00 2001 From: Nick Gerleman Date: Mon, 3 Oct 2022 15:50:39 -0700 Subject: [PATCH 336/347] Update playground lockfile Summary: Yoga playground within the website has a separate package.json from the website. Update that as well, which is responsible for 4 open dependabot PRs. Reviewed By: yungsters Differential Revision: D40026579 fbshipit-source-id: 2b82bdf2e90b8f433824f37b5e83750c338c9dfc --- website/src/components/Playground/yarn.lock | 2130 +++++++++---------- 1 file changed, 1034 insertions(+), 1096 deletions(-) diff --git a/website/src/components/Playground/yarn.lock b/website/src/components/Playground/yarn.lock index 9002e096..6c694475 100644 --- a/website/src/components/Playground/yarn.lock +++ b/website/src/components/Playground/yarn.lock @@ -2,360 +2,424 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" - integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== +"@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== dependencies: - "@babel/highlight" "^7.0.0" + "@babel/highlight" "^7.18.6" -"@babel/generator@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.5.5.tgz#873a7f936a3c89491b43536d12245b626664e3cf" - integrity sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ== +"@babel/generator@^7.19.3": + version "7.19.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.19.3.tgz#d7f4d1300485b4547cb6f94b27d10d237b42bf59" + integrity sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ== dependencies: - "@babel/types" "^7.5.5" + "@babel/types" "^7.19.3" + "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" - trim-right "^1.0.1" -"@babel/helper-builder-react-jsx@^7.3.0": - version "7.3.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz#a1ac95a5d2b3e88ae5e54846bf462eeb81b318a4" - integrity sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw== +"@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== dependencies: - "@babel/types" "^7.3.0" - esutils "^2.0.0" + "@babel/types" "^7.18.6" -"@babel/helper-create-class-features-plugin@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.5.5.tgz#401f302c8ddbc0edd36f7c6b2887d8fa1122e5a4" - integrity sha512-ZsxkyYiRA7Bg+ZTRpPvB6AbOFKTFFK4LrvTet8lInm0V468MWCaSYJE+I7v2z2r8KNLtYiV+K5kTCnR7dvyZjg== +"@babel/helper-create-class-features-plugin@^7.18.6": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz#bfd6904620df4e46470bae4850d66be1054c404b" + integrity sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-member-expression-to-functions" "^7.5.5" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.5.5" - "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-split-export-declaration" "^7.18.6" -"@babel/helper-function-name@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" - integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + +"@babel/helper-function-name@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" + integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== dependencies: - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/template" "^7.18.10" + "@babel/types" "^7.19.0" -"@babel/helper-get-function-arity@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" - integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.18.6" -"@babel/helper-member-expression-to-functions@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz#1fb5b8ec4453a93c439ee9fe3aeea4a84b76b590" - integrity sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA== +"@babel/helper-member-expression-to-functions@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz#1531661e8375af843ad37ac692c132841e2fd815" + integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg== dependencies: - "@babel/types" "^7.5.5" + "@babel/types" "^7.18.9" -"@babel/helper-optimise-call-expression@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" - integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g== +"@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.18.6" -"@babel/helper-plugin-utils@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" - integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== - -"@babel/helper-replace-supers@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz#f84ce43df031222d2bad068d2626cb5799c34bc2" - integrity sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg== +"@babel/helper-optimise-call-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" + integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== dependencies: - "@babel/helper-member-expression-to-functions" "^7.5.5" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.5.5" - "@babel/types" "^7.5.5" + "@babel/types" "^7.18.6" -"@babel/helper-split-export-declaration@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" - integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== - dependencies: - "@babel/types" "^7.4.4" +"@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz#4796bb14961521f0f8715990bee2fb6e51ce21bf" + integrity sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw== -"@babel/highlight@^7.0.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" - integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== +"@babel/helper-replace-supers@^7.18.9": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz#e1592a9b4b368aa6bdb8784a711e0bcbf0612b78" + integrity sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw== dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/traverse" "^7.19.1" + "@babel/types" "^7.19.0" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" + integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== + +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" chalk "^2.0.0" - esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.4.4", "@babel/parser@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.5.tgz#02f077ac8817d3df4a832ef59de67565e71cca4b" - integrity sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g== +"@babel/parser@^7.18.10", "@babel/parser@^7.19.3": + version "7.19.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.19.3.tgz#8dd36d17c53ff347f9e55c328710321b49479a9a" + integrity sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ== "@babel/plugin-proposal-class-properties@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz#a974cfae1e37c3110e71f3c6a2e48b8e71958cd4" - integrity sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A== + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.5.5" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-syntax-flow@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz#a765f061f803bc48f240c26f8747faf97c26bf7c" - integrity sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg== +"@babel/plugin-syntax-flow@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz#774d825256f2379d06139be0c723c4dd444f3ca1" + integrity sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-syntax-jsx@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7" - integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw== +"@babel/plugin-syntax-jsx@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-flow-strip-types@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.4.4.tgz#d267a081f49a8705fc9146de0768c6b58dccd8f7" - integrity sha512-WyVedfeEIILYEaWGAUWzVNyqG4sfsNooMhXWsu/YzOvVGcsnPb5PguysjJqI3t3qiaYj0BR8T2f5njdjTGe44Q== + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz#e9e8606633287488216028719638cbbb2f2dde8f" + integrity sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.2.0" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/plugin-syntax-flow" "^7.18.6" -"@babel/plugin-transform-react-display-name@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz#ebfaed87834ce8dc4279609a4f0c324c156e3eb0" - integrity sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A== +"@babel/plugin-transform-react-display-name@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415" + integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-react-jsx-self@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz#461e21ad9478f1031dd5e276108d027f1b5240ba" - integrity sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg== +"@babel/plugin-transform-react-jsx-development@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" + integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" + "@babel/plugin-transform-react-jsx" "^7.18.6" -"@babel/plugin-transform-react-jsx-source@^7.0.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.5.0.tgz#583b10c49cf057e237085bcbd8cc960bd83bd96b" - integrity sha512-58Q+Jsy4IDCZx7kqEZuSDdam/1oW8OdDX8f+Loo6xyxdfg1yF0GE2XNJQSTZCaMol93+FBzpWiPEwtbMloAcPg== +"@babel/plugin-transform-react-jsx@^7.18.6": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz#b3cbb7c3a00b92ec8ae1027910e331ba5c500eb9" + integrity sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/plugin-syntax-jsx" "^7.18.6" + "@babel/types" "^7.19.0" -"@babel/plugin-transform-react-jsx@^7.0.0": - version "7.3.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz#f2cab99026631c767e2745a5368b331cfe8f5290" - integrity sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg== +"@babel/plugin-transform-react-pure-annotations@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844" + integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ== dependencies: - "@babel/helper-builder-react-jsx" "^7.3.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/preset-react@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.0.0.tgz#e86b4b3d99433c7b3e9e91747e2653958bc6b3c0" - integrity sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w== + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" + integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-react-jsx-self" "^7.0.0" - "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-react-display-name" "^7.18.6" + "@babel/plugin-transform-react-jsx" "^7.18.6" + "@babel/plugin-transform-react-jsx-development" "^7.18.6" + "@babel/plugin-transform-react-pure-annotations" "^7.18.6" -"@babel/template@^7.1.0": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237" - integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw== +"@babel/template@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" + integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.4.4" - "@babel/types" "^7.4.4" + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" -"@babel/traverse@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.5.5.tgz#f664f8f368ed32988cd648da9f72d5ca70f165bb" - integrity sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ== +"@babel/traverse@^7.19.1": + version "7.19.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.19.3.tgz#3a3c5348d4988ba60884e8494b0592b2f15a04b4" + integrity sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ== dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.5.5" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.5.5" - "@babel/types" "^7.5.5" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.19.3" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.19.3" + "@babel/types" "^7.19.3" debug "^4.1.0" globals "^11.1.0" - lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.5.5.tgz#97b9f728e182785909aa4ab56264f090a028d18a" - integrity sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw== +"@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.19.3": + version "7.19.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.3.tgz#fc420e6bbe54880bce6779ffaf315f5e43ec9624" + integrity sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw== dependencies: - esutils "^2.0.2" - lodash "^4.17.13" + "@babel/helper-string-parser" "^7.18.10" + "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" -"@webassemblyjs/ast@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" - integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ== +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== dependencies: - "@webassemblyjs/helper-module-context" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/wast-parser" "1.8.5" + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" -"@webassemblyjs/floating-point-hex-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" - integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ== +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== -"@webassemblyjs/helper-api-error@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" - integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA== +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== -"@webassemblyjs/helper-buffer@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" - integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q== +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== -"@webassemblyjs/helper-code-frame@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" - integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ== +"@jridgewell/trace-mapping@^0.3.9": + version "0.3.15" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" + integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== dependencies: - "@webassemblyjs/wast-printer" "1.8.5" + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" -"@webassemblyjs/helper-fsm@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" - integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow== +"@types/json-schema@^7.0.5": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== -"@webassemblyjs/helper-module-context@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" - integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g== +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== dependencies: - "@webassemblyjs/ast" "1.8.5" - mamacro "^0.0.3" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" -"@webassemblyjs/helper-wasm-bytecode@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" - integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ== +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== -"@webassemblyjs/helper-wasm-section@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" - integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA== +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wast-printer" "1.9.0" -"@webassemblyjs/ieee754@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" - integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g== +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" - integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A== +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" - integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw== +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== -"@webassemblyjs/wasm-edit@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" - integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q== +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/helper-wasm-section" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" - "@webassemblyjs/wasm-opt" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" - "@webassemblyjs/wast-printer" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" -"@webassemblyjs/wasm-gen@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" - integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg== +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/ieee754" "1.8.5" - "@webassemblyjs/leb128" "1.8.5" - "@webassemblyjs/utf8" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" -"@webassemblyjs/wasm-opt@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" - integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q== +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" -"@webassemblyjs/wasm-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" - integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw== +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-api-error" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/ieee754" "1.8.5" - "@webassemblyjs/leb128" "1.8.5" - "@webassemblyjs/utf8" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" -"@webassemblyjs/wast-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" - integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg== +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/floating-point-hex-parser" "1.8.5" - "@webassemblyjs/helper-api-error" "1.8.5" - "@webassemblyjs/helper-code-frame" "1.8.5" - "@webassemblyjs/helper-fsm" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" "@xtuc/long" "4.2.2" -"@webassemblyjs/wast-printer@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" - integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg== +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/wast-parser" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" "@xtuc/long" "4.2.2" "@xtuc/ieee754@^1.2.0": @@ -368,46 +432,31 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -acorn@^6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.1.tgz#3ed8422d6dec09e6121cc7a843ca86a330a86b51" - integrity sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q== +acorn@^6.4.1: + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== -ajv-keywords@^3.1.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" - integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0: - version "6.10.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" - integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== +ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: - fast-deep-equal "^2.0.1" + fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -423,23 +472,23 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -aproba@^1.0.3, aproba@^1.1.1: +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== arr-flatten@^1.1.0: version "1.1.0" @@ -449,21 +498,22 @@ arr-flatten@^1.1.0: arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== -asn1.js@^4.0.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== dependencies: bn.js "^4.0.0" inherits "^2.0.1" minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" assert@^1.1.1: version "1.5.0" @@ -476,37 +526,37 @@ assert@^1.1.1: assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== async-each@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== -atob@^2.1.1: +atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== babel-loader@^8.0.6: - version "8.0.6" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb" - integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw== + version "8.2.5" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.5.tgz#d45f585e654d5a5d90f5350a779d7647c5ed512e" + integrity sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ== dependencies: - find-cache-dir "^2.0.0" - loader-utils "^1.0.2" - mkdirp "^0.5.1" - pify "^4.0.1" + find-cache-dir "^3.3.1" + loader-utils "^2.0.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.0.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" - integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw== + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== base@^0.11.1: version "0.11.2" @@ -531,15 +581,32 @@ binary-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== -bluebird@^3.5.5: - version "3.5.5" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" - integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" - integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.0.0, bn.js@^5.1.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== brace-expansion@^1.1.7: version "1.1.11" @@ -565,10 +632,17 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -brorand@^1.0.1: +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" @@ -601,26 +675,28 @@ browserify-des@^1.0.0: inherits "^2.0.1" safe-buffer "^5.1.2" -browserify-rsa@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== dependencies: - bn.js "^4.1.0" + bn.js "^5.0.0" randombytes "^2.0.1" browserify-sign@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" - integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" browserify-zlib@^0.2.0: version "0.2.0" @@ -630,19 +706,19 @@ browserify-zlib@^0.2.0: pako "~1.0.5" buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== buffer@^4.3.0: - version "4.9.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" - integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg= + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== dependencies: base64-js "^1.0.2" ieee754 "^1.1.4" @@ -651,18 +727,19 @@ buffer@^4.3.0: builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + integrity sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ== -cacache@^11.3.2: - version "11.3.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.3.tgz#8bd29df8c6a718a6ebd2d010da4d7972ae3bbadc" - integrity sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA== +cacache@^12.0.2: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== dependencies: bluebird "^3.5.5" chownr "^1.1.1" figgy-pudding "^3.5.1" glob "^7.1.4" graceful-fs "^4.1.15" + infer-owner "^1.0.3" lru-cache "^5.1.1" mississippi "^3.0.0" mkdirp "^0.5.1" @@ -693,7 +770,7 @@ camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -chalk@^2.0.0, chalk@^2.4.2: +chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -702,10 +779,10 @@ chalk@^2.0.0, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chokidar@^2.0.2: - version "2.1.6" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.6.tgz#b6cad653a929e244ce8a834244164d241fa954c5" - integrity sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g== +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== dependencies: anymatch "^2.0.0" async-each "^1.0.1" @@ -721,17 +798,30 @@ chokidar@^2.0.2: optionalDependencies: fsevents "^1.2.7" -chownr@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" - integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== - -chrome-trace-event@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" - integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== +chokidar@^3.4.1: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: - tslib "^1.9.0" + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" @@ -751,15 +841,10 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== dependencies: map-visit "^1.0.0" object-visit "^1.0.0" @@ -774,17 +859,17 @@ color-convert@^1.9.0: color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== commander@^2.20.0: - version "2.20.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" - integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== component-emitter@^1.2.1: version "1.3.0" @@ -794,7 +879,7 @@ component-emitter@^1.2.1: concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== concat-stream@^1.5.0: version "1.6.2" @@ -807,21 +892,14 @@ concat-stream@^1.5.0: typedarray "^0.0.6" console-browserify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" - integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA= - dependencies: - date-now "^0.1.4" - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ== copy-concurrently@^1.0.0: version "1.0.5" @@ -838,22 +916,22 @@ copy-concurrently@^1.0.0: copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== create-ecdh@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" - integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== dependencies: bn.js "^4.1.0" - elliptic "^6.0.0" + elliptic "^6.5.3" -create-hash@^1.1.0, create-hash@^1.1.2: +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== @@ -864,7 +942,7 @@ create-hash@^1.1.0, create-hash@^1.1.2: ripemd160 "^2.0.1" sha.js "^2.4.0" -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== @@ -894,37 +972,33 @@ crypto-browserify@^3.11.0: randomfill "^1.0.3" css-loader@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.1.0.tgz#6f008b993b8ce812e6bab57f3cbfdc7a7cf28685" - integrity sha512-MuL8WsF/KSrHCBCYaozBKlx+r7vIfUaDTEreo7wR7Vv3J6N0z6fqWjRk3e/6wjneitXN1r/Y9FTK1psYNOBdJQ== + version "3.6.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.6.0.tgz#2e4b2c7e6e2d27f8c8f28f61bffcd2e6c91ef645" + integrity sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ== dependencies: camelcase "^5.3.1" cssesc "^3.0.0" icss-utils "^4.1.1" loader-utils "^1.2.3" normalize-path "^3.0.0" - postcss "^7.0.17" + postcss "^7.0.32" postcss-modules-extract-imports "^2.0.0" postcss-modules-local-by-default "^3.0.2" - postcss-modules-scope "^2.1.0" + postcss-modules-scope "^2.2.0" postcss-modules-values "^3.0.0" - postcss-value-parser "^4.0.0" - schema-utils "^2.0.0" + postcss-value-parser "^4.1.0" + schema-utils "^2.7.0" + semver "^6.3.0" cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cyclist@~0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" - integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= - -date-now@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" - integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A== debug@^2.2.0, debug@^2.3.3: version "2.6.9" @@ -933,41 +1007,29 @@ debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@^3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - debug@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: - ms "^2.1.1" + ms "2.1.2" decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== dependencies: is-descriptor "^1.0.0" @@ -979,24 +1041,14 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - des.js@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" - integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw= + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== dependencies: inherits "^2.0.1" minimalistic-assert "^1.0.0" -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -1021,53 +1073,53 @@ duplexify@^3.4.2, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" -elliptic@^6.0.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.0.tgz#2b8ed4c891b7de3200e14412a5b8248c7af505ca" - integrity sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg== +elliptic@^6.5.3: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" + bn.js "^4.11.9" + brorand "^1.1.0" hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" - integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" -enhanced-resolve@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" - integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== +enhanced-resolve@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" + integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== dependencies: graceful-fs "^4.1.2" - memory-fs "^0.4.0" + memory-fs "^0.5.0" tapable "^1.0.0" errno@^0.1.3, errno@~0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== dependencies: prr "~1.0.1" 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" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -eslint-scope@^4.0.0: +eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== @@ -1076,26 +1128,26 @@ eslint-scope@^4.0.0: estraverse "^4.1.1" esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: - estraverse "^4.1.0" + estraverse "^5.2.0" -estraverse@^4.1.0, estraverse@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -esutils@^2.0.0, esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== events@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" - integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" @@ -1108,7 +1160,7 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== dependencies: debug "^2.3.3" define-property "^0.2.5" @@ -1121,14 +1173,14 @@ expand-brackets@^2.1.4: extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== dependencies: is-extendable "^0.1.0" extend-shallow@^3.0.0, extend-shallow@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== dependencies: assign-symbols "^1.0.0" is-extendable "^1.0.1" @@ -1147,32 +1199,44 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== figgy-pudding@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" - integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== dependencies: extend-shallow "^2.0.1" is-number "^3.0.0" repeat-string "^1.6.1" to-regex-range "^2.1.0" -find-cache-dir@^2.0.0: +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== @@ -1181,6 +1245,15 @@ find-cache-dir@^2.0.0: make-dir "^2.0.0" pkg-dir "^3.0.0" +find-cache-dir@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -1188,6 +1261,14 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + flush-write-stream@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" @@ -1199,34 +1280,27 @@ flush-write-stream@^1.0.0: for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== dependencies: map-cache "^0.2.2" from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== dependencies: inherits "^2.0.1" readable-stream "^2.0.0" -fs-minipass@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" - integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ== - dependencies: - minipass "^2.2.1" - fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + integrity sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA== dependencies: graceful-fs "^4.1.2" iferr "^0.1.5" @@ -1236,52 +1310,50 @@ fs-write-stream-atomic@^1.0.8: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@^1.2.7: - version "1.2.9" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" - integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== dependencies: + bindings "^1.5.0" nan "^2.12.1" - node-pre-gyp "^0.12.0" -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + integrity sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA== dependencies: is-glob "^3.1.0" path-dirname "^1.0.0" +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + glob@^7.1.3, glob@^7.1.4: - version "7.1.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" @@ -1291,24 +1363,19 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b" - integrity sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg== + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== dependencies: get-value "^2.0.3" has-values "^0.1.4" @@ -1317,7 +1384,7 @@ has-value@^0.3.1: has-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== dependencies: get-value "^2.0.6" has-values "^1.0.0" @@ -1326,23 +1393,24 @@ has-value@^1.0.0: has-values@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== has-values@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== dependencies: is-number "^3.0.0" kind-of "^4.0.0" hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" @@ -1352,10 +1420,10 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" -hmac-drbg@^1.0.0: +hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== dependencies: hash.js "^1.0.3" minimalistic-assert "^1.0.0" @@ -1364,14 +1432,7 @@ hmac-drbg@^1.0.0: https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= - -iconv-lite@^0.4.4: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" + integrity sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg== icss-utils@^4.0.0, icss-utils@^4.1.1: version "4.1.1" @@ -1381,41 +1442,34 @@ icss-utils@^4.0.0, icss-utils@^4.1.1: postcss "^7.0.14" ieee754@^1.1.4: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= - -ignore-walk@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== - dependencies: - minimatch "^3.0.4" + integrity sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA== imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= +infer-owner@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -1423,22 +1477,17 @@ inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + integrity sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA== inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A== dependencies: kind-of "^3.0.2" @@ -1452,10 +1501,17 @@ is-accessor-descriptor@^1.0.0: is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + integrity sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q== dependencies: binary-extensions "^1.0.0" +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -1464,7 +1520,7 @@ is-buffer@^1.1.5: is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg== dependencies: kind-of "^3.0.2" @@ -1496,7 +1552,7 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== is-extendable@^1.0.1: version "1.0.1" @@ -1508,45 +1564,38 @@ is-extendable@^1.0.1: is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + integrity sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw== dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== dependencies: kind-of "^3.0.2" +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + is-plain-obj@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" @@ -1563,24 +1612,24 @@ is-windows@^1.0.2: is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + integrity sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw== isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== js-tokens@^4.0.0: version "4.0.0" @@ -1609,17 +1658,22 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +json5@^2.1.2: + version "2.2.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== dependencies: is-buffer "^1.1.5" @@ -1629,24 +1683,33 @@ kind-of@^5.0.0: integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -loader-runner@^2.3.0: +loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== -loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" - integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== +loader-utils@^1.1.0, loader-utils@^1.2.3: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== dependencies: big.js "^5.2.2" - emojis-list "^2.0.0" + emojis-list "^3.0.0" json5 "^1.0.1" +loader-utils@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129" + integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -1655,10 +1718,12 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" -lodash@^4.17.13: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" lru-cache@^5.1.1: version "5.1.1" @@ -1675,20 +1740,22 @@ make-dir@^2.0.0: pify "^4.0.1" semver "^5.6.0" -mamacro@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" - integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA== +make-dir@^3.0.2, make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== dependencies: object-visit "^1.0.0" @@ -1701,15 +1768,23 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" -memory-fs@^0.4.0, memory-fs@~0.4.1: +memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + integrity sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ== dependencies: errno "^0.1.3" readable-stream "^2.0.1" -micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -1737,9 +1812,9 @@ miller-rabin@^4.0.0: brorand "^1.0.1" mini-css-extract-plugin@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.0.tgz#81d41ec4fe58c713a96ad7c723cdb2d0bd4d70e1" - integrity sha512-MNpRGbNA52q6U92i0qbVpQNsgk7LExy41MdAlG84FeytfDOtRIf/mCHdEgG8rpTKOaNKiqUnZdlptF469hxqOw== + version "0.8.2" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.2.tgz#a875e169beb27c88af77dd962771c9eedc3da161" + integrity sha512-a3Y4of27Wz+mqK3qrcd3VhYz6cU0iW5x3Sgvqzbj+XmlrSizmvu8QQMl5oMYJjgHOC4iyt+w7l4umP+dQeW3bw== dependencies: loader-utils "^1.1.0" normalize-url "1.9.1" @@ -1751,42 +1826,22 @@ minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: +minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== +minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= - -minipass@^2.2.1, minipass@^2.3.5: - version "2.3.5" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" - integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" - integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== - dependencies: - minipass "^2.2.1" +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== mississippi@^3.0.0: version "3.0.0" @@ -1812,17 +1867,17 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= +mkdirp@^0.5.1, mkdirp@^0.5.3: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: - minimist "0.0.8" + minimist "^1.2.6" move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + integrity sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ== dependencies: aproba "^1.1.1" copy-concurrently "^1.0.0" @@ -1834,17 +1889,17 @@ move-concurrently@^1.0.1: ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== -ms@^2.1.1: +ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== nan@^2.12.1: - version "2.14.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" - integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + version "2.16.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.16.0.tgz#664f43e45460fb98faf00edca0bb0d7b8dce7916" + integrity sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA== nanomatch@^1.2.9: version "1.2.13" @@ -1863,21 +1918,12 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" -needle@^2.2.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" - integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" +neo-async@^2.5.0, neo-async@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -neo-async@^2.5.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" - integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== - -node-libs-browser@^2.0.0: +node-libs-browser@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== @@ -1906,38 +1952,14 @@ node-libs-browser@^2.0.0: util "^0.11.0" vm-browserify "^1.0.1" -node-pre-gyp@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" - integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= - dependencies: - abbrev "1" - osenv "^0.1.4" - normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== @@ -1945,50 +1967,22 @@ normalize-path@^3.0.0: normalize-url@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= + integrity sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ== dependencies: object-assign "^4.0.1" prepend-http "^1.0.0" query-string "^4.1.0" sort-keys "^1.0.0" -npm-bundled@^1.0.1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" - integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== - -npm-packlist@^1.1.6: - version "1.4.4" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44" - integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - -npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -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" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" @@ -1997,51 +1991,33 @@ object-copy@^0.1.0: object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== dependencies: isobject "^3.0.0" object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== dependencies: isobject "^3.0.1" once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + integrity sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A== -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - -os-tmpdir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -p-limit@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" - integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" @@ -2052,33 +2028,39 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== pako@~1.0.5: - version "1.0.10" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" - integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== parallel-transform@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" - integrity sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY= + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== dependencies: - cyclist "~0.2.2" + cyclist "^1.0.1" inherits "^2.0.3" readable-stream "^2.1.5" -parse-asn1@^5.0.0: - version "5.1.4" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc" - integrity sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw== +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== dependencies: - asn1.js "^4.0.0" + asn1.js "^5.2.0" browserify-aes "^1.0.0" - create-hash "^1.1.0" evp_bytestokey "^1.0.0" pbkdf2 "^3.0.3" safe-buffer "^5.1.1" @@ -2086,7 +2068,7 @@ parse-asn1@^5.0.0: pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== path-browserify@0.0.1: version "0.0.1" @@ -2096,22 +2078,27 @@ path-browserify@0.0.1: path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + integrity sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q== path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== pbkdf2@^3.0.3: - version "3.0.17" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" - integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -2119,6 +2106,16 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +picocolors@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" + integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" @@ -2131,10 +2128,17 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== postcss-modules-extract-imports@^2.0.0: version "2.0.0" @@ -2144,19 +2148,19 @@ postcss-modules-extract-imports@^2.0.0: postcss "^7.0.5" postcss-modules-local-by-default@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz#e8a6561be914aaf3c052876377524ca90dbb7915" - integrity sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ== + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" + integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== dependencies: icss-utils "^4.1.1" - postcss "^7.0.16" + postcss "^7.0.32" postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.0.0" + postcss-value-parser "^4.1.0" -postcss-modules-scope@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.1.0.tgz#ad3f5bf7856114f6fcab901b0502e2a2bc39d4eb" - integrity sha512-91Rjps0JnmtUB0cujlc8KIKCsJXWjzuxGeT/+Q2i2HXKZ7nBUeF9YQTZZTNvHVoNYj1AthsjnGLtqDUE0Op79A== +postcss-modules-scope@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" + integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== dependencies: postcss "^7.0.6" postcss-selector-parser "^6.0.0" @@ -2170,32 +2174,30 @@ postcss-modules-values@^3.0.0: postcss "^7.0.6" postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" - integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== + version "6.0.10" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" + integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== dependencies: cssesc "^3.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" + util-deprecate "^1.0.2" -postcss-value-parser@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.0.tgz#99a983d365f7b2ad8d0f9b8c3094926eab4b936d" - integrity sha512-ESPktioptiSUchCKgggAkzdmkgzKfmp0EU8jXH+5kbIUB+unr0Y4CY9SRMvibuvYUBjNh1ACLbxqYNpdTQOteQ== +postcss-value-parser@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.17, postcss@^7.0.5, postcss@^7.0.6: - version "7.0.17" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.17.tgz#4da1bdff5322d4a0acaab4d87f3e782436bad31f" - integrity sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ== +postcss@^7.0.14, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.39" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" + integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== dependencies: - chalk "^2.4.2" + picocolors "^0.2.1" source-map "^0.6.1" - supports-color "^6.1.0" prepend-http@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + integrity sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg== process-nextick-args@~2.0.0: version "2.0.1" @@ -2205,17 +2207,17 @@ process-nextick-args@~2.0.0: process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== public-encrypt@^4.0.0: version "4.0.3" @@ -2257,12 +2259,12 @@ pumpify@^1.3.3: punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== punycode@^1.2.4: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== punycode@^2.1.0: version "2.1.1" @@ -2272,7 +2274,7 @@ punycode@^2.1.0: query-string@^4.1.0: version "4.3.4" resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= + integrity sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q== dependencies: object-assign "^4.1.0" strict-uri-encode "^1.0.0" @@ -2280,14 +2282,14 @@ query-string@^4.1.0: querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + integrity sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA== querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== @@ -2302,20 +2304,10 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -2325,6 +2317,15 @@ rc@^1.2.7: string_decoder "~1.1.1" util-deprecate "~1.0.1" +readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" @@ -2334,6 +2335,13 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -2345,32 +2353,32 @@ regex-not@^1.0.0, regex-not@^1.0.2: remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== +rimraf@^2.5.4, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" @@ -2385,14 +2393,14 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + integrity sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg== dependencies: aproba "^1.1.1" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2: - version "5.2.0" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" - integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" @@ -2402,20 +2410,15 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3": +safer-buffer@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sax@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - schema-utils@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" @@ -2425,28 +2428,31 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.0.1.tgz#1eec2e059556af841b7f3a83b61af13d7a3f9196" - integrity sha512-HJFKJ4JixDpRur06QHwi8uu2kZbng318ahWEKgBjc0ZklcE4FDvmm2wghb448q0IRaABxIESt8vqPFvwgMB80A== +schema-utils@^2.6.5, schema-utils@^2.7.0: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== dependencies: - ajv "^6.1.0" - ajv-keywords "^3.1.0" + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" -semver@^5.3.0, semver@^5.6.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" - integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== +semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -serialize-javascript@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65" - integrity sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA== +semver@^6.0.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" @@ -2461,7 +2467,7 @@ set-value@^2.0.0, set-value@^2.0.1: setimmediate@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" @@ -2471,11 +2477,6 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" -signal-exit@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= - snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -2509,7 +2510,7 @@ snapdragon@^0.8.1: sort-keys@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + integrity sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg== dependencies: is-plain-obj "^1.0.0" @@ -2519,33 +2520,33 @@ source-list-map@^2.0.0: integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== dependencies: - atob "^2.1.1" + atob "^2.1.2" decode-uri-component "^0.2.0" resolve-url "^0.2.1" source-map-url "^0.4.0" urix "^0.1.0" source-map-support@~0.5.12: - version "0.5.12" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" - integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== -source-map@^0.5.0, source-map@^0.5.6: +source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" @@ -2560,16 +2561,16 @@ split-string@^3.0.1, split-string@^3.0.2: extend-shallow "^3.0.0" ssri@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" - integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + version "6.0.2" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" + integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== dependencies: figgy-pudding "^3.5.1" static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== dependencies: define-property "^0.2.5" object-copy "^0.1.0" @@ -2602,38 +2603,21 @@ stream-http@^2.7.2: xtend "^4.0.0" stream-shift@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" - integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2": - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string_decoder@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" - integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== - dependencies: - safe-buffer "~5.1.0" + safe-buffer "~5.2.0" string_decoder@~1.1.1: version "1.1.1" @@ -2642,25 +2626,6 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -2668,51 +2633,30 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - -tapable@^1.0.0, tapable@^1.1.0: +tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar@^4: - version "4.4.10" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" - integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA== +terser-webpack-plugin@^1.4.3: + version "1.4.5" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" + integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.3.5" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" - -terser-webpack-plugin@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz#69aa22426299f4b5b3775cbed8cb2c5d419aa1d4" - integrity sha512-W2YWmxPjjkUcOWa4pBEv4OP4er1aeQJlSo2UhtCFQCuRXEHjOFscO8VyWHj9JLlA0RzQb8Y2/Ta78XZvT54uGg== - dependencies: - cacache "^11.3.2" - find-cache-dir "^2.0.0" + cacache "^12.0.2" + find-cache-dir "^2.1.0" is-wsl "^1.1.0" - loader-utils "^1.2.3" schema-utils "^1.0.0" - serialize-javascript "^1.7.0" + serialize-javascript "^4.0.0" source-map "^0.6.1" - terser "^4.0.0" - webpack-sources "^1.3.0" + terser "^4.1.2" + webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser@^4.0.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.1.2.tgz#b2656c8a506f7ce805a3f300a2ff48db022fa391" - integrity sha512-jvNoEQSPXJdssFwqPSgWjsOrb+ELoE+ILpHPKXC83tIxOlh2U75F1KuB2luLD/3a6/7K3Vw5pDn+hvu0C4AzSw== +terser@^4.1.2: + version "4.8.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.1.tgz#a00e5634562de2239fd404c649051bf6fc21144f" + integrity sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw== dependencies: commander "^2.20.0" source-map "~0.6.1" @@ -2727,37 +2671,44 @@ through2@^2.0.0: xtend "~4.0.1" timers-browserify@^2.0.4: - version "2.0.10" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" - integrity sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg== + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== dependencies: setimmediate "^1.0.4" to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + integrity sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA== to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== dependencies: kind-of "^3.0.2" to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== dependencies: is-number "^3.0.0" repeat-string "^1.6.1" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" @@ -2768,25 +2719,15 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= - -tslib@^1.9.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" - integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== - tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + integrity sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw== typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== union-value@^1.0.0: version "1.0.1" @@ -2798,11 +2739,6 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" @@ -2820,32 +2756,32 @@ unique-slug@^2.0.0: unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== dependencies: has-value "^0.3.1" isobject "^3.0.0" upath@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" - integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q== + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + integrity sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ== dependencies: punycode "1.3.2" querystring "0.2.0" @@ -2855,15 +2791,15 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== util@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + integrity sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ== dependencies: inherits "2.0.1" @@ -2875,62 +2811,64 @@ util@^0.11.0: inherits "2.0.3" vm-browserify@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" - integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw== + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== -watchpack@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" - integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== +watchpack-chokidar2@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" + integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.7.4: + version "1.7.5" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" + integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== dependencies: - chokidar "^2.0.2" graceful-fs "^4.1.2" neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.1" -webpack-sources@^1.1.0, webpack-sources@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85" - integrity sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA== +webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== dependencies: source-list-map "^2.0.0" source-map "~0.6.1" webpack@^4.38.0: - version "4.38.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.38.0.tgz#6d77108404b08883c78f4e7e45a43c4e5c47c931" - integrity sha512-lbuFsVOq8PZY+1Ytz/mYOvYOo+d4IJ31hHk/7iyoeWtwN33V+5HYotSH+UIb9tq914ey0Hot7z6HugD+je3sWw== + version "4.46.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542" + integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-module-context" "1.8.5" - "@webassemblyjs/wasm-edit" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" - acorn "^6.2.0" - ajv "^6.1.0" - ajv-keywords "^3.1.0" - chrome-trace-event "^1.0.0" - enhanced-resolve "^4.1.0" - eslint-scope "^4.0.0" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.5.0" + eslint-scope "^4.0.3" json-parse-better-errors "^1.0.2" - loader-runner "^2.3.0" - loader-utils "^1.1.0" - memory-fs "~0.4.1" - micromatch "^3.1.8" - mkdirp "~0.5.0" - neo-async "^2.5.0" - node-libs-browser "^2.0.0" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.3" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" schema-utils "^1.0.0" - tapable "^1.1.0" - terser-webpack-plugin "^1.1.0" - watchpack "^1.5.0" - webpack-sources "^1.3.0" - -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.7.4" + webpack-sources "^1.4.1" worker-farm@^1.7.0: version "1.7.0" @@ -2942,7 +2880,7 @@ worker-farm@^1.7.0: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" @@ -2950,11 +2888,11 @@ xtend@^4.0.0, xtend@~4.0.1: integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" - integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== From 7986ca97a333259c40c1d8b912b59870415363a3 Mon Sep 17 00:00:00 2001 From: Fabio Arnold Date: Mon, 3 Oct 2022 16:43:44 -0700 Subject: [PATCH 337/347] Fix typo in documentation (#1117) Summary: Pull Request resolved: https://github.com/facebook/yoga/pull/1117 Reviewed By: yungsters Differential Revision: D40026308 Pulled By: yungsters fbshipit-source-id: e289f6461046f87a74947aff8e0aca5dc1db7ffc --- website/src/pages/docs/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/pages/docs/index.js b/website/src/pages/docs/index.js index 96dee1ae..94b3b465 100644 --- a/website/src/pages/docs/index.js +++ b/website/src/pages/docs/index.js @@ -33,7 +33,7 @@ export default ({data}) => ( documentation covering all the features of the library. Each page comes with an interactive playground for you to explore that feature. The examples section showcases some of the most common - layouts and how to build them. This is a community projects and + layouts and how to build them. This is a community project and contributions within documentation, code, and tests are more than welcome. The contributing section below covers how to get started.

From 80c89a48a16508f5664539b2506f59ccecaeb2b7 Mon Sep 17 00:00:00 2001 From: Nick Gerleman Date: Mon, 3 Oct 2022 18:17:23 -0700 Subject: [PATCH 338/347] Move GitHub Actions from Node 8 to Node 12 (#1164) Summary: Pull Request resolved: https://github.com/facebook/yoga/pull/1164 Yoga CI in GitHub is currently running using Node 8, released in 2017. It has long been out of support, and is not able to install many of the packages in the updated lockfile due to version restrictions in the new packages. Node 12 is able to install the current lockfile. Although it is old enough that security support has ended for it 5 months ago, `yoga-layout` currently fails to install on Node 12+, because a dependency, `nbind`, was reliant on V8 internals that have changed between versions, and has not published a version supporting anything later than Node 10. There are unpublished commits in the official repo which add Node 12 support. So, we use that version when developing against the website, to jump us to something more up to date, without rewriting or removing all of the JS bindings quite yet. Reviewed By: yungsters Differential Revision: D40036466 fbshipit-source-id: e1b775d87854250bd74fa17ca7ba939b32aa3bd8 --- .github/workflows/ci.yml | 2 +- website/package.json | 3 +++ website/yarn.lock | 5 ++--- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index efda3439..722d8a20 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,7 +10,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v1 with: - node-version: 8.x + node-version: 12.x - name: Install dependencies run: yarn install --frozen-lockfile --ignore-scripts working-directory: website diff --git a/website/package.json b/website/package.json index 53445418..b936c89a 100644 --- a/website/package.json +++ b/website/package.json @@ -33,5 +33,8 @@ }, "devDependencies": { "prettier": "1.19.1" + }, + "resolutions": { + "nbind": "https://github.com/charto/nbind.git#fe3abe0" } } diff --git a/website/yarn.lock b/website/yarn.lock index 8db32f75..29e2e3c1 100644 --- a/website/yarn.lock +++ b/website/yarn.lock @@ -6944,10 +6944,9 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" -nbind@^0.3.14: +nbind@^0.3.14, "nbind@https://github.com/charto/nbind.git#fe3abe0": version "0.3.15" - resolved "https://registry.yarnpkg.com/nbind/-/nbind-0.3.15.tgz#20c74d77d54e28627ab8268c2767f7e40aef8c53" - integrity sha512-TrKLNRj5D8wZRJb7XmUNbA1W3iTigAEpm3qaGig5bEWY/iCT2IQBgBc2EUGO59FbRIGhx5hB/McVwqxlSGScVw== + resolved "https://github.com/charto/nbind.git#fe3abe05462d1b7559e0933e7f83802e8f05af27" dependencies: emscripten-library-decorator "~0.2.2" mkdirp "~0.5.1" From 572f525734f58aa36ce1a681f079c14a30eba617 Mon Sep 17 00:00:00 2001 From: Erfan Zekri Esfahani <40582518+eze1376@users.noreply.github.com> Date: Mon, 3 Oct 2022 18:48:30 -0700 Subject: [PATCH 339/347] Update flex.md (#1118) Summary: correct sections' order in order to match header in alphabetical order Pull Request resolved: https://github.com/facebook/yoga/pull/1118 Reviewed By: yungsters Differential Revision: D40026297 Pulled By: yungsters fbshipit-source-id: d28d41d69eb3a99fab9536cc79057c617cf0e2df --- website/contents/properties/flex.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/website/contents/properties/flex.md b/website/contents/properties/flex.md index 80ed4a5b..764d84bd 100644 --- a/website/contents/properties/flex.md +++ b/website/contents/properties/flex.md @@ -6,6 +6,15 @@ hasPlayground: true ## Flex Basis, Grow, and Shrink +**FLEX BASIS** is an axis-independent way of providing the default size of an item +along the main axis. Setting the flex basis of a child is similar to setting the `width` of that +child if its parent is a container with `flex direction: row` or setting the `height` of a child +if its parent is a container with `flex direction: column`. The flex basis of an item is the +default size of that item, the size of the item before any flex grow and flex shrink +calculations are performed. + + + **FLEX GROW** describes how any space within a container should be distributed among its children along the main axis. After laying out its children, a container will distribute any remaining space according to the flex grow values specified by its children. @@ -25,12 +34,3 @@ Flex shrink accepts any floating point value >= 0, with 1 being the default valu A container will shrink its children weighted by the child’s flex shrink value. - -**FLEX BASIS** is an axis-independent way of providing the default size of an item -along the main axis. Setting the flex basis of a child is similar to setting the `width` of that -child if its parent is a container with `flex direction: row` or setting the `height` of a child -if its parent is a container with `flex direction: column`. The flex basis of an item is the -default size of that item, the size of the item before any flex grow and flex shrink -calculations are performed. - - From 29c2151d8d4a08ed22a1d890011df4931b677ddc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BF=B7=E6=B8=A1?= Date: Mon, 3 Oct 2022 21:09:58 -0700 Subject: [PATCH 340/347] fix missing dll exports (#1127) Summary: When I use libyogacore.so in other programming languages, it crash with message as > Could not obtain symbol from the library: dlsym(0x20b84d220, YGConfigIsExperimentalFeatureEnabled): symbol not found This function is defined as `WIN_EXPORT bool YGConfigIsExperimentalFeatureEnabled` in yoga.h, but is not defined using `YOGA_EXPORT` in yoga.cpp. Pull Request resolved: https://github.com/facebook/yoga/pull/1127 Reviewed By: yungsters Differential Revision: D40024450 Pulled By: yungsters fbshipit-source-id: f6f01eadccb13d593c68300059e96f4b0bbc9fb6 --- yoga/Yoga.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 20389d4f..8b275770 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -302,7 +302,7 @@ YOGA_EXPORT void YGNodeReset(YGNodeRef node) { node->reset(); } -int32_t YGConfigGetInstanceCount(void) { +YOGA_EXPORT int32_t YGConfigGetInstanceCount(void) { return gConfigInstanceCount; } @@ -4324,7 +4324,7 @@ YOGA_EXPORT void YGConfigSetExperimentalFeatureEnabled( config->experimentalFeatures[feature] = enabled; } -inline bool YGConfigIsExperimentalFeatureEnabled( +YOGA_EXPORT bool YGConfigIsExperimentalFeatureEnabled( const YGConfigRef config, const YGExperimentalFeature feature) { return config->experimentalFeatures[feature]; From 0faefad0c1761bef02354ad432172aa8d5800919 Mon Sep 17 00:00:00 2001 From: PhoebeHui <20694052+PhoebeHui@users.noreply.github.com> Date: Mon, 3 Oct 2022 21:10:17 -0700 Subject: [PATCH 341/347] Add vcpkg installation instructions (#970) Summary: Yoga is available as a port in VCPKG , documenting the install process here will help users get started by providing a single set of commands to build yoga, ready to be included in their projects. VCPKG is a C++ library manager that simplifies installation for yoga and other project dependencies, we also test whether our library ports build in various configurations (dynamic, static) on various platforms (OSX, Linux, Windows: x86, x64, UWP, ARM) to keep a wide coverage for users. I'm a maintainer for vcpkg, and here is what the port script looks like. We try to keep the library maintained as close as possible to the original library. Pull Request resolved: https://github.com/facebook/yoga/pull/970 Reviewed By: yungsters Differential Revision: D40027569 Pulled By: yungsters fbshipit-source-id: ca9a6aa481c7b46e96c5937fe3cc7b716e464e4d --- README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/README.md b/README.md index e8d41231..d1d65542 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,20 @@ ## Building Yoga builds with [buck](https://buckbuild.com). Make sure you install buck before contributing to Yoga. Yoga's main implementation is in C++, with bindings to supported languages and frameworks. When making changes to Yoga please ensure the changes are also propagated to these bindings when applicable. +Alternatively, you can build and install Yoga using [vcpkg](https://github.com/Microsoft/vcpkg/) dependency manager: + +```sh +git clone https://github.com/Microsoft/vcpkg.git +cd vcpkg +./bootstrap-vcpkg.sh +./vcpkg integrate install +./vcpkg install yoga +``` + +The Yoga port in vcpkg is kept up to date by Microsoft team members and community contributors. + +If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository. + ## Testing For testing we rely on [gtest](https://github.com/google/googletest) as a submodule. After cloning Yoga run `git submodule init` followed by `git submodule update`. From bc4c8f9fd9bb71fee2b5eb80da59c87ad9960773 Mon Sep 17 00:00:00 2001 From: Joe Gallegos Date: Mon, 3 Oct 2022 21:11:52 -0700 Subject: [PATCH 342/347] Update React Native docs link (#1036) Summary: Updated link for new React Native docs site. Pull Request resolved: https://github.com/facebook/yoga/pull/1036 Reviewed By: yungsters Differential Revision: D40026872 Pulled By: yungsters fbshipit-source-id: e2d26b07b7b8785c0a2dee4543ec153fd69a8a3f --- website/contents/getting-started/react-native.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/contents/getting-started/react-native.md b/website/contents/getting-started/react-native.md index 7b028bec..11710038 100644 --- a/website/contents/getting-started/react-native.md +++ b/website/contents/getting-started/react-native.md @@ -1,5 +1,5 @@ --- -path: "http://facebook.github.io/react-native/docs/getting-started.html" +path: "https://reactnative.dev/docs/getting-started" title: "React Native" redirect: true --- From 272eb940f156b0ba54a4e6c677b14f3832aeff89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20=E3=82=B5=E3=82=A4=E3=83=88=E3=83=BC=20=E4=B8=AD?= =?UTF-8?q?=E6=9D=91=20Bashurov?= Date: Mon, 3 Oct 2022 21:13:20 -0700 Subject: [PATCH 343/347] Update standalone.md docs (#1110) Summary: Added set of row direction, otherwise it'll be column and numbers won't correspond to comments https://codesandbox.io/s/yoga-standalone-docs-bug-izqwv?file=/src/index.js ![image](https://user-images.githubusercontent.com/1552189/142233513-8b21c77f-0a12-4c9d-9965-fe8c9e43c02f.png) Pull Request resolved: https://github.com/facebook/yoga/pull/1110 Reviewed By: yungsters Differential Revision: D40026417 Pulled By: yungsters fbshipit-source-id: 7e26406909268f85ee9b1ccf73aad50bab042ff9 --- website/contents/getting-started/standalone.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/website/contents/getting-started/standalone.md b/website/contents/getting-started/standalone.md index 78a46a7a..de65a020 100644 --- a/website/contents/getting-started/standalone.md +++ b/website/contents/getting-started/standalone.md @@ -12,7 +12,7 @@ Adding Yoga to a project is as simple as adding the dependency to your package m ```groovy dependencies { - compile 'com.facebook.yoga.android:yoga-layout:x.x.x' + compile 'com.facebook.yoga.android:yoga-layout:x.x.x' } ``` @@ -36,6 +36,7 @@ const root = Node.create(); root.setWidth(500); root.setHeight(300); root.setJustifyContent(yoga.JUSTIFY_CENTER); +root.setFlexDirection(yoga.FLEX_DIRECTION_ROW); const node1 = Node.create(); node1.setWidth(100); From 7f854ec13ee9e2df31322197a15165c9935ece2e Mon Sep 17 00:00:00 2001 From: Jesse Katsumata Date: Mon, 3 Oct 2022 21:22:57 -0700 Subject: [PATCH 344/347] Update README for android (#980) Summary: Install instruction and doc url seemed to be outdated. Pull Request resolved: https://github.com/facebook/yoga/pull/980 Reviewed By: yungsters Differential Revision: D40032063 Pulled By: yungsters fbshipit-source-id: 540bf5fa87d343b3da9ccf8865ecc6ac646b77d7 --- android/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/android/README.md b/android/README.md index caa6468f..9a143c8c 100644 --- a/android/README.md +++ b/android/README.md @@ -4,11 +4,11 @@ YogaLayout is available via jcenter: - compile 'com.facebook.yoga.android:yoga-layout:1.2.0' + implementation 'com.facebook.yoga.android:yoga-layout:1.16.0' ## Getting Started -Check out the docs [here](https://facebook.github.io/yoga/docs/api/android/). +Check out the docs [here](https://yogalayout.com/getting-started/standalone/). We also have a sample project. To try it, clone the repo and run (with a device attached) From d16e918c5261e6464206fc745a618d33dcfa39af Mon Sep 17 00:00:00 2001 From: "DaeWook, Kim" Date: Mon, 3 Oct 2022 21:26:05 -0700 Subject: [PATCH 345/347] Export YGInteropSetLogger method (#960) Summary: When building and using C # libraries, EntryPointNotFoundException thrown from YGInteropSetLogger. so, I added YOGA_EXPORT on YGInteropSetLogger. Pull Request resolved: https://github.com/facebook/yoga/pull/960 Reviewed By: yungsters Differential Revision: D40027238 Pulled By: yungsters fbshipit-source-id: 6af584a16e66a31c91374a1bb64434888762e3c8 --- csharp/Yoga/YGInterop.cpp | 2 +- yoga/Yoga.cpp | 5 +++++ yoga/Yoga.h | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/csharp/Yoga/YGInterop.cpp b/csharp/Yoga/YGInterop.cpp index 3dc6e822..2bd7c852 100644 --- a/csharp/Yoga/YGInterop.cpp +++ b/csharp/Yoga/YGInterop.cpp @@ -24,7 +24,7 @@ static int unmanagedLogger( return result; } -void YGInteropSetLogger(YGInteropLogger managedLogger) { +YOGA_EXPORT void YGInteropSetLogger(YGInteropLogger managedLogger) { gManagedLogger = managedLogger; YGConfigSetLogger(YGConfigGetDefault(), &unmanagedLogger); } diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 8b275770..96ad881e 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -4336,6 +4336,11 @@ YOGA_EXPORT void YGConfigSetUseWebDefaults( config->useWebDefaults = enabled; } +YOGA_EXPORT bool YGConfigGetUseLegacyStretchBehaviour( + const YGConfigRef config) { + return config->useLegacyStretchBehaviour; +} + YOGA_EXPORT void YGConfigSetUseLegacyStretchBehaviour( const YGConfigRef config, const bool useLegacyStretchBehaviour) { diff --git a/yoga/Yoga.h b/yoga/Yoga.h index 3444658b..15d2060d 100644 --- a/yoga/Yoga.h +++ b/yoga/Yoga.h @@ -318,6 +318,7 @@ void YGConfigSetShouldDiffLayoutWithoutLegacyStretchBehaviour( // resulted in implicit behaviour similar to align-self: stretch; Because this // was such a long-standing bug we must allow legacy users to switch back to // this behaviour. +WIN_EXPORT bool YGConfigGetUseLegacyStretchBehaviour(YGConfigRef config); WIN_EXPORT void YGConfigSetUseLegacyStretchBehaviour( YGConfigRef config, bool useLegacyStretchBehaviour); From ec0a8291108158bb278c4553021ef83a34f0dad1 Mon Sep 17 00:00:00 2001 From: Yurii Nakonechnyi Date: Mon, 3 Oct 2022 22:04:06 -0700 Subject: [PATCH 346/347] Added suppression for warnings about unused parameters in 'publish()' func (#1141) Summary: Pull Request resolved: https://github.com/facebook/yoga/pull/1141 Reviewed By: yungsters Differential Revision: D40025354 Pulled By: yungsters fbshipit-source-id: 6eaaa77b71db95ab0dbc0a4f459c9d85f7e36c42 --- yoga/event/event.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/yoga/event/event.h b/yoga/event/event.h index a5978914..a50f8e43 100644 --- a/yoga/event/event.h +++ b/yoga/event/event.h @@ -91,6 +91,9 @@ struct YOGA_EXPORT Event { static void publish(const YGNode& node, const TypedData& eventData = {}) { #ifdef YG_ENABLE_EVENTS publish(node, E, Data{eventData}); +#else + (void) node; + (void) eventData; #endif } From e1b401ca36edbcf65a51310f29e3acddd48ed07b Mon Sep 17 00:00:00 2001 From: Yannic Bonenberger Date: Mon, 3 Oct 2022 23:35:46 -0700 Subject: [PATCH 347/347] Re-add support for using Yoga without exceptions (#1006) Summary: This is a partial rollback of 07c0d539bdb3a248762d0a06fd3f622b278a7ecb. Pull Request resolved: https://github.com/facebook/yoga/pull/1006 Reviewed By: yungsters Differential Revision: D40032544 Pulled By: yungsters fbshipit-source-id: 9ef9b80672eced86a98cfae66c81710bd3ee6f9b --- tests/YGMeasureTest.cpp | 8 ++++++++ yoga/Utils.cpp | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/tests/YGMeasureTest.cpp b/tests/YGMeasureTest.cpp index e47607d4..6e1de931 100644 --- a/tests/YGMeasureTest.cpp +++ b/tests/YGMeasureTest.cpp @@ -580,7 +580,11 @@ TEST(YogaDeathTest, cannot_add_child_to_node_with_measure_func) { root->setMeasureFunc(_measure); const YGNodeRef root_child0 = YGNodeNew(); +#if defined(__cpp_exceptions) ASSERT_THROW(YGNodeInsertChild(root, root_child0, 0), std::logic_error); +#else // !defined(__cpp_exceptions) + ASSERT_DEATH(YGNodeInsertChild(root, root_child0, 0), "Cannot add child.*"); +#endif // defined(__cpp_exceptions) YGNodeFree(root_child0); YGNodeFreeRecursive(root); } @@ -589,7 +593,11 @@ TEST(YogaDeathTest, cannot_add_nonnull_measure_func_to_non_leaf_node) { const YGNodeRef root = YGNodeNew(); const YGNodeRef root_child0 = YGNodeNew(); YGNodeInsertChild(root, root_child0, 0); +#if defined(__cpp_exceptions) ASSERT_THROW(root->setMeasureFunc(_measure), std::logic_error); +#else // !defined(__cpp_exceptions) + ASSERT_DEATH(root->setMeasureFunc(_measure), "Cannot set measure function.*"); +#endif // defined(__cpp_exceptions) YGNodeFreeRecursive(root); } diff --git a/yoga/Utils.cpp b/yoga/Utils.cpp index f2af12b2..e448d994 100644 --- a/yoga/Utils.cpp +++ b/yoga/Utils.cpp @@ -75,5 +75,9 @@ YGFloatOptional YGFloatOptionalMax(YGFloatOptional op1, YGFloatOptional op2) { } void throwLogicalErrorWithMessage(const char* message) { +#if defined(__cpp_exceptions) throw std::logic_error(message); +#else // !defined(__cpp_exceptions) + std::terminate(); +#endif // defined(__cpp_exceptions) }