diff --git a/.github/workflows/V8-reanimated-build-check-nightly.yml b/.github/workflows/V8-reanimated-build-check-nightly.yml index b79a507fb79..ba053a94a1b 100644 --- a/.github/workflows/V8-reanimated-build-check-nightly.yml +++ b/.github/workflows/V8-reanimated-build-check-nightly.yml @@ -33,17 +33,19 @@ jobs: java-version: '17' - name: Setup Yarn - # Sometimes `npx react-native init` fails due to dependency mismatches or other - # rather vague errors. This is a workaround for that. + # Sometimes `npx @react-native-community/cli init` fails at random. + # Pre-installing it with Yarn seems to improve stability. run: corepack enable && yarn init - - name: Install React Native - run: yarn add react-native + - name: Install React Native CLI + run: yarn add @react-native-community/cli - name: Create app - run: | - yarn react-native init ${{ env.APP_NAME }} --version ${{env.LATEST_SUPPORTED_RN_VERSION_IN_V8}} --skip-install --pm yarn --skip-install --install-pods false --skip-git-init - - name: Setup Yarn Modern + run: yarn rnc-cli init ${{ env.APP_NAME }} --version ${{env.LATEST_SUPPORTED_RN_VERSION_IN_V8}} --skip-install --pm yarn --install-pods false --skip-git-init + - name: Setup Yarn Modern in app working-directory: ${{ env.APP_NAME }} - run: touch yarn.lock && yarn set version berry && yarn config set nodeLinker node-modules + run: | + touch yarn.lock + yarn set version berry + yarn config set nodeLinker node-modules - name: Install dependencies working-directory: ${{ env.APP_NAME }} run: yarn install diff --git a/.github/workflows/example-ios-build-check.yml b/.github/workflows/example-ios-build-check.yml index b3cb44c11b7..5b1b6a3cacc 100644 --- a/.github/workflows/example-ios-build-check.yml +++ b/.github/workflows/example-ios-build-check.yml @@ -58,4 +58,4 @@ jobs: - name: Build app working-directory: ${{ matrix.working-directory }} - run: npx react-native run-ios --no-packager + run: yarn react-native run-ios --no-packager diff --git a/.github/workflows/expo-devclient-build-check-nightly.yml b/.github/workflows/expo-devclient-build-check-nightly.yml index 56a7f08aa9b..8f4a7773e88 100644 --- a/.github/workflows/expo-devclient-build-check-nightly.yml +++ b/.github/workflows/expo-devclient-build-check-nightly.yml @@ -66,7 +66,7 @@ jobs: - name: Build app (iOS) working-directory: ${{ env.APP_NAME }} if: ${{ matrix.platform == 'iOS' }} - run: npx react-native run-ios --simulator='iPhone 14' --terminal='Terminal' + run: yarn react-native run-ios --terminal='Terminal' - name: Build app (Android) working-directory: ${{ env.APP_NAME }}/android if: ${{ matrix.platform == 'Android' }} diff --git a/.github/workflows/monorepo-app-reanimated-build-check-action.yml b/.github/workflows/monorepo-app-reanimated-build-check-action.yml index f9262ddd4f3..729ef3503f7 100644 --- a/.github/workflows/monorepo-app-reanimated-build-check-action.yml +++ b/.github/workflows/monorepo-app-reanimated-build-check-action.yml @@ -35,15 +35,17 @@ jobs: # TODO: Put Monorepo template into a separate repo/package run: echo '{"name":"rnos-monorepo-tester","version":"1.0.0","license":"MIT","private":true,"workspaces":{"packages":["RootApp","packages/PackageApp", "AppA", "AppB"],"nohoist":["**/react","**/react-dom","**/react-native","**/react-native/**","**/react-native-codegen","**/react-native-dev-menu"]}}' > package.json - name: Install dependencies + working-directory: monorepo run: yarn install + - name: Install React Native CLI + working-directory: monorepo + run: yarn add -W @react-native-community/cli - name: Create RootApp working-directory: monorepo - # TODO: Revise if we want to hardcode 0.73 here. - run: npx react-native@0.73 init RootApp --skip-install --version 0.73 + run: yarn rnc-cli init RootApp --skip-install --pm yarn --install-pods false --skip-git-init - name: Create PackageApp working-directory: monorepo/packages - # TODO: Revise if we want to hardcode 0.73 here. - run: npx react-native@0.73 init PackageApp --skip-install --version 0.73 + run: yarn rnc-cli init PackageApp --skip-install --pm yarn --install-pods false --skip-git-init - name: Install dependencies for RootApp working-directory: monorepo/RootApp diff --git a/.github/workflows/react-native-nightly-reanimated-build-check-nightly.yml b/.github/workflows/react-native-nightly-reanimated-build-check-nightly.yml index 2491f8177cd..53739f28a2b 100644 --- a/.github/workflows/react-native-nightly-reanimated-build-check-nightly.yml +++ b/.github/workflows/react-native-nightly-reanimated-build-check-nightly.yml @@ -27,8 +27,8 @@ jobs: cancel-in-progress: true steps: - name: Setup Yarn - # Sometimes `npx react-native init` fails due to dependency mismatches or other - # rather vague errors. This is a workaround for that. + # Sometimes `npx @react-native-community/cli init` fails at random. + # Pre-installing it with Yarn seems to improve stability. run: corepack enable && yarn init - name: Set up JDK 18 if: ${{ matrix.platform == 'Android' }} @@ -41,14 +41,16 @@ jobs: if npm view react-native dist-tags | grep -q 'next:' ; then echo "REACT_NATIVE_TAG=next" >> $GITHUB_ENV fi - - name: Install React Native - run: yarn add react-native@${{ env.REACT_NATIVE_TAG }} + - name: Install React Native CLI + run: yarn add @react-native-community/cli - name: Create app - run: | - yarn react-native init ${{ env.APP_NAME }} --version ${{ env.REACT_NATIVE_TAG }} --pm yarn --skip-install --install-pods false --skip-git-init - - name: Setup Yarn Modern + run: yarn rnc-cli init ${{ env.APP_NAME }} --version ${{ env.REACT_NATIVE_TAG }} --pm yarn --skip-install --install-pods false --skip-git-init + - name: Setup Yarn Modern in app working-directory: ${{ env.APP_NAME }} - run: touch yarn.lock && yarn set version berry + run: | + touch yarn.lock + yarn set version berry + yarn config set nodeLinker node-modules - name: Install Reanimated working-directory: ${{ env.APP_NAME }} run: yarn add "react-native-reanimated@https://github.com/software-mansion/react-native-reanimated.git#workspace=react-native-reanimated&commit=${{ github.sha }}" @@ -67,7 +69,7 @@ jobs: - name: Build app (iOS) if: ${{ matrix.platform == 'iOS' }} working-directory: ${{ env.APP_NAME }} - run: yarn react-native run-ios --simulator='iPhone 14' + run: yarn react-native run-ios --terminal='Terminal' - name: Build app (Android) if: ${{ matrix.platform == 'Android' }} working-directory: ${{ env.APP_NAME }}/android diff --git a/.github/workflows/reanimated-compatibility-check-nightly.yml b/.github/workflows/reanimated-compatibility-check-nightly.yml index 8bde71c666e..308152632ae 100644 --- a/.github/workflows/reanimated-compatibility-check-nightly.yml +++ b/.github/workflows/reanimated-compatibility-check-nightly.yml @@ -44,13 +44,22 @@ jobs: uses: actions/setup-node@v3 with: node-version: 18 + - name: + Setup Yarn + # Sometimes `npx @react-native-community/cli init` fails at random. + # Pre-installing it with Yarn seems to improve stability. + run: corepack enable && yarn init + - name: Install React Native CLI + run: yarn add @react-native-community/cli - name: Create app - run: | - npx react-native@latest init ${{env.APP_NAME}} --version ${{ matrix.react-native.version }} --skip-install --pm yarn --skip-install --install-pods 0 --skip-git-init - - name: Setup Yarn Modern + run: yarn rnc-cli init ${{env.APP_NAME}} --version ${{ matrix.react-native.version }} --skip-install --pm yarn --install-pods 0 --skip-git-init + - name: Setup Yarn Modern in app # For convenience, sometimes there are vague issues with RN CLI and Yarn Legacy on the runner. working-directory: ${{ env.APP_NAME }} - run: corepack enable && yarn set version berry + run: | + touch yarn.lock + yarn set version berry + yarn config set nodeLinker node-modules - name: Install Reanimated working-directory: ${{ env.APP_NAME }} run: yarn add "react-native-reanimated@https://github.com/software-mansion/react-native-reanimated.git#workspace=react-native-reanimated&commit=${{ github.sha }}" diff --git a/.github/workflows/static-framework-reanimated-build-check-nightly.yml b/.github/workflows/static-framework-reanimated-build-check-nightly.yml index b7cff8b68ed..b29edb45149 100644 --- a/.github/workflows/static-framework-reanimated-build-check-nightly.yml +++ b/.github/workflows/static-framework-reanimated-build-check-nightly.yml @@ -21,20 +21,37 @@ jobs: concurrency: group: ios-static-framework-${{ matrix.react-native-architecture }}-${{ github.ref }} cancel-in-progress: true + env: + APP_NAME: app steps: - - name: Create React Native app - run: npx react-native init app + - name: Setup Yarn + # Sometimes `npx @react-native-community/cli init` fails at random. + # Pre-installing it with Yarn seems to improve stability. + run: corepack enable && yarn init + - name: Install React Native + run: yarn add @react-native-community/cli + - name: Create app + run: yarn rnc-cli init ${{ env.APP_NAME }} --skip-install --pm yarn --install-pods false --skip-git-init + - name: Setup Yarn Modern in app + working-directory: ${{ env.APP_NAME }} + run: | + touch yarn.lock + yarn set version berry + yarn config set nodeLinker node-modules + - name: Install dependencies + working-directory: ${{ env.APP_NAME }} + run: yarn install - name: Install Reanimated - working-directory: app + working-directory: ${{ env.APP_NAME }} run: yarn add "react-native-reanimated@https://github.com/software-mansion/react-native-reanimated.git#workspace=react-native-reanimated&commit=${{ github.sha }}" - name: Install Paper Pods if: ${{ matrix.react-native-architecture == 'Paper' }} - working-directory: app/ios + working-directory: ${{env.APP_NAME}}/ios run: export USE_FRAMEWORKS=static NO_FLIPPER=1 && bundle install && bundle exec pod install - name: Install Fabric Pods if: ${{ matrix.react-native-architecture == 'Fabric' }} - working-directory: app/ios - run: export USE_FRAMEWORKS=static NO_FLIPPER=1 RCT_NEW_ARCH_ENABLED=1 && bundle install && bundle exec pod install + working-directory: ${{env.APP_NAME}}/ios + run: export USE_FRAMEWORKS=static NO_FLIPPER=1 RCT_NEW_ARCH_ENABLED=1 && bundle install && bundle exec pod update - name: Build app - working-directory: app - run: npx react-native run-ios --no-packager + working-directory: ${{env.APP_NAME}}/ios + run: xcodebuild -workspace ${{env.APP_NAME}}.xcworkspace -scheme ${{env.APP_NAME}} -configuration Debug -destination 'generic/platform=iOS Simulator' build | xcpretty diff --git a/.github/workflows/windows-hosted-app-reanimated-build-check-nightly.yml b/.github/workflows/windows-hosted-app-reanimated-build-check-nightly.yml index dc188fe19b4..cdee2b230b2 100644 --- a/.github/workflows/windows-hosted-app-reanimated-build-check-nightly.yml +++ b/.github/workflows/windows-hosted-app-reanimated-build-check-nightly.yml @@ -25,17 +25,21 @@ jobs: with: distribution: 'zulu' java-version: '17' - - name: Setup Yarn - # Sometimes `npx react-native init` fails due to dependency mismatches or other - # rather vague errors. This is a workaround for that. + - name: + Setup Yarn + # Sometimes `npx @react-native-community/cli init` fails at random. + # Pre-installing it with Yarn seems to improve stability. run: corepack enable && yarn init --yes - name: Install React Native run: yarn add @react-native-community/cli - name: Create app run: yarn rnc-cli init ${{ env.APP_NAME }} --pm yarn --skip-install --install-pods false --skip-git-init - - name: Setup Yarn Modern + - name: Setup Yarn Modern in app working-directory: ${{ env.APP_NAME }} - run: touch yarn.lock && yarn set version berry + run: | + touch yarn.lock + yarn set version berry + yarn config set nodeLinker node-modules - name: Install dependencies working-directory: ${{ env.APP_NAME }} run: yarn diff --git a/README.md b/README.md index ab1de80b334..d7d5b17a312 100644 --- a/README.md +++ b/README.md @@ -5,9 +5,9 @@ > Reanimated 3 is here! Check out our [documentation page](https://docs.swmansion.com/react-native-reanimated/) for more information React Native Reanimated provides a more comprehensive, -low level abstraction for the Animated library API to be built -on top of and hence allow for much greater flexibility especially when it -comes to gesture based interactions. +low-level abstraction for the Animated library API on which to build, +allowing for much greater flexibility, especially when it comes to +gesture-based interactions. ### Nightly CI state diff --git a/apps/common-app/package.json b/apps/common-app/package.json index b924363a1aa..a42b01d9ec8 100644 --- a/apps/common-app/package.json +++ b/apps/common-app/package.json @@ -11,13 +11,11 @@ "@react-native-async-storage/async-storage": "*", "@react-native-community/slider": "*", "@react-native-masked-view/masked-view": "*", - "@react-native-picker/picker": "*", "@react-navigation/bottom-tabs": "*", "@react-navigation/native": "*", "@react-navigation/native-stack": "*", "@react-navigation/stack": "*", "@shopify/flash-list": "*", - "@stylexjs/babel-plugin": "*", "d3-shape": "*", "react": "*", "react-dom": "*", @@ -35,13 +33,11 @@ "@react-native-async-storage/async-storage": "^1.24.0", "@react-native-community/slider": "^4.5.5", "@react-native-masked-view/masked-view": "^0.3.1", - "@react-native-picker/picker": "^2.9.0", "@react-navigation/bottom-tabs": "^7.0.0", "@react-navigation/native": "^7.0.0", "@react-navigation/native-stack": "^7.0.0", "@react-navigation/stack": "^7.0.0", "@shopify/flash-list": "^1.7.1", - "@stylexjs/babel-plugin": "^0.7.5", "@tsconfig/react-native": "^3.0.0", "@types/d3-shape": "^3.1.1", "d3-shape": "^3.2.0", @@ -50,7 +46,7 @@ "patch-package": "^8.0.0", "prettier": "^3.3.3", "react": "18.3.1", - "react-native": "^0.76.1", + "react-native": "0.76.5", "react-native-gesture-handler": "2.20.2", "react-native-pager-view": "^6.4.1", "react-native-reanimated": "workspace:*", diff --git a/apps/fabric-example/ios/Podfile.lock b/apps/fabric-example/ios/Podfile.lock index cb3fe44cd7e..0ebb7516196 100644 --- a/apps/fabric-example/ios/Podfile.lock +++ b/apps/fabric-example/ios/Podfile.lock @@ -1,12 +1,12 @@ PODS: - boost (1.84.0) - DoubleConversion (1.1.6) - - FBLazyVector (0.76.1) + - FBLazyVector (0.76.5) - fmt (9.1.0) - glog (0.3.5) - - hermes-engine (0.76.1): - - hermes-engine/Pre-built (= 0.76.1) - - hermes-engine/Pre-built (0.76.1) + - hermes-engine (0.76.5): + - hermes-engine/Pre-built (= 0.76.5) + - hermes-engine/Pre-built (0.76.5) - RCT-Folly (2024.01.01.00): - boost - DoubleConversion @@ -23,32 +23,32 @@ PODS: - DoubleConversion - fmt (= 9.1.0) - glog - - RCTDeprecation (0.76.1) - - RCTRequired (0.76.1) - - RCTTypeSafety (0.76.1): - - FBLazyVector (= 0.76.1) - - RCTRequired (= 0.76.1) - - React-Core (= 0.76.1) - - React (0.76.1): - - React-Core (= 0.76.1) - - React-Core/DevSupport (= 0.76.1) - - React-Core/RCTWebSocket (= 0.76.1) - - React-RCTActionSheet (= 0.76.1) - - React-RCTAnimation (= 0.76.1) - - React-RCTBlob (= 0.76.1) - - React-RCTImage (= 0.76.1) - - React-RCTLinking (= 0.76.1) - - React-RCTNetwork (= 0.76.1) - - React-RCTSettings (= 0.76.1) - - React-RCTText (= 0.76.1) - - React-RCTVibration (= 0.76.1) - - React-callinvoker (0.76.1) - - React-Core (0.76.1): + - RCTDeprecation (0.76.5) + - RCTRequired (0.76.5) + - RCTTypeSafety (0.76.5): + - FBLazyVector (= 0.76.5) + - RCTRequired (= 0.76.5) + - React-Core (= 0.76.5) + - React (0.76.5): + - React-Core (= 0.76.5) + - React-Core/DevSupport (= 0.76.5) + - React-Core/RCTWebSocket (= 0.76.5) + - React-RCTActionSheet (= 0.76.5) + - React-RCTAnimation (= 0.76.5) + - React-RCTBlob (= 0.76.5) + - React-RCTImage (= 0.76.5) + - React-RCTLinking (= 0.76.5) + - React-RCTNetwork (= 0.76.5) + - React-RCTSettings (= 0.76.5) + - React-RCTText (= 0.76.5) + - React-RCTVibration (= 0.76.5) + - React-callinvoker (0.76.5) + - React-Core (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - RCTDeprecation - - React-Core/Default (= 0.76.1) + - React-Core/Default (= 0.76.5) - React-cxxreact - React-featureflags - React-hermes @@ -60,7 +60,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/CoreModulesHeaders (0.76.1): + - React-Core/CoreModulesHeaders (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -77,7 +77,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/Default (0.76.1): + - React-Core/Default (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -93,13 +93,13 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/DevSupport (0.76.1): + - React-Core/DevSupport (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - RCTDeprecation - - React-Core/Default (= 0.76.1) - - React-Core/RCTWebSocket (= 0.76.1) + - React-Core/Default (= 0.76.5) + - React-Core/RCTWebSocket (= 0.76.5) - React-cxxreact - React-featureflags - React-hermes @@ -111,7 +111,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTActionSheetHeaders (0.76.1): + - React-Core/RCTActionSheetHeaders (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -128,7 +128,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTAnimationHeaders (0.76.1): + - React-Core/RCTAnimationHeaders (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -145,7 +145,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTBlobHeaders (0.76.1): + - React-Core/RCTBlobHeaders (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -162,7 +162,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTImageHeaders (0.76.1): + - React-Core/RCTImageHeaders (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -179,7 +179,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTLinkingHeaders (0.76.1): + - React-Core/RCTLinkingHeaders (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -196,7 +196,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTNetworkHeaders (0.76.1): + - React-Core/RCTNetworkHeaders (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -213,7 +213,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTSettingsHeaders (0.76.1): + - React-Core/RCTSettingsHeaders (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -230,7 +230,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTTextHeaders (0.76.1): + - React-Core/RCTTextHeaders (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -247,7 +247,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTVibrationHeaders (0.76.1): + - React-Core/RCTVibrationHeaders (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -264,12 +264,12 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTWebSocket (0.76.1): + - React-Core/RCTWebSocket (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - RCTDeprecation - - React-Core/Default (= 0.76.1) + - React-Core/Default (= 0.76.5) - React-cxxreact - React-featureflags - React-hermes @@ -281,37 +281,37 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-CoreModules (0.76.1): + - React-CoreModules (0.76.5): - DoubleConversion - fmt (= 9.1.0) - RCT-Folly (= 2024.01.01.00) - - RCTTypeSafety (= 0.76.1) - - React-Core/CoreModulesHeaders (= 0.76.1) - - React-jsi (= 0.76.1) + - RCTTypeSafety (= 0.76.5) + - React-Core/CoreModulesHeaders (= 0.76.5) + - React-jsi (= 0.76.5) - React-jsinspector - React-NativeModulesApple - React-RCTBlob - - React-RCTImage (= 0.76.1) + - React-RCTImage (= 0.76.5) - ReactCodegen - ReactCommon - SocketRocket (= 0.7.1) - - React-cxxreact (0.76.1): + - React-cxxreact (0.76.5): - boost - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.76.1) - - React-debug (= 0.76.1) - - React-jsi (= 0.76.1) + - React-callinvoker (= 0.76.5) + - React-debug (= 0.76.5) + - React-jsi (= 0.76.5) - React-jsinspector - - React-logger (= 0.76.1) - - React-perflogger (= 0.76.1) - - React-runtimeexecutor (= 0.76.1) - - React-timing (= 0.76.1) - - React-debug (0.76.1) - - React-defaultsnativemodule (0.76.1): + - React-logger (= 0.76.5) + - React-perflogger (= 0.76.5) + - React-runtimeexecutor (= 0.76.5) + - React-timing (= 0.76.5) + - React-debug (0.76.5) + - React-defaultsnativemodule (0.76.5): - DoubleConversion - glog - hermes-engine @@ -336,7 +336,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-domnativemodule (0.76.1): + - React-domnativemodule (0.76.5): - DoubleConversion - glog - hermes-engine @@ -358,7 +358,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-Fabric (0.76.1): + - React-Fabric (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -369,21 +369,21 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.76.1) - - React-Fabric/attributedstring (= 0.76.1) - - React-Fabric/componentregistry (= 0.76.1) - - React-Fabric/componentregistrynative (= 0.76.1) - - React-Fabric/components (= 0.76.1) - - React-Fabric/core (= 0.76.1) - - React-Fabric/dom (= 0.76.1) - - React-Fabric/imagemanager (= 0.76.1) - - React-Fabric/leakchecker (= 0.76.1) - - React-Fabric/mounting (= 0.76.1) - - React-Fabric/observers (= 0.76.1) - - React-Fabric/scheduler (= 0.76.1) - - React-Fabric/telemetry (= 0.76.1) - - React-Fabric/templateprocessor (= 0.76.1) - - React-Fabric/uimanager (= 0.76.1) + - React-Fabric/animations (= 0.76.5) + - React-Fabric/attributedstring (= 0.76.5) + - React-Fabric/componentregistry (= 0.76.5) + - React-Fabric/componentregistrynative (= 0.76.5) + - React-Fabric/components (= 0.76.5) + - React-Fabric/core (= 0.76.5) + - React-Fabric/dom (= 0.76.5) + - React-Fabric/imagemanager (= 0.76.5) + - React-Fabric/leakchecker (= 0.76.5) + - React-Fabric/mounting (= 0.76.5) + - React-Fabric/observers (= 0.76.5) + - React-Fabric/scheduler (= 0.76.5) + - React-Fabric/telemetry (= 0.76.5) + - React-Fabric/templateprocessor (= 0.76.5) + - React-Fabric/uimanager (= 0.76.5) - React-featureflags - React-graphics - React-jsi @@ -393,7 +393,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/animations (0.76.1): + - React-Fabric/animations (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -413,7 +413,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/attributedstring (0.76.1): + - React-Fabric/attributedstring (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -433,7 +433,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistry (0.76.1): + - React-Fabric/componentregistry (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -453,7 +453,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistrynative (0.76.1): + - React-Fabric/componentregistrynative (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -473,7 +473,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components (0.76.1): + - React-Fabric/components (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -484,9 +484,9 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.76.1) - - React-Fabric/components/root (= 0.76.1) - - React-Fabric/components/view (= 0.76.1) + - React-Fabric/components/legacyviewmanagerinterop (= 0.76.5) + - React-Fabric/components/root (= 0.76.5) + - React-Fabric/components/view (= 0.76.5) - React-featureflags - React-graphics - React-jsi @@ -496,7 +496,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/legacyviewmanagerinterop (0.76.1): + - React-Fabric/components/legacyviewmanagerinterop (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -516,7 +516,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/root (0.76.1): + - React-Fabric/components/root (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -536,7 +536,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/view (0.76.1): + - React-Fabric/components/view (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -557,7 +557,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-Fabric/core (0.76.1): + - React-Fabric/core (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -577,7 +577,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/dom (0.76.1): + - React-Fabric/dom (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -597,7 +597,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/imagemanager (0.76.1): + - React-Fabric/imagemanager (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -617,7 +617,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/leakchecker (0.76.1): + - React-Fabric/leakchecker (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -637,7 +637,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/mounting (0.76.1): + - React-Fabric/mounting (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -657,7 +657,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/observers (0.76.1): + - React-Fabric/observers (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -668,7 +668,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/observers/events (= 0.76.1) + - React-Fabric/observers/events (= 0.76.5) - React-featureflags - React-graphics - React-jsi @@ -678,7 +678,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/observers/events (0.76.1): + - React-Fabric/observers/events (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -698,7 +698,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/scheduler (0.76.1): + - React-Fabric/scheduler (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -720,7 +720,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/telemetry (0.76.1): + - React-Fabric/telemetry (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -740,7 +740,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/templateprocessor (0.76.1): + - React-Fabric/templateprocessor (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -760,7 +760,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager (0.76.1): + - React-Fabric/uimanager (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -771,7 +771,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/uimanager/consistency (= 0.76.1) + - React-Fabric/uimanager/consistency (= 0.76.5) - React-featureflags - React-graphics - React-jsi @@ -782,7 +782,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager/consistency (0.76.1): + - React-Fabric/uimanager/consistency (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -803,7 +803,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-FabricComponents (0.76.1): + - React-FabricComponents (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -815,8 +815,8 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components (= 0.76.1) - - React-FabricComponents/textlayoutmanager (= 0.76.1) + - React-FabricComponents/components (= 0.76.5) + - React-FabricComponents/textlayoutmanager (= 0.76.5) - React-featureflags - React-graphics - React-jsi @@ -828,7 +828,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components (0.76.1): + - React-FabricComponents/components (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -840,15 +840,15 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.76.1) - - React-FabricComponents/components/iostextinput (= 0.76.1) - - React-FabricComponents/components/modal (= 0.76.1) - - React-FabricComponents/components/rncore (= 0.76.1) - - React-FabricComponents/components/safeareaview (= 0.76.1) - - React-FabricComponents/components/scrollview (= 0.76.1) - - React-FabricComponents/components/text (= 0.76.1) - - React-FabricComponents/components/textinput (= 0.76.1) - - React-FabricComponents/components/unimplementedview (= 0.76.1) + - React-FabricComponents/components/inputaccessory (= 0.76.5) + - React-FabricComponents/components/iostextinput (= 0.76.5) + - React-FabricComponents/components/modal (= 0.76.5) + - React-FabricComponents/components/rncore (= 0.76.5) + - React-FabricComponents/components/safeareaview (= 0.76.5) + - React-FabricComponents/components/scrollview (= 0.76.5) + - React-FabricComponents/components/text (= 0.76.5) + - React-FabricComponents/components/textinput (= 0.76.5) + - React-FabricComponents/components/unimplementedview (= 0.76.5) - React-featureflags - React-graphics - React-jsi @@ -860,7 +860,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/inputaccessory (0.76.1): + - React-FabricComponents/components/inputaccessory (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -883,7 +883,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/iostextinput (0.76.1): + - React-FabricComponents/components/iostextinput (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -906,7 +906,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/modal (0.76.1): + - React-FabricComponents/components/modal (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -929,7 +929,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/rncore (0.76.1): + - React-FabricComponents/components/rncore (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -952,7 +952,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/safeareaview (0.76.1): + - React-FabricComponents/components/safeareaview (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -975,7 +975,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/scrollview (0.76.1): + - React-FabricComponents/components/scrollview (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -998,7 +998,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/text (0.76.1): + - React-FabricComponents/components/text (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -1021,7 +1021,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/textinput (0.76.1): + - React-FabricComponents/components/textinput (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -1044,7 +1044,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/unimplementedview (0.76.1): + - React-FabricComponents/components/unimplementedview (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -1067,7 +1067,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/textlayoutmanager (0.76.1): + - React-FabricComponents/textlayoutmanager (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -1090,26 +1090,26 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricImage (0.76.1): + - React-FabricImage (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired (= 0.76.1) - - RCTTypeSafety (= 0.76.1) + - RCTRequired (= 0.76.5) + - RCTTypeSafety (= 0.76.5) - React-Fabric - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.76.1) + - React-jsiexecutor (= 0.76.5) - React-logger - React-rendererdebug - React-utils - ReactCommon - Yoga - - React-featureflags (0.76.1) - - React-featureflagsnativemodule (0.76.1): + - React-featureflags (0.76.5) + - React-featureflagsnativemodule (0.76.5): - DoubleConversion - glog - hermes-engine @@ -1130,7 +1130,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-graphics (0.76.1): + - React-graphics (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -1138,19 +1138,19 @@ PODS: - React-jsi - React-jsiexecutor - React-utils - - React-hermes (0.76.1): + - React-hermes (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-cxxreact (= 0.76.1) + - React-cxxreact (= 0.76.5) - React-jsi - - React-jsiexecutor (= 0.76.1) + - React-jsiexecutor (= 0.76.5) - React-jsinspector - - React-perflogger (= 0.76.1) + - React-perflogger (= 0.76.5) - React-runtimeexecutor - - React-idlecallbacksnativemodule (0.76.1): + - React-idlecallbacksnativemodule (0.76.5): - DoubleConversion - glog - hermes-engine @@ -1172,7 +1172,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-ImageManager (0.76.1): + - React-ImageManager (0.76.5): - glog - RCT-Folly/Fabric - React-Core/Default @@ -1181,47 +1181,47 @@ PODS: - React-graphics - React-rendererdebug - React-utils - - React-jserrorhandler (0.76.1): + - React-jserrorhandler (0.76.5): - glog - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) - React-cxxreact - React-debug - React-jsi - - React-jsi (0.76.1): + - React-jsi (0.76.5): - boost - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-jsiexecutor (0.76.1): + - React-jsiexecutor (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-cxxreact (= 0.76.1) - - React-jsi (= 0.76.1) + - React-cxxreact (= 0.76.5) + - React-jsi (= 0.76.5) - React-jsinspector - - React-perflogger (= 0.76.1) - - React-jsinspector (0.76.1): + - React-perflogger (= 0.76.5) + - React-jsinspector (0.76.5): - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - React-featureflags - React-jsi - - React-perflogger (= 0.76.1) - - React-runtimeexecutor (= 0.76.1) - - React-jsitracing (0.76.1): + - React-perflogger (= 0.76.5) + - React-runtimeexecutor (= 0.76.5) + - React-jsitracing (0.76.5): - React-jsi - - React-logger (0.76.1): + - React-logger (0.76.5): - glog - - React-Mapbuffer (0.76.1): + - React-Mapbuffer (0.76.5): - glog - React-debug - - React-microtasksnativemodule (0.76.1): + - React-microtasksnativemodule (0.76.5): - DoubleConversion - glog - hermes-engine @@ -1394,8 +1394,8 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-nativeconfig (0.76.1) - - React-NativeModulesApple (0.76.1): + - React-nativeconfig (0.76.5) + - React-NativeModulesApple (0.76.5): - glog - hermes-engine - React-callinvoker @@ -1406,16 +1406,16 @@ PODS: - React-runtimeexecutor - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-perflogger (0.76.1): + - React-perflogger (0.76.5): - DoubleConversion - RCT-Folly (= 2024.01.01.00) - - React-performancetimeline (0.76.1): + - React-performancetimeline (0.76.5): - RCT-Folly (= 2024.01.01.00) - React-cxxreact - React-timing - - React-RCTActionSheet (0.76.1): - - React-Core/RCTActionSheetHeaders (= 0.76.1) - - React-RCTAnimation (0.76.1): + - React-RCTActionSheet (0.76.5): + - React-Core/RCTActionSheetHeaders (= 0.76.5) + - React-RCTAnimation (0.76.5): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Core/RCTAnimationHeaders @@ -1423,7 +1423,7 @@ PODS: - React-NativeModulesApple - ReactCodegen - ReactCommon - - React-RCTAppDelegate (0.76.1): + - React-RCTAppDelegate (0.76.5): - RCT-Folly (= 2024.01.01.00) - RCTRequired - RCTTypeSafety @@ -1448,7 +1448,7 @@ PODS: - React-utils - ReactCodegen - ReactCommon - - React-RCTBlob (0.76.1): + - React-RCTBlob (0.76.5): - DoubleConversion - fmt (= 9.1.0) - hermes-engine @@ -1461,7 +1461,7 @@ PODS: - React-RCTNetwork - ReactCodegen - ReactCommon - - React-RCTFabric (0.76.1): + - React-RCTFabric (0.76.5): - glog - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) @@ -1484,7 +1484,7 @@ PODS: - React-runtimescheduler - React-utils - Yoga - - React-RCTImage (0.76.1): + - React-RCTImage (0.76.5): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Core/RCTImageHeaders @@ -1493,14 +1493,14 @@ PODS: - React-RCTNetwork - ReactCodegen - ReactCommon - - React-RCTLinking (0.76.1): - - React-Core/RCTLinkingHeaders (= 0.76.1) - - React-jsi (= 0.76.1) + - React-RCTLinking (0.76.5): + - React-Core/RCTLinkingHeaders (= 0.76.5) + - React-jsi (= 0.76.5) - React-NativeModulesApple - ReactCodegen - ReactCommon - - ReactCommon/turbomodule/core (= 0.76.1) - - React-RCTNetwork (0.76.1): + - ReactCommon/turbomodule/core (= 0.76.5) + - React-RCTNetwork (0.76.5): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Core/RCTNetworkHeaders @@ -1508,7 +1508,7 @@ PODS: - React-NativeModulesApple - ReactCodegen - ReactCommon - - React-RCTSettings (0.76.1): + - React-RCTSettings (0.76.5): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Core/RCTSettingsHeaders @@ -1516,24 +1516,24 @@ PODS: - React-NativeModulesApple - ReactCodegen - ReactCommon - - React-RCTText (0.76.1): - - React-Core/RCTTextHeaders (= 0.76.1) + - React-RCTText (0.76.5): + - React-Core/RCTTextHeaders (= 0.76.5) - Yoga - - React-RCTVibration (0.76.1): + - React-RCTVibration (0.76.5): - RCT-Folly (= 2024.01.01.00) - React-Core/RCTVibrationHeaders - React-jsi - React-NativeModulesApple - ReactCodegen - ReactCommon - - React-rendererconsistency (0.76.1) - - React-rendererdebug (0.76.1): + - React-rendererconsistency (0.76.5) + - React-rendererdebug (0.76.5): - DoubleConversion - fmt (= 9.1.0) - RCT-Folly (= 2024.01.01.00) - React-debug - - React-rncore (0.76.1) - - React-RuntimeApple (0.76.1): + - React-rncore (0.76.5) + - React-RuntimeApple (0.76.5): - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) - React-callinvoker @@ -1552,7 +1552,7 @@ PODS: - React-RuntimeHermes - React-runtimescheduler - React-utils - - React-RuntimeCore (0.76.1): + - React-RuntimeCore (0.76.5): - glog - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) @@ -1566,9 +1566,9 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - React-runtimeexecutor (0.76.1): - - React-jsi (= 0.76.1) - - React-RuntimeHermes (0.76.1): + - React-runtimeexecutor (0.76.5): + - React-jsi (= 0.76.5) + - React-RuntimeHermes (0.76.5): - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) - React-featureflags @@ -1579,7 +1579,7 @@ PODS: - React-nativeconfig - React-RuntimeCore - React-utils - - React-runtimescheduler (0.76.1): + - React-runtimescheduler (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -1594,14 +1594,14 @@ PODS: - React-runtimeexecutor - React-timing - React-utils - - React-timing (0.76.1) - - React-utils (0.76.1): + - React-timing (0.76.5) + - React-utils (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - React-debug - - React-jsi (= 0.76.1) - - ReactCodegen (0.76.1): + - React-jsi (= 0.76.5) + - ReactCodegen (0.76.5): - DoubleConversion - glog - hermes-engine @@ -1621,46 +1621,46 @@ PODS: - React-utils - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - ReactCommon (0.76.1): - - ReactCommon/turbomodule (= 0.76.1) - - ReactCommon/turbomodule (0.76.1): + - ReactCommon (0.76.5): + - ReactCommon/turbomodule (= 0.76.5) + - ReactCommon/turbomodule (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.76.1) - - React-cxxreact (= 0.76.1) - - React-jsi (= 0.76.1) - - React-logger (= 0.76.1) - - React-perflogger (= 0.76.1) - - ReactCommon/turbomodule/bridging (= 0.76.1) - - ReactCommon/turbomodule/core (= 0.76.1) - - ReactCommon/turbomodule/bridging (0.76.1): + - React-callinvoker (= 0.76.5) + - React-cxxreact (= 0.76.5) + - React-jsi (= 0.76.5) + - React-logger (= 0.76.5) + - React-perflogger (= 0.76.5) + - ReactCommon/turbomodule/bridging (= 0.76.5) + - ReactCommon/turbomodule/core (= 0.76.5) + - ReactCommon/turbomodule/bridging (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.76.1) - - React-cxxreact (= 0.76.1) - - React-jsi (= 0.76.1) - - React-logger (= 0.76.1) - - React-perflogger (= 0.76.1) - - ReactCommon/turbomodule/core (0.76.1): + - React-callinvoker (= 0.76.5) + - React-cxxreact (= 0.76.5) + - React-jsi (= 0.76.5) + - React-logger (= 0.76.5) + - React-perflogger (= 0.76.5) + - ReactCommon/turbomodule/core (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.76.1) - - React-cxxreact (= 0.76.1) - - React-debug (= 0.76.1) - - React-featureflags (= 0.76.1) - - React-jsi (= 0.76.1) - - React-logger (= 0.76.1) - - React-perflogger (= 0.76.1) - - React-utils (= 0.76.1) + - React-callinvoker (= 0.76.5) + - React-cxxreact (= 0.76.5) + - React-debug (= 0.76.5) + - React-featureflags (= 0.76.5) + - React-jsi (= 0.76.5) + - React-logger (= 0.76.5) + - React-perflogger (= 0.76.5) + - React-utils (= 0.76.5) - RNCAsyncStorage (1.24.0): - DoubleConversion - glog @@ -1684,27 +1684,6 @@ PODS: - Yoga - RNCMaskedView (0.3.1): - React-Core - - RNCPicker (2.9.0): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-NativeModulesApple - - React-RCTFabric - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - Yoga - RNFlashList (1.7.1): - DoubleConversion - glog @@ -1747,7 +1726,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNReanimated (3.17.0-rc.0): + - RNReanimated (3.17.0-rc.1): - DoubleConversion - glog - hermes-engine @@ -1767,10 +1746,10 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/reanimated (= 3.17.0-rc.0) - - RNReanimated/worklets (= 3.17.0-rc.0) + - RNReanimated/reanimated (= 3.17.0-rc.1) + - RNReanimated/worklets (= 3.17.0-rc.1) - Yoga - - RNReanimated/reanimated (3.17.0-rc.0): + - RNReanimated/reanimated (3.17.0-rc.1): - DoubleConversion - glog - hermes-engine @@ -1790,9 +1769,9 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/reanimated/apple (= 3.17.0-rc.0) + - RNReanimated/reanimated/apple (= 3.17.0-rc.1) - Yoga - - RNReanimated/reanimated/apple (3.17.0-rc.0): + - RNReanimated/reanimated/apple (3.17.0-rc.1): - DoubleConversion - glog - hermes-engine @@ -1813,7 +1792,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNReanimated/worklets (3.17.0-rc.0): + - RNReanimated/worklets (3.17.0-rc.1): - DoubleConversion - glog - hermes-engine @@ -1833,9 +1812,9 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/worklets/apple (= 3.17.0-rc.0) + - RNReanimated/worklets/apple (= 3.17.0-rc.1) - Yoga - - RNReanimated/worklets/apple (3.17.0-rc.0): + - RNReanimated/worklets/apple (3.17.0-rc.1): - DoubleConversion - glog - hermes-engine @@ -2017,7 +1996,6 @@ DEPENDENCIES: - ReactCommon/turbomodule/core (from `../../../node_modules/react-native/ReactCommon`) - "RNCAsyncStorage (from `../../../node_modules/@react-native-async-storage/async-storage`)" - "RNCMaskedView (from `../../../node_modules/@react-native-masked-view/masked-view`)" - - "RNCPicker (from `../../../node_modules/@react-native-picker/picker`)" - "RNFlashList (from `../../../node_modules/@shopify/flash-list`)" - RNGestureHandler (from `../../../node_modules/react-native-gesture-handler`) - RNReanimated (from `../../../node_modules/react-native-reanimated`) @@ -2042,7 +2020,7 @@ EXTERNAL SOURCES: :podspec: "../../../node_modules/react-native/third-party-podspecs/glog.podspec" hermes-engine: :podspec: "../../../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" - :tag: hermes-2024-09-09-RNv0.76.0-db6d12e202e15f7a446d8848d6ca8f7abb3cfb32 + :tag: hermes-2024-11-12-RNv0.76.2-5b4aa20c719830dcf5684832b89a6edb95ac3d64 RCT-Folly: :podspec: "../../../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" RCTDeprecation: @@ -2165,8 +2143,6 @@ EXTERNAL SOURCES: :path: "../../../node_modules/@react-native-async-storage/async-storage" RNCMaskedView: :path: "../../../node_modules/@react-native-masked-view/masked-view" - RNCPicker: - :path: "../../../node_modules/@react-native-picker/picker" RNFlashList: :path: "../../../node_modules/@shopify/flash-list" RNGestureHandler: @@ -2183,79 +2159,78 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: boost: 1dca942403ed9342f98334bf4c3621f011aa7946 DoubleConversion: f16ae600a246532c4020132d54af21d0ddb2a385 - FBLazyVector: 7075bb12898bc3998fd60f4b7ca422496cc2cdf7 + FBLazyVector: 1bf99bb46c6af9a2712592e707347315f23947aa fmt: 10c6e61f4be25dc963c36bd73fc7b1705fe975be glog: 08b301085f15bcbb6ff8632a8ebaf239aae04e6a - hermes-engine: 46f1ffbf0297f4298862068dd4c274d4ac17a1fd + hermes-engine: 06a9c6900587420b90accc394199527c64259db4 RCT-Folly: bf5c0376ffe4dd2cf438dcf86db385df9fdce648 - RCTDeprecation: fde92935b3caa6cb65cbff9fbb7d3a9867ffb259 - RCTRequired: 75c6cee42d21c1530a6f204ba32ff57335d19007 - RCTTypeSafety: 7e6fe47bfb693c50d4669db1a480ca5331795f5b - React: 8e73704cdd5c7f801936776d2fc434c605a7827b - React-callinvoker: fa27d1e091e683de88f576e6a5d4efc171929a4c - React-Core: 8dd14bffcc9b877091b698e45701160669a31f91 - React-CoreModules: b4437acf2ef25ce3689c84df661dc5d806559b35 - React-cxxreact: 6125cd820da7e18f9ca8343b3c42ee61634a4e0d - React-debug: f474f5c202a277f76c81bf7cf26284f2c09880d7 - React-defaultsnativemodule: 7141fa704531cbf7a7e7af3bc02adfa367e831a7 - React-domnativemodule: c1806b8584a53ed912012a4d8b2c6f96a84c77a3 - React-Fabric: ba9636cfc7f9b77df6cb7edb2c70d0237026404b - React-FabricComponents: c408da05a4ea5ba071732245b4a7f48f904e610a - React-FabricImage: c409858f319f11709b49ffa6c5bca4faf794cb44 - React-featureflags: 929732439d139ac0662e08f009f1a51ed2b91ed3 - React-featureflagsnativemodule: 02dd903d4cbe4fae0e6cd02bc32a09d30543282f - React-graphics: a5cad35307286e9f83e212834e95fef4010d03d0 - React-hermes: 14aafa9630579b84c2167b563bdb8c811970a03e - React-idlecallbacksnativemodule: 69581ac44bd355acce3739c3fe380c0f6d7a6d09 - React-ImageManager: 41945afb3ace0c52255057ec4ae6af6f5a23539f - React-jserrorhandler: ecbc4622df7ab3d0066a4313cde4172d45745508 - React-jsi: ff383df87c7047e976a66be45df59e4e0db5346e - React-jsiexecutor: 2bb8b172f226f2f502521d33dd7666e701d45f45 - React-jsinspector: 4d51b903543f21076b658ef8412f3102778dbc92 - React-jsitracing: 654f4d9cb9fd99b3d96f239ceb215ae49ce28ac0 - React-logger: 97c9dafae1f1a638001a9d1d0e93d431f2f9cb7b - React-Mapbuffer: 3146a13424f9fec2ea1f1462d49d566e4d69b732 - React-microtasksnativemodule: 02d218c79c72d373a92a8552183f4ead0d1c6e05 + RCTDeprecation: fb7d408617e25d7f537940000d766d60149c5fea + RCTRequired: 9aaf0ffcc1f41f0c671af863970ef25c422a9920 + RCTTypeSafety: e9a6e7d48184646eb0610295b74c0dd02768cbb2 + React: fffb3cf1b0d7aee03c4eb4952b2d58783615e9fa + React-callinvoker: 3c6ecc0315d42924e01b3ddc25cf2e49d33da169 + React-Core: d2143ba58d0c8563cf397f96f699c6069eba951c + React-CoreModules: b3cbc5e3090a8c23116c0c7dd8998e0637e29619 + React-cxxreact: 68fb9193582c4a411ce99d0b23f7b3d8da1c2e4a + React-debug: 297ed67868a76e8384669ea9b5c65c5d9d9d15d9 + React-defaultsnativemodule: 9726dafb3b20bb49f9eac5993418aaa7ddb6a80d + React-domnativemodule: ff049da74cb1be08b7cd71cdbc7bb5b335e04d8e + React-Fabric: 2e33816098a5a29d2f4ae7eb2de3cfbc361b6922 + React-FabricComponents: bb2d6b89321bf79653ae3d4ec890ba7cb9fe51c8 + React-FabricImage: 019a5e834378e460ef39bf19cb506fd36491ae74 + React-featureflags: cb3dca1c74ba813f2e578c8c635989d01d14739f + React-featureflagsnativemodule: 4a1eaf7a29e48ddd60bce9a2f4c4ef74dc3b9e53 + React-graphics: e626f3b24227a3a8323ed89476c8f0927c0264c7 + React-hermes: 63678d262d94835f986fa2fac1c835188f14160b + React-idlecallbacksnativemodule: 7a25d2bff611677bbc2eab428e7bfd02f7418b42 + React-ImageManager: 223709133aa644bc1e74d354308cf2ed4c9d0f00 + React-jserrorhandler: 212d88de95b23965fdff91c1a20da30e29cdfbbb + React-jsi: d189a2a826fe6700ea1194e1c2b15535d06c8d75 + React-jsiexecutor: b75a12d37f2bf84f74b5c05131afdef243cfc69d + React-jsinspector: c3402468ae1fbca79e3d8cc11e7a0fc2c8ffafb1 + React-jsitracing: 1f46c2ec0c5ace3fe959b1aa0f8535ef1c021161 + React-logger: 697873f06b8ba436e3cddf28018ab4741e8071b6 + React-Mapbuffer: c174e11bdea12dce07df8669d6c0dc97eb0c7706 + React-microtasksnativemodule: 8a80099ad7391f4e13a48b12796d96680f120dc6 react-native-pager-view: 94195f1bf32e7f78359fa20057c97e632364a08b react-native-safe-area-context: 52956274cbb1f9313ba6969de5c33e57218c0206 react-native-slider: 124ce99f9cd2d04c79f020da6dee9f8d38a6b8c7 - React-nativeconfig: 93fe8c85a8c40820c57814e30f3e44b94c995a7b - React-NativeModulesApple: b3e076fd0d7b73417fe1e8c8b26e3c57ae9b74aa - React-perflogger: 1c55bcd3c392137cbaf0d21d8bb87ce9a0cebb15 - React-performancetimeline: e89249db10b8f7bf8f72c2e9bd471ac37d48b753 - React-RCTActionSheet: 9407c795fbeee35da2dae3cd6b5c4e5da6ff8bd3 - React-RCTAnimation: 7ee1c2a77aab7e5c568611d8092a994cfcbe8410 - React-RCTAppDelegate: 10c2b0c434baf5a71b53d5c86c4d8d0dbd6bb380 - React-RCTBlob: 761072706300d22624ec2d6bf860b77d95ebd3da - React-RCTFabric: 871d38933a94554d9e27963aa4bb67184dc7529e - React-RCTImage: b6614fde902ec9647f15236da94df2d24c40523f - React-RCTLinking: 25950eda5d5f786bfb3daf513ea7d848555a2a93 - React-RCTNetwork: b69407c4119fd7a1cc07db4a94563f2546f8770d - React-RCTSettings: b310a4923446c3a8950fa866c8cf83323a9e1b87 - React-RCTText: 77c6eda5be1dee657f5183f75fe0fdcdb7b2b35d - React-RCTVibration: b4889c7702aea1b07316be1ec0de2e36e9a4d077 - React-rendererconsistency: 5ef1c4642fd6365bf6d5d4e29a3ae02c3a1b8980 - React-rendererdebug: 7f6a24cbb5008a22ccb34a0d031a259b006facf6 - React-rncore: 0e5394ce20a9d2bf12409d14395588c7b9e6e9ce - React-RuntimeApple: bbe293f233d17304c9597309acde7505080fd53d - React-RuntimeCore: 5a1cbfc3e7af4fbdea2b9b1efd39cd51a4d4006f - React-runtimeexecutor: ffac5f09795a5e881477e0d72a0fa6385456bed3 - React-RuntimeHermes: 0a1fd1c150faed8341887dd89895eeb8d4d2d3c5 - React-runtimescheduler: e7df538274de0c65736068e40efc0d2228f42d0d - React-timing: b3b233fe819d9e5b6ca32b605aa732621bdfa5aa - React-utils: 5362bd16a9563f9916e7a56c011ddc533507650f - ReactCodegen: 84a006ff4f2742ed633b3044b5c1583ee22a2a6c - ReactCommon: 422e364463f33e336fc4db196aeb50fd801d90d6 + React-nativeconfig: f7ab6c152e780b99a8c17448f2d99cf5f69a2311 + React-NativeModulesApple: 70600f7edfc2c2a01e39ab13a20fd59f4c60df0b + React-perflogger: ceb97dd4e5ca6ff20eebb5a6f9e00312dcdea872 + React-performancetimeline: e39f038509c2a6b2ddb85087ba7cb8bd9caf977d + React-RCTActionSheet: a4388035260b01ac38d3647da0433b0455da9bae + React-RCTAnimation: 84117cb3521c40e95a4edfeab1c1cb159bc9a7c3 + React-RCTAppDelegate: df039dffb7adbc2e4a8ce951d1b2842f1846f43e + React-RCTBlob: 947cbb49842c9141e2b21f719e83e9197a06e453 + React-RCTFabric: 8f8afe72401ddfca2bd8b488d2d9eb0deee0b4bf + React-RCTImage: 367a7dcca1d37b04e28918c025a0101494fb2a19 + React-RCTLinking: b9dc797e49683a98ee4f703f1f01ec2bd69ceb7f + React-RCTNetwork: 16e92fb59b9cd1e1175ecb2e90aa9e06e82db7a3 + React-RCTSettings: 20a1c3316956fae137d8178b4c23b7a1d56674cc + React-RCTText: 59d8792076b6010f7305f2558d868025004e108b + React-RCTVibration: 597d5aba0212d709ec79d12e76285c3d94dc0658 + React-rendererconsistency: 42f182fe910ad6c9b449cc62adae8d0eaba76f0a + React-rendererdebug: f36daf9f79831c8785215048fad4ef6453834430 + React-rncore: 85ed76036ff56e2e9c369155027cbbd84db86006 + React-RuntimeApple: 6ca44fc23bb00474f9387c0709f23d4dade79800 + React-RuntimeCore: b4d723e516e2e24616eb72de5b41a68b0736cc02 + React-runtimeexecutor: 10fae9492194097c99f6e34cedbb42a308922d32 + React-RuntimeHermes: 93437bfc028ba48122276e2748c7cd0f9bbcdb40 + React-runtimescheduler: 72bbb4bd4774a0f4f9a7e84dbf133213197a0828 + React-timing: 1050c6fa44c327f2d7538e10c548fdf521fabdb8 + React-utils: 541c6cca08f32597d4183f00e83eef2ed20d4c54 + ReactCodegen: fca7518fb8bac9ce8573b698a13d9647dbbb78ea + ReactCommon: a6b87a7591591f7a52d9c0fec3aa05e0620d5dd3 RNCAsyncStorage: 3ad840f7b17b45ca7ebbbb0e80948564a9513315 RNCMaskedView: 090213d32d8b3bb83a4dcb7d12c18f0152591906 - RNCPicker: b978067931744f5a7316b48b8dcf145d4d722672 RNFlashList: 6f169ad83e52579b7754cbbcec1b004c27d82c93 RNGestureHandler: fc5ce5bf284640d3af6431c3a5c3bc121e98d045 - RNReanimated: 832850c3af2bd2856213fdb37fb9449e413ae669 + RNReanimated: cd16f64abe89565015170d9bc65ef1f4965fd72b RNScreens: 2fe13c8d610ef2d9d5ace2e7d85b716ec0f5217c RNSVG: 536cd3c866c878faf72beaba166c8b02fe2b762b SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - Yoga: db69236006b8b1c6d55ab453390c882306cbf219 + Yoga: fcc198acd4a55599b3468cfb6ebc526baff5f06e PODFILE CHECKSUM: 3eb88d49c8fe32af0ac2c85501e29d29171f1070 diff --git a/apps/fabric-example/package.json b/apps/fabric-example/package.json index 7fb8c7c6bf9..d12f1551cb3 100644 --- a/apps/fabric-example/package.json +++ b/apps/fabric-example/package.json @@ -15,13 +15,12 @@ "@react-native-async-storage/async-storage": "^1.24.0", "@react-native-community/slider": "^4.5.5", "@react-native-masked-view/masked-view": "^0.3.1", - "@react-native-picker/picker": "^2.9.0", "@react-navigation/native": "^7.0.0", "@react-navigation/native-stack": "^7.0.0", "@shopify/flash-list": "^1.7.1", "common-app": "workspace:*", "react": "18.3.1", - "react-native": "^0.76.1", + "react-native": "0.76.5", "react-native-gesture-handler": "2.20.2", "react-native-pager-view": "^6.4.1", "react-native-reanimated": "workspace:*", @@ -36,10 +35,10 @@ "@react-native-community/cli": "15.0.0", "@react-native-community/cli-platform-android": "15.0.0", "@react-native-community/cli-platform-ios": "15.0.0", - "@react-native/babel-preset": "0.76.1", - "@react-native/eslint-config": "0.76.1", - "@react-native/metro-config": "0.76.1", - "@react-native/typescript-config": "0.76.1", + "@react-native/babel-preset": "0.76.5", + "@react-native/eslint-config": "0.76.5", + "@react-native/metro-config": "0.76.5", + "@react-native/typescript-config": "0.76.5", "@types/react": "^18.2.6", "@types/react-test-renderer": "^18.0.0", "babel-jest": "^29.6.3", diff --git a/apps/macos-example/macos/Podfile.lock b/apps/macos-example/macos/Podfile.lock index 05849d14357..f247d405a2a 100644 --- a/apps/macos-example/macos/Podfile.lock +++ b/apps/macos-example/macos/Podfile.lock @@ -1,7 +1,7 @@ PODS: - boost (1.84.0) - DoubleConversion (1.1.6) - - FBLazyVector (0.75.13) + - FBLazyVector (0.75.16) - fmt (9.1.0) - glog (0.3.5) - RCT-Folly (2024.01.01.00): @@ -20,31 +20,31 @@ PODS: - DoubleConversion - fmt (= 9.1.0) - glog - - RCTDeprecation (0.75.13) - - RCTRequired (0.75.13) - - RCTTypeSafety (0.75.13): - - FBLazyVector (= 0.75.13) - - RCTRequired (= 0.75.13) - - React-Core (= 0.75.13) - - React (0.75.13): - - React-Core (= 0.75.13) - - React-Core/DevSupport (= 0.75.13) - - React-Core/RCTWebSocket (= 0.75.13) - - React-RCTActionSheet (= 0.75.13) - - React-RCTAnimation (= 0.75.13) - - React-RCTBlob (= 0.75.13) - - React-RCTImage (= 0.75.13) - - React-RCTLinking (= 0.75.13) - - React-RCTNetwork (= 0.75.13) - - React-RCTSettings (= 0.75.13) - - React-RCTText (= 0.75.13) - - React-RCTVibration (= 0.75.13) - - React-callinvoker (0.75.13) - - React-Core (0.75.13): + - RCTDeprecation (0.75.16) + - RCTRequired (0.75.16) + - RCTTypeSafety (0.75.16): + - FBLazyVector (= 0.75.16) + - RCTRequired (= 0.75.16) + - React-Core (= 0.75.16) + - React (0.75.16): + - React-Core (= 0.75.16) + - React-Core/DevSupport (= 0.75.16) + - React-Core/RCTWebSocket (= 0.75.16) + - React-RCTActionSheet (= 0.75.16) + - React-RCTAnimation (= 0.75.16) + - React-RCTBlob (= 0.75.16) + - React-RCTImage (= 0.75.16) + - React-RCTLinking (= 0.75.16) + - React-RCTNetwork (= 0.75.16) + - React-RCTSettings (= 0.75.16) + - React-RCTText (= 0.75.16) + - React-RCTVibration (= 0.75.16) + - React-callinvoker (0.75.16) + - React-Core (0.75.16): - glog - RCT-Folly (= 2024.01.01.00) - RCTDeprecation - - React-Core/Default (= 0.75.13) + - React-Core/Default (= 0.75.16) - React-cxxreact - React-featureflags - React-jsc @@ -56,7 +56,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/CoreModulesHeaders (0.75.13): + - React-Core/CoreModulesHeaders (0.75.16): - glog - RCT-Folly (= 2024.01.01.00) - RCTDeprecation @@ -72,7 +72,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/Default (0.75.13): + - React-Core/Default (0.75.16): - glog - RCT-Folly (= 2024.01.01.00) - RCTDeprecation @@ -87,12 +87,12 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/DevSupport (0.75.13): + - React-Core/DevSupport (0.75.16): - glog - RCT-Folly (= 2024.01.01.00) - RCTDeprecation - - React-Core/Default (= 0.75.13) - - React-Core/RCTWebSocket (= 0.75.13) + - React-Core/Default (= 0.75.16) + - React-Core/RCTWebSocket (= 0.75.16) - React-cxxreact - React-featureflags - React-jsc @@ -104,7 +104,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTActionSheetHeaders (0.75.13): + - React-Core/RCTActionSheetHeaders (0.75.16): - glog - RCT-Folly (= 2024.01.01.00) - RCTDeprecation @@ -120,7 +120,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTAnimationHeaders (0.75.13): + - React-Core/RCTAnimationHeaders (0.75.16): - glog - RCT-Folly (= 2024.01.01.00) - RCTDeprecation @@ -136,7 +136,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTBlobHeaders (0.75.13): + - React-Core/RCTBlobHeaders (0.75.16): - glog - RCT-Folly (= 2024.01.01.00) - RCTDeprecation @@ -152,7 +152,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTImageHeaders (0.75.13): + - React-Core/RCTImageHeaders (0.75.16): - glog - RCT-Folly (= 2024.01.01.00) - RCTDeprecation @@ -168,7 +168,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTLinkingHeaders (0.75.13): + - React-Core/RCTLinkingHeaders (0.75.16): - glog - RCT-Folly (= 2024.01.01.00) - RCTDeprecation @@ -184,7 +184,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTNetworkHeaders (0.75.13): + - React-Core/RCTNetworkHeaders (0.75.16): - glog - RCT-Folly (= 2024.01.01.00) - RCTDeprecation @@ -200,7 +200,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTSettingsHeaders (0.75.13): + - React-Core/RCTSettingsHeaders (0.75.16): - glog - RCT-Folly (= 2024.01.01.00) - RCTDeprecation @@ -216,7 +216,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTTextHeaders (0.75.13): + - React-Core/RCTTextHeaders (0.75.16): - glog - RCT-Folly (= 2024.01.01.00) - RCTDeprecation @@ -232,7 +232,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTVibrationHeaders (0.75.13): + - React-Core/RCTVibrationHeaders (0.75.16): - glog - RCT-Folly (= 2024.01.01.00) - RCTDeprecation @@ -248,11 +248,11 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTWebSocket (0.75.13): + - React-Core/RCTWebSocket (0.75.16): - glog - RCT-Folly (= 2024.01.01.00) - RCTDeprecation - - React-Core/Default (= 0.75.13) + - React-Core/Default (= 0.75.16) - React-cxxreact - React-featureflags - React-jsc @@ -264,35 +264,35 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-CoreModules (0.75.13): + - React-CoreModules (0.75.16): - DoubleConversion - fmt (= 9.1.0) - RCT-Folly (= 2024.01.01.00) - - RCTTypeSafety (= 0.75.13) - - React-Core/CoreModulesHeaders (= 0.75.13) - - React-jsi (= 0.75.13) + - RCTTypeSafety (= 0.75.16) + - React-Core/CoreModulesHeaders (= 0.75.16) + - React-jsi (= 0.75.16) - React-jsinspector - React-NativeModulesApple - React-RCTBlob - - React-RCTImage (= 0.75.13) + - React-RCTImage (= 0.75.16) - ReactCodegen - ReactCommon - SocketRocket (= 0.7.0) - - React-cxxreact (0.75.13): + - React-cxxreact (0.75.16): - boost - DoubleConversion - fmt (= 9.1.0) - glog - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.75.13) - - React-debug (= 0.75.13) - - React-jsi (= 0.75.13) + - React-callinvoker (= 0.75.16) + - React-debug (= 0.75.16) + - React-jsi (= 0.75.16) - React-jsinspector - - React-logger (= 0.75.13) - - React-perflogger (= 0.75.13) - - React-runtimeexecutor (= 0.75.13) - - React-debug (0.75.13) - - React-defaultsnativemodule (0.75.13): + - React-logger (= 0.75.16) + - React-perflogger (= 0.75.16) + - React-runtimeexecutor (= 0.75.16) + - React-debug (0.75.16) + - React-defaultsnativemodule (0.75.16): - DoubleConversion - glog - RCT-Folly (= 2024.01.01.00) @@ -317,7 +317,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-domnativemodule (0.75.13): + - React-domnativemodule (0.75.16): - DoubleConversion - glog - RCT-Folly (= 2024.01.01.00) @@ -339,7 +339,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-Fabric (0.75.13): + - React-Fabric (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -349,21 +349,21 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.75.13) - - React-Fabric/attributedstring (= 0.75.13) - - React-Fabric/componentregistry (= 0.75.13) - - React-Fabric/componentregistrynative (= 0.75.13) - - React-Fabric/components (= 0.75.13) - - React-Fabric/core (= 0.75.13) - - React-Fabric/dom (= 0.75.13) - - React-Fabric/imagemanager (= 0.75.13) - - React-Fabric/leakchecker (= 0.75.13) - - React-Fabric/mounting (= 0.75.13) - - React-Fabric/observers (= 0.75.13) - - React-Fabric/scheduler (= 0.75.13) - - React-Fabric/telemetry (= 0.75.13) - - React-Fabric/templateprocessor (= 0.75.13) - - React-Fabric/uimanager (= 0.75.13) + - React-Fabric/animations (= 0.75.16) + - React-Fabric/attributedstring (= 0.75.16) + - React-Fabric/componentregistry (= 0.75.16) + - React-Fabric/componentregistrynative (= 0.75.16) + - React-Fabric/components (= 0.75.16) + - React-Fabric/core (= 0.75.16) + - React-Fabric/dom (= 0.75.16) + - React-Fabric/imagemanager (= 0.75.16) + - React-Fabric/leakchecker (= 0.75.16) + - React-Fabric/mounting (= 0.75.16) + - React-Fabric/observers (= 0.75.16) + - React-Fabric/scheduler (= 0.75.16) + - React-Fabric/telemetry (= 0.75.16) + - React-Fabric/templateprocessor (= 0.75.16) + - React-Fabric/uimanager (= 0.75.16) - React-featureflags - React-graphics - React-jsc @@ -374,7 +374,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/animations (0.75.13): + - React-Fabric/animations (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -394,7 +394,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/attributedstring (0.75.13): + - React-Fabric/attributedstring (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -414,7 +414,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistry (0.75.13): + - React-Fabric/componentregistry (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -434,7 +434,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistrynative (0.75.13): + - React-Fabric/componentregistrynative (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -454,7 +454,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components (0.75.13): + - React-Fabric/components (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -464,9 +464,9 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.75.13) - - React-Fabric/components/root (= 0.75.13) - - React-Fabric/components/view (= 0.75.13) + - React-Fabric/components/legacyviewmanagerinterop (= 0.75.16) + - React-Fabric/components/root (= 0.75.16) + - React-Fabric/components/view (= 0.75.16) - React-featureflags - React-graphics - React-jsc @@ -477,7 +477,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/legacyviewmanagerinterop (0.75.13): + - React-Fabric/components/legacyviewmanagerinterop (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -497,7 +497,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/root (0.75.13): + - React-Fabric/components/root (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -517,7 +517,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/view (0.75.13): + - React-Fabric/components/view (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -538,7 +538,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-Fabric/core (0.75.13): + - React-Fabric/core (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -558,7 +558,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/dom (0.75.13): + - React-Fabric/dom (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -578,7 +578,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/imagemanager (0.75.13): + - React-Fabric/imagemanager (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -598,7 +598,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/leakchecker (0.75.13): + - React-Fabric/leakchecker (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -618,7 +618,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/mounting (0.75.13): + - React-Fabric/mounting (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -638,7 +638,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/observers (0.75.13): + - React-Fabric/observers (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -648,7 +648,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/observers/events (= 0.75.13) + - React-Fabric/observers/events (= 0.75.16) - React-featureflags - React-graphics - React-jsc @@ -659,7 +659,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/observers/events (0.75.13): + - React-Fabric/observers/events (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -679,7 +679,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/scheduler (0.75.13): + - React-Fabric/scheduler (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -701,7 +701,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/telemetry (0.75.13): + - React-Fabric/telemetry (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -721,7 +721,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/templateprocessor (0.75.13): + - React-Fabric/templateprocessor (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -741,7 +741,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager (0.75.13): + - React-Fabric/uimanager (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -751,7 +751,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/uimanager/consistency (= 0.75.13) + - React-Fabric/uimanager/consistency (= 0.75.16) - React-featureflags - React-graphics - React-jsc @@ -763,7 +763,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager/consistency (0.75.13): + - React-Fabric/uimanager/consistency (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -784,7 +784,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-FabricComponents (0.75.13): + - React-FabricComponents (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -795,8 +795,8 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components (= 0.75.13) - - React-FabricComponents/textlayoutmanager (= 0.75.13) + - React-FabricComponents/components (= 0.75.16) + - React-FabricComponents/textlayoutmanager (= 0.75.16) - React-featureflags - React-graphics - React-jsc @@ -809,7 +809,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components (0.75.13): + - React-FabricComponents/components (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -820,15 +820,15 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.75.13) - - React-FabricComponents/components/iostextinput (= 0.75.13) - - React-FabricComponents/components/modal (= 0.75.13) - - React-FabricComponents/components/rncore (= 0.75.13) - - React-FabricComponents/components/safeareaview (= 0.75.13) - - React-FabricComponents/components/scrollview (= 0.75.13) - - React-FabricComponents/components/text (= 0.75.13) - - React-FabricComponents/components/textinput (= 0.75.13) - - React-FabricComponents/components/unimplementedview (= 0.75.13) + - React-FabricComponents/components/inputaccessory (= 0.75.16) + - React-FabricComponents/components/iostextinput (= 0.75.16) + - React-FabricComponents/components/modal (= 0.75.16) + - React-FabricComponents/components/rncore (= 0.75.16) + - React-FabricComponents/components/safeareaview (= 0.75.16) + - React-FabricComponents/components/scrollview (= 0.75.16) + - React-FabricComponents/components/text (= 0.75.16) + - React-FabricComponents/components/textinput (= 0.75.16) + - React-FabricComponents/components/unimplementedview (= 0.75.16) - React-featureflags - React-graphics - React-jsc @@ -841,7 +841,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/inputaccessory (0.75.13): + - React-FabricComponents/components/inputaccessory (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -864,7 +864,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/iostextinput (0.75.13): + - React-FabricComponents/components/iostextinput (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -887,7 +887,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/modal (0.75.13): + - React-FabricComponents/components/modal (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -910,7 +910,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/rncore (0.75.13): + - React-FabricComponents/components/rncore (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -933,7 +933,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/safeareaview (0.75.13): + - React-FabricComponents/components/safeareaview (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -956,7 +956,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/scrollview (0.75.13): + - React-FabricComponents/components/scrollview (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -979,7 +979,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/text (0.75.13): + - React-FabricComponents/components/text (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -1002,7 +1002,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/textinput (0.75.13): + - React-FabricComponents/components/textinput (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -1025,7 +1025,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/unimplementedview (0.75.13): + - React-FabricComponents/components/unimplementedview (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -1048,7 +1048,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/textlayoutmanager (0.75.13): + - React-FabricComponents/textlayoutmanager (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -1071,26 +1071,26 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricImage (0.75.13): + - React-FabricImage (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired (= 0.75.13) - - RCTTypeSafety (= 0.75.13) + - RCTRequired (= 0.75.16) + - RCTTypeSafety (= 0.75.16) - React-Fabric - React-graphics - React-ImageManager - React-jsc - React-jsi - - React-jsiexecutor (= 0.75.13) + - React-jsiexecutor (= 0.75.16) - React-logger - React-rendererdebug - React-utils - ReactCommon - Yoga - - React-featureflags (0.75.13) - - React-featureflagsnativemodule (0.75.13): + - React-featureflags (0.75.16) + - React-featureflagsnativemodule (0.75.16): - DoubleConversion - glog - RCT-Folly (= 2024.01.01.00) @@ -1111,7 +1111,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-graphics (0.75.13): + - React-graphics (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog @@ -1120,7 +1120,7 @@ PODS: - React-jsi - React-jsiexecutor - React-utils - - React-idlecallbacksnativemodule (0.75.13): + - React-idlecallbacksnativemodule (0.75.16): - DoubleConversion - glog - RCT-Folly (= 2024.01.01.00) @@ -1142,7 +1142,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-ImageManager (0.75.13): + - React-ImageManager (0.75.16): - glog - RCT-Folly/Fabric - React-Core/Default @@ -1151,45 +1151,45 @@ PODS: - React-graphics - React-rendererdebug - React-utils - - React-jsc (0.75.13): - - React-jsc/Fabric (= 0.75.13) - - React-jsi (= 0.75.13) - - React-jsc/Fabric (0.75.13): - - React-jsi (= 0.75.13) - - React-jserrorhandler (0.75.13): + - React-jsc (0.75.16): + - React-jsc/Fabric (= 0.75.16) + - React-jsi (= 0.75.16) + - React-jsc/Fabric (0.75.16): + - React-jsi (= 0.75.16) + - React-jserrorhandler (0.75.16): - RCT-Folly/Fabric (= 2024.01.01.00) - React-debug - React-jsi - - React-jsi (0.75.13): + - React-jsi (0.75.16): - boost - DoubleConversion - fmt (= 9.1.0) - glog - RCT-Folly (= 2024.01.01.00) - - React-jsiexecutor (0.75.13): + - React-jsiexecutor (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog - RCT-Folly (= 2024.01.01.00) - - React-cxxreact (= 0.75.13) - - React-jsi (= 0.75.13) + - React-cxxreact (= 0.75.16) + - React-jsi (= 0.75.16) - React-jsinspector - - React-perflogger (= 0.75.13) - - React-jsinspector (0.75.13): + - React-perflogger (= 0.75.16) + - React-jsinspector (0.75.16): - DoubleConversion - glog - RCT-Folly (= 2024.01.01.00) - React-featureflags - React-jsi - - React-runtimeexecutor (= 0.75.13) - - React-jsitracing (0.75.13): + - React-runtimeexecutor (= 0.75.16) + - React-jsitracing (0.75.16): - React-jsi - - React-logger (0.75.13): + - React-logger (0.75.16): - glog - - React-Mapbuffer (0.75.13): + - React-Mapbuffer (0.75.16): - glog - React-debug - - React-microtasksnativemodule (0.75.13): + - React-microtasksnativemodule (0.75.16): - DoubleConversion - glog - RCT-Folly (= 2024.01.01.00) @@ -1212,8 +1212,8 @@ PODS: - Yoga - react-native-safe-area-context (4.13.1): - React-Core - - React-nativeconfig (0.75.13) - - React-NativeModulesApple (0.75.13): + - React-nativeconfig (0.75.16) + - React-NativeModulesApple (0.75.16): - glog - React-callinvoker - React-Core @@ -1224,13 +1224,13 @@ PODS: - React-runtimeexecutor - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-perflogger (0.75.13) - - React-performancetimeline (0.75.13): + - React-perflogger (0.75.16) + - React-performancetimeline (0.75.16): - RCT-Folly (= 2024.01.01.00) - React-cxxreact - - React-RCTActionSheet (0.75.13): - - React-Core/RCTActionSheetHeaders (= 0.75.13) - - React-RCTAnimation (0.75.13): + - React-RCTActionSheet (0.75.16): + - React-Core/RCTActionSheetHeaders (= 0.75.16) + - React-RCTAnimation (0.75.16): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Core/RCTAnimationHeaders @@ -1238,7 +1238,7 @@ PODS: - React-NativeModulesApple - ReactCodegen - ReactCommon - - React-RCTAppDelegate (0.75.13): + - React-RCTAppDelegate (0.75.16): - RCT-Folly (= 2024.01.01.00) - RCTRequired - RCTTypeSafety @@ -1262,7 +1262,7 @@ PODS: - React-utils - ReactCodegen - ReactCommon - - React-RCTBlob (0.75.13): + - React-RCTBlob (0.75.16): - DoubleConversion - fmt (= 9.1.0) - RCT-Folly (= 2024.01.01.00) @@ -1274,7 +1274,7 @@ PODS: - React-RCTNetwork - ReactCodegen - ReactCommon - - React-RCTFabric (0.75.13): + - React-RCTFabric (0.75.16): - glog - RCT-Folly/Fabric (= 2024.01.01.00) - React-Core @@ -1297,7 +1297,7 @@ PODS: - React-runtimescheduler - React-utils - Yoga - - React-RCTImage (0.75.13): + - React-RCTImage (0.75.16): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Core/RCTImageHeaders @@ -1306,14 +1306,14 @@ PODS: - React-RCTNetwork - ReactCodegen - ReactCommon - - React-RCTLinking (0.75.13): - - React-Core/RCTLinkingHeaders (= 0.75.13) - - React-jsi (= 0.75.13) + - React-RCTLinking (0.75.16): + - React-Core/RCTLinkingHeaders (= 0.75.16) + - React-jsi (= 0.75.16) - React-NativeModulesApple - ReactCodegen - ReactCommon - - ReactCommon/turbomodule/core (= 0.75.13) - - React-RCTNetwork (0.75.13): + - ReactCommon/turbomodule/core (= 0.75.16) + - React-RCTNetwork (0.75.16): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Core/RCTNetworkHeaders @@ -1321,7 +1321,7 @@ PODS: - React-NativeModulesApple - ReactCodegen - ReactCommon - - React-RCTSettings (0.75.13): + - React-RCTSettings (0.75.16): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Core/RCTSettingsHeaders @@ -1329,24 +1329,24 @@ PODS: - React-NativeModulesApple - ReactCodegen - ReactCommon - - React-RCTText (0.75.13): - - React-Core/RCTTextHeaders (= 0.75.13) + - React-RCTText (0.75.16): + - React-Core/RCTTextHeaders (= 0.75.16) - Yoga - - React-RCTVibration (0.75.13): + - React-RCTVibration (0.75.16): - RCT-Folly (= 2024.01.01.00) - React-Core/RCTVibrationHeaders - React-jsi - React-NativeModulesApple - ReactCodegen - ReactCommon - - React-rendererconsistency (0.75.13) - - React-rendererdebug (0.75.13): + - React-rendererconsistency (0.75.16) + - React-rendererdebug (0.75.16): - DoubleConversion - fmt (= 9.1.0) - RCT-Folly (= 2024.01.01.00) - React-debug - - React-rncore (0.75.13) - - React-RuntimeApple (0.75.13): + - React-rncore (0.75.16) + - React-RuntimeApple (0.75.16): - RCT-Folly/Fabric (= 2024.01.01.00) - React-callinvoker - React-Core/Default @@ -1364,7 +1364,7 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - React-RuntimeCore (0.75.13): + - React-RuntimeCore (0.75.16): - glog - RCT-Folly/Fabric (= 2024.01.01.00) - React-cxxreact @@ -1377,9 +1377,9 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - React-runtimeexecutor (0.75.13): - - React-jsi (= 0.75.13) - - React-runtimescheduler (0.75.13): + - React-runtimeexecutor (0.75.16): + - React-jsi (= 0.75.16) + - React-runtimescheduler (0.75.16): - glog - RCT-Folly (= 2024.01.01.00) - React-callinvoker @@ -1392,13 +1392,13 @@ PODS: - React-rendererdebug - React-runtimeexecutor - React-utils - - React-utils (0.75.13): + - React-utils (0.75.16): - glog - RCT-Folly (= 2024.01.01.00) - React-debug - React-jsc - - React-jsi (= 0.75.13) - - ReactCodegen (0.75.13): + - React-jsi (= 0.75.16) + - ReactCodegen (0.75.16): - DoubleConversion - glog - RCT-Folly @@ -1418,46 +1418,46 @@ PODS: - React-utils - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - ReactCommon (0.75.13): - - ReactCommon/turbomodule (= 0.75.13) - - ReactCommon/turbomodule (0.75.13): + - ReactCommon (0.75.16): + - ReactCommon/turbomodule (= 0.75.16) + - ReactCommon/turbomodule (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.75.13) - - React-cxxreact (= 0.75.13) - - React-jsi (= 0.75.13) - - React-logger (= 0.75.13) - - React-perflogger (= 0.75.13) - - ReactCommon/turbomodule/bridging (= 0.75.13) - - ReactCommon/turbomodule/core (= 0.75.13) - - ReactCommon/turbomodule/bridging (0.75.13): + - React-callinvoker (= 0.75.16) + - React-cxxreact (= 0.75.16) + - React-jsi (= 0.75.16) + - React-logger (= 0.75.16) + - React-perflogger (= 0.75.16) + - ReactCommon/turbomodule/bridging (= 0.75.16) + - ReactCommon/turbomodule/core (= 0.75.16) + - ReactCommon/turbomodule/bridging (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.75.13) - - React-cxxreact (= 0.75.13) - - React-jsi (= 0.75.13) - - React-logger (= 0.75.13) - - React-perflogger (= 0.75.13) - - ReactCommon/turbomodule/core (0.75.13): + - React-callinvoker (= 0.75.16) + - React-cxxreact (= 0.75.16) + - React-jsi (= 0.75.16) + - React-logger (= 0.75.16) + - React-perflogger (= 0.75.16) + - ReactCommon/turbomodule/core (0.75.16): - DoubleConversion - fmt (= 9.1.0) - glog - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.75.13) - - React-cxxreact (= 0.75.13) - - React-debug (= 0.75.13) - - React-featureflags (= 0.75.13) - - React-jsi (= 0.75.13) - - React-logger (= 0.75.13) - - React-perflogger (= 0.75.13) - - React-utils (= 0.75.13) + - React-callinvoker (= 0.75.16) + - React-cxxreact (= 0.75.16) + - React-debug (= 0.75.16) + - React-featureflags (= 0.75.16) + - React-jsi (= 0.75.16) + - React-logger (= 0.75.16) + - React-perflogger (= 0.75.16) + - React-utils (= 0.75.16) - RNCAsyncStorage (1.24.0): - React-Core - - RNCPicker (2.9.0): + - RNCPicker (2.10.2): - React-Core - RNGestureHandler (2.20.2): - DoubleConversion @@ -1480,7 +1480,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNReanimated (3.17.0-rc.0): + - RNReanimated (3.17.0-rc.1): - DoubleConversion - glog - RCT-Folly (= 2024.01.01.00) @@ -1500,10 +1500,10 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/reanimated (= 3.17.0-rc.0) - - RNReanimated/worklets (= 3.17.0-rc.0) + - RNReanimated/reanimated (= 3.17.0-rc.1) + - RNReanimated/worklets (= 3.17.0-rc.1) - Yoga - - RNReanimated/reanimated (3.17.0-rc.0): + - RNReanimated/reanimated (3.17.0-rc.1): - DoubleConversion - glog - RCT-Folly (= 2024.01.01.00) @@ -1523,9 +1523,9 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/reanimated/apple (= 3.17.0-rc.0) + - RNReanimated/reanimated/apple (= 3.17.0-rc.1) - Yoga - - RNReanimated/reanimated/apple (3.17.0-rc.0): + - RNReanimated/reanimated/apple (3.17.0-rc.1): - DoubleConversion - glog - RCT-Folly (= 2024.01.01.00) @@ -1546,7 +1546,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNReanimated/worklets (3.17.0-rc.0): + - RNReanimated/worklets (3.17.0-rc.1): - DoubleConversion - glog - RCT-Folly (= 2024.01.01.00) @@ -1566,9 +1566,9 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/worklets/apple (= 3.17.0-rc.0) + - RNReanimated/worklets/apple (= 3.17.0-rc.1) - Yoga - - RNReanimated/worklets/apple (3.17.0-rc.0): + - RNReanimated/worklets/apple (3.17.0-rc.1): - DoubleConversion - glog - RCT-Folly (= 2024.01.01.00) @@ -1804,71 +1804,71 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: boost: 78c06792d4bc8e05ba232b20737af9883a947a51 DoubleConversion: e9fd6969c78f190642ac8adbd3a5ac37995620dc - FBLazyVector: 674045444aef553388dd1165ef6984ca413f2fbf + FBLazyVector: ebbb0088dce747c92a3832ff6cc4f2428d2b39a6 fmt: c32f09ca7679bf28db6ba79e474dab38daa634a1 glog: f12b70f4104265bf944bf5800b4f85034eba0ea7 RCT-Folly: 693a1865d476549c2b4a788ec924ce59dd7cb8cb - RCTDeprecation: ff2cabe2e15e2e96194401db4c0d5254ad3857cd - RCTRequired: 8beb10b2371b492b08e403fa8465c614c661f7d9 - RCTTypeSafety: f9ebb687a6b1bc6253d6f95737b85769e0879cb6 - React: 52e8062836161af2fc11f4377776270ac986d515 - React-callinvoker: 26ff2b2589a0f00e8bba5394a75427bc69a00abe - React-Core: 548508be610d647f080c8b94cbbb608fa6434705 - React-CoreModules: 7be04dd0cfe91716601e526b9d0696fe58ea0e42 - React-cxxreact: f26bebcc3dd65f3879e5bfd603cd77201d62020a - React-debug: 8bbb9e4b4107a9f40b5a7c466873d7a9b4740839 - React-defaultsnativemodule: 6d4300b98ff5cfd0dc558d4d67a7ad211577a756 - React-domnativemodule: 28a1f5a059eba6b853eb2d1884f6f944bd09e18e - React-Fabric: 0f48daed285240e2b619d23902330580f8e30319 - React-FabricComponents: 5a9165a43376bcb44ebb719a9a42689c0cea8c87 - React-FabricImage: e6acce5ce12b9ade03f8eeb355bf3efd781ca666 - React-featureflags: 3623689e625d18899994cb12a377d30982f50159 - React-featureflagsnativemodule: d1acbf0e9ee0e6cb6907f23987d360d89dbf7f39 - React-graphics: 645c2c735837df0a3aec34c85127aa0c517ac1e3 - React-idlecallbacksnativemodule: 100c772b06b53c4ef0786caa8ab1cce34168768f - React-ImageManager: a4d9e88bd648e67113bf58ac576aeeea28226351 - React-jsc: 13b2a70c777931a42d28aa203c99088a65d3e6d1 - React-jserrorhandler: 0ec77f36d87009fa5bfb05bcc1a759565289deef - React-jsi: 375a917fcae52f17d61ad27a0d8a30071394cc75 - React-jsiexecutor: b3ad40efc425fdeffcfa1d491da0e63c3da678b8 - React-jsinspector: b0f390b1267022f9105fe52ab6e05c7e8b13931f - React-jsitracing: cdae491de33aaf4edd0fe6f2aef4077b4bd9063f - React-logger: 833be969bc3fa6cdec4e8d4d17da0a4adb56a7d9 - React-Mapbuffer: d473bad154e9e075a55f817d5ef33b87937a46c0 - React-microtasksnativemodule: 20510f9fca779fba67abd8ca164b5ea44ca03304 + RCTDeprecation: 1a64a4f0bf3c0f62fa3d4f6ce1c2e03f8c8546fb + RCTRequired: 280394d12d478c94be017e680c795f4ef9c84f37 + RCTTypeSafety: 35e178804ed3ce588d444b0c23f231f2a20a1678 + React: c9c8b39d07c9bc845a7bd1957524f90714fa4db7 + React-callinvoker: 9bb70ff84d1b2c1a193dd7b881a34544690583a2 + React-Core: 1bb1ae89cef9b032218c8cf72a226fd410b0b629 + React-CoreModules: 965b8c39fed3972aa5ca7b2dcb4a7f3d6399f925 + React-cxxreact: 5fa1e8e194931b81fdee535c27603018bddcc3c4 + React-debug: 71277c41e3ea00d88faea0e7fdc70bc5441becaf + React-defaultsnativemodule: eb7d59b6f4c018d6a9dedabb51be50f4e1a12e94 + React-domnativemodule: fe48fb8416a86b95706e0bd923f1a1ebb2f51dc1 + React-Fabric: 883efc0d08dca6620114155ef65d52cdd1fa850f + React-FabricComponents: ece1fd6e0d3324c3aa6a6a1c1430c6b9f0699dcb + React-FabricImage: cf25f33029ce7a594b3fb7544b1f30b45afc0e5c + React-featureflags: 9dfc9a470b198f2af08dda9ca51091599c18375d + React-featureflagsnativemodule: a228133ebaac7309556361b64b75ee6c9fb23861 + React-graphics: 0bf22b1537743c16547926b5f9100d2101f26e5a + React-idlecallbacksnativemodule: 228e4fcf2f4011a62941d2d0bd615117160bf6bc + React-ImageManager: 06474c1e70255003bc9cac91d42f65b40d83af9c + React-jsc: 0658d2a6fb31513b0860b0e371b12541838bdc33 + React-jserrorhandler: 8b5e329bf96e449d3c4243dc4f00f77d951446e4 + React-jsi: 9091c2b7590146ff89eb9c028637ccf12881cba4 + React-jsiexecutor: a7c55a36df7569cbb76cb455233aa988336bfdc7 + React-jsinspector: 60b57fb1cce720928505e0e0c663af65b3568cc6 + React-jsitracing: 9345056779a4ff94c7a62967e7ffacd705321b26 + React-logger: 7e30032239af894a3de5320d132b7afe49ee4f10 + React-Mapbuffer: 5c2e4284948e47d5a46243f218dbe39393e3e37f + React-microtasksnativemodule: 03881a25bb7a2db99a79e3a8e575bbadb24391ce react-native-safe-area-context: 004fe00b8c5aae5d57de1c27ff728cf6d3918b03 - React-nativeconfig: 5c2aaf96afeb7d45c925329feb609785add2a1a4 - React-NativeModulesApple: e97929d0bb6db0312a15cbbfc1c1c466b8f3936b - React-perflogger: 177ffbe623576b6f3b889bc805a883d8e452a24b - React-performancetimeline: 8003981a23b143ca25f541dd509bf401d9c04c4a - React-RCTActionSheet: 4cac8492b6519dcd7c6ae0335d80fc5abcdd0f49 - React-RCTAnimation: 89dcef51998f7b3f3eb5abb4955318c2f8873b19 - React-RCTAppDelegate: 52f723abb0076d63de8c8ccc6b38b1a77e167cfc - React-RCTBlob: da84e37ee3eb62e4955d52fa5cb8d2171bb704da - React-RCTFabric: 3886a6b6739a621967f1bca5e225ce790629ce5e - React-RCTImage: 7b4e79da0eb50373bc689029d662d4fe213d44e0 - React-RCTLinking: be9e9407563e3fc0d179000925903c0dc1c4d628 - React-RCTNetwork: d64e7b41052f62c85e13474fa7f71b477e1ec807 - React-RCTSettings: a7e14cd3d3c4b46e42b7e2049d53ce705ca77347 - React-RCTText: 4fdd0309e675becaea87897242ee6349a9b03676 - React-RCTVibration: 724c5f6938ac069a9c23a368b2df1a9b936416c6 - React-rendererconsistency: 420895d9e2d9e19710c6112a344ef4f49d1e4e0d - React-rendererdebug: 210da78fdae294ca06cde02463c3019ebf2b5b34 - React-rncore: 0a4b50833ea9b64af003b2b06a873cafb7ee6bb1 - React-RuntimeApple: f0cd2ed5596aecd95b1cf868a8c8c88b22ad418d - React-RuntimeCore: 43e9870b7692fb262e29b032db6cf14a7cf8a6dd - React-runtimeexecutor: 02c09792a6641ddcf229b2e1881ab95d3a56b06f - React-runtimescheduler: f046544a4c32769cf5f6f401d983696c342d0f5a - React-utils: e36f15c92ca305e254d1091a7af595c428bf44ce - ReactCodegen: 2987e13bcf036a2a2bdb324f8707d22761ad20f9 - ReactCommon: 1f073a117cae46d35c6bbc0f1dcf8d25b4e79d7e + React-nativeconfig: 33b8222107c5eb4b73b9cd6d28397ab123904d5c + React-NativeModulesApple: 7ac40d907aa6e653e4063072c474ff8416cabad7 + React-perflogger: 4ef0d0f93248f8331d7de7824e4b7b34d9740147 + React-performancetimeline: 6b41c3a8d4fd1bc9b5df5f6f269779560e38d3cf + React-RCTActionSheet: 9de394e5786c8a129bcb1677736eed4cb80b6f1d + React-RCTAnimation: f7d388e5367dd1611761dbf2a1d96c4f1932de2a + React-RCTAppDelegate: dc04e6aae2b6808ae8f4b272ea328b651a19a3dc + React-RCTBlob: 41e79b0dd56e64e3c5d2b03f1790b0337d4d7374 + React-RCTFabric: b4173524029bb2f18d29a0169f862c6cc92be5ca + React-RCTImage: 0eda203ee739ace6ac409226e267c87182d78b39 + React-RCTLinking: a15757e88e7fc3c70cf2b49b9ad678789a41cbd8 + React-RCTNetwork: 06a35d8cea3b93c6fdcf45099a63dc2a6e5554a6 + React-RCTSettings: b48b8765b3384798a91eb271a81d89a2fd559351 + React-RCTText: 93e7bcccb0056412275d11bf4ec3074189688464 + React-RCTVibration: 062d47b765b17882a2d577dd550b8e2720105422 + React-rendererconsistency: 017d7843a61140b7e382340421e4dfa0bbf51138 + React-rendererdebug: 266e7c47a06c02a0a67b5ef77b560a53d3c72e38 + React-rncore: e2688b8a3daa9913bb921dd0c717b5f3de595bb4 + React-RuntimeApple: ca103387e77c0da9025b271a9570f15c07addf4a + React-RuntimeCore: 771fae5d5becec41a61777d901cf60e0d82973b2 + React-runtimeexecutor: 655bc58c8341e2f1806c13b395ef2d8dadb768fc + React-runtimescheduler: 203909e404c1aff1536898ec61233ca1ad3a69c5 + React-utils: 1cf02e8d4880550ff7550c162a454adae239f82c + ReactCodegen: 023efeb9a9e9d4df117128652aa688e25c518fba + ReactCommon: e10fb4f939b3abe445dc8095997470a538627ec6 RNCAsyncStorage: ec53e44dc3e75b44aa2a9f37618a49c3bc080a7a - RNCPicker: f963e01f78e546a93b98aa201501713dbda14e94 + RNCPicker: d162737e03e48797110dbb60e5ddc03012e87e0b RNGestureHandler: 82f59e40580e0c2f8262552c149716511131b412 - RNReanimated: 4c39889e5eb0676e194de5c2ff91b1d0e692c2e1 + RNReanimated: 64d50a254825191a2773d2092b90ec38275ce678 RNSVG: 8b1a777d54096b8c2a0fd38fc9d5a454332bbb4d SocketRocket: 9ee265c4b5ae2382d18e4ee1d2dd2d7af0ff1ab5 - Yoga: a7f65c1fd1394973b9ea40c9c270530e9d7cd2e7 + Yoga: 446e6f351a519539ff00a1159fe41e589aab1b94 PODFILE CHECKSUM: 8d50cc2acc9f6a6b1a12bd9106b86385ad72266f diff --git a/apps/paper-example/ios/Podfile.lock b/apps/paper-example/ios/Podfile.lock index f18987b7836..6d77e360b91 100644 --- a/apps/paper-example/ios/Podfile.lock +++ b/apps/paper-example/ios/Podfile.lock @@ -1,12 +1,12 @@ PODS: - boost (1.84.0) - DoubleConversion (1.1.6) - - FBLazyVector (0.76.1) + - FBLazyVector (0.76.5) - fmt (9.1.0) - glog (0.3.5) - - hermes-engine (0.76.1): - - hermes-engine/Pre-built (= 0.76.1) - - hermes-engine/Pre-built (0.76.1) + - hermes-engine (0.76.5): + - hermes-engine/Pre-built (= 0.76.5) + - hermes-engine/Pre-built (0.76.5) - RCT-Folly (2024.01.01.00): - boost - DoubleConversion @@ -23,32 +23,32 @@ PODS: - DoubleConversion - fmt (= 9.1.0) - glog - - RCTDeprecation (0.76.1) - - RCTRequired (0.76.1) - - RCTTypeSafety (0.76.1): - - FBLazyVector (= 0.76.1) - - RCTRequired (= 0.76.1) - - React-Core (= 0.76.1) - - React (0.76.1): - - React-Core (= 0.76.1) - - React-Core/DevSupport (= 0.76.1) - - React-Core/RCTWebSocket (= 0.76.1) - - React-RCTActionSheet (= 0.76.1) - - React-RCTAnimation (= 0.76.1) - - React-RCTBlob (= 0.76.1) - - React-RCTImage (= 0.76.1) - - React-RCTLinking (= 0.76.1) - - React-RCTNetwork (= 0.76.1) - - React-RCTSettings (= 0.76.1) - - React-RCTText (= 0.76.1) - - React-RCTVibration (= 0.76.1) - - React-callinvoker (0.76.1) - - React-Core (0.76.1): + - RCTDeprecation (0.76.5) + - RCTRequired (0.76.5) + - RCTTypeSafety (0.76.5): + - FBLazyVector (= 0.76.5) + - RCTRequired (= 0.76.5) + - React-Core (= 0.76.5) + - React (0.76.5): + - React-Core (= 0.76.5) + - React-Core/DevSupport (= 0.76.5) + - React-Core/RCTWebSocket (= 0.76.5) + - React-RCTActionSheet (= 0.76.5) + - React-RCTAnimation (= 0.76.5) + - React-RCTBlob (= 0.76.5) + - React-RCTImage (= 0.76.5) + - React-RCTLinking (= 0.76.5) + - React-RCTNetwork (= 0.76.5) + - React-RCTSettings (= 0.76.5) + - React-RCTText (= 0.76.5) + - React-RCTVibration (= 0.76.5) + - React-callinvoker (0.76.5) + - React-Core (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - RCTDeprecation - - React-Core/Default (= 0.76.1) + - React-Core/Default (= 0.76.5) - React-cxxreact - React-featureflags - React-hermes @@ -60,7 +60,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/CoreModulesHeaders (0.76.1): + - React-Core/CoreModulesHeaders (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -77,7 +77,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/Default (0.76.1): + - React-Core/Default (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -93,13 +93,13 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/DevSupport (0.76.1): + - React-Core/DevSupport (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - RCTDeprecation - - React-Core/Default (= 0.76.1) - - React-Core/RCTWebSocket (= 0.76.1) + - React-Core/Default (= 0.76.5) + - React-Core/RCTWebSocket (= 0.76.5) - React-cxxreact - React-featureflags - React-hermes @@ -111,7 +111,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTActionSheetHeaders (0.76.1): + - React-Core/RCTActionSheetHeaders (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -128,7 +128,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTAnimationHeaders (0.76.1): + - React-Core/RCTAnimationHeaders (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -145,7 +145,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTBlobHeaders (0.76.1): + - React-Core/RCTBlobHeaders (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -162,7 +162,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTImageHeaders (0.76.1): + - React-Core/RCTImageHeaders (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -179,7 +179,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTLinkingHeaders (0.76.1): + - React-Core/RCTLinkingHeaders (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -196,7 +196,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTNetworkHeaders (0.76.1): + - React-Core/RCTNetworkHeaders (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -213,7 +213,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTSettingsHeaders (0.76.1): + - React-Core/RCTSettingsHeaders (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -230,7 +230,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTTextHeaders (0.76.1): + - React-Core/RCTTextHeaders (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -247,7 +247,7 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTVibrationHeaders (0.76.1): + - React-Core/RCTVibrationHeaders (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -264,12 +264,12 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTWebSocket (0.76.1): + - React-Core/RCTWebSocket (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - RCTDeprecation - - React-Core/Default (= 0.76.1) + - React-Core/Default (= 0.76.5) - React-cxxreact - React-featureflags - React-hermes @@ -281,37 +281,37 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-CoreModules (0.76.1): + - React-CoreModules (0.76.5): - DoubleConversion - fmt (= 9.1.0) - RCT-Folly (= 2024.01.01.00) - - RCTTypeSafety (= 0.76.1) - - React-Core/CoreModulesHeaders (= 0.76.1) - - React-jsi (= 0.76.1) + - RCTTypeSafety (= 0.76.5) + - React-Core/CoreModulesHeaders (= 0.76.5) + - React-jsi (= 0.76.5) - React-jsinspector - React-NativeModulesApple - React-RCTBlob - - React-RCTImage (= 0.76.1) + - React-RCTImage (= 0.76.5) - ReactCodegen - ReactCommon - SocketRocket (= 0.7.1) - - React-cxxreact (0.76.1): + - React-cxxreact (0.76.5): - boost - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.76.1) - - React-debug (= 0.76.1) - - React-jsi (= 0.76.1) + - React-callinvoker (= 0.76.5) + - React-debug (= 0.76.5) + - React-jsi (= 0.76.5) - React-jsinspector - - React-logger (= 0.76.1) - - React-perflogger (= 0.76.1) - - React-runtimeexecutor (= 0.76.1) - - React-timing (= 0.76.1) - - React-debug (0.76.1) - - React-defaultsnativemodule (0.76.1): + - React-logger (= 0.76.5) + - React-perflogger (= 0.76.5) + - React-runtimeexecutor (= 0.76.5) + - React-timing (= 0.76.5) + - React-debug (0.76.5) + - React-defaultsnativemodule (0.76.5): - DoubleConversion - glog - hermes-engine @@ -336,7 +336,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-domnativemodule (0.76.1): + - React-domnativemodule (0.76.5): - DoubleConversion - glog - hermes-engine @@ -358,7 +358,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-Fabric (0.76.1): + - React-Fabric (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -369,21 +369,21 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.76.1) - - React-Fabric/attributedstring (= 0.76.1) - - React-Fabric/componentregistry (= 0.76.1) - - React-Fabric/componentregistrynative (= 0.76.1) - - React-Fabric/components (= 0.76.1) - - React-Fabric/core (= 0.76.1) - - React-Fabric/dom (= 0.76.1) - - React-Fabric/imagemanager (= 0.76.1) - - React-Fabric/leakchecker (= 0.76.1) - - React-Fabric/mounting (= 0.76.1) - - React-Fabric/observers (= 0.76.1) - - React-Fabric/scheduler (= 0.76.1) - - React-Fabric/telemetry (= 0.76.1) - - React-Fabric/templateprocessor (= 0.76.1) - - React-Fabric/uimanager (= 0.76.1) + - React-Fabric/animations (= 0.76.5) + - React-Fabric/attributedstring (= 0.76.5) + - React-Fabric/componentregistry (= 0.76.5) + - React-Fabric/componentregistrynative (= 0.76.5) + - React-Fabric/components (= 0.76.5) + - React-Fabric/core (= 0.76.5) + - React-Fabric/dom (= 0.76.5) + - React-Fabric/imagemanager (= 0.76.5) + - React-Fabric/leakchecker (= 0.76.5) + - React-Fabric/mounting (= 0.76.5) + - React-Fabric/observers (= 0.76.5) + - React-Fabric/scheduler (= 0.76.5) + - React-Fabric/telemetry (= 0.76.5) + - React-Fabric/templateprocessor (= 0.76.5) + - React-Fabric/uimanager (= 0.76.5) - React-featureflags - React-graphics - React-jsi @@ -393,7 +393,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/animations (0.76.1): + - React-Fabric/animations (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -413,7 +413,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/attributedstring (0.76.1): + - React-Fabric/attributedstring (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -433,7 +433,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistry (0.76.1): + - React-Fabric/componentregistry (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -453,7 +453,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistrynative (0.76.1): + - React-Fabric/componentregistrynative (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -473,7 +473,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components (0.76.1): + - React-Fabric/components (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -484,9 +484,9 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.76.1) - - React-Fabric/components/root (= 0.76.1) - - React-Fabric/components/view (= 0.76.1) + - React-Fabric/components/legacyviewmanagerinterop (= 0.76.5) + - React-Fabric/components/root (= 0.76.5) + - React-Fabric/components/view (= 0.76.5) - React-featureflags - React-graphics - React-jsi @@ -496,7 +496,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/legacyviewmanagerinterop (0.76.1): + - React-Fabric/components/legacyviewmanagerinterop (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -516,7 +516,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/root (0.76.1): + - React-Fabric/components/root (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -536,7 +536,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/view (0.76.1): + - React-Fabric/components/view (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -557,7 +557,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-Fabric/core (0.76.1): + - React-Fabric/core (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -577,7 +577,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/dom (0.76.1): + - React-Fabric/dom (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -597,7 +597,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/imagemanager (0.76.1): + - React-Fabric/imagemanager (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -617,7 +617,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/leakchecker (0.76.1): + - React-Fabric/leakchecker (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -637,7 +637,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/mounting (0.76.1): + - React-Fabric/mounting (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -657,7 +657,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/observers (0.76.1): + - React-Fabric/observers (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -668,7 +668,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/observers/events (= 0.76.1) + - React-Fabric/observers/events (= 0.76.5) - React-featureflags - React-graphics - React-jsi @@ -678,7 +678,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/observers/events (0.76.1): + - React-Fabric/observers/events (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -698,7 +698,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/scheduler (0.76.1): + - React-Fabric/scheduler (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -720,7 +720,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/telemetry (0.76.1): + - React-Fabric/telemetry (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -740,7 +740,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/templateprocessor (0.76.1): + - React-Fabric/templateprocessor (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -760,7 +760,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager (0.76.1): + - React-Fabric/uimanager (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -771,7 +771,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/uimanager/consistency (= 0.76.1) + - React-Fabric/uimanager/consistency (= 0.76.5) - React-featureflags - React-graphics - React-jsi @@ -782,7 +782,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager/consistency (0.76.1): + - React-Fabric/uimanager/consistency (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -803,7 +803,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-FabricComponents (0.76.1): + - React-FabricComponents (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -815,8 +815,8 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components (= 0.76.1) - - React-FabricComponents/textlayoutmanager (= 0.76.1) + - React-FabricComponents/components (= 0.76.5) + - React-FabricComponents/textlayoutmanager (= 0.76.5) - React-featureflags - React-graphics - React-jsi @@ -828,7 +828,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components (0.76.1): + - React-FabricComponents/components (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -840,15 +840,15 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.76.1) - - React-FabricComponents/components/iostextinput (= 0.76.1) - - React-FabricComponents/components/modal (= 0.76.1) - - React-FabricComponents/components/rncore (= 0.76.1) - - React-FabricComponents/components/safeareaview (= 0.76.1) - - React-FabricComponents/components/scrollview (= 0.76.1) - - React-FabricComponents/components/text (= 0.76.1) - - React-FabricComponents/components/textinput (= 0.76.1) - - React-FabricComponents/components/unimplementedview (= 0.76.1) + - React-FabricComponents/components/inputaccessory (= 0.76.5) + - React-FabricComponents/components/iostextinput (= 0.76.5) + - React-FabricComponents/components/modal (= 0.76.5) + - React-FabricComponents/components/rncore (= 0.76.5) + - React-FabricComponents/components/safeareaview (= 0.76.5) + - React-FabricComponents/components/scrollview (= 0.76.5) + - React-FabricComponents/components/text (= 0.76.5) + - React-FabricComponents/components/textinput (= 0.76.5) + - React-FabricComponents/components/unimplementedview (= 0.76.5) - React-featureflags - React-graphics - React-jsi @@ -860,7 +860,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/inputaccessory (0.76.1): + - React-FabricComponents/components/inputaccessory (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -883,7 +883,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/iostextinput (0.76.1): + - React-FabricComponents/components/iostextinput (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -906,7 +906,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/modal (0.76.1): + - React-FabricComponents/components/modal (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -929,7 +929,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/rncore (0.76.1): + - React-FabricComponents/components/rncore (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -952,7 +952,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/safeareaview (0.76.1): + - React-FabricComponents/components/safeareaview (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -975,7 +975,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/scrollview (0.76.1): + - React-FabricComponents/components/scrollview (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -998,7 +998,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/text (0.76.1): + - React-FabricComponents/components/text (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -1021,7 +1021,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/textinput (0.76.1): + - React-FabricComponents/components/textinput (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -1044,7 +1044,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/unimplementedview (0.76.1): + - React-FabricComponents/components/unimplementedview (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -1067,7 +1067,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/textlayoutmanager (0.76.1): + - React-FabricComponents/textlayoutmanager (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -1090,26 +1090,26 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricImage (0.76.1): + - React-FabricImage (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired (= 0.76.1) - - RCTTypeSafety (= 0.76.1) + - RCTRequired (= 0.76.5) + - RCTTypeSafety (= 0.76.5) - React-Fabric - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.76.1) + - React-jsiexecutor (= 0.76.5) - React-logger - React-rendererdebug - React-utils - ReactCommon - Yoga - - React-featureflags (0.76.1) - - React-featureflagsnativemodule (0.76.1): + - React-featureflags (0.76.5) + - React-featureflagsnativemodule (0.76.5): - DoubleConversion - glog - hermes-engine @@ -1130,7 +1130,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-graphics (0.76.1): + - React-graphics (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog @@ -1138,19 +1138,19 @@ PODS: - React-jsi - React-jsiexecutor - React-utils - - React-hermes (0.76.1): + - React-hermes (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-cxxreact (= 0.76.1) + - React-cxxreact (= 0.76.5) - React-jsi - - React-jsiexecutor (= 0.76.1) + - React-jsiexecutor (= 0.76.5) - React-jsinspector - - React-perflogger (= 0.76.1) + - React-perflogger (= 0.76.5) - React-runtimeexecutor - - React-idlecallbacksnativemodule (0.76.1): + - React-idlecallbacksnativemodule (0.76.5): - DoubleConversion - glog - hermes-engine @@ -1172,7 +1172,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-ImageManager (0.76.1): + - React-ImageManager (0.76.5): - glog - RCT-Folly/Fabric - React-Core/Default @@ -1181,47 +1181,47 @@ PODS: - React-graphics - React-rendererdebug - React-utils - - React-jserrorhandler (0.76.1): + - React-jserrorhandler (0.76.5): - glog - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) - React-cxxreact - React-debug - React-jsi - - React-jsi (0.76.1): + - React-jsi (0.76.5): - boost - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-jsiexecutor (0.76.1): + - React-jsiexecutor (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-cxxreact (= 0.76.1) - - React-jsi (= 0.76.1) + - React-cxxreact (= 0.76.5) + - React-jsi (= 0.76.5) - React-jsinspector - - React-perflogger (= 0.76.1) - - React-jsinspector (0.76.1): + - React-perflogger (= 0.76.5) + - React-jsinspector (0.76.5): - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - React-featureflags - React-jsi - - React-perflogger (= 0.76.1) - - React-runtimeexecutor (= 0.76.1) - - React-jsitracing (0.76.1): + - React-perflogger (= 0.76.5) + - React-runtimeexecutor (= 0.76.5) + - React-jsitracing (0.76.5): - React-jsi - - React-logger (0.76.1): + - React-logger (0.76.5): - glog - - React-Mapbuffer (0.76.1): + - React-Mapbuffer (0.76.5): - glog - React-debug - - React-microtasksnativemodule (0.76.1): + - React-microtasksnativemodule (0.76.5): - DoubleConversion - glog - hermes-engine @@ -1286,8 +1286,8 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-nativeconfig (0.76.1) - - React-NativeModulesApple (0.76.1): + - React-nativeconfig (0.76.5) + - React-NativeModulesApple (0.76.5): - glog - hermes-engine - React-callinvoker @@ -1298,16 +1298,16 @@ PODS: - React-runtimeexecutor - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-perflogger (0.76.1): + - React-perflogger (0.76.5): - DoubleConversion - RCT-Folly (= 2024.01.01.00) - - React-performancetimeline (0.76.1): + - React-performancetimeline (0.76.5): - RCT-Folly (= 2024.01.01.00) - React-cxxreact - React-timing - - React-RCTActionSheet (0.76.1): - - React-Core/RCTActionSheetHeaders (= 0.76.1) - - React-RCTAnimation (0.76.1): + - React-RCTActionSheet (0.76.5): + - React-Core/RCTActionSheetHeaders (= 0.76.5) + - React-RCTAnimation (0.76.5): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Core/RCTAnimationHeaders @@ -1315,7 +1315,7 @@ PODS: - React-NativeModulesApple - ReactCodegen - ReactCommon - - React-RCTAppDelegate (0.76.1): + - React-RCTAppDelegate (0.76.5): - RCT-Folly (= 2024.01.01.00) - RCTRequired - RCTTypeSafety @@ -1340,7 +1340,7 @@ PODS: - React-utils - ReactCodegen - ReactCommon - - React-RCTBlob (0.76.1): + - React-RCTBlob (0.76.5): - DoubleConversion - fmt (= 9.1.0) - hermes-engine @@ -1353,7 +1353,7 @@ PODS: - React-RCTNetwork - ReactCodegen - ReactCommon - - React-RCTFabric (0.76.1): + - React-RCTFabric (0.76.5): - glog - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) @@ -1376,7 +1376,7 @@ PODS: - React-runtimescheduler - React-utils - Yoga - - React-RCTImage (0.76.1): + - React-RCTImage (0.76.5): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Core/RCTImageHeaders @@ -1385,14 +1385,14 @@ PODS: - React-RCTNetwork - ReactCodegen - ReactCommon - - React-RCTLinking (0.76.1): - - React-Core/RCTLinkingHeaders (= 0.76.1) - - React-jsi (= 0.76.1) + - React-RCTLinking (0.76.5): + - React-Core/RCTLinkingHeaders (= 0.76.5) + - React-jsi (= 0.76.5) - React-NativeModulesApple - ReactCodegen - ReactCommon - - ReactCommon/turbomodule/core (= 0.76.1) - - React-RCTNetwork (0.76.1): + - ReactCommon/turbomodule/core (= 0.76.5) + - React-RCTNetwork (0.76.5): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Core/RCTNetworkHeaders @@ -1400,7 +1400,7 @@ PODS: - React-NativeModulesApple - ReactCodegen - ReactCommon - - React-RCTSettings (0.76.1): + - React-RCTSettings (0.76.5): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Core/RCTSettingsHeaders @@ -1408,24 +1408,24 @@ PODS: - React-NativeModulesApple - ReactCodegen - ReactCommon - - React-RCTText (0.76.1): - - React-Core/RCTTextHeaders (= 0.76.1) + - React-RCTText (0.76.5): + - React-Core/RCTTextHeaders (= 0.76.5) - Yoga - - React-RCTVibration (0.76.1): + - React-RCTVibration (0.76.5): - RCT-Folly (= 2024.01.01.00) - React-Core/RCTVibrationHeaders - React-jsi - React-NativeModulesApple - ReactCodegen - ReactCommon - - React-rendererconsistency (0.76.1) - - React-rendererdebug (0.76.1): + - React-rendererconsistency (0.76.5) + - React-rendererdebug (0.76.5): - DoubleConversion - fmt (= 9.1.0) - RCT-Folly (= 2024.01.01.00) - React-debug - - React-rncore (0.76.1) - - React-RuntimeApple (0.76.1): + - React-rncore (0.76.5) + - React-RuntimeApple (0.76.5): - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) - React-callinvoker @@ -1444,7 +1444,7 @@ PODS: - React-RuntimeHermes - React-runtimescheduler - React-utils - - React-RuntimeCore (0.76.1): + - React-RuntimeCore (0.76.5): - glog - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) @@ -1458,9 +1458,9 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - React-runtimeexecutor (0.76.1): - - React-jsi (= 0.76.1) - - React-RuntimeHermes (0.76.1): + - React-runtimeexecutor (0.76.5): + - React-jsi (= 0.76.5) + - React-RuntimeHermes (0.76.5): - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) - React-featureflags @@ -1471,7 +1471,7 @@ PODS: - React-nativeconfig - React-RuntimeCore - React-utils - - React-runtimescheduler (0.76.1): + - React-runtimescheduler (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -1486,14 +1486,14 @@ PODS: - React-runtimeexecutor - React-timing - React-utils - - React-timing (0.76.1) - - React-utils (0.76.1): + - React-timing (0.76.5) + - React-utils (0.76.5): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - React-debug - - React-jsi (= 0.76.1) - - ReactCodegen (0.76.1): + - React-jsi (= 0.76.5) + - ReactCodegen (0.76.5): - DoubleConversion - glog - hermes-engine @@ -1513,52 +1513,50 @@ PODS: - React-utils - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - ReactCommon (0.76.1): - - ReactCommon/turbomodule (= 0.76.1) - - ReactCommon/turbomodule (0.76.1): + - ReactCommon (0.76.5): + - ReactCommon/turbomodule (= 0.76.5) + - ReactCommon/turbomodule (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.76.1) - - React-cxxreact (= 0.76.1) - - React-jsi (= 0.76.1) - - React-logger (= 0.76.1) - - React-perflogger (= 0.76.1) - - ReactCommon/turbomodule/bridging (= 0.76.1) - - ReactCommon/turbomodule/core (= 0.76.1) - - ReactCommon/turbomodule/bridging (0.76.1): + - React-callinvoker (= 0.76.5) + - React-cxxreact (= 0.76.5) + - React-jsi (= 0.76.5) + - React-logger (= 0.76.5) + - React-perflogger (= 0.76.5) + - ReactCommon/turbomodule/bridging (= 0.76.5) + - ReactCommon/turbomodule/core (= 0.76.5) + - ReactCommon/turbomodule/bridging (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.76.1) - - React-cxxreact (= 0.76.1) - - React-jsi (= 0.76.1) - - React-logger (= 0.76.1) - - React-perflogger (= 0.76.1) - - ReactCommon/turbomodule/core (0.76.1): + - React-callinvoker (= 0.76.5) + - React-cxxreact (= 0.76.5) + - React-jsi (= 0.76.5) + - React-logger (= 0.76.5) + - React-perflogger (= 0.76.5) + - ReactCommon/turbomodule/core (0.76.5): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.76.1) - - React-cxxreact (= 0.76.1) - - React-debug (= 0.76.1) - - React-featureflags (= 0.76.1) - - React-jsi (= 0.76.1) - - React-logger (= 0.76.1) - - React-perflogger (= 0.76.1) - - React-utils (= 0.76.1) + - React-callinvoker (= 0.76.5) + - React-cxxreact (= 0.76.5) + - React-debug (= 0.76.5) + - React-featureflags (= 0.76.5) + - React-jsi (= 0.76.5) + - React-logger (= 0.76.5) + - React-perflogger (= 0.76.5) + - React-utils (= 0.76.5) - RNCAsyncStorage (1.24.0): - React-Core - RNCMaskedView (0.3.1): - React-Core - - RNCPicker (2.9.0): - - React-Core - RNFlashList (1.7.1): - DoubleConversion - glog @@ -1601,7 +1599,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNReanimated (3.17.0-rc.0): + - RNReanimated (3.17.0-rc.1): - DoubleConversion - glog - hermes-engine @@ -1621,10 +1619,10 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/reanimated (= 3.17.0-rc.0) - - RNReanimated/worklets (= 3.17.0-rc.0) + - RNReanimated/reanimated (= 3.17.0-rc.1) + - RNReanimated/worklets (= 3.17.0-rc.1) - Yoga - - RNReanimated/reanimated (3.17.0-rc.0): + - RNReanimated/reanimated (3.17.0-rc.1): - DoubleConversion - glog - hermes-engine @@ -1644,9 +1642,9 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/reanimated/apple (= 3.17.0-rc.0) + - RNReanimated/reanimated/apple (= 3.17.0-rc.1) - Yoga - - RNReanimated/reanimated/apple (3.17.0-rc.0): + - RNReanimated/reanimated/apple (3.17.0-rc.1): - DoubleConversion - glog - hermes-engine @@ -1667,7 +1665,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNReanimated/worklets (3.17.0-rc.0): + - RNReanimated/worklets (3.17.0-rc.1): - DoubleConversion - glog - hermes-engine @@ -1687,9 +1685,9 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/worklets/apple (= 3.17.0-rc.0) + - RNReanimated/worklets/apple (= 3.17.0-rc.1) - Yoga - - RNReanimated/worklets/apple (3.17.0-rc.0): + - RNReanimated/worklets/apple (3.17.0-rc.1): - DoubleConversion - glog - hermes-engine @@ -1807,7 +1805,6 @@ DEPENDENCIES: - ReactCommon/turbomodule/core (from `../../../node_modules/react-native/ReactCommon`) - "RNCAsyncStorage (from `../../../node_modules/@react-native-async-storage/async-storage`)" - "RNCMaskedView (from `../../../node_modules/@react-native-masked-view/masked-view`)" - - "RNCPicker (from `../../../node_modules/@react-native-picker/picker`)" - "RNFlashList (from `../../../node_modules/@shopify/flash-list`)" - RNGestureHandler (from `../../../node_modules/react-native-gesture-handler`) - RNReanimated (from `../../../node_modules/react-native-reanimated`) @@ -1832,7 +1829,7 @@ EXTERNAL SOURCES: :podspec: "../../../node_modules/react-native/third-party-podspecs/glog.podspec" hermes-engine: :podspec: "../../../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" - :tag: hermes-2024-09-09-RNv0.76.0-db6d12e202e15f7a446d8848d6ca8f7abb3cfb32 + :tag: hermes-2024-11-12-RNv0.76.2-5b4aa20c719830dcf5684832b89a6edb95ac3d64 RCT-Folly: :podspec: "../../../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" RCTDeprecation: @@ -1955,8 +1952,6 @@ EXTERNAL SOURCES: :path: "../../../node_modules/@react-native-async-storage/async-storage" RNCMaskedView: :path: "../../../node_modules/@react-native-masked-view/masked-view" - RNCPicker: - :path: "../../../node_modules/@react-native-picker/picker" RNFlashList: :path: "../../../node_modules/@shopify/flash-list" RNGestureHandler: @@ -1973,79 +1968,78 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: boost: 1dca942403ed9342f98334bf4c3621f011aa7946 DoubleConversion: f16ae600a246532c4020132d54af21d0ddb2a385 - FBLazyVector: 7075bb12898bc3998fd60f4b7ca422496cc2cdf7 + FBLazyVector: 1bf99bb46c6af9a2712592e707347315f23947aa fmt: 10c6e61f4be25dc963c36bd73fc7b1705fe975be glog: 08b301085f15bcbb6ff8632a8ebaf239aae04e6a - hermes-engine: 46f1ffbf0297f4298862068dd4c274d4ac17a1fd + hermes-engine: 06a9c6900587420b90accc394199527c64259db4 RCT-Folly: bf5c0376ffe4dd2cf438dcf86db385df9fdce648 - RCTDeprecation: fde92935b3caa6cb65cbff9fbb7d3a9867ffb259 - RCTRequired: 75c6cee42d21c1530a6f204ba32ff57335d19007 - RCTTypeSafety: 7e6fe47bfb693c50d4669db1a480ca5331795f5b - React: 8e73704cdd5c7f801936776d2fc434c605a7827b - React-callinvoker: fa27d1e091e683de88f576e6a5d4efc171929a4c - React-Core: 8dd14bffcc9b877091b698e45701160669a31f91 - React-CoreModules: b4437acf2ef25ce3689c84df661dc5d806559b35 - React-cxxreact: 6125cd820da7e18f9ca8343b3c42ee61634a4e0d - React-debug: f474f5c202a277f76c81bf7cf26284f2c09880d7 - React-defaultsnativemodule: 05f1a83669c4f01b5761b58ca0968306c99f3d50 - React-domnativemodule: 64f3f5089cf214c31aa1821dd8fd4abc481baa91 - React-Fabric: ba9636cfc7f9b77df6cb7edb2c70d0237026404b - React-FabricComponents: c408da05a4ea5ba071732245b4a7f48f904e610a - React-FabricImage: c409858f319f11709b49ffa6c5bca4faf794cb44 - React-featureflags: 929732439d139ac0662e08f009f1a51ed2b91ed3 - React-featureflagsnativemodule: 2f899ad011b6b1a8aa8babe4fafa0a68725faeb6 - React-graphics: a5cad35307286e9f83e212834e95fef4010d03d0 - React-hermes: 14aafa9630579b84c2167b563bdb8c811970a03e - React-idlecallbacksnativemodule: ba1475765a2900e1adc76ce45a625ef5f79fdc19 - React-ImageManager: 41945afb3ace0c52255057ec4ae6af6f5a23539f - React-jserrorhandler: ecbc4622df7ab3d0066a4313cde4172d45745508 - React-jsi: ff383df87c7047e976a66be45df59e4e0db5346e - React-jsiexecutor: 2bb8b172f226f2f502521d33dd7666e701d45f45 - React-jsinspector: 4d51b903543f21076b658ef8412f3102778dbc92 - React-jsitracing: 654f4d9cb9fd99b3d96f239ceb215ae49ce28ac0 - React-logger: 97c9dafae1f1a638001a9d1d0e93d431f2f9cb7b - React-Mapbuffer: 3146a13424f9fec2ea1f1462d49d566e4d69b732 - React-microtasksnativemodule: 8fa0a3d8542f6ae7712deebe0802ee17a623718b + RCTDeprecation: fb7d408617e25d7f537940000d766d60149c5fea + RCTRequired: 9aaf0ffcc1f41f0c671af863970ef25c422a9920 + RCTTypeSafety: e9a6e7d48184646eb0610295b74c0dd02768cbb2 + React: fffb3cf1b0d7aee03c4eb4952b2d58783615e9fa + React-callinvoker: 3c6ecc0315d42924e01b3ddc25cf2e49d33da169 + React-Core: d2143ba58d0c8563cf397f96f699c6069eba951c + React-CoreModules: b3cbc5e3090a8c23116c0c7dd8998e0637e29619 + React-cxxreact: 68fb9193582c4a411ce99d0b23f7b3d8da1c2e4a + React-debug: 297ed67868a76e8384669ea9b5c65c5d9d9d15d9 + React-defaultsnativemodule: 73c2ebce82c2be4d98a0257391dbb1cce201784b + React-domnativemodule: 73835de7f06190165c86bff80d80178abb8f9333 + React-Fabric: 2e33816098a5a29d2f4ae7eb2de3cfbc361b6922 + React-FabricComponents: bb2d6b89321bf79653ae3d4ec890ba7cb9fe51c8 + React-FabricImage: 019a5e834378e460ef39bf19cb506fd36491ae74 + React-featureflags: cb3dca1c74ba813f2e578c8c635989d01d14739f + React-featureflagsnativemodule: 328e1bfee2de7b680955bb4be276b045e0f260f0 + React-graphics: e626f3b24227a3a8323ed89476c8f0927c0264c7 + React-hermes: 63678d262d94835f986fa2fac1c835188f14160b + React-idlecallbacksnativemodule: 94f46b349e9878e899409cfd1ee948b59eb52181 + React-ImageManager: 223709133aa644bc1e74d354308cf2ed4c9d0f00 + React-jserrorhandler: 212d88de95b23965fdff91c1a20da30e29cdfbbb + React-jsi: d189a2a826fe6700ea1194e1c2b15535d06c8d75 + React-jsiexecutor: b75a12d37f2bf84f74b5c05131afdef243cfc69d + React-jsinspector: c3402468ae1fbca79e3d8cc11e7a0fc2c8ffafb1 + React-jsitracing: 1f46c2ec0c5ace3fe959b1aa0f8535ef1c021161 + React-logger: 697873f06b8ba436e3cddf28018ab4741e8071b6 + React-Mapbuffer: c174e11bdea12dce07df8669d6c0dc97eb0c7706 + React-microtasksnativemodule: 4c4eb6c6b6a33765ca9242e4efffb249700ea0df react-native-pager-view: c476f76d54f946df5147645e902d3d7173688187 react-native-safe-area-context: 004fe00b8c5aae5d57de1c27ff728cf6d3918b03 react-native-slider: 4a0f3386a38fc3d2d955efc515aef7096f7d1ee4 - React-nativeconfig: 93fe8c85a8c40820c57814e30f3e44b94c995a7b - React-NativeModulesApple: b3e076fd0d7b73417fe1e8c8b26e3c57ae9b74aa - React-perflogger: 1c55bcd3c392137cbaf0d21d8bb87ce9a0cebb15 - React-performancetimeline: e89249db10b8f7bf8f72c2e9bd471ac37d48b753 - React-RCTActionSheet: 9407c795fbeee35da2dae3cd6b5c4e5da6ff8bd3 - React-RCTAnimation: 7ee1c2a77aab7e5c568611d8092a994cfcbe8410 - React-RCTAppDelegate: e7b835203804bfd12a8baad30ab4c67f7da7bf24 - React-RCTBlob: 761072706300d22624ec2d6bf860b77d95ebd3da - React-RCTFabric: a6c44c606009f889ef7431e71f03c5339fb72e6e - React-RCTImage: b6614fde902ec9647f15236da94df2d24c40523f - React-RCTLinking: 25950eda5d5f786bfb3daf513ea7d848555a2a93 - React-RCTNetwork: b69407c4119fd7a1cc07db4a94563f2546f8770d - React-RCTSettings: b310a4923446c3a8950fa866c8cf83323a9e1b87 - React-RCTText: 77c6eda5be1dee657f5183f75fe0fdcdb7b2b35d - React-RCTVibration: b4889c7702aea1b07316be1ec0de2e36e9a4d077 - React-rendererconsistency: 5ef1c4642fd6365bf6d5d4e29a3ae02c3a1b8980 - React-rendererdebug: 7f6a24cbb5008a22ccb34a0d031a259b006facf6 - React-rncore: 0e5394ce20a9d2bf12409d14395588c7b9e6e9ce - React-RuntimeApple: bbe293f233d17304c9597309acde7505080fd53d - React-RuntimeCore: 5a1cbfc3e7af4fbdea2b9b1efd39cd51a4d4006f - React-runtimeexecutor: ffac5f09795a5e881477e0d72a0fa6385456bed3 - React-RuntimeHermes: 0a1fd1c150faed8341887dd89895eeb8d4d2d3c5 - React-runtimescheduler: e7df538274de0c65736068e40efc0d2228f42d0d - React-timing: b3b233fe819d9e5b6ca32b605aa732621bdfa5aa - React-utils: 5362bd16a9563f9916e7a56c011ddc533507650f - ReactCodegen: 84a006ff4f2742ed633b3044b5c1583ee22a2a6c - ReactCommon: 422e364463f33e336fc4db196aeb50fd801d90d6 + React-nativeconfig: f7ab6c152e780b99a8c17448f2d99cf5f69a2311 + React-NativeModulesApple: 70600f7edfc2c2a01e39ab13a20fd59f4c60df0b + React-perflogger: ceb97dd4e5ca6ff20eebb5a6f9e00312dcdea872 + React-performancetimeline: e39f038509c2a6b2ddb85087ba7cb8bd9caf977d + React-RCTActionSheet: a4388035260b01ac38d3647da0433b0455da9bae + React-RCTAnimation: 84117cb3521c40e95a4edfeab1c1cb159bc9a7c3 + React-RCTAppDelegate: 259fe8544ef95272f6ff3acc305a28a5780e8e51 + React-RCTBlob: 947cbb49842c9141e2b21f719e83e9197a06e453 + React-RCTFabric: f29f80a30d6d829629532786d84741b9779e7536 + React-RCTImage: 367a7dcca1d37b04e28918c025a0101494fb2a19 + React-RCTLinking: b9dc797e49683a98ee4f703f1f01ec2bd69ceb7f + React-RCTNetwork: 16e92fb59b9cd1e1175ecb2e90aa9e06e82db7a3 + React-RCTSettings: 20a1c3316956fae137d8178b4c23b7a1d56674cc + React-RCTText: 59d8792076b6010f7305f2558d868025004e108b + React-RCTVibration: 597d5aba0212d709ec79d12e76285c3d94dc0658 + React-rendererconsistency: 42f182fe910ad6c9b449cc62adae8d0eaba76f0a + React-rendererdebug: f36daf9f79831c8785215048fad4ef6453834430 + React-rncore: 85ed76036ff56e2e9c369155027cbbd84db86006 + React-RuntimeApple: 6ca44fc23bb00474f9387c0709f23d4dade79800 + React-RuntimeCore: b4d723e516e2e24616eb72de5b41a68b0736cc02 + React-runtimeexecutor: 10fae9492194097c99f6e34cedbb42a308922d32 + React-RuntimeHermes: 93437bfc028ba48122276e2748c7cd0f9bbcdb40 + React-runtimescheduler: 72bbb4bd4774a0f4f9a7e84dbf133213197a0828 + React-timing: 1050c6fa44c327f2d7538e10c548fdf521fabdb8 + React-utils: 541c6cca08f32597d4183f00e83eef2ed20d4c54 + ReactCodegen: fca7518fb8bac9ce8573b698a13d9647dbbb78ea + ReactCommon: a6b87a7591591f7a52d9c0fec3aa05e0620d5dd3 RNCAsyncStorage: ec53e44dc3e75b44aa2a9f37618a49c3bc080a7a RNCMaskedView: 090213d32d8b3bb83a4dcb7d12c18f0152591906 - RNCPicker: f963e01f78e546a93b98aa201501713dbda14e94 RNFlashList: 115dd44377580761bff386a0caebf165424cf16f RNGestureHandler: 511250b190a284388f9dd0d2e56c1df76f14cfb8 - RNReanimated: 39fa8f0b4be5d12d8673609c12172393ac5c2c7f + RNReanimated: 25b607fb27bf31603e898a08b6786637e52afbdc RNScreens: de948b09c9a30f3ea52f9840dd6f8ce92b4e33d3 RNSVG: 8b1a777d54096b8c2a0fd38fc9d5a454332bbb4d SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - Yoga: db69236006b8b1c6d55ab453390c882306cbf219 + Yoga: fcc198acd4a55599b3468cfb6ebc526baff5f06e PODFILE CHECKSUM: 44956aee8c836a85949aa1fa8dde2c10e661633e diff --git a/apps/paper-example/package.json b/apps/paper-example/package.json index 53b9fa28947..f4036b8bcce 100644 --- a/apps/paper-example/package.json +++ b/apps/paper-example/package.json @@ -15,13 +15,12 @@ "@react-native-async-storage/async-storage": "^1.24.0", "@react-native-community/slider": "^4.5.5", "@react-native-masked-view/masked-view": "^0.3.1", - "@react-native-picker/picker": "^2.9.0", "@react-navigation/native": "^7.0.0", "@react-navigation/native-stack": "^7.0.0", "@shopify/flash-list": "^1.7.1", "common-app": "workspace:*", "react": "18.3.1", - "react-native": "^0.76.1", + "react-native": "0.76.5", "react-native-gesture-handler": "2.20.2", "react-native-pager-view": "^6.4.1", "react-native-reanimated": "workspace:*", @@ -36,10 +35,10 @@ "@react-native-community/cli": "15.0.0", "@react-native-community/cli-platform-android": "15.0.0", "@react-native-community/cli-platform-ios": "15.0.0", - "@react-native/babel-preset": "0.76.1", - "@react-native/eslint-config": "0.76.1", - "@react-native/metro-config": "0.76.1", - "@react-native/typescript-config": "0.76.1", + "@react-native/babel-preset": "0.76.5", + "@react-native/eslint-config": "0.76.5", + "@react-native/metro-config": "0.76.5", + "@react-native/typescript-config": "0.76.5", "@types/jest": "^29.2.1", "@types/react": "^18.2.6", "@types/react-test-renderer": "^18.0.0", diff --git a/apps/tvos-example/ios/Podfile.lock b/apps/tvos-example/ios/Podfile.lock index 70a5e2fa07f..b53ec3ea885 100644 --- a/apps/tvos-example/ios/Podfile.lock +++ b/apps/tvos-example/ios/Podfile.lock @@ -1508,7 +1508,7 @@ PODS: - React-logger (= 0.76.0-0) - React-perflogger (= 0.76.0-0) - React-utils (= 0.76.0-0) - - RNReanimated (3.17.0-rc.0): + - RNReanimated (3.17.0-rc.1): - DoubleConversion - glog - hermes-engine @@ -1528,10 +1528,10 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/reanimated (= 3.17.0-rc.0) - - RNReanimated/worklets (= 3.17.0-rc.0) + - RNReanimated/reanimated (= 3.17.0-rc.1) + - RNReanimated/worklets (= 3.17.0-rc.1) - Yoga - - RNReanimated/reanimated (3.17.0-rc.0): + - RNReanimated/reanimated (3.17.0-rc.1): - DoubleConversion - glog - hermes-engine @@ -1551,9 +1551,9 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/reanimated/apple (= 3.17.0-rc.0) + - RNReanimated/reanimated/apple (= 3.17.0-rc.1) - Yoga - - RNReanimated/reanimated/apple (3.17.0-rc.0): + - RNReanimated/reanimated/apple (3.17.0-rc.1): - DoubleConversion - glog - hermes-engine @@ -1574,7 +1574,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNReanimated/worklets (3.17.0-rc.0): + - RNReanimated/worklets (3.17.0-rc.1): - DoubleConversion - glog - hermes-engine @@ -1594,9 +1594,9 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/worklets/apple (= 3.17.0-rc.0) + - RNReanimated/worklets/apple (= 3.17.0-rc.1) - Yoga - - RNReanimated/worklets/apple (3.17.0-rc.0): + - RNReanimated/worklets/apple (3.17.0-rc.1): - DoubleConversion - glog - hermes-engine @@ -1886,7 +1886,7 @@ SPEC CHECKSUMS: React-utils: 3fce26d04c6776ddd47f255e7f3adc70d61b4491 ReactCodegen: 61cc9f25250fd53c91d30d82e84a1c6aafcf451a ReactCommon: b927fd46115bd2acb146e24cf1a08f22abda8b3f - RNReanimated: e3af5c3c587c3dc3205ca21f604b5e02b6d3436d + RNReanimated: 390b9030d94cf0ae4ddf902b0e7fdade074e3f3f SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 Yoga: 651e5fd560c7e408ab9d9ca44b8de1b622d7f0cc diff --git a/apps/web-example/package.json b/apps/web-example/package.json index 58042944c30..d747b792d1f 100644 --- a/apps/web-example/package.json +++ b/apps/web-example/package.json @@ -19,7 +19,7 @@ "expo": "^52.0.4", "react": "18.3.1", "react-dom": "18.3.1", - "react-native": "0.76.0", + "react-native": "0.76.5", "react-native-reanimated": "workspace:*", "react-native-web": "0.19.11" }, diff --git a/package.json b/package.json index b207048a35d..9df784781ff 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "packages/react-native-reanimated", "packages/eslint-plugin-reanimated", "packages/react-native-reanimated/plugin", + "packages/react-native-worklets", "apps/common-app", "apps/paper-example", "apps/fabric-example", diff --git a/packages/docs-reanimated/docs/advanced/useEvent.mdx b/packages/docs-reanimated/docs/advanced/useEvent.mdx index 83ffc0d98b8..2525a6d5b8b 100644 --- a/packages/docs-reanimated/docs/advanced/useEvent.mdx +++ b/packages/docs-reanimated/docs/advanced/useEvent.mdx @@ -4,7 +4,7 @@ sidebar_position: 4 # useEvent -`useEvent` is a low-level hook. It returns event handler that will be called when native event occurs. You can use it to create custom event handler hooks, like [`useScrollViewOffset`](/docs/scroll/useScrollViewOffset/) or [`useAnimatedScrollHandler`](/docs/scroll/useAnimatedScrollHandler/). +`useEvent` is a low-level hook. It returns an event handler that will be called when a native event occurs. You can use it to create custom event handler hooks, like [`useScrollViewOffset`](/docs/scroll/useScrollViewOffset/) or [`useAnimatedScrollHandler`](/docs/scroll/useAnimatedScrollHandler/). ## Reference @@ -63,22 +63,22 @@ type EventHandlerProcessed< #### `handler` -Function that receives event object with native payload, that can be passed to custom handler hook's worklets. +Function that receives an event object with a native payload, which can be passed to the custom handler hook's worklets. - `event` - event object. The payload can differ depending on the type of the event. #### `eventNames` -Array of event names that will be handled by handler. +Array of event names that will be handled by the handler. #### `rebuild` -Value indicating whether handler should be rebuilt. +Value indicating whether the handler should be rebuilt. ### Returns -The hook returns event handler that will be invoked when native event is dispatched. That handler may be connected to multiple components and will be invoked for each one's specific events. +The hook returns an event handler that will be invoked when a native event is dispatched. That handler may be connected to multiple components and will be invoked for each one's specific events. ## Example diff --git a/packages/docs-reanimated/docs/guides/worklets.mdx b/packages/docs-reanimated/docs/guides/worklets.mdx index a1a6ba2393d..e91645af9f7 100644 --- a/packages/docs-reanimated/docs/guides/worklets.mdx +++ b/packages/docs-reanimated/docs/guides/worklets.mdx @@ -8,6 +8,8 @@ sidebar_position: 1 Worklets are short-running JavaScript functions that can run on the [UI thread](/docs/fundamentals/glossary#ui-thread). Reanimated uses worklets to calculate view styles and react to events on the UI thread. +## Defining worklets + You can create your own worklets using the `'worklet';` directive at the top of a function. ```javascript @@ -17,6 +19,8 @@ function myWorklet() { } ``` +## Workletization + The [Reanimated Babel Plugin](https://github.com/software-mansion/react-native-reanimated/blob/main/packages/react-native-reanimated/plugin/README-dev.md#basics) looks for functions marked with the `'worklet'` directive and converts them into serializable objects. We call this process [workletization](/docs/fundamentals/glossary#to-workletize). These objects can then be copied and run over on the UI thread. Most of the time when working with Reanimated and [Gesture Handler](https://docs.swmansion.com/react-native-gesture-handler/) the code is automatically workletized and run on the UI thread by default. @@ -32,7 +36,7 @@ function App() { } ``` -Functions marked with `'worklet';` aren't [hoisted](https://developer.mozilla.org/en-US/docs/Glossary/Hoisting). Besides affecting hoisting, the `'worklet';` directive has no effect on the [JavaScript thread](/docs/fundamentals/glossary#javascript-thread). +## Running worklets on the UI thread You can use [`runOnUI`](/docs/threading/runOnUI) to manually schedule worklet execution on the UI thread: @@ -60,6 +64,41 @@ function onPress() { } ``` +## Running functions from worklets + +You can run functions on the JS thread from the UI thread with [`runOnJS`](/docs/threading/runOnJS). Most frequently used to call functions that aren't marked with a `'worklet';` directive (i.e. most third-party libraries) or to update the React state. + +```javascript +import { router } from 'expo-router'; +import { Gesture } from 'react-native-gesture-handler'; + +function App() { + const tap = Gesture.Tap().onEnd(() => { + // i'm a worklet too! + // highlight-next-line + runOnJS(router.back)(); + }); +} +``` + +Functions passed to `runOnJS` must be defined in the [JavaScript thread](/docs/fundamentals/glossary#javascript-thread) scope, i.e. in the component body or the global scope. This code won't work because `myFunction` is defined in the `withTiming` callback, which is only executed in the [UI thread](/docs/fundamentals/glossary#ui-thread): + +```javascript +function App() { + const tap = Gesture.Tap().onEnd(() => { + // myFunction is defined on the UI thread 🚨 + const myFunction = () => {}; + runOnJS(myFunction)(); // 💥 + }); +} +``` + +## Hoisting + +Functions marked with `'worklet';` aren't [hoisted](https://developer.mozilla.org/en-US/docs/Glossary/Hoisting). Besides affecting hoisting, the `'worklet';` directive has no effect on the [JavaScript thread](/docs/fundamentals/glossary#javascript-thread). + +## Capturing closure + Worklets are [closures](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures). They can access variables declared outside of their own scope. Only variables referenced in the worklet body will be captured inside the worklet scope. ```javascript @@ -94,6 +133,8 @@ function myWorklet() { } ``` +## Passing data to worklets + Worklets can return data within the same thread. ```javascript @@ -128,32 +169,13 @@ function App() { } ``` -You can run functions on the JS thread from the UI thread with [`runOnJS`](/docs/threading/runOnJS). Most frequently used to call functions that aren't marked with a `'worklet';` directive (i.e. most third-party libraries) or to update the React state. +## Using worklets on the Web -```javascript -import { router } from 'expo-router'; -import { Gesture } from 'react-native-gesture-handler'; +There's no separate UI thread available on the Web. Because of that, when Reanimated runs in the browser, worklets are resolved to plain JavaScript functions. -function App() { - const tap = Gesture.Tap().onEnd(() => { - // i'm a worklet too! - // highlight-next-line - runOnJS(router.back)(); - }); -} -``` +However, the `'worklet';` directive is still necessary on the Web, because Reanimated relies on the Babel plugin to capture dependencies inside worklet functions. -Functions passed to `runOnJS` must be defined in the [JavaScript thread](/docs/fundamentals/glossary#javascript-thread) scope, i.e. in the component body or the global scope. This code won't work because `myFunction` is defined in the `withTiming` callback, which is only executed in the [UI thread](/docs/fundamentals/glossary#ui-thread): - -```javascript -function App() { - const tap = Gesture.Tap().onEnd(() => { - // myFunction is defined on the UI thread 🚨 - const myFunction = () => {}; - runOnJS(myFunction)(); // 💥 - }); -} -``` +## Other worklet runtimes Worklets can run in other runtimes than the one provided by Reanimated. For example [VisionCamera](https://github.com/mrousavy/react-native-vision-camera) and [LiveMarkdown](https://github.com/Expensify/react-native-live-markdown) create their own worklet runtimes. diff --git a/packages/docs-reanimated/docs/threading/runOnUI.mdx b/packages/docs-reanimated/docs/threading/runOnUI.mdx index 63e73debc39..96a4452d18b 100644 --- a/packages/docs-reanimated/docs/threading/runOnUI.mdx +++ b/packages/docs-reanimated/docs/threading/runOnUI.mdx @@ -71,6 +71,8 @@ import RunOnUISrc from '!!raw-loader!@site/src/examples/RunOnUI'; - Make sure not to execute `runOnUI` on the UI thread as this will result in an error. +- In browsers there's no separate UI thread available. Because of that, on the Web, `runOnUI` behaves similarly to `requestAnimationFrame`. It creates a function that, when called, will be scheduled to run with given arguments on next animation frame. + ## Platform compatibility diff --git a/packages/docs-reanimated/versioned_docs/version-2.x/api/hooks/useEvent.md b/packages/docs-reanimated/versioned_docs/version-2.x/api/hooks/useEvent.md index 15325f7fd43..8abbbd924ac 100644 --- a/packages/docs-reanimated/versioned_docs/version-2.x/api/hooks/useEvent.md +++ b/packages/docs-reanimated/versioned_docs/version-2.x/api/hooks/useEvent.md @@ -4,13 +4,13 @@ title: useEvent sidebar_label: useEvent --- -This is low-level hook returning event handler that will be invoked with native events, which should be used in order to create custom event handler hook like `useAnimatedGestureHandler` or `useAnimatedScrollHandler`. +This is a low-level hook returning an event handler that will be invoked with native events, which should be used in order to create custom event handler hooks, like `useAnimatedGestureHandler` or `useAnimatedScrollHandler`. ### Arguments #### `handler` [function] -Handler will receive event object with native payload, that can be passed to custom handler hook's worklets. +Handler that will receive an event object with a native payload, which can be passed to the custom handler hook's worklets. - `event` [object] - event object. The payload can differ depending on the type of the event. @@ -21,11 +21,11 @@ Array of event names that will be handled by handler. #### `rebuilt` [boolean] -Value indicating whether handler should be rebuilt. +Value indicating whether the handler should be rebuilt. ### Returns -The hook returns event handler that will be invoked when native event is dispatched. +The hook returns an event handler that will be invoked when a native event is dispatched. ## Example diff --git a/packages/react-native-reanimated/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy.cpp b/packages/react-native-reanimated/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy.cpp index 0aeda945bb4..f55b383bdc8 100644 --- a/packages/react-native-reanimated/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy.cpp +++ b/packages/react-native-reanimated/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy.cpp @@ -1,7 +1,7 @@ #ifdef RCT_NEW_ARCH_ENABLED #include -#include +#include #include #include diff --git a/packages/react-native-reanimated/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy.h b/packages/react-native-reanimated/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy.h index 8fd9a89d7fa..a37f43a414a 100644 --- a/packages/react-native-reanimated/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy.h +++ b/packages/react-native-reanimated/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy.h @@ -19,7 +19,7 @@ namespace reanimated { -class NativeReanimatedModule; +class ReanimatedModuleProxy; using namespace facebook; diff --git a/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModule.cpp b/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxy.cpp similarity index 88% rename from packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModule.cpp rename to packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxy.cpp index 404ca6b6493..cc689308bd7 100644 --- a/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModule.cpp +++ b/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxy.cpp @@ -1,5 +1,4 @@ -#include -#include +#include #include #include #include @@ -51,28 +50,22 @@ using namespace facebook; namespace reanimated { -NativeReanimatedModule::NativeReanimatedModule( - const std::shared_ptr &nativeWorkletsModule, +ReanimatedModuleProxy::ReanimatedModuleProxy( + const std::shared_ptr &workletsModuleProxy, jsi::Runtime &rnRuntime, - const std::shared_ptr &jsScheduler, - const std::shared_ptr &jsQueue, - const std::shared_ptr &uiScheduler, + const std::shared_ptr &jsCallInvoker, const PlatformDepMethodsHolder &platformDepMethodsHolder, const bool isBridgeless, const bool isReducedMotion) - : NativeReanimatedModuleSpec( - isBridgeless ? nullptr : jsScheduler->getJSCallInvoker()), + : ReanimatedModuleProxySpec(jsCallInvoker), isBridgeless_(isBridgeless), isReducedMotion_(isReducedMotion), - jsQueue_(jsQueue), - nativeWorkletsModule_(nativeWorkletsModule), - jsScheduler_(jsScheduler), - uiScheduler_(uiScheduler), - valueUnpackerCode_(nativeWorkletsModule->getValueUnpackerCode()), + workletsModuleProxy_(workletsModuleProxy), + valueUnpackerCode_(workletsModuleProxy->getValueUnpackerCode()), uiWorkletRuntime_(std::make_shared( rnRuntime, - jsQueue, - jsScheduler_, + workletsModuleProxy->getJSQueue(), + workletsModuleProxy->getJSScheduler(), "Reanimated UI runtime", true /* supportsLocking */, valueUnpackerCode_)), @@ -83,7 +76,8 @@ NativeReanimatedModule::NativeReanimatedModule( onRender(timestampMs); }), animatedSensorModule_(platformDepMethodsHolder), - jsLogger_(std::make_shared(jsScheduler_)), + jsLogger_( + std::make_shared(workletsModuleProxy->getJSScheduler())), layoutAnimationsManager_( std::make_shared(jsLogger_)), #ifdef RCT_NEW_ARCH_ENABLED @@ -103,7 +97,7 @@ NativeReanimatedModule::NativeReanimatedModule( commonInit(platformDepMethodsHolder); } -void NativeReanimatedModule::commonInit( +void ReanimatedModuleProxy::commonInit( const PlatformDepMethodsHolder &platformDepMethodsHolder) { auto requestAnimationFrame = [this](jsi::Runtime &rt, const jsi::Value &callback) { @@ -195,20 +189,23 @@ void NativeReanimatedModule::commonInit( platformDepMethodsHolder.maybeFlushUIUpdatesQueueFunction); } -NativeReanimatedModule::~NativeReanimatedModule() { +ReanimatedModuleProxy::~ReanimatedModuleProxy() { // event handler registry and frame callbacks store some JSI values from UI // runtime, so they have to go away before we tear down the runtime eventHandlerRegistry_.reset(); frameCallbacks_.clear(); +#ifdef RCT_NEW_ARCH_ENABLED + operationsInBatch_.clear(); +#endif // RCT_NEW_ARCH_ENABLED uiWorkletRuntime_.reset(); } -void NativeReanimatedModule::scheduleOnUI( +void ReanimatedModuleProxy::scheduleOnUI( jsi::Runtime &rt, const jsi::Value &worklet) { auto shareableWorklet = extractShareableOrThrow( rt, worklet, "[Reanimated] Only worklets can be scheduled to run on UI."); - uiScheduler_->scheduleOnUI(COPY_CAPTURE_WITH_THIS { + workletsModuleProxy_->getUIScheduler()->scheduleOnUI(COPY_CAPTURE_WITH_THIS { #if JS_RUNTIME_HERMES // JSI's scope defined here allows for JSI-objects to be cleared up // after each runtime loop. Within these loops we typically create some @@ -221,31 +218,30 @@ void NativeReanimatedModule::scheduleOnUI( }); } -jsi::Value NativeReanimatedModule::executeOnUIRuntimeSync( +jsi::Value ReanimatedModuleProxy::executeOnUIRuntimeSync( jsi::Runtime &rt, const jsi::Value &worklet) { return uiWorkletRuntime_->executeSync(rt, worklet); } -jsi::Value NativeReanimatedModule::createWorkletRuntime( +jsi::Value ReanimatedModuleProxy::createWorkletRuntime( jsi::Runtime &rt, const jsi::Value &name, const jsi::Value &initializer) { auto workletRuntime = std::make_shared( rt, - jsQueue_, - jsScheduler_, + workletsModuleProxy_->getJSQueue(), + workletsModuleProxy_->getJSScheduler(), name.asString(rt).utf8(rt), false /* supportsLocking */, valueUnpackerCode_); auto initializerShareable = extractShareableOrThrow( rt, initializer, "[Reanimated] Initializer must be a worklet."); workletRuntime->runGuarded(initializerShareable); - ReanimatedWorkletRuntimeDecorator::decorate(workletRuntime->getJSIRuntime()); return jsi::Object::createFromHostObject(rt, workletRuntime); } -jsi::Value NativeReanimatedModule::scheduleOnRuntime( +jsi::Value ReanimatedModuleProxy::scheduleOnRuntime( jsi::Runtime &rt, const jsi::Value &workletRuntimeValue, const jsi::Value &shareableWorkletValue) { @@ -253,16 +249,7 @@ jsi::Value NativeReanimatedModule::scheduleOnRuntime( return jsi::Value::undefined(); } -jsi::Value NativeReanimatedModule::makeShareableClone( - jsi::Runtime &rt, - const jsi::Value &value, - const jsi::Value &shouldRetainRemote, - const jsi::Value &nativeStateSource) { - return reanimated::makeShareableClone( - rt, value, shouldRetainRemote, nativeStateSource); -} - -jsi::Value NativeReanimatedModule::registerEventHandler( +jsi::Value ReanimatedModuleProxy::registerEventHandler( jsi::Runtime &rt, const jsi::Value &worklet, const jsi::Value &eventName, @@ -275,7 +262,7 @@ jsi::Value NativeReanimatedModule::registerEventHandler( rt, worklet, "[Reanimated] Event handler must be a worklet."); int emitterReactTagInt = emitterReactTag.asNumber(); - uiScheduler_->scheduleOnUI(COPY_CAPTURE_WITH_THIS { + workletsModuleProxy_->getUIScheduler()->scheduleOnUI(COPY_CAPTURE_WITH_THIS { auto handler = std::make_shared( newRegistrationId, eventNameStr, emitterReactTagInt, handlerShareable); eventHandlerRegistry_->registerEventHandler(std::move(handler)); @@ -284,11 +271,11 @@ jsi::Value NativeReanimatedModule::registerEventHandler( return jsi::Value(static_cast(newRegistrationId)); } -void NativeReanimatedModule::unregisterEventHandler( +void ReanimatedModuleProxy::unregisterEventHandler( jsi::Runtime &, const jsi::Value ®istrationId) { uint64_t id = registrationId.asNumber(); - uiScheduler_->scheduleOnUI( + workletsModuleProxy_->getUIScheduler()->scheduleOnUI( COPY_CAPTURE_WITH_THIS { eventHandlerRegistry_->unregisterEventHandler(id); }); @@ -308,7 +295,7 @@ static inline std::string intColorToHex(const int val) { return hexColor; } -std::string NativeReanimatedModule::obtainPropFromShadowNode( +std::string ReanimatedModuleProxy::obtainPropFromShadowNode( jsi::Runtime &rt, const std::string &propName, const ShadowNode::Shared &shadowNode) { @@ -351,7 +338,7 @@ std::string NativeReanimatedModule::obtainPropFromShadowNode( "` with function `getViewProp` is not supported")); } -jsi::Value NativeReanimatedModule::getViewProp( +jsi::Value ReanimatedModuleProxy::getViewProp( jsi::Runtime &rnRuntime, const jsi::Value &shadowNodeWrapper, const jsi::Value &propName, @@ -360,23 +347,24 @@ jsi::Value NativeReanimatedModule::getViewProp( const auto funPtr = std::make_shared( callback.getObject(rnRuntime).asFunction(rnRuntime)); const auto shadowNode = shadowNodeFromValue(rnRuntime, shadowNodeWrapper); - uiScheduler_->scheduleOnUI([=]() { + workletsModuleProxy_->getUIScheduler()->scheduleOnUI(COPY_CAPTURE_WITH_THIS { jsi::Runtime &uiRuntime = uiWorkletRuntime_->getJSIRuntime(); const auto resultStr = obtainPropFromShadowNode(uiRuntime, propNameStr, shadowNode); - jsScheduler_->scheduleOnJS([=](jsi::Runtime &rnRuntime) { - const auto resultValue = - jsi::String::createFromUtf8(rnRuntime, resultStr); - funPtr->call(rnRuntime, resultValue); - }); + workletsModuleProxy_->getJSScheduler()->scheduleOnJS( + [=](jsi::Runtime &rnRuntime) { + const auto resultValue = + jsi::String::createFromUtf8(rnRuntime, resultStr); + funPtr->call(rnRuntime, resultValue); + }); }); return jsi::Value::undefined(); } #else -jsi::Value NativeReanimatedModule::getViewProp( +jsi::Value ReanimatedModuleProxy::getViewProp( jsi::Runtime &rnRuntime, const jsi::Value &viewTag, const jsi::Value &propName, @@ -387,7 +375,7 @@ jsi::Value NativeReanimatedModule::getViewProp( const int viewTagInt = viewTag.asNumber(); - uiScheduler_->scheduleOnUI( + workletsModuleProxy_->getUIScheduler()->scheduleOnUI( COPY_CAPTURE_WITH_THIS () { @@ -397,8 +385,8 @@ jsi::Value NativeReanimatedModule::getViewProp( const auto resultValue = obtainPropFunction_(uiRuntime, viewTagInt, propNameValue); const auto resultStr = resultValue.asString(uiRuntime).utf8(uiRuntime); - - jsScheduler_->scheduleOnJS([=](jsi::Runtime &rnRuntime) { + const auto jsScheduler = workletsModuleProxy_->getJSScheduler(); + jsScheduler->scheduleOnJS([=](jsi::Runtime &rnRuntime) { const auto resultValue = jsi::String::createFromUtf8(rnRuntime, resultStr); funPtr->call(rnRuntime, resultValue); @@ -409,14 +397,14 @@ jsi::Value NativeReanimatedModule::getViewProp( #endif -jsi::Value NativeReanimatedModule::enableLayoutAnimations( +jsi::Value ReanimatedModuleProxy::enableLayoutAnimations( jsi::Runtime &, const jsi::Value &config) { FeaturesConfig::setLayoutAnimationEnabled(config.getBool()); return jsi::Value::undefined(); } -jsi::Value NativeReanimatedModule::configureProps( +jsi::Value ReanimatedModuleProxy::configureProps( jsi::Runtime &rt, const jsi::Value &uiProps, const jsi::Value &nativeProps) { @@ -439,7 +427,7 @@ jsi::Value NativeReanimatedModule::configureProps( return jsi::Value::undefined(); } -jsi::Value NativeReanimatedModule::configureLayoutAnimationBatch( +jsi::Value ReanimatedModuleProxy::configureLayoutAnimationBatch( jsi::Runtime &rt, const jsi::Value &layoutAnimationsBatch) { auto array = layoutAnimationsBatch.asObject(rt).asArray(rt); @@ -475,7 +463,7 @@ jsi::Value NativeReanimatedModule::configureLayoutAnimationBatch( return jsi::Value::undefined(); } -void NativeReanimatedModule::setShouldAnimateExiting( +void ReanimatedModuleProxy::setShouldAnimateExiting( jsi::Runtime &rt, const jsi::Value &viewTag, const jsi::Value &shouldAnimate) { @@ -483,21 +471,21 @@ void NativeReanimatedModule::setShouldAnimateExiting( viewTag.asNumber(), shouldAnimate.getBool()); } -bool NativeReanimatedModule::isAnyHandlerWaitingForEvent( +bool ReanimatedModuleProxy::isAnyHandlerWaitingForEvent( const std::string &eventName, const int emitterReactTag) { return eventHandlerRegistry_->isAnyHandlerWaitingForEvent( eventName, emitterReactTag); } -void NativeReanimatedModule::requestAnimationFrame( +void ReanimatedModuleProxy::requestAnimationFrame( jsi::Runtime &rt, const jsi::Value &callback) { frameCallbacks_.push_back(std::make_shared(rt, callback)); maybeRequestRender(); } -void NativeReanimatedModule::maybeRequestRender() { +void ReanimatedModuleProxy::maybeRequestRender() { if (!renderRequested_) { renderRequested_ = true; jsi::Runtime &uiRuntime = uiWorkletRuntime_->getJSIRuntime(); @@ -505,7 +493,7 @@ void NativeReanimatedModule::maybeRequestRender() { } } -void NativeReanimatedModule::onRender(double timestampMs) { +void ReanimatedModuleProxy::onRender(double timestampMs) { auto callbacks = std::move(frameCallbacks_); frameCallbacks_.clear(); jsi::Runtime &uiRuntime = uiWorkletRuntime_->getJSIRuntime(); @@ -515,7 +503,7 @@ void NativeReanimatedModule::onRender(double timestampMs) { } } -jsi::Value NativeReanimatedModule::registerSensor( +jsi::Value ReanimatedModuleProxy::registerSensor( jsi::Runtime &rt, const jsi::Value &sensorType, const jsi::Value &interval, @@ -530,18 +518,18 @@ jsi::Value NativeReanimatedModule::registerSensor( sensorDataHandler); } -void NativeReanimatedModule::unregisterSensor( +void ReanimatedModuleProxy::unregisterSensor( jsi::Runtime &, const jsi::Value &sensorId) { animatedSensorModule_.unregisterSensor(sensorId); } -void NativeReanimatedModule::cleanupSensors() { +void ReanimatedModuleProxy::cleanupSensors() { animatedSensorModule_.unregisterAllSensors(); } #ifdef RCT_NEW_ARCH_ENABLED -bool NativeReanimatedModule::isThereAnyLayoutProp( +bool ReanimatedModuleProxy::isThereAnyLayoutProp( jsi::Runtime &rt, const jsi::Object &props) { const jsi::Array propNames = props.getPropertyNames(rt); @@ -557,7 +545,7 @@ bool NativeReanimatedModule::isThereAnyLayoutProp( return false; } -jsi::Value NativeReanimatedModule::filterNonAnimatableProps( +jsi::Value ReanimatedModuleProxy::filterNonAnimatableProps( jsi::Runtime &rt, const jsi::Value &props) { jsi::Object nonAnimatableProps(rt); @@ -581,7 +569,7 @@ jsi::Value NativeReanimatedModule::filterNonAnimatableProps( } #endif // RCT_NEW_ARCH_ENABLED -bool NativeReanimatedModule::handleEvent( +bool ReanimatedModuleProxy::handleEvent( const std::string &eventName, const int emitterReactTag, const jsi::Value &payload, @@ -595,7 +583,7 @@ bool NativeReanimatedModule::handleEvent( } #ifdef RCT_NEW_ARCH_ENABLED -bool NativeReanimatedModule::handleRawEvent( +bool ReanimatedModuleProxy::handleRawEvent( const RawEvent &rawEvent, double currentTime) { const EventTarget *eventTarget = rawEvent.eventTarget.get(); @@ -626,7 +614,7 @@ bool NativeReanimatedModule::handleRawEvent( return res; } -void NativeReanimatedModule::updateProps( +void ReanimatedModuleProxy::updateProps( jsi::Runtime &rt, const jsi::Value &operations) { auto array = operations.asObject(rt).asArray(rt); @@ -641,7 +629,7 @@ void NativeReanimatedModule::updateProps( } } -void NativeReanimatedModule::performOperations() { +void ReanimatedModuleProxy::performOperations() { if (operationsInBatch_.empty() && tagsToRemove_.empty()) { // nothing to do return; @@ -766,7 +754,7 @@ void NativeReanimatedModule::performOperations() { } } -void NativeReanimatedModule::removeFromPropsRegistry( +void ReanimatedModuleProxy::removeFromPropsRegistry( jsi::Runtime &rt, const jsi::Value &viewTags) { auto array = viewTags.asObject(rt).asArray(rt); @@ -775,7 +763,7 @@ void NativeReanimatedModule::removeFromPropsRegistry( } } -void NativeReanimatedModule::dispatchCommand( +void ReanimatedModuleProxy::dispatchCommand( jsi::Runtime &rt, const jsi::Value &shadowNodeValue, const jsi::Value &commandNameValue, @@ -786,7 +774,7 @@ void NativeReanimatedModule::dispatchCommand( uiManager_->dispatchCommand(shadowNode, commandName, args); } -jsi::String NativeReanimatedModule::obtainProp( +jsi::String ReanimatedModuleProxy::obtainProp( jsi::Runtime &rt, const jsi::Value &shadowNodeWrapper, const jsi::Value &propName) { @@ -798,7 +786,7 @@ jsi::String NativeReanimatedModule::obtainProp( return jsi::String::createFromUtf8(rt, resultStr); } -jsi::Value NativeReanimatedModule::measure( +jsi::Value ReanimatedModuleProxy::measure( jsi::Runtime &rt, const jsi::Value &shadowNodeValue) { // based on implementation from UIManagerBinding.cpp @@ -842,7 +830,7 @@ jsi::Value NativeReanimatedModule::measure( return result; } -void NativeReanimatedModule::initializeFabric( +void ReanimatedModuleProxy::initializeFabric( const std::shared_ptr &uiManager) { uiManager_ = uiManager; @@ -854,7 +842,7 @@ void NativeReanimatedModule::initializeFabric( propsRegistry_, uiManager_, layoutAnimationsProxy_); } -void NativeReanimatedModule::initializeLayoutAnimationsProxy() { +void ReanimatedModuleProxy::initializeLayoutAnimationsProxy() { uiManager_->setAnimationDelegate(nullptr); auto scheduler = reinterpret_cast(uiManager_->getDelegate()); auto componentDescriptorRegistry = @@ -869,13 +857,13 @@ void NativeReanimatedModule::initializeLayoutAnimationsProxy() { componentDescriptorRegistry, scheduler->getContextContainer(), uiWorkletRuntime_->getJSIRuntime(), - uiScheduler_); + workletsModuleProxy_->getUIScheduler()); } } #endif // RCT_NEW_ARCH_ENABLED -jsi::Value NativeReanimatedModule::subscribeForKeyboardEvents( +jsi::Value ReanimatedModuleProxy::subscribeForKeyboardEvents( jsi::Runtime &rt, const jsi::Value &handlerWorklet, const jsi::Value &isStatusBarTranslucent, @@ -895,7 +883,7 @@ jsi::Value NativeReanimatedModule::subscribeForKeyboardEvents( isNavigationBarTranslucent.getBool()); } -void NativeReanimatedModule::unsubscribeFromKeyboardEvents( +void ReanimatedModuleProxy::unsubscribeFromKeyboardEvents( jsi::Runtime &, const jsi::Value &listenerId) { unsubscribeFromKeyboardEventsFunction_(listenerId.asNumber()); diff --git a/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModule.h b/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxy.h similarity index 85% rename from packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModule.h rename to packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxy.h index 41af8f2e0d9..6e71a2e5654 100644 --- a/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModule.h +++ b/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxy.h @@ -2,9 +2,8 @@ #include #include -#include +#include #include -#include #ifdef RCT_NEW_ARCH_ENABLED #include @@ -13,9 +12,10 @@ #include #endif // RCT_NEW_ARCH_ENABLED -#include +#include #include #include +#include #include #ifdef RCT_NEW_ARCH_ENABLED @@ -30,25 +30,17 @@ namespace reanimated { -class NativeReanimatedModule : public NativeReanimatedModuleSpec { +class ReanimatedModuleProxy : public ReanimatedModuleProxySpec { public: - NativeReanimatedModule( - const std::shared_ptr &nativeWorkletsModule, + ReanimatedModuleProxy( + const std::shared_ptr &workletsModuleProxy, jsi::Runtime &rnRuntime, - const std::shared_ptr &jsScheduler, - const std::shared_ptr &jsQueue, - const std::shared_ptr &uiScheduler, + const std::shared_ptr &jsCallInvoker, const PlatformDepMethodsHolder &platformDepMethodsHolder, const bool isBridgeless, const bool isReducedMotion); - ~NativeReanimatedModule(); - - jsi::Value makeShareableClone( - jsi::Runtime &rt, - const jsi::Value &value, - const jsi::Value &shouldRetainRemote, - const jsi::Value &nativeStateSource) override; + ~ReanimatedModuleProxy(); void scheduleOnUI(jsi::Runtime &rt, const jsi::Value &worklet) override; jsi::Value executeOnUIRuntimeSync(jsi::Runtime &rt, const jsi::Value &worklet) @@ -181,9 +173,9 @@ class NativeReanimatedModule : public NativeReanimatedModuleSpec { return isReducedMotion_; } - [[nodiscard]] inline std::shared_ptr - getNativeWorkletsModule() const { - return nativeWorkletsModule_; + [[nodiscard]] inline std::shared_ptr + getWorkletsModuleProxy() const { + return workletsModuleProxy_; } private: @@ -200,10 +192,7 @@ class NativeReanimatedModule : public NativeReanimatedModuleSpec { const bool isBridgeless_; const bool isReducedMotion_; - const std::shared_ptr jsQueue_; - const std::shared_ptr nativeWorkletsModule_; - const std::shared_ptr jsScheduler_; - const std::shared_ptr uiScheduler_; + const std::shared_ptr workletsModuleProxy_; const std::string valueUnpackerCode_; std::shared_ptr uiWorkletRuntime_; @@ -243,8 +232,8 @@ class NativeReanimatedModule : public NativeReanimatedModuleSpec { const KeyboardEventUnsubscribeFunction unsubscribeFromKeyboardEventsFunction_; #ifndef NDEBUG - SingleInstanceChecker singleInstanceChecker_; -#endif + worklets::SingleInstanceChecker singleInstanceChecker_; +#endif // NDEBUG }; } // namespace reanimated diff --git a/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModuleSpec.cpp b/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxySpec.cpp similarity index 51% rename from packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModuleSpec.cpp rename to packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxySpec.cpp index 1a48dc46ad0..d797483bcf1 100644 --- a/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModuleSpec.cpp +++ b/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxySpec.cpp @@ -1,109 +1,98 @@ -#include +#include #include -#define SPEC_PREFIX(FN_NAME) __hostFunction_NativeReanimatedModuleSpec_##FN_NAME +#define REANIMATED_SPEC_PREFIX(FN_NAME) \ + __hostFunction_ReanimatedModuleProxySpec_##FN_NAME namespace reanimated { -// SharedValue - -static jsi::Value SPEC_PREFIX(makeShareableClone)( - jsi::Runtime &rt, - TurboModule &turboModule, - const jsi::Value *args, - size_t) { - return static_cast(&turboModule) - ->makeShareableClone( - rt, std::move(args[0]), std::move(args[1]), std::move(args[2])); -} - // scheduler -static jsi::Value SPEC_PREFIX(scheduleOnUI)( +static jsi::Value REANIMATED_SPEC_PREFIX(scheduleOnUI)( jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value *args, size_t) { - static_cast(&turboModule) + static_cast(&turboModule) ->scheduleOnUI(rt, std::move(args[0])); return jsi::Value::undefined(); } -static jsi::Value SPEC_PREFIX(executeOnUIRuntimeSync)( +static jsi::Value REANIMATED_SPEC_PREFIX(executeOnUIRuntimeSync)( jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value *args, size_t) { - return static_cast(&turboModule) + return static_cast(&turboModule) ->executeOnUIRuntimeSync(rt, std::move(args[0])); } -static jsi::Value SPEC_PREFIX(createWorkletRuntime)( +static jsi::Value REANIMATED_SPEC_PREFIX(createWorkletRuntime)( jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value *args, size_t) { - return static_cast(&turboModule) + return static_cast(&turboModule) ->createWorkletRuntime(rt, std::move(args[0]), std::move(args[1])); } -static jsi::Value SPEC_PREFIX(scheduleOnRuntime)( +static jsi::Value REANIMATED_SPEC_PREFIX(scheduleOnRuntime)( jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value *args, size_t) { - return static_cast(&turboModule) + return static_cast(&turboModule) ->scheduleOnRuntime(rt, std::move(args[0]), std::move(args[1])); } -static jsi::Value SPEC_PREFIX(registerEventHandler)( +static jsi::Value REANIMATED_SPEC_PREFIX(registerEventHandler)( jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value *args, size_t) { - return static_cast(&turboModule) + return static_cast(&turboModule) ->registerEventHandler( rt, std::move(args[0]), std::move(args[1]), std::move(args[2])); } -static jsi::Value SPEC_PREFIX(unregisterEventHandler)( +static jsi::Value REANIMATED_SPEC_PREFIX(unregisterEventHandler)( jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value *args, size_t) { - static_cast(&turboModule) + static_cast(&turboModule) ->unregisterEventHandler(rt, std::move(args[0])); return jsi::Value::undefined(); } -static jsi::Value SPEC_PREFIX(getViewProp)( +static jsi::Value REANIMATED_SPEC_PREFIX(getViewProp)( jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value *args, size_t) { - static_cast(&turboModule) + static_cast(&turboModule) ->getViewProp( rt, std::move(args[0]), std::move(args[1]), std::move(args[2])); return jsi::Value::undefined(); } -static jsi::Value SPEC_PREFIX(enableLayoutAnimations)( +static jsi::Value REANIMATED_SPEC_PREFIX(enableLayoutAnimations)( jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value *args, size_t) { - static_cast(&turboModule) + static_cast(&turboModule) ->enableLayoutAnimations(rt, std::move(args[0])); return jsi::Value::undefined(); } -static jsi::Value SPEC_PREFIX(registerSensor)( +static jsi::Value REANIMATED_SPEC_PREFIX(registerSensor)( jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value *args, size_t) { - return static_cast(&turboModule) + return static_cast(&turboModule) ->registerSensor( rt, std::move(args[0]), @@ -112,99 +101,100 @@ static jsi::Value SPEC_PREFIX(registerSensor)( std::move(args[3])); } -static jsi::Value SPEC_PREFIX(unregisterSensor)( +static jsi::Value REANIMATED_SPEC_PREFIX(unregisterSensor)( jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value *args, size_t) { - static_cast(&turboModule) + static_cast(&turboModule) ->unregisterSensor(rt, std::move(args[0])); return jsi::Value::undefined(); } -static jsi::Value SPEC_PREFIX(configureProps)( +static jsi::Value REANIMATED_SPEC_PREFIX(configureProps)( jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value *args, size_t) { - static_cast(&turboModule) + static_cast(&turboModule) ->configureProps(rt, std::move(args[0]), std::move(args[1])); return jsi::Value::undefined(); } -static jsi::Value SPEC_PREFIX(subscribeForKeyboardEvents)( +static jsi::Value REANIMATED_SPEC_PREFIX(subscribeForKeyboardEvents)( jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value *args, size_t) { - return static_cast(&turboModule) + return static_cast(&turboModule) ->subscribeForKeyboardEvents( rt, std::move(args[0]), std::move(args[1]), std::move(args[2])); } -static jsi::Value SPEC_PREFIX(unsubscribeFromKeyboardEvents)( +static jsi::Value REANIMATED_SPEC_PREFIX(unsubscribeFromKeyboardEvents)( jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value *args, size_t) { - static_cast(&turboModule) + static_cast(&turboModule) ->unsubscribeFromKeyboardEvents(rt, std::move(args[0])); return jsi::Value::undefined(); } -static jsi::Value SPEC_PREFIX(configureLayoutAnimationBatch)( +static jsi::Value REANIMATED_SPEC_PREFIX(configureLayoutAnimationBatch)( jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value *args, size_t) { - return static_cast(&turboModule) + return static_cast(&turboModule) ->configureLayoutAnimationBatch(rt, std::move(args[0])); } -static jsi::Value SPEC_PREFIX(setShouldAnimateExiting)( +static jsi::Value REANIMATED_SPEC_PREFIX(setShouldAnimateExiting)( jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value *args, size_t) { - static_cast(&turboModule) + static_cast(&turboModule) ->setShouldAnimateExiting(rt, std::move(args[0]), std::move(args[1])); return jsi::Value::undefined(); } -NativeReanimatedModuleSpec::NativeReanimatedModuleSpec( +ReanimatedModuleProxySpec::ReanimatedModuleProxySpec( const std::shared_ptr &jsInvoker) : TurboModule("NativeReanimated", jsInvoker) { - methodMap_["makeShareableClone"] = - MethodMetadata{2, SPEC_PREFIX(makeShareableClone)}; - - methodMap_["scheduleOnUI"] = MethodMetadata{1, SPEC_PREFIX(scheduleOnUI)}; + methodMap_["scheduleOnUI"] = + MethodMetadata{1, REANIMATED_SPEC_PREFIX(scheduleOnUI)}; methodMap_["executeOnUIRuntimeSync"] = - MethodMetadata{1, SPEC_PREFIX(executeOnUIRuntimeSync)}; + MethodMetadata{1, REANIMATED_SPEC_PREFIX(executeOnUIRuntimeSync)}; methodMap_["createWorkletRuntime"] = - MethodMetadata{2, SPEC_PREFIX(createWorkletRuntime)}; + MethodMetadata{2, REANIMATED_SPEC_PREFIX(createWorkletRuntime)}; methodMap_["scheduleOnRuntime"] = - MethodMetadata{2, SPEC_PREFIX(scheduleOnRuntime)}; + MethodMetadata{2, REANIMATED_SPEC_PREFIX(scheduleOnRuntime)}; methodMap_["registerEventHandler"] = - MethodMetadata{3, SPEC_PREFIX(registerEventHandler)}; + MethodMetadata{3, REANIMATED_SPEC_PREFIX(registerEventHandler)}; methodMap_["unregisterEventHandler"] = - MethodMetadata{1, SPEC_PREFIX(unregisterEventHandler)}; + MethodMetadata{1, REANIMATED_SPEC_PREFIX(unregisterEventHandler)}; - methodMap_["getViewProp"] = MethodMetadata{3, SPEC_PREFIX(getViewProp)}; + methodMap_["getViewProp"] = + MethodMetadata{3, REANIMATED_SPEC_PREFIX(getViewProp)}; methodMap_["enableLayoutAnimations"] = - MethodMetadata{2, SPEC_PREFIX(enableLayoutAnimations)}; - methodMap_["registerSensor"] = MethodMetadata{4, SPEC_PREFIX(registerSensor)}; + MethodMetadata{2, REANIMATED_SPEC_PREFIX(enableLayoutAnimations)}; + methodMap_["registerSensor"] = + MethodMetadata{4, REANIMATED_SPEC_PREFIX(registerSensor)}; methodMap_["unregisterSensor"] = - MethodMetadata{1, SPEC_PREFIX(unregisterSensor)}; - methodMap_["configureProps"] = MethodMetadata{2, SPEC_PREFIX(configureProps)}; + MethodMetadata{1, REANIMATED_SPEC_PREFIX(unregisterSensor)}; + methodMap_["configureProps"] = + MethodMetadata{2, REANIMATED_SPEC_PREFIX(configureProps)}; methodMap_["subscribeForKeyboardEvents"] = - MethodMetadata{2, SPEC_PREFIX(subscribeForKeyboardEvents)}; + MethodMetadata{2, REANIMATED_SPEC_PREFIX(subscribeForKeyboardEvents)}; methodMap_["unsubscribeFromKeyboardEvents"] = - MethodMetadata{1, SPEC_PREFIX(unsubscribeFromKeyboardEvents)}; + MethodMetadata{1, REANIMATED_SPEC_PREFIX(unsubscribeFromKeyboardEvents)}; methodMap_["configureLayoutAnimationBatch"] = - MethodMetadata{1, SPEC_PREFIX(configureLayoutAnimationBatch)}; + MethodMetadata{1, REANIMATED_SPEC_PREFIX(configureLayoutAnimationBatch)}; methodMap_["setShouldAnimateExitingForTag"] = - MethodMetadata{2, SPEC_PREFIX(setShouldAnimateExiting)}; + MethodMetadata{2, REANIMATED_SPEC_PREFIX(setShouldAnimateExiting)}; } } // namespace reanimated diff --git a/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModuleSpec.h b/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxySpec.h similarity index 89% rename from packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModuleSpec.h rename to packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxySpec.h index 89a6c20e91a..3f82813abff 100644 --- a/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModuleSpec.h +++ b/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxySpec.h @@ -12,19 +12,12 @@ using namespace react; namespace reanimated { -class JSI_EXPORT NativeReanimatedModuleSpec : public TurboModule { +class JSI_EXPORT ReanimatedModuleProxySpec : public TurboModule { protected: - explicit NativeReanimatedModuleSpec( + explicit ReanimatedModuleProxySpec( const std::shared_ptr &jsInvoker); public: - // SharedValue - virtual jsi::Value makeShareableClone( - jsi::Runtime &rt, - const jsi::Value &value, - const jsi::Value &shouldRetainRemote, - const jsi::Value &nativeStateSource) = 0; - // Scheduling virtual void scheduleOnUI(jsi::Runtime &rt, const jsi::Value &worklet) = 0; virtual jsi::Value executeOnUIRuntimeSync( diff --git a/packages/react-native-reanimated/Common/cpp/reanimated/RuntimeDecorators/RNRuntimeDecorator.cpp b/packages/react-native-reanimated/Common/cpp/reanimated/RuntimeDecorators/RNRuntimeDecorator.cpp index 660145a40f7..8c3473b961d 100644 --- a/packages/react-native-reanimated/Common/cpp/reanimated/RuntimeDecorators/RNRuntimeDecorator.cpp +++ b/packages/react-native-reanimated/Common/cpp/reanimated/RuntimeDecorators/RNRuntimeDecorator.cpp @@ -5,10 +5,8 @@ namespace reanimated { void RNRuntimeDecorator::decorate( jsi::Runtime &rnRuntime, - const std::shared_ptr &nativeReanimatedModule) { - rnRuntime.global().setProperty(rnRuntime, "_WORKLET", false); - - jsi::Runtime &uiRuntime = nativeReanimatedModule->getUIRuntime(); + const std::shared_ptr &reanimatedModuleProxy) { + jsi::Runtime &uiRuntime = reanimatedModuleProxy->getUIRuntime(); auto workletRuntimeValue = rnRuntime.global() .getPropertyAsObject(rnRuntime, "ArrayBuffer") @@ -29,22 +27,22 @@ void RNRuntimeDecorator::decorate( rnRuntime.global().setProperty(rnRuntime, "_IS_FABRIC", isFabric); rnRuntime.global().setProperty( - rnRuntime, "_IS_BRIDGELESS", nativeReanimatedModule->isBridgeless()); + rnRuntime, "_IS_BRIDGELESS", reanimatedModuleProxy->isBridgeless()); #ifndef NDEBUG - checkJSVersion(rnRuntime, nativeReanimatedModule->getJSLogger()); + checkJSVersion(rnRuntime, reanimatedModuleProxy->getJSLogger()); #endif // NDEBUG injectReanimatedCppVersion(rnRuntime); rnRuntime.global().setProperty( rnRuntime, "_REANIMATED_IS_REDUCED_MOTION", - nativeReanimatedModule->isReducedMotion()); + reanimatedModuleProxy->isReducedMotion()); rnRuntime.global().setProperty( rnRuntime, "__reanimatedModuleProxy", - jsi::Object::createFromHostObject(rnRuntime, nativeReanimatedModule)); + jsi::Object::createFromHostObject(rnRuntime, reanimatedModuleProxy)); } } // namespace reanimated diff --git a/packages/react-native-reanimated/Common/cpp/reanimated/RuntimeDecorators/RNRuntimeDecorator.h b/packages/react-native-reanimated/Common/cpp/reanimated/RuntimeDecorators/RNRuntimeDecorator.h index ff18f2c2dc6..ac568a678b2 100644 --- a/packages/react-native-reanimated/Common/cpp/reanimated/RuntimeDecorators/RNRuntimeDecorator.h +++ b/packages/react-native-reanimated/Common/cpp/reanimated/RuntimeDecorators/RNRuntimeDecorator.h @@ -1,6 +1,6 @@ #pragma once -#include +#include #include @@ -14,7 +14,7 @@ class RNRuntimeDecorator { public: static void decorate( jsi::Runtime &rnRuntime, - const std::shared_ptr &nativeReanimatedModule); + const std::shared_ptr &reanimatedModuleProxy); }; } // namespace reanimated diff --git a/packages/react-native-reanimated/Common/cpp/reanimated/RuntimeDecorators/ReanimatedWorkletRuntimeDecorator.cpp b/packages/react-native-reanimated/Common/cpp/reanimated/RuntimeDecorators/ReanimatedWorkletRuntimeDecorator.cpp deleted file mode 100644 index acd03e73677..00000000000 --- a/packages/react-native-reanimated/Common/cpp/reanimated/RuntimeDecorators/ReanimatedWorkletRuntimeDecorator.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#include -#include - -#include -#include -#include - -namespace reanimated { - -using namespace worklets; - -void ReanimatedWorkletRuntimeDecorator::decorate(jsi::Runtime &rt) { - jsi_utils::installJsiFunction( - rt, "_log", [](jsi::Runtime &rt, const jsi::Value &value) { - PlatformLogger::log(stringifyJSIValue(rt, value)); - }); -} - -} // namespace reanimated diff --git a/packages/react-native-reanimated/Common/cpp/reanimated/RuntimeDecorators/ReanimatedWorkletRuntimeDecorator.h b/packages/react-native-reanimated/Common/cpp/reanimated/RuntimeDecorators/ReanimatedWorkletRuntimeDecorator.h deleted file mode 100644 index da7f2a923cd..00000000000 --- a/packages/react-native-reanimated/Common/cpp/reanimated/RuntimeDecorators/ReanimatedWorkletRuntimeDecorator.h +++ /dev/null @@ -1,14 +0,0 @@ -#pragma once - -#include - -using namespace facebook; - -namespace reanimated { - -class ReanimatedWorkletRuntimeDecorator { - public: - static void decorate(jsi::Runtime &rt); -}; - -} // namespace reanimated diff --git a/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/NativeWorkletsModule.cpp b/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/NativeWorkletsModule.cpp deleted file mode 100644 index 1a776bf8812..00000000000 --- a/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/NativeWorkletsModule.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#include - -#ifdef RCT_NEW_ARCH_ENABLED -#include -#include -#endif // RCT_NEW_ARCH_ENABLED - -#include - -#ifdef __ANDROID__ -#include -#endif // __ANDROID__ - -#include - -using namespace facebook; - -namespace worklets { - -NativeWorkletsModule::NativeWorkletsModule(const std::string &valueUnpackerCode) - : NativeWorkletsModuleSpec(nullptr), - valueUnpackerCode_(valueUnpackerCode) {} - -NativeWorkletsModule::~NativeWorkletsModule() {} -} // namespace worklets diff --git a/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/NativeWorkletsModule.h b/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/NativeWorkletsModule.h deleted file mode 100644 index 15e8d7a271a..00000000000 --- a/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/NativeWorkletsModule.h +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once - -#include -#include -#include - -namespace worklets { - -class NativeWorkletsModule : public NativeWorkletsModuleSpec { - public: - explicit NativeWorkletsModule(const std::string &valueUnpackerCode); - - ~NativeWorkletsModule(); - - [[nodiscard]] inline std::string getValueUnpackerCode() const { - return valueUnpackerCode_; - } - - private: - const std::string valueUnpackerCode_; -}; - -} // namespace worklets diff --git a/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/NativeWorkletsModuleSpec.cpp b/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/NativeWorkletsModuleSpec.cpp deleted file mode 100644 index d8828c7fc31..00000000000 --- a/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/NativeWorkletsModuleSpec.cpp +++ /dev/null @@ -1,9 +0,0 @@ -#include - -namespace worklets { - -NativeWorkletsModuleSpec::NativeWorkletsModuleSpec( - const std::shared_ptr jsInvoker) - : TurboModule("NativeWorklets", jsInvoker) {} - -} // namespace worklets diff --git a/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/NativeWorkletsModuleSpec.h b/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/NativeWorkletsModuleSpec.h deleted file mode 100644 index 5b813ceaf0e..00000000000 --- a/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/NativeWorkletsModuleSpec.h +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once - -#include -#include -#include - -using namespace facebook; -using namespace react; - -namespace worklets { - -class JSI_EXPORT NativeWorkletsModuleSpec : public TurboModule { - protected: - explicit NativeWorkletsModuleSpec( - const std::shared_ptr jsInvoker); -}; - -} // namespace worklets diff --git a/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/WorkletsModuleProxy.cpp b/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/WorkletsModuleProxy.cpp new file mode 100644 index 00000000000..e71837b1199 --- /dev/null +++ b/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/WorkletsModuleProxy.cpp @@ -0,0 +1,46 @@ +#include + +#ifdef RCT_NEW_ARCH_ENABLED +#include +#include +#endif // RCT_NEW_ARCH_ENABLED + +#include +#include + +#ifdef __ANDROID__ +#include +#endif // __ANDROID__ + +#include + +using namespace facebook; + +namespace worklets { + +WorkletsModuleProxy::WorkletsModuleProxy( + const std::string &valueUnpackerCode, + const std::shared_ptr &jsQueue, + const std::shared_ptr &jsCallInvoker, + const std::shared_ptr &jsScheduler, + const std::shared_ptr &uiScheduler) + : WorkletsModuleProxySpec(jsCallInvoker), + valueUnpackerCode_(valueUnpackerCode), + jsQueue_(jsQueue), + jsScheduler_(jsScheduler), + uiScheduler_(uiScheduler) {} + +WorkletsModuleProxy::~WorkletsModuleProxy() {} + +jsi::Value WorkletsModuleProxy::makeShareableClone( + jsi::Runtime &rt, + const jsi::Value &value, + const jsi::Value &shouldRetainRemote, + const jsi::Value &nativeStateSource) { + // TODO: It might be a good idea to rename one of these methods to avoid + // confusion. + return worklets::makeShareableClone( + rt, value, shouldRetainRemote, nativeStateSource); +} + +} // namespace worklets diff --git a/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/WorkletsModuleProxy.h b/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/WorkletsModuleProxy.h new file mode 100644 index 00000000000..dc7cee4cf27 --- /dev/null +++ b/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/WorkletsModuleProxy.h @@ -0,0 +1,57 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace worklets { + +class WorkletsModuleProxy : public WorkletsModuleProxySpec { + public: + explicit WorkletsModuleProxy( + const std::string &valueUnpackerCode, + const std::shared_ptr &jsQueue, + const std::shared_ptr &jsCallInvoker, + const std::shared_ptr &jsScheduler, + const std::shared_ptr &uiScheduler); + + ~WorkletsModuleProxy(); + + jsi::Value makeShareableClone( + jsi::Runtime &rt, + const jsi::Value &value, + const jsi::Value &shouldRetainRemote, + const jsi::Value &nativeStateSource) override; + + [[nodiscard]] inline std::string getValueUnpackerCode() const { + return valueUnpackerCode_; + } + + [[nodiscard]] inline std::shared_ptr getJSQueue() const { + return jsQueue_; + } + + [[nodiscard]] inline std::shared_ptr getJSScheduler() const { + return jsScheduler_; + } + + [[nodiscard]] inline std::shared_ptr getUIScheduler() const { + return uiScheduler_; + } + + private: + const std::string valueUnpackerCode_; + const std::shared_ptr jsQueue_; + const std::shared_ptr jsScheduler_; + const std::shared_ptr uiScheduler_; +#ifndef NDEBUG + SingleInstanceChecker singleInstanceChecker_; +#endif // NDEBUG +}; + +} // namespace worklets diff --git a/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/WorkletsModuleProxySpec.cpp b/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/WorkletsModuleProxySpec.cpp new file mode 100644 index 00000000000..624c42ee224 --- /dev/null +++ b/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/WorkletsModuleProxySpec.cpp @@ -0,0 +1,27 @@ +#include + +#include + +#define WORKLETS_SPEC_PREFIX(FN_NAME) \ + __hostFunction_WorkletsModuleProxySpec_##FN_NAME + +namespace worklets { + +static jsi::Value WORKLETS_SPEC_PREFIX(makeShareableClone)( + jsi::Runtime &rt, + TurboModule &turboModule, + const jsi::Value *args, + size_t) { + return static_cast(&turboModule) + ->makeShareableClone( + rt, std::move(args[0]), std::move(args[1]), std::move(args[2])); +} + +WorkletsModuleProxySpec::WorkletsModuleProxySpec( + const std::shared_ptr jsInvoker) + : TurboModule("NativeWorklets", jsInvoker) { + methodMap_["makeShareableClone"] = + MethodMetadata{2, WORKLETS_SPEC_PREFIX(makeShareableClone)}; +} + +} // namespace worklets diff --git a/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/WorkletsModuleProxySpec.h b/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/WorkletsModuleProxySpec.h new file mode 100644 index 00000000000..c79a86b908f --- /dev/null +++ b/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/WorkletsModuleProxySpec.h @@ -0,0 +1,25 @@ +#pragma once + +#include +#include +#include + +using namespace facebook; +using namespace react; + +namespace worklets { + +class JSI_EXPORT WorkletsModuleProxySpec : public TurboModule { + protected: + explicit WorkletsModuleProxySpec( + const std::shared_ptr jsInvoker); + + public: + virtual jsi::Value makeShareableClone( + jsi::Runtime &rt, + const jsi::Value &value, + const jsi::Value &shouldRetainRemote, + const jsi::Value &nativeStateSource) = 0; +}; + +} // namespace worklets diff --git a/packages/react-native-reanimated/Common/cpp/worklets/SharedItems/Shareables.cpp b/packages/react-native-reanimated/Common/cpp/worklets/SharedItems/Shareables.cpp index 525cd114ebb..f8c5bfc1366 100644 --- a/packages/react-native-reanimated/Common/cpp/worklets/SharedItems/Shareables.cpp +++ b/packages/react-native-reanimated/Common/cpp/worklets/SharedItems/Shareables.cpp @@ -47,7 +47,12 @@ jsi::Value makeShareableClone( if (value.isObject()) { auto object = value.asObject(rt); if (!object.getProperty(rt, "__workletHash").isUndefined()) { - shareable = std::make_shared(rt, object); + if (shouldRetainRemote.isBool() && shouldRetainRemote.getBool()) { + shareable = + std::make_shared>(rt, object); + } else { + shareable = std::make_shared(rt, object); + } } else if (!object.getProperty(rt, "__init").isUndefined()) { shareable = std::make_shared(rt, object); } else if (object.isFunction(rt)) { @@ -284,7 +289,12 @@ jsi::Value ShareableHandle::toJSValue(jsi::Runtime &rt) { remoteRuntime_ = &rt; } } - return jsi::Value(rt, *remoteValue_); + if (&rt == remoteRuntime_) { + return jsi::Value(rt, *remoteValue_); + } + auto initObj = initializer_->toJSValue(rt); + return getValueUnpacker(rt).call( + rt, initObj, jsi::String::createFromAscii(rt, "Handle")); } jsi::Value ShareableString::toJSValue(jsi::Runtime &rt) { diff --git a/packages/react-native-reanimated/Common/cpp/worklets/Tools/JSScheduler.cpp b/packages/react-native-reanimated/Common/cpp/worklets/Tools/JSScheduler.cpp index 0699e0cebaa..b3f227ed409 100644 --- a/packages/react-native-reanimated/Common/cpp/worklets/Tools/JSScheduler.cpp +++ b/packages/react-native-reanimated/Common/cpp/worklets/Tools/JSScheduler.cpp @@ -17,24 +17,4 @@ JSScheduler::JSScheduler( rnRuntime_(rnRuntime), jsCallInvoker_(jsCallInvoker) {} -#ifdef RCT_NEW_ARCH_ENABLED -// With `runtimeExecutor`. -JSScheduler::JSScheduler( - jsi::Runtime &rnRuntime, - RuntimeExecutor runtimeExecutor) - : scheduleOnJS([&](Job job) { - runtimeExecutor_( - [job = std::move(job)](jsi::Runtime &runtime) { job(runtime); }); - }), - rnRuntime_(rnRuntime), - runtimeExecutor_(runtimeExecutor) {} -#endif // RCT_NEW_ARCH_ENABLED - -const std::shared_ptr JSScheduler::getJSCallInvoker() const { - assert( - jsCallInvoker_ != nullptr && - "[Reanimated] Expected jsCallInvoker, got nullptr instead."); - return jsCallInvoker_; -} - } // namespace worklets diff --git a/packages/react-native-reanimated/Common/cpp/worklets/Tools/JSScheduler.h b/packages/react-native-reanimated/Common/cpp/worklets/Tools/JSScheduler.h index 84eaa512d81..c85ab8a9673 100644 --- a/packages/react-native-reanimated/Common/cpp/worklets/Tools/JSScheduler.h +++ b/packages/react-native-reanimated/Common/cpp/worklets/Tools/JSScheduler.h @@ -15,26 +15,14 @@ class JSScheduler { using Job = std::function; public: - // With `jsCallInvoker`. explicit JSScheduler( jsi::Runtime &rnRuntime, const std::shared_ptr &jsCallInvoker); -#ifdef RCT_NEW_ARCH_ENABLED - // With `runtimeExecutor`. - explicit JSScheduler( - jsi::Runtime &rnRuntime, - RuntimeExecutor runtimeExecutor); -#endif // RCT_NEW_ARCH_ENABLED - const std::function scheduleOnJS = nullptr; - const std::shared_ptr getJSCallInvoker() const; protected: jsi::Runtime &rnRuntime_; -#ifdef RCT_NEW_ARCH_ENABLED - RuntimeExecutor runtimeExecutor_ = nullptr; -#endif // RCT_NEW_ARCH_ENABLED const std::shared_ptr jsCallInvoker_ = nullptr; }; diff --git a/packages/react-native-reanimated/Common/cpp/reanimated/Tools/PlatformLogger.h b/packages/react-native-reanimated/Common/cpp/worklets/Tools/PlatformLogger.h similarity index 83% rename from packages/react-native-reanimated/Common/cpp/reanimated/Tools/PlatformLogger.h rename to packages/react-native-reanimated/Common/cpp/worklets/Tools/PlatformLogger.h index 37db18e3326..de58cb93098 100644 --- a/packages/react-native-reanimated/Common/cpp/reanimated/Tools/PlatformLogger.h +++ b/packages/react-native-reanimated/Common/cpp/worklets/Tools/PlatformLogger.h @@ -2,7 +2,7 @@ #include -namespace reanimated { +namespace worklets { class PlatformLogger { public: @@ -13,4 +13,4 @@ class PlatformLogger { static void log(const bool b); }; -} // namespace reanimated +} // namespace worklets diff --git a/packages/react-native-reanimated/Common/cpp/reanimated/Tools/SingleInstanceChecker.h b/packages/react-native-reanimated/Common/cpp/worklets/Tools/SingleInstanceChecker.h similarity index 95% rename from packages/react-native-reanimated/Common/cpp/reanimated/Tools/SingleInstanceChecker.h rename to packages/react-native-reanimated/Common/cpp/worklets/Tools/SingleInstanceChecker.h index 2a183e87004..3be7ce80fec 100644 --- a/packages/react-native-reanimated/Common/cpp/reanimated/Tools/SingleInstanceChecker.h +++ b/packages/react-native-reanimated/Common/cpp/worklets/Tools/SingleInstanceChecker.h @@ -5,14 +5,15 @@ #include #include +#include #include #include #ifdef ANDROID #include -#endif +#endif // ANDROID -namespace reanimated { +namespace worklets { // This is a class that counts how many instances of a different class there // are. It is meant only to be used with classes that should only have one @@ -66,6 +67,6 @@ SingleInstanceChecker::~SingleInstanceChecker() { instanceCount_--; } -} // namespace reanimated +} // namespace worklets #endif // NDEBUG diff --git a/packages/react-native-reanimated/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.cpp b/packages/react-native-reanimated/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.cpp index 37565314534..440666f169f 100644 --- a/packages/react-native-reanimated/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.cpp +++ b/packages/react-native-reanimated/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.cpp @@ -4,11 +4,13 @@ namespace worklets { void RNRuntimeWorkletDecorator::decorate( jsi::Runtime &rnRuntime, - const std::shared_ptr &nativeWorkletsModule) { + const std::shared_ptr &workletsModuleProxy) { + rnRuntime.global().setProperty(rnRuntime, "_WORKLET", false); + rnRuntime.global().setProperty( rnRuntime, "__workletsModuleProxy", - jsi::Object::createFromHostObject(rnRuntime, nativeWorkletsModule)); + jsi::Object::createFromHostObject(rnRuntime, workletsModuleProxy)); } } // namespace worklets diff --git a/packages/react-native-reanimated/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.h b/packages/react-native-reanimated/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.h index 9884e71091a..41cf12b5598 100644 --- a/packages/react-native-reanimated/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.h +++ b/packages/react-native-reanimated/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.h @@ -1,7 +1,7 @@ #pragma once #include -#include +#include #include using namespace facebook; @@ -13,7 +13,7 @@ class RNRuntimeWorkletDecorator { public: static void decorate( jsi::Runtime &rnRuntime, - const std::shared_ptr &nativeWorkletsModule); + const std::shared_ptr &workletsModuleProxy); }; } // namespace worklets diff --git a/packages/react-native-reanimated/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeDecorator.cpp b/packages/react-native-reanimated/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeDecorator.cpp index 07caee39767..4d677927155 100644 --- a/packages/react-native-reanimated/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeDecorator.cpp +++ b/packages/react-native-reanimated/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeDecorator.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -76,6 +77,11 @@ void WorkletRuntimeDecorator::decorate( evalWithSourceUrl)); #endif // NDEBUG + jsi_utils::installJsiFunction( + rt, "_log", [](jsi::Runtime &rt, const jsi::Value &value) { + PlatformLogger::log(stringifyJSIValue(rt, value)); + }); + jsi_utils::installJsiFunction( rt, "_toString", [](jsi::Runtime &rt, const jsi::Value &value) { return jsi::String::createFromUtf8(rt, stringifyJSIValue(rt, value)); diff --git a/packages/react-native-reanimated/android/CMakeLists.txt b/packages/react-native-reanimated/android/CMakeLists.txt index 2fcb8790d61..feb7987876d 100644 --- a/packages/react-native-reanimated/android/CMakeLists.txt +++ b/packages/react-native-reanimated/android/CMakeLists.txt @@ -2,38 +2,50 @@ project(Reanimated) cmake_minimum_required(VERSION 3.8) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE INTERNAL "") +set(CMAKE_EXPORT_COMPILE_COMMANDS + ON + CACHE INTERNAL "") set(CMAKE_CXX_STANDARD 20) -# default CMAKE_CXX_FLAGS: "-g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -fstack-protector-all" +# default CMAKE_CXX_FLAGS: "-g -DANDROID -fdata-sections -ffunction-sections +# -funwind-tables -fstack-protector-strong -no-canonical-prefixes +# -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -fstack-protector-all" include("${REACT_NATIVE_DIR}/ReactAndroid/cmake-utils/folly-flags.cmake") add_compile_options(${folly_FLAGS}) -string(APPEND CMAKE_CXX_FLAGS " -DREACT_NATIVE_MINOR_VERSION=${REACT_NATIVE_MINOR_VERSION} -DREANIMATED_VERSION=${REANIMATED_VERSION} -DHERMES_ENABLE_DEBUGGER=${HERMES_ENABLE_DEBUGGER}") +string( + APPEND + CMAKE_CXX_FLAGS + " -DREACT_NATIVE_MINOR_VERSION=${REACT_NATIVE_MINOR_VERSION} -DREANIMATED_VERSION=${REANIMATED_VERSION} -DHERMES_ENABLE_DEBUGGER=${HERMES_ENABLE_DEBUGGER}" +) -string(APPEND CMAKE_CXX_FLAGS " -fexceptions -fno-omit-frame-pointer -frtti -fstack-protector-all -std=c++${CMAKE_CXX_STANDARD} -Wall -Werror") +string( + APPEND + CMAKE_CXX_FLAGS + " -fexceptions -fno-omit-frame-pointer -frtti -fstack-protector-all -std=c++${CMAKE_CXX_STANDARD} -Wall -Werror" +) if(${IS_NEW_ARCHITECTURE_ENABLED}) - string(APPEND CMAKE_CXX_FLAGS " -DRCT_NEW_ARCH_ENABLED") + string(APPEND CMAKE_CXX_FLAGS " -DRCT_NEW_ARCH_ENABLED") endif() if(${IS_REANIMATED_EXAMPLE_APP}) - string(APPEND CMAKE_CXX_FLAGS " -DIS_REANIMATED_EXAMPLE_APP -Wpedantic") + string(APPEND CMAKE_CXX_FLAGS " -DIS_REANIMATED_EXAMPLE_APP -Wpedantic") endif() if(NOT ${CMAKE_BUILD_TYPE} MATCHES "Debug") - string(APPEND CMAKE_CXX_FLAGS " -DNDEBUG") + string(APPEND CMAKE_CXX_FLAGS " -DNDEBUG") endif() if(${JS_RUNTIME} STREQUAL "hermes") - string(APPEND CMAKE_CXX_FLAGS " -DJS_RUNTIME_HERMES=1") + string(APPEND CMAKE_CXX_FLAGS " -DJS_RUNTIME_HERMES=1") elseif(${JS_RUNTIME} STREQUAL "jsc") - string(APPEND CMAKE_CXX_FLAGS " -DJS_RUNTIME_JSC=1") + string(APPEND CMAKE_CXX_FLAGS " -DJS_RUNTIME_JSC=1") elseif(${JS_RUNTIME} STREQUAL "v8") - string(APPEND CMAKE_CXX_FLAGS " -DJS_RUNTIME_V8=1") + string(APPEND CMAKE_CXX_FLAGS " -DJS_RUNTIME_V8=1") else() - message(FATAL_ERROR "Unknown JS runtime ${JS_RUNTIME}.") + message(FATAL_ERROR "Unknown JS runtime ${JS_RUNTIME}.") endif() # Resolves "CMake Warning: Manually-specified variables were not used by the diff --git a/packages/react-native-reanimated/android/build.gradle b/packages/react-native-reanimated/android/build.gradle index a35ae1fcdf7..c98d195f462 100644 --- a/packages/react-native-reanimated/android/build.gradle +++ b/packages/react-native-reanimated/android/build.gradle @@ -362,22 +362,6 @@ android { } } - if (IS_NEW_ARCHITECTURE_ENABLED) { - // RuntimeExecutor and CallInvokerHolder - if (REACT_NATIVE_MINOR_VERSION <= 74) { - srcDirs += "src/reactNativeVersionPatch/NativeProxyFabric/74" - } else { - srcDirs += "src/reactNativeVersionPatch/NativeProxyFabric/latest" - } - } else { - // CallInvokerHolder - if (REACT_NATIVE_MINOR_VERSION <= 74) { - srcDirs += "src/reactNativeVersionPatch/NativeProxyPaper/74" - } else { - srcDirs += "src/reactNativeVersionPatch/NativeProxyPaper/latest" - } - } - // BorderRadiiDrawableUtils if (REACT_NATIVE_MINOR_VERSION <= 74) { srcDirs += "src/reactNativeVersionPatch/BorderRadiiDrawableUtils/74" diff --git a/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyFabric/74/com/swmansion/reanimated/NativeProxy.java b/packages/react-native-reanimated/android/src/fabric/java/com/swmansion/reanimated/NativeProxy.java similarity index 65% rename from packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyFabric/74/com/swmansion/reanimated/NativeProxy.java rename to packages/react-native-reanimated/android/src/fabric/java/com/swmansion/reanimated/NativeProxy.java index 1f732ab91f1..1701b938ca4 100644 --- a/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyFabric/74/com/swmansion/reanimated/NativeProxy.java +++ b/packages/react-native-reanimated/android/src/fabric/java/com/swmansion/reanimated/NativeProxy.java @@ -4,8 +4,6 @@ import com.facebook.jni.HybridData; import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.RuntimeExecutor; -import com.facebook.react.bridge.queue.MessageQueueThread; import com.facebook.react.common.annotations.FrameworkAPI; import com.facebook.react.fabric.FabricUIManager; import com.facebook.react.turbomodule.core.CallInvokerHolderImpl; @@ -14,10 +12,14 @@ import com.swmansion.reanimated.layoutReanimation.LayoutAnimations; import com.swmansion.reanimated.layoutReanimation.NativeMethodsHolder; import com.swmansion.reanimated.nativeProxy.NativeProxyCommon; +import com.swmansion.worklets.JSCallInvokerResolver; import com.swmansion.worklets.WorkletsModule; import java.util.HashMap; import java.util.Objects; +/** + * @noinspection JavaJniMissingFunction + */ public class NativeProxy extends NativeProxyCommon { @DoNotStrip @SuppressWarnings("unused") @@ -33,32 +35,16 @@ public class NativeProxy extends NativeProxyCommon { LayoutAnimations LayoutAnimations = new LayoutAnimations(context); - ReanimatedMessageQueueThread messageQueueThread = new ReanimatedMessageQueueThread(); - - if (context.isBridgeless()) { - RuntimeExecutor runtimeExecutor = context.getRuntimeExecutor(); - mHybridData = - initHybridBridgeless( - workletsModule, - Objects.requireNonNull(context.getJavaScriptContextHolder()).get(), - runtimeExecutor, - mAndroidUIScheduler, - LayoutAnimations, - messageQueueThread, - fabricUIManager); - } else { - CallInvokerHolderImpl callInvokerHolder = - (CallInvokerHolderImpl) context.getCatalystInstance().getJSCallInvokerHolder(); - mHybridData = - initHybrid( - workletsModule, - Objects.requireNonNull(context.getJavaScriptContextHolder()).get(), - callInvokerHolder, - mAndroidUIScheduler, - LayoutAnimations, - messageQueueThread, - fabricUIManager); - } + CallInvokerHolderImpl callInvokerHolder = JSCallInvokerResolver.getJSCallInvokerHolder(context); + mHybridData = + initHybrid( + workletsModule, + Objects.requireNonNull(context.getJavaScriptContextHolder()).get(), + callInvokerHolder, + LayoutAnimations, + context.isBridgeless(), + fabricUIManager); + prepareLayoutAnimations(LayoutAnimations); installJSIBindings(); if (BuildConfig.DEBUG) { @@ -66,22 +52,13 @@ public class NativeProxy extends NativeProxyCommon { } } + @OptIn(markerClass = FrameworkAPI.class) private native HybridData initHybrid( WorkletsModule workletsModule, long jsContext, CallInvokerHolderImpl jsCallInvokerHolder, - AndroidUIScheduler androidUIScheduler, - LayoutAnimations LayoutAnimations, - MessageQueueThread messageQueueThread, - FabricUIManager fabricUIManager); - - private native HybridData initHybridBridgeless( - WorkletsModule workletsModule, - long jsContext, - RuntimeExecutor runtimeExecutor, - AndroidUIScheduler androidUIScheduler, LayoutAnimations LayoutAnimations, - MessageQueueThread messageQueueThread, + boolean isBridgeless, FabricUIManager fabricUIManager); public native boolean isAnyHandlerWaitingForEvent(String eventName, int emitterReactTag); @@ -93,7 +70,8 @@ protected HybridData getHybridData() { return mHybridData; } - public static NativeMethodsHolder createNativeMethodsHolder(LayoutAnimations layoutAnimations) { + public static NativeMethodsHolder createNativeMethodsHolder( + LayoutAnimations ignoredLayoutAnimations) { return new NativeMethodsHolder() { @Override public void startAnimation(int tag, int type, HashMap values) { diff --git a/packages/react-native-reanimated/android/src/main/cpp/reanimated/CMakeLists.txt b/packages/react-native-reanimated/android/src/main/cpp/reanimated/CMakeLists.txt index e8267febb7d..72e77d555b8 100644 --- a/packages/react-native-reanimated/android/src/main/cpp/reanimated/CMakeLists.txt +++ b/packages/react-native-reanimated/android/src/main/cpp/reanimated/CMakeLists.txt @@ -1,57 +1,38 @@ cmake_minimum_required(VERSION 3.8) -file(GLOB_RECURSE REANIMATED_COMMON_CPP_SOURCES CONFIGURE_DEPENDS "${COMMON_CPP_DIR}/reanimated/*.cpp") -file(GLOB_RECURSE REANIMATED_ANDROID_CPP_SOURCES CONFIGURE_DEPENDS "${ANDROID_CPP_DIR}/reanimated/*.cpp") +file(GLOB_RECURSE REANIMATED_COMMON_CPP_SOURCES CONFIGURE_DEPENDS + "${COMMON_CPP_DIR}/reanimated/*.cpp") +file(GLOB_RECURSE REANIMATED_ANDROID_CPP_SOURCES CONFIGURE_DEPENDS + "${ANDROID_CPP_DIR}/reanimated/*.cpp") find_package(ReactAndroid REQUIRED CONFIG) -add_library( - reanimated - SHARED - ${REANIMATED_COMMON_CPP_SOURCES} - ${REANIMATED_ANDROID_CPP_SOURCES} -) +add_library(reanimated SHARED ${REANIMATED_COMMON_CPP_SOURCES} + ${REANIMATED_ANDROID_CPP_SOURCES}) target_include_directories( - reanimated - PRIVATE - "${COMMON_CPP_DIR}" - "${ANDROID_CPP_DIR}" - "${REACT_NATIVE_DIR}/ReactCommon" - "${REACT_NATIVE_DIR}/ReactAndroid/src/main/jni/react/turbomodule" - "${REACT_NATIVE_DIR}/ReactCommon/callinvoker" - "${REACT_NATIVE_DIR}/ReactCommon/runtimeexecutor" -) + reanimated + PRIVATE "${COMMON_CPP_DIR}" + "${ANDROID_CPP_DIR}" + "${REACT_NATIVE_DIR}/ReactCommon" + "${REACT_NATIVE_DIR}/ReactAndroid/src/main/jni/react/turbomodule" + "${REACT_NATIVE_DIR}/ReactCommon/callinvoker" + "${REACT_NATIVE_DIR}/ReactCommon/runtimeexecutor") if(${IS_NEW_ARCHITECTURE_ENABLED}) - target_include_directories( - reanimated - PRIVATE - "${REACT_NATIVE_DIR}/ReactCommon/yoga" - "${REACT_NATIVE_DIR}/ReactCommon/react/renderer/graphics/platform/cxx" - ) + target_include_directories( + reanimated + PRIVATE + "${REACT_NATIVE_DIR}/ReactCommon/yoga" + "${REACT_NATIVE_DIR}/ReactCommon/react/renderer/graphics/platform/cxx") endif() -set_target_properties( - reanimated - PROPERTIES - LINKER_LANGUAGE - CXX -) +set_target_properties(reanimated PROPERTIES LINKER_LANGUAGE CXX) -target_link_libraries( - reanimated - worklets -) +target_link_libraries(reanimated worklets) if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76) - target_link_libraries( - reanimated - ReactAndroid::reactnative - ) + target_link_libraries(reanimated ReactAndroid::reactnative) else() - target_link_libraries( - reanimated - ReactAndroid::react_nativemodule_core - ) + target_link_libraries(reanimated ReactAndroid::react_nativemodule_core) endif() diff --git a/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/NativeProxy.cpp b/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/NativeProxy.cpp index 42b1f21ce14..8b9c4753320 100644 --- a/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/NativeProxy.cpp +++ b/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/NativeProxy.cpp @@ -1,7 +1,6 @@ #include #include #include -#include #include #include @@ -9,12 +8,12 @@ #include #include #include +#include #include #include #include #include -#include #include #include @@ -29,12 +28,11 @@ using namespace react; NativeProxy::NativeProxy( jni::alias_ref jThis, - const std::shared_ptr &nativeWorkletsModule, + const std::shared_ptr &workletsModuleProxy, jsi::Runtime *rnRuntime, const std::shared_ptr &jsCallInvoker, - const std::shared_ptr &uiScheduler, jni::global_ref layoutAnimations, - jni::alias_ref messageQueueThread + const bool isBridgeless #ifdef RCT_NEW_ARCH_ENABLED , jni::alias_ref @@ -43,14 +41,12 @@ NativeProxy::NativeProxy( ) : javaPart_(jni::make_global(jThis)), rnRuntime_(rnRuntime), - nativeReanimatedModule_(std::make_shared( - nativeWorkletsModule, + reanimatedModuleProxy_(std::make_shared( + workletsModuleProxy, *rnRuntime, - std::make_shared(*rnRuntime, jsCallInvoker), - std::make_shared(messageQueueThread), - uiScheduler, + jsCallInvoker, getPlatformDependentMethods(), - /* isBridgeless */ false, + isBridgeless, getIsReducedMotion())), layoutAnimations_(std::move(layoutAnimations)) { #ifdef RCT_NEW_ARCH_ENABLED @@ -59,42 +55,17 @@ NativeProxy::NativeProxy( } #ifdef RCT_NEW_ARCH_ENABLED -NativeProxy::NativeProxy( - jni::alias_ref jThis, - const std::shared_ptr &nativeWorkletsModule, - jsi::Runtime *rnRuntime, - RuntimeExecutor runtimeExecutor, - const std::shared_ptr &uiScheduler, - jni::global_ref layoutAnimations, - jni::alias_ref messageQueueThread, - jni::alias_ref - fabricUIManager) - : javaPart_(jni::make_global(jThis)), - rnRuntime_(rnRuntime), - nativeReanimatedModule_(std::make_shared( - nativeWorkletsModule, - *rnRuntime, - std::make_shared(*rnRuntime, runtimeExecutor), - std::make_shared(messageQueueThread), - uiScheduler, - getPlatformDependentMethods(), - /* isBridgeless */ true, - getIsReducedMotion())), - layoutAnimations_(std::move(layoutAnimations)) { - commonInit(fabricUIManager); -} - void NativeProxy::commonInit( jni::alias_ref &fabricUIManager) { const auto &uiManager = fabricUIManager->getBinding()->getScheduler()->getUIManager(); - nativeReanimatedModule_->initializeFabric(uiManager); + reanimatedModuleProxy_->initializeFabric(uiManager); // removed temporarily, event listener mechanism needs to be fixed on RN side // eventListener_ = std::make_shared( - // [nativeReanimatedModule, + // [reanimatedModuleProxy, // getAnimationTimestamp](const RawEvent &rawEvent) { - // return nativeReanimatedModule->handleRawEvent( + // return reanimatedModuleProxy->handleRawEvent( // rawEvent, getAnimationTimestamp()); // }); // reactScheduler_ = binding->getScheduler(); @@ -109,7 +80,7 @@ NativeProxy::~NativeProxy() { // cleanup all animated sensors here, since NativeProxy // has already been destroyed when AnimatedSensorModule's // destructor is ran - nativeReanimatedModule_->cleanupSensors(); + reanimatedModuleProxy_->cleanupSensors(); } jni::local_ref NativeProxy::initHybrid( @@ -118,9 +89,8 @@ jni::local_ref NativeProxy::initHybrid( jlong jsContext, jni::alias_ref jsCallInvokerHolder, - jni::alias_ref androidUiScheduler, jni::alias_ref layoutAnimations, - jni::alias_ref messageQueueThread + bool isBridgeless #ifdef RCT_NEW_ARCH_ENABLED , jni::alias_ref @@ -128,17 +98,14 @@ jni::local_ref NativeProxy::initHybrid( #endif ) { auto jsCallInvoker = jsCallInvokerHolder->cthis()->getCallInvoker(); - auto uiScheduler = androidUiScheduler->cthis()->getUIScheduler(); - auto nativeWorkletsModule = - jWorkletsModule->cthis()->getNativeWorkletsModule(); + auto workletsModuleProxy = jWorkletsModule->cthis()->getWorkletsModuleProxy(); return makeCxxInstance( jThis, - nativeWorkletsModule, + workletsModuleProxy, (jsi::Runtime *)jsContext, jsCallInvoker, - uiScheduler, make_global(layoutAnimations), - messageQueueThread + isBridgeless #ifdef RCT_NEW_ARCH_ENABLED , fabricUIManager @@ -146,33 +113,6 @@ jni::local_ref NativeProxy::initHybrid( ); } -#ifdef RCT_NEW_ARCH_ENABLED -jni::local_ref NativeProxy::initHybridBridgeless( - jni::alias_ref jThis, - jni::alias_ref jWorkletsModule, - jlong jsContext, - jni::alias_ref runtimeExecutorHolder, - jni::alias_ref androidUiScheduler, - jni::alias_ref layoutAnimations, - jni::alias_ref messageQueueThread, - jni::alias_ref - fabricUIManager) { - auto uiScheduler = androidUiScheduler->cthis()->getUIScheduler(); - auto runtimeExecutor = runtimeExecutorHolder->cthis()->get(); - auto nativeWorkletsModule = - jWorkletsModule->cthis()->getNativeWorkletsModule(); - return makeCxxInstance( - jThis, - nativeWorkletsModule, - (jsi::Runtime *)jsContext, - runtimeExecutor, - uiScheduler, - make_global(layoutAnimations), - messageQueueThread, - fabricUIManager); -} -#endif // RCT_NEW_ARCH_ENABLED - #ifndef NDEBUG void NativeProxy::checkJavaVersion(jsi::Runtime &rnRuntime) { std::string javaVersion; @@ -215,7 +155,7 @@ void NativeProxy::injectCppVersion() { void NativeProxy::installJSIBindings() { jsi::Runtime &rnRuntime = *rnRuntime_; WorkletRuntimeCollector::install(rnRuntime); - RNRuntimeDecorator::decorate(rnRuntime, nativeReanimatedModule_); + RNRuntimeDecorator::decorate(rnRuntime, reanimatedModuleProxy_); #ifndef NDEBUG checkJavaVersion(rnRuntime); injectCppVersion(); @@ -228,13 +168,13 @@ void NativeProxy::installJSIBindings() { bool NativeProxy::isAnyHandlerWaitingForEvent( const std::string &eventName, const int emitterReactTag) { - return nativeReanimatedModule_->isAnyHandlerWaitingForEvent( + return reanimatedModuleProxy_->isAnyHandlerWaitingForEvent( eventName, emitterReactTag); } void NativeProxy::performOperations() { #ifdef RCT_NEW_ARCH_ENABLED - nativeReanimatedModule_->performOperations(); + reanimatedModuleProxy_->performOperations(); #endif } @@ -246,10 +186,6 @@ bool NativeProxy::getIsReducedMotion() { void NativeProxy::registerNatives() { registerHybrid( {makeNativeMethod("initHybrid", NativeProxy::initHybrid), -#ifdef RCT_NEW_ARCH_ENABLED - makeNativeMethod( - "initHybridBridgeless", NativeProxy::initHybridBridgeless), -#endif // RCT_NEW_ARCH_ENABLED makeNativeMethod("installJSIBindings", NativeProxy::installJSIBindings), makeNativeMethod( "isAnyHandlerWaitingForEvent", @@ -471,7 +407,7 @@ void NativeProxy::handleEvent( return; } - jsi::Runtime &rt = nativeReanimatedModule_->getUIRuntime(); + jsi::Runtime &rt = reanimatedModuleProxy_->getUIRuntime(); jsi::Value payload; try { payload = jsi::Value::createFromJsonUtf8( @@ -481,7 +417,7 @@ void NativeProxy::handleEvent( return; } - nativeReanimatedModule_->handleEvent( + reanimatedModuleProxy_->handleEvent( eventName->toString(), emitterReactTag, payload, getAnimationTimestamp()); } @@ -567,14 +503,14 @@ PlatformDepMethodsHolder NativeProxy::getPlatformDependentMethods() { } void NativeProxy::setupLayoutAnimations() { - auto weakNativeReanimatedModule = - std::weak_ptr(nativeReanimatedModule_); + auto weakReanimatedModuleProxy = + std::weak_ptr(reanimatedModuleProxy_); layoutAnimations_->cthis()->setAnimationStartingBlock( - [weakNativeReanimatedModule]( + [weakReanimatedModuleProxy]( int tag, int type, alias_ref> values) { - if (auto nativeReanimatedModule = weakNativeReanimatedModule.lock()) { - jsi::Runtime &rt = nativeReanimatedModule->getUIRuntime(); + if (auto reanimatedModuleProxy = weakReanimatedModuleProxy.lock()) { + jsi::Runtime &rt = reanimatedModuleProxy->getUIRuntime(); jsi::Object yogaValues(rt); for (const auto &entry : *values) { try { @@ -595,25 +531,24 @@ void NativeProxy::setupLayoutAnimations() { "[Reanimated] Failed to convert value to number."); } } - nativeReanimatedModule->layoutAnimationsManager() - .startLayoutAnimation( - rt, tag, static_cast(type), yogaValues); + reanimatedModuleProxy->layoutAnimationsManager().startLayoutAnimation( + rt, tag, static_cast(type), yogaValues); } }); layoutAnimations_->cthis()->setHasAnimationBlock( - [weakNativeReanimatedModule](int tag, int type) { - if (auto nativeReanimatedModule = weakNativeReanimatedModule.lock()) { - return nativeReanimatedModule->layoutAnimationsManager() + [weakReanimatedModuleProxy](int tag, int type) { + if (auto reanimatedModuleProxy = weakReanimatedModuleProxy.lock()) { + return reanimatedModuleProxy->layoutAnimationsManager() .hasLayoutAnimation(tag, static_cast(type)); } return false; }); layoutAnimations_->cthis()->setShouldAnimateExitingBlock( - [weakNativeReanimatedModule](int tag, bool shouldAnimate) { - if (auto nativeReanimatedModule = weakNativeReanimatedModule.lock()) { - return nativeReanimatedModule->layoutAnimationsManager() + [weakReanimatedModuleProxy](int tag, bool shouldAnimate) { + if (auto reanimatedModuleProxy = weakReanimatedModuleProxy.lock()) { + return reanimatedModuleProxy->layoutAnimationsManager() .shouldAnimateExiting(tag, shouldAnimate); } return false; @@ -621,35 +556,35 @@ void NativeProxy::setupLayoutAnimations() { #ifndef NDEBUG layoutAnimations_->cthis()->setCheckDuplicateSharedTag( - [weakNativeReanimatedModule](int viewTag, int screenTag) { - if (auto nativeReanimatedModule = weakNativeReanimatedModule.lock()) { - nativeReanimatedModule->layoutAnimationsManager() + [weakReanimatedModuleProxy](int viewTag, int screenTag) { + if (auto reanimatedModuleProxy = weakReanimatedModuleProxy.lock()) { + reanimatedModuleProxy->layoutAnimationsManager() .checkDuplicateSharedTag(viewTag, screenTag); } }); #endif layoutAnimations_->cthis()->setClearAnimationConfigBlock( - [weakNativeReanimatedModule](int tag) { - if (auto nativeReanimatedModule = weakNativeReanimatedModule.lock()) { - nativeReanimatedModule->layoutAnimationsManager() + [weakReanimatedModuleProxy](int tag) { + if (auto reanimatedModuleProxy = weakReanimatedModuleProxy.lock()) { + reanimatedModuleProxy->layoutAnimationsManager() .clearLayoutAnimationConfig(tag); } }); layoutAnimations_->cthis()->setCancelAnimationForTag( - [weakNativeReanimatedModule](int tag) { - if (auto nativeReanimatedModule = weakNativeReanimatedModule.lock()) { - jsi::Runtime &rt = nativeReanimatedModule->getUIRuntime(); - nativeReanimatedModule->layoutAnimationsManager() + [weakReanimatedModuleProxy](int tag) { + if (auto reanimatedModuleProxy = weakReanimatedModuleProxy.lock()) { + jsi::Runtime &rt = reanimatedModuleProxy->getUIRuntime(); + reanimatedModuleProxy->layoutAnimationsManager() .cancelLayoutAnimation(rt, tag); } }); layoutAnimations_->cthis()->setFindPrecedingViewTagForTransition( - [weakNativeReanimatedModule](int tag) { - if (auto nativeReanimatedModule = weakNativeReanimatedModule.lock()) { - return nativeReanimatedModule->layoutAnimationsManager() + [weakReanimatedModuleProxy](int tag) { + if (auto reanimatedModuleProxy = weakReanimatedModuleProxy.lock()) { + return reanimatedModuleProxy->layoutAnimationsManager() .findPrecedingViewTagForTransition(tag); } else { return -1; @@ -657,9 +592,9 @@ void NativeProxy::setupLayoutAnimations() { }); layoutAnimations_->cthis()->setGetSharedGroupBlock( - [weakNativeReanimatedModule](int tag) -> std::vector { - if (auto nativeReanimatedModule = weakNativeReanimatedModule.lock()) { - return nativeReanimatedModule->layoutAnimationsManager() + [weakReanimatedModuleProxy](int tag) -> std::vector { + if (auto reanimatedModuleProxy = weakReanimatedModuleProxy.lock()) { + return reanimatedModuleProxy->layoutAnimationsManager() .getSharedGroup(tag); } else { return {}; diff --git a/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/NativeProxy.h b/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/NativeProxy.h index 1f2ac757987..318e3acf7a7 100644 --- a/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/NativeProxy.h +++ b/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/NativeProxy.h @@ -1,18 +1,15 @@ #pragma once -#include -#include +#include #include #include -#include #include #include #include #include #include -#include #include #include @@ -154,9 +151,8 @@ class NativeProxy : public jni::HybridClass { jlong jsContext, jni::alias_ref jsCallInvokerHolder, - jni::alias_ref androidUiScheduler, jni::alias_ref layoutAnimations, - jni::alias_ref messageQueueThread + const bool isBridgeless #ifdef RCT_NEW_ARCH_ENABLED , jni::alias_ref @@ -164,18 +160,6 @@ class NativeProxy : public jni::HybridClass { #endif ); -#ifdef RCT_NEW_ARCH_ENABLED - static jni::local_ref initHybridBridgeless( - jni::alias_ref jThis, - jni::alias_ref jWorkletsModule, - jlong jsContext, - jni::alias_ref runtimeExecutorHolder, - jni::alias_ref androidUiScheduler, - jni::alias_ref layoutAnimations, - jni::alias_ref messageQueueThread, - jni::alias_ref - fabricUIManager); -#endif // RCT_NEW_ARCH_ENABLED static void registerNatives(); ~NativeProxy(); @@ -184,7 +168,7 @@ class NativeProxy : public jni::HybridClass { friend HybridBase; jni::global_ref javaPart_; jsi::Runtime *rnRuntime_; - std::shared_ptr nativeReanimatedModule_; + std::shared_ptr reanimatedModuleProxy_; jni::global_ref layoutAnimations_; #ifndef NDEBUG void checkJavaVersion(jsi::Runtime &); @@ -258,7 +242,7 @@ class NativeProxy : public jni::HybridClass { /*** * Wraps a method of `NativeProxy` in a function object capturing `this` * @tparam TReturn return type of passed method - * @tparam TParams paramater types of passed method + * @tparam TParams parameter types of passed method * @param methodPtr pointer to method to be wrapped * @return a function object with the same signature as the method, calling * that method on `this` @@ -278,12 +262,11 @@ class NativeProxy : public jni::HybridClass { explicit NativeProxy( jni::alias_ref jThis, - const std::shared_ptr &nativeWorkletsModule, + const std::shared_ptr &workletsModuleProxy, jsi::Runtime *rnRuntime, const std::shared_ptr &jsCallInvoker, - const std::shared_ptr &uiScheduler, jni::global_ref layoutAnimations, - jni::alias_ref messageQueueThread + const bool isBridgeless #ifdef RCT_NEW_ARCH_ENABLED , jni::alias_ref @@ -292,17 +275,6 @@ class NativeProxy : public jni::HybridClass { ); #ifdef RCT_NEW_ARCH_ENABLED - explicit NativeProxy( - jni::alias_ref jThis, - const std::shared_ptr &nativeWorkletsModule, - jsi::Runtime *rnRuntime, - RuntimeExecutor runtimeExecutor, - const std::shared_ptr &uiScheduler, - jni::global_ref layoutAnimations, - jni::alias_ref messageQueueThread, - jni::alias_ref - fabricUIManager); - void commonInit(jni::alias_ref &fabricUIManager); #endif // RCT_NEW_ARCH_ENABLED diff --git a/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/OnLoad.cpp b/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/OnLoad.cpp index c1d1b783582..590d598f73b 100644 --- a/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/OnLoad.cpp +++ b/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/OnLoad.cpp @@ -1,6 +1,5 @@ #include -#include #include #include @@ -9,7 +8,6 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) { reanimated::NativeProxy::registerNatives(); reanimated::AnimationFrameCallback::registerNatives(); reanimated::EventHandler::registerNatives(); - reanimated::AndroidUIScheduler::registerNatives(); reanimated::LayoutAnimations::registerNatives(); reanimated::SensorSetter::registerNatives(); reanimated::KeyboardWorkletWrapper::registerNatives(); diff --git a/packages/react-native-reanimated/android/src/main/cpp/worklets/CMakeLists.txt b/packages/react-native-reanimated/android/src/main/cpp/worklets/CMakeLists.txt index 26edc5003d3..10c65f4d34a 100644 --- a/packages/react-native-reanimated/android/src/main/cpp/worklets/CMakeLists.txt +++ b/packages/react-native-reanimated/android/src/main/cpp/worklets/CMakeLists.txt @@ -1,139 +1,88 @@ cmake_minimum_required(VERSION 3.8) -file(GLOB_RECURSE WORKLETS_COMMON_CPP_SOURCES CONFIGURE_DEPENDS "${COMMON_CPP_DIR}/worklets/*.cpp") -file(GLOB_RECURSE WORKLETS_ANDROID_CPP_SOURCES CONFIGURE_DEPENDS "${ANDROID_CPP_DIR}/worklets/*.cpp") +file(GLOB_RECURSE WORKLETS_COMMON_CPP_SOURCES CONFIGURE_DEPENDS + "${COMMON_CPP_DIR}/worklets/*.cpp") +file(GLOB_RECURSE WORKLETS_ANDROID_CPP_SOURCES CONFIGURE_DEPENDS + "${ANDROID_CPP_DIR}/worklets/*.cpp") # Consume shared libraries and headers from prefabs find_package(fbjni REQUIRED CONFIG) find_package(ReactAndroid REQUIRED CONFIG) if(${JS_RUNTIME} STREQUAL "hermes") - find_package(hermes-engine REQUIRED CONFIG) + find_package(hermes-engine REQUIRED CONFIG) endif() -add_library( - worklets - SHARED - ${WORKLETS_COMMON_CPP_SOURCES} - ${WORKLETS_ANDROID_CPP_SOURCES} -) +add_library(worklets SHARED ${WORKLETS_COMMON_CPP_SOURCES} + ${WORKLETS_ANDROID_CPP_SOURCES}) # includes -target_include_directories( - worklets - PUBLIC - "${COMMON_CPP_DIR}" - "${ANDROID_CPP_DIR}" -) +target_include_directories(worklets PUBLIC "${COMMON_CPP_DIR}" + "${ANDROID_CPP_DIR}") target_include_directories( - worklets - PRIVATE - "${REACT_NATIVE_DIR}/ReactCommon" - "${REACT_NATIVE_DIR}/ReactAndroid/src/main/jni/react/turbomodule" - "${REACT_NATIVE_DIR}/ReactCommon/react/nativemodule/core/ReactCommon" - "${REACT_NATIVE_DIR}/ReactCommon/callinvoker" - "${REACT_NATIVE_DIR}/ReactCommon/runtimeexecutor" -) + worklets + PRIVATE "${REACT_NATIVE_DIR}/ReactCommon" + "${REACT_NATIVE_DIR}/ReactAndroid/src/main/jni/react/turbomodule" + "${REACT_NATIVE_DIR}/ReactCommon/react/nativemodule/core/ReactCommon" + "${REACT_NATIVE_DIR}/ReactCommon/callinvoker" + "${REACT_NATIVE_DIR}/ReactCommon/runtimeexecutor") if(${IS_NEW_ARCHITECTURE_ENABLED}) - target_include_directories( - worklets - PRIVATE - "${REACT_NATIVE_DIR}/ReactCommon/yoga" - "${REACT_NATIVE_DIR}/ReactCommon/react/renderer/graphics/platform/cxx" - ) + target_include_directories( + worklets + PRIVATE + "${REACT_NATIVE_DIR}/ReactCommon/yoga" + "${REACT_NATIVE_DIR}/ReactCommon/react/renderer/graphics/platform/cxx") - if(ReactAndroid_VERSION_MINOR LESS 76) - target_link_libraries( - worklets - ReactAndroid::fabricjni - ReactAndroid::react_debug - ReactAndroid::react_render_core - ReactAndroid::react_render_componentregistry - ReactAndroid::rrc_view - ) - endif() + if(ReactAndroid_VERSION_MINOR LESS 76) + target_link_libraries( + worklets ReactAndroid::fabricjni ReactAndroid::react_debug + ReactAndroid::react_render_core + ReactAndroid::react_render_componentregistry ReactAndroid::rrc_view) + endif() endif() # build shared lib -set_target_properties( - worklets - PROPERTIES - LINKER_LANGUAGE - CXX -) +set_target_properties(worklets PROPERTIES LINKER_LANGUAGE CXX) -target_link_libraries( - worklets - log - ReactAndroid::jsi - fbjni::fbjni -) +target_link_libraries(worklets log ReactAndroid::jsi fbjni::fbjni) if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76) - target_link_libraries( - worklets - ReactAndroid::reactnative - ) + target_link_libraries(worklets ReactAndroid::reactnative) else() - target_link_libraries( - worklets - ReactAndroid::react_nativemodule_core - ReactAndroid::folly_runtime - ReactAndroid::glog - ReactAndroid::reactnativejni - ) + target_link_libraries( + worklets ReactAndroid::react_nativemodule_core ReactAndroid::folly_runtime + ReactAndroid::glog ReactAndroid::reactnativejni) endif() if(${JS_RUNTIME} STREQUAL "hermes") - target_link_libraries( - worklets - hermes-engine::libhermes - ) + target_link_libraries(worklets hermes-engine::libhermes) - if(${HERMES_ENABLE_DEBUGGER}) - if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76) - target_link_libraries( - worklets - ReactAndroid::hermestooling - ) - else() - target_link_libraries( - worklets - ReactAndroid::hermes_executor - ) - endif() - endif() -elseif(${JS_RUNTIME} STREQUAL "jsc") + if(${HERMES_ENABLE_DEBUGGER}) if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76) - target_link_libraries( - worklets - ReactAndroid::jsctooling - ) + target_link_libraries(worklets ReactAndroid::hermestooling) else() - target_link_libraries( - worklets - ReactAndroid::jscexecutor - ) + target_link_libraries(worklets ReactAndroid::hermes_executor) endif() + endif() +elseif(${JS_RUNTIME} STREQUAL "jsc") + if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76) + target_link_libraries(worklets ReactAndroid::jsctooling) + else() + target_link_libraries(worklets ReactAndroid::jscexecutor) + endif() elseif(${JS_RUNTIME} STREQUAL "v8") - # TODO: Refactor this when adding support for newest V8 - target_include_directories( - worklets - PRIVATE - "${JS_RUNTIME_DIR}/src" - ) - file(GLOB V8_SO_DIR "${JS_RUNTIME_DIR}/android/build/intermediates/library_jni/*/jni/${ANDROID_ABI}") - find_library( - V8EXECUTOR_LIB - v8executor - PATHS ${V8_SO_DIR} - NO_DEFAULT_PATH - NO_CMAKE_FIND_ROOT_PATH - ) - target_link_libraries( - worklets - ${V8EXECUTOR_LIB} - ) + # TODO: Refactor this when adding support for newest V8 + target_include_directories(worklets PRIVATE "${JS_RUNTIME_DIR}/src") + file( + GLOB + V8_SO_DIR + "${JS_RUNTIME_DIR}/android/build/intermediates/library_jni/**/jni/${ANDROID_ABI}" + ) + find_library( + V8EXECUTOR_LIB v8executor + PATHS ${V8_SO_DIR} + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) + target_link_libraries(worklets ${V8EXECUTOR_LIB}) endif() diff --git a/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/AndroidUIScheduler.cpp b/packages/react-native-reanimated/android/src/main/cpp/worklets/android/AndroidUIScheduler.cpp similarity index 93% rename from packages/react-native-reanimated/android/src/main/cpp/reanimated/android/AndroidUIScheduler.cpp rename to packages/react-native-reanimated/android/src/main/cpp/worklets/android/AndroidUIScheduler.cpp index 039028d8f9a..595c09f7e70 100644 --- a/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/AndroidUIScheduler.cpp +++ b/packages/react-native-reanimated/android/src/main/cpp/worklets/android/AndroidUIScheduler.cpp @@ -1,10 +1,10 @@ -#include +#include #include #include #include -namespace reanimated { +namespace worklets { using namespace facebook; using namespace react; @@ -57,4 +57,4 @@ void AndroidUIScheduler::registerNatives() { }); } -} // namespace reanimated +} // namespace worklets diff --git a/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/AndroidUIScheduler.h b/packages/react-native-reanimated/android/src/main/cpp/worklets/android/AndroidUIScheduler.h similarity index 89% rename from packages/react-native-reanimated/android/src/main/cpp/reanimated/android/AndroidUIScheduler.h rename to packages/react-native-reanimated/android/src/main/cpp/worklets/android/AndroidUIScheduler.h index e9e7c940dc8..c38b0ac5a96 100644 --- a/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/AndroidUIScheduler.h +++ b/packages/react-native-reanimated/android/src/main/cpp/worklets/android/AndroidUIScheduler.h @@ -10,7 +10,7 @@ #include -namespace reanimated { +namespace worklets { using namespace facebook; using namespace worklets; @@ -18,7 +18,7 @@ using namespace worklets; class AndroidUIScheduler : public jni::HybridClass { public: static auto constexpr kJavaDescriptor = - "Lcom/swmansion/reanimated/AndroidUIScheduler;"; + "Lcom/swmansion/worklets/AndroidUIScheduler;"; static jni::local_ref initHybrid( jni::alias_ref jThis); static void registerNatives(); @@ -41,4 +41,4 @@ class AndroidUIScheduler : public jni::HybridClass { jni::alias_ref jThis); }; -} // namespace reanimated +} // namespace worklets diff --git a/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/PlatformLogger.cpp b/packages/react-native-reanimated/android/src/main/cpp/worklets/android/PlatformLogger.cpp similarity index 78% rename from packages/react-native-reanimated/android/src/main/cpp/reanimated/android/PlatformLogger.cpp rename to packages/react-native-reanimated/android/src/main/cpp/worklets/android/PlatformLogger.cpp index 03495d35a03..e931aa904a4 100644 --- a/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/PlatformLogger.cpp +++ b/packages/react-native-reanimated/android/src/main/cpp/worklets/android/PlatformLogger.cpp @@ -1,10 +1,10 @@ #include -#include +#include -constexpr const auto tag = "Reanimated"; +constexpr const auto tag = "Worklets"; -namespace reanimated { +namespace worklets { void PlatformLogger::log(const char *str) { __android_log_print(ANDROID_LOG_VERBOSE, tag, "%s", str); @@ -26,4 +26,4 @@ void PlatformLogger::log(const bool b) { log(b ? "true" : "false"); } -} // namespace reanimated +} // namespace worklets diff --git a/packages/react-native-reanimated/android/src/main/cpp/worklets/android/WorkletsModule.cpp b/packages/react-native-reanimated/android/src/main/cpp/worklets/android/WorkletsModule.cpp index 6be7b73349d..ac8b1c34519 100644 --- a/packages/react-native-reanimated/android/src/main/cpp/worklets/android/WorkletsModule.cpp +++ b/packages/react-native-reanimated/android/src/main/cpp/worklets/android/WorkletsModule.cpp @@ -20,19 +20,44 @@ using namespace react; WorkletsModule::WorkletsModule( jni::alias_ref jThis, jsi::Runtime *rnRuntime, - const std::string &valueUnpackerCode) + const std::string &valueUnpackerCode, + jni::alias_ref messageQueueThread, + const std::shared_ptr &jsCallInvoker, + const std::shared_ptr &jsScheduler, + const std::shared_ptr &uiScheduler) : javaPart_(jni::make_global(jThis)), rnRuntime_(rnRuntime), - nativeWorkletsModule_( - std::make_shared(valueUnpackerCode)) { - RNRuntimeWorkletDecorator::decorate(*rnRuntime_, nativeWorkletsModule_); + workletsModuleProxy_(std::make_shared( + valueUnpackerCode, + std::make_shared(messageQueueThread), + jsCallInvoker, + jsScheduler, + uiScheduler)) { + RNRuntimeWorkletDecorator::decorate(*rnRuntime_, workletsModuleProxy_); } jni::local_ref WorkletsModule::initHybrid( jni::alias_ref jThis, jlong jsContext, - const std::string &valueUnpackerCode) { - return makeCxxInstance(jThis, (jsi::Runtime *)jsContext, valueUnpackerCode); + const std::string &valueUnpackerCode, + jni::alias_ref messageQueueThread, + jni::alias_ref + jsCallInvokerHolder, + jni::alias_ref + androidUIScheduler) { + auto jsCallInvoker = jsCallInvokerHolder->cthis()->getCallInvoker(); + auto rnRuntime = reinterpret_cast(jsContext); + auto jsScheduler = + std::make_shared(*rnRuntime, jsCallInvoker); + auto uiScheduler = androidUIScheduler->cthis()->getUIScheduler(); + return makeCxxInstance( + jThis, + rnRuntime, + valueUnpackerCode, + messageQueueThread, + jsCallInvoker, + jsScheduler, + uiScheduler); } void WorkletsModule::registerNatives() { diff --git a/packages/react-native-reanimated/android/src/main/cpp/worklets/android/WorkletsModule.h b/packages/react-native-reanimated/android/src/main/cpp/worklets/android/WorkletsModule.h index 349853b1edb..094287271fc 100644 --- a/packages/react-native-reanimated/android/src/main/cpp/worklets/android/WorkletsModule.h +++ b/packages/react-native-reanimated/android/src/main/cpp/worklets/android/WorkletsModule.h @@ -13,7 +13,8 @@ #include #include -#include +#include +#include #include #include @@ -31,24 +32,33 @@ class WorkletsModule : public jni::HybridClass { static jni::local_ref initHybrid( jni::alias_ref jThis, jlong jsContext, - const std::string &valueUnpackerCode); + const std::string &valueUnpackerCode, + jni::alias_ref messageQueueThread, + jni::alias_ref + jsCallInvokerHolder, + jni::alias_ref + androidUIScheduler); static void registerNatives(); - inline std::shared_ptr getNativeWorkletsModule() { - return nativeWorkletsModule_; + inline std::shared_ptr getWorkletsModuleProxy() { + return workletsModuleProxy_; } private: friend HybridBase; jni::global_ref javaPart_; jsi::Runtime *rnRuntime_; - std::shared_ptr nativeWorkletsModule_; + std::shared_ptr workletsModuleProxy_; explicit WorkletsModule( jni::alias_ref jThis, jsi::Runtime *rnRuntime, - const std::string &valueUnpackerCode); + const std::string &valueUnpackerCode, + jni::alias_ref messageQueueThread, + const std::shared_ptr &jsCallInvoker, + const std::shared_ptr &jsScheduler, + const std::shared_ptr &uiScheduler); }; } // namespace worklets diff --git a/packages/react-native-reanimated/android/src/main/cpp/worklets/android/WorkletsOnLoad.cpp b/packages/react-native-reanimated/android/src/main/cpp/worklets/android/WorkletsOnLoad.cpp index 3c35b26e36a..9d441273714 100644 --- a/packages/react-native-reanimated/android/src/main/cpp/worklets/android/WorkletsOnLoad.cpp +++ b/packages/react-native-reanimated/android/src/main/cpp/worklets/android/WorkletsOnLoad.cpp @@ -1,8 +1,11 @@ #include +#include #include JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) { - return facebook::jni::initialize( - vm, [] { worklets::WorkletsModule::registerNatives(); }); + return facebook::jni::initialize(vm, [] { + worklets::WorkletsModule::registerNatives(); + worklets::AndroidUIScheduler::registerNatives(); + }); } diff --git a/packages/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/NodesManager.java b/packages/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/NodesManager.java index 9ca28144b94..58cdc88924d 100644 --- a/packages/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/NodesManager.java +++ b/packages/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/NodesManager.java @@ -128,14 +128,13 @@ public void invalidate() { } if (mNativeProxy != null) { - mNativeProxy.invalidate(); mNativeProxy = null; } } public void initWithContext(ReactApplicationContext reactApplicationContext) { mNativeProxy = new NativeProxy(reactApplicationContext, mWorkletsModule); - mAnimationManager.setAndroidUIScheduler(getNativeProxy().getAndroidUIScheduler()); + mAnimationManager.setAndroidUIScheduler(mWorkletsModule.getAndroidUIScheduler()); compatibility = new ReaCompatibility(reactApplicationContext); compatibility.registerFabricEventListener(this); } diff --git a/packages/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/ReanimatedPackage.java b/packages/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/ReanimatedPackage.java index 8f32f0e6ec5..b3eae298949 100644 --- a/packages/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/ReanimatedPackage.java +++ b/packages/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/ReanimatedPackage.java @@ -4,10 +4,10 @@ import static com.facebook.react.bridge.ReactMarkerConstants.CREATE_UI_MANAGER_MODULE_START; import androidx.annotation.NonNull; +import com.facebook.react.BaseReactPackage; import com.facebook.react.ReactApplication; import com.facebook.react.ReactInstanceManager; import com.facebook.react.ReactPackage; -import com.facebook.react.TurboReactPackage; import com.facebook.react.bridge.NativeModule; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactMarker; @@ -36,7 +36,7 @@ ReanimatedModule.class, ReanimatedUIManager.class, }) -public class ReanimatedPackage extends TurboReactPackage implements ReactPackage { +public class ReanimatedPackage extends BaseReactPackage implements ReactPackage { @Override public NativeModule getModule( @NonNull String name, @NonNull ReactApplicationContext reactContext) { diff --git a/packages/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/layoutReanimation/AnimationsManager.java b/packages/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/layoutReanimation/AnimationsManager.java index 15afbede935..07e4ebaeedb 100644 --- a/packages/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/layoutReanimation/AnimationsManager.java +++ b/packages/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/layoutReanimation/AnimationsManager.java @@ -22,8 +22,8 @@ import com.facebook.react.uimanager.ReactStylesDiffMap; import com.facebook.react.uimanager.RootView; import com.facebook.react.uimanager.ViewManager; -import com.swmansion.reanimated.AndroidUIScheduler; import com.swmansion.reanimated.Utils; +import com.swmansion.worklets.AndroidUIScheduler; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.HashMap; diff --git a/packages/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/nativeProxy/NativeProxyCommon.java b/packages/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/nativeProxy/NativeProxyCommon.java index 741e096f6e0..3b291a92d0c 100644 --- a/packages/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/nativeProxy/NativeProxyCommon.java +++ b/packages/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/nativeProxy/NativeProxyCommon.java @@ -13,7 +13,6 @@ import com.facebook.react.bridge.ReadableNativeArray; import com.facebook.soloader.SoLoader; import com.swmansion.common.GestureHandlerStateManager; -import com.swmansion.reanimated.AndroidUIScheduler; import com.swmansion.reanimated.BuildConfig; import com.swmansion.reanimated.DevMenuUtils; import com.swmansion.reanimated.NativeProxy; @@ -34,6 +33,9 @@ import java.util.Objects; import java.util.Set; +/** + * @noinspection JavaJniMissingFunction + */ public abstract class NativeProxyCommon { static { SoLoader.loadLibrary("reanimated"); @@ -42,7 +44,6 @@ public abstract class NativeProxyCommon { protected final WorkletsModule mWorkletsModule; protected NodesManager mNodesManager; protected final WeakReference mContext; - protected final AndroidUIScheduler mAndroidUIScheduler; private final ReanimatedSensorContainer reanimatedSensorContainer; private final GestureHandlerStateManager gestureHandlerStateManager; private final KeyboardAnimationManager keyboardAnimationManager; @@ -54,7 +55,6 @@ public abstract class NativeProxyCommon { protected NativeProxyCommon(ReactApplicationContext context) { mWorkletsModule = Objects.requireNonNull(context.getNativeModule(ReanimatedModule.class)).getWorkletsModule(); - mAndroidUIScheduler = new AndroidUIScheduler(context); mContext = new WeakReference<>(context); reanimatedSensorContainer = new ReanimatedSensorContainer(mContext); keyboardAnimationManager = new KeyboardAnimationManager(mContext); @@ -75,10 +75,6 @@ protected NativeProxyCommon(ReactApplicationContext context) { protected native void installJSIBindings(); - public AndroidUIScheduler getAndroidUIScheduler() { - return mAndroidUIScheduler; - } - private void toggleSlowAnimations() { slowAnimationsEnabled = !slowAnimationsEnabled; if (slowAnimationsEnabled) { @@ -224,10 +220,6 @@ public void unsubscribeFromKeyboardEvents(int listenerId) { protected abstract HybridData getHybridData(); - public void invalidate() { - mAndroidUIScheduler.deactivate(); - } - public void prepareLayoutAnimations(LayoutAnimations layoutAnimations) { if (Utils.isChromeDebugger) { Log.w("[REANIMATED]", "You can not use LayoutAnimation with enabled Chrome Debugger"); diff --git a/packages/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/AndroidUIScheduler.java b/packages/react-native-reanimated/android/src/main/java/com/swmansion/worklets/AndroidUIScheduler.java similarity index 97% rename from packages/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/AndroidUIScheduler.java rename to packages/react-native-reanimated/android/src/main/java/com/swmansion/worklets/AndroidUIScheduler.java index 126c270a4cd..7a8c4f63201 100644 --- a/packages/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/AndroidUIScheduler.java +++ b/packages/react-native-reanimated/android/src/main/java/com/swmansion/worklets/AndroidUIScheduler.java @@ -1,4 +1,4 @@ -package com.swmansion.reanimated; +package com.swmansion.worklets; import com.facebook.jni.HybridData; import com.facebook.proguard.annotations.DoNotStrip; diff --git a/packages/react-native-reanimated/android/src/main/java/com/swmansion/worklets/JSCallInvokerResolver.java b/packages/react-native-reanimated/android/src/main/java/com/swmansion/worklets/JSCallInvokerResolver.java new file mode 100644 index 00000000000..b8f77c550e0 --- /dev/null +++ b/packages/react-native-reanimated/android/src/main/java/com/swmansion/worklets/JSCallInvokerResolver.java @@ -0,0 +1,27 @@ +package com.swmansion.worklets; + +import androidx.annotation.OptIn; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.common.annotations.FrameworkAPI; +import com.facebook.react.turbomodule.core.CallInvokerHolderImpl; + +public class JSCallInvokerResolver { + + @OptIn(markerClass = FrameworkAPI.class) + public static CallInvokerHolderImpl getJSCallInvokerHolder(ReactApplicationContext context) { + try { + var method = context.getClass().getMethod("getJSCallInvokerHolder"); + return (CallInvokerHolderImpl) method.invoke(context); + } catch (Exception ignored) { + // In newer implementations, the method is in CatalystInstance, continue. + } + try { + var catalystInstance = context.getClass().getMethod("getCatalystInstance").invoke(context); + assert catalystInstance != null; + var method = catalystInstance.getClass().getMethod("getJSCallInvokerHolder"); + return (CallInvokerHolderImpl) method.invoke(catalystInstance); + } catch (Exception e) { + throw new RuntimeException("Failed to get JSCallInvokerHolder", e); + } + } +} diff --git a/packages/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/ReanimatedMessageQueueThread.java b/packages/react-native-reanimated/android/src/main/java/com/swmansion/worklets/WorkletsMessageQueueThread.java similarity index 69% rename from packages/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/ReanimatedMessageQueueThread.java rename to packages/react-native-reanimated/android/src/main/java/com/swmansion/worklets/WorkletsMessageQueueThread.java index e6a4cd1c37b..b1ccdf8b59d 100644 --- a/packages/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/ReanimatedMessageQueueThread.java +++ b/packages/react-native-reanimated/android/src/main/java/com/swmansion/worklets/WorkletsMessageQueueThread.java @@ -1,9 +1,9 @@ -package com.swmansion.reanimated; +package com.swmansion.worklets; import com.facebook.proguard.annotations.DoNotStrip; @DoNotStrip -public class ReanimatedMessageQueueThread extends ReanimatedMessageQueueThreadBase { +public class WorkletsMessageQueueThread extends WorkletsMessageQueueThreadBase { @Override public boolean runOnQueue(Runnable runnable) { return messageQueueThread.runOnQueue(runnable); diff --git a/packages/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/ReanimatedMessageQueueThreadBase.java b/packages/react-native-reanimated/android/src/main/java/com/swmansion/worklets/WorkletsMessageQueueThreadBase.java similarity index 93% rename from packages/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/ReanimatedMessageQueueThreadBase.java rename to packages/react-native-reanimated/android/src/main/java/com/swmansion/worklets/WorkletsMessageQueueThreadBase.java index ca7733d0cbc..ade92c5b8b2 100644 --- a/packages/react-native-reanimated/android/src/main/java/com/swmansion/reanimated/ReanimatedMessageQueueThreadBase.java +++ b/packages/react-native-reanimated/android/src/main/java/com/swmansion/worklets/WorkletsMessageQueueThreadBase.java @@ -1,4 +1,4 @@ -package com.swmansion.reanimated; +package com.swmansion.worklets; import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.bridge.queue.MessageQueueThread; @@ -14,10 +14,10 @@ // The only method that has changed is `quitSynchronous()` (see comment above // function implementation for details). @DoNotStrip -public abstract class ReanimatedMessageQueueThreadBase implements MessageQueueThread { +public abstract class WorkletsMessageQueueThreadBase implements MessageQueueThread { protected final MessageQueueThreadImpl messageQueueThread; - public ReanimatedMessageQueueThreadBase() { + public WorkletsMessageQueueThreadBase() { messageQueueThread = MessageQueueThreadImpl.create( MessageQueueThreadSpec.mainThreadSpec(), diff --git a/packages/react-native-reanimated/android/src/main/java/com/swmansion/worklets/WorkletsModule.java b/packages/react-native-reanimated/android/src/main/java/com/swmansion/worklets/WorkletsModule.java index 2da67792f66..35cf7d07829 100644 --- a/packages/react-native-reanimated/android/src/main/java/com/swmansion/worklets/WorkletsModule.java +++ b/packages/react-native-reanimated/android/src/main/java/com/swmansion/worklets/WorkletsModule.java @@ -5,12 +5,17 @@ import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.queue.MessageQueueThread; import com.facebook.react.common.annotations.FrameworkAPI; import com.facebook.react.module.annotations.ReactModule; +import com.facebook.react.turbomodule.core.CallInvokerHolderImpl; import com.facebook.soloader.SoLoader; import com.swmansion.reanimated.NativeWorkletsModuleSpec; import java.util.Objects; +/** + * @noinspection JavaJniMissingFunction + */ @ReactModule(name = WorkletsModule.NAME) public class WorkletsModule extends NativeWorkletsModuleSpec { static { @@ -21,21 +26,29 @@ public class WorkletsModule extends NativeWorkletsModuleSpec { @SuppressWarnings("unused") private HybridData mHybridData; - /** - * @noinspection unused - */ + @SuppressWarnings("unused") protected HybridData getHybridData() { return mHybridData; } - /** - * @noinspection JavaJniMissingFunction - */ + private final WorkletsMessageQueueThread mMessageQueueThread = new WorkletsMessageQueueThread(); + private final AndroidUIScheduler mAndroidUIScheduler; + + public AndroidUIScheduler getAndroidUIScheduler() { + return mAndroidUIScheduler; + } + @OptIn(markerClass = FrameworkAPI.class) - private native HybridData initHybrid(long jsContext, String valueUnpackerCode); + private native HybridData initHybrid( + long jsContext, + String valueUnpackerCode, + MessageQueueThread messageQueueThread, + CallInvokerHolderImpl jsCallInvokerHolder, + AndroidUIScheduler androidUIScheduler); public WorkletsModule(ReactApplicationContext reactContext) { super(reactContext); + mAndroidUIScheduler = new AndroidUIScheduler(reactContext); } @OptIn(markerClass = FrameworkAPI.class) @@ -43,9 +56,19 @@ public WorkletsModule(ReactApplicationContext reactContext) { public boolean installTurboModule(String valueUnpackerCode) { var context = getReactApplicationContext(); var jsContext = Objects.requireNonNull(context.getJavaScriptContextHolder()).get(); + var jsCallInvokerHolder = JSCallInvokerResolver.getJSCallInvokerHolder(context); - mHybridData = initHybrid(jsContext, valueUnpackerCode); - + mHybridData = + initHybrid( + jsContext, + valueUnpackerCode, + mMessageQueueThread, + jsCallInvokerHolder, + mAndroidUIScheduler); return true; } + + public void invalidate() { + mAndroidUIScheduler.deactivate(); + } } diff --git a/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyPaper/latest/com/swmansion/reanimated/NativeProxy.java b/packages/react-native-reanimated/android/src/paper/java/com/swmansion/reanimated/NativeProxy.java similarity index 92% rename from packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyPaper/latest/com/swmansion/reanimated/NativeProxy.java rename to packages/react-native-reanimated/android/src/paper/java/com/swmansion/reanimated/NativeProxy.java index f4bfa2c555c..7f7ebada7cd 100644 --- a/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyPaper/latest/com/swmansion/reanimated/NativeProxy.java +++ b/packages/react-native-reanimated/android/src/paper/java/com/swmansion/reanimated/NativeProxy.java @@ -6,17 +6,20 @@ import com.facebook.jni.HybridData; import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.queue.MessageQueueThread; import com.facebook.react.common.annotations.FrameworkAPI; import com.facebook.react.turbomodule.core.CallInvokerHolderImpl; import com.swmansion.reanimated.layoutReanimation.LayoutAnimations; import com.swmansion.reanimated.layoutReanimation.NativeMethodsHolder; import com.swmansion.reanimated.nativeProxy.NativeProxyCommon; +import com.swmansion.worklets.JSCallInvokerResolver; import com.swmansion.worklets.WorkletsModule; import java.lang.ref.WeakReference; import java.util.HashMap; import java.util.Objects; +/** + * @noinspection JavaJniMissingFunction + */ public class NativeProxy extends NativeProxyCommon { @DoNotStrip @SuppressWarnings("unused") @@ -25,17 +28,15 @@ public class NativeProxy extends NativeProxyCommon { @OptIn(markerClass = FrameworkAPI.class) public NativeProxy(ReactApplicationContext context, WorkletsModule workletsModule) { super(context); - CallInvokerHolderImpl holder = (CallInvokerHolderImpl) context.getJSCallInvokerHolder(); + CallInvokerHolderImpl holder = JSCallInvokerResolver.getJSCallInvokerHolder(context); LayoutAnimations LayoutAnimations = new LayoutAnimations(context); - ReanimatedMessageQueueThread messageQueueThread = new ReanimatedMessageQueueThread(); mHybridData = initHybrid( workletsModule, Objects.requireNonNull(context.getJavaScriptContextHolder()).get(), holder, - mAndroidUIScheduler, LayoutAnimations, - messageQueueThread); + /* isBridgeless */ false); prepareLayoutAnimations(LayoutAnimations); installJSIBindings(); if (BuildConfig.DEBUG) { @@ -48,9 +49,8 @@ private native HybridData initHybrid( WorkletsModule workletsModule, long jsContext, CallInvokerHolderImpl jsCallInvokerHolder, - AndroidUIScheduler androidUIScheduler, LayoutAnimations LayoutAnimations, - MessageQueueThread messageQueueThread); + boolean isBridgeless); public native boolean isAnyHandlerWaitingForEvent(String eventName, int emitterReactTag); diff --git a/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyFabric/latest/com/swmansion/reanimated/NativeProxy.java b/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyFabric/latest/com/swmansion/reanimated/NativeProxy.java deleted file mode 100644 index ddfb00aceb5..00000000000 --- a/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyFabric/latest/com/swmansion/reanimated/NativeProxy.java +++ /dev/null @@ -1,149 +0,0 @@ -package com.swmansion.reanimated; - -import androidx.annotation.OptIn; -import com.facebook.jni.HybridData; -import com.facebook.proguard.annotations.DoNotStrip; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.RuntimeExecutor; -import com.facebook.react.bridge.queue.MessageQueueThread; -import com.facebook.react.common.annotations.FrameworkAPI; -import com.facebook.react.fabric.FabricUIManager; -import com.facebook.react.turbomodule.core.CallInvokerHolderImpl; -import com.facebook.react.uimanager.UIManagerHelper; -import com.facebook.react.uimanager.common.UIManagerType; -import com.swmansion.reanimated.layoutReanimation.LayoutAnimations; -import com.swmansion.reanimated.layoutReanimation.NativeMethodsHolder; -import com.swmansion.reanimated.nativeProxy.NativeProxyCommon; -import com.swmansion.worklets.WorkletsModule; -import java.util.HashMap; -import java.util.Objects; - -public class NativeProxy extends NativeProxyCommon { - @DoNotStrip - @SuppressWarnings("unused") - private final HybridData mHybridData; - - public @OptIn(markerClass = FrameworkAPI.class) NativeProxy( - ReactApplicationContext context, WorkletsModule workletsModule) { - super(context); - ReactFeatureFlagsWrapper.enableMountHooks(); - - FabricUIManager fabricUIManager = - (FabricUIManager) UIManagerHelper.getUIManager(context, UIManagerType.FABRIC); - - LayoutAnimations LayoutAnimations = new LayoutAnimations(context); - - ReanimatedMessageQueueThread messageQueueThread = new ReanimatedMessageQueueThread(); - - if (context.isBridgeless()) { - RuntimeExecutor runtimeExecutor = context.getCatalystInstance().getRuntimeExecutor(); - mHybridData = - initHybridBridgeless( - workletsModule, - Objects.requireNonNull(context.getJavaScriptContextHolder()).get(), - runtimeExecutor, - mAndroidUIScheduler, - LayoutAnimations, - messageQueueThread, - fabricUIManager); - } else { - CallInvokerHolderImpl callInvokerHolder = - (CallInvokerHolderImpl) context.getJSCallInvokerHolder(); - mHybridData = - initHybrid( - workletsModule, - Objects.requireNonNull(context.getJavaScriptContextHolder()).get(), - callInvokerHolder, - mAndroidUIScheduler, - LayoutAnimations, - messageQueueThread, - fabricUIManager); - } - prepareLayoutAnimations(LayoutAnimations); - installJSIBindings(); - if (BuildConfig.DEBUG) { - checkCppVersion(); - } - } - - private native HybridData initHybrid( - WorkletsModule workletsModule, - long jsContext, - CallInvokerHolderImpl jsCallInvokerHolder, - AndroidUIScheduler androidUIScheduler, - LayoutAnimations LayoutAnimations, - MessageQueueThread messageQueueThread, - FabricUIManager fabricUIManager); - - private native HybridData initHybridBridgeless( - WorkletsModule workletsModule, - long jsContext, - RuntimeExecutor runtimeExecutor, - AndroidUIScheduler androidUIScheduler, - LayoutAnimations LayoutAnimations, - MessageQueueThread messageQueueThread, - FabricUIManager fabricUIManager); - - public native boolean isAnyHandlerWaitingForEvent(String eventName, int emitterReactTag); - - public native void performOperations(); - - @Override - protected HybridData getHybridData() { - return mHybridData; - } - - public static NativeMethodsHolder createNativeMethodsHolder(LayoutAnimations layoutAnimations) { - return new NativeMethodsHolder() { - @Override - public void startAnimation(int tag, int type, HashMap values) { - // NOT IMPLEMENTED - } - - @Override - public boolean isLayoutAnimationEnabled() { - // NOT IMPLEMENTED - return false; - } - - @Override - public int findPrecedingViewTagForTransition(int tag) { - // NOT IMPLEMENTED - return -1; - } - - @Override - public boolean shouldAnimateExiting(int tag, boolean shouldAnimate) { - // NOT IMPLEMENTED - return false; - } - - @Override - public boolean hasAnimation(int tag, int type) { - // NOT IMPLEMENTED - return false; - } - - @Override - public void clearAnimationConfig(int tag) { - // NOT IMPLEMENTED - } - - @Override - public void cancelAnimation(int tag) { - // NOT IMPLEMENTED - } - - @Override - public void checkDuplicateSharedTag(int viewTag, int screenTag) { - // NOT IMPLEMENTED - } - - @Override - public int[] getSharedGroup(int viewTag) { - // NOT IMPLEMENTED - return new int[] {}; - } - }; - } -} diff --git a/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyPaper/74/com/swmansion/reanimated/NativeProxy.java b/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyPaper/74/com/swmansion/reanimated/NativeProxy.java deleted file mode 100644 index 9078f5486c6..00000000000 --- a/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyPaper/74/com/swmansion/reanimated/NativeProxy.java +++ /dev/null @@ -1,153 +0,0 @@ -package com.swmansion.reanimated; - -import static com.swmansion.reanimated.Utils.simplifyStringNumbersList; - -import androidx.annotation.OptIn; -import com.facebook.jni.HybridData; -import com.facebook.proguard.annotations.DoNotStrip; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.queue.MessageQueueThread; -import com.facebook.react.common.annotations.FrameworkAPI; -import com.facebook.react.turbomodule.core.CallInvokerHolderImpl; -import com.swmansion.reanimated.layoutReanimation.LayoutAnimations; -import com.swmansion.reanimated.layoutReanimation.NativeMethodsHolder; -import com.swmansion.reanimated.nativeProxy.NativeProxyCommon; -import com.swmansion.worklets.WorkletsModule; -import java.lang.ref.WeakReference; -import java.util.HashMap; -import java.util.Objects; - -public class NativeProxy extends NativeProxyCommon { - @DoNotStrip - @SuppressWarnings("unused") - private final HybridData mHybridData; - - @OptIn(markerClass = FrameworkAPI.class) - public NativeProxy(ReactApplicationContext context, WorkletsModule workletsModule) { - super(context); - CallInvokerHolderImpl holder = - (CallInvokerHolderImpl) context.getCatalystInstance().getJSCallInvokerHolder(); - LayoutAnimations LayoutAnimations = new LayoutAnimations(context); - ReanimatedMessageQueueThread messageQueueThread = new ReanimatedMessageQueueThread(); - mHybridData = - initHybrid( - workletsModule, - Objects.requireNonNull(context.getJavaScriptContextHolder()).get(), - holder, - mAndroidUIScheduler, - LayoutAnimations, - messageQueueThread); - prepareLayoutAnimations(LayoutAnimations); - installJSIBindings(); - if (BuildConfig.DEBUG) { - checkCppVersion(); - } - } - - @OptIn(markerClass = FrameworkAPI.class) - private native HybridData initHybrid( - WorkletsModule workletsModule, - long jsContext, - CallInvokerHolderImpl jsCallInvokerHolder, - AndroidUIScheduler androidUIScheduler, - LayoutAnimations LayoutAnimations, - MessageQueueThread messageQueueThread); - - public native boolean isAnyHandlerWaitingForEvent(String eventName, int emitterReactTag); - - public native void performOperations(); - - @Override - protected HybridData getHybridData() { - return mHybridData; - } - - public static NativeMethodsHolder createNativeMethodsHolder(LayoutAnimations layoutAnimations) { - WeakReference weakLayoutAnimations = new WeakReference<>(layoutAnimations); - return new NativeMethodsHolder() { - @Override - public void startAnimation(int tag, int type, HashMap values) { - LayoutAnimations layoutAnimations = weakLayoutAnimations.get(); - if (layoutAnimations != null) { - HashMap preparedValues = new HashMap<>(); - for (String key : values.keySet()) { - String stringValue = values.get(key).toString(); - if (key.endsWith("TransformMatrix")) { - preparedValues.put(key, simplifyStringNumbersList(stringValue)); - } else { - preparedValues.put(key, stringValue); - } - } - layoutAnimations.startAnimationForTag(tag, type, preparedValues); - } - } - - @Override - public boolean shouldAnimateExiting(int tag, boolean shouldAnimate) { - LayoutAnimations layoutAnimations = weakLayoutAnimations.get(); - if (layoutAnimations != null) { - return layoutAnimations.shouldAnimateExiting(tag, shouldAnimate); - } - return false; - } - - @Override - public boolean isLayoutAnimationEnabled() { - LayoutAnimations layoutAnimations = weakLayoutAnimations.get(); - if (layoutAnimations != null) { - return layoutAnimations.isLayoutAnimationEnabled(); - } - return false; - } - - @Override - public boolean hasAnimation(int tag, int type) { - LayoutAnimations layoutAnimations = weakLayoutAnimations.get(); - if (layoutAnimations != null) { - return layoutAnimations.hasAnimationForTag(tag, type); - } - return false; - } - - @Override - public void clearAnimationConfig(int tag) { - LayoutAnimations layoutAnimations = weakLayoutAnimations.get(); - if (layoutAnimations != null) { - layoutAnimations.clearAnimationConfigForTag(tag); - } - } - - @Override - public void cancelAnimation(int tag) { - LayoutAnimations layoutAnimations = weakLayoutAnimations.get(); - if (layoutAnimations != null) { - layoutAnimations.cancelAnimationForTag(tag); - } - } - - @Override - public int findPrecedingViewTagForTransition(int tag) { - LayoutAnimations layoutAnimations = weakLayoutAnimations.get(); - if (layoutAnimations != null) { - return layoutAnimations.findPrecedingViewTagForTransition(tag); - } - return -1; - } - - public void checkDuplicateSharedTag(int viewTag, int screenTag) { - LayoutAnimations layoutAnimations = weakLayoutAnimations.get(); - if (layoutAnimations != null) { - layoutAnimations.checkDuplicateSharedTag(viewTag, screenTag); - } - } - - public int[] getSharedGroup(int viewTag) { - LayoutAnimations layoutAnimations = weakLayoutAnimations.get(); - if (layoutAnimations != null) { - return layoutAnimations.getSharedGroup(viewTag); - } - return new int[] {}; - } - }; - } -} diff --git a/packages/react-native-reanimated/apple/reanimated/apple/Fabric/REAInitializerRCTFabricSurface.h b/packages/react-native-reanimated/apple/reanimated/apple/Fabric/REAInitializerRCTFabricSurface.h index bd8143b8a55..c27c2106790 100644 --- a/packages/react-native-reanimated/apple/reanimated/apple/Fabric/REAInitializerRCTFabricSurface.h +++ b/packages/react-native-reanimated/apple/reanimated/apple/Fabric/REAInitializerRCTFabricSurface.h @@ -5,7 +5,7 @@ @interface REAInitializerRCTFabricSurface : RCTFabricSurface -@property REAModule *reaModule; +@property __weak REAModule *reaModule; @end diff --git a/packages/react-native-reanimated/apple/reanimated/apple/LayoutReanimation/REASharedTransitionManager.m b/packages/react-native-reanimated/apple/reanimated/apple/LayoutReanimation/REASharedTransitionManager.m index 1bf674b1d6b..7e35f1bbdbd 100644 --- a/packages/react-native-reanimated/apple/reanimated/apple/LayoutReanimation/REASharedTransitionManager.m +++ b/packages/react-native-reanimated/apple/reanimated/apple/LayoutReanimation/REASharedTransitionManager.m @@ -576,10 +576,26 @@ - (void)handleTabNavigatorChange:(REAUIView *)layoutedScreen return; } + // Add safety check for disappearing screens + if ([_disappearingScreens count] == 0) { + return; + } + REAUIView *navTabScreen = _disappearingScreens[0]; REAUIView *sourceScreen = _disappearingScreens[[_disappearingScreens count] - 1]; + + // Add null checks + if (!navTabScreen || !navTabScreen.reactSuperview) { + return; + } + REAUIView *targetTabScreen = [REAScreensHelper getActiveTabForTabNavigator:navTabScreen.reactSuperview]; REAUIView *targetScreen = [REAScreensHelper findTopScreenInChildren:targetTabScreen]; + + if (!targetScreen) { + return; + } + if (!layoutedScreen && _isTabNavigator) { // just wait for the next layout computation for your screen return; diff --git a/packages/react-native-reanimated/apple/reanimated/apple/REAModule.h b/packages/react-native-reanimated/apple/reanimated/apple/REAModule.h index 6824efa838e..634be0f8932 100644 --- a/packages/react-native-reanimated/apple/reanimated/apple/REAModule.h +++ b/packages/react-native-reanimated/apple/reanimated/apple/REAModule.h @@ -1,7 +1,7 @@ #ifdef RCT_NEW_ARCH_ENABLED -#import -#import -#import +#if REACT_NATIVE_MINOR_VERSION >= 75 +#import +#endif // REACT_NATIVE_MINOR_VERSION >= 75 #import #else // RCT_NEW_ARCH_ENABLED #import @@ -18,8 +18,9 @@ @interface REAModule : RCTEventEmitter #ifdef RCT_NEW_ARCH_ENABLED = 75 + RCTCallInvokerModule, +#endif // REACT_NATIVE_MINOR_VERSION >= 75 #else #import #import +#if REACT_NATIVE_MINOR_VERSION >= 75 +#import +#endif // REACT_NATIVE_MINOR_VERSION >= 75 #endif // RCT_NEW_ARCH_ENABLED #ifdef RCT_NEW_ARCH_ENABLED @@ -14,13 +17,13 @@ #endif // RCT_NEW_ARCH_ENABLED #import -#import #import #import #import #import #import +#import #import #import #import @@ -36,10 +39,14 @@ @interface RCTBridge (JSIRuntime) - (void *)runtime; @end +#if defined(RCT_NEW_ARCH_ENABLED) && REACT_NATIVE_MINOR_VERSION >= 75 +// nothing +#else // defined(RCT_NEW_ARCH_ENABLED) && REACT_NATIVE_MINOR_VERSION >= 75 @interface RCTBridge (RCTTurboModule) - (std::shared_ptr)jsCallInvoker; - (void)_tryAndHandleError:(dispatch_block_t)block; @end +#endif // RCT_NEW_ARCH_ENABLED #ifdef RCT_NEW_ARCH_ENABLED static __strong REAInitializerRCTFabricSurface *reaSurface; @@ -50,7 +57,7 @@ - (void)_tryAndHandleError:(dispatch_block_t)block; @implementation REAModule { #ifdef RCT_NEW_ARCH_ENABLED __weak RCTSurfacePresenter *_surfacePresenter; - std::weak_ptr weakNativeReanimatedModule_; + std::weak_ptr weakReanimatedModuleProxy_; #else NSMutableArray *_operations; #endif // RCT_NEW_ARCH_ENABLED @@ -58,13 +65,12 @@ @implementation REAModule { SingleInstanceChecker singleInstanceChecker_; #endif // NDEBUG bool hasListeners; - bool _isBridgeless; } @synthesize moduleRegistry = _moduleRegistry; -#ifdef RCT_NEW_ARCH_ENABLED -@synthesize runtimeExecutor = _runtimeExecutor; -#endif // RCT_NEW_ARCH_ENABLED +#if defined(RCT_NEW_ARCH_ENABLED) && REACT_NATIVE_MINOR_VERSION >= 75 +@synthesize callInvoker = _callInvoker; +#endif // defined(RCT_NEW_ARCH_ENABLED) && REACT_NATIVE_MINOR_VERSION >= 75 RCT_EXPORT_MODULE(ReanimatedModule); @@ -104,8 +110,8 @@ - (void)injectDependencies:(jsi::Runtime &)runtime { const auto &uiManager = [self getUIManager]; react_native_assert(uiManager.get() != nil); - if (auto nativeReanimatedModule = weakNativeReanimatedModule_.lock()) { - nativeReanimatedModule->initializeFabric(uiManager); + if (auto reanimatedModuleProxy = weakReanimatedModuleProxy_.lock()) { + reanimatedModuleProxy->initializeFabric(uiManager); } } @@ -142,16 +148,16 @@ - (void)attachReactEventListener if (strongSelf == nil) { return; } - if (auto nativeReanimatedModule = strongSelf->weakNativeReanimatedModule_.lock()) { + if (auto reanimatedModuleProxy = strongSelf->weakReanimatedModuleProxy_.lock()) { auto eventListener = - std::make_shared([nativeReanimatedModule](const RawEvent &rawEvent) { + std::make_shared([reanimatedModuleProxy](const RawEvent &rawEvent) { if (!RCTIsMainQueue()) { // event listener called on the JS thread, let's ignore this event // as we cannot safely access worklet runtime here // and also we don't care about topLayout events return false; } - return nativeReanimatedModule->handleRawEvent(rawEvent, CACurrentMediaTime() * 1000); + return reanimatedModuleProxy->handleRawEvent(rawEvent, CACurrentMediaTime() * 1000); }); [scheduler addEventListener:eventListener]; } @@ -167,7 +173,6 @@ - (void)attachReactEventListener - (void)setSurfacePresenter:(id)surfacePresenter { _surfacePresenter = surfacePresenter; - _isBridgeless = true; } - (void)setBridge:(RCTBridge *)bridge @@ -193,9 +198,10 @@ - (void)setBridge:(RCTBridge *)bridge - (void)setReaSurfacePresenter { - if (reaSurface == nil) { - // we need only one instance because SurfacePresenter is the same during the application lifetime - reaSurface = [[REAInitializerRCTFabricSurface alloc] init]; + if (_surfacePresenter && ![_surfacePresenter surfaceForRootTag:reaSurface.rootTag]) { + if (!reaSurface) { + reaSurface = [[REAInitializerRCTFabricSurface alloc] init]; + } [_surfacePresenter registerSurface:reaSurface]; } reaSurface.reaModule = self; @@ -279,38 +285,23 @@ - (void)sendEventWithName:(NSString *)eventName body:(id)body RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(installTurboModule) { WorkletsModule *workletsModule = [_moduleRegistry moduleForName:"WorkletsModule"]; - if (_isBridgeless) { -#ifdef RCT_NEW_ARCH_ENABLED - RCTCxxBridge *cxxBridge = (RCTCxxBridge *)self.bridge; - auto &rnRuntime = *(jsi::Runtime *)cxxBridge.runtime; - auto executorFunction = ([executor = _runtimeExecutor](std::function &&callback) { - // Convert to Objective-C block so it can be captured properly. - __block auto callbackBlock = callback; - - [executor execute:^(jsi::Runtime &runtime) { - callbackBlock(runtime); - }]; - }); - auto nativeReanimatedModule = reanimated::createReanimatedModuleBridgeless( - self, _moduleRegistry, rnRuntime, workletsModule, executorFunction); - [self attachReactEventListener]; - [self commonInit:nativeReanimatedModule withRnRuntime:rnRuntime]; -#else - [NSException raise:@"Missing bridge" format:@"[Reanimated] Failed to obtain the bridge."]; -#endif // RCT_NEW_ARCH_ENABLED - } else { - facebook::jsi::Runtime *jsiRuntime = [self.bridge respondsToSelector:@selector(runtime)] - ? reinterpret_cast(self.bridge.runtime) - : nullptr; - if (jsiRuntime) { - auto nativeReanimatedModule = - reanimated::createReanimatedModule(self, self.bridge, self.bridge.jsCallInvoker, workletsModule); - jsi::Runtime &rnRuntime = *jsiRuntime; +#if defined(RCT_NEW_ARCH_ENABLED) && REACT_NATIVE_MINOR_VERSION >= 75 + auto jsCallInvoker = _callInvoker.callInvoker; +#else // defined(RCT_NEW_ARCH_ENABLED) && REACT_NATIVE_MINOR_VERSION >= 75 + auto jsCallInvoker = self.bridge.jsCallInvoker; +#endif // defined(RCT_NEW_ARCH_ENABLED) && REACT_NATIVE_MINOR_VERSION >= 75 + auto jsiRuntime = reinterpret_cast(self.bridge.runtime); + auto isBridgeless = ![self.bridge isKindOfClass:[RCTCxxBridge class]]; + + assert(jsiRuntime != nullptr); + + auto reanimatedModuleProxy = + reanimated::createReanimatedModule(self, self.bridge, jsCallInvoker, workletsModule, isBridgeless); + + jsi::Runtime &rnRuntime = *jsiRuntime; + [self commonInit:reanimatedModuleProxy withRnRuntime:rnRuntime]; - [self commonInit:nativeReanimatedModule withRnRuntime:rnRuntime]; - } - } return @YES; } @@ -322,13 +313,13 @@ - (void)sendEventWithName:(NSString *)eventName body:(id)body } #endif // RCT_NEW_ARCH_ENABLED -- (void)commonInit:(std::shared_ptr)nativeReanimatedModule - withRnRuntime:(jsi::Runtime &)rnRuntime +- (void)commonInit:(std::shared_ptr)reanimatedModuleProxy withRnRuntime:(jsi::Runtime &)rnRuntime { WorkletRuntimeCollector::install(rnRuntime); - RNRuntimeDecorator::decorate(rnRuntime, nativeReanimatedModule); + RNRuntimeDecorator::decorate(rnRuntime, reanimatedModuleProxy); #ifdef RCT_NEW_ARCH_ENABLED - weakNativeReanimatedModule_ = nativeReanimatedModule; + [self attachReactEventListener]; + weakReanimatedModuleProxy_ = reanimatedModuleProxy; if (self->_surfacePresenter != nil) { // reload, uiManager is null right now, we need to wait for `installReanimatedAfterReload` [self injectDependencies:rnRuntime]; diff --git a/packages/react-native-reanimated/apple/reanimated/apple/REANodesManager.mm b/packages/react-native-reanimated/apple/reanimated/apple/REANodesManager.mm index ec86d086b92..eb0a70c50ac 100644 --- a/packages/react-native-reanimated/apple/reanimated/apple/REANodesManager.mm +++ b/packages/react-native-reanimated/apple/reanimated/apple/REANodesManager.mm @@ -313,7 +313,7 @@ - (void)onAnimationFrame:(READisplayLink *)displayLink - (void)performOperations { #ifdef RCT_NEW_ARCH_ENABLED - _performOperations(); // calls NativeReanimatedModule::performOperations + _performOperations(); // calls ReanimatedModuleProxy::performOperations _wantRunUpdates = NO; #else if (_operationsInBatch.count != 0) { diff --git a/packages/react-native-reanimated/apple/reanimated/apple/native/NativeProxy.h b/packages/react-native-reanimated/apple/reanimated/apple/native/NativeProxy.h index 7e68aa16cd6..41fad911f95 100644 --- a/packages/react-native-reanimated/apple/reanimated/apple/native/NativeProxy.h +++ b/packages/react-native-reanimated/apple/reanimated/apple/native/NativeProxy.h @@ -1,7 +1,7 @@ #if __cplusplus #import -#import +#import #import #import #import @@ -14,31 +14,22 @@ namespace reanimated { static inline bool getIsReducedMotion(); -std::shared_ptr createReanimatedModule( +std::shared_ptr createReanimatedModule( REAModule *reaModule, RCTBridge *bridge, const std::shared_ptr &jsInvoker, - WorkletsModule *workletsModule); - -#ifdef RCT_NEW_ARCH_ENABLED -std::shared_ptr -createReanimatedModuleBridgeless( - REAModule *reaModule, - RCTModuleRegistry *moduleRegistry, - jsi::Runtime &runtime, WorkletsModule *workletsModule, - RuntimeExecutor runtimeExecutor); -#endif // RCT_NEW_ARCH_ENABLED + bool isBridgeless); void commonInit( REAModule *reaModule, - std::shared_ptr nativeReanimatedModule); + std::shared_ptr reanimatedModuleProxy); #ifdef RCT_NEW_ARCH_ENABLED // nothing #else // RCT_NEW_ARCH_ENABLED void setupLayoutAnimationCallbacks( - std::shared_ptr nativeReanimatedModule, + std::shared_ptr reanimatedModuleProxy, REAAnimationsManager *animationsManager); #endif // RCT_NEW_ARCH_ENABLED diff --git a/packages/react-native-reanimated/apple/reanimated/apple/native/NativeProxy.mm b/packages/react-native-reanimated/apple/reanimated/apple/native/NativeProxy.mm index b960c6c642b..3e66116c319 100644 --- a/packages/react-native-reanimated/apple/reanimated/apple/native/NativeProxy.mm +++ b/packages/react-native-reanimated/apple/reanimated/apple/native/NativeProxy.mm @@ -1,5 +1,5 @@ #import -#import +#import #import #import #import @@ -12,9 +12,8 @@ #import #import #import -#import #import -#import + #import #ifndef NDEBUG @@ -22,6 +21,7 @@ #endif #import +#import #ifdef RCT_NEW_ARCH_ENABLED #import @@ -55,107 +55,55 @@ static inline bool getIsReducedMotion() #endif // __has_include() } -std::shared_ptr createReanimatedModule( +std::shared_ptr createReanimatedModule( REAModule *reaModule, RCTBridge *bridge, const std::shared_ptr &jsInvoker, - WorkletsModule *workletsModule) + WorkletsModule *workletsModule, + bool isBridgeless) { auto nodesManager = reaModule.nodesManager; jsi::Runtime &rnRuntime = *reinterpret_cast(reaModule.bridge.runtime); - auto jsQueue = std::make_shared([NSRunLoop currentRunLoop], ^(NSError *error) { - throw error; - }); - PlatformDepMethodsHolder platformDepMethodsHolder = makePlatformDepMethodsHolder(bridge, nodesManager, reaModule); - std::shared_ptr uiScheduler = std::make_shared(); - std::shared_ptr jsScheduler = std::make_shared(rnRuntime, jsInvoker); - constexpr auto isBridgeless = false; + const auto workletsModuleProxy = [workletsModule getWorkletsModuleProxy]; - const auto nativeWorkletsModule = [workletsModule getNativeWorkletsModule]; + auto reanimatedModuleProxy = std::make_shared( + workletsModuleProxy, rnRuntime, jsInvoker, platformDepMethodsHolder, isBridgeless, getIsReducedMotion()); - auto nativeReanimatedModule = std::make_shared( - nativeWorkletsModule, - rnRuntime, - jsScheduler, - jsQueue, - uiScheduler, - platformDepMethodsHolder, - isBridgeless, - getIsReducedMotion()); - - commonInit(reaModule, nativeReanimatedModule); + commonInit(reaModule, reanimatedModuleProxy); // Layout Animation callbacks setup #ifdef RCT_NEW_ARCH_ENABLED // nothing #else REAAnimationsManager *animationsManager = reaModule.animationsManager; - setupLayoutAnimationCallbacks(nativeReanimatedModule, animationsManager); + setupLayoutAnimationCallbacks(reanimatedModuleProxy, animationsManager); #endif // RCT_NEW_ARCH_ENABLED - return nativeReanimatedModule; -} - -#ifdef RCT_NEW_ARCH_ENABLED -std::shared_ptr createReanimatedModuleBridgeless( - REAModule *reaModule, - RCTModuleRegistry *moduleRegistry, - jsi::Runtime &runtime, - WorkletsModule *workletsModule, - RuntimeExecutor runtimeExecutor) -{ - auto nodesManager = reaModule.nodesManager; - - auto jsQueue = std::make_shared([NSRunLoop currentRunLoop], ^(NSError *error) { - throw error; - }); - - PlatformDepMethodsHolder platformDepMethodsHolder = - makePlatformDepMethodsHolderBridgeless(moduleRegistry, nodesManager, reaModule); - - const auto nativeWorkletsModule = [workletsModule getNativeWorkletsModule]; - auto uiScheduler = std::make_shared(); - auto jsScheduler = std::make_shared(runtime, runtimeExecutor); - constexpr auto isBridgeless = true; - - auto nativeReanimatedModule = std::make_shared( - nativeWorkletsModule, - runtime, - jsScheduler, - jsQueue, - uiScheduler, - platformDepMethodsHolder, - isBridgeless, - getIsReducedMotion()); - - commonInit(reaModule, nativeReanimatedModule); - - return nativeReanimatedModule; + return reanimatedModuleProxy; } -#endif // RCT_NEW_ARCH_ENABLED -void commonInit(REAModule *reaModule, std::shared_ptr nativeReanimatedModule) +void commonInit(REAModule *reaModule, std::shared_ptr reanimatedModuleProxy) { [reaModule.nodesManager registerEventHandler:^(id event) { // handles RCTEvents from RNGestureHandler std::string eventName = [event.eventName UTF8String]; int emitterReactTag = [event.viewTag intValue]; id eventData = [event arguments][2]; - jsi::Runtime &uiRuntime = nativeReanimatedModule->getUIRuntime(); + jsi::Runtime &uiRuntime = reanimatedModuleProxy->getUIRuntime(); jsi::Value payload = convertObjCObjectToJSIValue(uiRuntime, eventData); double currentTime = CACurrentMediaTime() * 1000; - nativeReanimatedModule->handleEvent(eventName, emitterReactTag, payload, currentTime); + reanimatedModuleProxy->handleEvent(eventName, emitterReactTag, payload, currentTime); }]; #ifdef RCT_NEW_ARCH_ENABLED - std::weak_ptr weakNativeReanimatedModule = nativeReanimatedModule; // to avoid retain cycle + std::weak_ptr weakReanimatedModuleProxy = reanimatedModuleProxy; // to avoid retain cycle [reaModule.nodesManager registerPerformOperations:^() { - if (auto nativeReanimatedModule = weakNativeReanimatedModule.lock()) { - nativeReanimatedModule->performOperations(); + if (auto reanimatedModuleProxy = weakReanimatedModuleProxy.lock()) { + reanimatedModuleProxy->performOperations(); } }]; #endif // RCT_NEW_ARCH_ENABLED @@ -165,14 +113,14 @@ void commonInit(REAModule *reaModule, std::shared_ptr na // nothing #else // RCT_NEW_ARCH_ENABLED void setupLayoutAnimationCallbacks( - std::shared_ptr nativeReanimatedModule, + std::shared_ptr reanimatedModuleProxy, REAAnimationsManager *animationsManager) { - std::weak_ptr weakNativeReanimatedModule = nativeReanimatedModule; // to avoid retain cycle + std::weak_ptr weakReanimatedModuleProxy = reanimatedModuleProxy; // to avoid retain cycle [animationsManager setAnimationStartingBlock:^(NSNumber *_Nonnull tag, LayoutAnimationType type, NSDictionary *_Nonnull values) { - if (auto nativeReanimatedModule = weakNativeReanimatedModule.lock()) { - jsi::Runtime &rt = nativeReanimatedModule->getUIRuntime(); + if (auto reanimatedModuleProxy = weakReanimatedModuleProxy.lock()) { + jsi::Runtime &rt = reanimatedModuleProxy->getUIRuntime(); jsi::Object yogaValues(rt); for (NSString *key in values.allKeys) { NSObject *value = values[key]; @@ -187,59 +135,59 @@ void setupLayoutAnimationCallbacks( yogaValues.setProperty(rt, [key UTF8String], [(NSNumber *)value doubleValue]); } } - nativeReanimatedModule->layoutAnimationsManager().startLayoutAnimation(rt, [tag intValue], type, yogaValues); + reanimatedModuleProxy->layoutAnimationsManager().startLayoutAnimation(rt, [tag intValue], type, yogaValues); } }]; [animationsManager setHasAnimationBlock:^(NSNumber *_Nonnull tag, LayoutAnimationType type) { - if (auto nativeReanimatedModule = weakNativeReanimatedModule.lock()) { + if (auto reanimatedModuleProxy = weakReanimatedModuleProxy.lock()) { bool hasLayoutAnimation = - nativeReanimatedModule->layoutAnimationsManager().hasLayoutAnimation([tag intValue], type); + reanimatedModuleProxy->layoutAnimationsManager().hasLayoutAnimation([tag intValue], type); return hasLayoutAnimation ? YES : NO; } return NO; }]; [animationsManager setShouldAnimateExitingBlock:^(NSNumber *_Nonnull tag, BOOL shouldAnimate) { - if (auto nativeReanimatedModule = weakNativeReanimatedModule.lock()) { + if (auto reanimatedModuleProxy = weakReanimatedModuleProxy.lock()) { bool shouldAnimateExiting = - nativeReanimatedModule->layoutAnimationsManager().shouldAnimateExiting([tag intValue], shouldAnimate); + reanimatedModuleProxy->layoutAnimationsManager().shouldAnimateExiting([tag intValue], shouldAnimate); return shouldAnimateExiting ? YES : NO; } return NO; }]; [animationsManager setAnimationRemovingBlock:^(NSNumber *_Nonnull tag) { - if (auto nativeReanimatedModule = weakNativeReanimatedModule.lock()) { - nativeReanimatedModule->layoutAnimationsManager().clearLayoutAnimationConfig([tag intValue]); + if (auto reanimatedModuleProxy = weakReanimatedModuleProxy.lock()) { + reanimatedModuleProxy->layoutAnimationsManager().clearLayoutAnimationConfig([tag intValue]); } }]; [animationsManager setSharedTransitionRemovingBlock:^(NSNumber *_Nonnull tag) { - if (auto nativeReanimatedModule = weakNativeReanimatedModule.lock()) { - nativeReanimatedModule->layoutAnimationsManager().clearSharedTransitionConfig([tag intValue]); + if (auto reanimatedModuleProxy = weakReanimatedModuleProxy.lock()) { + reanimatedModuleProxy->layoutAnimationsManager().clearSharedTransitionConfig([tag intValue]); } }]; [animationsManager setCancelAnimationBlock:^(NSNumber *_Nonnull tag) { - if (auto nativeReanimatedModule = weakNativeReanimatedModule.lock()) { - jsi::Runtime &rt = nativeReanimatedModule->getUIRuntime(); - nativeReanimatedModule->layoutAnimationsManager().cancelLayoutAnimation(rt, [tag intValue]); + if (auto reanimatedModuleProxy = weakReanimatedModuleProxy.lock()) { + jsi::Runtime &rt = reanimatedModuleProxy->getUIRuntime(); + reanimatedModuleProxy->layoutAnimationsManager().cancelLayoutAnimation(rt, [tag intValue]); } }]; [animationsManager setFindPrecedingViewTagForTransitionBlock:^NSNumber *_Nullable(NSNumber *_Nonnull tag) { - if (auto nativeReanimatedModule = weakNativeReanimatedModule.lock()) { + if (auto reanimatedModuleProxy = weakReanimatedModuleProxy.lock()) { int resultTag = - nativeReanimatedModule->layoutAnimationsManager().findPrecedingViewTagForTransition([tag intValue]); + reanimatedModuleProxy->layoutAnimationsManager().findPrecedingViewTagForTransition([tag intValue]); return resultTag == -1 ? nil : @(resultTag); } return nil; }]; [animationsManager setGetSharedGroupBlock:^NSArray *_Nullable(NSNumber *_Nonnull tag) { - if (auto nativeReanimatedModule = weakNativeReanimatedModule.lock()) { - const auto &results = nativeReanimatedModule->layoutAnimationsManager().getSharedGroup([tag intValue]); + if (auto reanimatedModuleProxy = weakReanimatedModuleProxy.lock()) { + const auto &results = reanimatedModuleProxy->layoutAnimationsManager().getSharedGroup([tag intValue]); NSMutableArray *convertedResult = [NSMutableArray new]; for (const int tag : results) { [convertedResult addObject:@(tag)]; @@ -250,11 +198,11 @@ void setupLayoutAnimationCallbacks( }]; #ifndef NDEBUG [animationsManager setCheckDuplicateSharedTagBlock:^(REAUIView *view, NSNumber *_Nonnull viewTag) { - if (auto nativeReanimatedModule = weakNativeReanimatedModule.lock()) { + if (auto reanimatedModuleProxy = weakReanimatedModuleProxy.lock()) { REAUIView *screen = [REAScreensHelper getScreenForView:(REAUIView *)view]; auto screenTag = [screen.reactTag intValue]; // Here we check if there are duplicate tags (we don't use return bool value currently) - nativeReanimatedModule->layoutAnimationsManager().checkDuplicateSharedTag([viewTag intValue], screenTag); + reanimatedModuleProxy->layoutAnimationsManager().checkDuplicateSharedTag([viewTag intValue], screenTag); } }]; #endif // NDEBUG diff --git a/packages/react-native-reanimated/apple/reanimated/apple/native/PlatformDepMethodsHolderImpl.h b/packages/react-native-reanimated/apple/reanimated/apple/native/PlatformDepMethodsHolderImpl.h index be566d82d4d..89c937dd8fa 100644 --- a/packages/react-native-reanimated/apple/reanimated/apple/native/PlatformDepMethodsHolderImpl.h +++ b/packages/react-native-reanimated/apple/reanimated/apple/native/PlatformDepMethodsHolderImpl.h @@ -5,7 +5,7 @@ #import #import #import -#import +#import #import #import diff --git a/packages/react-native-reanimated/apple/reanimated/apple/native/PlatformDepMethodsHolderImpl.mm b/packages/react-native-reanimated/apple/reanimated/apple/native/PlatformDepMethodsHolderImpl.mm index c1a6789aaab..4edfe55cc73 100644 --- a/packages/react-native-reanimated/apple/reanimated/apple/native/PlatformDepMethodsHolderImpl.mm +++ b/packages/react-native-reanimated/apple/reanimated/apple/native/PlatformDepMethodsHolderImpl.mm @@ -10,9 +10,7 @@ #import #import #import -#import #import -#import #import #ifndef NDEBUG @@ -20,6 +18,7 @@ #endif #import +#import #ifdef RCT_NEW_ARCH_ENABLED #import diff --git a/packages/react-native-reanimated/apple/reanimated/apple/native/REAIOSUIScheduler.h b/packages/react-native-reanimated/apple/worklets/apple/IOSUIScheduler.h similarity index 73% rename from packages/react-native-reanimated/apple/reanimated/apple/native/REAIOSUIScheduler.h rename to packages/react-native-reanimated/apple/worklets/apple/IOSUIScheduler.h index 9b7e0ff3db8..b6702fba08f 100644 --- a/packages/react-native-reanimated/apple/reanimated/apple/native/REAIOSUIScheduler.h +++ b/packages/react-native-reanimated/apple/worklets/apple/IOSUIScheduler.h @@ -5,15 +5,15 @@ #import -namespace reanimated { +namespace worklets { using namespace facebook; using namespace react; using namespace worklets; -class REAIOSUIScheduler : public UIScheduler { +class IOSUIScheduler : public UIScheduler { public: void scheduleOnUI(std::function job) override; }; -} // namespace reanimated +} // namespace worklets diff --git a/packages/react-native-reanimated/apple/reanimated/apple/native/REAIOSUIScheduler.mm b/packages/react-native-reanimated/apple/worklets/apple/IOSUIScheduler.mm similarity index 60% rename from packages/react-native-reanimated/apple/reanimated/apple/native/REAIOSUIScheduler.mm rename to packages/react-native-reanimated/apple/worklets/apple/IOSUIScheduler.mm index dbf1f050dfe..ced9f39b2f8 100644 --- a/packages/react-native-reanimated/apple/reanimated/apple/native/REAIOSUIScheduler.mm +++ b/packages/react-native-reanimated/apple/worklets/apple/IOSUIScheduler.mm @@ -1,11 +1,11 @@ -#import +#import -namespace reanimated { +namespace worklets { using namespace facebook; using namespace react; -void REAIOSUIScheduler::scheduleOnUI(std::function job) +void IOSUIScheduler::scheduleOnUI(std::function job) { if ([NSThread isMainThread]) { job(); @@ -21,4 +21,4 @@ } } -} // namespace reanimated +} // namespace worklets diff --git a/packages/react-native-reanimated/apple/reanimated/apple/native/PlatformLogger.mm b/packages/react-native-reanimated/apple/worklets/apple/PlatformLogger.mm similarity index 82% rename from packages/react-native-reanimated/apple/reanimated/apple/native/PlatformLogger.mm rename to packages/react-native-reanimated/apple/worklets/apple/PlatformLogger.mm index bca68ec2dd3..129180e05c5 100644 --- a/packages/react-native-reanimated/apple/reanimated/apple/native/PlatformLogger.mm +++ b/packages/react-native-reanimated/apple/worklets/apple/PlatformLogger.mm @@ -1,7 +1,7 @@ #import -#import +#import -namespace reanimated { +namespace worklets { void PlatformLogger::log(const char *str) { @@ -28,4 +28,4 @@ log(b ? "true" : "false"); } -} // namespace reanimated +} // namespace worklets diff --git a/packages/react-native-reanimated/apple/reanimated/apple/native/REAMessageThread.h b/packages/react-native-reanimated/apple/worklets/apple/WorkletsMessageThread.h similarity index 87% rename from packages/react-native-reanimated/apple/reanimated/apple/native/REAMessageThread.h rename to packages/react-native-reanimated/apple/worklets/apple/WorkletsMessageThread.h index 16f47378a33..2ac8055a090 100644 --- a/packages/react-native-reanimated/apple/reanimated/apple/native/REAMessageThread.h +++ b/packages/react-native-reanimated/apple/worklets/apple/WorkletsMessageThread.h @@ -10,7 +10,7 @@ namespace facebook { namespace react { -class REAMessageThread : public RCTMessageThread { +class WorkletsMessageThread : public RCTMessageThread { public: using RCTMessageThread::RCTMessageThread; virtual void quitSynchronous() override; diff --git a/packages/react-native-reanimated/apple/reanimated/apple/native/REAMessageThread.mm b/packages/react-native-reanimated/apple/worklets/apple/WorkletsMessageThread.mm similarity index 67% rename from packages/react-native-reanimated/apple/reanimated/apple/native/REAMessageThread.mm rename to packages/react-native-reanimated/apple/worklets/apple/WorkletsMessageThread.mm index be19a904ef4..b5e46a10e56 100644 --- a/packages/react-native-reanimated/apple/reanimated/apple/native/REAMessageThread.mm +++ b/packages/react-native-reanimated/apple/worklets/apple/WorkletsMessageThread.mm @@ -1,4 +1,4 @@ -#import +#import #import #import @@ -11,10 +11,10 @@ namespace react { // Essentially the same as RCTMessageThread, but with public fields. -struct REAMessageThreadPublic { - // I don't know why we need three vtables (if you know then feel free to - // explain it instead of this message), but this is what makes the casts in - // quitSynchronous() work correctly. +struct WorkletsMessageThreadPublic { + // I don't know why we need three vtables (if you know then feel free to#import + // explain it instead of this message), but this is what makes the casts + // in quitSynchronous() work correctly. void *vtable1; void *vtable2; void *vtable3; @@ -27,10 +27,10 @@ // is an assertion for that in the destructor of RCTMessageThread, but we have // to override quitSynchronous() as it would quit the main looper and freeze // the app. -void REAMessageThread::quitSynchronous() +void WorkletsMessageThread::quitSynchronous() { RCTMessageThread *rctThread = static_cast(this); - REAMessageThreadPublic *rctThreadPublic = reinterpret_cast(rctThread); + WorkletsMessageThreadPublic *rctThreadPublic = reinterpret_cast(rctThread); rctThreadPublic->m_shutdown = true; } diff --git a/packages/react-native-reanimated/apple/worklets/apple/WorkletsModule.h b/packages/react-native-reanimated/apple/worklets/apple/WorkletsModule.h index 25b96da8b9b..5a3b01a10dd 100644 --- a/packages/react-native-reanimated/apple/worklets/apple/WorkletsModule.h +++ b/packages/react-native-reanimated/apple/worklets/apple/WorkletsModule.h @@ -1,9 +1,9 @@ #import #import -#import +#import @interface WorkletsModule : RCTEventEmitter -- (std::shared_ptr)getNativeWorkletsModule; +- (std::shared_ptr)getWorkletsModuleProxy; @end diff --git a/packages/react-native-reanimated/apple/worklets/apple/WorkletsModule.mm b/packages/react-native-reanimated/apple/worklets/apple/WorkletsModule.mm index 78b1759f5c9..15c03eaf398 100644 --- a/packages/react-native-reanimated/apple/worklets/apple/WorkletsModule.mm +++ b/packages/react-native-reanimated/apple/worklets/apple/WorkletsModule.mm @@ -1,9 +1,12 @@ #import +#import #import +#import +#import #import -using worklets::NativeWorkletsModule; using worklets::RNRuntimeWorkletDecorator; +using worklets::WorkletsModuleProxy; @interface RCTBridge (JSIRuntime) - (void *)runtime; @@ -15,12 +18,15 @@ - (void)_tryAndHandleError:(dispatch_block_t)block; @end @implementation WorkletsModule { - std::shared_ptr nativeWorkletsModule_; + std::shared_ptr workletsModuleProxy_; +#ifndef NDEBUG + worklets::SingleInstanceChecker singleInstanceChecker_; +#endif // NDEBUG } -- (std::shared_ptr)getNativeWorkletsModule +- (std::shared_ptr)getWorkletsModuleProxy { - return nativeWorkletsModule_; + return workletsModuleProxy_; } @synthesize moduleRegistry = _moduleRegistry; @@ -31,8 +37,17 @@ @implementation WorkletsModule { { auto *bridge = self.bridge; auto &rnRuntime = *(jsi::Runtime *)bridge.runtime; - nativeWorkletsModule_ = std::make_shared(std::string([valueUnpackerCode UTF8String])); - RNRuntimeWorkletDecorator::decorate(rnRuntime, nativeWorkletsModule_); + auto jsQueue = std::make_shared([NSRunLoop currentRunLoop], ^(NSError *error) { + throw error; + }); + + std::string valueUnpackerCodeStr = [valueUnpackerCode UTF8String]; + auto jsCallInvoker = bridge.jsCallInvoker; + auto jsScheduler = std::make_shared(rnRuntime, jsCallInvoker); + auto uiScheduler = std::make_shared(); + workletsModuleProxy_ = + std::make_shared(valueUnpackerCodeStr, jsQueue, jsCallInvoker, jsScheduler, uiScheduler); + RNRuntimeWorkletDecorator::decorate(rnRuntime, workletsModuleProxy_); return @YES; } diff --git a/packages/react-native-reanimated/package.json b/packages/react-native-reanimated/package.json index 50d8d9e89c6..57615771f15 100644 --- a/packages/react-native-reanimated/package.json +++ b/packages/react-native-reanimated/package.json @@ -1,21 +1,23 @@ { "name": "react-native-reanimated", - "version": "3.17.0-rc.0", + "version": "3.17.0-rc.1", "description": "More powerful alternative to Animated library for React Native.", "scripts": { "test": "jest", "lint": "yarn lint:js && yarn lint:plugin && yarn lint:common && yarn lint:android && yarn lint:apple", "lint:js": "eslint --ext '.js,.ts,.tsx' src __tests__ __typetests__ && yarn prettier --check src __tests__ __typetests__", "lint:plugin": "cd plugin && yarn lint", - "lint:android": "./scripts/validate-android.sh && ./android/gradlew -p android spotlessCheck -q && ./scripts/cpplint.sh android/src && yarn format:android:cpp --dry-run -Werror", + "lint:android": "./scripts/validate-android.sh && ./android/gradlew -p android spotlessCheck -q && ./scripts/cpplint.sh android/src && yarn format:android:cpp --dry-run -Werror && yarn lint:cmake", "lint:common": "./scripts/validate-common.sh && ./scripts/cpplint.sh Common && yarn format:common --dry-run -Werror", "lint:apple": "./scripts/validate-apple.sh && yarn format:apple --dry-run -Werror", - "format": "yarn format:js && yarn format:plugin && yarn format:apple && yarn format:android:java && yarn format:android:cpp && yarn format:common", + "lint:cmake": "find ./android -type d \\( -name build -o -name .cxx \\) -prune -o -type f -name 'CMakeLists.txt' -print | xargs ./scripts/lint-cmake.sh", + "format": "yarn format:js && yarn format:plugin && yarn format:apple && yarn format:android:java && yarn format:android:cpp && yarn format:android:cmake && yarn format:common", "format:js": "prettier --write --list-different src __tests__ __typetests__", "format:plugin": "cd plugin && yarn format", "format:apple": "find apple -iname \"*.h\" -o -iname \"*.m\" -o -iname \"*.mm\" -o -iname \"*.cpp\" | xargs clang-format -i", "format:android:java": "node ./scripts/format-java.js", "format:android:cpp": "find android/src -iname \"*.h\" -o -iname \"*.cpp\" | xargs clang-format -i", + "format:android:cmake": "find ./android -type d \\( -name build -o -name .cxx \\) -prune -o -type f -name 'CMakeLists.txt' -print | xargs ./scripts/format-cmake.sh", "format:common": "find Common -iname \"*.h\" -o -iname \"*.cpp\" | xargs clang-format -i", "find-unused-code:js": "yarn ts-prune --ignore \"index|.web.\" --error", "type:check": "yarn type:check:src && yarn type:check:plugin && ./scripts/test-ts.sh ../../apps/common-app/src/App.tsx __typetests__/common", @@ -99,10 +101,10 @@ "@babel/core": "^7.25.2", "@babel/preset-env": "^7.25.3", "@babel/types": "^7.20.0", - "@react-native/babel-preset": "0.76.1", - "@react-native/eslint-config": "0.76.1", - "@react-native/metro-config": "0.76.1", - "@react-native/typescript-config": "0.76.1", + "@react-native/babel-preset": "0.76.5", + "@react-native/eslint-config": "0.76.5", + "@react-native/metro-config": "0.76.5", + "@react-native/typescript-config": "0.76.5", "@testing-library/jest-native": "^4.0.4", "@testing-library/react-hooks": "^8.0.0", "@testing-library/react-native": "^12.5.2", @@ -142,8 +144,8 @@ "madge": "^5.0.1", "prettier": "^3.3.3", "react": "18.3.1", - "react-native": "^0.76.1", - "react-native-builder-bob": "0.30.2", + "react-native": "0.76.5", + "react-native-builder-bob": "0.33.1", "react-native-gesture-handler": "2.20.2", "react-native-web": "0.19.11", "react-test-renderer": "18.2.0", @@ -158,7 +160,8 @@ [ "module", { - "esm": true + "esm": true, + "jsxRuntime": "classic" } ], "typescript" @@ -177,6 +180,5 @@ "./lib/module/core.js", "./lib/module/initializers.js", "./lib/module/index.js" - ], - "packageManager": "yarn@4.1.1" + ] } diff --git a/packages/react-native-reanimated/plugin/package.json b/packages/react-native-reanimated/plugin/package.json index 62ebe231ff4..611907d76e6 100644 --- a/packages/react-native-reanimated/plugin/package.json +++ b/packages/react-native-reanimated/plugin/package.json @@ -10,7 +10,7 @@ "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/traverse": "^7.20.0", "@babel/types": "^7.20.0", - "@react-native/eslint-config": "0.76.0", + "@react-native/eslint-config": "0.76.5", "@types/node": "^18.15.11", "@typescript-eslint/eslint-plugin": "^7.0.2", "@typescript-eslint/parser": "^7.0.2", diff --git a/packages/react-native-reanimated/scripts/format-cmake.sh b/packages/react-native-reanimated/scripts/format-cmake.sh new file mode 100755 index 00000000000..a2d8c208364 --- /dev/null +++ b/packages/react-native-reanimated/scripts/format-cmake.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +if ! which cmake-format >/dev/null; then + echo "error: cmake-format is not installed" + exit 1 +fi + +cmake-format -i "$@" diff --git a/packages/react-native-reanimated/scripts/lint-cmake.sh b/packages/react-native-reanimated/scripts/lint-cmake.sh new file mode 100755 index 00000000000..7f0066fb2a9 --- /dev/null +++ b/packages/react-native-reanimated/scripts/lint-cmake.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +if ! which cmake-lint >/dev/null; then + echo "error: cmake-lint is not installed" + exit 1 +fi + +cmake-lint "$@" diff --git a/packages/react-native-reanimated/src/ReanimatedModule/NativeReanimated.ts b/packages/react-native-reanimated/src/ReanimatedModule/NativeReanimated.ts index 51e084c9d79..3ff0ef98727 100644 --- a/packages/react-native-reanimated/src/ReanimatedModule/NativeReanimated.ts +++ b/packages/react-native-reanimated/src/ReanimatedModule/NativeReanimated.ts @@ -6,6 +6,7 @@ import type { LayoutAnimationBatchItem, IReanimatedModule, IWorkletsModule, + WorkletFunction, } from '../commonTypes'; import { checkCppVersion } from '../platform-specific/checkCppVersion'; import { jsVersion } from '../platform-specific/jsVersion'; @@ -64,18 +65,6 @@ See https://docs.swmansion.com/react-native-reanimated/docs/guides/troubleshooti this.#reanimatedModuleProxy = global.__reanimatedModuleProxy; } - makeShareableClone( - value: T, - shouldPersistRemote: boolean, - nativeStateSource?: object - ) { - return this.#reanimatedModuleProxy.makeShareableClone( - value, - shouldPersistRemote, - nativeStateSource - ); - } - scheduleOnUI(shareable: ShareableRef) { return this.#reanimatedModuleProxy.scheduleOnUI(shareable); } @@ -177,7 +166,7 @@ See https://docs.swmansion.com/react-native-reanimated/docs/guides/troubleshooti } subscribeForKeyboardEvents( - handler: ShareableRef, + handler: ShareableRef, isStatusBarTranslucent: boolean, isNavigationBarTranslucent: boolean ) { diff --git a/packages/react-native-reanimated/src/ReanimatedModule/js-reanimated/JSReanimated.ts b/packages/react-native-reanimated/src/ReanimatedModule/js-reanimated/JSReanimated.ts index 05c04c97e74..e4fa3b8a008 100644 --- a/packages/react-native-reanimated/src/ReanimatedModule/js-reanimated/JSReanimated.ts +++ b/packages/react-native-reanimated/src/ReanimatedModule/js-reanimated/JSReanimated.ts @@ -12,6 +12,7 @@ import type { ShareableRef, Value3D, ValueRotation, + WorkletFunction, } from '../../commonTypes'; import type { WebSensor } from './WebSensor'; import { mockedRequestAnimationFrame } from '../../mockedRequestAnimationFrame'; @@ -42,12 +43,6 @@ class JSReanimated implements IReanimatedModule { sensors = new Map(); platform?: Platform = undefined; - makeShareableClone(): ShareableRef { - throw new ReanimatedError( - 'makeShareableClone should never be called in JSReanimated.' - ); - } - scheduleOnUI(worklet: ShareableRef) { // @ts-ignore web implementation has still not been updated after the rewrite, this will be addressed once the web implementation updates are ready requestAnimationFrameImpl(worklet); @@ -216,7 +211,7 @@ class JSReanimated implements IReanimatedModule { } } - subscribeForKeyboardEvents(_: ShareableRef): number { + subscribeForKeyboardEvents(_: ShareableRef): number { if (isWeb()) { logger.warn('useAnimatedKeyboard is not available on web yet.'); } else if (isJest()) { diff --git a/packages/react-native-reanimated/src/ReanimatedModule/reanimatedModuleProxy.ts b/packages/react-native-reanimated/src/ReanimatedModule/reanimatedModuleProxy.ts index 70fc5c7f0c2..5d334fb9897 100644 --- a/packages/react-native-reanimated/src/ReanimatedModule/reanimatedModuleProxy.ts +++ b/packages/react-native-reanimated/src/ReanimatedModule/reanimatedModuleProxy.ts @@ -6,17 +6,12 @@ import type { Value3D, ValueRotation, LayoutAnimationBatchItem, + WorkletFunction, } from '../commonTypes'; import type { WorkletRuntime } from '../runtimes'; /** Type of `__reanimatedModuleProxy` injected with JSI. */ export interface ReanimatedModuleProxy { - makeShareableClone( - value: T, - shouldPersistRemote: boolean, - nativeStateSource?: object - ): ShareableRef; - scheduleOnUI(shareable: ShareableRef): void; executeOnUIRuntimeSync(shareable: ShareableRef): R; @@ -59,7 +54,7 @@ export interface ReanimatedModuleProxy { configureProps(uiProps: string[], nativeProps: string[]): void; subscribeForKeyboardEvents( - handler: ShareableRef, + handler: ShareableRef, isStatusBarTranslucent: boolean, isNavigationBarTranslucent: boolean ): number; diff --git a/packages/react-native-reanimated/src/Sensor.ts b/packages/react-native-reanimated/src/Sensor.ts index af0c1d2f552..64dc9dd6e92 100644 --- a/packages/react-native-reanimated/src/Sensor.ts +++ b/packages/react-native-reanimated/src/Sensor.ts @@ -6,6 +6,7 @@ import type { Value3D, ValueRotation, ShareableRef, + WorkletFunction, } from './commonTypes'; import { SensorType } from './commonTypes'; import { makeMutable } from './mutables'; @@ -56,7 +57,7 @@ export default class Sensor { sensorType, config.interval === 'auto' ? -1 : config.interval, config.iosReferenceFrame, - eventHandler + eventHandler as ShareableRef ); return this.sensorId !== -1; } diff --git a/packages/react-native-reanimated/src/commonTypes.ts b/packages/react-native-reanimated/src/commonTypes.ts index 5b3f2fd1f08..725436df1d8 100644 --- a/packages/react-native-reanimated/src/commonTypes.ts +++ b/packages/react-native-reanimated/src/commonTypes.ts @@ -5,74 +5,19 @@ import type { TransformsStyle, ImageStyle, } from 'react-native'; -import type { WorkletRuntime } from './runtimes'; +import type { WorkletsModuleProxy } from './worklets'; +import type { ReanimatedModuleProxy } from './ReanimatedModule'; -export interface IWorkletsModule {} - -export interface IReanimatedModule { - registerSensor( - sensorType: number, - interval: number, - iosReferenceFrame: number, - handler: ShareableRef<(data: Value3D | ValueRotation) => void> - ): number; - - unregisterSensor(sensorId: number): void; - - registerEventHandler( - eventHandler: ShareableRef, - eventName: string, - emitterReactTag: number - ): number; - - unregisterEventHandler(id: number): void; +export interface IWorkletsModule extends WorkletsModuleProxy {} +export interface IReanimatedModule + extends Omit { getViewProp( viewTag: number, propName: string, component: React.Component | undefined, callback?: (result: TValue) => void ): Promise; - - configureLayoutAnimationBatch( - layoutAnimationsBatch: LayoutAnimationBatchItem[] - ): void; - - setShouldAnimateExitingForTag(viewTag: number, shouldAnimate: boolean): void; - - enableLayoutAnimations(flag: boolean): void; - - configureProps(uiProps: string[], nativeProps: string[]): void; - - subscribeForKeyboardEvents( - handler: ShareableRef, - isStatusBarTranslucent: boolean, - isNavigationBarTranslucent: boolean - ): number; - - unsubscribeFromKeyboardEvents(listenerId: number): void; - - makeShareableClone( - value: TValue, - shouldPersistRemote: boolean, - nativeStateSource?: object - ): ShareableRef; - - scheduleOnUI(shareable: ShareableRef): void; - - executeOnUIRuntimeSync( - shareable: ShareableRef - ): TResult; - - createWorkletRuntime( - name: string, - initializer: ShareableRef<() => void> - ): WorkletRuntime; - - scheduleOnRuntime( - workletRuntime: WorkletRuntime, - shareableWorklet: ShareableRef - ): void; } export type LayoutAnimationsOptions = @@ -382,10 +327,22 @@ interface WorkletBaseDev extends WorkletBaseCommon { __stackDetails?: WorkletStackDetails; } +export type WorkletFunctionDev< + Args extends unknown[] = unknown[], + ReturnValue = unknown, +> = ((...args: Args) => ReturnValue) & WorkletBaseDev; + +type WorkletFunctionRelease< + Args extends unknown[] = unknown[], + ReturnValue = unknown, +> = ((...args: Args) => ReturnValue) & WorkletBaseRelease; + export type WorkletFunction< Args extends unknown[] = unknown[], ReturnValue = unknown, -> = ((...args: Args) => ReturnValue) & (WorkletBaseRelease | WorkletBaseDev); +> = + | WorkletFunctionDev + | WorkletFunctionRelease; /** * This function allows you to determine if a given function is a worklet. It diff --git a/packages/react-native-reanimated/src/core.ts b/packages/react-native-reanimated/src/core.ts index dbe92773120..c913d948c45 100644 --- a/packages/react-native-reanimated/src/core.ts +++ b/packages/react-native-reanimated/src/core.ts @@ -9,6 +9,7 @@ import type { SharedValue, Value3D, ValueRotation, + WorkletFunction, } from './commonTypes'; import { makeShareableCloneRecursive } from './shareables'; import { initializeUIRuntime } from './initializers'; @@ -85,7 +86,9 @@ export function registerEventHandler( global.__frameTimestamp = undefined; } return ReanimatedModule.registerEventHandler( - makeShareableCloneRecursive(handleAndFlushAnimationFrame), + makeShareableCloneRecursive( + handleAndFlushAnimationFrame as WorkletFunction + ), eventName, emitterReactTag ); @@ -110,7 +113,9 @@ export function subscribeForKeyboardEvents( global.__frameTimestamp = undefined; } return ReanimatedModule.subscribeForKeyboardEvents( - makeShareableCloneRecursive(handleAndFlushAnimationFrame), + makeShareableCloneRecursive( + handleAndFlushAnimationFrame as WorkletFunction + ), options.isStatusBarTranslucentAndroid ?? false, options.isNavigationBarTranslucentAndroid ?? false ); @@ -132,7 +137,7 @@ export function registerSensor( return sensorContainer.registerSensor( sensorType, config, - makeShareableCloneRecursive(eventHandler) + makeShareableCloneRecursive(eventHandler as WorkletFunction) ); } diff --git a/packages/react-native-reanimated/src/createAnimatedComponent/JSPropsUpdater.ts b/packages/react-native-reanimated/src/createAnimatedComponent/JSPropsUpdater.ts index 59bc5a75a87..70e345b73df 100644 --- a/packages/react-native-reanimated/src/createAnimatedComponent/JSPropsUpdater.ts +++ b/packages/react-native-reanimated/src/createAnimatedComponent/JSPropsUpdater.ts @@ -1,6 +1,5 @@ 'use strict'; import { NativeEventEmitter, Platform } from 'react-native'; -import { findNodeHandle } from '../platformFunctions/findNodeHandle'; import type { NativeModule } from 'react-native'; import { shouldBeUseWeb } from '../PlatformChecker'; import type { StyleProps } from '../commonTypes'; @@ -39,7 +38,7 @@ class JSPropsUpdaterPaper implements IJSPropsUpdater { > & IAnimatedComponentInternal ) { - const viewTag = findNodeHandle(animatedComponent); + const viewTag = animatedComponent.getComponentViewTag(); JSPropsUpdaterPaper._tagToComponentMapping.set(viewTag, animatedComponent); if (JSPropsUpdaterPaper._tagToComponentMapping.size === 1) { const listener = (data: ListenerData) => { @@ -61,7 +60,7 @@ class JSPropsUpdaterPaper implements IJSPropsUpdater { > & IAnimatedComponentInternal ) { - const viewTag = findNodeHandle(animatedComponent); + const viewTag = animatedComponent.getComponentViewTag(); JSPropsUpdaterPaper._tagToComponentMapping.delete(viewTag); if (JSPropsUpdaterPaper._tagToComponentMapping.size === 0) { this._reanimatedEventEmitter.removeAllListeners( @@ -101,7 +100,7 @@ class JSPropsUpdaterFabric implements IJSPropsUpdater { if (!JSPropsUpdaterFabric.isInitialized) { return; } - const viewTag = findNodeHandle(animatedComponent); + const viewTag = animatedComponent.getComponentViewTag(); JSPropsUpdaterFabric._tagToComponentMapping.set(viewTag, animatedComponent); } @@ -114,7 +113,7 @@ class JSPropsUpdaterFabric implements IJSPropsUpdater { if (!JSPropsUpdaterFabric.isInitialized) { return; } - const viewTag = findNodeHandle(animatedComponent); + const viewTag = animatedComponent.getComponentViewTag(); JSPropsUpdaterFabric._tagToComponentMapping.delete(viewTag); } } diff --git a/packages/react-native-reanimated/src/createAnimatedComponent/NativeEventsManager.ts b/packages/react-native-reanimated/src/createAnimatedComponent/NativeEventsManager.ts index da0bbb03b23..e912ae2eca8 100644 --- a/packages/react-native-reanimated/src/createAnimatedComponent/NativeEventsManager.ts +++ b/packages/react-native-reanimated/src/createAnimatedComponent/NativeEventsManager.ts @@ -39,7 +39,7 @@ export class NativeEventsManager implements INativeEventsManager { public updateEvents( prevProps: AnimatedComponentProps ) { - const computedEventTag = this.getEventViewTag(); + const computedEventTag = this.getEventViewTag(true); // If the event view tag changes, we need to completely re-mount all events if (this.#eventViewTag !== computedEventTag) { // Remove all bindings from previous props that ran on the old viewTag @@ -77,23 +77,54 @@ export class NativeEventsManager implements INativeEventsManager { }); } - private getEventViewTag() { + private getEventViewTag(componentUpdate: boolean = false) { // Get the tag for registering events - since the event emitting view can be nested inside the main component const componentAnimatedRef = this.#managedComponent - ._component as AnimatedComponentRef; - let newTag: number; + ._componentRef as AnimatedComponentRef & { + // Fabric + __nativeTag?: number; + // Paper + _nativeTag?: number; + }; if (componentAnimatedRef.getScrollableNode) { + /* + In most cases, getScrollableNode() returns a view tag, and findNodeHandle is not required. + However, to cover more exotic list cases, we will continue to use findNodeHandle + for consistency. For numerical values, findNodeHandle should return the value immediately, + as documented here: https://github.com/facebook/react/blob/91061073d57783c061889ac6720ef1ab7f0c2149/packages/react-native-renderer/src/ReactNativePublicCompat.js#L113 + */ const scrollableNode = componentAnimatedRef.getScrollableNode(); - newTag = findNodeHandle(scrollableNode) ?? -1; - } else { - newTag = - findNodeHandle( - this.#componentOptions?.setNativeProps - ? this.#managedComponent - : componentAnimatedRef - ) ?? -1; + if (typeof scrollableNode === 'number') { + return scrollableNode; + } + return findNodeHandle(scrollableNode) ?? -1; + } + if (this.#componentOptions?.setNativeProps) { + // This case ensures backward compatibility with components that + // have their own setNativeProps method passed as an option. + return findNodeHandle(this.#managedComponent) ?? -1; + } + if (!componentUpdate) { + // On the first render of a component, we may already receive a resolved view tag. + return this.#managedComponent.getComponentViewTag(); + } + if (componentAnimatedRef.__nativeTag || componentAnimatedRef._nativeTag) { + /* + Fast path for native refs, + _nativeTag is used by Paper components, + __nativeTag is used by Fabric components. + */ + return ( + componentAnimatedRef.__nativeTag ?? + componentAnimatedRef._nativeTag ?? + -1 + ); } - return newTag; + /* + When a component is updated, a child could potentially change and have a different + view tag. This can occur with a GestureDetector component. + */ + return findNodeHandle(componentAnimatedRef) ?? -1; } } diff --git a/packages/react-native-reanimated/src/createAnimatedComponent/commonTypes.ts b/packages/react-native-reanimated/src/createAnimatedComponent/commonTypes.ts index edb1c867c23..d48b3d771f4 100644 --- a/packages/react-native-reanimated/src/createAnimatedComponent/commonTypes.ts +++ b/packages/react-native-reanimated/src/createAnimatedComponent/commonTypes.ts @@ -100,15 +100,10 @@ export interface AnimatedComponentRef extends Component { export interface IAnimatedComponentInternal { _styles: StyleProps[] | null; _animatedProps?: Partial>; - /** - * Used for Shared Element Transitions, Layout Animations and Animated Styles. - * It is not related to event handling. - */ - _componentViewTag: number; _isFirstRender: boolean; jestInlineStyle: NestedArray | undefined; jestAnimatedStyle: { value: StyleProps }; - _component: AnimatedComponentRef | HTMLElement | null; + _componentRef: AnimatedComponentRef | HTMLElement | null; _sharedElementTransition: SharedTransition | null; _jsPropsUpdater: IJSPropsUpdater; _InlinePropManager: IInlinePropManager; @@ -117,6 +112,11 @@ export interface IAnimatedComponentInternal { _NativeEventsManager?: INativeEventsManager; _viewInfo?: ViewInfo; context: React.ContextType; + /** + * Used for Shared Element Transitions, Layout Animations and Animated Styles. + * It is not related to event handling. + */ + getComponentViewTag: () => number; } export type NestedArray = T | NestedArray[]; diff --git a/packages/react-native-reanimated/src/createAnimatedComponent/createAnimatedComponent.tsx b/packages/react-native-reanimated/src/createAnimatedComponent/createAnimatedComponent.tsx index 9750bb853d6..762e2693bdc 100644 --- a/packages/react-native-reanimated/src/createAnimatedComponent/createAnimatedComponent.tsx +++ b/packages/react-native-reanimated/src/createAnimatedComponent/createAnimatedComponent.tsx @@ -8,11 +8,10 @@ import type { } from 'react'; import React from 'react'; import { Platform } from 'react-native'; -import { findNodeHandle } from '../platformFunctions/findNodeHandle'; import '../layoutReanimation/animationsManager'; import invariant from 'invariant'; import { adaptViewConfig } from '../ConfigHelper'; -import { RNRenderer } from '../platform-specific/RNRenderer'; +import { findHostInstance } from '../platform-specific/findHostInstance'; import { enableLayoutAnimations } from '../core'; import { SharedTransition } from '../layoutReanimation'; import { LayoutAnimationType } from '../commonTypes'; @@ -125,11 +124,10 @@ export function createAnimatedComponent( { _styles: StyleProps[] | null = null; _animatedProps?: Partial>; - _componentViewTag = -1; _isFirstRender = true; jestInlineStyle: NestedArray | undefined; jestAnimatedStyle: { value: StyleProps } = { value: {} }; - _component: AnimatedComponentRef | HTMLElement | null = null; + _componentRef: AnimatedComponentRef | HTMLElement | null = null; _sharedElementTransition: SharedTransition | null = null; _jsPropsUpdater = new JSPropsUpdater(); _InlinePropManager = new InlinePropManager(); @@ -157,7 +155,6 @@ export function createAnimatedComponent( } componentDidMount() { - this._componentViewTag = this._getComponentViewTag(); if (!IS_WEB) { // It exists only on native platforms. We initialize it here because the ref to the animated component is available only post-mount this._NativeEventsManager = new NativeEventsManager(this, options); @@ -174,7 +171,7 @@ export function createAnimatedComponent( if (IS_WEB) { if (this.props.exiting) { - saveSnapshot(this._component as HTMLElement); + saveSnapshot(this._componentRef as HTMLElement); } if ( @@ -190,11 +187,11 @@ export function createAnimatedComponent( if (!skipEntering) { startWebLayoutAnimation( this.props, - this._component as ReanimatedHTMLElement, + this._componentRef as ReanimatedHTMLElement, LayoutAnimationType.ENTERING ); } else { - (this._component as HTMLElement).style.visibility = 'initial'; + (this._componentRef as HTMLElement).style.visibility = 'initial'; } } @@ -210,7 +207,7 @@ export function createAnimatedComponent( this._configureSharedTransition(true); } this._sharedElementTransition?.unregisterTransition( - this._componentViewTag, + this.getComponentViewTag(), true ); @@ -218,7 +215,7 @@ export function createAnimatedComponent( if ( IS_WEB && - this._component && + this._componentRef && exiting && !getReducedMotionFromConfig(exiting as CustomConfig) ) { @@ -226,7 +223,7 @@ export function createAnimatedComponent( startWebLayoutAnimation( this.props, - this._component as ReanimatedHTMLElement, + this._componentRef as ReanimatedHTMLElement, LayoutAnimationType.EXITING ); } else if (exiting && !IS_WEB && !isFabric()) { @@ -237,7 +234,7 @@ export function createAnimatedComponent( : getReduceMotionFromConfig(); if (!reduceMotionInExiting) { updateLayoutAnimations( - this._componentViewTag, + this.getComponentViewTag(), LayoutAnimationType.EXITING, maybeBuild( exiting, @@ -249,31 +246,33 @@ export function createAnimatedComponent( } } - _getComponentViewTag() { + getComponentViewTag() { return this._getViewInfo().viewTag as number; } _detachStyles() { - if (this._componentViewTag !== -1 && this._styles !== null) { + const viewTag = this.getComponentViewTag(); + if (viewTag !== -1 && this._styles !== null) { for (const style of this._styles) { - style.viewDescriptors.remove(this._componentViewTag); + style.viewDescriptors.remove(viewTag); } if (this.props.animatedProps?.viewDescriptors) { - this.props.animatedProps.viewDescriptors.remove( - this._componentViewTag - ); + this.props.animatedProps.viewDescriptors.remove(viewTag); } if (isFabric()) { - removeFromPropsRegistry(this._componentViewTag); + removeFromPropsRegistry(viewTag); } } } _updateFromNative(props: StyleProps) { if (options?.setNativeProps) { - options.setNativeProps(this._component as AnimatedComponentRef, props); + options.setNativeProps( + this._componentRef as AnimatedComponentRef, + props + ); } else { - (this._component as AnimatedComponentRef)?.setNativeProps?.(props); + (this._componentRef as AnimatedComponentRef)?.setNativeProps?.(props); } } @@ -286,24 +285,22 @@ export function createAnimatedComponent( let viewName: string | null; let shadowNodeWrapper: ShadowNodeWrapper | null = null; let viewConfig; - // Component can specify ref which should be animated when animated version of the component is created. - // Otherwise, we animate the component itself. - const component = (this._component as AnimatedComponentRef) - ?.getAnimatableRef - ? (this._component as AnimatedComponentRef).getAnimatableRef?.() - : this; if (SHOULD_BE_USE_WEB) { // At this point I assume that `_setComponentRef` was already called and `_component` is set. // `this._component` on web represents HTMLElement of our component, that's why we use casting - viewTag = this._component as HTMLElement; + viewTag = this._componentRef as HTMLElement; viewName = null; shadowNodeWrapper = null; viewConfig = null; } else { - // hostInstance can be null for a component that doesn't render anything (render function returns null). Example: svg Stop: https://github.com/react-native-svg/react-native-svg/blob/develop/src/elements/Stop.tsx - const hostInstance = RNRenderer.findHostInstance_DEPRECATED(component); + const hostInstance = findHostInstance(this); if (!hostInstance) { + /* + findHostInstance can return null for a component that doesn't render anything + (render function returns null). Example: + svg Stop: https://github.com/react-native-svg/react-native-svg/blob/develop/src/elements/Stop.tsx + */ throw new ReanimatedError( 'Cannot find host instance for this component. Maybe it renders nothing?' ); @@ -314,7 +311,7 @@ export function createAnimatedComponent( viewName = viewInfo.viewName; viewConfig = viewInfo.viewConfig; shadowNodeWrapper = isFabric() - ? getShadowNodeWrapperFromRef(this) + ? getShadowNodeWrapperFromRef(this, hostInstance) : null; } this._viewInfo = { viewTag, viewName, shadowNodeWrapper, viewConfig }; @@ -341,8 +338,6 @@ export function createAnimatedComponent( adaptViewConfig(viewConfig); } - this._componentViewTag = viewTag as number; - // remove old styles if (prevStyles) { // in most of the cases, views have only a single animated style and it remains unchanged @@ -422,7 +417,7 @@ export function createAnimatedComponent( this._InlinePropManager.attachInlineProps(this, this._getViewInfo()); if (IS_WEB && this.props.exiting) { - saveSnapshot(this._component as HTMLElement); + saveSnapshot(this._componentRef as HTMLElement); } // Snapshot won't be undefined because it comes from getSnapshotBeforeUpdate method @@ -434,7 +429,7 @@ export function createAnimatedComponent( ) { tryActivateLayoutTransition( this.props, - this._component as ReanimatedHTMLElement, + this._componentRef as ReanimatedHTMLElement, snapshot ); } @@ -453,7 +448,7 @@ export function createAnimatedComponent( ) : undefined; updateLayoutAnimations( - this._componentViewTag, + this.getComponentViewTag(), LayoutAnimationType.LAYOUT, layout ); @@ -467,7 +462,7 @@ export function createAnimatedComponent( const { sharedTransitionTag } = this.props; if (!sharedTransitionTag) { this._sharedElementTransition?.unregisterTransition( - this._componentViewTag, + this.getComponentViewTag(), isUnmounting ); this._sharedElementTransition = null; @@ -478,34 +473,42 @@ export function createAnimatedComponent( this._sharedElementTransition ?? new SharedTransition(); sharedElementTransition.registerTransition( - this._componentViewTag, + this.getComponentViewTag(), sharedTransitionTag, isUnmounting ); this._sharedElementTransition = sharedElementTransition; } + _resolveComponentRef = (ref: Component | HTMLElement | null) => { + const componentRef = ref as AnimatedComponentRef; + // Component can specify ref which should be animated when animated version of the component is created. + // Otherwise, we animate the component itself. + if (componentRef && componentRef.getAnimatableRef) { + return componentRef.getAnimatableRef(); + } + return componentRef; + }; + _setComponentRef = setAndForwardRef({ getForwardedRef: () => this.props.forwardedRef as MutableRefObject< Component, Record, unknown> >, setLocalRef: (ref) => { - // TODO update config - - const tag = findNodeHandle(ref as Component); - - // callback refs are executed twice - when the component mounts with ref, - // and with null when it unmounts - if (tag !== null) { - this._componentViewTag = tag; + if (!ref) { + // component has been unmounted + return; + } + if (ref !== this._componentRef) { + this._componentRef = this._resolveComponentRef(ref); + // if ref is changed, reset viewInfo + this._viewInfo = undefined; } + const tag = this.getComponentViewTag(); const { layout, entering, exiting, sharedTransitionTag } = this.props; - if ( - (layout || entering || exiting || sharedTransitionTag) && - tag != null - ) { + if (layout || entering || exiting || sharedTransitionTag) { if (!SHOULD_BE_USE_WEB) { enableLayoutAnimations(true, false); } @@ -545,10 +548,6 @@ export function createAnimatedComponent( ); } } - - if (ref !== this._component) { - this._component = ref; - } }, }); @@ -558,9 +557,9 @@ export function createAnimatedComponent( getSnapshotBeforeUpdate() { if ( IS_WEB && - (this._component as HTMLElement)?.getBoundingClientRect !== undefined + (this._componentRef as HTMLElement)?.getBoundingClientRect !== undefined ) { - return (this._component as HTMLElement).getBoundingClientRect(); + return (this._componentRef as HTMLElement).getBoundingClientRect(); } return null; diff --git a/packages/react-native-reanimated/src/fabricUtils.ts b/packages/react-native-reanimated/src/fabricUtils.ts index a872b9a2167..e6eff46e125 100644 --- a/packages/react-native-reanimated/src/fabricUtils.ts +++ b/packages/react-native-reanimated/src/fabricUtils.ts @@ -2,25 +2,19 @@ /* eslint-disable */ import type { ShadowNodeWrapper } from './commonTypes'; +import { + findHostInstance, + HostInstance, +} from './platform-specific/findHostInstance'; -let findHostInstance_DEPRECATED: (ref: unknown) => void; let getInternalInstanceHandleFromPublicInstance: (ref: unknown) => { stateNode: { node: unknown }; }; export function getShadowNodeWrapperFromRef( - ref: React.Component + ref: React.Component, + hostInstance?: HostInstance ): ShadowNodeWrapper { - // load findHostInstance_DEPRECATED lazily because it may not be available before render - if (findHostInstance_DEPRECATED === undefined) { - try { - findHostInstance_DEPRECATED = - require('react-native/Libraries/Renderer/shims/ReactFabric').findHostInstance_DEPRECATED; - } catch (e) { - findHostInstance_DEPRECATED = (_ref: unknown) => null; - } - } - if (getInternalInstanceHandleFromPublicInstance === undefined) { try { getInternalInstanceHandleFromPublicInstance = @@ -50,9 +44,9 @@ export function getShadowNodeWrapperFromRef( } else if (textInputRef) { resolvedRef = textInputRef; } else { - resolvedRef = getInternalInstanceHandleFromPublicInstance( - findHostInstance_DEPRECATED(ref) - ).stateNode.node; + const instance = hostInstance ?? findHostInstance(ref); + resolvedRef = + getInternalInstanceHandleFromPublicInstance(instance).stateNode.node; } return resolvedRef; diff --git a/packages/react-native-reanimated/src/mock.ts b/packages/react-native-reanimated/src/mock.ts index 65288ac6d64..576df2d34b4 100644 --- a/packages/react-native-reanimated/src/mock.ts +++ b/packages/react-native-reanimated/src/mock.ts @@ -50,14 +50,48 @@ const hook = { ): EventHandlerProcessed => NOOP, // useHandler: ADD ME IF NEEDED useWorkletCallback: ID, - useSharedValue: (init: Value) => ({ value: init }), + useSharedValue: (init: Value) => { + const value = { value: init }; + return new Proxy(value, { + get(target, prop) { + if (prop === 'value') { + return target.value; + } + if (prop === 'get') { + return () => target.value; + } + if (prop === 'set') { + return (newValue: Value | ((currentValue: Value) => Value)) => { + if (typeof newValue === 'function') { + target.value = (newValue as (currentValue: Value) => Value)( + target.value + ); + } else { + target.value = newValue; + } + }; + } + }, + set(target, prop: string, newValue) { + if (prop === 'value') { + target.value = newValue; + return true; + } + return false; + }, + }); + }, // useReducedMotion: ADD ME IF NEEDED useAnimatedStyle: IMMEDIATE_CALLBACK_INVOCATION, useAnimatedGestureHandler: NOOP_FACTORY, useAnimatedReaction: NOOP, useAnimatedRef: () => ({ current: null }), useAnimatedScrollHandler: NOOP_FACTORY, - useDerivedValue: (processor: () => Value) => ({ value: processor() }), + useDerivedValue: (processor: () => Value) => { + const result = processor(); + + return { value: result, get: () => result }; + }, useAnimatedSensor: () => ({ sensor: { value: { diff --git a/packages/react-native-reanimated/src/mutables.ts b/packages/react-native-reanimated/src/mutables.ts index 4a05b56b103..a0aac328df3 100644 --- a/packages/react-native-reanimated/src/mutables.ts +++ b/packages/react-native-reanimated/src/mutables.ts @@ -18,7 +18,7 @@ function shouldWarnAboutAccessDuringRender() { function checkInvalidReadDuringRender() { if (shouldWarnAboutAccessDuringRender()) { logger.warn( - 'Reading from `value` during component render. Please ensure that you do not access the `value` property or use `get` method of a shared value while React is rendering a component.', + "Reading from `value` during component render. Please ensure that you don't access the `value` property nor use `get` method of a shared value while React is rendering a component.", { strict: true } ); } @@ -27,7 +27,7 @@ function checkInvalidReadDuringRender() { function checkInvalidWriteDuringRender() { if (shouldWarnAboutAccessDuringRender()) { logger.warn( - 'Writing to `value` during component render. Please ensure that you do not access the `value` property or use `set` method of a shared value while React is rendering a component.', + "Writing to `value` during component render. Please ensure that you don't access the `value` property nor use `set` method of a shared value while React is rendering a component.", { strict: true } ); } diff --git a/packages/react-native-reanimated/src/platform-specific/RNRenderer.ts b/packages/react-native-reanimated/src/platform-specific/RNRenderer.ts deleted file mode 100644 index cc5c78a5005..00000000000 --- a/packages/react-native-reanimated/src/platform-specific/RNRenderer.ts +++ /dev/null @@ -1,4 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-nocheck -'use strict'; -export { default as RNRenderer } from 'react-native/Libraries/Renderer/shims/ReactNative'; diff --git a/packages/react-native-reanimated/src/platform-specific/RNRenderer.web.ts b/packages/react-native-reanimated/src/platform-specific/RNRenderer.web.ts deleted file mode 100644 index f95b74d4322..00000000000 --- a/packages/react-native-reanimated/src/platform-specific/RNRenderer.web.ts +++ /dev/null @@ -1,4 +0,0 @@ -'use strict'; -// RNRender is not used for web. An export is still defined to eliminate warnings from bundlers such as esbuild. -const RNRenderer = {}; -export { RNRenderer }; diff --git a/packages/react-native-reanimated/src/platform-specific/findHostInstance.ts b/packages/react-native-reanimated/src/platform-specific/findHostInstance.ts new file mode 100644 index 00000000000..00d56154e40 --- /dev/null +++ b/packages/react-native-reanimated/src/platform-specific/findHostInstance.ts @@ -0,0 +1,77 @@ +/* eslint-disable camelcase */ +'use strict'; + +import type { IAnimatedComponentInternal } from '../createAnimatedComponent/commonTypes'; +import { ReanimatedError } from '../errors'; +import { isFabric } from '../PlatformChecker'; + +type HostInstanceFabric = { + __internalInstanceHandle?: Record; + __nativeTag?: number; + _viewConfig?: Record; +}; + +type HostInstancePaper = { + _nativeTag?: number; + viewConfig?: Record; +}; + +export type HostInstance = HostInstanceFabric & HostInstancePaper; + +function findHostInstanceFastPath(maybeNativeRef: HostInstance) { + if ( + maybeNativeRef.__internalInstanceHandle && + maybeNativeRef.__nativeTag && + maybeNativeRef._viewConfig + ) { + // This is a native ref to a Fabric component + return maybeNativeRef; + } + if (maybeNativeRef._nativeTag && maybeNativeRef.viewConfig) { + // This is a native ref to a Paper component + return maybeNativeRef; + } + // That means it’s a ref to a non-native component, and it’s necessary + // to call `findHostInstance_DEPRECATED` on them. + return undefined; +} + +function resolveFindHostInstance_DEPRECATED() { + if (findHostInstance_DEPRECATED !== undefined) { + return; + } + if (isFabric()) { + try { + findHostInstance_DEPRECATED = + require('react-native/Libraries/Renderer/shims/ReactFabric').findHostInstance_DEPRECATED; + } catch (e) { + throw new ReanimatedError( + 'Failed to resolve findHostInstance_DEPRECATED' + ); + } + } else { + findHostInstance_DEPRECATED = + require('react-native/Libraries/Renderer/shims/ReactNative').findHostInstance_DEPRECATED; + } +} + +let findHostInstance_DEPRECATED: (ref: unknown) => HostInstance; +export function findHostInstance( + component: IAnimatedComponentInternal | React.Component +): HostInstance { + // Fast path for native refs + const hostInstance = findHostInstanceFastPath( + (component as IAnimatedComponentInternal)._componentRef as HostInstance + ); + if (hostInstance !== undefined) { + return hostInstance; + } + + resolveFindHostInstance_DEPRECATED(); + // Fabric implementation of findHostInstance_DEPRECATED doesn't accept a ref as an argument + return findHostInstance_DEPRECATED( + isFabric() + ? component + : (component as IAnimatedComponentInternal)._componentRef + ); +} diff --git a/packages/react-native-reanimated/src/platform-specific/findHostInstance.web.ts b/packages/react-native-reanimated/src/platform-specific/findHostInstance.web.ts new file mode 100644 index 00000000000..ca342dfd2d4 --- /dev/null +++ b/packages/react-native-reanimated/src/platform-specific/findHostInstance.web.ts @@ -0,0 +1,3 @@ +'use strict'; + +export function findHostInstance(_component: any): void {} diff --git a/packages/react-native-reanimated/src/platform-specific/jsVersion.ts b/packages/react-native-reanimated/src/platform-specific/jsVersion.ts index 21480e5ad4d..230c9d5c1c0 100644 --- a/packages/react-native-reanimated/src/platform-specific/jsVersion.ts +++ b/packages/react-native-reanimated/src/platform-specific/jsVersion.ts @@ -4,4 +4,4 @@ * version used to build the native part of the library in runtime. Remember to * keep this in sync with the version declared in `package.json` */ -export const jsVersion = '3.17.0-rc.0'; +export const jsVersion = '3.17.0-rc.1'; diff --git a/packages/react-native-reanimated/src/shareables.ts b/packages/react-native-reanimated/src/shareables.ts index 0565272e30c..ec4bdea2b33 100644 --- a/packages/react-native-reanimated/src/shareables.ts +++ b/packages/react-native-reanimated/src/shareables.ts @@ -4,6 +4,7 @@ import type { ShareableRef, FlatShareableRef, WorkletFunction, + WorkletFunctionDev, } from './commonTypes'; import { shouldBeUseWeb } from './PlatformChecker'; import { ReanimatedError, registerWorkletStackDetails } from './errors'; @@ -13,7 +14,7 @@ import { shareableMappingFlag, } from './shareableMappingCache'; import { logger } from './logger'; -import { ReanimatedModule } from './ReanimatedModule'; +import { WorkletsModule } from './worklets'; // for web/chrome debugger/jest environments this file provides a stub implementation // where no shareable references are used. Instead, the objects themselves are used @@ -32,10 +33,19 @@ function isHostObject(value: NonNullable) { return MAGIC_KEY in value; } -function isPlainJSObject(object: object) { +function isPlainJSObject(object: object): object is Record { return Object.getPrototypeOf(object) === Object.prototype; } +function getFromCache(value: object) { + const cached = shareableMappingCache.get(value); + if (cached === shareableMappingFlag) { + // This means that `value` was already a clone and we should return it as is. + return value; + } + return cached; +} + // The below object is used as a replacement for objects that cannot be transferred // as shareable values. In makeShareableCloneRecursive we detect if an object is of // a plain Object.prototype and only allow such objects to be transferred. This lets @@ -100,14 +110,72 @@ const DETECT_CYCLIC_OBJECT_DEPTH_THRESHOLD = 30; // We use it to check if later on the function reenters with the same object let processedObjectAtThresholdDepth: unknown; -export function makeShareableCloneRecursive( - value: any, +function makeShareableCloneRecursiveWeb(value: T): ShareableRef { + return value as ShareableRef; +} + +function makeShareableCloneRecursiveNative( + value: T, shouldPersistRemote = false, depth = 0 ): ShareableRef { - if (SHOULD_BE_USE_WEB) { - return value; + detectCyclicObject(value, depth); + + const isObject = typeof value === 'object'; + const isFunction = typeof value === 'function'; + + if ((!isObject && !isFunction) || value === null) { + return clonePrimitive(value, shouldPersistRemote); + } + + const cached = getFromCache(value); + if (cached !== undefined) { + return cached as ShareableRef; + } + + if (Array.isArray(value)) { + return cloneArray(value, shouldPersistRemote, depth); + } + if (isFunction && !isWorkletFunction(value)) { + return cloneRemoteFunction(value, shouldPersistRemote); + } + if (isHostObject(value)) { + return cloneHostObject(value, shouldPersistRemote); } + if (isPlainJSObject(value) && value.__workletContextObjectFactory) { + return cloneContextObject(value); + } + if ((isPlainJSObject(value) || isFunction) && isWorkletFunction(value)) { + return cloneWorklet(value, shouldPersistRemote, depth); + } + if (isPlainJSObject(value) || isFunction) { + return clonePlainJSObject(value, shouldPersistRemote, depth); + } + if (value instanceof RegExp) { + return cloneRegExp(value); + } + if (value instanceof Error) { + return cloneError(value); + } + if (value instanceof ArrayBuffer) { + return cloneArrayBuffer(value, shouldPersistRemote); + } + if (ArrayBuffer.isView(value)) { + // typed array (e.g. Int32Array, Uint8ClampedArray) or DataView + return cloneArrayBufferView(value); + } + return inaccessibleObject(value); +} + +interface MakeShareableClone { + (value: T, shouldPersistRemote?: boolean, depth?: number): ShareableRef; +} + +export const makeShareableCloneRecursive: MakeShareableClone = SHOULD_BE_USE_WEB + ? makeShareableCloneRecursiveWeb + : makeShareableCloneRecursiveNative; + +function detectCyclicObject(value: unknown, depth: number) { if (depth >= DETECT_CYCLIC_OBJECT_DEPTH_THRESHOLD) { // if we reach certain recursion depth we suspect that we are dealing with a cyclic object. // this type of objects are not supported and cannot be transferred as shareable, so we @@ -124,176 +192,259 @@ export function makeShareableCloneRecursive( } else { processedObjectAtThresholdDepth = undefined; } - // This one actually may be worth to be moved to c++, we also need similar logic to run on the UI thread - const type = typeof value; - const isTypeObject = type === 'object'; - const isTypeFunction = type === 'function'; - if ((isTypeObject || isTypeFunction) && value !== null) { - const cached = shareableMappingCache.get(value); - if (cached === shareableMappingFlag) { - return value; - } else if (cached !== undefined) { - return cached as ShareableRef; - } else { - let toAdapt: any; - if (Array.isArray(value)) { - toAdapt = value.map((element) => - makeShareableCloneRecursive(element, shouldPersistRemote, depth + 1) - ); - freezeObjectIfDev(value); - } else if (isTypeFunction && !isWorkletFunction(value)) { - // this is a remote function - toAdapt = value; - freezeObjectIfDev(value); - } else if (isHostObject(value)) { - // for host objects we pass the reference to the object as shareable and - // then recreate new host object wrapping the same instance on the UI thread. - // there is no point of iterating over keys as we do for regular objects. - toAdapt = value; - } else if ( - isPlainJSObject(value) && - value.__workletContextObjectFactory - ) { - const workletContextObjectFactory = value.__workletContextObjectFactory; - const handle = makeShareableCloneRecursive({ - __init: () => { - 'worklet'; - return workletContextObjectFactory(); - }, - }); - shareableMappingCache.set(value, handle); - return handle as ShareableRef; - } else if (isPlainJSObject(value) || isTypeFunction) { - toAdapt = {}; - if (isWorkletFunction(value)) { - if (__DEV__) { - const babelVersion = value.__initData.version; - if (babelVersion !== undefined && babelVersion !== jsVersion) { - throw new ReanimatedError(`Mismatch between JavaScript code version and Reanimated Babel plugin version (${jsVersion} vs. ${babelVersion}). +} + +function clonePrimitive( + value: T, + shouldPersistRemote: boolean +): ShareableRef { + return WorkletsModule.makeShareableClone(value, shouldPersistRemote); +} + +function cloneArray( + value: T, + shouldPersistRemote: boolean, + depth: number +): ShareableRef { + const clonedElements = value.map((element) => + makeShareableCloneRecursive(element, shouldPersistRemote, depth + 1) + ); + const clone = WorkletsModule.makeShareableClone( + clonedElements, + shouldPersistRemote, + value + ) as ShareableRef; + shareableMappingCache.set(value, clone); + shareableMappingCache.set(clone); + + freezeObjectInDev(value); + return clone; +} + +function cloneRemoteFunction( + value: T, + shouldPersistRemote: boolean +): ShareableRef { + const clone = WorkletsModule.makeShareableClone( + value, + shouldPersistRemote, + value + ); + shareableMappingCache.set(value, clone); + shareableMappingCache.set(clone); + + freezeObjectInDev(value); + return clone; +} + +function cloneHostObject( + value: T, + shouldPersistRemote: boolean +): ShareableRef { + // for host objects we pass the reference to the object as shareable and + // then recreate new host object wrapping the same instance on the UI thread. + // there is no point of iterating over keys as we do for regular objects. + const clone = WorkletsModule.makeShareableClone( + value, + shouldPersistRemote, + value + ); + shareableMappingCache.set(value, clone); + shareableMappingCache.set(clone); + + return clone; +} + +function cloneWorklet( + value: T, + shouldPersistRemote: boolean, + depth: number +): ShareableRef { + if (__DEV__) { + const babelVersion = (value as WorkletFunctionDev).__initData.version; + if (babelVersion !== undefined && babelVersion !== jsVersion) { + throw new ReanimatedError(`[Reanimated] Mismatch between JavaScript code version and Reanimated Babel plugin version (${jsVersion} vs. ${babelVersion}). See \`https://docs.swmansion.com/react-native-reanimated/docs/guides/troubleshooting#mismatch-between-javascript-code-version-and-reanimated-babel-plugin-version\` for more details. Offending code was: \`${getWorkletCode(value)}\``); - } - registerWorkletStackDetails( - value.__workletHash, - value.__stackDetails! - ); - } - if (value.__stackDetails) { - // `Error` type of value cannot be copied to the UI thread, so we - // remove it after we handled it in dev mode or delete it to ignore it in production mode. - // Not removing this would cause an infinite loop in production mode and it just - // seems more elegant to handle it this way. - delete value.__stackDetails; - } - // to save on transferring static __initData field of worklet structure - // we request shareable value to persist its UI counterpart. This means - // that the __initData field that contains long strings representing the - // worklet code, source map, and location, will always be - // serialized/deserialized once. - toAdapt.__initData = makeShareableCloneRecursive( - value.__initData, - true, - depth + 1 - ); - } + } + registerWorkletStackDetails( + value.__workletHash, + (value as WorkletFunctionDev).__stackDetails! + ); + } + if ((value as WorkletFunctionDev).__stackDetails) { + // `Error` type of value cannot be copied to the UI thread, so we + // remove it after we handled it in dev mode or delete it to ignore it in production mode. + // Not removing this would cause an infinite loop in production mode and it just + // seems more elegant to handle it this way. + delete (value as WorkletFunctionDev).__stackDetails; + } + // to save on transferring static __initData field of worklet structure + // we request shareable value to persist its UI counterpart. This means + // that the __initData field that contains long strings represeting the + // worklet code, source map, and location, will always be + // serialized/deserialized once. + const clonedProps: Record = {}; + clonedProps.__initData = makeShareableCloneRecursive( + value.__initData, + true, + depth + 1 + ); - for (const [key, element] of Object.entries(value)) { - if (key === '__initData' && toAdapt.__initData !== undefined) { - continue; - } - toAdapt[key] = makeShareableCloneRecursive( - element, - shouldPersistRemote, - depth + 1 - ); - } - freezeObjectIfDev(value); - } else if (value instanceof RegExp) { - const pattern = value.source; - const flags = value.flags; - const handle = makeShareableCloneRecursive({ - __init: () => { - 'worklet'; - return new RegExp(pattern, flags); - }, - }); - shareableMappingCache.set(value, handle); - return handle as ShareableRef; - } else if (value instanceof Error) { - const { name, message, stack } = value; - const handle = makeShareableCloneRecursive({ - __init: () => { - 'worklet'; - // eslint-disable-next-line reanimated/use-reanimated-error - const error = new Error(); - error.name = name; - error.message = message; - error.stack = stack; - return error; - }, - }); - shareableMappingCache.set(value, handle); - return handle as ShareableRef; - } else if (value instanceof ArrayBuffer) { - toAdapt = value; - } else if (ArrayBuffer.isView(value)) { - // typed array (e.g. Int32Array, Uint8ClampedArray) or DataView - const buffer = value.buffer; - const typeName = value.constructor.name; - const handle = makeShareableCloneRecursive({ - __init: () => { - 'worklet'; - if (!VALID_ARRAY_VIEWS_NAMES.includes(typeName)) { - throw new ReanimatedError( - `Invalid array view name \`${typeName}\`.` - ); - } - const constructor = global[typeName as keyof typeof global]; - if (constructor === undefined) { - throw new ReanimatedError( - `Constructor for \`${typeName}\` not found.` - ); - } - return new constructor(buffer); - }, - }); - shareableMappingCache.set(value, handle); - return handle as ShareableRef; - } else { - // This is reached for object types that are not of plain Object.prototype. - // We don't support such objects from being transferred as shareables to - // the UI runtime and hence we replace them with "inaccessible object" - // which is implemented as a Proxy object that throws on any attempt - // of accessing its fields. We argue that such objects can sometimes leak - // as attributes of objects being captured by worklets but should never - // be used on the UI runtime regardless. If they are being accessed, the user - // will get an appropriate error message. - const inaccessibleObject = - makeShareableCloneRecursive(INACCESSIBLE_OBJECT); - shareableMappingCache.set(value, inaccessibleObject); - return inaccessibleObject; - } - const adapted = ReanimatedModule.makeShareableClone( - toAdapt, - shouldPersistRemote, - value - ); - shareableMappingCache.set(value, adapted); - shareableMappingCache.set(adapted); - return adapted; + for (const [key, element] of Object.entries(value)) { + if (key === '__initData' && clonedProps.__initData !== undefined) { + continue; } + clonedProps[key] = makeShareableCloneRecursive( + element, + shouldPersistRemote, + depth + 1 + ); } - return ReanimatedModule.makeShareableClone( + const clone = WorkletsModule.makeShareableClone( + clonedProps, + // retain all worklets + true, + value + ) as ShareableRef; + shareableMappingCache.set(value, clone); + shareableMappingCache.set(clone); + + freezeObjectInDev(value); + return clone; +} + +function cloneContextObject(value: T): ShareableRef { + const workletContextObjectFactory = (value as Record) + .__workletContextObjectFactory as () => T; + const handle = makeShareableCloneRecursive({ + __init: () => { + 'worklet'; + return workletContextObjectFactory(); + }, + }); + shareableMappingCache.set(value, handle); + return handle as ShareableRef; +} + +function clonePlainJSObject( + value: T, + shouldPersistRemote: boolean, + depth: number +): ShareableRef { + const clonedProps: Record = {}; + for (const [key, element] of Object.entries(value)) { + if (key === '__initData' && clonedProps.__initData !== undefined) { + continue; + } + clonedProps[key] = makeShareableCloneRecursive( + element, + shouldPersistRemote, + depth + 1 + ); + } + const clone = WorkletsModule.makeShareableClone( + clonedProps, + shouldPersistRemote, + value + ) as ShareableRef; + shareableMappingCache.set(value, clone); + shareableMappingCache.set(clone); + + freezeObjectInDev(value); + return clone; +} + +function cloneRegExp(value: T): ShareableRef { + const pattern = value.source; + const flags = value.flags; + const handle = makeShareableCloneRecursive({ + __init: () => { + 'worklet'; + return new RegExp(pattern, flags); + }, + }) as unknown as ShareableRef; + shareableMappingCache.set(value, handle); + + return handle; +} + +function cloneError(value: T): ShareableRef { + const { name, message, stack } = value; + const handle = makeShareableCloneRecursive({ + __init: () => { + 'worklet'; + // eslint-disable-next-line reanimated/use-reanimated-error + const error = new Error(); + error.name = name; + error.message = message; + error.stack = stack; + return error; + }, + }); + shareableMappingCache.set(value, handle); + return handle as unknown as ShareableRef; +} + +function cloneArrayBuffer( + value: T, + shouldPersistRemote: boolean +): ShareableRef { + const clone = WorkletsModule.makeShareableClone( value, shouldPersistRemote, - undefined + value ); + shareableMappingCache.set(value, clone); + shareableMappingCache.set(clone); + + return clone; +} + +function cloneArrayBufferView( + value: T +): ShareableRef { + const buffer = value.buffer; + const typeName = value.constructor.name; + const handle = makeShareableCloneRecursive({ + __init: () => { + 'worklet'; + if (!VALID_ARRAY_VIEWS_NAMES.includes(typeName)) { + throw new ReanimatedError( + `[Reanimated] Invalid array view name \`${typeName}\`.` + ); + } + const constructor = global[typeName as keyof typeof global]; + if (constructor === undefined) { + throw new ReanimatedError( + `[Reanimated] Constructor for \`${typeName}\` not found.` + ); + } + return new constructor(buffer); + }, + }) as unknown as ShareableRef; + shareableMappingCache.set(value, handle); + + return handle; +} + +function inaccessibleObject(value: T): ShareableRef { + // This is reached for object types that are not of plain Object.prototype. + // We don't support such objects from being transferred as shareables to + // the UI runtime and hence we replace them with "inaccessible object" + // which is implemented as a Proxy object that throws on any attempt + // of accessing its fields. We argue that such objects can sometimes leak + // as attributes of objects being captured by worklets but should never + // be used on the UI runtime regardless. If they are being accessed, the user + // will get an appropriate error message. + const clone = makeShareableCloneRecursive(INACCESSIBLE_OBJECT as T); + shareableMappingCache.set(value, clone); + return clone; } const WORKLET_CODE_THRESHOLD = 255; function getWorkletCode(value: WorkletFunction) { - // @ts-ignore this is fine const code = value?.__initData?.code; if (!code) { return 'unknown'; @@ -329,7 +480,7 @@ function isRemoteFunction(value: { * the UI thread. If the user really wants some objects to be mutable they * should use shared values instead. */ -function freezeObjectIfDev(value: T) { +function freezeObjectInDev(value: T) { if (!__DEV__) { return; } diff --git a/packages/react-native-reanimated/src/worklets/WorkletsModule/JSWorklets.ts b/packages/react-native-reanimated/src/worklets/WorkletsModule/JSWorklets.ts index 95b0978d214..2cc7cfa714c 100644 --- a/packages/react-native-reanimated/src/worklets/WorkletsModule/JSWorklets.ts +++ b/packages/react-native-reanimated/src/worklets/WorkletsModule/JSWorklets.ts @@ -1,9 +1,16 @@ 'use strict'; -import type { IWorkletsModule } from '../../commonTypes'; +import type { IWorkletsModule, ShareableRef } from '../../commonTypes'; +import { ReanimatedError } from '../../errors'; export function createJSWorkletsModule(): IWorkletsModule { return new JSWorklets(); } -class JSWorklets implements IWorkletsModule {} +class JSWorklets implements IWorkletsModule { + makeShareableClone(): ShareableRef { + throw new ReanimatedError( + 'makeShareableClone should never be called in JSWorklets.' + ); + } +} diff --git a/packages/react-native-reanimated/src/worklets/WorkletsModule/NativeWorklets.ts b/packages/react-native-reanimated/src/worklets/WorkletsModule/NativeWorklets.ts index 2dbd69df4ab..e305d6f164d 100644 --- a/packages/react-native-reanimated/src/worklets/WorkletsModule/NativeWorklets.ts +++ b/packages/react-native-reanimated/src/worklets/WorkletsModule/NativeWorklets.ts @@ -25,4 +25,16 @@ See https://docs.swmansion.com/react-native-reanimated/docs/guides/troubleshooti } this.#workletsModuleProxy = global.__workletsModuleProxy; } + + makeShareableClone( + value: T, + shouldPersistRemote: boolean, + nativeStateSource?: object + ) { + return this.#workletsModuleProxy.makeShareableClone( + value, + shouldPersistRemote, + nativeStateSource + ); + } } diff --git a/packages/react-native-reanimated/src/worklets/WorkletsModule/workletsModuleProxy.ts b/packages/react-native-reanimated/src/worklets/WorkletsModule/workletsModuleProxy.ts index 00ae1391e31..537e5556502 100644 --- a/packages/react-native-reanimated/src/worklets/WorkletsModule/workletsModuleProxy.ts +++ b/packages/react-native-reanimated/src/worklets/WorkletsModule/workletsModuleProxy.ts @@ -1,4 +1,12 @@ 'use strict'; +import type { ShareableRef } from '../../commonTypes'; + /** Type of `__workletsModuleProxy` injected with JSI. */ -export interface WorkletsModuleProxy {} +export interface WorkletsModuleProxy { + makeShareableClone( + value: TValue, + shouldPersistRemote: boolean, + nativeStateSource?: object + ): ShareableRef; +} diff --git a/packages/react-native-worklets/.eslintrc.js b/packages/react-native-worklets/.eslintrc.js new file mode 100644 index 00000000000..17799e75920 --- /dev/null +++ b/packages/react-native-worklets/.eslintrc.js @@ -0,0 +1,4 @@ +/** @type {import('eslint').ESLint.ConfigData} */ +module.exports = { + extends: ['../../.eslintrc.js'], +}; diff --git a/packages/react-native-worklets/.gitattributes b/packages/react-native-worklets/.gitattributes new file mode 100644 index 00000000000..e27f70fa490 --- /dev/null +++ b/packages/react-native-worklets/.gitattributes @@ -0,0 +1,3 @@ +*.pbxproj -text +# specific for windows script files +*.bat text eol=crlf diff --git a/packages/react-native-worklets/.gitignore b/packages/react-native-worklets/.gitignore new file mode 100644 index 00000000000..9a3d039c59d --- /dev/null +++ b/packages/react-native-worklets/.gitignore @@ -0,0 +1,62 @@ +# OSX +.DS_Store + +# VSCode +.vscode/ +jsconfig.json + +# Xcode +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate +project.xcworkspace + +# Android/IJ +.classpath +.cxx +.gradle +.idea +.project +.settings +local.properties +android.iml + +# node.js +node_modules/ +npm-debug.log +yarn-debug.log +yarn-error.log + +# BUCK +buck-out/ +\.buckd/ +android/app/libs +android/keystores/debug.keystore + +# Yarn +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions + +# generated by bob +lib/ + +# React Native Codegen +apple/generated +android/generated diff --git a/packages/react-native-worklets/.watchmanconfig b/packages/react-native-worklets/.watchmanconfig new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/packages/react-native-worklets/.watchmanconfig @@ -0,0 +1 @@ +{} diff --git a/packages/react-native-worklets/LICENSE b/packages/react-native-worklets/LICENSE new file mode 100644 index 00000000000..6882e4794af --- /dev/null +++ b/packages/react-native-worklets/LICENSE @@ -0,0 +1,20 @@ +MIT License + +Copyright (c) 2024 nobody +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/react-native-worklets/RNWorklets.podspec b/packages/react-native-worklets/RNWorklets.podspec new file mode 100644 index 00000000000..9dcdc62ff15 --- /dev/null +++ b/packages/react-native-worklets/RNWorklets.podspec @@ -0,0 +1,64 @@ +require "json" + +package = JSON.parse(File.read(File.join(__dir__, "package.json"))) +folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32' + +Pod::Spec.new do |s| + s.name = "RNWorklets" + s.version = package["version"] + s.summary = package["description"] + s.homepage = "https://github.com/software-mansion/react-native-reanimated" + s.license = package["license"] + s.authors = { "author" => "author@domain.com" } + s.platforms = { :ios => min_ios_version_supported } + s.source = { :git => "https://github.com/software-mansion/react-native-reanimated.git", :tag => "#{s.version}" } + + s.source_files = "apple/*.{h,m,mm,cpp}" + + s.subspec "worklets" do |ss| + ss.source_files = "Common/cpp/worklets/**/*.{cpp,h}" + ss.header_dir = "worklets" + ss.header_mappings_dir = "Common/cpp/worklets" + + ss.subspec "apple" do |sss| + # Please be careful with the snakes. + # 🐍🐍🐍 + # Thank you for your understanding. + sss.source_files = "apple/worklets/**/*.{mm,h,m}" + sss.header_dir = "worklets" + sss.header_mappings_dir = "apple/worklets" + end + end + + # Use install_modules_dependencies helper to install the dependencies if React Native version >=0.71.0. + # See https://github.com/facebook/react-native/blob/febf6b7f33fdb4904669f99d795eba4c0f95d7bf/scripts/cocoapods/new_architecture.rb#L79. + if respond_to?(:install_modules_dependencies, true) + install_modules_dependencies(s) + else + s.dependency "React-Core" + + # Don't install the dependencies when we run `pod install` in the old architecture. + if ENV['RCT_NEW_ARCH_ENABLED'] == '1' then + s.compiler_flags = folly_compiler_flags + " -DRCT_NEW_ARCH_ENABLED=1" + s.pod_target_xcconfig = { + "HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\"", + "OTHER_CPLUSPLUSFLAGS" => "-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1", + "CLANG_CXX_LANGUAGE_STANDARD" => "c++17" + } + s.dependency "React-Codegen" + s.dependency "RCT-Folly" + s.dependency "RCTRequired" + s.dependency "RCTTypeSafety" + s.dependency "ReactCommon/turbomodule/core" + end + end + + s.pod_target_xcconfig = { + "USE_HEADERMAP" => "YES", + "DEFINES_MODULE" => "YES", + "HEADER_SEARCH_PATHS" => '"$(PODS_TARGET_SRCROOT)/ReactCommon" "$(PODS_TARGET_SRCROOT)" "$(PODS_ROOT)/RCT-Folly" "$(PODS_ROOT)/boost" "$(PODS_ROOT)/boost-for-react-native" "$(PODS_ROOT)/DoubleConversion" "$(PODS_ROOT)/Headers/Private/React-Core" "$(PODS_ROOT)/Headers/Private/Yoga"', + "FRAMEWORK_SEARCH_PATHS" => '"${PODS_CONFIGURATION_BUILD_DIR}/React-hermes"', + "CLANG_CXX_LANGUAGE_STANDARD" => "c++17", + } + +end diff --git a/packages/react-native-worklets/android/CMakeLists.txt b/packages/react-native-worklets/android/CMakeLists.txt new file mode 100644 index 00000000000..c2e3256d072 --- /dev/null +++ b/packages/react-native-worklets/android/CMakeLists.txt @@ -0,0 +1,60 @@ +project(Worklets) +cmake_minimum_required(VERSION 3.8) + +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +set(CMAKE_EXPORT_COMPILE_COMMANDS + ON + CACHE INTERNAL "") + +set(CMAKE_CXX_STANDARD 20) + +# default CMAKE_CXX_FLAGS: "-g -DANDROID -fdata-sections -ffunction-sections +# -funwind-tables -fstack-protector-strong -no-canonical-prefixes +# -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -fstack-protector-all" +include("${REACT_NATIVE_DIR}/ReactAndroid/cmake-utils/folly-flags.cmake") +add_compile_options(${folly_FLAGS}) + +string( + APPEND + CMAKE_CXX_FLAGS + " -DREACT_NATIVE_MINOR_VERSION=${REACT_NATIVE_MINOR_VERSION} -DREANIMATED_VERSION=${REANIMATED_VERSION} -DHERMES_ENABLE_DEBUGGER=${HERMES_ENABLE_DEBUGGER}" +) + +string( + APPEND + CMAKE_CXX_FLAGS + " -fexceptions -fno-omit-frame-pointer -frtti -fstack-protector-all -std=c++${CMAKE_CXX_STANDARD} -Wall -Werror" +) + +if(${IS_NEW_ARCHITECTURE_ENABLED}) + string(APPEND CMAKE_CXX_FLAGS " -DRCT_NEW_ARCH_ENABLED") +endif() + +if(${IS_REANIMATED_EXAMPLE_APP}) + string(APPEND CMAKE_CXX_FLAGS " -DIS_REANIMATED_EXAMPLE_APP -Wpedantic") +endif() + +if(NOT ${CMAKE_BUILD_TYPE} MATCHES "Debug") + string(APPEND CMAKE_CXX_FLAGS " -DNDEBUG") +endif() + +if(${JS_RUNTIME} STREQUAL "hermes") + string(APPEND CMAKE_CXX_FLAGS " -DJS_RUNTIME_HERMES=1") +elseif(${JS_RUNTIME} STREQUAL "jsc") + string(APPEND CMAKE_CXX_FLAGS " -DJS_RUNTIME_JSC=1") +elseif(${JS_RUNTIME} STREQUAL "v8") + string(APPEND CMAKE_CXX_FLAGS " -DJS_RUNTIME_V8=1") +else() + message(FATAL_ERROR "Unknown JS runtime ${JS_RUNTIME}.") +endif() + +# Resolves "CMake Warning: Manually-specified variables were not used by the +# project" when any of the following variables is not used in some build +# configuration. +set(ignoreMe "${JS_RUNTIME_DIR}") + +set(BUILD_DIR "${CMAKE_SOURCE_DIR}/build") +set(ANDROID_CPP_DIR "${CMAKE_SOURCE_DIR}/src/main/cpp") +set(COMMON_CPP_DIR "${CMAKE_SOURCE_DIR}/../Common/cpp") + +add_subdirectory("${ANDROID_CPP_DIR}/worklets") diff --git a/packages/react-native-worklets/android/build.gradle b/packages/react-native-worklets/android/build.gradle new file mode 100644 index 00000000000..4c532e21201 --- /dev/null +++ b/packages/react-native-worklets/android/build.gradle @@ -0,0 +1,438 @@ +import com.android.Version +import org.apache.tools.ant.filters.ReplaceTokens +import org.apache.tools.ant.taskdefs.condition.Os +import groovy.json.JsonSlurper +import com.android.build.gradle.tasks.ExternalNativeBuildJsonTask + +import javax.inject.Inject +import java.nio.file.Files +import java.nio.file.Paths + +/** + * Finds the path of the installed npm package with the given name using Node's + * module resolution algorithm, which searches "node_modules" directories up to + * the file system root. This handles various cases, including: + * + * - Working in the open-source RN repo: + * Gradle: /path/to/react-native/ReactAndroid + * Node module: /path/to/react-native/node_modules/[package] + * + * - Installing RN as a dependency of an app and searching for hoisted + * dependencies: + * Gradle: /path/to/app/node_modules/react-native/ReactAndroid + * Node module: /path/to/app/node_modules/[package] + * + * - Working in a larger repo (e.g., Facebook) that contains RN: + * Gradle: /path/to/repo/path/to/react-native/ReactAndroid + * Node module: /path/to/repo/node_modules/[package] + * + * The search begins at the given base directory (a File object). The returned + * path is a string. + */ +static def findNodeModulePath(baseDir, packageName) { + def basePath = baseDir.toPath().normalize() + // Node's module resolution algorithm searches up to the root directory, + // after which the base path will be null + while (basePath) { + def candidatePath = Paths.get(basePath.toString(), "node_modules", packageName) + if (candidatePath.toFile().exists()) { + return candidatePath.toString() + } + basePath = basePath.getParent() + } + return null +} + +def safeExtGet(prop, fallback) { + rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback +} + +def safeAppExtGet(prop, fallback) { + def appProject = rootProject.allprojects.find { it.plugins.hasPlugin('com.android.application') } + appProject?.ext?.has(prop) ? appProject.ext.get(prop) : fallback +} + +def resolveBuildType() { + Gradle gradle = getGradle() + String tskReqStr = gradle.getStartParameter().getTaskRequests()['args'].toString() + return tskReqStr.contains('Release') ? 'release' : 'debug' +} + +def isReanimatedExampleApp() { + return safeAppExtGet("isReanimatedExampleApp", false) +} + +def isNewArchitectureEnabled() { + // To opt-in for the New Architecture, you can either: + // - Set `newArchEnabled` to true inside the `gradle.properties` file + // - Invoke gradle with `-newArchEnabled=true` + // - Set an environment variable `ORG_GRADLE_PROJECT_newArchEnabled=true` + return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true" +} + +def resolveReactNativeDirectory() { + def reactNativeLocation = safeAppExtGet("REACT_NATIVE_NODE_MODULES_DIR", null) + if (reactNativeLocation != null) { + return file(reactNativeLocation) + } + + // Fallback to node resolver for custom directory structures like monorepos. + def reactNativePackage = file(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()) + if(reactNativePackage.exists()) { + return reactNativePackage.parentFile + } + + throw new GradleException( + "[Reanimated] Unable to resolve react-native location in node_modules. You should project extension property (in `app/build.gradle`) `REACT_NATIVE_NODE_MODULES_DIR` with path to react-native." + ) +} + +def getPlaygroundAppName() { // only for the development + String playgroundAppName = "" + try { + rootProject.getSubprojects().forEach({project -> + if (project.plugins.hasPlugin("com.android.application")) { + var projectCatalogAbsolutePath = project.projectDir.toString().replace("/android/app", "") + var slashPosition = projectCatalogAbsolutePath.lastIndexOf("/") + playgroundAppName = projectCatalogAbsolutePath.substring(slashPosition + 1) + } + }) + } catch (_) { + throw new GradleException("[Reanimated] Couldn't determine playground app name.") + } + return playgroundAppName +} + +def toPlatformFileString(String path) { + if (Os.isFamily(Os.FAMILY_WINDOWS)) { + path = path.replace(File.separatorChar, '/' as char) + } + return path +} + +if (isNewArchitectureEnabled()) { + apply plugin: "com.facebook.react" +} + +def reactNativeRootDir = resolveReactNativeDirectory() + +def reactProperties = new Properties() +file("$reactNativeRootDir/ReactAndroid/gradle.properties").withInputStream { reactProperties.load(it) } + +def REACT_NATIVE_VERSION = reactProperties.getProperty("VERSION_NAME") +def REACT_NATIVE_MINOR_VERSION = REACT_NATIVE_VERSION.startsWith("0.0.0-") ? 1000 : REACT_NATIVE_VERSION.split("\\.")[1].toInteger() +def IS_NEW_ARCHITECTURE_ENABLED = isNewArchitectureEnabled() + +// We download various C++ open-source dependencies into downloads. +// We then copy both the downloaded code and our custom makefiles and headers into third-party-ndk. +// After that we build native code from src/main/jni with module path pointing at third-party-ndk. + +def customDownloadsDir = System.getenv("REACT_NATIVE_DOWNLOADS_DIR") +def downloadsDir = customDownloadsDir ? new File(customDownloadsDir) : new File("$buildDir/downloads") +def thirdPartyNdkDir = new File("$buildDir/third-party-ndk") + +def reactNativeThirdParty = new File("$reactNativeRootDir/ReactAndroid/src/main/jni/third-party") +def reactNativeAndroidDownloadDir = new File("$reactNativeRootDir/ReactAndroid/build/downloads") + +def workletsPrefabHeadersDir = project.file("$buildDir/prefab-headers/worklets") + +def JS_RUNTIME = { + // Override JS runtime with environment variable + if (System.getenv("JS_RUNTIME")) { + return System.getenv("JS_RUNTIME") + } + + // Enable V8 runtime if react-native-v8 is installed + def v8Project = rootProject.getSubprojects().find { project -> project.name == "react-native-v8" } + if (v8Project != null) { + return "v8" + } + + // Check if Hermes is enabled in app setup + def appProject = rootProject.allprojects.find { it.plugins.hasPlugin('com.android.application') } + if (appProject?.hermesEnabled?.toBoolean() || appProject?.ext?.react?.enableHermes?.toBoolean()) { + return "hermes" + } + + // Use JavaScriptCore (JSC) by default + return "jsc" +}.call() + +def jsRuntimeDir = { + if (JS_RUNTIME == "hermes") { + return Paths.get(reactNativeRootDir.path, "sdks", "hermes") + } else if (JS_RUNTIME == "v8") { + return findProject(":react-native-v8").getProjectDir().getParent() + } else { + return Paths.get(reactNativeRootDir.path, "ReactCommon", "jsi") + } +}.call() + +def reactNativeArchitectures() { + def value = project.getProperties().get("reactNativeArchitectures") + return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"] +} + +buildscript { + // Buildscript is evaluated before everything else so we can't use getExtOrDefault + def kotlin_version = rootProject.ext.has("kotlinVersion") ? rootProject.ext.get("kotlinVersion") : project.properties["Worklets_kotlinVersion"] + + // repositories { + // google() + // mavenCentral() + // } + + repositories { + google() + mavenCentral() + maven { + url "https://plugins.gradle.org/m2/" + } + } + dependencies { + classpath "com.android.tools.build:gradle:8.2.1" + classpath "de.undercouch:gradle-download-task:5.6.0" + classpath "com.diffplug.spotless:spotless-plugin-gradle:6.25.0" + // noinspection DifferentKotlinGradleVersion + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +if (project == rootProject) { + apply from: "spotless.gradle" +} + +apply plugin: "com.android.library" +apply plugin: "maven-publish" +apply plugin: "de.undercouch.download" + + +android { + compileSdkVersion safeExtGet("compileSdkVersion", 34) + + def agpVersion = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION + if (agpVersion.tokenize('.')[0].toInteger() >= 7) { + namespace "com.swmansion.worklets" + } + + if (rootProject.hasProperty("ndkPath")) { + ndkPath rootProject.ext.ndkPath + } + if (rootProject.hasProperty("ndkVersion")) { + ndkVersion rootProject.ext.ndkVersion + } + + buildFeatures { + prefab true + prefabPublishing true + buildConfig true + } + + prefab { + worklets { + headers workletsPrefabHeadersDir.absolutePath + } + } + + defaultConfig { + minSdkVersion safeExtGet("minSdkVersion", 23) + targetSdkVersion safeExtGet("targetSdkVersion", 34) + versionCode 1 + versionName "1.0" + buildConfigField("boolean", "IS_NEW_ARCHITECTURE_ENABLED", IS_NEW_ARCHITECTURE_ENABLED.toString()) + externalNativeBuild { + cmake { + arguments "-DANDROID_STL=c++_shared", + "-DREACT_NATIVE_MINOR_VERSION=${REACT_NATIVE_MINOR_VERSION}", + "-DANDROID_TOOLCHAIN=clang", + "-DREACT_NATIVE_DIR=${toPlatformFileString(reactNativeRootDir.path)}", + "-DJS_RUNTIME=${JS_RUNTIME}", + "-DJS_RUNTIME_DIR=${jsRuntimeDir}", + "-DIS_NEW_ARCHITECTURE_ENABLED=${IS_NEW_ARCHITECTURE_ENABLED}", + "-DIS_REANIMATED_EXAMPLE_APP=${isReanimatedExampleApp()}" + abiFilters (*reactNativeArchitectures()) + } + } + + buildConfigField("boolean", "IS_INTERNAL_BUILD", "false") + buildConfigField("int", "EXOPACKAGE_FLAGS", "0") + buildConfigField("int", "REACT_NATIVE_MINOR_VERSION", REACT_NATIVE_MINOR_VERSION.toString()) + + consumerProguardFiles 'proguard-rules.pro' + } + externalNativeBuild { + cmake { + version = System.getenv("CMAKE_VERSION") ?: "3.22.1" + path "CMakeLists.txt" + } + } + buildTypes { + debug { + externalNativeBuild { + cmake { + if (JS_RUNTIME == "hermes") { + arguments "-DHERMES_ENABLE_DEBUGGER=1" + } else { + arguments "-DHERMES_ENABLE_DEBUGGER=0" + } + } + } + } + release { + externalNativeBuild { + cmake { + arguments "-DHERMES_ENABLE_DEBUGGER=0" + } + } + } + } + lintOptions { + abortOnError false + } + packagingOptions { + doNotStrip resolveBuildType() == 'debug' ? "**/**/*.so" : '' + // For some reason gradle only complains about the duplicated version of librrc_root and libreact_render libraries + // while there are more libraries copied in intermediates folder of the lib build directory, we exclude + // only the ones that make the build fail (ideally we should only include libreanimated but we + // are only allowed to specify exclude patterns) + excludes = [ + "META-INF", + "META-INF/**", + "**/libc++_shared.so", + "**/libfbjni.so", + "**/libjsi.so", + "**/libfolly_json.so", + "**/libfolly_runtime.so", + "**/libglog.so", + "**/libhermes.so", + "**/libhermes-executor-debug.so", + "**/libhermes_executor.so", + "**/libhermestooling.so", + "**/libreactnativejni.so", + "**/libturbomodulejsijni.so", + "**/libreactnative.so", + "**/libreact_nativemodule_core.so", + "**/libreact_render*.so", + "**/librrc_root.so", + "**/libjscexecutor.so", + "**/libv8executor.so", + ] + } + tasks.withType(JavaCompile) { + compileTask -> + compileTask.dependsOn(packageNdkLibs) + } + configurations { + extractHeaders + extractSO + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +def assertMinimalReactNativeVersion = task assertMinimalReactNativeVersionTask { + // If you change the minimal React Native version remember to update Compatibility Table in docs + def minimalReactNativeVersion = 74 + onlyIf { REACT_NATIVE_MINOR_VERSION < minimalReactNativeVersion } + doFirst { + throw new GradleException("[Reanimated] Unsupported React Native version. Please use $minimalReactNativeVersion. or newer.") + } +} + +task prepareWorkletsHeadersForPrefabs(type: Copy) { + from("$projectDir/src/main/cpp") + from("$projectDir/../Common/cpp") + include("worklets/**/*.h") + into(workletsPrefabHeadersDir) +} + +tasks.preBuild { + dependsOn assertMinimalReactNativeVersion +} + +task cleanCmakeCache() { + tasks.getByName("clean").dependsOn(cleanCmakeCache) + doFirst { + delete "${projectDir}/.cxx" + } +} + +task printVersions { + println "Android gradle plugin: ${Version.ANDROID_GRADLE_PLUGIN_VERSION}" + println "Gradle: ${project.gradle.gradleVersion}" +} + +task createNativeDepsDirectories() { + downloadsDir.mkdirs() + thirdPartyNdkDir.mkdirs() + workletsPrefabHeadersDir.mkdirs() +} + +task packageNdkLibs(type: Copy) { + from("$buildDir/worklets-ndk/all") + include("**/libworklets.so") + into("$projectDir/src/main/jniLibs") +} + +repositories { + mavenCentral() + mavenLocal() + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm + url "$reactNativeRootDir/android" + } + maven { + // Android JSC is installed from npm + url "$reactNativeRootDir/../jsc-android/dist" + } + google() +} + +dependencies { + implementation "com.facebook.yoga:proguard-annotations:1.19.0" + implementation "androidx.transition:transition:1.1.0" + implementation "androidx.core:core:1.6.0" + + implementation "com.facebook.react:react-android" // version substituted by RNGP + if (JS_RUNTIME == "hermes") { + implementation "com.facebook.react:hermes-android" // version substituted by RNGP + } +} + +def nativeBuildDependsOn(dependsOnTask) { + def buildTasks = tasks.findAll({ task -> ( + !task.name.contains("Clean") + && (task.name.contains("externalNative") + || task.name.contains("CMake") + || task.name.contains("generateJsonModel") + ) + ) }) + buildTasks.forEach { task -> task.dependsOn(dependsOnTask) } +} + +afterEvaluate { + preBuild.dependsOn(prepareWorkletsHeadersForPrefabs) + + tasks.forEach({ task -> + if (task.name.contains("JniLibFolders")) { + task.dependsOn(packageNdkLibs) + } + }) + + if (JS_RUNTIME == "hermes") { + // Do nothing + } else if (JS_RUNTIME == "v8") { + def buildTasks = tasks.findAll({ task -> + !task.name.contains("Clean") && (task.name.contains("externalNative") || task.name.contains("CMake") || task.name.startsWith("generateJsonModel")) }) + buildTasks.forEach { task -> + def buildType = task.name.endsWith('Debug') ? 'Debug' : 'Release' + task.dependsOn(":react-native-v8:copy${buildType}JniLibsProjectOnly") + } + } else if (JS_RUNTIME == "jsc") { + // Do nothing + } else { + throw GradleScriptException("[Reanimated] Unknown JS runtime ${JS_RUNTIME}.") + } +} diff --git a/packages/react-native-worklets/android/gradle.properties b/packages/react-native-worklets/android/gradle.properties new file mode 100644 index 00000000000..2cf6e18a6f8 --- /dev/null +++ b/packages/react-native-worklets/android/gradle.properties @@ -0,0 +1,5 @@ +Worklets_kotlinVersion=1.7.0 +Worklets_minSdkVersion=21 +Worklets_targetSdkVersion=31 +Worklets_compileSdkVersion=31 +Worklets_ndkversion=21.4.7075529 diff --git a/packages/react-native-worklets/android/src/main/AndroidManifest.xml b/packages/react-native-worklets/android/src/main/AndroidManifest.xml new file mode 100644 index 00000000000..a2f47b6057d --- /dev/null +++ b/packages/react-native-worklets/android/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + + diff --git a/packages/react-native-worklets/android/src/main/cpp/worklets/CMakeLists.txt b/packages/react-native-worklets/android/src/main/cpp/worklets/CMakeLists.txt new file mode 100644 index 00000000000..63218fb48ae --- /dev/null +++ b/packages/react-native-worklets/android/src/main/cpp/worklets/CMakeLists.txt @@ -0,0 +1,88 @@ +cmake_minimum_required(VERSION 3.8) + +file(GLOB_RECURSE WORKLETS_COMMON_CPP_SOURCES CONFIGURE_DEPENDS + "${COMMON_CPP_DIR}/worklets/*.cpp") +file(GLOB_RECURSE WORKLETS_ANDROID_CPP_SOURCES CONFIGURE_DEPENDS + "${ANDROID_CPP_DIR}/worklets/*.cpp") + +# Consume shared libraries and headers from prefabs +find_package(fbjni REQUIRED CONFIG) +find_package(ReactAndroid REQUIRED CONFIG) + +if(${JS_RUNTIME} STREQUAL "hermes") + find_package(hermes-engine REQUIRED CONFIG) +endif() + +add_library(worklets SHARED ${WORKLETS_COMMON_CPP_SOURCES} + ${WORKLETS_ANDROID_CPP_SOURCES}) + +# includes +target_include_directories(worklets PUBLIC "${COMMON_CPP_DIR}" + "${ANDROID_CPP_DIR}") + +target_include_directories( + worklets + PRIVATE "${REACT_NATIVE_DIR}/ReactCommon" + "${REACT_NATIVE_DIR}/ReactAndroid/src/main/jni/react/turbomodule" + "${REACT_NATIVE_DIR}/ReactCommon/react/nativemodule/core/ReactCommon" + "${REACT_NATIVE_DIR}/ReactCommon/callinvoker" + "${REACT_NATIVE_DIR}/ReactCommon/runtimeexecutor") + +if(${IS_NEW_ARCHITECTURE_ENABLED}) + target_include_directories( + worklets + PRIVATE + "${REACT_NATIVE_DIR}/ReactCommon/yoga" + "${REACT_NATIVE_DIR}/ReactCommon/react/renderer/graphics/platform/cxx") + + if(ReactAndroid_VERSION_MINOR LESS 76) + target_link_libraries( + worklets ReactAndroid::fabricjni ReactAndroid::react_debug + ReactAndroid::react_render_core + ReactAndroid::react_render_componentregistry ReactAndroid::rrc_view) + endif() +endif() + +# build shared lib +set_target_properties(worklets PROPERTIES LINKER_LANGUAGE CXX) + +target_link_libraries(worklets log ReactAndroid::jsi fbjni::fbjni) + +if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76) + target_link_libraries(worklets ReactAndroid::reactnative) +else() + target_link_libraries( + worklets ReactAndroid::react_nativemodule_core ReactAndroid::folly_runtime + ReactAndroid::glog ReactAndroid::reactnativejni) +endif() + +if(${JS_RUNTIME} STREQUAL "hermes") + target_link_libraries(worklets hermes-engine::libhermes) + + if(${HERMES_ENABLE_DEBUGGER}) + if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76) + target_link_libraries(worklets ReactAndroid::hermestooling) + else() + target_link_libraries(worklets ReactAndroid::hermes_executor) + endif() + endif() +elseif(${JS_RUNTIME} STREQUAL "jsc") + if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76) + target_link_libraries(worklets ReactAndroid::jsctooling) + else() + target_link_libraries(worklets ReactAndroid::jscexecutor) + endif() +elseif(${JS_RUNTIME} STREQUAL "v8") # TODO: Refactor this when adding support + # for newest V8 + target_include_directories(worklets PRIVATE "${JS_RUNTIME_DIR}/src") + file( + GLOB + V8_SO_DIR + "${JS_RUNTIME_DIR}/android/build/intermediates/library_jni/*/jni/${ANDROID_ABI}" + ) + find_library( + V8EXECUTOR_LIB v8executor + PATHS ${V8_SO_DIR} + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) + target_link_libraries(worklets ${V8EXECUTOR_LIB}) +endif() diff --git a/packages/react-native-worklets/android/src/main/java/com/swmansion/worklets/DummyWorkletsModule.java b/packages/react-native-worklets/android/src/main/java/com/swmansion/worklets/DummyWorkletsModule.java new file mode 100644 index 00000000000..c5cfd25e155 --- /dev/null +++ b/packages/react-native-worklets/android/src/main/java/com/swmansion/worklets/DummyWorkletsModule.java @@ -0,0 +1,18 @@ +package com.swmansion.worklets; + +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.module.annotations.ReactModule; + +@ReactModule(name = DummyWorkletsModule.NAME) +public class DummyWorkletsModule extends + NativeSulphateWorkletsSpec { + + public DummyWorkletsModule(ReactApplicationContext reactContext) { + super(reactContext); + } + + @Override + public boolean installTurboModule() { + return true; + } +} diff --git a/packages/react-native-worklets/android/src/main/java/com/swmansion/worklets/WorkletsPackage.java b/packages/react-native-worklets/android/src/main/java/com/swmansion/worklets/WorkletsPackage.java new file mode 100644 index 00000000000..23066283cbe --- /dev/null +++ b/packages/react-native-worklets/android/src/main/java/com/swmansion/worklets/WorkletsPackage.java @@ -0,0 +1,56 @@ +package com.swmansion.worklets; + +import androidx.annotation.NonNull; + +import com.facebook.react.BaseReactPackage; +import com.facebook.react.ReactPackage; +import com.facebook.react.bridge.NativeModule; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.module.annotations.ReactModule; +import com.facebook.react.module.annotations.ReactModuleList; +import com.facebook.react.module.model.ReactModuleInfo; +import com.facebook.react.module.model.ReactModuleInfoProvider; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +@ReactModuleList( + nativeModules = { + DummyWorkletsModule.class + }) +public class WorkletsPackage extends BaseReactPackage implements ReactPackage { + @Override + public NativeModule getModule( + @NonNull String name, @NonNull ReactApplicationContext reactContext) { + return switch (name) { + case DummyWorkletsModule.NAME -> new DummyWorkletsModule(reactContext); + default -> null; + }; + } + + @Override + public ReactModuleInfoProvider getReactModuleInfoProvider() { + Class[] moduleList = + new Class[] { + DummyWorkletsModule.class + }; + + final Map reactModuleInfoMap = new HashMap<>(); + for (Class moduleClass : moduleList) { + ReactModule reactModule = + Objects.requireNonNull(moduleClass.getAnnotation(ReactModule.class)); + + reactModuleInfoMap.put( + reactModule.name(), + new ReactModuleInfo( + reactModule.name(), + moduleClass.getName(), + true, + reactModule.needsEagerInit(), + reactModule.isCxxModule(), + BuildConfig.IS_NEW_ARCHITECTURE_ENABLED)); + } + + return () -> reactModuleInfoMap; + } +} diff --git a/packages/react-native-worklets/apple/worklets/apple/DummyWorkletsModule.h b/packages/react-native-worklets/apple/worklets/apple/DummyWorkletsModule.h new file mode 100644 index 00000000000..c2a6b079ec7 --- /dev/null +++ b/packages/react-native-worklets/apple/worklets/apple/DummyWorkletsModule.h @@ -0,0 +1,5 @@ +#import + +@interface DummyWorkletsModule : NSObject + +@end diff --git a/packages/react-native-worklets/apple/worklets/apple/DummyWorkletsModule.mm b/packages/react-native-worklets/apple/worklets/apple/DummyWorkletsModule.mm new file mode 100644 index 00000000000..2ba55e07e77 --- /dev/null +++ b/packages/react-native-worklets/apple/worklets/apple/DummyWorkletsModule.mm @@ -0,0 +1,19 @@ +#import + +@implementation DummyWorkletsModule{ + std::string valueUnpackerCode_; +} +RCT_EXPORT_MODULE() + +- (std::shared_ptr)getTurboModule : + (const facebook::react::ObjCTurboModule::InitParams &)params +{ + return std::make_shared(params); +} + +RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(installTurboModule) +{ + return @YES; +} + +@end diff --git a/packages/react-native-worklets/babel.config.js b/packages/react-native-worklets/babel.config.js new file mode 100644 index 00000000000..5d51f258afc --- /dev/null +++ b/packages/react-native-worklets/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: ['module:react-native-builder-bob/babel-preset'], +}; diff --git a/packages/react-native-worklets/package.json b/packages/react-native-worklets/package.json new file mode 100644 index 00000000000..c68932285e0 --- /dev/null +++ b/packages/react-native-worklets/package.json @@ -0,0 +1,82 @@ +{ + "name": "react-native-worklets", + "version": "0.0.1", + "description": "🚀", + "scripts": { + "build": "bob build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/software-mansion/react-native-reanimated.git", + "directory": "packages/react-native-worklets" + }, + "license": "MIT", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/software-mansion/react-native-reanimated/issues" + }, + "homepage": "https://docs.swmansion.com/react-native-reanimated", + "peerDependencies": { + "@babel/core": "^7.0.0-0", + "react": "*", + "react-native": "*" + }, + "devDependencies": { + "@react-native-community/cli": "15.0.1", + "@react-native/eslint-config": "0.76.5", + "@types/jest": "^29.5.5", + "@types/react": "^18.2.44", + "eslint": "^8.57.0", + "prettier": "^3.3.3", + "react": "18.3.1", + "react-native": "0.76.5", + "react-native-builder-bob": "0.33.1", + "typescript": "~5.3.0" + }, + "main": "./lib/module/index", + "module": "./lib/module/index", + "react-native": "./src/index", + "source": "./src/index", + "types": "lib/typescript/index.d.ts", + "files": [ + "src", + "lib", + "android", + "apple", + "Common", + "*.podspec", + "react-native.config.js", + "!apple/build", + "!android/build", + "!android/gradle", + "!android/gradlew", + "!android/gradlew.bat", + "!android/local.properties", + "!**/__tests__", + "!**/__fixtures__", + "!**/__mocks__", + "!**/.*" + ], + "react-native-builder-bob": { + "source": "src", + "output": "lib", + "targets": [ + [ + "module", + { + "esm": true, + "jsxRuntime": "classic" + } + ], + "typescript" + ] + }, + "codegenConfig": { + "name": "rnworklets", + "type": "modules", + "jsSrcsDir": "src/specs", + "android": { + "javaPackageName": "com.swmansion.worklets" + } + } +} diff --git a/packages/react-native-worklets/src/index.ts b/packages/react-native-worklets/src/index.ts new file mode 100644 index 00000000000..ba2a736031d --- /dev/null +++ b/packages/react-native-worklets/src/index.ts @@ -0,0 +1,3 @@ +'use strict'; + +export { DummyWorkletsTurboModule } from './specs'; diff --git a/packages/react-native-worklets/src/specs/NativeDummyWorklets.ts b/packages/react-native-worklets/src/specs/NativeDummyWorklets.ts new file mode 100644 index 00000000000..f59202c88c0 --- /dev/null +++ b/packages/react-native-worklets/src/specs/NativeDummyWorklets.ts @@ -0,0 +1,9 @@ +'use strict'; +import type { TurboModule } from 'react-native'; +import { TurboModuleRegistry } from 'react-native'; + +interface Spec extends TurboModule { + installTurboModule: () => boolean; +} + +export default TurboModuleRegistry.get('DummyWorklets'); diff --git a/packages/react-native-worklets/src/specs/index.ts b/packages/react-native-worklets/src/specs/index.ts new file mode 100644 index 00000000000..5b294afa510 --- /dev/null +++ b/packages/react-native-worklets/src/specs/index.ts @@ -0,0 +1,5 @@ +'use strict'; + +import DummyWorkletsTurboModule from './NativeDummyWorklets'; + +export { DummyWorkletsTurboModule }; diff --git a/packages/react-native-worklets/tsconfig.json b/packages/react-native-worklets/tsconfig.json new file mode 100644 index 00000000000..fd4ac617a0c --- /dev/null +++ b/packages/react-native-worklets/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "paths": { + "react-native-worklets": ["./src"] + } + }, + "include": ["src"] +} diff --git a/yarn.lock b/yarn.lock index b4873e7d2ab..896be9bf957 100644 --- a/yarn.lock +++ b/yarn.lock @@ -85,14 +85,14 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.25.9": - version: 7.26.0 - resolution: "@babel/code-frame@npm:7.26.0" +"@babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.2": + version: 7.26.2 + resolution: "@babel/code-frame@npm:7.26.2" dependencies: "@babel/helper-validator-identifier": "npm:^7.25.9" js-tokens: "npm:^4.0.0" picocolors: "npm:^1.0.0" - checksum: 10/41deb0a9ac72d81e46aeab7e587a75e46c7af6a717e10b150a150b332e843807eacb7c856832c84bee2c5015fe31de23e04c18e052c83a1254027c71c0840791 + checksum: 10/db2c2122af79d31ca916755331bb4bac96feb2b334cdaca5097a6b467fdd41963b89b14b6836a14f083de7ff887fc78fa1b3c10b14e743d33e12dbfe5ee3d223 languageName: node linkType: hard @@ -104,13 +104,13 @@ __metadata: linkType: hard "@babel/compat-data@npm:^7.25.9": - version: 7.26.0 - resolution: "@babel/compat-data@npm:7.26.0" - checksum: 10/e847d58222eb567da4bcc2c8e4e44b508d1a34626922858fe12edeb73b5f3c486e7e77a351725b4347525d623dc5046b8a6355df76f368560ca6cbac10fef2c5 + version: 7.26.3 + resolution: "@babel/compat-data@npm:7.26.3" + checksum: 10/0bf4e491680722aa0eac26f770f2fae059f92e2ac083900b241c90a2c10f0fc80e448b1feccc2b332687fab4c3e33e9f83dee9ef56badca1fb9f3f71266d9ebf languageName: node linkType: hard -"@babel/core@npm:^7.1.0, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.12.9, @babel/core@npm:^7.13.16, @babel/core@npm:^7.20.0, @babel/core@npm:^7.23.6, @babel/core@npm:^7.23.9, @babel/core@npm:^7.25.2": +"@babel/core@npm:^7.1.0, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.12.9, @babel/core@npm:^7.13.16, @babel/core@npm:^7.20.0, @babel/core@npm:^7.23.9, @babel/core@npm:^7.25.2": version: 7.25.2 resolution: "@babel/core@npm:7.25.2" dependencies: @@ -133,7 +133,21 @@ __metadata: languageName: node linkType: hard -"@babel/eslint-parser@npm:^7.20.0, @babel/eslint-parser@npm:^7.25.1": +"@babel/eslint-parser@npm:^7.20.0": + version: 7.25.9 + resolution: "@babel/eslint-parser@npm:7.25.9" + dependencies: + "@nicolo-ribaudo/eslint-scope-5-internals": "npm:5.1.1-v1" + eslint-visitor-keys: "npm:^2.1.0" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.11.0 + eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 + checksum: 10/ebb68d80b1fa2b964ad1147cc610e0c69b224e620419a885ba5abc996740523bee636a0d447fc29a0d495dbce5fa0246737b25e9e679cca6c5797fdac5176378 + languageName: node + linkType: hard + +"@babel/eslint-parser@npm:^7.25.1": version: 7.25.1 resolution: "@babel/eslint-parser@npm:7.25.1" dependencies: @@ -159,16 +173,16 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.25.9": - version: 7.26.0 - resolution: "@babel/generator@npm:7.26.0" +"@babel/generator@npm:^7.26.3": + version: 7.26.3 + resolution: "@babel/generator@npm:7.26.3" dependencies: - "@babel/parser": "npm:^7.26.0" - "@babel/types": "npm:^7.26.0" + "@babel/parser": "npm:^7.26.3" + "@babel/types": "npm:^7.26.3" "@jridgewell/gen-mapping": "npm:^0.3.5" "@jridgewell/trace-mapping": "npm:^0.3.25" jsesc: "npm:^3.0.2" - checksum: 10/3528b0b5da7003617771ddfc564bcb4037dde59e8142e3808ae8eb5d45c5dfda74df5eb9e6162ab2c2bc66329c609a44d9fd0ce6d4bc14b89b3deb92c3343c56 + checksum: 10/c1d8710cc1c52af9d8d67f7d8ea775578aa500887b327d2a81e27494764a6ef99e438dd7e14cf7cd3153656492ee27a8362980dc438087c0ca39d4e75532c638 languageName: node linkType: hard @@ -317,7 +331,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.22.15, @babel/helper-module-imports@npm:^7.24.7": +"@babel/helper-module-imports@npm:^7.24.7": version: 7.24.7 resolution: "@babel/helper-module-imports@npm:7.24.7" dependencies: @@ -327,6 +341,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-imports@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-module-imports@npm:7.25.9" + dependencies: + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10/e090be5dee94dda6cd769972231b21ddfae988acd76b703a480ac0c96f3334557d70a965bf41245d6ee43891e7571a8b400ccf2b2be5803351375d0f4e5bcf08 + languageName: node + linkType: hard + "@babel/helper-module-transforms@npm:^7.24.7, @babel/helper-module-transforms@npm:^7.24.8, @babel/helper-module-transforms@npm:^7.25.0, @babel/helper-module-transforms@npm:^7.25.2": version: 7.25.2 resolution: "@babel/helper-module-transforms@npm:7.25.2" @@ -552,14 +576,14 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.0": - version: 7.26.1 - resolution: "@babel/parser@npm:7.26.1" +"@babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.3": + version: 7.26.3 + resolution: "@babel/parser@npm:7.26.3" dependencies: - "@babel/types": "npm:^7.26.0" + "@babel/types": "npm:^7.26.3" bin: parser: ./bin/babel-parser.js - checksum: 10/87d6248c6a1f962621b4505e24ee89c9869d40640beb231d6befb2d56112a84a654b15980941300617aa3211ca9632cc1644c6d3f72ea3427f220133d11d9c0c + checksum: 10/e7e3814b2dc9ee3ed605d38223471fa7d3a84cbe9474d2b5fa7ac57dc1ddf75577b1fd3a93bf7db8f41f28869bda795cddd80223f980be23623b6434bf4c88a8 languageName: node linkType: hard @@ -833,6 +857,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-flow@npm:^7.25.9": + version: 7.26.0 + resolution: "@babel/plugin-syntax-flow@npm:7.26.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/fdc0d0a7b512e00d933e12cf93c785ea4645a193f4b539230b7601cfaa8c704410199318ce9ea14e5fca7d13e9027822f7d81a7871d3e854df26b6af04cc3c6c + languageName: node + linkType: hard + "@babel/plugin-syntax-import-assertions@npm:^7.24.7": version: 7.25.6 resolution: "@babel/plugin-syntax-import-assertions@npm:7.25.6" @@ -1037,7 +1072,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-async-to-generator@npm:^7.0.0, @babel/plugin-transform-async-to-generator@npm:^7.20.0, @babel/plugin-transform-async-to-generator@npm:^7.24.7": +"@babel/plugin-transform-async-to-generator@npm:^7.0.0, @babel/plugin-transform-async-to-generator@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-async-to-generator@npm:7.24.7" dependencies: @@ -1050,6 +1085,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-async-to-generator@npm:^7.20.0": + version: 7.25.9 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.25.9" + dependencies: + "@babel/helper-module-imports": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-remap-async-to-generator": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/b3ad50fb93c171644d501864620ed23952a46648c4df10dc9c62cc9ad08031b66bd272cfdd708faeee07c23b6251b16f29ce0350473e4c79f0c32178d38ce3a6 + languageName: node + linkType: hard + "@babel/plugin-transform-block-scoped-functions@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.24.7" @@ -1137,7 +1185,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.0.0, @babel/plugin-transform-destructuring@npm:^7.20.0, @babel/plugin-transform-destructuring@npm:^7.24.8": +"@babel/plugin-transform-destructuring@npm:^7.0.0, @babel/plugin-transform-destructuring@npm:^7.24.8": version: 7.24.8 resolution: "@babel/plugin-transform-destructuring@npm:7.24.8" dependencies: @@ -1148,6 +1196,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-destructuring@npm:^7.20.0": + version: 7.25.9 + resolution: "@babel/plugin-transform-destructuring@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/51b24fbead910ad0547463b2d214dd08076b22a66234b9f878b8bac117603dd23e05090ff86e9ffc373214de23d3e5bf1b095fe54cce2ca16b010264d90cf4f5 + languageName: node + linkType: hard + "@babel/plugin-transform-dotall-regex@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-dotall-regex@npm:7.24.7" @@ -1219,7 +1278,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-flow-strip-types@npm:^7.0.0, @babel/plugin-transform-flow-strip-types@npm:^7.20.0, @babel/plugin-transform-flow-strip-types@npm:^7.24.7, @babel/plugin-transform-flow-strip-types@npm:^7.25.2": +"@babel/plugin-transform-flow-strip-types@npm:^7.0.0, @babel/plugin-transform-flow-strip-types@npm:^7.24.7, @babel/plugin-transform-flow-strip-types@npm:^7.25.2": version: 7.25.2 resolution: "@babel/plugin-transform-flow-strip-types@npm:7.25.2" dependencies: @@ -1231,6 +1290,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-flow-strip-types@npm:^7.20.0": + version: 7.25.9 + resolution: "@babel/plugin-transform-flow-strip-types@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/plugin-syntax-flow": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/a3ffc76bbc922720debe973bccb501ccbda0d6d32d80c9efd599ab1b683fd72cae3198975d8609b37070fc32f921a9eb7d2db17b7b719395468773be41011822 + languageName: node + linkType: hard + "@babel/plugin-transform-for-of@npm:^7.0.0": version: 7.25.9 resolution: "@babel/plugin-transform-for-of@npm:7.25.9" @@ -1554,7 +1625,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-private-methods@npm:^7.22.5, @babel/plugin-transform-private-methods@npm:^7.24.7, @babel/plugin-transform-private-methods@npm:^7.25.4": +"@babel/plugin-transform-private-methods@npm:^7.22.5": + version: 7.25.9 + resolution: "@babel/plugin-transform-private-methods@npm:7.25.9" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/6e3671b352c267847c53a170a1937210fa8151764d70d25005e711ef9b21969aaf422acc14f9f7fb86bc0e4ec43e7aefcc0ad9196ae02d262ec10f509f126a58 + languageName: node + linkType: hard + +"@babel/plugin-transform-private-methods@npm:^7.24.7, @babel/plugin-transform-private-methods@npm:^7.25.4": version: 7.25.4 resolution: "@babel/plugin-transform-private-methods@npm:7.25.4" dependencies: @@ -1566,7 +1649,20 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-private-property-in-object@npm:^7.22.11, @babel/plugin-transform-private-property-in-object@npm:^7.24.7": +"@babel/plugin-transform-private-property-in-object@npm:^7.22.11": + version: 7.25.9 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.25.9" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-create-class-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/aa45bb5669b610afa763d774a4b5583bb60ce7d38e4fd2dedfd0703e73e25aa560e6c6124e155aa90b101601743b127d9e5d3eb00989a7e4b4ab9c2eb88475ba + languageName: node + linkType: hard + +"@babel/plugin-transform-private-property-in-object@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-private-property-in-object@npm:7.24.7" dependencies: @@ -2045,7 +2141,7 @@ __metadata: languageName: node linkType: hard -"@babel/traverse--for-generate-function-map@npm:@babel/traverse@^7.25.3, @babel/traverse@npm:^7.20.0, @babel/traverse@npm:^7.23.6, @babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.24.8, @babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.1, @babel/traverse@npm:^7.25.2, @babel/traverse@npm:^7.25.3, @babel/traverse@npm:^7.25.4, @babel/traverse@npm:^7.7.0": +"@babel/traverse--for-generate-function-map@npm:@babel/traverse@^7.25.3, @babel/traverse@npm:^7.20.0, @babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.24.8, @babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.1, @babel/traverse@npm:^7.25.2, @babel/traverse@npm:^7.25.3, @babel/traverse@npm:^7.25.4, @babel/traverse@npm:^7.7.0": version: 7.25.6 resolution: "@babel/traverse@npm:7.25.6" dependencies: @@ -2061,21 +2157,21 @@ __metadata: linkType: hard "@babel/traverse@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/traverse@npm:7.25.9" + version: 7.26.4 + resolution: "@babel/traverse@npm:7.26.4" dependencies: - "@babel/code-frame": "npm:^7.25.9" - "@babel/generator": "npm:^7.25.9" - "@babel/parser": "npm:^7.25.9" + "@babel/code-frame": "npm:^7.26.2" + "@babel/generator": "npm:^7.26.3" + "@babel/parser": "npm:^7.26.3" "@babel/template": "npm:^7.25.9" - "@babel/types": "npm:^7.25.9" + "@babel/types": "npm:^7.26.3" debug: "npm:^4.3.1" globals: "npm:^11.1.0" - checksum: 10/7431614d76d4a053e429208db82f2846a415833f3d9eb2e11ef72eeb3c64dfd71f4a4d983de1a4a047b36165a1f5a64de8ca2a417534cc472005c740ffcb9c6a + checksum: 10/30c81a80d66fc39842814bc2e847f4705d30f3859156f130d90a0334fe1d53aa81eed877320141a528ecbc36448acc0f14f544a7d410fa319d1c3ab63b50b58f languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.23.6, @babel/types@npm:^7.24.7, @babel/types@npm:^7.24.8, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.2, @babel/types@npm:^7.25.6, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.7.0": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.24.7, @babel/types@npm:^7.24.8, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.2, @babel/types@npm:^7.25.6, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.7.0": version: 7.25.6 resolution: "@babel/types@npm:7.25.6" dependencies: @@ -2086,13 +2182,13 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0": - version: 7.26.0 - resolution: "@babel/types@npm:7.26.0" +"@babel/types@npm:^7.25.9, @babel/types@npm:^7.26.3": + version: 7.26.3 + resolution: "@babel/types@npm:7.26.3" dependencies: "@babel/helper-string-parser": "npm:^7.25.9" "@babel/helper-validator-identifier": "npm:^7.25.9" - checksum: 10/40780741ecec886ed9edae234b5eb4976968cc70d72b4e5a40d55f83ff2cc457de20f9b0f4fe9d858350e43dab0ea496e7ef62e2b2f08df699481a76df02cd6e + checksum: 10/c31d0549630a89abfa11410bf82a318b0c87aa846fbf5f9905e47ba5e2aa44f41cc746442f105d622c519e4dc532d35a8d8080460ff4692f9fc7485fbf3a00eb languageName: node linkType: hard @@ -4424,18 +4520,6 @@ __metadata: languageName: node linkType: hard -"@react-native-community/cli-clean@npm:14.0.0": - version: 14.0.0 - resolution: "@react-native-community/cli-clean@npm:14.0.0" - dependencies: - "@react-native-community/cli-tools": "npm:14.0.0" - chalk: "npm:^4.1.2" - execa: "npm:^5.0.0" - fast-glob: "npm:^3.3.2" - checksum: 10/b92fc7dea5921f9874a726bab6f4ce3ab5623b083900991bf63097b38891d253cb440919e88e854cb550992b048aaaf4d50812a6d066d61af87f6a0b27a28b74 - languageName: node - linkType: hard - "@react-native-community/cli-clean@npm:14.1.0": version: 14.1.0 resolution: "@react-native-community/cli-clean@npm:14.1.0" @@ -4460,17 +4544,27 @@ __metadata: languageName: node linkType: hard -"@react-native-community/cli-config@npm:14.0.0": - version: 14.0.0 - resolution: "@react-native-community/cli-config@npm:14.0.0" +"@react-native-community/cli-clean@npm:15.0.1": + version: 15.0.1 + resolution: "@react-native-community/cli-clean@npm:15.0.1" dependencies: - "@react-native-community/cli-tools": "npm:14.0.0" + "@react-native-community/cli-tools": "npm:15.0.1" chalk: "npm:^4.1.2" - cosmiconfig: "npm:^9.0.0" - deepmerge: "npm:^4.3.0" + execa: "npm:^5.0.0" fast-glob: "npm:^3.3.2" - joi: "npm:^17.2.1" - checksum: 10/2dfc24b8b771ebff9b622eb320908ed6f568eb21dee268bf8f9da97f45a74001543783a9db5083195162443118ff7418033b60bc6593956b6a78643c5bb5f8f4 + checksum: 10/a1ff1824a4c1290271aaef48af0bc30ed50503ac062341fb051bb07895890414f4e208eb949b05bce79f90d1a51dd2fb133f9fbcf6c019bb7fec8c03ec4e4419 + languageName: node + linkType: hard + +"@react-native-community/cli-config-apple@npm:15.0.1": + version: 15.0.1 + resolution: "@react-native-community/cli-config-apple@npm:15.0.1" + dependencies: + "@react-native-community/cli-tools": "npm:15.0.1" + chalk: "npm:^4.1.2" + execa: "npm:^5.0.0" + fast-glob: "npm:^3.3.2" + checksum: 10/3766bb155962d3ad4908b77db6d68e6edb6c8b4130e78c30e8cea3b1e6535e9730dc0bdc7b995b86d145621f4e992e4a2dcaf2be34b045de13d0c68692fd78ed languageName: node linkType: hard @@ -4502,21 +4596,17 @@ __metadata: languageName: node linkType: hard -"@react-native-community/cli-debugger-ui@npm:14.0.0": - version: 14.0.0 - resolution: "@react-native-community/cli-debugger-ui@npm:14.0.0" - dependencies: - serve-static: "npm:^1.13.1" - checksum: 10/485b2de5e615e27e58ef8f84acf60b18259b3326d7688449392147ec876d970166f20f91ce7dd8718c9e002739b42694589f3271a2117bee98992cfded568754 - languageName: node - linkType: hard - -"@react-native-community/cli-debugger-ui@npm:14.0.0-alpha.11": - version: 14.0.0-alpha.11 - resolution: "@react-native-community/cli-debugger-ui@npm:14.0.0-alpha.11" +"@react-native-community/cli-config@npm:15.0.1": + version: 15.0.1 + resolution: "@react-native-community/cli-config@npm:15.0.1" dependencies: - serve-static: "npm:^1.13.1" - checksum: 10/5b837674aa9993a89bde1ee23e406c11cd0d8b19916ae7621b1ef0880bb3222ecfa222f272c9046c210276af06a6dfdf8b0b9abd2ca5e6bc4223ca4f79b9c2fe + "@react-native-community/cli-tools": "npm:15.0.1" + chalk: "npm:^4.1.2" + cosmiconfig: "npm:^9.0.0" + deepmerge: "npm:^4.3.0" + fast-glob: "npm:^3.3.2" + joi: "npm:^17.2.1" + checksum: 10/7fc4d4f3554ddc6d76534f3063baf8f3631c333a2445038a617c1c5630718bc775ca35fe59a7ceafd40bc1f316d1c4fae00693ea22feb367fdaf91104ead3efe languageName: node linkType: hard @@ -4538,27 +4628,12 @@ __metadata: languageName: node linkType: hard -"@react-native-community/cli-doctor@npm:14.0.0": - version: 14.0.0 - resolution: "@react-native-community/cli-doctor@npm:14.0.0" +"@react-native-community/cli-debugger-ui@npm:15.0.1": + version: 15.0.1 + resolution: "@react-native-community/cli-debugger-ui@npm:15.0.1" dependencies: - "@react-native-community/cli-config": "npm:14.0.0" - "@react-native-community/cli-platform-android": "npm:14.0.0" - "@react-native-community/cli-platform-apple": "npm:14.0.0" - "@react-native-community/cli-platform-ios": "npm:14.0.0" - "@react-native-community/cli-tools": "npm:14.0.0" - chalk: "npm:^4.1.2" - command-exists: "npm:^1.2.8" - deepmerge: "npm:^4.3.0" - envinfo: "npm:^7.13.0" - execa: "npm:^5.0.0" - node-stream-zip: "npm:^1.9.1" - ora: "npm:^5.4.1" - semver: "npm:^7.5.2" - strip-ansi: "npm:^5.2.0" - wcwidth: "npm:^1.0.1" - yaml: "npm:^2.2.1" - checksum: 10/cdad0e5da75e93b08b0fc3109c603fb00f3aa187406f57fa336ac74ad55aba8bc3479f375c0e417d4787cc406db94fde9c3cf8d0602745925cb6e1df31223aa0 + serve-static: "npm:^1.13.1" + checksum: 10/366b87f67c72455a61de4beb05d3b24c5e8f6a4ea4d0d11a7bb660e738f43a26daa9721527a36f8e9596586240875c1a35d5b87a8cdddc2d84b38b6b56a83902 languageName: node linkType: hard @@ -4610,17 +4685,27 @@ __metadata: languageName: node linkType: hard -"@react-native-community/cli-platform-android@npm:14.0.0": - version: 14.0.0 - resolution: "@react-native-community/cli-platform-android@npm:14.0.0" +"@react-native-community/cli-doctor@npm:15.0.1": + version: 15.0.1 + resolution: "@react-native-community/cli-doctor@npm:15.0.1" dependencies: - "@react-native-community/cli-tools": "npm:14.0.0" + "@react-native-community/cli-config": "npm:15.0.1" + "@react-native-community/cli-platform-android": "npm:15.0.1" + "@react-native-community/cli-platform-apple": "npm:15.0.1" + "@react-native-community/cli-platform-ios": "npm:15.0.1" + "@react-native-community/cli-tools": "npm:15.0.1" chalk: "npm:^4.1.2" + command-exists: "npm:^1.2.8" + deepmerge: "npm:^4.3.0" + envinfo: "npm:^7.13.0" execa: "npm:^5.0.0" - fast-glob: "npm:^3.3.2" - fast-xml-parser: "npm:^4.2.4" - logkitty: "npm:^0.7.1" - checksum: 10/f8ec2e4a02689a1e151f4ce9f7ccbca4b9f9fd564159efa91ee72678668aeccebf636d39c7a10a5232553a96f00e48a796e50bd1cccaedc7ff08e9a1201e05e9 + node-stream-zip: "npm:^1.9.1" + ora: "npm:^5.4.1" + semver: "npm:^7.5.2" + strip-ansi: "npm:^5.2.0" + wcwidth: "npm:^1.0.1" + yaml: "npm:^2.2.1" + checksum: 10/89cb3d2c6610c2316e388adf5efe7f85600d56e2fdc68b3f9fa8842ced44bf7ae89a7d4b733e21bb99f5d31c86112208a12f9a6668f6c99385be4ab415f730ca languageName: node linkType: hard @@ -4652,17 +4737,17 @@ __metadata: languageName: node linkType: hard -"@react-native-community/cli-platform-apple@npm:14.0.0": - version: 14.0.0 - resolution: "@react-native-community/cli-platform-apple@npm:14.0.0" +"@react-native-community/cli-platform-android@npm:15.0.1": + version: 15.0.1 + resolution: "@react-native-community/cli-platform-android@npm:15.0.1" dependencies: - "@react-native-community/cli-tools": "npm:14.0.0" + "@react-native-community/cli-tools": "npm:15.0.1" chalk: "npm:^4.1.2" execa: "npm:^5.0.0" fast-glob: "npm:^3.3.2" - fast-xml-parser: "npm:^4.2.4" - ora: "npm:^5.4.1" - checksum: 10/b90d8a84ad03a36c26adb7f28a4e0fab4315eec76c0d66ef9685f044e09082070370922efcc881a8a2d12c0b0640204446745aefb00928b44ef5ba68ab742c01 + fast-xml-parser: "npm:^4.4.1" + logkitty: "npm:^0.7.1" + checksum: 10/f537ac01ccce117b29020094165e123e84e5baea1bb4d88c1c1db7a5723060871dafab3b7d12f51aa14f94d13d30b59fff052244b14b8a4927b7e16f7e6f0308 languageName: node linkType: hard @@ -4694,12 +4779,16 @@ __metadata: languageName: node linkType: hard -"@react-native-community/cli-platform-ios@npm:14.0.0": - version: 14.0.0 - resolution: "@react-native-community/cli-platform-ios@npm:14.0.0" +"@react-native-community/cli-platform-apple@npm:15.0.1": + version: 15.0.1 + resolution: "@react-native-community/cli-platform-apple@npm:15.0.1" dependencies: - "@react-native-community/cli-platform-apple": "npm:14.0.0" - checksum: 10/e85dc3600c7d6a443502e47e8af2eed98756dcca2aaf418a312bf3b7ec69fb49db7aa8e63318cdf5920219e5fff47cbc819ffa5d9bdc32726bed6b2d280cfe80 + "@react-native-community/cli-config-apple": "npm:15.0.1" + "@react-native-community/cli-tools": "npm:15.0.1" + chalk: "npm:^4.1.2" + execa: "npm:^5.0.0" + fast-xml-parser: "npm:^4.4.1" + checksum: 10/85a6d39eba5cd474a063d59a12e893ffe77656b522a7adcac9c092f35565fddcf16c2b50c09b63a8d5c7d71f5fbad33069f1a61f23ca3b8f5dd5e4cb284d9bf9 languageName: node linkType: hard @@ -4721,37 +4810,12 @@ __metadata: languageName: node linkType: hard -"@react-native-community/cli-server-api@npm:14.0.0": - version: 14.0.0 - resolution: "@react-native-community/cli-server-api@npm:14.0.0" +"@react-native-community/cli-platform-ios@npm:15.0.1": + version: 15.0.1 + resolution: "@react-native-community/cli-platform-ios@npm:15.0.1" dependencies: - "@react-native-community/cli-debugger-ui": "npm:14.0.0" - "@react-native-community/cli-tools": "npm:14.0.0" - compression: "npm:^1.7.1" - connect: "npm:^3.6.5" - errorhandler: "npm:^1.5.1" - nocache: "npm:^3.0.1" - pretty-format: "npm:^26.6.2" - serve-static: "npm:^1.13.1" - ws: "npm:^6.2.3" - checksum: 10/1f769abb4bba47a4fa8598add1ba75345d5d8664a0d6877543046924abbfa5c2df9c01378ae7a2d65fdc7db3e6d9718db9f93f39a0a9291610467350e5a42359 - languageName: node - linkType: hard - -"@react-native-community/cli-server-api@npm:14.0.0-alpha.11": - version: 14.0.0-alpha.11 - resolution: "@react-native-community/cli-server-api@npm:14.0.0-alpha.11" - dependencies: - "@react-native-community/cli-debugger-ui": "npm:14.0.0-alpha.11" - "@react-native-community/cli-tools": "npm:14.0.0-alpha.11" - compression: "npm:^1.7.1" - connect: "npm:^3.6.5" - errorhandler: "npm:^1.5.1" - nocache: "npm:^3.0.1" - pretty-format: "npm:^26.6.2" - serve-static: "npm:^1.13.1" - ws: "npm:^6.2.3" - checksum: 10/a689e88022d48e255cb196197cf0976b39bf4422821943e4f918cd2bfcc8952324b54b1983c8fcf42da03ba6b1be810ffa90b0d0e76a34be4f47237a9ae9420e + "@react-native-community/cli-platform-apple": "npm:15.0.1" + checksum: 10/17844caec8ed5e4101e35fa42fa12028a99c545f0d86a028b5ed12c19072cd8eeeacf11598a271fef5eea028072dd0521545376f3c50522ac6ca606d841f359d languageName: node linkType: hard @@ -4789,27 +4853,26 @@ __metadata: languageName: node linkType: hard -"@react-native-community/cli-tools@npm:14.0.0": - version: 14.0.0 - resolution: "@react-native-community/cli-tools@npm:14.0.0" +"@react-native-community/cli-server-api@npm:15.0.1": + version: 15.0.1 + resolution: "@react-native-community/cli-server-api@npm:15.0.1" dependencies: - appdirsjs: "npm:^1.2.4" - chalk: "npm:^4.1.2" - execa: "npm:^5.0.0" - find-up: "npm:^5.0.0" - mime: "npm:^2.4.1" - open: "npm:^6.2.0" - ora: "npm:^5.4.1" - semver: "npm:^7.5.2" - shell-quote: "npm:^1.7.3" - sudo-prompt: "npm:^9.0.0" - checksum: 10/84219934553287072b284ff524a10c554ccd5e31a0e8237f59999d1e3eb07441baf1083f6be71bd206c76a5c061b936eb1ff8dc2fd32cbda23aa0776358a6000 + "@react-native-community/cli-debugger-ui": "npm:15.0.1" + "@react-native-community/cli-tools": "npm:15.0.1" + compression: "npm:^1.7.1" + connect: "npm:^3.6.5" + errorhandler: "npm:^1.5.1" + nocache: "npm:^3.0.1" + pretty-format: "npm:^26.6.2" + serve-static: "npm:^1.13.1" + ws: "npm:^6.2.3" + checksum: 10/22341610387537e5603cb7b6f1d8b761b5439174bbac650081cf5b40377c0108262320e282329f977bef826e6c4569fbaa3e85f2a697631e755a020216a5515a languageName: node linkType: hard -"@react-native-community/cli-tools@npm:14.0.0-alpha.11": - version: 14.0.0-alpha.11 - resolution: "@react-native-community/cli-tools@npm:14.0.0-alpha.11" +"@react-native-community/cli-tools@npm:14.1.0": + version: 14.1.0 + resolution: "@react-native-community/cli-tools@npm:14.1.0" dependencies: appdirsjs: "npm:^1.2.4" chalk: "npm:^4.1.2" @@ -4821,13 +4884,13 @@ __metadata: semver: "npm:^7.5.2" shell-quote: "npm:^1.7.3" sudo-prompt: "npm:^9.0.0" - checksum: 10/2cbdeda1b189fbd4a61621b9e2c8c47801d8e764d1475305abbb09e27d1d493326e8a216a8d41ab0091ab9615bf01189d4e3c970d864f468f9d41a9195c3a5c0 + checksum: 10/b46247ffcac6a1464955b5b770617dd31f8666997a477481fdf23e87e570e2368e0d0a55393da6f177ad84175e33d6ffa5a3a05cf0f5beccf112242c97903ccc languageName: node linkType: hard -"@react-native-community/cli-tools@npm:14.1.0": - version: 14.1.0 - resolution: "@react-native-community/cli-tools@npm:14.1.0" +"@react-native-community/cli-tools@npm:15.0.0": + version: 15.0.0 + resolution: "@react-native-community/cli-tools@npm:15.0.0" dependencies: appdirsjs: "npm:^1.2.4" chalk: "npm:^4.1.2" @@ -4836,16 +4899,17 @@ __metadata: mime: "npm:^2.4.1" open: "npm:^6.2.0" ora: "npm:^5.4.1" + prompts: "npm:^2.4.2" semver: "npm:^7.5.2" shell-quote: "npm:^1.7.3" sudo-prompt: "npm:^9.0.0" - checksum: 10/b46247ffcac6a1464955b5b770617dd31f8666997a477481fdf23e87e570e2368e0d0a55393da6f177ad84175e33d6ffa5a3a05cf0f5beccf112242c97903ccc + checksum: 10/4597fe9c3221aa26fc581bde44782c6376860929c40b7a7de70aed722d20992395aa4844210e901dc2188ef9bfa5ffe9b49b3ce2cbb346385aac93ea67360b23 languageName: node linkType: hard -"@react-native-community/cli-tools@npm:15.0.0": - version: 15.0.0 - resolution: "@react-native-community/cli-tools@npm:15.0.0" +"@react-native-community/cli-tools@npm:15.0.1": + version: 15.0.1 + resolution: "@react-native-community/cli-tools@npm:15.0.1" dependencies: appdirsjs: "npm:^1.2.4" chalk: "npm:^4.1.2" @@ -4858,16 +4922,7 @@ __metadata: semver: "npm:^7.5.2" shell-quote: "npm:^1.7.3" sudo-prompt: "npm:^9.0.0" - checksum: 10/4597fe9c3221aa26fc581bde44782c6376860929c40b7a7de70aed722d20992395aa4844210e901dc2188ef9bfa5ffe9b49b3ce2cbb346385aac93ea67360b23 - languageName: node - linkType: hard - -"@react-native-community/cli-types@npm:14.0.0": - version: 14.0.0 - resolution: "@react-native-community/cli-types@npm:14.0.0" - dependencies: - joi: "npm:^17.2.1" - checksum: 10/a0e4b26da8cc600d133b60f7a74fc1375144f974bf7d453b197091e65af0e69ac0bad42eb957da6c27364c82f1126d4a6bc6b0352ea838366679fac940df9729 + checksum: 10/3447257d1650104466b7d59846ddcd45d8432b18d18df71c0606ecfed7892014fa959b917ab435c822b305a9a890bd51e762e941137e29f7824e215beacb42a5 languageName: node linkType: hard @@ -4889,29 +4944,12 @@ __metadata: languageName: node linkType: hard -"@react-native-community/cli@npm:14.0.0": - version: 14.0.0 - resolution: "@react-native-community/cli@npm:14.0.0" - dependencies: - "@react-native-community/cli-clean": "npm:14.0.0" - "@react-native-community/cli-config": "npm:14.0.0" - "@react-native-community/cli-debugger-ui": "npm:14.0.0" - "@react-native-community/cli-doctor": "npm:14.0.0" - "@react-native-community/cli-server-api": "npm:14.0.0" - "@react-native-community/cli-tools": "npm:14.0.0" - "@react-native-community/cli-types": "npm:14.0.0" - chalk: "npm:^4.1.2" - commander: "npm:^9.4.1" - deepmerge: "npm:^4.3.0" - execa: "npm:^5.0.0" - find-up: "npm:^5.0.0" - fs-extra: "npm:^8.1.0" - graceful-fs: "npm:^4.1.3" - prompts: "npm:^2.4.2" - semver: "npm:^7.5.2" - bin: - rnc-cli: build/bin.js - checksum: 10/ae6ec29f015704aaf2ddaa60be822d277644787e4d788a13fb9de0c80e3b39e313d8ac05fac2512761b04c3d89d86b58ffb97f90067764932921288c084f5c22 +"@react-native-community/cli-types@npm:15.0.1": + version: 15.0.1 + resolution: "@react-native-community/cli-types@npm:15.0.1" + dependencies: + joi: "npm:^17.2.1" + checksum: 10/77452486158afcf1f03a3596135b6dba16dba5dd10209dacd5a6a4b176df36d37b8e49af61590d5a64df4907cf0575b6f37e0a3893335f961a9380edaee32152 languageName: node linkType: hard @@ -4967,6 +5005,32 @@ __metadata: languageName: node linkType: hard +"@react-native-community/cli@npm:15.0.1": + version: 15.0.1 + resolution: "@react-native-community/cli@npm:15.0.1" + dependencies: + "@react-native-community/cli-clean": "npm:15.0.1" + "@react-native-community/cli-config": "npm:15.0.1" + "@react-native-community/cli-debugger-ui": "npm:15.0.1" + "@react-native-community/cli-doctor": "npm:15.0.1" + "@react-native-community/cli-server-api": "npm:15.0.1" + "@react-native-community/cli-tools": "npm:15.0.1" + "@react-native-community/cli-types": "npm:15.0.1" + chalk: "npm:^4.1.2" + commander: "npm:^9.4.1" + deepmerge: "npm:^4.3.0" + execa: "npm:^5.0.0" + find-up: "npm:^5.0.0" + fs-extra: "npm:^8.1.0" + graceful-fs: "npm:^4.1.3" + prompts: "npm:^2.4.2" + semver: "npm:^7.5.2" + bin: + rnc-cli: build/bin.js + checksum: 10/7673d01bded6e9a368b238031ce237cebcfba230d860804a8f19aa6b4d5adcf4432e0a3b71ea285650c69b6427310f7db152cee6c2152d3303adb8dee6f60923 + languageName: node + linkType: hard + "@react-native-community/slider@npm:^4.5.5": version: 4.5.5 resolution: "@react-native-community/slider@npm:4.5.5" @@ -5002,12 +5066,12 @@ __metadata: linkType: hard "@react-native-picker/picker@npm:^2.9.0": - version: 2.9.0 - resolution: "@react-native-picker/picker@npm:2.9.0" + version: 2.10.2 + resolution: "@react-native-picker/picker@npm:2.10.2" peerDependencies: react: "*" react-native: "*" - checksum: 10/a2442d55b9fc239eb9109cfcfc9d6b749619bc0e79c0f43d2ced618e27f485b26bde84ba6965f1e172242bf479566c17ae39e5de7b3f2e782bde81c9e61e2fd9 + checksum: 10/c6cbbc335ab5e7371866c3fb032a946ffc428440129b28c9dd23f6914cdff37c8e9d224ffd1aa77a99c18beaf21fd154cd60a9940ebcbc958fc6ee5fce4d864c languageName: node linkType: hard @@ -5028,13 +5092,6 @@ __metadata: languageName: node linkType: hard -"@react-native/assets-registry@npm:0.75.2": - version: 0.75.2 - resolution: "@react-native/assets-registry@npm:0.75.2" - checksum: 10/e72861cd04122634d57998a14ae51f539e93b2a5788e3fa7980c1b4163ae05f59120e192c454a6639333eaf72703299c22a9a08180d1495bf08369ba53d0a0f2 - languageName: node - linkType: hard - "@react-native/assets-registry@npm:0.75.4": version: 0.75.4 resolution: "@react-native/assets-registry@npm:0.75.4" @@ -5049,19 +5106,10 @@ __metadata: languageName: node linkType: hard -"@react-native/assets-registry@npm:0.76.1": - version: 0.76.1 - resolution: "@react-native/assets-registry@npm:0.76.1" - checksum: 10/da78a53ee18889ba3c229dcc0f99496e99debe7e0143cbcb413277355bdbc8fbfa3f7459e9b85de2730bd902a5190cffa90fb6a92602290401543d915264dd06 - languageName: node - linkType: hard - -"@react-native/babel-plugin-codegen@npm:0.75.2": - version: 0.75.2 - resolution: "@react-native/babel-plugin-codegen@npm:0.75.2" - dependencies: - "@react-native/codegen": "npm:0.75.2" - checksum: 10/1ca1fa22053ee1dcfe051dd64dce990d0ef7369465902feb5523a116ea72abb0683b5a665c578a8b9c8cd6ef449a267788fa2488f2777eec3c48faf0d76271aa +"@react-native/assets-registry@npm:0.76.5": + version: 0.76.5 + resolution: "@react-native/assets-registry@npm:0.76.5" + checksum: 10/d144e1030343582e8112284ee8cdc84f68bb4314894769dad98445e64e6a3a954a74844332658f1ae2b32a3a33c8b62b861205c66e9267744c2cc2227784ac60 languageName: node linkType: hard @@ -5092,58 +5140,12 @@ __metadata: languageName: node linkType: hard -"@react-native/babel-preset@npm:0.75.2": - version: 0.75.2 - resolution: "@react-native/babel-preset@npm:0.75.2" +"@react-native/babel-plugin-codegen@npm:0.76.5": + version: 0.76.5 + resolution: "@react-native/babel-plugin-codegen@npm:0.76.5" dependencies: - "@babel/core": "npm:^7.20.0" - "@babel/plugin-proposal-export-default-from": "npm:^7.0.0" - "@babel/plugin-syntax-dynamic-import": "npm:^7.8.0" - "@babel/plugin-syntax-export-default-from": "npm:^7.0.0" - "@babel/plugin-syntax-flow": "npm:^7.18.0" - "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.0.0" - "@babel/plugin-syntax-optional-chaining": "npm:^7.0.0" - "@babel/plugin-transform-arrow-functions": "npm:^7.0.0" - "@babel/plugin-transform-async-generator-functions": "npm:^7.24.3" - "@babel/plugin-transform-async-to-generator": "npm:^7.20.0" - "@babel/plugin-transform-block-scoping": "npm:^7.0.0" - "@babel/plugin-transform-class-properties": "npm:^7.24.1" - "@babel/plugin-transform-classes": "npm:^7.0.0" - "@babel/plugin-transform-computed-properties": "npm:^7.0.0" - "@babel/plugin-transform-destructuring": "npm:^7.20.0" - "@babel/plugin-transform-flow-strip-types": "npm:^7.20.0" - "@babel/plugin-transform-for-of": "npm:^7.0.0" - "@babel/plugin-transform-function-name": "npm:^7.0.0" - "@babel/plugin-transform-literals": "npm:^7.0.0" - "@babel/plugin-transform-logical-assignment-operators": "npm:^7.24.1" - "@babel/plugin-transform-modules-commonjs": "npm:^7.0.0" - "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.0.0" - "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.24.1" - "@babel/plugin-transform-numeric-separator": "npm:^7.24.1" - "@babel/plugin-transform-object-rest-spread": "npm:^7.24.5" - "@babel/plugin-transform-optional-catch-binding": "npm:^7.24.1" - "@babel/plugin-transform-optional-chaining": "npm:^7.24.5" - "@babel/plugin-transform-parameters": "npm:^7.0.0" - "@babel/plugin-transform-private-methods": "npm:^7.22.5" - "@babel/plugin-transform-private-property-in-object": "npm:^7.22.11" - "@babel/plugin-transform-react-display-name": "npm:^7.0.0" - "@babel/plugin-transform-react-jsx": "npm:^7.0.0" - "@babel/plugin-transform-react-jsx-self": "npm:^7.0.0" - "@babel/plugin-transform-react-jsx-source": "npm:^7.0.0" - "@babel/plugin-transform-regenerator": "npm:^7.20.0" - "@babel/plugin-transform-runtime": "npm:^7.0.0" - "@babel/plugin-transform-shorthand-properties": "npm:^7.0.0" - "@babel/plugin-transform-spread": "npm:^7.0.0" - "@babel/plugin-transform-sticky-regex": "npm:^7.0.0" - "@babel/plugin-transform-typescript": "npm:^7.5.0" - "@babel/plugin-transform-unicode-regex": "npm:^7.0.0" - "@babel/template": "npm:^7.0.0" - "@react-native/babel-plugin-codegen": "npm:0.75.2" - babel-plugin-transform-flow-enums: "npm:^0.0.2" - react-refresh: "npm:^0.14.0" - peerDependencies: - "@babel/core": "*" - checksum: 10/46de9a9cbd8e7c31c1e725fb9efa2be1f06dd8dd06c3c4595784607da684e5a4ca137833cc7169cc2da7d1703dac2449a3802514fe7ab7346959322fa09757f0 + "@react-native/codegen": "npm:0.76.5" + checksum: 10/256bfe392590545ca979f53d257c93adef972be1b740c14f8320942ccbbe8ac466999f0f9693626f8c4ddd5e31ab882e396a4e5d4e80d8dbf2c629c04fff013d languageName: node linkType: hard @@ -5312,21 +5314,58 @@ __metadata: languageName: node linkType: hard -"@react-native/codegen@npm:0.75.2": - version: 0.75.2 - resolution: "@react-native/codegen@npm:0.75.2" +"@react-native/babel-preset@npm:0.76.5": + version: 0.76.5 + resolution: "@react-native/babel-preset@npm:0.76.5" dependencies: - "@babel/parser": "npm:^7.20.0" - glob: "npm:^7.1.1" - hermes-parser: "npm:0.22.0" - invariant: "npm:^2.2.4" - jscodeshift: "npm:^0.14.0" - mkdirp: "npm:^0.5.1" - nullthrows: "npm:^1.1.1" - yargs: "npm:^17.6.2" + "@babel/core": "npm:^7.25.2" + "@babel/plugin-proposal-export-default-from": "npm:^7.24.7" + "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" + "@babel/plugin-syntax-export-default-from": "npm:^7.24.7" + "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" + "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" + "@babel/plugin-transform-arrow-functions": "npm:^7.24.7" + "@babel/plugin-transform-async-generator-functions": "npm:^7.25.4" + "@babel/plugin-transform-async-to-generator": "npm:^7.24.7" + "@babel/plugin-transform-block-scoping": "npm:^7.25.0" + "@babel/plugin-transform-class-properties": "npm:^7.25.4" + "@babel/plugin-transform-classes": "npm:^7.25.4" + "@babel/plugin-transform-computed-properties": "npm:^7.24.7" + "@babel/plugin-transform-destructuring": "npm:^7.24.8" + "@babel/plugin-transform-flow-strip-types": "npm:^7.25.2" + "@babel/plugin-transform-for-of": "npm:^7.24.7" + "@babel/plugin-transform-function-name": "npm:^7.25.1" + "@babel/plugin-transform-literals": "npm:^7.25.2" + "@babel/plugin-transform-logical-assignment-operators": "npm:^7.24.7" + "@babel/plugin-transform-modules-commonjs": "npm:^7.24.8" + "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.24.7" + "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.24.7" + "@babel/plugin-transform-numeric-separator": "npm:^7.24.7" + "@babel/plugin-transform-object-rest-spread": "npm:^7.24.7" + "@babel/plugin-transform-optional-catch-binding": "npm:^7.24.7" + "@babel/plugin-transform-optional-chaining": "npm:^7.24.8" + "@babel/plugin-transform-parameters": "npm:^7.24.7" + "@babel/plugin-transform-private-methods": "npm:^7.24.7" + "@babel/plugin-transform-private-property-in-object": "npm:^7.24.7" + "@babel/plugin-transform-react-display-name": "npm:^7.24.7" + "@babel/plugin-transform-react-jsx": "npm:^7.25.2" + "@babel/plugin-transform-react-jsx-self": "npm:^7.24.7" + "@babel/plugin-transform-react-jsx-source": "npm:^7.24.7" + "@babel/plugin-transform-regenerator": "npm:^7.24.7" + "@babel/plugin-transform-runtime": "npm:^7.24.7" + "@babel/plugin-transform-shorthand-properties": "npm:^7.24.7" + "@babel/plugin-transform-spread": "npm:^7.24.7" + "@babel/plugin-transform-sticky-regex": "npm:^7.24.7" + "@babel/plugin-transform-typescript": "npm:^7.25.2" + "@babel/plugin-transform-unicode-regex": "npm:^7.24.7" + "@babel/template": "npm:^7.25.0" + "@react-native/babel-plugin-codegen": "npm:0.76.5" + babel-plugin-syntax-hermes-parser: "npm:^0.25.1" + babel-plugin-transform-flow-enums: "npm:^0.0.2" + react-refresh: "npm:^0.14.0" peerDependencies: - "@babel/preset-env": ^7.1.6 - checksum: 10/9970ef151f40160f71cd6d0f1a09e37a4cbb9c892f03a9c1e88ad247772943dc6e4e03ebfe8a10ee6fa7c10aa9f751d104fb08b4c6d166c9cc1fe4753b1ebdab + "@babel/core": "*" + checksum: 10/18576665105505f25e60935502612a47ff29c803b090466c8563e49b98cd533c3dd60734a3cce1a10397f31be4993b40c665c75ff0f3d3127aff8e747ff8b5de languageName: node linkType: hard @@ -5384,23 +5423,21 @@ __metadata: languageName: node linkType: hard -"@react-native/community-cli-plugin@npm:0.75.2": - version: 0.75.2 - resolution: "@react-native/community-cli-plugin@npm:0.75.2" +"@react-native/codegen@npm:0.76.5": + version: 0.76.5 + resolution: "@react-native/codegen@npm:0.76.5" dependencies: - "@react-native-community/cli-server-api": "npm:14.0.0-alpha.11" - "@react-native-community/cli-tools": "npm:14.0.0-alpha.11" - "@react-native/dev-middleware": "npm:0.75.2" - "@react-native/metro-babel-transformer": "npm:0.75.2" - chalk: "npm:^4.0.0" - execa: "npm:^5.1.1" - metro: "npm:^0.80.3" - metro-config: "npm:^0.80.3" - metro-core: "npm:^0.80.3" - node-fetch: "npm:^2.2.0" - querystring: "npm:^0.2.1" - readline: "npm:^1.3.0" - checksum: 10/13ceea24365350b5ee528cd2654cfe764900296c186e8704bc86f4a8bda649fb154f752a32f3c29a5d9b425c44b692e8f754013d1b6db843f686038f80f8799a + "@babel/parser": "npm:^7.25.3" + glob: "npm:^7.1.1" + hermes-parser: "npm:0.23.1" + invariant: "npm:^2.2.4" + jscodeshift: "npm:^0.14.0" + mkdirp: "npm:^0.5.1" + nullthrows: "npm:^1.1.1" + yargs: "npm:^17.6.2" + peerDependencies: + "@babel/preset-env": ^7.1.6 + checksum: 10/ad7512313cfe073be738d16a44426aabc9b2562d8fddc840dade197532c95cd59a441c43cfa214c30ef7f6585ead0307c13738edea2df53686c9c7ea50620f11 languageName: node linkType: hard @@ -5446,12 +5483,12 @@ __metadata: languageName: node linkType: hard -"@react-native/community-cli-plugin@npm:0.76.1": - version: 0.76.1 - resolution: "@react-native/community-cli-plugin@npm:0.76.1" +"@react-native/community-cli-plugin@npm:0.76.5": + version: 0.76.5 + resolution: "@react-native/community-cli-plugin@npm:0.76.5" dependencies: - "@react-native/dev-middleware": "npm:0.76.1" - "@react-native/metro-babel-transformer": "npm:0.76.1" + "@react-native/dev-middleware": "npm:0.76.5" + "@react-native/metro-babel-transformer": "npm:0.76.5" chalk: "npm:^4.0.0" execa: "npm:^5.1.1" invariant: "npm:^2.2.4" @@ -5460,19 +5497,13 @@ __metadata: metro-core: "npm:^0.81.0" node-fetch: "npm:^2.2.0" readline: "npm:^1.3.0" + semver: "npm:^7.1.3" peerDependencies: "@react-native-community/cli-server-api": "*" peerDependenciesMeta: "@react-native-community/cli-server-api": optional: true - checksum: 10/6263c971c377fec9e6e675ee8710bd6dc92a38e90071325f96f0f5422d20eacdc7b18f436c27665769bedee5d315e08365b01bacef3574a3ab66ec07ad098945 - languageName: node - linkType: hard - -"@react-native/debugger-frontend@npm:0.75.2": - version: 0.75.2 - resolution: "@react-native/debugger-frontend@npm:0.75.2" - checksum: 10/2026c679fec3fe61f41d2c27cbc7ffb33a60e11578f773252c132e41f4872ab4c271390667f79e646fe6af4b0073ab1fe26528bab6709ddc74f7836654882ab5 + checksum: 10/7c039c012a157d2d7b685d829cd3ee29fc035cdd5466da2d6b6346bf2c239493ae29dbd682bbea58a862efebb62179e78c8f937e262eb3b5fe992af05d2cfaed languageName: node linkType: hard @@ -5497,23 +5528,10 @@ __metadata: languageName: node linkType: hard -"@react-native/dev-middleware@npm:0.75.2": - version: 0.75.2 - resolution: "@react-native/dev-middleware@npm:0.75.2" - dependencies: - "@isaacs/ttlcache": "npm:^1.4.1" - "@react-native/debugger-frontend": "npm:0.75.2" - chrome-launcher: "npm:^0.15.2" - chromium-edge-launcher: "npm:^0.2.0" - connect: "npm:^3.6.5" - debug: "npm:^2.2.0" - node-fetch: "npm:^2.2.0" - nullthrows: "npm:^1.1.1" - open: "npm:^7.0.3" - selfsigned: "npm:^2.4.1" - serve-static: "npm:^1.13.1" - ws: "npm:^6.2.2" - checksum: 10/326ce1ba04ad99a1e9bcc5d7b2fde23d0162ebe0ecae5bc4bca5f9431e80963ae54949bd868b52d0b8b146b17b79134530602dcbda048895121c683f696c0c6a +"@react-native/debugger-frontend@npm:0.76.5": + version: 0.76.5 + resolution: "@react-native/debugger-frontend@npm:0.76.5" + checksum: 10/2dc56743401760ce181b0e1ee4fd2cef565b2de9b2a1ec7ab232714cf348e27ccf1f36fa3652eb070e65538185c713d81c08b75dc0dcd2e430f4402943edc8c9 languageName: node linkType: hard @@ -5575,6 +5593,25 @@ __metadata: languageName: node linkType: hard +"@react-native/dev-middleware@npm:0.76.5": + version: 0.76.5 + resolution: "@react-native/dev-middleware@npm:0.76.5" + dependencies: + "@isaacs/ttlcache": "npm:^1.4.1" + "@react-native/debugger-frontend": "npm:0.76.5" + chrome-launcher: "npm:^0.15.2" + chromium-edge-launcher: "npm:^0.2.0" + connect: "npm:^3.6.5" + debug: "npm:^2.2.0" + nullthrows: "npm:^1.1.1" + open: "npm:^7.0.3" + selfsigned: "npm:^2.4.1" + serve-static: "npm:^1.13.1" + ws: "npm:^6.2.3" + checksum: 10/6729761eb1e93e8322475ae6b7cb64aca7a72473826e0a16c699432ddaf8b31f57c9765b7c5e527166a47550098b11a48dcacb70d6de1d8ea6cbc6f511ac453c + languageName: node + linkType: hard + "@react-native/eslint-config@npm:0.75.4": version: 0.75.4 resolution: "@react-native/eslint-config@npm:0.75.4" @@ -5598,13 +5635,13 @@ __metadata: languageName: node linkType: hard -"@react-native/eslint-config@npm:0.76.0": - version: 0.76.0 - resolution: "@react-native/eslint-config@npm:0.76.0" +"@react-native/eslint-config@npm:0.76.1": + version: 0.76.1 + resolution: "@react-native/eslint-config@npm:0.76.1" dependencies: "@babel/core": "npm:^7.25.2" "@babel/eslint-parser": "npm:^7.25.1" - "@react-native/eslint-plugin": "npm:0.76.0" + "@react-native/eslint-plugin": "npm:0.76.1" "@typescript-eslint/eslint-plugin": "npm:^7.1.1" "@typescript-eslint/parser": "npm:^7.1.1" eslint-config-prettier: "npm:^8.5.0" @@ -5618,17 +5655,17 @@ __metadata: peerDependencies: eslint: ">=8" prettier: ">=2" - checksum: 10/133d0a81c06bc777d4cda1f6f34c3fd6aaef75e1a29274c3c978192264f6c209237e889f2cc97ddb80df3f280373bb5235c9fd4202502c6d6756deefca1680de + checksum: 10/789b8eb024349892caef02173d52523a1a52779c3fc86bdec7a06d96649bccb3e1adad961a81b23bad9032fa951cba156fcb0d36ff01e087361f7954521b1717 languageName: node linkType: hard -"@react-native/eslint-config@npm:0.76.1": - version: 0.76.1 - resolution: "@react-native/eslint-config@npm:0.76.1" +"@react-native/eslint-config@npm:0.76.5": + version: 0.76.5 + resolution: "@react-native/eslint-config@npm:0.76.5" dependencies: "@babel/core": "npm:^7.25.2" "@babel/eslint-parser": "npm:^7.25.1" - "@react-native/eslint-plugin": "npm:0.76.1" + "@react-native/eslint-plugin": "npm:0.76.5" "@typescript-eslint/eslint-plugin": "npm:^7.1.1" "@typescript-eslint/parser": "npm:^7.1.1" eslint-config-prettier: "npm:^8.5.0" @@ -5638,11 +5675,10 @@ __metadata: eslint-plugin-react: "npm:^7.30.1" eslint-plugin-react-hooks: "npm:^4.6.0" eslint-plugin-react-native: "npm:^4.0.0" - hermes-eslint: "npm:^0.23.1" peerDependencies: eslint: ">=8" prettier: ">=2" - checksum: 10/789b8eb024349892caef02173d52523a1a52779c3fc86bdec7a06d96649bccb3e1adad961a81b23bad9032fa951cba156fcb0d36ff01e087361f7954521b1717 + checksum: 10/28fff6184fa3e015df9ae86a10a6cd3d563b2440112b1cd0b6ea201a42a9f88407b7b7c61b3ee08b2eb633dcdf8cf43ef58b7472782e84771be9070f176d9082 languageName: node linkType: hard @@ -5653,13 +5689,6 @@ __metadata: languageName: node linkType: hard -"@react-native/eslint-plugin@npm:0.76.0": - version: 0.76.0 - resolution: "@react-native/eslint-plugin@npm:0.76.0" - checksum: 10/3cee9a9efc9b066b79f2f6085643723e0996b6ada4b8bcd418521ba0cac5c893b4c3beb961f23477080a43706e8072a1cdede3bc3ee26a4f82f45b7ec695fbf0 - languageName: node - linkType: hard - "@react-native/eslint-plugin@npm:0.76.1": version: 0.76.1 resolution: "@react-native/eslint-plugin@npm:0.76.1" @@ -5667,10 +5696,10 @@ __metadata: languageName: node linkType: hard -"@react-native/gradle-plugin@npm:0.75.2": - version: 0.75.2 - resolution: "@react-native/gradle-plugin@npm:0.75.2" - checksum: 10/0b9ab824959db4da7ac29de9a285402cf3540e1ba1ef38c34f23389119393975d7a5463b65443d6c1e4f6618e3829b600e51ed0f05603b7f4649ce24f0f0b89e +"@react-native/eslint-plugin@npm:0.76.5": + version: 0.76.5 + resolution: "@react-native/eslint-plugin@npm:0.76.5" + checksum: 10/0418f5d5b02db80b1a2a193dafd0f01f9c8176488325b6e1d23318df8b374992142417724e52ac802a60a8bc92622d982a407dcb71d3f85922576c234194414f languageName: node linkType: hard @@ -5688,17 +5717,10 @@ __metadata: languageName: node linkType: hard -"@react-native/gradle-plugin@npm:0.76.1": - version: 0.76.1 - resolution: "@react-native/gradle-plugin@npm:0.76.1" - checksum: 10/19486fb1dfb3e0dd41938b8a88a673de845a6cc7671df3b1d7cc0e746b916eb0ed807015f5e62b506389924a0e3490ae08082a91f57d114e8368293461118e72 - languageName: node - linkType: hard - -"@react-native/js-polyfills@npm:0.75.2": - version: 0.75.2 - resolution: "@react-native/js-polyfills@npm:0.75.2" - checksum: 10/de7f2e0e2a52d142d5068a99fb2fd29eb6a6aced3336295ef967e374681e0e36183ef859fbdb5bfa3cba724f1c2f83f42702b1824c27f6876fb999028fe0c919 +"@react-native/gradle-plugin@npm:0.76.5": + version: 0.76.5 + resolution: "@react-native/gradle-plugin@npm:0.76.5" + checksum: 10/337a2a1dcca76e58463340e3de8c6d1e207a00f1b7441067f2828f67a03aba2d00d9abf3340d74d653a1eeaf60827ecd0e67bac9128dad6dceded444ea70e2ff languageName: node linkType: hard @@ -5723,17 +5745,10 @@ __metadata: languageName: node linkType: hard -"@react-native/metro-babel-transformer@npm:0.75.2": - version: 0.75.2 - resolution: "@react-native/metro-babel-transformer@npm:0.75.2" - dependencies: - "@babel/core": "npm:^7.20.0" - "@react-native/babel-preset": "npm:0.75.2" - hermes-parser: "npm:0.22.0" - nullthrows: "npm:^1.1.1" - peerDependencies: - "@babel/core": "*" - checksum: 10/4f5be3a0bd871c1f147afaa06febeb55f6c8e7cb229b2eeb569a9790fe06a335ead99543ff0b72a09cdaa46932729871f78f67d072cecd362158a69fe091285e +"@react-native/js-polyfills@npm:0.76.5": + version: 0.76.5 + resolution: "@react-native/js-polyfills@npm:0.76.5" + checksum: 10/cab948838bbbf2ce507e1130135c819c05831327cb03432c7d9f95367f74474fd7863cf6641f37f42217a34e788b82987d0ba10cf5d65ed63d265e8508b78141 languageName: node linkType: hard @@ -5779,6 +5794,20 @@ __metadata: languageName: node linkType: hard +"@react-native/metro-babel-transformer@npm:0.76.5": + version: 0.76.5 + resolution: "@react-native/metro-babel-transformer@npm:0.76.5" + dependencies: + "@babel/core": "npm:^7.25.2" + "@react-native/babel-preset": "npm:0.76.5" + hermes-parser: "npm:0.23.1" + nullthrows: "npm:^1.1.1" + peerDependencies: + "@babel/core": "*" + checksum: 10/52f445b9e99515750ffbbdc182ed2aff07ef69a380606c960a122179afeb55014c5743451a2b941939d4044a4a575fd3d316fa434c827dea57625a4c6f110c18 + languageName: node + linkType: hard + "@react-native/metro-config@npm:0.75.4": version: 0.75.4 resolution: "@react-native/metro-config@npm:0.75.4" @@ -5803,6 +5832,18 @@ __metadata: languageName: node linkType: hard +"@react-native/metro-config@npm:0.76.5": + version: 0.76.5 + resolution: "@react-native/metro-config@npm:0.76.5" + dependencies: + "@react-native/js-polyfills": "npm:0.76.5" + "@react-native/metro-babel-transformer": "npm:0.76.5" + metro-config: "npm:^0.81.0" + metro-runtime: "npm:^0.81.0" + checksum: 10/afdd47fe403d30bf29961e4e3271f16cbd2170150d6c516aeb6018846f6d1bd71e1eca0a7548c90b9ce847c7a7a256971b96b172edc4840a8cb5dd1226bb6d43 + languageName: node + linkType: hard + "@react-native/normalize-color@npm:^2.0.0": version: 2.1.0 resolution: "@react-native/normalize-color@npm:2.1.0" @@ -5810,13 +5851,6 @@ __metadata: languageName: node linkType: hard -"@react-native/normalize-colors@npm:0.75.2": - version: 0.75.2 - resolution: "@react-native/normalize-colors@npm:0.75.2" - checksum: 10/bbf7038e191785eacfb90765c92ebd6007f9fb55b8efb5a67e3438627238f83181b09b293deb1978cca615041f74b2c034a5ad335ac025c4ce663d7d72619ca1 - languageName: node - linkType: hard - "@react-native/normalize-colors@npm:0.75.4": version: 0.75.4 resolution: "@react-native/normalize-colors@npm:0.75.4" @@ -5838,6 +5872,13 @@ __metadata: languageName: node linkType: hard +"@react-native/normalize-colors@npm:0.76.5": + version: 0.76.5 + resolution: "@react-native/normalize-colors@npm:0.76.5" + checksum: 10/ebe4df00677e779443c54a36acf034d51f582eebdb5745c7c185ad49d4f5ed9302c1b7560c59f0c5a278b02768057c2b97ab431e7af2d8f2a97c6b848f377210 + languageName: node + linkType: hard + "@react-native/normalize-colors@npm:^0.74.1": version: 0.74.87 resolution: "@react-native/normalize-colors@npm:0.74.87" @@ -5859,6 +5900,13 @@ __metadata: languageName: node linkType: hard +"@react-native/typescript-config@npm:0.76.5": + version: 0.76.5 + resolution: "@react-native/typescript-config@npm:0.76.5" + checksum: 10/d4ce87d4773025d53315405685e07986db125615319c5c847b7debaf1ee1870a094d7be1892755fb482ee2fb278f6074148ece1d091448291a43580561626ddc + languageName: node + linkType: hard + "@react-native/virtualized-lists@npm:0.75.4": version: 0.75.4 resolution: "@react-native/virtualized-lists@npm:0.75.4" @@ -5876,26 +5924,9 @@ __metadata: languageName: node linkType: hard -"@react-native/virtualized-lists@npm:0.76.0": - version: 0.76.0 - resolution: "@react-native/virtualized-lists@npm:0.76.0" - dependencies: - invariant: "npm:^2.2.4" - nullthrows: "npm:^1.1.1" - peerDependencies: - "@types/react": ^18.2.6 - react: "*" - react-native: "*" - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10/25fd09e30b2583165dbfcd42f5498baedbf485937beac53cd5be0bc237597d49370ee891f4daa932837f74e9ad45bf389f46d98f720f7578c07669fb4e7e21d5 - languageName: node - linkType: hard - -"@react-native/virtualized-lists@npm:0.76.1": - version: 0.76.1 - resolution: "@react-native/virtualized-lists@npm:0.76.1" +"@react-native/virtualized-lists@npm:0.76.5": + version: 0.76.5 + resolution: "@react-native/virtualized-lists@npm:0.76.5" dependencies: invariant: "npm:^2.2.4" nullthrows: "npm:^1.1.1" @@ -5906,7 +5937,7 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 10/100920545f6c91778c0cc64c377f126f85145f66410c91de2f55c1545e042addeab37c022c7a382a28987056740bf3f6d33194cbc9a2c88c65f5e0eab8474c1a + checksum: 10/c5c0a5c74f7b28b90f9043bac4f7c582732e6aa72808f80d977b04f165a57995ac81151821ed875bac31560c947af0197163ead2d2633e51891a7c7ec7dc2803 languageName: node linkType: hard @@ -6098,30 +6129,7 @@ __metadata: languageName: node linkType: hard -"@stylexjs/babel-plugin@npm:^0.7.5": - version: 0.7.5 - resolution: "@stylexjs/babel-plugin@npm:0.7.5" - dependencies: - "@babel/core": "npm:^7.23.6" - "@babel/helper-module-imports": "npm:^7.22.15" - "@babel/traverse": "npm:^7.23.6" - "@babel/types": "npm:^7.23.6" - "@stylexjs/shared": "npm:0.7.5" - "@stylexjs/stylex": "npm:0.7.5" - checksum: 10/80e59ce2ef5aa51c5c80cef5045756cd302f20d0dc058295fbc138b1558f94abbfb5517a1c07ce8eb15da75dbc6842042e2efa9c6543001e7c76fc9959604f36 - languageName: node - linkType: hard - -"@stylexjs/shared@npm:0.7.5": - version: 0.7.5 - resolution: "@stylexjs/shared@npm:0.7.5" - dependencies: - postcss-value-parser: "npm:^4.1.0" - checksum: 10/93707115e05ce9b59a6b005b3c4595da65f01b5840a319daa36ab22250ae4e29d25872b9481430fbb6cde143f56a75ae9c7866cf30a82460c105103da72d8361 - languageName: node - linkType: hard - -"@stylexjs/stylex@npm:0.7.5, @stylexjs/stylex@npm:^0.7.5": +"@stylexjs/stylex@npm:^0.7.5": version: 0.7.5 resolution: "@stylexjs/stylex@npm:0.7.5" dependencies: @@ -6374,6 +6382,16 @@ __metadata: languageName: node linkType: hard +"@types/jest@npm:^29.5.5": + version: 29.5.14 + resolution: "@types/jest@npm:29.5.14" + dependencies: + expect: "npm:^29.0.0" + pretty-format: "npm:^29.0.0" + checksum: 10/59ec7a9c4688aae8ee529316c43853468b6034f453d08a2e1064b281af9c81234cec986be796288f1bbb29efe943bc950e70c8fa8faae1e460d50e3cf9760f9b + languageName: node + linkType: hard + "@types/json-schema@npm:*, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.9": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" @@ -6493,6 +6511,16 @@ __metadata: languageName: node linkType: hard +"@types/react@npm:^18.2.44": + version: 18.3.13 + resolution: "@types/react@npm:18.3.13" + dependencies: + "@types/prop-types": "npm:*" + csstype: "npm:^3.0.2" + checksum: 10/4f2b851cabdb68430b50998ad18f206edaea5b3c651d92e3573d86b7ac740224a91b7ca63176fa70e1defc78459faf518e5d2f58e1ba2839b1f12365dab70de2 + languageName: node + linkType: hard + "@types/scheduler@npm:^0.16": version: 0.16.8 resolution: "@types/scheduler@npm:0.16.8" @@ -7741,7 +7769,7 @@ __metadata: "@babel/plugin-transform-unicode-regex": "npm:^7.24.7" "@babel/traverse": "npm:^7.20.0" "@babel/types": "npm:^7.20.0" - "@react-native/eslint-config": "npm:0.76.0" + "@react-native/eslint-config": "npm:0.76.5" "@types/node": "npm:^18.15.11" "@typescript-eslint/eslint-plugin": "npm:^7.0.2" "@typescript-eslint/parser": "npm:^7.0.2" @@ -7763,6 +7791,15 @@ __metadata: languageName: node linkType: hard +"babel-plugin-syntax-hermes-parser@npm:^0.25.1": + version: 0.25.1 + resolution: "babel-plugin-syntax-hermes-parser@npm:0.25.1" + dependencies: + hermes-parser: "npm:0.25.1" + checksum: 10/dc80fafde1aed8e60cf86ecd2e9920e7f35ffe02b33bd4e772daaa786167bcf508aac3fc1aea425ff4c7a0be94d82528f3fe8619b7f41dac853264272d640c04 + languageName: node + linkType: hard + "babel-plugin-transform-flow-enums@npm:^0.0.2": version: 0.0.2 resolution: "babel-plugin-transform-flow-enums@npm:0.0.2" @@ -8311,9 +8348,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.30001669": - version: 1.0.30001675 - resolution: "caniuse-lite@npm:1.0.30001675" - checksum: 10/06be4a34aca5f54cbe7daae3e8a4a4aaf135cdae6154ac73c2dc63a207714353c3ddd76331336179fdabac4a565d7970255105b854198ba5b15ec038698930b3 + version: 1.0.30001688 + resolution: "caniuse-lite@npm:1.0.30001688" + checksum: 10/2125e900af866ee211c66beca01220c98e72c8a91d25c87b8ab456d3916f56fb1be5feef72556bca746da7aa852fc0118a04669f5ec2e6511eb77c960479e1c0 languageName: node linkType: hard @@ -8830,13 +8867,11 @@ __metadata: "@react-native-async-storage/async-storage": "npm:^1.24.0" "@react-native-community/slider": "npm:^4.5.5" "@react-native-masked-view/masked-view": "npm:^0.3.1" - "@react-native-picker/picker": "npm:^2.9.0" "@react-navigation/bottom-tabs": "npm:^7.0.0" "@react-navigation/native": "npm:^7.0.0" "@react-navigation/native-stack": "npm:^7.0.0" "@react-navigation/stack": "npm:^7.0.0" "@shopify/flash-list": "npm:^1.7.1" - "@stylexjs/babel-plugin": "npm:^0.7.5" "@tsconfig/react-native": "npm:^3.0.0" "@types/d3-shape": "npm:^3.1.1" d3-shape: "npm:^3.2.0" @@ -8845,7 +8880,7 @@ __metadata: patch-package: "npm:^8.0.0" prettier: "npm:^3.3.3" react: "npm:18.3.1" - react-native: "npm:^0.76.1" + react-native: "npm:0.76.5" react-native-gesture-handler: "npm:2.20.2" react-native-pager-view: "npm:^6.4.1" react-native-reanimated: "workspace:*" @@ -8858,13 +8893,11 @@ __metadata: "@react-native-async-storage/async-storage": "*" "@react-native-community/slider": "*" "@react-native-masked-view/masked-view": "*" - "@react-native-picker/picker": "*" "@react-navigation/bottom-tabs": "*" "@react-navigation/native": "*" "@react-navigation/native-stack": "*" "@react-navigation/stack": "*" "@shopify/flash-list": "*" - "@stylexjs/babel-plugin": "*" d3-shape: "*" react: "*" react-dom: "*" @@ -9086,15 +9119,15 @@ __metadata: linkType: hard "cross-spawn@npm:^6.0.0, cross-spawn@npm:^6.0.5": - version: 6.0.5 - resolution: "cross-spawn@npm:6.0.5" + version: 6.0.6 + resolution: "cross-spawn@npm:6.0.6" dependencies: nice-try: "npm:^1.0.4" path-key: "npm:^2.0.1" semver: "npm:^5.5.0" shebang-command: "npm:^1.2.0" which: "npm:^1.2.9" - checksum: 10/f07e643b4875f26adffcd7f13bc68d9dff20cf395f8ed6f43a23f3ee24fc3a80a870a32b246fd074e514c8fd7da5f978ac6a7668346eec57aa87bac89c1ed3a1 + checksum: 10/7abf6137b23293103a22bfeaf320f2d63faae70d97ddb4b58597237501d2efdd84cdc69a30246977e0c5f68216593894d41a7f122915dd4edf448db14c74171b languageName: node linkType: hard @@ -9925,9 +9958,9 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.5.41": - version: 1.5.49 - resolution: "electron-to-chromium@npm:1.5.49" - checksum: 10/4c368eca149587619bbc961490883cca510c8ab1986abee6cbbb7ed245a06d68607245c25078a9460c0d18ea4179411abed94b755d7b7a82a3f4e696494c4360 + version: 1.5.73 + resolution: "electron-to-chromium@npm:1.5.73" + checksum: 10/07d0885656c49ea4deb98340db23c68b43615c0325566e0ae6df751328460d4cdfb86ca0fcaaa745cf7b44c6141440fe2eb2f5d9518d1c110ba3872c73ed817d languageName: node linkType: hard @@ -11398,11 +11431,10 @@ __metadata: "@react-native-community/cli-platform-ios": "npm:15.0.0" "@react-native-community/slider": "npm:^4.5.5" "@react-native-masked-view/masked-view": "npm:^0.3.1" - "@react-native-picker/picker": "npm:^2.9.0" - "@react-native/babel-preset": "npm:0.76.1" - "@react-native/eslint-config": "npm:0.76.1" - "@react-native/metro-config": "npm:0.76.1" - "@react-native/typescript-config": "npm:0.76.1" + "@react-native/babel-preset": "npm:0.76.5" + "@react-native/eslint-config": "npm:0.76.5" + "@react-native/metro-config": "npm:0.76.5" + "@react-native/typescript-config": "npm:0.76.5" "@react-navigation/native": "npm:^7.0.0" "@react-navigation/native-stack": "npm:^7.0.0" "@shopify/flash-list": "npm:^1.7.1" @@ -11415,7 +11447,7 @@ __metadata: patch-package: "npm:^8.0.0" prettier: "npm:^3.3.3" react: "npm:18.3.1" - react-native: "npm:^0.76.1" + react-native: "npm:0.76.5" react-native-gesture-handler: "npm:2.20.2" react-native-pager-view: "npm:^6.4.1" react-native-reanimated: "workspace:*" @@ -11484,7 +11516,7 @@ __metadata: languageName: node linkType: hard -"fast-xml-parser@npm:^4.2.4, fast-xml-parser@npm:^4.4.1": +"fast-xml-parser@npm:^4.4.1": version: 4.5.0 resolution: "fast-xml-parser@npm:4.5.0" dependencies: @@ -12468,6 +12500,13 @@ __metadata: languageName: node linkType: hard +"hermes-estree@npm:0.25.1": + version: 0.25.1 + resolution: "hermes-estree@npm:0.25.1" + checksum: 10/7b1eca98b264a25632064cffa5771360d30cf452e77db1e191f9913ee45cf78c292b2dbca707e92fb71b0870abb97e94b506a5ab80abd96ba237fee169b601fe + languageName: node + linkType: hard + "hermes-parser@npm:0.22.0": version: 0.22.0 resolution: "hermes-parser@npm:0.22.0" @@ -12495,6 +12534,15 @@ __metadata: languageName: node linkType: hard +"hermes-parser@npm:0.25.1": + version: 0.25.1 + resolution: "hermes-parser@npm:0.25.1" + dependencies: + hermes-estree: "npm:0.25.1" + checksum: 10/805efc05691420f236654349872c70731121791fa54de521c7ee51059eae34f84dd19f22ee846741dcb60372f8fb5335719b96b4ecb010d2aed7d872f2eff9cc + languageName: node + linkType: hard + "hoist-non-react-statics@npm:^3.3.0": version: 3.3.2 resolution: "hoist-non-react-statics@npm:3.3.2" @@ -14199,11 +14247,11 @@ __metadata: linkType: hard "jsesc@npm:^3.0.2": - version: 3.0.2 - resolution: "jsesc@npm:3.0.2" + version: 3.1.0 + resolution: "jsesc@npm:3.1.0" bin: jsesc: bin/jsesc - checksum: 10/8e5a7de6b70a8bd71f9cb0b5a7ade6a73ae6ab55e697c74cc997cede97417a3a65ed86c36f7dd6125fe49766e8386c845023d9e213916ca92c9dfdd56e2babf3 + checksum: 10/20bd37a142eca5d1794f354db8f1c9aeb54d85e1f5c247b371de05d23a9751ecd7bd3a9c4fc5298ea6fa09a100dafb4190fa5c98c6610b75952c3487f3ce7967 languageName: node linkType: hard @@ -16869,11 +16917,10 @@ __metadata: "@react-native-community/cli-platform-ios": "npm:15.0.0" "@react-native-community/slider": "npm:^4.5.5" "@react-native-masked-view/masked-view": "npm:^0.3.1" - "@react-native-picker/picker": "npm:^2.9.0" - "@react-native/babel-preset": "npm:0.76.1" - "@react-native/eslint-config": "npm:0.76.1" - "@react-native/metro-config": "npm:0.76.1" - "@react-native/typescript-config": "npm:0.76.1" + "@react-native/babel-preset": "npm:0.76.5" + "@react-native/eslint-config": "npm:0.76.5" + "@react-native/metro-config": "npm:0.76.5" + "@react-native/typescript-config": "npm:0.76.5" "@react-navigation/native": "npm:^7.0.0" "@react-navigation/native-stack": "npm:^7.0.0" "@shopify/flash-list": "npm:^1.7.1" @@ -16887,7 +16934,7 @@ __metadata: patch-package: "npm:^8.0.0" prettier: "npm:^3.3.3" react: "npm:18.3.1" - react-native: "npm:^0.76.1" + react-native: "npm:0.76.5" react-native-gesture-handler: "npm:2.20.2" react-native-pager-view: "npm:^6.4.1" react-native-reanimated: "workspace:*" @@ -17548,13 +17595,6 @@ __metadata: languageName: node linkType: hard -"querystring@npm:^0.2.1": - version: 0.2.1 - resolution: "querystring@npm:0.2.1" - checksum: 10/5ae2eeb8c6d70263a3d13ffaf234ce9593ae0e95ad8ea04aa540e14ff66679347420817aeb4fe6fdfa2aaa7fac86e311b6f1d3da2187f433082ad9125c808c14 - languageName: node - linkType: hard - "querystringify@npm:^2.1.1": version: 2.2.0 resolution: "querystringify@npm:2.2.0" @@ -17688,9 +17728,9 @@ __metadata: languageName: node linkType: hard -"react-native-builder-bob@npm:0.30.2": - version: 0.30.2 - resolution: "react-native-builder-bob@npm:0.30.2" +"react-native-builder-bob@npm:0.33.1": + version: 0.33.1 + resolution: "react-native-builder-bob@npm:0.33.1" dependencies: "@babel/core": "npm:^7.25.2" "@babel/plugin-transform-strict-mode": "npm:^7.24.7" @@ -17716,7 +17756,7 @@ __metadata: yargs: "npm:^17.5.1" bin: bob: bin/bob - checksum: 10/0a6f2321ce7ba4aa08a40e5d599c94fe4705afc7d67ac9d4e2400603dd91cfa6646afdc02697ff683dca3b2654b1701bab4114c3548f4dfa0c9327a74a8a8a48 + checksum: 10/c4aaefdc1f82a88ce66c5b448ed851213ca614c777a775cb0772ab80e75852761b915d715ed6f58f99670b1b2fba6435e1d9c03445b9ba8eb44befeb77f5b532 languageName: node linkType: hard @@ -17736,26 +17776,27 @@ __metadata: linkType: hard "react-native-macos@npm:^0.75.13": - version: 0.75.13 - resolution: "react-native-macos@npm:0.75.13" + version: 0.75.16 + resolution: "react-native-macos@npm:0.75.16" dependencies: "@jest/create-cache-key-function": "npm:^29.6.3" - "@react-native-community/cli": "npm:14.0.0" - "@react-native-community/cli-platform-android": "npm:14.0.0" - "@react-native-community/cli-platform-apple": "npm:14.0.0" - "@react-native-community/cli-platform-ios": "npm:14.0.0" + "@react-native-community/cli": "npm:14.1.0" + "@react-native-community/cli-platform-android": "npm:14.1.0" + "@react-native-community/cli-platform-apple": "npm:14.1.0" + "@react-native-community/cli-platform-ios": "npm:14.1.0" "@react-native-mac/virtualized-lists": "npm:0.75.0" - "@react-native/assets-registry": "npm:0.75.2" - "@react-native/codegen": "npm:0.75.2" - "@react-native/community-cli-plugin": "npm:0.75.2" - "@react-native/gradle-plugin": "npm:0.75.2" - "@react-native/js-polyfills": "npm:0.75.2" - "@react-native/normalize-colors": "npm:0.75.2" + "@react-native/assets-registry": "npm:0.75.4" + "@react-native/codegen": "npm:0.75.4" + "@react-native/community-cli-plugin": "npm:0.75.4" + "@react-native/gradle-plugin": "npm:0.75.4" + "@react-native/js-polyfills": "npm:0.75.4" + "@react-native/normalize-colors": "npm:0.75.4" abort-controller: "npm:^3.0.0" anser: "npm:^1.4.9" ansi-regex: "npm:^5.0.0" base64-js: "npm:^1.5.1" chalk: "npm:^4.0.0" + commander: "npm:^9.4.1" event-target-shim: "npm:^5.0.1" flow-enums-runtime: "npm:^0.0.6" glob: "npm:^7.1.1" @@ -17786,7 +17827,7 @@ __metadata: optional: true bin: react-native: cli.js - checksum: 10/b4ec9dec5faf8c9ac11a5519a544f1376293bfb47c6e6bd67db22553c095b22214054b2fc9b13047fab7841310fc6171de39ba8fd39636fbd220a6f8ab3f21fa + checksum: 10/a13ea5e8319fe16e61a6dd3531c9b388f8563e35a57af42125d2765502d92dece85ee611d0e304072d44b030e52f832d18e0c96419bb67d28d17d1c46b301306 languageName: node linkType: hard @@ -17831,10 +17872,10 @@ __metadata: "@babel/preset-env": "npm:^7.25.3" "@babel/preset-typescript": "npm:^7.16.7" "@babel/types": "npm:^7.20.0" - "@react-native/babel-preset": "npm:0.76.1" - "@react-native/eslint-config": "npm:0.76.1" - "@react-native/metro-config": "npm:0.76.1" - "@react-native/typescript-config": "npm:0.76.1" + "@react-native/babel-preset": "npm:0.76.5" + "@react-native/eslint-config": "npm:0.76.5" + "@react-native/metro-config": "npm:0.76.5" + "@react-native/typescript-config": "npm:0.76.5" "@testing-library/jest-native": "npm:^4.0.4" "@testing-library/react-hooks": "npm:^8.0.0" "@testing-library/react-native": "npm:^12.5.2" @@ -17876,8 +17917,8 @@ __metadata: madge: "npm:^5.0.1" prettier: "npm:^3.3.3" react: "npm:18.3.1" - react-native: "npm:^0.76.1" - react-native-builder-bob: "npm:0.30.2" + react-native: "npm:0.76.5" + react-native-builder-bob: "npm:0.33.1" react-native-gesture-handler: "npm:2.20.2" react-native-web: "npm:0.19.11" react-test-renderer: "npm:18.2.0" @@ -17947,6 +17988,27 @@ __metadata: languageName: node linkType: hard +"react-native-worklets@workspace:packages/react-native-worklets": + version: 0.0.0-use.local + resolution: "react-native-worklets@workspace:packages/react-native-worklets" + dependencies: + "@react-native-community/cli": "npm:15.0.1" + "@react-native/eslint-config": "npm:0.76.5" + "@types/jest": "npm:^29.5.5" + "@types/react": "npm:^18.2.44" + eslint: "npm:^8.57.0" + prettier: "npm:^3.3.3" + react: "npm:18.3.1" + react-native: "npm:0.76.5" + react-native-builder-bob: "npm:0.33.1" + typescript: "npm:~5.3.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + react: "*" + react-native: "*" + languageName: unknown + linkType: soft + "react-native@npm:0.75.4": version: 0.75.4 resolution: "react-native@npm:0.75.4" @@ -18002,72 +18064,18 @@ __metadata: languageName: node linkType: hard -"react-native@npm:0.76.0": - version: 0.76.0 - resolution: "react-native@npm:0.76.0" - dependencies: - "@jest/create-cache-key-function": "npm:^29.6.3" - "@react-native/assets-registry": "npm:0.76.0" - "@react-native/codegen": "npm:0.76.0" - "@react-native/community-cli-plugin": "npm:0.76.0" - "@react-native/gradle-plugin": "npm:0.76.0" - "@react-native/js-polyfills": "npm:0.76.0" - "@react-native/normalize-colors": "npm:0.76.0" - "@react-native/virtualized-lists": "npm:0.76.0" - abort-controller: "npm:^3.0.0" - anser: "npm:^1.4.9" - ansi-regex: "npm:^5.0.0" - babel-jest: "npm:^29.7.0" - babel-plugin-syntax-hermes-parser: "npm:^0.23.1" - base64-js: "npm:^1.5.1" - chalk: "npm:^4.0.0" - commander: "npm:^12.0.0" - event-target-shim: "npm:^5.0.1" - flow-enums-runtime: "npm:^0.0.6" - glob: "npm:^7.1.1" - invariant: "npm:^2.2.4" - jest-environment-node: "npm:^29.6.3" - jsc-android: "npm:^250231.0.0" - memoize-one: "npm:^5.0.0" - metro-runtime: "npm:^0.81.0" - metro-source-map: "npm:^0.81.0" - mkdirp: "npm:^0.5.1" - nullthrows: "npm:^1.1.1" - pretty-format: "npm:^29.7.0" - promise: "npm:^8.3.0" - react-devtools-core: "npm:^5.3.1" - react-refresh: "npm:^0.14.0" - regenerator-runtime: "npm:^0.13.2" - scheduler: "npm:0.24.0-canary-efb381bbf-20230505" - semver: "npm:^7.1.3" - stacktrace-parser: "npm:^0.1.10" - whatwg-fetch: "npm:^3.0.0" - ws: "npm:^6.2.3" - yargs: "npm:^17.6.2" - peerDependencies: - "@types/react": ^18.2.6 - react: ^18.2.0 - peerDependenciesMeta: - "@types/react": - optional: true - bin: - react-native: cli.js - checksum: 10/d979319a3cb7a32fca73d9fea48f4893c1321dbc0290177337ecdaba8887176f911ff32fe46a70b1450878ef204889c363041ace05a930bd83ba3778319a1812 - languageName: node - linkType: hard - -"react-native@npm:^0.76.1": - version: 0.76.1 - resolution: "react-native@npm:0.76.1" +"react-native@npm:0.76.5": + version: 0.76.5 + resolution: "react-native@npm:0.76.5" dependencies: "@jest/create-cache-key-function": "npm:^29.6.3" - "@react-native/assets-registry": "npm:0.76.1" - "@react-native/codegen": "npm:0.76.1" - "@react-native/community-cli-plugin": "npm:0.76.1" - "@react-native/gradle-plugin": "npm:0.76.1" - "@react-native/js-polyfills": "npm:0.76.1" - "@react-native/normalize-colors": "npm:0.76.1" - "@react-native/virtualized-lists": "npm:0.76.1" + "@react-native/assets-registry": "npm:0.76.5" + "@react-native/codegen": "npm:0.76.5" + "@react-native/community-cli-plugin": "npm:0.76.5" + "@react-native/gradle-plugin": "npm:0.76.5" + "@react-native/js-polyfills": "npm:0.76.5" + "@react-native/normalize-colors": "npm:0.76.5" + "@react-native/virtualized-lists": "npm:0.76.5" abort-controller: "npm:^3.0.0" anser: "npm:^1.4.9" ansi-regex: "npm:^5.0.0" @@ -18106,7 +18114,7 @@ __metadata: optional: true bin: react-native: cli.js - checksum: 10/423578b05f6cce87fefb2e47f4ae5d30ccb9a9b72f86c4f93b580280df784592be23ab803e3b435ab15c1e1ccf5d5d4df498a7d62818fe05f3715d9d0654dc58 + checksum: 10/124e81360348bae8ff7e277e2d963174f015a29ee50a2fd439f4f2d64ab5b88335b6104358ebeb00ca69afeb73df074c52b4f56842528ca0a53ce33d0bba83fa languageName: node linkType: hard @@ -21021,7 +21029,7 @@ __metadata: prettier: "npm:^3.3.3" react: "npm:18.3.1" react-dom: "npm:18.3.1" - react-native: "npm:0.76.0" + react-native: "npm:0.76.5" react-native-reanimated: "workspace:*" react-native-web: "npm:0.19.11" serve: "npm:^14.2.3"