From 3c681d414ee55e75e1cff5f04cb7ec8459219fd8 Mon Sep 17 00:00:00 2001 From: Tomek Zawadzki Date: Wed, 11 May 2022 14:44:21 +0200 Subject: [PATCH] [Fabric] Reanimated for Fabric (#3206) ## Description This PR adds Fabric support to React Native Reanimated. Co-authored by @piaskowyk, @graszka22, @j-piasecki, @Szymon20000 and @kmagiera. --- .github/workflows/android-build.yml | 11 +- .github/workflows/docs-check.yml | 2 - .github/workflows/ios-build.yml | 13 +- ...cks.yml => static-example-apps-checks.yml} | 18 +- .github/workflows/static-root-checks.yml | 2 - .github/workflows/tv-os-build.yml | 2 - .github/workflows/validate-java.yml | 2 - Common/cpp/Fabric/FabricUtils.cpp | 128 + .../cpp/Fabric/ReanimatedUIManagerBinding.cpp | 197 + .../NativeModules/NativeReanimatedModule.cpp | 317 +- .../cpp/Registries/EventHandlerRegistry.cpp | 15 +- .../Registries/NewestShadowNodesRegistry.cpp | 68 + Common/cpp/SharedItems/ShareableValue.cpp | 18 + Common/cpp/Tools/Mapper.cpp | 27 +- Common/cpp/Tools/RuntimeDecorator.cpp | 124 +- Common/cpp/Tools/Scheduler.cpp | 4 + Common/cpp/headers/Fabric/FabricUtils.h | 78 + .../Fabric/ReanimatedUIManagerBinding.h | 46 + .../NativeModules/NativeReanimatedModule.h | 74 +- .../headers/Registries/EventHandlerRegistry.h | 8 + .../Registries/NewestShadowNodesRegistry.h | 41 + Common/cpp/headers/SharedItems/SharedParent.h | 3 + Common/cpp/headers/SharedItems/ValueWrapper.h | 25 + Common/cpp/headers/SpecTools/ErrorHandler.h | 5 + Common/cpp/headers/Tools/Mapper.h | 2 +- .../headers/Tools/PlatformDepMethodsHolder.h | 51 +- Common/cpp/headers/Tools/RuntimeDecorator.h | 11 +- Example/ios/Podfile.lock | 4 +- Example/package.json | 7 +- Example/src/CustomHandler/AnimatedText.tsx | 2 +- Example/tsconfig.json | 3 +- Example/yarn.lock | 876 ++-- FabricExample/.prettierrc.js | 7 - FabricExample/.prettierrc.json | 9 + FabricExample/App.js | 112 - FabricExample/App.tsx | 248 + FabricExample/Gemfile.lock | 100 + FabricExample/README.md | 19 + FabricExample/android/app/build.gradle | 2 +- FabricExample/android/build.gradle | 1 + FabricExample/android/gradle.properties | 2 +- FabricExample/babel.config.js | 1 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + FabricExample/ios/Podfile | 2 + FabricExample/ios/Podfile.lock | 473 +- FabricExample/metro.config.js | 33 +- FabricExample/package.json | 38 +- .../react-native-gesture-handler+2.4.2.patch | 37 + ...react-native-safe-area-context+4.2.5.patch | 34 + .../patches/react-native-screens+3.13.1.patch | 55 + .../react-native-reanimated-tests.tsx | 4 +- FabricExample/src/AnimatedSensorExample.tsx | 38 + .../src/AnimatedTextInputExample.tsx | 63 + .../src/AnimatedTextWidthExample.tsx | 48 + FabricExample/src/BokehExample.tsx | 103 + FabricExample/src/BouncingBoxExample.tsx | 81 + FabricExample/src/BubblesExample.tsx | 81 + FabricExample/src/ChessboardExample.tsx | 84 + FabricExample/src/ColorExample.tsx | 96 + FabricExample/src/EmptyExample.tsx | 19 + FabricExample/src/GestureHandlerExample.tsx | 82 + FabricExample/src/MeasureExample.tsx | 66 + ...NewestShadowNodesRegistryRemoveExample.tsx | 65 + FabricExample/src/RefExample.tsx | 77 + FabricExample/src/ScreenStackExample.tsx | 84 + ...tackHeaderConfigBackgroundColorExample.tsx | 101 + FabricExample/src/ScrollToExample.tsx | 65 + FabricExample/src/ScrollViewExample.tsx | 35 + FabricExample/src/TransformExample.tsx | 73 + FabricExample/src/WidthExample.tsx | 72 + FabricExample/src/WorkletExample.tsx | 52 + FabricExample/src/useJSThreadKiller.ts | 13 + FabricExample/tsconfig.json | 7 + FabricExample/yarn.lock | 1707 ++++-- README-Fabric.md | 9 + README.md | 4 + RNReanimated.podspec | 33 +- android/CMakeLists.txt | 177 +- android/build.gradle | 284 +- .../com/swmansion/reanimated/NativeProxy.java | 310 ++ .../reanimated/ReaCompatibility.java | 25 + android/src/main/cpp/NativeProxy.cpp | 218 +- android/src/main/cpp/headers/NativeProxy.h | 50 +- .../swmansion/reanimated/NodesManager.java | 13 +- .../layoutReanimation/LayoutAnimations.java | 3 +- .../com/swmansion/reanimated/NativeProxy.java | 17 +- .../reanimated/ReaCompatibility.java | 17 + docs/package.json | 2 +- ios/Fabric/REAInitializerRCTFabricSurface.h | 12 + ios/Fabric/REAInitializerRCTFabricSurface.mm | 73 + ios/REAEventDispatcher.m | 1 - ios/REAModule.h | 9 + ios/REAModule.m | 85 - ios/REAModule.mm | 284 + ios/REANodesManager.h | 36 +- ios/{REANodesManager.m => REANodesManager.mm} | 102 +- ios/native/NativeProxy.mm | 161 +- ios/native/REAInitializer.mm | 22 +- ios/native/UIResponder+Reanimated.h | 4 +- ios/native/UIResponder+Reanimated.mm | 4 +- jest.config.js | 2 +- package.json | 34 +- plugin.js | 5 +- prettier.config.js | 2 +- src/createAnimatedComponent.tsx | 28 +- src/reanimated2/NativeMethods.ts | 46 +- src/reanimated2/UpdateProps.ts | 57 +- src/reanimated2/commonTypes.ts | 5 +- src/reanimated2/component/FlatList.tsx | 18 +- src/reanimated2/core.ts | 8 +- src/reanimated2/fabricUtils.ts | 27 + src/reanimated2/globals.d.ts | 18 +- src/reanimated2/hook/commonTypes.ts | 6 +- src/reanimated2/hook/index.ts | 2 +- .../hook/useAnimatedGestureHandler.ts | 4 +- src/reanimated2/hook/useAnimatedRef.ts | 11 +- .../hook/useAnimatedScrollHandler.ts | 4 +- src/reanimated2/hook/utils.ts | 7 +- src/reanimated2/js-reanimated/index.ts | 36 + tsconfig.json | 14 +- yarn.lock | 4600 +++++++---------- 121 files changed, 8984 insertions(+), 4386 deletions(-) rename .github/workflows/{static-example-app-checks.yml => static-example-apps-checks.yml} (60%) create mode 100644 Common/cpp/Fabric/FabricUtils.cpp create mode 100644 Common/cpp/Fabric/ReanimatedUIManagerBinding.cpp create mode 100644 Common/cpp/Registries/NewestShadowNodesRegistry.cpp create mode 100644 Common/cpp/headers/Fabric/FabricUtils.h create mode 100644 Common/cpp/headers/Fabric/ReanimatedUIManagerBinding.h create mode 100644 Common/cpp/headers/Registries/NewestShadowNodesRegistry.h delete mode 100644 FabricExample/.prettierrc.js create mode 100644 FabricExample/.prettierrc.json delete mode 100644 FabricExample/App.js create mode 100644 FabricExample/App.tsx create mode 100644 FabricExample/Gemfile.lock create mode 100644 FabricExample/README.md create mode 100644 FabricExample/ios/FabricExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 FabricExample/patches/react-native-gesture-handler+2.4.2.patch create mode 100644 FabricExample/patches/react-native-safe-area-context+4.2.5.patch create mode 100644 FabricExample/patches/react-native-screens+3.13.1.patch rename react-native-reanimated-tests.tsx => FabricExample/react-native-reanimated-tests.tsx (99%) create mode 100644 FabricExample/src/AnimatedSensorExample.tsx create mode 100644 FabricExample/src/AnimatedTextInputExample.tsx create mode 100644 FabricExample/src/AnimatedTextWidthExample.tsx create mode 100644 FabricExample/src/BokehExample.tsx create mode 100644 FabricExample/src/BouncingBoxExample.tsx create mode 100644 FabricExample/src/BubblesExample.tsx create mode 100644 FabricExample/src/ChessboardExample.tsx create mode 100644 FabricExample/src/ColorExample.tsx create mode 100644 FabricExample/src/EmptyExample.tsx create mode 100644 FabricExample/src/GestureHandlerExample.tsx create mode 100644 FabricExample/src/MeasureExample.tsx create mode 100644 FabricExample/src/NewestShadowNodesRegistryRemoveExample.tsx create mode 100644 FabricExample/src/RefExample.tsx create mode 100644 FabricExample/src/ScreenStackExample.tsx create mode 100644 FabricExample/src/ScreenStackHeaderConfigBackgroundColorExample.tsx create mode 100644 FabricExample/src/ScrollToExample.tsx create mode 100644 FabricExample/src/ScrollViewExample.tsx create mode 100644 FabricExample/src/TransformExample.tsx create mode 100644 FabricExample/src/WidthExample.tsx create mode 100644 FabricExample/src/WorkletExample.tsx create mode 100644 FabricExample/src/useJSThreadKiller.ts create mode 100644 FabricExample/tsconfig.json create mode 100644 README-Fabric.md create mode 100644 android/src/fabric/java/com/swmansion/reanimated/NativeProxy.java create mode 100644 android/src/fabric/java/com/swmansion/reanimated/ReaCompatibility.java rename android/src/{main => paper}/java/com/swmansion/reanimated/NativeProxy.java (95%) create mode 100644 android/src/paper/java/com/swmansion/reanimated/ReaCompatibility.java create mode 100644 ios/Fabric/REAInitializerRCTFabricSurface.h create mode 100644 ios/Fabric/REAInitializerRCTFabricSurface.mm delete mode 100644 ios/REAModule.m create mode 100644 ios/REAModule.mm rename ios/{REANodesManager.m => REANodesManager.mm} (81%) create mode 100644 src/reanimated2/fabricUtils.ts diff --git a/.github/workflows/android-build.yml b/.github/workflows/android-build.yml index e34e14c4125..3b78fa03973 100644 --- a/.github/workflows/android-build.yml +++ b/.github/workflows/android-build.yml @@ -1,8 +1,6 @@ name: Test Android build on: pull_request: - branches: - - main paths: - 'android/**' - 'Common/**' @@ -12,8 +10,9 @@ on: jobs: build: runs-on: ubuntu-latest - env: - WORKING_DIRECTORY: Example + strategy: + matrix: + working-directory: [Example, FabricExample] concurrency: group: android-${{ github.ref }} cancel-in-progress: true @@ -41,8 +40,8 @@ jobs: - name: Install root node dependencies run: yarn - name: Install example app node dependencies - working-directory: ${{ env.WORKING_DIRECTORY }} + working-directory: ${{ matrix.working-directory }} run: yarn - name: Build app - working-directory: ${{ env.WORKING_DIRECTORY }}/android + working-directory: ${{ matrix.working-directory }}/android run: ./gradlew assembleDebug --console=plain diff --git a/.github/workflows/docs-check.yml b/.github/workflows/docs-check.yml index ed07fefba99..8a593acf278 100644 --- a/.github/workflows/docs-check.yml +++ b/.github/workflows/docs-check.yml @@ -2,8 +2,6 @@ name: Test docs build on: pull_request: - branches: - - main paths: - 'docs/**' diff --git a/.github/workflows/ios-build.yml b/.github/workflows/ios-build.yml index 3edcd0c9df6..9cfbc79884f 100644 --- a/.github/workflows/ios-build.yml +++ b/.github/workflows/ios-build.yml @@ -1,8 +1,6 @@ name: Test iOS build on: pull_request: - branches: - - main paths: - 'ios/**' - 'Common/**' @@ -13,8 +11,9 @@ jobs: build: # runs-on: macos-latest // issue: https://github.com/actions/virtual-environments/issues/4060 runs-on: macos-11 - env: - WORKING_DIRECTORY: Example + strategy: + matrix: + working-directory: [Example, FabricExample] concurrency: group: ios-${{ github.ref }} cancel-in-progress: true @@ -29,11 +28,11 @@ jobs: - name: Install Reanimated node dependencies run: yarn - name: Install node dependencies - working-directory: ${{ env.WORKING_DIRECTORY }} + working-directory: ${{ matrix.working-directory }} run: yarn - name: Install pods - working-directory: ${{ env.WORKING_DIRECTORY }}/ios + working-directory: ${{ matrix.working-directory }}/ios run: pod install - name: Build app - working-directory: ${{ env.WORKING_DIRECTORY }} + working-directory: ${{ matrix.working-directory }} run: npx react-native run-ios diff --git a/.github/workflows/static-example-app-checks.yml b/.github/workflows/static-example-apps-checks.yml similarity index 60% rename from .github/workflows/static-example-app-checks.yml rename to .github/workflows/static-example-apps-checks.yml index d65e7489e07..6e20e433522 100644 --- a/.github/workflows/static-example-app-checks.yml +++ b/.github/workflows/static-example-apps-checks.yml @@ -1,18 +1,18 @@ -name: Test Example App TypeScript and Lint +name: Test TypeScript and Lint on: pull_request: - branches: - - main paths: - 'Example/**' + - 'FabricExample/**' push: branches: - main jobs: check: runs-on: ubuntu-latest - env: - WORKING_DIRECTORY: Example + strategy: + matrix: + working-directory: [Example, FabricExample] concurrency: group: static-example-${{ github.ref }} cancel-in-progress: true @@ -26,12 +26,12 @@ jobs: cache: 'yarn' - name: Install root node dependencies run: yarn - - name: Install example app node dependencies - working-directory: ${{ env.WORKING_DIRECTORY }} + - name: Install ${{ matrix.working-directory }} app node dependencies + working-directory: ${{ matrix.working-directory }} run: yarn - name: Check types - working-directory: ${{ env.WORKING_DIRECTORY }} + working-directory: ${{ matrix.working-directory }} run: yarn tsc --noEmit - name: Lint - working-directory: ${{ env.WORKING_DIRECTORY }} + working-directory: ${{ matrix.working-directory }} run: yarn lint:js diff --git a/.github/workflows/static-root-checks.yml b/.github/workflows/static-root-checks.yml index d9f1264d499..29559445b7f 100644 --- a/.github/workflows/static-root-checks.yml +++ b/.github/workflows/static-root-checks.yml @@ -1,8 +1,6 @@ name: Test TypeScript and Lint on: pull_request: - branches: - - main paths: - 'src/**' - '*' diff --git a/.github/workflows/tv-os-build.yml b/.github/workflows/tv-os-build.yml index 8b2a616ca0f..8a15c52c315 100644 --- a/.github/workflows/tv-os-build.yml +++ b/.github/workflows/tv-os-build.yml @@ -1,8 +1,6 @@ name: Test tvOS build on: pull_request: - branches: - - main paths: - 'ios/**' - 'Common/**' diff --git a/.github/workflows/validate-java.yml b/.github/workflows/validate-java.yml index 3d1f021cf5b..2bbf57ed2d0 100644 --- a/.github/workflows/validate-java.yml +++ b/.github/workflows/validate-java.yml @@ -1,8 +1,6 @@ name: Java Lint on: pull_request: - branches: - - main paths: - 'android/src/main/java/**' push: diff --git a/Common/cpp/Fabric/FabricUtils.cpp b/Common/cpp/Fabric/FabricUtils.cpp new file mode 100644 index 00000000000..341a3492874 --- /dev/null +++ b/Common/cpp/Fabric/FabricUtils.cpp @@ -0,0 +1,128 @@ +#ifdef RCT_NEW_ARCH_ENABLED + +#include "FabricUtils.h" + +#include + +using namespace facebook::react; + +namespace reanimated { + +#ifdef ANDROID +RuntimeExecutor getRuntimeExecutorFromBinding(Binding *binding) { + BindingPublic *bindingPublic = reinterpret_cast(binding); + SchedulerPublic *schedulerPublic = + reinterpret_cast((bindingPublic->scheduler_).get()); + return schedulerPublic->runtimeExecutor_; +} +#endif + +inline static const UIManagerPublic *getUIManagerPublic( + const UIManager *uiManager) { + return reinterpret_cast(uiManager); +} + +std::shared_ptr getContextContainerFromUIManager( + const UIManager *uiManager) { + return getUIManagerPublic(uiManager)->contextContainer_; +} + +inline static UIManagerDelegate *getDelegateFromUIManager( + const UIManager *uiManager) { + return getUIManagerPublic(uiManager)->delegate_; +} + +void UIManager_dispatchCommand( + const std::shared_ptr &uiManager, + const ShadowNode::Shared &shadowNode, + std::string const &commandName, + folly::dynamic const &args) { + auto delegate_ = getDelegateFromUIManager(&*uiManager); + + // copied from UIManager.cpp + if (delegate_) { + delegate_->uiManagerDidDispatchCommand(shadowNode, commandName, args); + } +} + +LayoutMetrics UIManager_getRelativeLayoutMetrics( + const std::shared_ptr &uiManager, + ShadowNode const &shadowNode, + ShadowNode const *ancestorShadowNode, + LayoutableShadowNode::LayoutInspectingPolicy policy) { + // based on implementation from UIManager.cpp + const auto &shadowTreeRegistry = uiManager->getShadowTreeRegistry(); + + // We might store here an owning pointer to `ancestorShadowNode` to ensure + // that the node is not deallocated during method execution lifetime. + auto owningAncestorShadowNode = ShadowNode::Shared{}; + + if (!ancestorShadowNode) { + shadowTreeRegistry.visit( + shadowNode.getSurfaceId(), [&](ShadowTree const &shadowTree) { + owningAncestorShadowNode = + shadowTree.getCurrentRevision().rootShadowNode; + ancestorShadowNode = owningAncestorShadowNode.get(); + }); + } else { + // It is possible for JavaScript (or other callers) to have a reference + // to a previous version of ShadowNodes, but we enforce that + // metrics are only calculated on most recently committed versions. + owningAncestorShadowNode = + uiManager->getNewestCloneOfShadowNode(*ancestorShadowNode); + ancestorShadowNode = owningAncestorShadowNode.get(); + } + + auto layoutableAncestorShadowNode = + traitCast(ancestorShadowNode); + + if (!layoutableAncestorShadowNode) { + return EmptyLayoutMetrics; + } + + return LayoutableShadowNode::computeRelativeLayoutMetrics( + shadowNode.getFamily(), *layoutableAncestorShadowNode, policy); +} + +SharedShadowNode UIManager_cloneNode( + const UIManager *uiManager, + const ShadowNode::Shared &shadowNode, + const SharedShadowNodeSharedList &children, + const RawProps *rawProps) { + auto delegate_ = getDelegateFromUIManager(uiManager); + auto contextContainer_ = getContextContainerFromUIManager(uiManager); + + // copied from UIManager.cpp + PropsParserContext propsParserContext{ + shadowNode->getFamily().getSurfaceId(), *contextContainer_.get()}; + + auto &componentDescriptor = shadowNode->getComponentDescriptor(); + auto clonedShadowNode = componentDescriptor.cloneShadowNode( + *shadowNode, + { + /* .props = */ + rawProps ? componentDescriptor.cloneProps( + propsParserContext, shadowNode->getProps(), *rawProps) + : ShadowNodeFragment::propsPlaceholder(), + /* .children = */ children, + }); + + if (delegate_) { + delegate_->uiManagerDidCloneShadowNode( + *shadowNode.get(), *clonedShadowNode); + } + + return clonedShadowNode; +} + +void UIManager_appendChild( + const ShadowNode::Shared &parentShadowNode, + const ShadowNode::Shared &childShadowNode) { + // copied from UIManager.cpp + auto &componentDescriptor = parentShadowNode->getComponentDescriptor(); + componentDescriptor.appendChild(parentShadowNode, childShadowNode); +} + +} // namespace reanimated + +#endif // RCT_NEW_ARCH_ENABLED diff --git a/Common/cpp/Fabric/ReanimatedUIManagerBinding.cpp b/Common/cpp/Fabric/ReanimatedUIManagerBinding.cpp new file mode 100644 index 00000000000..f4e1261ca22 --- /dev/null +++ b/Common/cpp/Fabric/ReanimatedUIManagerBinding.cpp @@ -0,0 +1,197 @@ +#ifdef RCT_NEW_ARCH_ENABLED + +#include "ReanimatedUIManagerBinding.h" +#include "FabricUtils.h" +#include "NewestShadowNodesRegistry.h" + +using namespace facebook; +using namespace react; + +namespace reanimated { + +void ReanimatedUIManagerBinding::createAndInstallIfNeeded( + jsi::Runtime &runtime, + RuntimeExecutor const &runtimeExecutor, + std::shared_ptr const &uiManager, + std::shared_ptr const + &newestShadowNodesRegistry) { + // adapted from UIManagerBinding.cpp + auto uiManagerModuleName = "nativeFabricUIManager"; + auto uiManagerBinding = std::make_shared( + uiManager, runtimeExecutor, newestShadowNodesRegistry); + auto object = jsi::Object::createFromHostObject(runtime, uiManagerBinding); + runtime.global().setProperty(runtime, uiManagerModuleName, std::move(object)); +} + +ReanimatedUIManagerBinding::ReanimatedUIManagerBinding( + std::shared_ptr uiManager, + RuntimeExecutor runtimeExecutor, + std::shared_ptr newestShadowNodesRegistry) + : UIManagerBinding(uiManager, runtimeExecutor), + uiManager_(std::move(uiManager)), + newestShadowNodesRegistry_(newestShadowNodesRegistry) {} + +ReanimatedUIManagerBinding::~ReanimatedUIManagerBinding() {} + +void ReanimatedUIManagerBinding::invalidate() const { + uiManager_->setDelegate(nullptr); +} + +static inline ShadowNode::Shared cloneNode( + UIManager *uiManager, + NewestShadowNodesRegistry *newestShadowNodesRegistry, + const ShadowNode::Shared &shadowNode, + const SharedShadowNodeSharedList &children = nullptr, + const RawProps *rawProps = nullptr) { + { + auto lock = newestShadowNodesRegistry->createLock(); + auto newest = newestShadowNodesRegistry->get(shadowNode->getTag()); + if (newest != nullptr) { + // ShadowNode managed by Reanimated, use newest ShadowNode from registry + auto clone = UIManager_cloneNode(uiManager, newest, children, rawProps); + newestShadowNodesRegistry->update(clone); + return clone; + } + } // release lock since we don't need registry anymore + + // ShadowNode not managed by Reanimated (yet?) + return UIManager_cloneNode(uiManager, shadowNode, children, rawProps); +} + +jsi::Value ReanimatedUIManagerBinding::get( + jsi::Runtime &runtime, + jsi::PropNameID const &name) { + // Currently, we need to overwrite all variants of `cloneNode` as well as + // `appendChild` to prevent React from overwriting layout props animated using + // Reanimated. However, this may degrade performance due to using locks. + // We already have an idea how this can be done better without locks + // (i.e. by overwriting `completeRoot` and using UIManagerCommitHooks). + + // based on implementation from UIManagerBinding.cpp + auto methodName = name.utf8(runtime); + UIManager *uiManager = uiManager_.get(); + NewestShadowNodesRegistry *newestShadowNodesRegistry = + newestShadowNodesRegistry_.get(); + + // Semantic: Clones the node with *same* props and *same* children. + if (methodName == "cloneNode") { + return jsi::Function::createFromHostFunction( + runtime, + name, + 1, + [uiManager, newestShadowNodesRegistry]( + jsi::Runtime &runtime, + jsi::Value const &thisValue, + jsi::Value const *arguments, + size_t count) noexcept -> jsi::Value { + return valueFromShadowNode( + runtime, + cloneNode( + uiManager, + newestShadowNodesRegistry, + shadowNodeFromValue(runtime, arguments[0]))); + }); + } + + // Semantic: Clones the node with *same* props and *empty* children. + if (methodName == "cloneNodeWithNewChildren") { + return jsi::Function::createFromHostFunction( + runtime, + name, + 1, + [uiManager, newestShadowNodesRegistry]( + jsi::Runtime &runtime, + jsi::Value const &thisValue, + jsi::Value const *arguments, + size_t count) noexcept -> jsi::Value { + return valueFromShadowNode( + runtime, + cloneNode( + uiManager, + newestShadowNodesRegistry, + shadowNodeFromValue(runtime, arguments[0]), + ShadowNode::emptySharedShadowNodeSharedList())); + }); + } + + // Semantic: Clones the node with *given* props and *same* children. + if (methodName == "cloneNodeWithNewProps") { + return jsi::Function::createFromHostFunction( + runtime, + name, + 2, + [uiManager, newestShadowNodesRegistry]( + jsi::Runtime &runtime, + jsi::Value const &thisValue, + jsi::Value const *arguments, + size_t count) noexcept -> jsi::Value { + auto const &rawProps = RawProps(runtime, arguments[1]); + return valueFromShadowNode( + runtime, + cloneNode( + uiManager, + newestShadowNodesRegistry, + shadowNodeFromValue(runtime, arguments[0]), + nullptr, + &rawProps)); + }); + } + + // Semantic: Clones the node with *given* props and *empty* children. + if (methodName == "cloneNodeWithNewChildrenAndProps") { + return jsi::Function::createFromHostFunction( + runtime, + name, + 2, + [uiManager, newestShadowNodesRegistry]( + jsi::Runtime &runtime, + jsi::Value const &thisValue, + jsi::Value const *arguments, + size_t count) noexcept -> jsi::Value { + auto const &rawProps = RawProps(runtime, arguments[1]); + return valueFromShadowNode( + runtime, + cloneNode( + uiManager, + newestShadowNodesRegistry, + shadowNodeFromValue(runtime, arguments[0]), + ShadowNode::emptySharedShadowNodeSharedList(), + &rawProps)); + }); + } + + if (methodName == "appendChild") { + return jsi::Function::createFromHostFunction( + runtime, + name, + 2, + [newestShadowNodesRegistry]( + jsi::Runtime &runtime, + jsi::Value const &thisValue, + jsi::Value const *arguments, + size_t count) noexcept -> jsi::Value { + auto parent = shadowNodeFromValue(runtime, arguments[0]); + auto child = shadowNodeFromValue(runtime, arguments[1]); + { + auto lock = newestShadowNodesRegistry->createLock(); + auto newest = newestShadowNodesRegistry->get(child->getTag()); + if (newest != nullptr) { + child = newest; + } + } + UIManager_appendChild(parent, child); + return jsi::Value::undefined(); + }); + } + + // Methods like "findNodeAtPoint", "getRelativeLayoutMetrics", "measure" etc. + // use `UIManager::getNewestCloneOfShadowNode` or + // `ShadowTree::getCurrentRevision` under the hood, + // so there's no need to overwrite them. + + return UIManagerBinding::get(runtime, name); +} + +} // namespace reanimated + +#endif // RCT_NEW_ARCH_ENABLED diff --git a/Common/cpp/NativeModules/NativeReanimatedModule.cpp b/Common/cpp/NativeModules/NativeReanimatedModule.cpp index 50584dd7611..f6dc48ef38a 100644 --- a/Common/cpp/NativeModules/NativeReanimatedModule.cpp +++ b/Common/cpp/NativeModules/NativeReanimatedModule.cpp @@ -1,7 +1,20 @@ #include "NativeReanimatedModule.h" + +#ifdef RCT_NEW_ARCH_ENABLED +#include +#include +#endif + #include #include #include + +#ifdef RCT_NEW_ARCH_ENABLED +#include "FabricUtils.h" +#include "NewestShadowNodesRegistry.h" +#include "ReanimatedUIManagerBinding.h" +#endif + #include "EventHandlerRegistry.h" #include "FeaturesConfig.h" #include "FrozenObject.h" @@ -62,8 +75,12 @@ NativeReanimatedModule::NativeReanimatedModule( std::shared_ptr scheduler, std::shared_ptr rt, std::shared_ptr errorHandler, +#ifdef RCT_NEW_ARCH_ENABLED +// nothing +#else std::function propObtainer, +#endif std::shared_ptr layoutAnimationsProxy, PlatformDepMethodsHolder platformDepMethodsHolder) : NativeReanimatedModuleSpec(jsInvoker), @@ -71,10 +88,20 @@ NativeReanimatedModule::NativeReanimatedModule( mapperRegistry(std::make_shared()), eventHandlerRegistry(std::make_shared()), requestRender(platformDepMethodsHolder.requestRender), +#ifdef RCT_NEW_ARCH_ENABLED +// nothing +#else propObtainer(propObtainer), +#endif animatedSensorModule(platformDepMethodsHolder, this), +#ifdef RCT_NEW_ARCH_ENABLED + synchronouslyUpdateUIPropsFunction( + platformDepMethodsHolder.synchronouslyUpdateUIPropsFunction) +#else configurePropsPlatformFunction( - platformDepMethodsHolder.configurePropsFunction) { + platformDepMethodsHolder.configurePropsFunction) +#endif +{ auto requestAnimationFrame = [=](FrameCallback callback) { frameCallbacks.push_back(callback); maybeRequestRender(); @@ -82,12 +109,45 @@ NativeReanimatedModule::NativeReanimatedModule( this->layoutAnimationsProxy = layoutAnimationsProxy; +#ifdef RCT_NEW_ARCH_ENABLED + auto updateProps = [this]( + jsi::Runtime &rt, + const jsi::Value &shadowNodeValue, + const jsi::Value &props) { + this->updateProps(rt, shadowNodeValue, props); + }; + + auto removeShadowNodeFromRegistry = + [this](jsi::Runtime &rt, const jsi::Value &shadowNodeValue) { + this->removeShadowNodeFromRegistry(rt, shadowNodeValue); + }; + + auto measure = [this](jsi::Runtime &rt, const jsi::Value &shadowNodeValue) { + return this->measure(rt, shadowNodeValue); + }; + + auto dispatchCommand = [this]( + jsi::Runtime &rt, + const jsi::Value &shadowNodeValue, + const jsi::Value &commandNameValue, + const jsi::Value &argsValue) { + this->dispatchCommand(rt, shadowNodeValue, commandNameValue, argsValue); + }; +#endif + RuntimeDecorator::decorateUIRuntime( *runtime, - platformDepMethodsHolder.updaterFunction, - requestAnimationFrame, +#ifdef RCT_NEW_ARCH_ENABLED + updateProps, + measure, + removeShadowNodeFromRegistry, + dispatchCommand, +#else + platformDepMethodsHolder.updatePropsFunction, + platformDepMethodsHolder.measureFunction, platformDepMethodsHolder.scrollToFunction, - platformDepMethodsHolder.measuringFunction, +#endif + requestAnimationFrame, platformDepMethodsHolder.getCurrentTime, platformDepMethodsHolder.registerSensor, platformDepMethodsHolder.unregisterSensor, @@ -97,7 +157,12 @@ NativeReanimatedModule::NativeReanimatedModule( this->renderRequested = false; this->onRender(timestampMs); }; - updaterFunction = platformDepMethodsHolder.updaterFunction; + +#ifdef RCT_NEW_ARCH_ENABLED + // nothing +#else + updatePropsFunction = platformDepMethodsHolder.updatePropsFunction; +#endif } void NativeReanimatedModule::installCoreFunctions( @@ -253,15 +318,33 @@ jsi::Value NativeReanimatedModule::configureProps( jsi::Runtime &rt, const jsi::Value &uiProps, const jsi::Value &nativeProps) { +#ifdef RCT_NEW_ARCH_ENABLED + jsi::Array array = nativeProps.asObject(rt).asArray(rt); + for (int i = 0; i < array.size(rt); ++i) { + std::string name = array.getValueAtIndex(rt, i).asString(rt).utf8(rt); + nativePropNames_.insert(name); + } +#else configurePropsPlatformFunction(rt, uiProps, nativeProps); +#endif // RCT_NEW_ARCH_ENABLED + return jsi::Value::undefined(); } void NativeReanimatedModule::onEvent( std::string eventName, - std::string eventAsString) { +#ifdef RCT_NEW_ARCH_ENABLED + jsi::Value &&payload +#else + std::string eventAsString +#endif + /**/) { try { +#ifdef RCT_NEW_ARCH_ENABLED + eventHandlerRegistry->processEvent(*runtime, eventName, payload); +#else eventHandlerRegistry->processEvent(*runtime, eventName, eventAsString); +#endif mapperRegistry->execute(*runtime); if (mapperRegistry->needRunOnRender()) { maybeRequestRender(); @@ -327,4 +410,226 @@ void NativeReanimatedModule::unregisterSensor( animatedSensorModule.unregisterSensor(sensorId); } +#ifdef RCT_NEW_ARCH_ENABLED +bool NativeReanimatedModule::isThereAnyLayoutProp( + jsi::Runtime &rt, + const jsi::Value &props) { + const jsi::Array propNames = props.asObject(rt).getPropertyNames(rt); + for (size_t i = 0; i < propNames.size(rt); ++i) { + const std::string propName = + propNames.getValueAtIndex(rt, i).asString(rt).utf8(rt); + bool isLayoutProp = + nativePropNames_.find(propName) != nativePropNames_.end(); + if (isLayoutProp) { + return true; + } + } + return false; +} + +bool NativeReanimatedModule::handleEvent( + const std::string &eventName, + jsi::Value &&payload, + double currentTime) { + jsi::Runtime &rt = *runtime.get(); + jsi::Object global = rt.global(); + jsi::String eventTimestampName = + jsi::String::createFromAscii(rt, "_eventTimestamp"); + global.setProperty(rt, eventTimestampName, currentTime); + onEvent(eventName, std::move(payload)); + global.setProperty(rt, eventTimestampName, jsi::Value::undefined()); + + // TODO: return true if Reanimated successfully handled the event + // to avoid sending it to JavaScript + return false; +} + +bool NativeReanimatedModule::handleRawEvent( + const RawEvent &rawEvent, + double currentTime) { + const EventTarget *eventTarget = rawEvent.eventTarget.get(); + if (eventTarget == nullptr) { + // after app reload scrollview is unmounted and its content offset is set to + // 0 and view is thrown into recycle pool setting content offset triggers + // scroll event eventTarget is null though, because it's unmounting we can + // just ignore this event, because it's an event on unmounted component + return false; + } + const std::string &type = rawEvent.type; + const ValueFactory &payloadFactory = rawEvent.payloadFactory; + + int tag = eventTarget->getTag(); + std::string eventType = type; + if (eventType.rfind("top", 0) == 0) { + eventType = "on" + eventType.substr(3); + } + std::string eventName = std::to_string(tag) + eventType; + jsi::Runtime &rt = *runtime.get(); + jsi::Value payload = payloadFactory(rt); + + return handleEvent(eventName, std::move(payload), currentTime); +} + +void NativeReanimatedModule::updateProps( + jsi::Runtime &rt, + const jsi::Value &shadowNodeValue, + const jsi::Value &props) { + ShadowNode::Shared shadowNode = shadowNodeFromValue(rt, shadowNodeValue); + + // TODO: support multiple surfaces + surfaceId_ = shadowNode->getSurfaceId(); + + if (isThereAnyLayoutProp(rt, props)) { + operationsInBatch_.emplace_back( + shadowNode, std::make_unique(rt, props)); + } else { + // TODO: batch with layout props changes? + Tag tag = shadowNode->getTag(); + synchronouslyUpdateUIPropsFunction(rt, tag, props); + } +} + +void NativeReanimatedModule::performOperations() { + if (operationsInBatch_.empty()) { + return; + } + + auto copiedOperationsQueue = std::move(operationsInBatch_); + operationsInBatch_ = + std::vector>>(); + + auto copiedTagsToRemove = std::move(tagsToRemove_); + tagsToRemove_ = std::vector(); + + react_native_assert(uiManager_ != nullptr); + const auto &shadowTreeRegistry = uiManager_->getShadowTreeRegistry(); + auto contextContainer = getContextContainerFromUIManager( + &*uiManager_); // TODO: use Scheduler::getContextContainer + PropsParserContext propsParserContext{surfaceId_, *contextContainer}; + jsi::Runtime &rt = *runtime.get(); + + shadowTreeRegistry.visit(surfaceId_, [&](ShadowTree const &shadowTree) { + shadowTree.commit([&](RootShadowNode const &oldRootShadowNode) { + // lock once due to performance reasons + auto lock = newestShadowNodesRegistry_->createLock(); + + auto rootNode = oldRootShadowNode.ShadowNode::clone(ShadowNodeFragment{}); + + for (const auto &pair : copiedOperationsQueue) { + const ShadowNodeFamily &family = pair.first->getFamily(); + react_native_assert(family.getSurfaceId() == surfaceId_); + + auto newRootNode = + rootNode->cloneTree(family, [&](ShadowNode const &oldShadowNode) { + const auto newest = + newestShadowNodesRegistry_->get(oldShadowNode.getTag()); + + const auto &source = newest == nullptr ? oldShadowNode : *newest; + + const auto newProps = source.getComponentDescriptor().cloneProps( + propsParserContext, + source.getProps(), + RawProps(rt, *pair.second)); + + return source.clone({/* .props = */ newProps}); + }); + + if (newRootNode == nullptr) { + // this happens when React removed the component but Reanimated still + // tries to animate it, let's skip update for this specific component + continue; + } + rootNode = newRootNode; + + auto ancestors = family.getAncestors(*rootNode); + for (const auto &pair : ancestors) { + const auto &parent = pair.first.get(); + const auto &child = parent.getChildren().at(pair.second); + newestShadowNodesRegistry_->set(child, parent.getTag()); + } + } + + // remove ShadowNodes and its ancestors from NewestShadowNodesRegistry + for (auto tag : copiedTagsToRemove) { + newestShadowNodesRegistry_->remove(tag); + } + + return std::static_pointer_cast(rootNode); + }); + }); +} + +void NativeReanimatedModule::removeShadowNodeFromRegistry( + jsi::Runtime &rt, + const jsi::Value &shadowNodeValue) { + auto shadowNode = shadowNodeFromValue(rt, shadowNodeValue); + tagsToRemove_.push_back(shadowNode->getTag()); +} + +void NativeReanimatedModule::dispatchCommand( + jsi::Runtime &rt, + const jsi::Value &shadowNodeValue, + const jsi::Value &commandNameValue, + const jsi::Value &argsValue) { + ShadowNode::Shared shadowNode = shadowNodeFromValue(rt, shadowNodeValue); + std::string commandName = stringFromValue(rt, commandNameValue); + folly::dynamic args = commandArgsFromValue(rt, argsValue); + + // TODO: use uiManager_->dispatchCommand once it's public + UIManager_dispatchCommand(uiManager_, shadowNode, commandName, args); +} + +jsi::Value NativeReanimatedModule::measure( + jsi::Runtime &rt, + const jsi::Value &shadowNodeValue) { + // based on implementation from UIManagerBinding.cpp + + auto shadowNode = shadowNodeFromValue(rt, shadowNodeValue); + // TODO: use uiManager_->getRelativeLayoutMetrics once it's public + // auto layoutMetrics = uiManager_->getRelativeLayoutMetrics( + // *shadowNode, nullptr, {/* .includeTransform = */ true}); + auto layoutMetrics = UIManager_getRelativeLayoutMetrics( + uiManager_, *shadowNode, nullptr, {/* .includeTransform = */ true}); + + if (layoutMetrics == EmptyLayoutMetrics) { + return jsi::Value::undefined(); + } + auto newestCloneOfShadowNode = + uiManager_->getNewestCloneOfShadowNode(*shadowNode); + + auto layoutableShadowNode = + traitCast(newestCloneOfShadowNode.get()); + facebook::react::Point originRelativeToParent = layoutableShadowNode + ? layoutableShadowNode->getLayoutMetrics().frame.origin + : facebook::react::Point(); + + auto frame = layoutMetrics.frame; + + jsi::Object result(rt); + result.setProperty( + rt, "x", jsi::Value(static_cast(originRelativeToParent.x))); + result.setProperty( + rt, "y", jsi::Value(static_cast(originRelativeToParent.y))); + result.setProperty( + rt, "width", jsi::Value(static_cast(frame.size.width))); + result.setProperty( + rt, "height", jsi::Value(static_cast(frame.size.height))); + result.setProperty( + rt, "pageX", jsi::Value(static_cast(frame.origin.x))); + result.setProperty( + rt, "pageY", jsi::Value(static_cast(frame.origin.y))); + return result; +} + +void NativeReanimatedModule::setUIManager( + std::shared_ptr uiManager) { + uiManager_ = uiManager; +} + +void NativeReanimatedModule::setNewestShadowNodesRegistry( + std::shared_ptr newestShadowNodesRegistry) { + newestShadowNodesRegistry_ = newestShadowNodesRegistry; +} +#endif // RCT_NEW_ARCH_ENABLED + } // namespace reanimated diff --git a/Common/cpp/Registries/EventHandlerRegistry.cpp b/Common/cpp/Registries/EventHandlerRegistry.cpp index 2fb4d257d04..fd9287130a1 100644 --- a/Common/cpp/Registries/EventHandlerRegistry.cpp +++ b/Common/cpp/Registries/EventHandlerRegistry.cpp @@ -25,7 +25,12 @@ void EventHandlerRegistry::unregisterEventHandler(unsigned long id) { void EventHandlerRegistry::processEvent( jsi::Runtime &rt, std::string eventName, - std::string eventPayload) { +#ifdef RCT_NEW_ARCH_ENABLED + jsi::Value &eventPayload +#else + std::string eventPayload +#endif + /**/) { std::vector> handlersForEvent; { const std::lock_guard lock(instanceMutex); @@ -36,6 +41,13 @@ void EventHandlerRegistry::processEvent( } } } +#ifdef RCT_NEW_ARCH_ENABLED + eventPayload.asObject(rt).setProperty( + rt, "eventName", jsi::String::createFromUtf8(rt, eventName)); + for (auto handler : handlersForEvent) { + handler->process(rt, eventPayload); + } +#else // We receive here a JS Map with JSON as a value of NativeMap key // { NativeMap: { "jsonProp": "json value" } } // So we need to extract only JSON part @@ -57,6 +69,7 @@ void EventHandlerRegistry::processEvent( for (auto handler : handlersForEvent) { handler->process(rt, eventObject); } +#endif } bool EventHandlerRegistry::isAnyHandlerWaitingForEvent(std::string eventName) { diff --git a/Common/cpp/Registries/NewestShadowNodesRegistry.cpp b/Common/cpp/Registries/NewestShadowNodesRegistry.cpp new file mode 100644 index 00000000000..ab5c0ecda7f --- /dev/null +++ b/Common/cpp/Registries/NewestShadowNodesRegistry.cpp @@ -0,0 +1,68 @@ +#ifdef RCT_NEW_ARCH_ENABLED + +#include "NewestShadowNodesRegistry.h" + +#include +#include + +using namespace facebook::react; + +namespace reanimated { + +void NewestShadowNodesRegistry::set( + ShadowNode::Shared shadowNode, + Tag parentTag) { + map_[shadowNode->getTag()] = std::make_pair(shadowNode, parentTag); +} + +bool NewestShadowNodesRegistry::has( + const ShadowNode::Shared &shadowNode) const { + return map_.find(shadowNode->getTag()) != map_.cend(); +} + +ShadowNode::Shared NewestShadowNodesRegistry::get(Tag tag) const { + const auto it = map_.find(tag); + return it != map_.cend() ? it->second.first : nullptr; +} + +void NewestShadowNodesRegistry::update(ShadowNode::Shared shadowNode) { + const auto it = map_.find(shadowNode->getTag()); + react_native_assert(it != map_.cend()); + it->second.first = shadowNode; +} + +void NewestShadowNodesRegistry::remove(Tag tag) { + if (map_.find(tag) == map_.cend()) { + return; + } + + auto shadowNode = map_[tag].first; + + while (shadowNode != nullptr) { + bool hasAnyChildInMap = false; + for (const auto &child : shadowNode->getChildren()) { + if (has(child)) { + hasAnyChildInMap = true; + break; + } + } + + if (hasAnyChildInMap) { + break; + } + + auto it = map_.find(shadowNode->getTag()); + Tag parentTag = it->second.second; + map_.erase(it); + + shadowNode = map_[parentTag].first; + } +} + +std::lock_guard NewestShadowNodesRegistry::createLock() const { + return std::lock_guard(mutex_); +} + +} // namespace reanimated + +#endif // RCT_NEW_ARCH_ENABLED diff --git a/Common/cpp/SharedItems/ShareableValue.cpp b/Common/cpp/SharedItems/ShareableValue.cpp index d65b2a16bc4..786c04229d9 100644 --- a/Common/cpp/SharedItems/ShareableValue.cpp +++ b/Common/cpp/SharedItems/ShareableValue.cpp @@ -1,4 +1,9 @@ #include + +#ifdef RCT_NEW_ARCH_ENABLED +#include +#endif + #include "FrozenObject.h" #include "MutableValue.h" #include "MutableValueSetterProxy.h" @@ -157,6 +162,13 @@ void ShareableValue::adapt( valueContainer = std::make_unique(std::make_shared( rt, object, runtimeManager, runtimeManager->scheduler)); +#ifdef RCT_NEW_ARCH_ENABLED + } else if (object.isHostObject(rt)) { + type = ValueType::ShadowNodeType; + auto shadowNode = object.getHostObject(rt)->shadowNode; + valueContainer = std::make_unique(shadowNode); + adaptCache(rt, value); +#endif } else { // create frozen object based on a copy of a given object type = ValueType::FrozenObjectType; @@ -278,6 +290,12 @@ jsi::Value ShareableValue::toJSValue(jsi::Runtime &rt) { auto &mutableObject = ValueWrapper::asMutableValue(valueContainer); return createHost(rt, mutableObject); } +#ifdef RCT_NEW_ARCH_ENABLED + case ValueType::ShadowNodeType: { + auto &shadowNode = ValueWrapper::asShadowNode(valueContainer); + return createHost(rt, std::make_shared(shadowNode)); + } +#endif case ValueType::HostFunctionType: { auto hostFunctionWrapper = ValueWrapper::asHostFunctionWrapper(valueContainer); diff --git a/Common/cpp/Tools/Mapper.cpp b/Common/cpp/Tools/Mapper.cpp index b6ed9a713fd..fcf161a624a 100644 --- a/Common/cpp/Tools/Mapper.cpp +++ b/Common/cpp/Tools/Mapper.cpp @@ -25,7 +25,11 @@ void Mapper::execute(jsi::Runtime &rt) { if (optimalizationLvl == 0) { mapper->callWithThis(rt, *mapper); // call styleUpdater } else { +#ifdef RCT_NEW_ARCH_ENABLED + jsi::Value newStyle = userUpdater->call(rt).asObject(rt); +#else jsi::Object newStyle = userUpdater->call(rt).asObject(rt); +#endif auto jsViewDescriptorArray = viewDescriptors->getValue(rt) .getObject(rt) .getProperty(rt, "value") @@ -34,11 +38,16 @@ void Mapper::execute(jsi::Runtime &rt) { for (int i = 0; i < jsViewDescriptorArray.length(rt); ++i) { auto jsViewDescriptor = jsViewDescriptorArray.getValueAtIndex(rt, i).getObject(rt); - (*updateProps)( +#ifdef RCT_NEW_ARCH_ENABLED + updateProps( + rt, jsViewDescriptor.getProperty(rt, "shadowNodeWrapper"), newStyle); +#else + updateProps( rt, static_cast(jsViewDescriptor.getProperty(rt, "tag").asNumber()), jsViewDescriptor.getProperty(rt, "name"), newStyle); +#endif } } } @@ -52,10 +61,20 @@ void Mapper::enableFastMode( } viewDescriptors = jsViewDescriptors; this->optimalizationLvl = optimalizationLvl; - updateProps = &module->updaterFunction; - jsi::Runtime *rt = module->runtime.get(); +#ifdef RCT_NEW_ARCH_ENABLED + updateProps = [this]( + jsi::Runtime &rt, + const jsi::Value &shadowNodeValue, + const jsi::Value &props) { + this->module->updateProps(rt, shadowNodeValue, props); + }; +#else + // TODO: don't get public field, instead call this->module->updateProps + updateProps = module->updatePropsFunction; +#endif + jsi::Runtime &rt = *module->runtime; userUpdater = std::make_shared( - updater->getValue(*rt).asObject(*rt).asFunction(*rt)); + updater->getValue(rt).asObject(rt).asFunction(rt)); } Mapper::~Mapper() { diff --git a/Common/cpp/Tools/RuntimeDecorator.cpp b/Common/cpp/Tools/RuntimeDecorator.cpp index 447a68c1102..fbc35f75444 100644 --- a/Common/cpp/Tools/RuntimeDecorator.cpp +++ b/Common/cpp/Tools/RuntimeDecorator.cpp @@ -96,10 +96,15 @@ void RuntimeDecorator::decorateRuntime( void RuntimeDecorator::decorateUIRuntime( jsi::Runtime &rt, - const UpdaterFunction updater, - const RequestFrameFunction requestFrame, + const UpdatePropsFunction updateProps, + const MeasureFunction measure, +#ifdef RCT_NEW_ARCH_ENABLED + const RemoveShadowNodeFromRegistryFunction removeShadowNodeFromRegistry, + const DispatchCommandFunction dispatchCommand, +#else const ScrollToFunction scrollTo, - const MeasuringFunction measure, +#endif + const RequestFrameFunction requestFrame, const TimeProviderFunction getCurrentTime, const RegisterSensorFunction registerSensor, const UnregisterSensorFunction unregisterSensor, @@ -108,42 +113,79 @@ void RuntimeDecorator::decorateUIRuntime( RuntimeDecorator::decorateRuntime(rt, "UI"); rt.global().setProperty(rt, "_UI", jsi::Value(true)); - auto clb = [updater]( +#ifdef RCT_NEW_ARCH_ENABLED + auto clb = [updateProps]( jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, const size_t count) -> jsi::Value { - const auto viewTag = args[0].asNumber(); - const jsi::Value *viewName = &args[1]; - const auto params = args[2].asObject(rt); - updater(rt, viewTag, *viewName, params); + updateProps(rt, args[0], args[1]); return jsi::Value::undefined(); }; - jsi::Value updateProps = jsi::Function::createFromHostFunction( - rt, jsi::PropNameID::forAscii(rt, "_updateProps"), 2, clb); - rt.global().setProperty(rt, "_updateProps", updateProps); + jsi::Value updatePropsHostFunction = jsi::Function::createFromHostFunction( + rt, jsi::PropNameID::forAscii(rt, "_updatePropsFabric"), 2, clb); + rt.global().setProperty(rt, "_updatePropsFabric", updatePropsHostFunction); - auto clb2 = [requestFrame]( - jsi::Runtime &rt, - const jsi::Value &thisValue, - const jsi::Value *args, - const size_t count) -> jsi::Value { - auto fun = - std::make_shared(args[0].asObject(rt).asFunction(rt)); - requestFrame([&rt, fun](double timestampMs) { - fun->call(rt, jsi::Value(timestampMs)); - }); + auto _removeShadowNodeFromRegistry = [removeShadowNodeFromRegistry]( + jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + const size_t count) -> jsi::Value { + removeShadowNodeFromRegistry(rt, args[0]); return jsi::Value::undefined(); }; - jsi::Value requestAnimationFrame = jsi::Function::createFromHostFunction( - rt, jsi::PropNameID::forAscii(rt, "requestAnimationFrame"), 1, clb2); - rt.global().setProperty(rt, "requestAnimationFrame", requestAnimationFrame); + jsi::Value removeShadowNodeFromRegistryHostFunction = + jsi::Function::createFromHostFunction( + rt, + jsi::PropNameID::forAscii(rt, "_removeShadowNodeFromRegistry"), + 2, + _removeShadowNodeFromRegistry); + rt.global().setProperty( + rt, + "_removeShadowNodeFromRegistry", + removeShadowNodeFromRegistryHostFunction); - auto clb3 = [scrollTo]( + auto clb3 = [dispatchCommand]( jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, const size_t count) -> jsi::Value { + dispatchCommand(rt, args[0], args[1], args[2]); + return jsi::Value::undefined(); + }; + jsi::Value dispatchCommandHostFunction = + jsi::Function::createFromHostFunction( + rt, jsi::PropNameID::forAscii(rt, "_dispatchCommand"), 3, clb3); + rt.global().setProperty(rt, "_dispatchCommand", dispatchCommandHostFunction); + + auto _measure = [measure]( + jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + const size_t count) -> jsi::Value { + return measure(rt, args[0]); + }; +#else + auto clb = [updateProps]( + jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + const size_t count) -> jsi::Value { + const auto viewTag = args[0].asNumber(); + const jsi::Value *viewName = &args[1]; + const auto params = args[2].asObject(rt); + updateProps(rt, viewTag, *viewName, params); + return jsi::Value::undefined(); + }; + jsi::Value updatePropsHostFunction = jsi::Function::createFromHostFunction( + rt, jsi::PropNameID::forAscii(rt, "_updatePropsPaper"), 3, clb); + rt.global().setProperty(rt, "_updatePropsPaper", updatePropsHostFunction); + + auto _scrollTo = [scrollTo]( + jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + const size_t count) -> jsi::Value { int viewTag = static_cast(args[0].asNumber()); double x = args[1].asNumber(); double y = args[2].asNumber(); @@ -152,14 +194,14 @@ void RuntimeDecorator::decorateUIRuntime( return jsi::Value::undefined(); }; jsi::Value scrollToFunction = jsi::Function::createFromHostFunction( - rt, jsi::PropNameID::forAscii(rt, "_scrollTo"), 4, clb3); + rt, jsi::PropNameID::forAscii(rt, "_scrollTo"), 4, _scrollTo); rt.global().setProperty(rt, "_scrollTo", scrollToFunction); - auto clb4 = [measure]( - jsi::Runtime &rt, - const jsi::Value &thisValue, - const jsi::Value *args, - const size_t count) -> jsi::Value { + auto _measure = [measure]( + jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + const size_t count) -> jsi::Value { int viewTag = static_cast(args[0].asNumber()); auto result = measure(viewTag); jsi::Object resultObject(rt); @@ -168,10 +210,28 @@ void RuntimeDecorator::decorateUIRuntime( } return resultObject; }; +#endif // RCT_NEW_ARCH_ENABLED + jsi::Value measureFunction = jsi::Function::createFromHostFunction( - rt, jsi::PropNameID::forAscii(rt, "_measure"), 1, clb4); + rt, jsi::PropNameID::forAscii(rt, "_measure"), 1, _measure); rt.global().setProperty(rt, "_measure", measureFunction); + auto clb2 = [requestFrame]( + jsi::Runtime &rt, + const jsi::Value &thisValue, + const jsi::Value *args, + const size_t count) -> jsi::Value { + auto fun = + std::make_shared(args[0].asObject(rt).asFunction(rt)); + requestFrame([&rt, fun](double timestampMs) { + fun->call(rt, jsi::Value(timestampMs)); + }); + return jsi::Value::undefined(); + }; + jsi::Value requestAnimationFrame = jsi::Function::createFromHostFunction( + rt, jsi::PropNameID::forAscii(rt, "requestAnimationFrame"), 1, clb2); + rt.global().setProperty(rt, "requestAnimationFrame", requestAnimationFrame); + auto clb6 = [getCurrentTime]( jsi::Runtime &rt, const jsi::Value &thisValue, diff --git a/Common/cpp/Tools/Scheduler.cpp b/Common/cpp/Tools/Scheduler.cpp index abd6ab3dc89..50942107cf8 100644 --- a/Common/cpp/Tools/Scheduler.cpp +++ b/Common/cpp/Tools/Scheduler.cpp @@ -1,4 +1,8 @@ +#ifdef __APPLE__ +#include +#else #include "Scheduler.h" +#endif namespace reanimated { diff --git a/Common/cpp/headers/Fabric/FabricUtils.h b/Common/cpp/headers/Fabric/FabricUtils.h new file mode 100644 index 00000000000..136f205d94d --- /dev/null +++ b/Common/cpp/headers/Fabric/FabricUtils.h @@ -0,0 +1,78 @@ +#pragma once +#ifdef RCT_NEW_ARCH_ENABLED + +#ifdef ANDROID +#include +#include +#endif +#include + +#include +#include + +using namespace facebook::react; + +namespace reanimated { + +struct UIManagerBindingPublic { + void *vtable; + std::shared_ptr uiManager_; +}; + +struct UIManagerPublic { + void *vtable; + SharedComponentDescriptorRegistry componentDescriptorRegistry_; + UIManagerDelegate *delegate_; + UIManagerAnimationDelegate *animationDelegate_{nullptr}; + RuntimeExecutor const runtimeExecutor_{}; + ShadowTreeRegistry shadowTreeRegistry_{}; + BackgroundExecutor const backgroundExecutor_{}; + ContextContainer::Shared contextContainer_; +}; + +#ifdef ANDROID +struct BindingPublic : public jni::HybridClass, + public SchedulerDelegate, + public LayoutAnimationStatusDelegate { + butter::shared_mutex installMutex_; + std::shared_ptr mountingManager_; + std::shared_ptr scheduler_; +}; + +struct SchedulerPublic : public UIManagerDelegate { + SchedulerDelegate *delegate_; + SharedComponentDescriptorRegistry componentDescriptorRegistry_; + RuntimeExecutor runtimeExecutor_; +}; + +RuntimeExecutor getRuntimeExecutorFromBinding(Binding *binding); +#endif + +std::shared_ptr getContextContainerFromUIManager( + const UIManager *uiManager); + +void UIManager_dispatchCommand( + const std::shared_ptr &uiManager, + const ShadowNode::Shared &shadowNode, + std::string const &commandName, + folly::dynamic const &args); + +LayoutMetrics UIManager_getRelativeLayoutMetrics( + const std::shared_ptr &uiManager, + ShadowNode const &shadowNode, + ShadowNode const *ancestorShadowNode, + LayoutableShadowNode::LayoutInspectingPolicy policy); + +SharedShadowNode UIManager_cloneNode( + const UIManager *uiManager, + const ShadowNode::Shared &shadowNode, + const SharedShadowNodeSharedList &children = nullptr, + const RawProps *rawProps = nullptr); + +void UIManager_appendChild( + const ShadowNode::Shared &parentShadowNode, + const ShadowNode::Shared &childShadowNode); + +} // namespace reanimated + +#endif // RCT_NEW_ARCH_ENABLED diff --git a/Common/cpp/headers/Fabric/ReanimatedUIManagerBinding.h b/Common/cpp/headers/Fabric/ReanimatedUIManagerBinding.h new file mode 100644 index 00000000000..533ecf5850e --- /dev/null +++ b/Common/cpp/headers/Fabric/ReanimatedUIManagerBinding.h @@ -0,0 +1,46 @@ +#pragma once +#ifdef RCT_NEW_ARCH_ENABLED + +#include +#include +#include +#include +#include + +#include + +#include "NewestShadowNodesRegistry.h" + +using namespace facebook; +using namespace react; + +namespace reanimated { + +class ReanimatedUIManagerBinding : public UIManagerBinding { + public: + static void createAndInstallIfNeeded( + jsi::Runtime &runtime, + RuntimeExecutor const &runtimeExecutor, + std::shared_ptr const &uiManager, + std::shared_ptr const + &newestShadowNodesRegistry); + + ReanimatedUIManagerBinding( + std::shared_ptr uiManager, + RuntimeExecutor runtimeExecutor, + std::shared_ptr newestShadowNodesRegistry); + + ~ReanimatedUIManagerBinding(); + + void invalidate() const; + + jsi::Value get(jsi::Runtime &runtime, jsi::PropNameID const &name) override; + + private: + std::shared_ptr uiManager_; + std::shared_ptr newestShadowNodesRegistry_; +}; + +} // namespace reanimated + +#endif // RCT_NEW_ARCH_ENABLED diff --git a/Common/cpp/headers/NativeModules/NativeReanimatedModule.h b/Common/cpp/headers/NativeModules/NativeReanimatedModule.h index fdcea13424d..ae4af469b85 100644 --- a/Common/cpp/headers/NativeModules/NativeReanimatedModule.h +++ b/Common/cpp/headers/NativeModules/NativeReanimatedModule.h @@ -1,8 +1,14 @@ #pragma once -#include +#ifdef RCT_NEW_ARCH_ENABLED +#include +#include "NewestShadowNodesRegistry.h" +#endif + #include #include +#include +#include #include #include "AnimatedSensorModule.h" @@ -34,8 +40,12 @@ class NativeReanimatedModule : public NativeReanimatedModuleSpec, std::shared_ptr scheduler, std::shared_ptr rt, std::shared_ptr errorHandler, +#ifdef RCT_NEW_ARCH_ENABLED + // nothing +#else std::function propObtainer, +#endif std::shared_ptr layoutAnimationsProxy, PlatformDepMethodsHolder platformDepMethodsHolder); @@ -77,11 +87,48 @@ class NativeReanimatedModule : public NativeReanimatedModuleSpec, const jsi::Value &nativeProps) override; void onRender(double timestampMs); +#ifdef RCT_NEW_ARCH_ENABLED + void onEvent(std::string eventName, jsi::Value &&eventAsString); +#else void onEvent(std::string eventName, std::string eventAsString); +#endif bool isAnyHandlerWaitingForEvent(std::string eventName); void maybeRequestRender(); - UpdaterFunction updaterFunction; + UpdatePropsFunction updatePropsFunction; + + bool handleEvent( + const std::string &eventName, + jsi::Value &&payload, + double currentTime); + +#ifdef RCT_NEW_ARCH_ENABLED + bool handleRawEvent(const RawEvent &rawEvent, double currentTime); + + void updateProps( + jsi::Runtime &rt, + const jsi::Value &shadowNodeValue, + const jsi::Value &props); + + void removeShadowNodeFromRegistry( + jsi::Runtime &rt, + const jsi::Value &shadowNodeValue); + + void performOperations(); + + void dispatchCommand( + jsi::Runtime &rt, + const jsi::Value &shadowNodeValue, + const jsi::Value &commandNameValue, + const jsi::Value &argsValue); + + jsi::Value measure(jsi::Runtime &rt, const jsi::Value &shadowNodeValue); + + void setUIManager(std::shared_ptr uiManager); + + void setNewestShadowNodesRegistry( + std::shared_ptr newestShadowNodesRegistry); +#endif jsi::Value registerSensor( jsi::Runtime &rt, @@ -91,6 +138,10 @@ class NativeReanimatedModule : public NativeReanimatedModuleSpec, void unregisterSensor(jsi::Runtime &rt, const jsi::Value &sensorId) override; private: +#ifdef RCT_NEW_ARCH_ENABLED + bool isThereAnyLayoutProp(jsi::Runtime &rt, const jsi::Value &props); +#endif // RCT_NEW_ARCH_ENABLED + std::shared_ptr mapperRegistry; std::shared_ptr eventHandlerRegistry; std::function requestRender; @@ -103,6 +154,25 @@ class NativeReanimatedModule : public NativeReanimatedModuleSpec, std::shared_ptr layoutAnimationsProxy; AnimatedSensorModule animatedSensorModule; ConfigurePropsFunction configurePropsPlatformFunction; + +#ifdef RCT_NEW_ARCH_ENABLED + SynchronouslyUpdateUIPropsFunction synchronouslyUpdateUIPropsFunction; + + std::shared_ptr uiManager_; + + // After app reload, surfaceId on iOS is still 1 but on Android it's 11. + // We can store surfaceId of the most recent ShadowNode as a workaround. + SurfaceId surfaceId_ = -1; + + std::vector>> + operationsInBatch_; // TODO: refactor std::pair to custom struct + + std::shared_ptr newestShadowNodesRegistry_; + + std::vector tagsToRemove_; // from newestShadowNodesRegistry_ +#endif + + std::unordered_set nativePropNames_; // filled by configureProps }; } // namespace reanimated diff --git a/Common/cpp/headers/Registries/EventHandlerRegistry.h b/Common/cpp/headers/Registries/EventHandlerRegistry.h index d887a4cf913..90ef848dcf2 100644 --- a/Common/cpp/headers/Registries/EventHandlerRegistry.h +++ b/Common/cpp/headers/Registries/EventHandlerRegistry.h @@ -27,10 +27,18 @@ class EventHandlerRegistry { void registerEventHandler(std::shared_ptr eventHandler); void unregisterEventHandler(unsigned long id); +#ifdef RCT_NEW_ARCH_ENABLED + void processEvent( + jsi::Runtime &rt, + std::string eventName, + jsi::Value &eventPayload); +#else void processEvent( jsi::Runtime &rt, std::string eventName, std::string eventPayload); +#endif + bool isAnyHandlerWaitingForEvent(std::string eventName); }; diff --git a/Common/cpp/headers/Registries/NewestShadowNodesRegistry.h b/Common/cpp/headers/Registries/NewestShadowNodesRegistry.h new file mode 100644 index 00000000000..c8cdf137fcf --- /dev/null +++ b/Common/cpp/headers/Registries/NewestShadowNodesRegistry.h @@ -0,0 +1,41 @@ +#pragma once +#ifdef RCT_NEW_ARCH_ENABLED + +#include +#include +#include +#include + +using namespace facebook::react; + +namespace reanimated { + +class NewestShadowNodesRegistry { + public: + std::lock_guard createLock() const; + // returns a lock you need to hold when calling any of the methods below + + void set(ShadowNode::Shared shadowNode, Tag parentTag); + // updates ShadowNode and sets parent tag, to be called from Reanimated + + bool has(const ShadowNode::Shared &shadowNode) const; + // checks if ShadowNode exists in the registry + + ShadowNode::Shared get(Tag tag) const; + // returns the most recent version of ShadowNode or nullptr if not found + + void update(ShadowNode::Shared shadowNode); + // updates ShadowNode that already exists in registry, to be called from RN + + void remove(Tag tag); + // removes ShadowNode from map along with its ancestors + + private: + std::unordered_map> map_; + // tag -> (most recent clone of shadow node, parent tag) + mutable std::mutex mutex_; // Protects `map_`. +}; + +} // namespace reanimated + +#endif // RCT_NEW_ARCH_ENABLED diff --git a/Common/cpp/headers/SharedItems/SharedParent.h b/Common/cpp/headers/SharedItems/SharedParent.h index 88a28d8439d..8f3085066e1 100644 --- a/Common/cpp/headers/SharedItems/SharedParent.h +++ b/Common/cpp/headers/SharedItems/SharedParent.h @@ -17,6 +17,9 @@ enum class ValueType { WorkletFunctionType, // function that gets run on the UI thread FrozenObjectType, // frozen object, can only be set and never modified FrozenArrayType, // frozen array, can only be set and never modified +#ifdef RCT_NEW_ARCH_ENABLED + ShadowNodeType, // ShadowNode::Shared +#endif // RCT_NEW_ARCH_ENABLED }; class ShareableValue; diff --git a/Common/cpp/headers/SharedItems/ValueWrapper.h b/Common/cpp/headers/SharedItems/ValueWrapper.h index beaf8034f5d..d751cdaab5d 100644 --- a/Common/cpp/headers/SharedItems/ValueWrapper.h +++ b/Common/cpp/headers/SharedItems/ValueWrapper.h @@ -1,6 +1,9 @@ #pragma once #include +#ifdef RCT_NEW_ARCH_ENABLED +#include +#endif #include #include #include @@ -9,6 +12,8 @@ #include "SharedParent.h" #include "WorkletsCache.h" +using namespace facebook::react; + namespace reanimated { class HostFunctionWrapper; @@ -42,6 +47,10 @@ class ValueWrapper { const std::unique_ptr &valueContainer); static inline const std::shared_ptr &asMutableValue( const std::unique_ptr &valueContainer); +#ifdef RCT_NEW_ARCH_ENABLED + static inline const ShadowNode::Shared &asShadowNode( + const std::unique_ptr &valueContainer); +#endif static const HostFunctionWrapper *asHostFunctionWrapper( const std::unique_ptr &valueContainer); @@ -109,6 +118,15 @@ class MutableValueWrapper : public ValueWrapper { std::shared_ptr value; }; +#ifdef RCT_NEW_ARCH_ENABLED +class ShadowNodeValueWrapper : public ValueWrapper { + public: + explicit ShadowNodeValueWrapper(const ShadowNode::Shared &_value) + : ValueWrapper(ValueType::ShadowNodeType), value(_value) {} + ShadowNode::Shared value; +}; +#endif + inline bool ValueWrapper::asBoolean( const std::unique_ptr &valueContainer) { return static_cast(valueContainer.get())->value; @@ -150,6 +168,13 @@ inline const std::shared_ptr &ValueWrapper::asMutableValue( return static_cast(valueContainer.get())->value; } +#ifdef RCT_NEW_ARCH_ENABLED +inline const ShadowNode::Shared &ValueWrapper::asShadowNode( + const std::unique_ptr &valueContainer) { + return static_cast(valueContainer.get())->value; +} +#endif + inline const HostFunctionWrapper *ValueWrapper::asHostFunctionWrapper( const std::unique_ptr &valueContainer) { return static_cast(valueContainer.get()); diff --git a/Common/cpp/headers/SpecTools/ErrorHandler.h b/Common/cpp/headers/SpecTools/ErrorHandler.h index 433c8c3afad..b19b8f00e83 100644 --- a/Common/cpp/headers/SpecTools/ErrorHandler.h +++ b/Common/cpp/headers/SpecTools/ErrorHandler.h @@ -2,7 +2,12 @@ #include #include + +#ifdef __APPLE__ +#include "RNReanimated/Scheduler.h" +#else #include "Scheduler.h" +#endif namespace reanimated { diff --git a/Common/cpp/headers/Tools/Mapper.h b/Common/cpp/headers/Tools/Mapper.h index 75bb672847b..9b53025a7ad 100644 --- a/Common/cpp/headers/Tools/Mapper.h +++ b/Common/cpp/headers/Tools/Mapper.h @@ -29,7 +29,7 @@ class Mapper : public std::enable_shared_from_this { std::vector> outputs; bool dirty = true; std::shared_ptr userUpdater; - UpdaterFunction *updateProps; + UpdatePropsFunction updateProps; int optimalizationLvl = 0; std::shared_ptr viewDescriptors; diff --git a/Common/cpp/headers/Tools/PlatformDepMethodsHolder.h b/Common/cpp/headers/Tools/PlatformDepMethodsHolder.h index 2c6558556eb..08ac999d666 100644 --- a/Common/cpp/headers/Tools/PlatformDepMethodsHolder.h +++ b/Common/cpp/headers/Tools/PlatformDepMethodsHolder.h @@ -1,25 +1,56 @@ #pragma once #include -#include + +#ifdef RCT_NEW_ARCH_ENABLED +#include +#endif + #include #include #include using namespace facebook; +#ifdef RCT_NEW_ARCH_ENABLED +using namespace react; +#endif + namespace reanimated { -using UpdaterFunction = std::function; +using UpdatePropsFunction = std::function; +using RemoveShadowNodeFromRegistryFunction = + std::function; +using DispatchCommandFunction = std::function; +using MeasureFunction = std::function< + jsi::Value(jsi::Runtime &rt, const jsi::Value &shadowNodeValue)>; + +#else + +using UpdatePropsFunction = std::function; -using RequestRender = - std::function, jsi::Runtime &rt)>; using ScrollToFunction = std::function; -using MeasuringFunction = +using MeasureFunction = std::function>(int)>; + +#endif // RCT_NEW_ARCH_ENABLED + +using RequestRender = + std::function, jsi::Runtime &rt)>; using TimeProviderFunction = std::function; using RegisterSensorFunction = @@ -33,14 +64,18 @@ using ConfigurePropsFunction = std::function; }): React.ReactElement { const animatedProps = useAnimatedProps(() => { - return ({ text: text.value } as unknown) as TextInputProps; + return { text: text.value } as unknown as TextInputProps; }); return ( diff --git a/Example/tsconfig.json b/Example/tsconfig.json index 9667c3a701e..26a54029dc7 100644 --- a/Example/tsconfig.json +++ b/Example/tsconfig.json @@ -3,7 +3,8 @@ "compilerOptions": { "baseUrl": ".", "paths": { - "react-native-reanimated": ["../react-native-reanimated.d.ts"] + "react-native-reanimated": ["../"], + "react": ["./node_modules/@types/react"], } }, "include": ["index.js", "src/**/*", "reanimated1/**/*", "test/**/*"] diff --git a/Example/yarn.lock b/Example/yarn.lock index a8a76a7292f..75b5ecd26d4 100644 --- a/Example/yarn.lock +++ b/Example/yarn.lock @@ -9,13 +9,6 @@ dependencies: "@jridgewell/trace-mapping" "^0.3.0" -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - "@babel/code-frame@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" @@ -865,11 +858,6 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== -"@babel/helper-plugin-utils@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz#86c2347da5acbf5583ba0a10aed4c9bf9da9cf96" - integrity sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA== - "@babel/helper-plugin-utils@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" @@ -1362,14 +1350,6 @@ "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-export-namespace-from@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz#b22864ccd662db9606edb2287ea5fd1709f05378" - integrity sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-proposal-json-strings@^7.12.13", "@babel/plugin-proposal-json-strings@^7.14.2": version "7.14.2" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz#830b4e2426a782e8b2878fbfe2cba85b70cbf98c" @@ -2703,19 +2683,19 @@ dependencies: "@types/hammerjs" "^2.0.36" -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== +"@eslint/eslintrc@^1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.2.3.tgz#fcaa2bcef39e13d6e9e7f6271f4cc7cae1174886" + integrity sha512-uGo44hIwoLGNyduRpjdEpovcbMdd+Nv7amtmJxnKmI8xj6yd5LncmSwDa5NgX/41lIFJtkjD6YdVfgEzPfJ5UA== dependencies: ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" + debug "^4.3.2" + espree "^9.3.2" globals "^13.9.0" - ignore "^4.0.6" + ignore "^5.2.0" import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" + js-yaml "^4.1.0" + minimatch "^3.1.2" strip-json-comments "^3.1.1" "@expo/config-plugins@1.0.33", "@expo/config-plugins@^1.0.18": @@ -2880,16 +2860,16 @@ dependencies: "@hapi/hoek" "^9.0.0" -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== +"@humanwhocodes/config-array@^0.9.2": + version "0.9.5" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" + integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== dependencies: - "@humanwhocodes/object-schema" "^1.2.0" + "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" minimatch "^3.0.4" -"@humanwhocodes/object-schema@^1.2.0": +"@humanwhocodes/object-schema@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== @@ -3817,11 +3797,6 @@ dependencies: "@sinonjs/commons" "^1.7.0" -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": version "7.1.12" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d" @@ -4058,10 +4033,10 @@ dependencies: invariant "^2.2.4" -abab@^2.0.3, abab@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== +abab@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== abort-controller@^3.0.0: version "3.0.0" @@ -4096,34 +4071,27 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" -acorn-jsx@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" - integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^7.1.1: version "7.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^7.1.1, acorn@^7.4.0: +acorn@^7.1.1: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.2.4: +acorn@^8.7.1: version "8.7.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -ajv@^6.10.0, ajv@^6.12.4: +ajv@^6.10.0, ajv@^6.12.4, ajv@^6.5.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -4133,25 +4101,10 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.1: - version "8.10.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.10.0.tgz#e573f719bd3af069017e3b66538ab968d040e54d" - integrity sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - anser@^1.4.9: version "1.4.9" resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.9.tgz#1f85423a5dcf8da4631a341665ff675b96845760" -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - ansi-escapes@^4.2.1: version "4.3.1" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" @@ -4226,6 +4179,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -4293,6 +4251,14 @@ asap@~2.0.3, asap@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +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" + assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" @@ -4308,11 +4274,6 @@ astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - async-limiter@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" @@ -4334,7 +4295,6 @@ async@^2.4.0: 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== at-least-node@^1.0.0: version "1.0.0" @@ -4345,6 +4305,15 @@ atob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.1.tgz#ae2d5a729477f289d60dd7f96a6314a22dd6c22a" +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + +aws4@^1.8.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" + integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== + babel-core@^7.0.0-bridge.0: version "7.0.0-bridge.0" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" @@ -4570,10 +4539,16 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" -big-integer@1.6.x: - version "1.6.51" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" - integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + dependencies: + tweetnacl "^0.14.3" + +big-integer@^1.6.44: + version "1.6.48" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e" + integrity sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w== bl@^4.1.0: version "4.1.0" @@ -4604,19 +4579,19 @@ boolbase@^1.0.0, boolbase@~1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= -bplist-creator@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.1.0.tgz#018a2d1b587f769e379ef5519103730f8963ba1e" - integrity sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg== +bplist-creator@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.8.tgz#56b2a6e79e9aec3fc33bf831d09347d73794e79c" + integrity sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA== dependencies: - stream-buffers "2.2.x" + stream-buffers "~2.2.0" -bplist-parser@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.3.1.tgz#e1c90b2ca2a9f9474cc72f6862bbf3fee8341fd1" - integrity sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA== +bplist-parser@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" + integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw== dependencies: - big-integer "1.6.x" + big-integer "^1.6.44" brace-expansion@^1.1.7: version "1.1.11" @@ -4804,6 +4779,10 @@ capture-exit@^2.0.0: dependencies: rsvp "^4.8.4" +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + chalk@^2.0.0: version "2.4.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" @@ -5020,7 +4999,7 @@ colors@^1.0.3: resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== -combined-stream@^1.0.8: +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== @@ -5125,7 +5104,7 @@ core-js@^2.4.1: version "2.5.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" -core-util-is@~1.0.0: +core-util-is@1.0.2, 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" @@ -5155,11 +5134,11 @@ create-react-class@^15.6.2: object-assign "^4.1.1" cross-fetch@^3.0.4: - version "3.1.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" - integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + version "3.0.6" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.0.6.tgz#3a4040bc8941e653e0e9cf17f29ebcd177d3365c" + integrity sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ== dependencies: - node-fetch "2.6.7" + node-fetch "2.6.1" cross-spawn@^4.0.2: version "4.0.2" @@ -5234,7 +5213,7 @@ cssom@~0.3.6: resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== -cssstyle@^2.3.0: +cssstyle@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== @@ -5258,6 +5237,12 @@ d3-shape@^1.3.7: dependencies: d3-path "1" +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + data-urls@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" @@ -5277,25 +5262,25 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.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: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: ms "2.0.0" -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: +debug@^4.1.0, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" dependencies: ms "^2.1.1" +debug@^4.3.2: + 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" + decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -5312,10 +5297,10 @@ decamelize@^4.0.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== -decimal.js@^10.2.1: - version "10.3.1" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" - integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== +decimal.js@^10.2.0: + version "10.2.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" + integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== decode-uri-component@^0.2.0: version "0.2.0" @@ -5333,16 +5318,11 @@ deep-assign@^3.0.0: dependencies: is-obj "^1.0.0" -deep-is@^0.1.3: +deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -deep-is@~0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - deepmerge@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-3.3.0.tgz#d3c47fd6f3a93d517b14426b0628a17b0125f5f7" @@ -5393,7 +5373,6 @@ define-property@^2.0.2: 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== denodeify@^1.2.1: version "1.2.1" @@ -5519,6 +5498,12 @@ dtrace-provider@~0.8: dependencies: nan "^2.14.0" +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.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" @@ -5558,13 +5543,6 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - entities@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" @@ -5664,13 +5642,13 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -escodegen@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" - integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== +escodegen@^1.14.1: + version "1.14.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== dependencies: esprima "^4.0.1" - estraverse "^5.2.0" + estraverse "^4.2.0" esutils "^2.0.2" optionator "^0.8.1" optionalDependencies: @@ -5749,89 +5727,91 @@ eslint-scope@^5.0.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== dependencies: esrecurse "^4.3.0" - estraverse "^4.1.1" + estraverse "^5.2.0" -eslint-utils@^2.0.0, eslint-utils@^2.1.0: +eslint-utils@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== dependencies: eslint-visitor-keys "^1.1.0" +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" -eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - eslint-visitor-keys@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== -eslint@^7.32.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@^8.12.0: + version "8.15.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.15.0.tgz#fea1d55a7062da48d82600d2e0974c55612a11e9" + integrity sha512-GG5USZ1jhCu8HJkzGgeK8/+RGnHaNYZGrGDzUtigK3BsGESW/rs2az23XqE0WVwDxy1VRvvjSSGu5nB0Bu+6SA== dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" + "@eslint/eslintrc" "^1.2.3" + "@humanwhocodes/config-array" "^0.9.2" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" - debug "^4.0.1" + debug "^4.3.2" doctrine "^3.0.0" - enquirer "^2.3.5" escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.3.2" esquery "^1.4.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" + glob-parent "^6.0.1" globals "^13.6.0" - ignore "^4.0.6" + ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - js-yaml "^3.13.1" + js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" - minimatch "^3.0.4" + minimatch "^3.1.2" natural-compare "^1.4.0" optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" + regexpp "^3.2.0" + strip-ansi "^6.0.1" strip-json-comments "^3.1.0" - table "^6.0.9" text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== +espree@^9.3.2: + version "9.3.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.2.tgz#f58f77bd334731182801ced3380a8cc859091596" + integrity sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA== dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" + acorn "^8.7.1" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" @@ -5861,25 +5841,19 @@ estraverse@^4.1.0, estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" -estraverse@^5.1.0: +estraverse@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + +estraverse@^5.1.0, estraverse@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== -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== - -esutils@^2.0.0: +esutils@^2.0.0, esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" -esutils@^2.0.2: - 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" @@ -6086,6 +6060,11 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: 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@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" @@ -6099,6 +6078,14 @@ extglob@^2.0.4: 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" + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -6114,7 +6101,7 @@ fast-json-stable-stringify@^2.0.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.6, fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= @@ -6310,13 +6297,17 @@ foreach@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +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.8" + combined-stream "^1.0.6" mime-types "^2.1.12" fragment-cache@^0.2.1: @@ -6468,12 +6459,18 @@ getenv@^1.0.0: resolved "https://registry.yarnpkg.com/getenv/-/getenv-1.0.0.tgz#874f2e7544fbca53c7a4738f37de8605c3fcfc31" integrity sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg== -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== +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" dependencies: - is-glob "^4.0.1" + assert-plus "^1.0.0" + +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" glob-to-regexp@^0.4.0: version "0.4.1" @@ -6561,6 +6558,18 @@ growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + +har-validator@~5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -6680,22 +6689,13 @@ http-errors@~1.6.2: setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" dependencies: - agent-base "6" - debug "4" + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" human-signals@^1.1.1: version "1.1.1" @@ -6720,7 +6720,6 @@ hyphenate-style-name@^1.0.2, hyphenate-style-name@^1.0.3: iconv-lite@0.4.24: 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" @@ -6735,14 +6734,15 @@ ieee754@^1.1.13: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - ignore@^5.0.5: version "5.1.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + image-size@^0.6.0: version "0.6.3" resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.6.3.tgz#e7e5c65bb534bd7cdcedd6cb5166272a85f75fb2" @@ -6829,6 +6829,11 @@ invariant@*, invariant@^2.2.2, invariant@^2.2.4: dependencies: loose-envify "^1.0.0" +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" @@ -6980,6 +6985,13 @@ is-glob@^4.0.0, is-glob@^4.0.1: dependencies: is-extglob "^2.1.1" +is-glob@^4.0.3: + 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-interactive@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" @@ -7017,10 +7029,10 @@ is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== +is-potential-custom-element-name@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" + integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= is-regex@^1.1.0: version "1.1.0" @@ -7057,7 +7069,7 @@ is-symbol@^1.0.2: dependencies: has-symbols "^1.0.0" -is-typedarray@^1.0.0: +is-typedarray@^1.0.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 sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= @@ -7107,6 +7119,10 @@ isomorphic-fetch@^2.1.1: node-fetch "^1.0.1" whatwg-fetch ">=0.10.0" +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + istanbul-lib-coverage@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" @@ -7836,9 +7852,9 @@ joi@^17.2.1: "@sideway/pinpoint" "^2.0.0" jpeg-js@^0.4.0: - version "0.4.4" - resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.4.tgz#a9f1c6f1f9f0fa80cdb3484ed9635054d28936aa" - integrity sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg== + version "0.4.3" + resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.3.tgz#6158e09f1983ad773813704be80680550eff977b" + integrity sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q== js-tokens@^3.0.0: version "3.0.2" @@ -7855,6 +7871,17 @@ js-yaml@^3.13.1, js-yaml@^3.9.0: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + jsc-android@^250230.2.1: version "250230.2.1" resolved "https://registry.yarnpkg.com/jsc-android/-/jsc-android-250230.2.1.tgz#3790313a970586a03ab0ad47defbc84df54f1b83" @@ -7886,36 +7913,35 @@ jscodeshift@^0.13.1: write-file-atomic "^2.3.0" jsdom@^16.4.0: - version "16.7.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== + version "16.4.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb" + integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w== dependencies: - abab "^2.0.5" - acorn "^8.2.4" + abab "^2.0.3" + acorn "^7.1.1" acorn-globals "^6.0.0" cssom "^0.4.4" - cssstyle "^2.3.0" + cssstyle "^2.2.0" data-urls "^2.0.0" - decimal.js "^10.2.1" + decimal.js "^10.2.0" domexception "^2.0.1" - escodegen "^2.0.0" - form-data "^3.0.0" + escodegen "^1.14.1" html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" + is-potential-custom-element-name "^1.0.0" nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" + parse5 "5.1.1" + request "^2.88.2" + request-promise-native "^1.0.8" + saxes "^5.0.0" symbol-tree "^3.2.4" - tough-cookie "^4.0.0" + tough-cookie "^3.0.1" w3c-hr-time "^1.0.2" w3c-xmlserializer "^2.0.0" webidl-conversions "^6.1.0" whatwg-encoding "^1.0.5" whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.6" + whatwg-url "^8.0.0" + ws "^7.2.3" xml-name-validator "^3.0.0" jsesc@^2.5.1: @@ -7940,15 +7966,18 @@ json-schema-traverse@^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-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" +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" + json5@^0.5.0, json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" @@ -7998,6 +8027,15 @@ jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + "jsx-ast-utils@^2.4.1 || ^3.0.0": version "3.2.0" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82" @@ -8051,7 +8089,6 @@ levn@^0.4.1: levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" @@ -8143,6 +8180,10 @@ lodash.pick@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + lodash.template@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" @@ -8162,12 +8203,7 @@ lodash.throttle@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== - -lodash@^4.17.10, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.5, lodash@^4.7.0: +lodash@^4.17.10, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.5: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -8642,16 +8678,16 @@ micromatch@^4.0.4: braces "^3.0.1" picomatch "^2.2.3" +mime-db@1.44.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + mime-db@1.45.0: version "1.45.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== -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-db@>= 1.34.0 < 2": version "1.34.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.34.0.tgz#452d0ecff5c30346a6dc1e64b1eaee0d3719ff9a" @@ -8660,12 +8696,11 @@ mime-db@~1.33.0: version "1.33.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" -mime-types@^2.1.12: - 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== +mime-types@^2.1.12, mime-types@~2.1.18: + version "2.1.18" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" dependencies: - mime-db "1.52.0" + mime-db "~1.33.0" mime-types@^2.1.27, mime-types@~2.1.24: version "2.1.28" @@ -8674,11 +8709,12 @@ mime-types@^2.1.27, mime-types@~2.1.24: dependencies: mime-db "1.45.0" -mime-types@~2.1.18: - version "2.1.18" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" +mime-types@~2.1.19: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== dependencies: - mime-db "~1.33.0" + mime-db "1.44.0" mime@1.4.1: version "1.4.1" @@ -8721,6 +8757,13 @@ min-document@^2.19.0: dependencies: brace-expansion "^1.1.7" +minimatch@^3.1.2: + 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" @@ -8841,12 +8884,10 @@ node-dir@^0.1.17: dependencies: minimatch "^3.0.2" -node-fetch@2.6.7, node-fetch@^2.2.0, node-fetch@^2.6.0: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" +node-fetch@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== node-fetch@^1.0.1: version "1.7.3" @@ -8855,6 +8896,14 @@ node-fetch@^1.0.1: encoding "^0.1.11" is-stream "^1.0.1" +node-fetch@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.2.0.tgz#4ee79bde909262f9775f731e3656d0db55ced5b5" + +node-fetch@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -8949,6 +8998,11 @@ nwsapi@^2.2.0: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== +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== + ob1@0.59.0: version "0.59.0" resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.59.0.tgz#ee103619ef5cb697f2866e3577da6f0ecd565a36" @@ -9092,16 +9146,15 @@ open@^6.2.0: is-wsl "^1.1.0" optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" dependencies: deep-is "~0.1.3" - fast-levenshtein "~2.0.6" + fast-levenshtein "~2.0.4" levn "~0.3.0" prelude-ls "~1.1.2" type-check "~0.3.2" - word-wrap "~1.2.3" + wordwrap "~1.0.0" optionator@^0.9.1: version "0.9.1" @@ -9273,10 +9326,10 @@ parse-png@^2.1.0: dependencies: pngjs "^3.3.0" -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== +parse5@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== parseurl@~1.3.2: version "1.3.2" @@ -9317,6 +9370,10 @@ path-parse@^1.0.5, path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + phin@^2.9.1: version "2.9.3" resolved "https://registry.yarnpkg.com/phin/-/phin-2.9.3.tgz#f9b6ac10a035636fb65dfc576aaaa17b8743125c" @@ -9392,7 +9449,7 @@ pkg-up@^2.0.0: dependencies: find-up "^2.1.0" -plist@^3.0.2, plist@^3.0.5: +plist@^3.0.1, plist@^3.0.2: version "3.0.5" resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.5.tgz#2cbeb52d10e3cdccccf0c11a63a85d830970a987" integrity sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA== @@ -9427,7 +9484,6 @@ prelude-ls@^1.2.1: prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== prettier-linter-helpers@^1.0.0: version "1.0.0" @@ -9441,6 +9497,11 @@ prettier@^2.0.2: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== +prettier@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032" + integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew== + pretty-format@^26.4.0, pretty-format@^26.5.2, pretty-format@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" @@ -9474,10 +9535,6 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - promise-polyfill@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-6.1.0.tgz#dfa96943ea9c121fca4de9b5868cb39d3472e057" @@ -9542,7 +9599,11 @@ pseudomap@^1.0.2: resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= -psl@^1.1.33: +psl@^1.1.24: + version "1.1.28" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.28.tgz#4fb6ceb08a1e2214d4fd4de0ca22dae13740bc7b" + +psl@^1.1.28: version "1.8.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== @@ -9554,11 +9615,20 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + 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== +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + query-string@^6.13.6: version "6.13.7" resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.13.7.tgz#af53802ff6ed56f3345f92d40a056f93681026ee" @@ -9896,11 +9966,16 @@ regexp.prototype.flags@^1.3.0: call-bind "^1.0.2" define-properties "^1.1.3" -regexpp@^3.0.0, regexpp@^3.1.0: +regexpp@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + regexpu-core@^4.1.3: version "4.2.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.2.0.tgz#a3744fa03806cffe146dea4421a3e73bdcc47b1d" @@ -9958,6 +10033,48 @@ repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" +request-promise-core@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" + integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== + dependencies: + lodash "^4.17.19" + +request-promise-native@^1.0.8: + version "1.0.9" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" + integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== + dependencies: + request-promise-core "1.1.4" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + +request@^2.88.2: + 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.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + 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.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" @@ -10108,7 +10225,7 @@ 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.1.0, safe-buffer@~5.1.1: +safe-buffer@^5.0.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" @@ -10128,10 +10245,9 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3": +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sane@^4.0.3: version "4.1.0" @@ -10158,7 +10274,7 @@ sax@>=0.6.0, sax@^1.2.1, sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" -saxes@^5.0.1: +saxes@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== @@ -10215,7 +10331,7 @@ semver@^7.0.0: dependencies: lru-cache "^6.0.0" -semver@^7.2.1, semver@^7.3.2: +semver@^7.3.2: version "7.3.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== @@ -10361,13 +10477,13 @@ signal-exit@^3.0.3: integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== simple-plist@^1.1.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.3.1.tgz#16e1d8f62c6c9b691b8383127663d834112fb017" - integrity sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw== + version "1.1.1" + resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.1.1.tgz#54367ca28bc5996a982c325c1c4a4c1a05f4047c" + integrity sha512-pKMCVKvZbZTsqYR6RKgLfBHkh2cV89GXcA/0CVPje3sOiNOnXA8+rp/ciAMZ7JRaUdLzlEM6JFfUn+fS6Nt3hg== dependencies: - bplist-creator "0.1.0" - bplist-parser "0.3.1" - plist "^3.0.5" + bplist-creator "0.0.8" + bplist-parser "0.2.0" + plist "^3.0.1" simple-swizzle@^0.2.2: version "0.2.2" @@ -10397,15 +10513,6 @@ slice-ansi@^2.0.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - slugify@^1.3.4: version "1.5.3" resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.5.3.tgz#36e009864f5476bfd5db681222643d92339c890d" @@ -10474,7 +10581,6 @@ source-map@^0.5.0, source-map@^0.5.6: 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== source-map@^0.7.3: version "0.7.3" @@ -10517,6 +10623,21 @@ sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" +sshpk@^1.7.0: + version "1.14.2" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98" + 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" + ecc-jsbn "~0.1.1" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + stack-utils@^2.0.2, stack-utils@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" @@ -10552,10 +10673,14 @@ statuses@~1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" -stream-buffers@2.2.x: +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + +stream-buffers@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" - integrity sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg== strict-uri-encode@^2.0.0: version "2.0.0" @@ -10578,15 +10703,6 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -string-width@^4.2.3: - 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.prototype.matchall@^4.0.2: version "4.0.3" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.3.tgz#24243399bc31b0a49d19e2b74171a15653ec996a" @@ -10726,17 +10842,6 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -table@^6.0.9: - version "6.8.0" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" - integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - tail@^2.0.0: version "2.2.3" resolved "https://registry.yarnpkg.com/tail/-/tail-2.2.3.tgz#3e6bf65963bb868913e4e3b770cc1584c9d8091c" @@ -10881,26 +10986,36 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" -tough-cookie@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" - integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== +tough-cookie@^2.3.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + +tough-cookie@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" + integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== dependencies: - psl "^1.1.33" + ip-regex "^2.1.0" + psl "^1.1.28" punycode "^2.1.1" - universalify "^0.1.2" -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== +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" -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= +tr46@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" + integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== + dependencies: + punycode "^2.1.1" trim-right@^1.0.1: version "1.0.1" @@ -10929,6 +11044,16 @@ tsutils@^3.17.1: dependencies: tslib "^1.8.1" +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + 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" + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -10939,7 +11064,6 @@ type-check@^0.4.0, type-check@~0.4.0: type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== dependencies: prelude-ls "~1.1.2" @@ -11036,7 +11160,7 @@ unique-string@^1.0.0: dependencies: crypto-random-string "^1.0.0" -universalify@^0.1.0, universalify@^0.1.2: +universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -11161,6 +11285,14 @@ vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + vlq@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.1.tgz#c003f6e7c0b4c1edd623fd6ee50bbc0d6a1de468" @@ -11196,11 +11328,6 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= - webidl-conversions@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" @@ -11227,21 +11354,13 @@ whatwg-mimetype@^2.3.0: resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -whatwg-url@^8.0.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== +whatwg-url@^8.0.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837" + integrity sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw== dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" + lodash.sortby "^4.7.0" + tr46 "^2.0.2" webidl-conversions "^6.1.0" which-module@^2.0.0: @@ -11261,11 +11380,15 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" -word-wrap@^1.2.3, word-wrap@~1.2.3: +word-wrap@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" @@ -11314,10 +11437,20 @@ ws@^6.1.4: dependencies: async-limiter "~1.0.0" -ws@^7, ws@^7.0.0, ws@^7.4.6, ws@^7.5.1: - version "7.5.8" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.8.tgz#ac2729881ab9e7cbaf8787fe3469a48c5c7f636a" - integrity sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw== +ws@^7, ws@^7.2.3: + version "7.4.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.3.tgz#1f9643de34a543b8edb124bdcbc457ae55a6e5cd" + integrity sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA== + +ws@^7.0.0: + version "7.5.4" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.4.tgz#56bfa20b167427e138a7795de68d134fe92e21f9" + integrity sha512-zP9z6GXm6zC27YtspwH99T3qTG7bBFv2VIkeHstMLrLlDJuzA7tQ5ls3OJ1hOGGCzTQPniNJoHXIAOS0Jljohg== + +ws@^7.5.1: + version "7.5.7" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" + integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== xcode@^3.0.0, xcode@^3.0.1: version "3.0.1" @@ -11347,7 +11480,6 @@ xml-js@^1.6.11: xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== xml-parse-from-string@^1.0.0: version "1.0.1" @@ -11370,7 +11502,7 @@ xmlbuilder@^14.0.0: xmlbuilder@^9.0.7: version "9.0.7" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" - integrity sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ== + integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= xmlbuilder@~11.0.0: version "11.0.1" diff --git a/FabricExample/.prettierrc.js b/FabricExample/.prettierrc.js deleted file mode 100644 index 2b540746a75..00000000000 --- a/FabricExample/.prettierrc.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - arrowParens: 'avoid', - bracketSameLine: true, - bracketSpacing: false, - singleQuote: true, - trailingComma: 'all', -}; diff --git a/FabricExample/.prettierrc.json b/FabricExample/.prettierrc.json new file mode 100644 index 00000000000..792c8d89e60 --- /dev/null +++ b/FabricExample/.prettierrc.json @@ -0,0 +1,9 @@ +{ + "bracketSameLine": true, + "printWidth": 80, + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "trailingComma": "es5", + "quoteProps": "consistent" +} diff --git a/FabricExample/App.js b/FabricExample/App.js deleted file mode 100644 index f85f38d87ad..00000000000 --- a/FabricExample/App.js +++ /dev/null @@ -1,112 +0,0 @@ -/** - * Sample React Native App - * https://github.com/facebook/react-native - * - * @format - * @flow strict-local - */ - -import React from 'react'; -import type {Node} from 'react'; -import { - SafeAreaView, - ScrollView, - StatusBar, - StyleSheet, - Text, - useColorScheme, - View, -} from 'react-native'; - -import { - Colors, - DebugInstructions, - Header, - LearnMoreLinks, - ReloadInstructions, -} from 'react-native/Libraries/NewAppScreen'; - -const Section = ({children, title}): Node => { - const isDarkMode = useColorScheme() === 'dark'; - return ( - - - {title} - - - {children} - - - ); -}; - -const App: () => Node = () => { - const isDarkMode = useColorScheme() === 'dark'; - - const backgroundStyle = { - backgroundColor: isDarkMode ? Colors.darker : Colors.lighter, - }; - - return ( - - - -
- -
- Edit App.js to change this - screen and then come back to see your edits. -
-
- -
-
- -
-
- Read the docs to discover what to do next: -
- -
- - - ); -}; - -const styles = StyleSheet.create({ - sectionContainer: { - marginTop: 32, - paddingHorizontal: 24, - }, - sectionTitle: { - fontSize: 24, - fontWeight: '600', - }, - sectionDescription: { - marginTop: 8, - fontSize: 18, - fontWeight: '400', - }, - highlight: { - fontWeight: '700', - }, -}); - -export default App; diff --git a/FabricExample/App.tsx b/FabricExample/App.tsx new file mode 100644 index 00000000000..064929e7531 --- /dev/null +++ b/FabricExample/App.tsx @@ -0,0 +1,248 @@ +import { + FlatList, + Platform, + ScrollView, + StyleSheet, + Text, + TouchableNativeFeedback, + View, +} from 'react-native'; +import { NavigationContainer, useNavigation } from '@react-navigation/native'; + +import AnimatedSensorExample from './src/AnimatedSensorExample'; +import AnimatedTextInputExample from './src/AnimatedTextInputExample'; +import AnimatedTextWidthExample from './src/AnimatedTextWidthExample'; +import BokehExample from './src/BokehExample'; +import BouncingBoxExample from './src/BouncingBoxExample'; +import BubblesExample from './src/BubblesExample'; +import ChessboardExample from './src/ChessboardExample'; +import ColorExample from './src/ColorExample'; +import EmptyExample from './src/EmptyExample'; +import GestureHandlerExample from './src/GestureHandlerExample'; +import MeasureExample from './src/MeasureExample'; +import NewestShadowNodesRegistryRemoveExample from './src/NewestShadowNodesRegistryRemoveExample'; +import React from 'react'; +import { RectButton } from 'react-native-gesture-handler'; +import RefExample from './src/RefExample'; +import ScreenStackExample from './src/ScreenStackExample'; +import ScreenStackHeaderConfigBackgroundColorExample from './src/ScreenStackHeaderConfigBackgroundColorExample'; +import ScrollToExample from './src/ScrollToExample'; +import ScrollViewExample from './src/ScrollViewExample'; +import TransformExample from './src/TransformExample'; +import WidthExample from './src/WidthExample'; +import WorkletExample from './src/WorkletExample'; +import { createNativeStackNavigator } from '@react-navigation/native-stack'; + +const EXAMPLES = [ + { + name: 'AnimatedTextInputExample', + icon: '🎰', + title: 'Animated.TextInput value', + component: AnimatedTextInputExample, + }, + { + name: 'AnimatedTextWidthExample', + icon: '✂️', + title: 'Animated.Text width', + component: AnimatedTextWidthExample, + }, + { + name: 'BokehExample', + icon: '✨', + title: 'Bokeh', + component: BokehExample, + }, + { + name: 'BubblesExample', + icon: '🫧', + title: 'Bubbles', + component: BubblesExample, + }, + { + name: 'ColorExample', + icon: '🌈', + title: 'Colors', + component: ColorExample, + }, + { + name: 'ScreenStackHeaderConfigBackgroundColorExample', + icon: '🎨', + title: 'Screen header background color', + component: ScreenStackHeaderConfigBackgroundColorExample, + }, + { + name: 'ScreenStackExample', + icon: '🥞', + title: 'Screen stack', + component: ScreenStackExample, + }, + { + name: 'GestureHandlerExample', + icon: '👌', + title: 'Draggable circle', + component: GestureHandlerExample, + }, + { + name: 'BouncingBoxExample', + icon: '📦', + title: 'Bouncing box', + component: BouncingBoxExample, + }, + { + name: 'AnimatedSensorExample', + icon: '📡', + title: 'useAnimatedSensor', + component: AnimatedSensorExample, + }, + { + name: 'ScrollViewExample', + icon: '📜', + title: 'useAnimatedScrollHandler', + component: ScrollViewExample, + }, + { + name: 'ScrollToExample', + icon: '🦘', + title: 'scrollTo', + component: ScrollToExample, + }, + { + name: 'MeasureExample', + icon: '📐', + title: 'measure', + component: MeasureExample, + }, + { + name: 'WorkletExample', + icon: '🧵', + title: 'runOnJS / runOnUI', + component: WorkletExample, + }, + { + name: 'TransformExample', + icon: '🔄', + title: 'Transform', + component: TransformExample, + }, + { + name: 'WidthExample', + icon: '🌲', + title: 'Layout props', + component: WidthExample, + }, + { + name: 'RefExample', + icon: '🦑', + title: 'forwardRef & useImperativeHandle', + component: RefExample, + }, + { + name: 'ChessboardExample', + icon: '♟️', + title: 'Chessboard', + component: ChessboardExample, + }, + { + name: 'NewestShadowNodesRegistryRemoveExample', + icon: '🌓', + title: 'Conditional', + component: NewestShadowNodesRegistryRemoveExample, + }, + { + name: 'EmptyExample', + icon: '👻', + title: 'Empty', + component: EmptyExample, + }, +]; + +function HomeScreen() { + const navigation = useNavigation(); + + return ( + ( + navigation.navigate(item.name)} + /> + )} + renderScrollComponent={(props) => } + /> + ); +} + +function Item({ title, onPress }) { + if (Platform.OS === 'android') { + // RectButton doesn't work quite well on Android yet, + // so let's temporarily use React Native's TouchableNativeFeedback. + return ( + + + {title} + + + ); + } else { + return ( + + {title} + + ); + } +} + +function ItemSeparator() { + return ; +} + +const Stack = createNativeStackNavigator(); + +export default function App() { + // return ; + + return ( + + + + {EXAMPLES.map(({ name, title, component }) => ( + + ))} + + + ); +} + +export const styles = StyleSheet.create({ + list: { + backgroundColor: '#EFEFF4', + }, + separator: { + height: 1, + backgroundColor: '#DBDBE0', + }, + button: { + flex: 1, + height: 60, + padding: 15, + flexDirection: 'row', + alignItems: 'center', + backgroundColor: 'white', + }, + title: { + fontSize: 16, + backgroundColor: 'transparent', + }, +}); diff --git a/FabricExample/Gemfile.lock b/FabricExample/Gemfile.lock new file mode 100644 index 00000000000..640d2f1ed14 --- /dev/null +++ b/FabricExample/Gemfile.lock @@ -0,0 +1,100 @@ +GEM + remote: https://rubygems.org/ + specs: + CFPropertyList (3.0.5) + rexml + activesupport (6.1.4.6) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 1.6, < 2) + minitest (>= 5.1) + tzinfo (~> 2.0) + zeitwerk (~> 2.3) + addressable (2.8.0) + public_suffix (>= 2.0.2, < 5.0) + algoliasearch (1.27.5) + httpclient (~> 2.8, >= 2.8.3) + json (>= 1.5.1) + atomos (0.1.3) + claide (1.1.0) + cocoapods (1.11.2) + addressable (~> 2.8) + claide (>= 1.0.2, < 2.0) + cocoapods-core (= 1.11.2) + cocoapods-deintegrate (>= 1.0.3, < 2.0) + cocoapods-downloader (>= 1.4.0, < 2.0) + cocoapods-plugins (>= 1.0.0, < 2.0) + cocoapods-search (>= 1.0.0, < 2.0) + cocoapods-trunk (>= 1.4.0, < 2.0) + cocoapods-try (>= 1.1.0, < 2.0) + colored2 (~> 3.1) + escape (~> 0.0.4) + fourflusher (>= 2.3.0, < 3.0) + gh_inspector (~> 1.0) + molinillo (~> 0.8.0) + nap (~> 1.0) + ruby-macho (>= 1.0, < 3.0) + xcodeproj (>= 1.21.0, < 2.0) + cocoapods-core (1.11.2) + activesupport (>= 5.0, < 7) + addressable (~> 2.8) + algoliasearch (~> 1.0) + concurrent-ruby (~> 1.1) + fuzzy_match (~> 2.0.4) + nap (~> 1.0) + netrc (~> 0.11) + public_suffix (~> 4.0) + typhoeus (~> 1.0) + cocoapods-deintegrate (1.0.5) + cocoapods-downloader (1.5.1) + cocoapods-plugins (1.0.0) + nap + cocoapods-search (1.0.1) + cocoapods-trunk (1.6.0) + nap (>= 0.8, < 2.0) + netrc (~> 0.11) + cocoapods-try (1.2.0) + colored2 (3.1.2) + concurrent-ruby (1.1.9) + escape (0.0.4) + ethon (0.15.0) + ffi (>= 1.15.0) + ffi (1.15.5) + fourflusher (2.3.1) + fuzzy_match (2.0.4) + gh_inspector (1.1.3) + httpclient (2.8.3) + i18n (1.10.0) + concurrent-ruby (~> 1.0) + json (2.6.1) + minitest (5.15.0) + molinillo (0.8.0) + nanaimo (0.3.0) + nap (1.1.0) + netrc (0.11.0) + public_suffix (4.0.6) + rexml (3.2.5) + ruby-macho (2.5.1) + typhoeus (1.4.0) + ethon (>= 0.9.0) + tzinfo (2.0.4) + concurrent-ruby (~> 1.0) + xcodeproj (1.21.0) + CFPropertyList (>= 2.3.3, < 4.0) + atomos (~> 0.1.3) + claide (>= 1.0.2, < 2.0) + colored2 (~> 3.1) + nanaimo (~> 0.3.0) + rexml (~> 3.2.4) + zeitwerk (2.5.4) + +PLATFORMS + ruby + +DEPENDENCIES + cocoapods (~> 1.11, >= 1.11.2) + +RUBY VERSION + ruby 2.7.4p191 + +BUNDLED WITH + 2.2.27 diff --git a/FabricExample/README.md b/FabricExample/README.md new file mode 100644 index 00000000000..ac364145261 --- /dev/null +++ b/FabricExample/README.md @@ -0,0 +1,19 @@ +# React Native Reanimated example app with Fabric + +## Installing & running application + +Before running application you need to install all dependencies. To do that: +- In project's root directory run `yarn install` +- In FabricExample directory run `yarn install` + +### Android + +To run this application on Android you need to have Java 11 active on your computer. You can check which version you are using by running `javac --version`. You can change it by changing `JAVA_HOME` environment variable or in Android Studio settings. + +Then you can run this application by `yarn android` or from Android Studio. + +### iOS + +To run on iOS first go to `FabricExample/ios` and run `pod install`. This will install pods for Fabric architecture. + +Then in `FabricExample` run `yarn ios` or run application from Xcode. diff --git a/FabricExample/android/app/build.gradle b/FabricExample/android/app/build.gradle index 23339722c11..cc791b18aec 100644 --- a/FabricExample/android/app/build.gradle +++ b/FabricExample/android/app/build.gradle @@ -78,7 +78,7 @@ import com.android.build.OutputFile */ project.ext.react = [ - enableHermes: false, // clean and rebuild if changing + enableHermes: true, // clean and rebuild if changing ] apply from: "../../node_modules/react-native/react.gradle" diff --git a/FabricExample/android/build.gradle b/FabricExample/android/build.gradle index a53bfbfd50d..b3ccdc7ae3a 100644 --- a/FabricExample/android/build.gradle +++ b/FabricExample/android/build.gradle @@ -8,6 +8,7 @@ buildscript { minSdkVersion = 21 compileSdkVersion = 31 targetSdkVersion = 31 + kotlinVersion = "1.6.21" // for react-native-screens if (System.properties['os.arch'] == "aarch64") { // For M1 Users we need to use the NDK 24 which added support for aarch64 diff --git a/FabricExample/android/gradle.properties b/FabricExample/android/gradle.properties index fa4feae5f19..ac336f33972 100644 --- a/FabricExample/android/gradle.properties +++ b/FabricExample/android/gradle.properties @@ -37,4 +37,4 @@ reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 # your application. You should enable this flag either if you want # to write custom TurboModules/Fabric components OR use libraries that # are providing them. -newArchEnabled=false +newArchEnabled=true diff --git a/FabricExample/babel.config.js b/FabricExample/babel.config.js index f842b77fcfb..9fdec29821e 100644 --- a/FabricExample/babel.config.js +++ b/FabricExample/babel.config.js @@ -1,3 +1,4 @@ module.exports = { presets: ['module:metro-react-native-babel-preset'], + plugins: ['../plugin.js'], }; diff --git a/FabricExample/ios/FabricExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/FabricExample/ios/FabricExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000000..18d981003d6 --- /dev/null +++ b/FabricExample/ios/FabricExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/FabricExample/ios/Podfile b/FabricExample/ios/Podfile index dae197df435..e466fc50ffd 100644 --- a/FabricExample/ios/Podfile +++ b/FabricExample/ios/Podfile @@ -1,6 +1,8 @@ require_relative '../node_modules/react-native/scripts/react_native_pods' require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' +ENV['RCT_NEW_ARCH_ENABLED'] = '1' + platform :ios, '12.4' install! 'cocoapods', :deterministic_uuids => false diff --git a/FabricExample/ios/Podfile.lock b/FabricExample/ios/Podfile.lock index 54e68a21b2a..7a5bf0a0515 100644 --- a/FabricExample/ios/Podfile.lock +++ b/FabricExample/ios/Podfile.lock @@ -73,6 +73,7 @@ PODS: - FlipperKit/FlipperKitNetworkPlugin - fmt (6.2.1) - glog (0.3.5) + - hermes-engine (0.11.0) - libevent (2.1.12) - OpenSSL-Universal (1.1.1100) - RCT-Folly (2021.06.28.00-v2): @@ -86,6 +87,17 @@ PODS: - DoubleConversion - fmt (~> 6.2.1) - glog + - RCT-Folly/Fabric (2021.06.28.00-v2): + - boost + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - RCT-Folly/Futures (2021.06.28.00-v2): + - boost + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - libevent - RCTRequired (0.69.0-rc.0) - RCTTypeSafety (0.69.0-rc.0): - FBLazyVector (= 0.69.0-rc.0) @@ -114,8 +126,10 @@ PODS: - RCTRequired (= 0.69.0-rc.0) - RCTTypeSafety (= 0.69.0-rc.0) - React-Core (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) - React-jsi (= 0.69.0-rc.0) - React-jsiexecutor (= 0.69.0-rc.0) + - React-rncore (= 0.69.0-rc.0) - ReactCommon/turbomodule/core (= 0.69.0-rc.0) - React-Core (0.69.0-rc.0): - glog @@ -263,6 +277,328 @@ PODS: - React-logger (= 0.69.0-rc.0) - React-perflogger (= 0.69.0-rc.0) - React-runtimeexecutor (= 0.69.0-rc.0) + - React-Fabric (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-Fabric/animations (= 0.69.0-rc.0) + - React-Fabric/attributedstring (= 0.69.0-rc.0) + - React-Fabric/butter (= 0.69.0-rc.0) + - React-Fabric/componentregistry (= 0.69.0-rc.0) + - React-Fabric/componentregistrynative (= 0.69.0-rc.0) + - React-Fabric/components (= 0.69.0-rc.0) + - React-Fabric/config (= 0.69.0-rc.0) + - React-Fabric/core (= 0.69.0-rc.0) + - React-Fabric/debug_core (= 0.69.0-rc.0) + - React-Fabric/debug_renderer (= 0.69.0-rc.0) + - React-Fabric/imagemanager (= 0.69.0-rc.0) + - React-Fabric/leakchecker (= 0.69.0-rc.0) + - React-Fabric/mounting (= 0.69.0-rc.0) + - React-Fabric/runtimescheduler (= 0.69.0-rc.0) + - React-Fabric/scheduler (= 0.69.0-rc.0) + - React-Fabric/telemetry (= 0.69.0-rc.0) + - React-Fabric/templateprocessor (= 0.69.0-rc.0) + - React-Fabric/textlayoutmanager (= 0.69.0-rc.0) + - React-Fabric/uimanager (= 0.69.0-rc.0) + - React-Fabric/utils (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/animations (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/attributedstring (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/butter (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/componentregistry (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/componentregistrynative (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/components (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-Fabric/components/activityindicator (= 0.69.0-rc.0) + - React-Fabric/components/image (= 0.69.0-rc.0) + - React-Fabric/components/inputaccessory (= 0.69.0-rc.0) + - React-Fabric/components/legacyviewmanagerinterop (= 0.69.0-rc.0) + - React-Fabric/components/modal (= 0.69.0-rc.0) + - React-Fabric/components/root (= 0.69.0-rc.0) + - React-Fabric/components/safeareaview (= 0.69.0-rc.0) + - React-Fabric/components/scrollview (= 0.69.0-rc.0) + - React-Fabric/components/slider (= 0.69.0-rc.0) + - React-Fabric/components/text (= 0.69.0-rc.0) + - React-Fabric/components/textinput (= 0.69.0-rc.0) + - React-Fabric/components/unimplementedview (= 0.69.0-rc.0) + - React-Fabric/components/view (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/components/activityindicator (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/components/image (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/components/inputaccessory (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/components/legacyviewmanagerinterop (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/components/modal (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/components/root (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/components/safeareaview (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/components/scrollview (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/components/slider (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/components/text (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/components/textinput (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/components/unimplementedview (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/components/view (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - Yoga + - React-Fabric/config (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/core (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/debug_core (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/debug_renderer (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/imagemanager (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - React-RCTImage (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/leakchecker (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/mounting (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/runtimescheduler (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/scheduler (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/telemetry (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/templateprocessor (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/textlayoutmanager (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-Fabric/uimanager + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/uimanager (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-Fabric/utils (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.69.0-rc.0) + - RCTTypeSafety (= 0.69.0-rc.0) + - React-graphics (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-graphics (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - React-Core/Default (= 0.69.0-rc.0) + - React-hermes (0.69.0-rc.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2021.06.28.00-v2) + - RCT-Folly/Futures (= 2021.06.28.00-v2) + - React-cxxreact (= 0.69.0-rc.0) + - React-jsi (= 0.69.0-rc.0) + - React-jsiexecutor (= 0.69.0-rc.0) + - React-jsinspector (= 0.69.0-rc.0) + - React-perflogger (= 0.69.0-rc.0) - React-jsi (0.69.0-rc.0): - boost (= 1.76.0) - DoubleConversion @@ -274,6 +610,11 @@ PODS: - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) + - React-jsi/Fabric (0.69.0-rc.0): + - boost (= 1.76.0) + - DoubleConversion + - glog + - RCT-Folly (= 2021.06.28.00-v2) - React-jsiexecutor (0.69.0-rc.0): - DoubleConversion - glog @@ -284,6 +625,29 @@ PODS: - React-jsinspector (0.69.0-rc.0) - React-logger (0.69.0-rc.0): - glog + - react-native-safe-area-context (4.2.5): + - RCT-Folly + - RCTRequired + - RCTTypeSafety + - React + - react-native-safe-area-context/common (= 4.2.5) + - react-native-safe-area-context/fabric (= 4.2.5) + - ReactCommon/turbomodule/core + - react-native-safe-area-context/common (4.2.5): + - RCT-Folly + - RCTRequired + - RCTTypeSafety + - React + - ReactCommon/turbomodule/core + - react-native-safe-area-context/fabric (4.2.5): + - RCT-Folly + - RCTRequired + - RCTTypeSafety + - React + - React-Codegen + - react-native-safe-area-context/common + - React-RCTFabric + - ReactCommon/turbomodule/core - React-perflogger (0.69.0-rc.0) - React-RCTActionSheet (0.69.0-rc.0): - React-Core/RCTActionSheetHeaders (= 0.69.0-rc.0) @@ -302,6 +666,11 @@ PODS: - React-jsi (= 0.69.0-rc.0) - React-RCTNetwork (= 0.69.0-rc.0) - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-RCTFabric (0.69.0-rc.0): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - React-Core (= 0.69.0-rc.0) + - React-Fabric (= 0.69.0-rc.0) + - React-RCTImage (= 0.69.0-rc.0) - React-RCTImage (0.69.0-rc.0): - RCT-Folly (= 2021.06.28.00-v2) - RCTTypeSafety (= 0.69.0-rc.0) @@ -337,6 +706,7 @@ PODS: - React-Core/RCTVibrationHeaders (= 0.69.0-rc.0) - React-jsi (= 0.69.0-rc.0) - ReactCommon/turbomodule/core (= 0.69.0-rc.0) + - React-rncore (0.69.0-rc.0) - React-runtimeexecutor (0.69.0-rc.0): - React-jsi (= 0.69.0-rc.0) - ReactCommon/turbomodule/core (0.69.0-rc.0): @@ -350,6 +720,60 @@ PODS: - React-jsi (= 0.69.0-rc.0) - React-logger (= 0.69.0-rc.0) - React-perflogger (= 0.69.0-rc.0) + - RNGestureHandler (2.4.2): + - RCT-Folly (= 2021.06.28.00-v2) + - RCTRequired + - RCTTypeSafety + - React + - React-Codegen + - React-RCTFabric + - ReactCommon/turbomodule/core + - RNReanimated (3.0.0-rc.0): + - DoubleConversion + - FBLazyVector + - FBReactNativeSpec + - glog + - RCT-Folly (= 2021.06.28.00-v2) + - RCTRequired + - RCTTypeSafety + - React-callinvoker + - React-Codegen + - React-Core + - React-Core/DevSupport + - React-Core/RCTWebSocket + - React-CoreModules + - React-cxxreact + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-RCTActionSheet + - React-RCTAnimation + - React-RCTBlob + - React-RCTFabric + - React-RCTImage + - React-RCTLinking + - React-RCTNetwork + - React-RCTSettings + - React-RCTText + - ReactCommon/turbomodule/core + - Yoga + - RNScreens (3.13.1): + - RCT-Folly (= 2021.06.28.00-v2) + - RCTRequired + - RCTTypeSafety + - React + - React-Codegen + - React-RCTFabric + - ReactCommon/turbomodule/core + - RNScreens/common (= 3.13.1) + - RNScreens/common (3.13.1): + - RCT-Folly (= 2021.06.28.00-v2) + - RCTRequired + - RCTTypeSafety + - React + - React-Codegen + - React-RCTFabric + - ReactCommon/turbomodule/core - SocketRocket (0.6.0) - Yoga (1.14.0) - YogaKit (1.18.1): @@ -382,8 +806,11 @@ DEPENDENCIES: - FlipperKit/FlipperKitUserDefaultsPlugin (= 0.125.0) - FlipperKit/SKIOSNetworkPlugin (= 0.125.0) - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) + - hermes-engine (from `../node_modules/react-native/sdks/hermes/hermes-engine.podspec`) + - libevent (~> 2.1.12) - OpenSSL-Universal (= 1.1.1100) - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) + - RCT-Folly/Fabric (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`) - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) - React (from `../node_modules/react-native/`) @@ -395,22 +822,32 @@ DEPENDENCIES: - React-Core/RCTWebSocket (from `../node_modules/react-native/`) - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) + - React-Fabric (from `../node_modules/react-native/ReactCommon`) + - React-graphics (from `../node_modules/react-native/ReactCommon/react/renderer/graphics`) + - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) + - React-jsi/Fabric (from `../node_modules/react-native/ReactCommon/jsi`) - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`) - React-logger (from `../node_modules/react-native/ReactCommon/logger`) + - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) + - React-RCTFabric (from `../node_modules/react-native/React`) - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`) - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) - React-RCTText (from `../node_modules/react-native/Libraries/Text`) - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) + - React-rncore (from `../node_modules/react-native/ReactCommon`) - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) + - RNGestureHandler (from `../node_modules/react-native-gesture-handler`) + - RNReanimated (from `../..`) + - RNScreens (from `../node_modules/react-native-screens`) - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) SPEC REPOS: @@ -442,6 +879,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/React/FBReactNativeSpec" glog: :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" + hermes-engine: + :path: "../node_modules/react-native/sdks/hermes/hermes-engine.podspec" RCT-Folly: :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" RCTRequired: @@ -462,6 +901,12 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/React/CoreModules" React-cxxreact: :path: "../node_modules/react-native/ReactCommon/cxxreact" + React-Fabric: + :path: "../node_modules/react-native/ReactCommon" + React-graphics: + :path: "../node_modules/react-native/ReactCommon/react/renderer/graphics" + React-hermes: + :path: "../node_modules/react-native/ReactCommon/hermes" React-jsi: :path: "../node_modules/react-native/ReactCommon/jsi" React-jsiexecutor: @@ -470,6 +915,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon/jsinspector" React-logger: :path: "../node_modules/react-native/ReactCommon/logger" + react-native-safe-area-context: + :path: "../node_modules/react-native-safe-area-context" React-perflogger: :path: "../node_modules/react-native/ReactCommon/reactperflogger" React-RCTActionSheet: @@ -478,6 +925,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/Libraries/NativeAnimation" React-RCTBlob: :path: "../node_modules/react-native/Libraries/Blob" + React-RCTFabric: + :path: "../node_modules/react-native/React" React-RCTImage: :path: "../node_modules/react-native/Libraries/Image" React-RCTLinking: @@ -490,10 +939,18 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/Libraries/Text" React-RCTVibration: :path: "../node_modules/react-native/Libraries/Vibration" + React-rncore: + :path: "../node_modules/react-native/ReactCommon" React-runtimeexecutor: :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" ReactCommon: :path: "../node_modules/react-native/ReactCommon" + RNGestureHandler: + :path: "../node_modules/react-native-gesture-handler" + RNReanimated: + :path: "../.." + RNScreens: + :path: "../node_modules/react-native-screens" Yoga: :path: "../node_modules/react-native/ReactCommon/yoga" @@ -502,7 +959,7 @@ SPEC CHECKSUMS: CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99 DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54 FBLazyVector: b99cb3346bc0db29ef3b9f26238129ae91418ea2 - FBReactNativeSpec: 2ab3e2a82e3604680219aa61f3ee8f2462384959 + FBReactNativeSpec: 3ebcd656e2db52b6f833c5b9d2ba1756fdb9b6eb Flipper: 26fc4b7382499f1281eb8cb921e5c3ad6de91fe0 Flipper-Boost-iOSX: fd1e2b8cbef7e662a122412d7ac5f5bea715403c Flipper-DoubleConversion: 3d3d04a078d4f3a1b6c6916587f159dc11f232c4 @@ -514,6 +971,7 @@ SPEC CHECKSUMS: FlipperKit: cbdee19bdd4e7f05472a66ce290f1b729ba3cb86 fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 glog: 3d02b25ca00c2d456734d0bcff864cbc62f6ae1a + hermes-engine: 231d0c9a432723593f5a87d36e76037df9a71392 libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913 OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c RCT-Folly: 4d8508a426467c48885f1151029bc15fa5d7b3b8 @@ -522,30 +980,39 @@ SPEC CHECKSUMS: React: 85323d4724a0e422e26f7bc50031852d259756d8 React-bridging: 3f19645f2594a8cf51b7f7bce7236ac1fcdb8204 React-callinvoker: 2e50e37f3b8acfef761e99e0c5d29a6ac405ab76 - React-Codegen: d9baab828d2e4edefba089a6a8ace10c46e5276c + React-Codegen: 212377e11ee3c1de83f3a4cc1da42e8a0d90d3e3 React-Core: 62261aaf0e198c9124d2968c3ccfe8eeb95b457b React-CoreModules: e5da64dc1db1eac77d956a736c9fd0d34eb60d99 React-cxxreact: c7523fc0cccb8d581b813d249f10222b9253aab5 + React-Fabric: 305be3389c4440ff3b4825ac8b3ff67bd62c43f5 + React-graphics: 951ada4d4e1588cf854e875844de593ccfef61cb + React-hermes: bfa0434453c06fbce9359a8062295d613ed0be73 React-jsi: b6b28546d9b336ba904593b1ae9df0f4655ef4b5 React-jsiexecutor: 268169e1c5fe99720ae460a46cf3ff838ae7b356 React-jsinspector: 0ccc540558e64184f46f89fb38c71eeedb5599ef React-logger: 05263294a3b1b814eabfa0262e83afc1bb671fbc + react-native-safe-area-context: a9616f1fd257ff31946b518266a62f50dbcb3d5b React-perflogger: f82caf4672545fea50f2d7bed51c8329a2167cbc React-RCTActionSheet: 7ade12a6dd0cd780938fea3d34e5335f853694c2 React-RCTAnimation: 6eb99a3c54c5ebfab4714eb34c1b2d95ae2e6027 React-RCTBlob: 8306ac052e4fc9d1cf9387081a432f68d1921ddc + React-RCTFabric: 1e1ca38bed50b6e271f209e4100ca0bbab52f761 React-RCTImage: b9ea6cd8fee6399f4fc059cf8e586bc810d97376 React-RCTLinking: f6aa965fdfd2255a4987af9d0e64dd155f1c75b5 React-RCTNetwork: 6f9d0b198adbaa417334393306b24c4d855dd396 React-RCTSettings: 3a73a69bc9cf0abdd5ebf48b21aa720408edb6fc React-RCTText: 3554d694cf2f816a652e7c671a73bbbb57e53e4c React-RCTVibration: 6f181c21dbf4f1f8b67580124ef428dba25fb682 + React-rncore: 2b6ce224b88bbb0d624291d5505372cdcc799f31 React-runtimeexecutor: 078762b7835bf03fd11109fb4b505d1f1b70fdc2 ReactCommon: 34dea1fbf479d4cfe4b40bd9310f3d08e5f90943 + RNGestureHandler: ac67226292cd5e67e7203d682a7e39f85d7b88a9 + RNReanimated: 0302eab362af3c4068c3cb5663bede53b7299881 + RNScreens: 592316e0744de3b640e90c335a45aad13088381a SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608 Yoga: fbc3321a51479606cd0c676e1a79176f9b5b9ae2 YogaKit: f782866e155069a2cca2517aafea43200b01fd5a -PODFILE CHECKSUM: 90b9710e84747220f959c565f70085532f535627 +PODFILE CHECKSUM: 5cc367b51a8e533adb079d4bb5d6532252436368 COCOAPODS: 1.11.3 diff --git a/FabricExample/metro.config.js b/FabricExample/metro.config.js index e91aba937cd..70cf06a4e5c 100644 --- a/FabricExample/metro.config.js +++ b/FabricExample/metro.config.js @@ -1,11 +1,32 @@ -/** - * Metro configuration for React Native - * https://github.com/facebook/react-native - * - * @format - */ +const path = require('path'); +const exclusionList = require('metro-config/src/defaults/exclusionList'); +const escape = require('escape-string-regexp'); +const pack = require('../package.json'); + +const root = path.resolve(__dirname, '..'); + +const modules = Object.keys(pack.peerDependencies); module.exports = { + projectRoot: __dirname, + watchFolders: [root], + + // We need to make sure that only one version is loaded for peerDependencies + // So we exclude them at the root, and alias them to the versions in example's node_modules + resolver: { + blacklistRE: exclusionList( + modules.map( + (m) => + new RegExp(`^${escape(path.join(root, 'node_modules', m))}\\/.*$`) + ) + ), + + extraNodeModules: modules.reduce((acc, name) => { + acc[name] = path.join(__dirname, 'node_modules', name); + return acc; + }, {}), + }, + transformer: { getTransformOptions: async () => ({ transform: { diff --git a/FabricExample/package.json b/FabricExample/package.json index 8cd70bed57d..f578c5bc2c5 100644 --- a/FabricExample/package.json +++ b/FabricExample/package.json @@ -1,5 +1,5 @@ { - "name": "fabricexample", + "name": "FabricExample", "version": "0.0.1", "private": true, "scripts": { @@ -7,21 +7,43 @@ "ios": "react-native run-ios", "start": "react-native start", "test": "jest", - "lint": "eslint ." + "lint": "eslint . --ext .js,.jsx,.ts,.tsx", + "ts-check": "yarn tsc --noEmit", + "lint:js": "yarn eslint src/ && yarn prettier --check src/", + "postinstall": "patch-package && echo 73fa47c9c033e2f1bf10ebab9ac58f02c94ffff9 > ./node_modules/react-native/sdks/.hermesversion" }, "dependencies": { + "@react-navigation/native": "^6.0.10", + "@react-navigation/native-stack": "^6.6.2", "react": "18.0.0", - "react-native": "0.69.0-rc.0" + "react-native": "0.69.0-rc.0", + "react-native-gesture-handler": "^2.4.2", + "react-native-reanimated": "link:../", + "react-native-safe-area-context": "^4.2.5", + "react-native-screens": "software-mansion/react-native-screens#568e588817538740dff23a3590748614d4c346e3" }, "devDependencies": { - "@babel/core": "^7.12.9", - "@babel/runtime": "^7.12.5", - "@react-native-community/eslint-config": "^2.0.0", + "@babel/core": "^7.17.5", + "@babel/preset-env": "^7.1.6", + "@babel/runtime": "^7.17.2", + "@react-native-community/eslint-config": "^3.0.0", + "@types/jest": "^27.4.1", + "@types/react": "^18.0.0", + "@types/react-native": "^0.67.1", + "@types/react-test-renderer": "^18.0.0", "babel-jest": "^26.6.3", - "eslint": "^7.32.0", + "eslint": "^8.12.0", "jest": "^26.6.3", "metro-react-native-babel-preset": "^0.70.1", - "react-test-renderer": "18.0.0" + "patch-package": "^6.4.7", + "prettier": "^2.6.1", + "react-test-renderer": "18.0.0", + "typescript": "^4.6.2" + }, + "resolutions": { + "@typescript-eslint/eslint-plugin": "^5.17.0", + "@typescript-eslint/parser": "^5.17.0", + "eslint-plugin-react-native": "^4.0.0" }, "jest": { "preset": "react-native" diff --git a/FabricExample/patches/react-native-gesture-handler+2.4.2.patch b/FabricExample/patches/react-native-gesture-handler+2.4.2.patch new file mode 100644 index 00000000000..a2324b2162b --- /dev/null +++ b/FabricExample/patches/react-native-gesture-handler+2.4.2.patch @@ -0,0 +1,37 @@ +diff --git a/node_modules/react-native-gesture-handler/android/src/main/jni/Android.mk b/node_modules/react-native-gesture-handler/android/src/main/jni/Android.mk +index 185709b..926b3e7 100644 +--- a/node_modules/react-native-gesture-handler/android/src/main/jni/Android.mk ++++ b/node_modules/react-native-gesture-handler/android/src/main/jni/Android.mk +@@ -28,7 +28,7 @@ LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) $(GENERATED_SRC_DIR)/codegen/jni + LOCAL_SHARED_LIBRARIES := libjsi \ + libfbjni \ + libglog \ +- libfolly_json \ ++ libfolly_runtime \ + libyoga \ + libreact_nativemodule_core \ + libturbomodulejsijni \ +@@ -36,7 +36,6 @@ LOCAL_SHARED_LIBRARIES := libjsi \ + libreact_render_core \ + libreact_render_graphics \ + libfabricjni \ +- libfolly_futures \ + libreact_debug \ + libreact_render_componentregistry \ + libreact_render_debug \ +diff --git a/node_modules/react-native-gesture-handler/ios/RNGestureHandlerModule.mm b/node_modules/react-native-gesture-handler/ios/RNGestureHandlerModule.mm +index d3d0453..7d3e508 100644 +--- a/node_modules/react-native-gesture-handler/ios/RNGestureHandlerModule.mm ++++ b/node_modules/react-native-gesture-handler/ios/RNGestureHandlerModule.mm +@@ -60,7 +60,10 @@ + (BOOL)requiresMainQueueSetup + + - (void)invalidate + { +- [_manager dropAllGestureHandlers]; ++ RNGestureHandlerManager *handlerManager = _manager; ++ dispatch_async(dispatch_get_main_queue(), ^{ ++ [handlerManager dropAllGestureHandlers]; ++ }); + + _manager = nil; + diff --git a/FabricExample/patches/react-native-safe-area-context+4.2.5.patch b/FabricExample/patches/react-native-safe-area-context+4.2.5.patch new file mode 100644 index 00000000000..7eea719afbc --- /dev/null +++ b/FabricExample/patches/react-native-safe-area-context+4.2.5.patch @@ -0,0 +1,34 @@ +diff --git a/node_modules/react-native-safe-area-context/android/src/main/jni/Android.mk b/node_modules/react-native-safe-area-context/android/src/main/jni/Android.mk +index 6166527..33a7e73 100644 +--- a/node_modules/react-native-safe-area-context/android/src/main/jni/Android.mk ++++ b/node_modules/react-native-safe-area-context/android/src/main/jni/Android.mk +@@ -20,7 +20,7 @@ LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) $(GENERATED_SRC_DIR)/codegen/jni + LOCAL_SHARED_LIBRARIES := libjsi \ + libfbjni \ + libglog \ +- libfolly_json \ ++ libfolly_runtime \ + libyoga \ + libreact_nativemodule_core \ + libturbomodulejsijni \ +@@ -28,7 +28,6 @@ LOCAL_SHARED_LIBRARIES := libjsi \ + libreact_render_core \ + libreact_render_graphics \ + libfabricjni \ +- libfolly_futures \ + libreact_debug \ + libreact_render_componentregistry \ + libreact_render_debug \ +diff --git a/node_modules/react-native-safe-area-context/common/cpp/Android.mk b/node_modules/react-native-safe-area-context/common/cpp/Android.mk +index a7680a6..69d86d6 100644 +--- a/node_modules/react-native-safe-area-context/common/cpp/Android.mk ++++ b/node_modules/react-native-safe-area-context/common/cpp/Android.mk +@@ -15,7 +15,7 @@ LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*.cpp) $(wildcard $(LOCAL_PATH)/reac + + LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) $(LOCAL_PATH)/react/renderer/components/safeareacontext + +-LOCAL_SHARED_LIBRARIES := libjsi libglog libfolly_json libyoga libreact_nativemodule_core librrc_view libreact_render_core libreact_render_graphics libfbjni libturbomodulejsijni libreact_codegen_rncore libreact_debug libreact_render_debug libreact_render_mapbuffer libreact_codegen_safeareacontext ++LOCAL_SHARED_LIBRARIES := libjsi libglog libfolly_runtime libyoga libreact_nativemodule_core librrc_view libreact_render_core libreact_render_graphics libfbjni libturbomodulejsijni libreact_codegen_rncore libreact_debug libreact_render_debug libreact_render_mapbuffer libreact_codegen_safeareacontext + + LOCAL_CFLAGS := \ + -DLOG_TAG=\"ReactNative\" diff --git a/FabricExample/patches/react-native-screens+3.13.1.patch b/FabricExample/patches/react-native-screens+3.13.1.patch new file mode 100644 index 00000000000..48f92c84565 --- /dev/null +++ b/FabricExample/patches/react-native-screens+3.13.1.patch @@ -0,0 +1,55 @@ +diff --git a/node_modules/react-native-screens/android/src/main/jni/Android.mk b/node_modules/react-native-screens/android/src/main/jni/Android.mk +index 914607f..7684d3b 100644 +--- a/node_modules/react-native-screens/android/src/main/jni/Android.mk ++++ b/node_modules/react-native-screens/android/src/main/jni/Android.mk +@@ -20,7 +20,7 @@ LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) $(GENERATED_SRC_DIR)/codegen/jni + LOCAL_SHARED_LIBRARIES := libjsi \ + libfbjni \ + libglog \ +- libfolly_json \ ++ libfolly_runtime \ + libyoga \ + libreact_nativemodule_core \ + libturbomodulejsijni \ +@@ -28,7 +28,6 @@ LOCAL_SHARED_LIBRARIES := libjsi \ + libreact_render_core \ + libreact_render_graphics \ + libfabricjni \ +- libfolly_futures \ + libreact_debug \ + libreact_render_componentregistry \ + libreact_render_debug \ +diff --git a/node_modules/react-native-screens/common/cpp/Android.mk b/node_modules/react-native-screens/common/cpp/Android.mk +index 3b8afa2..454e4ff 100644 +--- a/node_modules/react-native-screens/common/cpp/Android.mk ++++ b/node_modules/react-native-screens/common/cpp/Android.mk +@@ -15,7 +15,7 @@ LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) $(GENERATED_SRC_DIR)/codegen/jni + LOCAL_SHARED_LIBRARIES := libjsi \ + libfbjni \ + libglog \ +- libfolly_json \ ++ libfolly_runtime \ + libyoga \ + libreact_nativemodule_core \ + libturbomodulejsijni \ +@@ -23,7 +23,6 @@ LOCAL_SHARED_LIBRARIES := libjsi \ + libreact_render_core \ + libreact_render_graphics \ + libfabricjni \ +- libfolly_futures \ + libreact_debug \ + libreact_render_componentregistry \ + libreact_render_debug \ +diff --git a/node_modules/react-native-screens/ios/RNSScreenStack.mm b/node_modules/react-native-screens/ios/RNSScreenStack.mm +index 5a0e37d..7a5ca3b 100644 +--- a/node_modules/react-native-screens/ios/RNSScreenStack.mm ++++ b/node_modules/react-native-screens/ios/RNSScreenStack.mm +@@ -824,7 +824,7 @@ - (void)takeSnapshot + _snapshot = [_controller.topViewController.view snapshotViewAfterScreenUpdates:NO]; + } + +-- (void)mountingTransactionWillMountWithMetadata:(facebook::react::MountingTransactionMetadata const &)metadata ++- (void)mountingTransactionWillMount:(facebook::react::MountingTransaction const &)transaction + { + [self takeSnapshot]; + } diff --git a/react-native-reanimated-tests.tsx b/FabricExample/react-native-reanimated-tests.tsx similarity index 99% rename from react-native-reanimated-tests.tsx rename to FabricExample/react-native-reanimated-tests.tsx index a227f70c8cf..8ae63097f9b 100644 --- a/react-native-reanimated-tests.tsx +++ b/FabricExample/react-native-reanimated-tests.tsx @@ -1,6 +1,7 @@ /* eslint-disable @typescript-eslint/no-empty-function */ /* eslint-disable @typescript-eslint/ban-ts-comment */ /* eslint-disable @typescript-eslint/no-unused-vars */ +/* eslint-disable react-hooks/rules-of-hooks */ import React, { useState, useCallback, forwardRef } from 'react'; import { Text, @@ -53,7 +54,6 @@ import Animated, { SequenceAnimation, StyleLayoutAnimation, Animation, - // eslint-disable-next-line import/no-unresolved } from 'react-native-reanimated'; class Path extends React.Component<{ fill?: string }> { @@ -753,7 +753,7 @@ function updatePropsTest() { // test partial animated props function testPartialAnimatedProps() { const ap = useAnimatedProps(() => ({ - height: 100, + borderRadius: 100, })); const aps = useAnimatedProps(() => ({ source: { uri: 'whatever' }, diff --git a/FabricExample/src/AnimatedSensorExample.tsx b/FabricExample/src/AnimatedSensorExample.tsx new file mode 100644 index 00000000000..099b730e2fc --- /dev/null +++ b/FabricExample/src/AnimatedSensorExample.tsx @@ -0,0 +1,38 @@ +import Animated, { + useAnimatedStyle, + useAnimatedSensor, + SensorType, +} from 'react-native-reanimated'; +import { StyleSheet, View } from 'react-native'; + +import React from 'react'; + +export default function AnimatedSensorExample() { + const gravity = useAnimatedSensor(SensorType.GRAVITY, { interval: 16 }); + + const animatedStyle = useAnimatedStyle(() => { + return { + top: -gravity.sensor.value.y * 300, + left: gravity.sensor.value.x * 200, + }; + }); + + return ( + + + + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + alignItems: 'center', + justifyContent: 'center', + }, + box: { + width: 150, + height: 150, + backgroundColor: 'navy', + }, +}); diff --git a/FabricExample/src/AnimatedTextInputExample.tsx b/FabricExample/src/AnimatedTextInputExample.tsx new file mode 100644 index 00000000000..8bd6903be41 --- /dev/null +++ b/FabricExample/src/AnimatedTextInputExample.tsx @@ -0,0 +1,63 @@ +import Animated, { + useAnimatedProps, + useDerivedValue, + useSharedValue, + withTiming, +} from 'react-native-reanimated'; +import { + Button, + TextInput, + TextInputProps, + StyleSheet, + View, +} from 'react-native'; + +import React from 'react'; + +Animated.addWhitelistedNativeProps({ text: true }); + +const AnimatedTextInput = Animated.createAnimatedComponent(TextInput); + +export default function AnimatedTextInputExample() { + const ref = React.useRef(0); + + const sv = useSharedValue(0); + + const text = useDerivedValue(() => { + return Math.round(sv.value * 100).toString(); + }); + + const animatedProps = useAnimatedProps(() => { + return { text: text.value } as TextInputProps; + }); + + const handleToggle = () => { + ref.current = 1 - ref.current; + sv.value = withTiming(ref.current, { duration: 1000 }); + }; + + return ( + <> + +