From 270e511dd75e5e9734629a8c300f5d7faf666b32 Mon Sep 17 00:00:00 2001 From: huhuanming Date: Tue, 25 Aug 2026 23:41:29 +0800 Subject: [PATCH 1/7] chore: upgrade app modules to React Native 0.86 --- .../react-native-npm-0.83.0-577d0f2d83.patch | 34 - .../react-native-npm-0.86.2-c9d546616f.patch | 14 + CHANGELOG.md | 11 + example/react-native/android/app/build.gradle | 2 +- example/react-native/ios/Podfile | 5 +- example/react-native/ios/Podfile.lock | 2537 ++++++----------- .../ios/example.xcodeproj/project.pbxproj | 24 +- example/react-native/package.json | 23 +- native-modules/native-logger/package.json | 10 +- .../react-native-aes-crypto/package.json | 10 +- .../react-native-app-update/package.json | 10 +- .../react-native-async-storage/package.json | 10 +- .../ios/BackgroundThreadManager.mm | 15 +- .../package.json | 10 +- .../react-native-bundle-crypto/package.json | 10 +- .../react-native-bundle-update/package.json | 10 +- .../package.json | 10 +- .../react-native-cloud-fs/package.json | 8 +- .../package.json | 10 +- .../react-native-device-utils/package.json | 10 +- .../react-native-dns-lookup/package.json | 10 +- .../package.json | 10 +- .../react-native-keychain-module/package.json | 10 +- .../react-native-lite-card/package.json | 10 +- .../react-native-network-info/package.json | 10 +- .../package.json | 10 +- .../react-native-pbkdf2/package.json | 10 +- .../react-native-perf-memory/package.json | 10 +- .../react-native-perf-stats/package.json | 10 +- native-modules/react-native-ping/package.json | 8 +- .../package.json | 10 +- .../react-native-sni-connect/package.json | 10 +- .../react-native-splash-screen/package.json | 10 +- .../package.json | 10 +- .../react-native-tcp-socket/package.json | 10 +- .../react-native-zip-archive/package.json | 8 +- .../react-native-auto-size-input/package.json | 10 +- .../react-native-chart-webview/package.json | 10 +- .../react-native-pager-view/package.json | 6 +- .../react-native-perp-depth-bar/package.json | 10 +- .../react-native-scroll-guard/package.json | 8 +- .../react-native-segment-slider/package.json | 10 +- .../react-native-skeleton/package.json | 10 +- .../react-native-tab-view/package.json | 6 +- package.json | 8 +- scripts/nitro-view/template/package.json | 8 +- scripts/nitro/template/package.json | 8 +- yarn.lock | 1249 ++++---- 48 files changed, 1753 insertions(+), 2519 deletions(-) delete mode 100644 .yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch create mode 100644 .yarn/patches/react-native-npm-0.86.2-c9d546616f.patch diff --git a/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch b/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch deleted file mode 100644 index bb42fc62..00000000 --- a/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch +++ /dev/null @@ -1,34 +0,0 @@ -diff --git a/third-party-podspecs/RCT-Folly.podspec b/third-party-podspecs/RCT-Folly.podspec -index 8852179b6ce2ef6ae64e0239edb2594925ff8bc1..040c4f0ca82e6a7342d5b3ed54e556431e5853d2 100644 ---- a/third-party-podspecs/RCT-Folly.podspec -+++ b/third-party-podspecs/RCT-Folly.podspec -@@ -25,7 +25,7 @@ Pod::Spec.new do |spec| - spec.dependency "DoubleConversion" - spec.dependency "glog" - spec.dependency "fast_float", "8.0.0" -- spec.dependency "fmt", "11.0.2" -+ spec.dependency "fmt", "12.1.0" - spec.compiler_flags = '-Wno-documentation -faligned-new' - spec.source_files = 'folly/String.cpp', - 'folly/Conv.cpp', -diff --git a/third-party-podspecs/fmt.podspec b/third-party-podspecs/fmt.podspec -index 2f38990e226c13f483aaf1b986302d4094243814..a40c5755e049974e98a4038c177661d2bdc5681f 100644 ---- a/third-party-podspecs/fmt.podspec -+++ b/third-party-podspecs/fmt.podspec -@@ -8,14 +8,14 @@ fmt_git_url = fmt_config[:git] - - Pod::Spec.new do |spec| - spec.name = "fmt" -- spec.version = "11.0.2" -+ spec.version = "12.1.0" - spec.license = { :type => "MIT" } - spec.homepage = "https://github.com/fmtlib/fmt" - spec.summary = "{fmt} is an open-source formatting library for C++. It can be used as a safe and fast alternative to (s)printf and iostreams." - spec.authors = "The fmt contributors" - spec.source = { - :git => fmt_git_url, -- :tag => "11.0.2" -+ :tag => "12.1.0" - } - spec.pod_target_xcconfig = { - "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard(), diff --git a/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch b/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch new file mode 100644 index 00000000..0546888c --- /dev/null +++ b/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch @@ -0,0 +1,14 @@ +diff --git a/scripts/cocoapods/new_architecture.rb b/scripts/cocoapods/new_architecture.rb +index 3873632a7d7b88832b7e5058415734ab0a43679a..6c0683f5044903224245241afaa8369ca7711f66 100644 +--- a/scripts/cocoapods/new_architecture.rb ++++ b/scripts/cocoapods/new_architecture.rb +@@ -171,8 +171,7 @@ class NewArchitectureHelper + excluded_info_plist = ["/Pods", "Tests", "metainternal", ".bundle", "build/", "DerivedData/", ".xcframework", ".framework", "watchkitapp", "today-extention"] + projectPaths.each do |projectPath| + projectFolderPath = File.dirname(projectPath) +- infoPlistFiles = `find #{projectFolderPath} -name "Info.plist"` +- infoPlistFiles = infoPlistFiles.split("\n").map { |f| f.strip } ++ infoPlistFiles = Dir.glob(File.join(projectFolderPath, "**", "Info.plist")) + + infoPlistFiles.each do |infoPlistFile| + # If infoPlistFile contains Pods or tests, skip it diff --git a/CHANGELOG.md b/CHANGELOG.md index bd255b1c..aaadc48f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,17 @@ All notable changes to this project will be documented in this file. +## [Unreleased] + +## [3.0.89] - 2026-08-25 + +### Bug Fixes +- **background-thread (iOS)**: Initialize secondary runtimes through Expo's React Native factory when Expo is present, while preserving the plain React Native fallback. + +### Chores +- Upgrade the development and example app baseline to React Native 0.86.2 and React 19.2.3, with a minimum iOS deployment target of 16.4. +- Bump all publishable packages to 3.0.89. + ## [3.0.88] - 2026-08-25 ### Bug Fixes diff --git a/example/react-native/android/app/build.gradle b/example/react-native/android/app/build.gradle index 162c612b..30827707 100644 --- a/example/react-native/android/app/build.gradle +++ b/example/react-native/android/app/build.gradle @@ -8,7 +8,7 @@ apply plugin: "com.facebook.react" */ react { reactNativeDir = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile() - hermesCommand = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/sdks/hermesc/%OS-BIN%/hermesc" + hermesCommand = new File(["node", "--print", "require.resolve('hermes-compiler/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/hermesc/%OS-BIN%/hermesc" codegenDir = new File(["node", "--print", "require.resolve('@react-native/codegen/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile() enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean() /* Folders */ diff --git a/example/react-native/ios/Podfile b/example/react-native/ios/Podfile index 3b73561b..48db9b2e 100644 --- a/example/react-native/ios/Podfile +++ b/example/react-native/ios/Podfile @@ -12,9 +12,8 @@ require Pod::Executable.execute_command('node', ['-p', {paths: [process.argv[1]]}, )', __dir__]).strip -# Raised to 15.5 to match the OneKey app (app-monorepo) and to satisfy -# SSZipArchive >= 2.5.4 (the zip-slip CVE fix), which requires iOS 15.5. -platform :ios, '15.5' +# Match the OneKey app's minimum deployment target for the RN 0.86 upgrade. +platform :ios, '16.4' prepare_react_native_project! linkage = ENV['USE_FRAMEWORKS'] diff --git a/example/react-native/ios/Podfile.lock b/example/react-native/ios/Podfile.lock index c2c15c72..b901372b 100644 --- a/example/react-native/ios/Podfile.lock +++ b/example/react-native/ios/Podfile.lock @@ -1,16 +1,10 @@ PODS: - AesCrypto (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -25,20 +19,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - AsyncStorage (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -53,22 +41,16 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - AutoSizeInput (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - NitroModules - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-callinvoker - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -83,20 +65,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - BackgroundThread (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -111,24 +87,17 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - ReactNativeNativeLogger - - SocketRocket - Yoga - - boost (1.84.0) - ChartWebview (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - NitroModules - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-callinvoker - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -143,21 +112,15 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - ReactNativeNativeLogger - - SocketRocket - Yoga - CloudFs (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -172,22 +135,16 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - CloudKitModule (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - NitroModules - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-callinvoker - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -202,24 +159,18 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - ReactNativeNativeLogger - - SocketRocket - Yoga - CocoaLumberjack/Core (3.9.1) - CocoaLumberjack/Swift (3.9.1): - CocoaLumberjack/Core - DnsLookup (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -234,33 +185,23 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - DoubleConversion (1.1.6) - EMASCurl (1.5.5): - EMASCurl/HTTP2 (= 1.5.5) - EMASCurl/HTTP2 (1.5.5) - - fast_float (8.0.0) - - FBLazyVector (0.83.0) - - fmt (12.1.0) - - glog (0.3.5) - - hermes-engine (0.14.0): - - hermes-engine/Pre-built (= 0.14.0) - - hermes-engine/Pre-built (0.14.0) + - FBLazyVector (0.86.2) + - hermes-engine (250829098.0.16): + - hermes-engine/Pre-built (= 250829098.0.16) + - hermes-engine/Pre-built (250829098.0.16) - KeychainModule (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - NitroModules - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-callinvoker - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -275,24 +216,18 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - ReactNativeNativeLogger - - SocketRocket - Yoga - MMKV (2.4.0): - MMKVCore (~> 2.4.0) - MMKVCore (2.4.0) - NetworkInfo (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -307,23 +242,17 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - NitroMmkv (4.3.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - MMKVCore (= 2.4.0) - NitroModules - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-callinvoker - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -338,21 +267,15 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - NitroModules (0.36.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-callinvoker - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -367,20 +290,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - Pbkdf2 (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -395,22 +312,16 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - PerpDepthBar (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - NitroModules - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-callinvoker - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -425,20 +336,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - Ping (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -453,61 +358,36 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - RCT-Folly (2024.11.18.00): - - boost - - DoubleConversion - - fast_float (= 8.0.0) - - fmt (= 12.1.0) - - glog - - RCT-Folly/Default (= 2024.11.18.00) - - RCT-Folly/Default (2024.11.18.00): - - boost - - DoubleConversion - - fast_float (= 8.0.0) - - fmt (= 12.1.0) - - glog - - RCT-Folly/Fabric (2024.11.18.00): - - boost - - DoubleConversion - - fast_float (= 8.0.0) - - fmt (= 12.1.0) - - glog - - RCTDeprecation (0.83.0) - - RCTRequired (0.83.0) - - RCTSwiftUI (0.83.0) - - RCTSwiftUIWrapper (0.83.0): + - RCTDeprecation (0.86.2) + - RCTRequired (0.86.2) + - RCTSwiftUI (0.86.2) + - RCTSwiftUIWrapper (0.86.2): - RCTSwiftUI - - RCTTypeSafety (0.83.0): - - FBLazyVector (= 0.83.0) - - RCTRequired (= 0.83.0) - - React-Core (= 0.83.0) - - React (0.83.0): - - React-Core (= 0.83.0) - - React-Core/DevSupport (= 0.83.0) - - React-Core/RCTWebSocket (= 0.83.0) - - React-RCTActionSheet (= 0.83.0) - - React-RCTAnimation (= 0.83.0) - - React-RCTBlob (= 0.83.0) - - React-RCTImage (= 0.83.0) - - React-RCTLinking (= 0.83.0) - - React-RCTNetwork (= 0.83.0) - - React-RCTSettings (= 0.83.0) - - React-RCTText (= 0.83.0) - - React-RCTVibration (= 0.83.0) - - React-callinvoker (0.83.0) - - React-Core (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - RCTTypeSafety (0.86.2): + - FBLazyVector (= 0.86.2) + - RCTRequired (= 0.86.2) + - React-Core (= 0.86.2) + - React (0.86.2): + - React-Core (= 0.86.2) + - React-Core/DevSupport (= 0.86.2) + - React-Core/RCTWebSocket (= 0.86.2) + - React-RCTActionSheet (= 0.86.2) + - React-RCTAnimation (= 0.86.2) + - React-RCTBlob (= 0.86.2) + - React-RCTImage (= 0.86.2) + - React-RCTLinking (= 0.86.2) + - React-RCTNetwork (= 0.86.2) + - React-RCTSettings (= 0.86.2) + - React-RCTText (= 0.86.2) + - React-RCTVibration (= 0.86.2) + - React-callinvoker (0.86.2) + - React-Core (0.86.2): + - hermes-engine - RCTDeprecation - - React-Core/Default (= 0.83.0) + - React-Core-prebuilt + - React-Core/Default (= 0.86.2) - React-cxxreact - React-featureflags - React-hermes @@ -520,18 +400,14 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Core/CoreModulesHeaders (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt (0.86.2): + - ReactNativeDependencies + - React-Core/CoreModulesHeaders (0.86.2): + - hermes-engine - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -545,18 +421,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Core/Default (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core/Default (0.86.2): + - hermes-engine - RCTDeprecation + - React-Core-prebuilt - React-cxxreact - React-featureflags - React-hermes @@ -569,20 +439,14 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Core/DevSupport (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core/DevSupport (0.86.2): + - hermes-engine - RCTDeprecation - - React-Core/Default (= 0.83.0) - - React-Core/RCTWebSocket (= 0.83.0) + - React-Core-prebuilt + - React-Core/Default (= 0.86.2) + - React-Core/RCTWebSocket (= 0.86.2) - React-cxxreact - React-featureflags - React-hermes @@ -595,18 +459,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Core/RCTActionSheetHeaders (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core/RCTActionSheetHeaders (0.86.2): + - hermes-engine - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -620,18 +478,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Core/RCTAnimationHeaders (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core/RCTAnimationHeaders (0.86.2): + - hermes-engine - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -645,18 +497,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Core/RCTBlobHeaders (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core/RCTBlobHeaders (0.86.2): + - hermes-engine - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -670,18 +516,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Core/RCTImageHeaders (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core/RCTImageHeaders (0.86.2): + - hermes-engine - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -695,18 +535,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Core/RCTLinkingHeaders (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core/RCTLinkingHeaders (0.86.2): + - hermes-engine - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -720,18 +554,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Core/RCTNetworkHeaders (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core/RCTNetworkHeaders (0.86.2): + - hermes-engine - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -745,18 +573,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Core/RCTSettingsHeaders (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core/RCTSettingsHeaders (0.86.2): + - hermes-engine - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -770,18 +592,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Core/RCTTextHeaders (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core/RCTTextHeaders (0.86.2): + - hermes-engine - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -795,18 +611,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Core/RCTVibrationHeaders (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core/RCTVibrationHeaders (0.86.2): + - hermes-engine - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -820,19 +630,13 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Core/RCTWebSocket (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core/RCTWebSocket (0.86.2): + - hermes-engine - RCTDeprecation - - React-Core/Default (= 0.83.0) + - React-Core-prebuilt + - React-Core/Default (= 0.86.2) - React-cxxreact - React-featureflags - React-hermes @@ -845,63 +649,49 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-CoreModules (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - RCTTypeSafety (= 0.83.0) - - React-Core/CoreModulesHeaders (= 0.83.0) + - React-CoreModules (0.86.2): + - RCTTypeSafety (= 0.86.2) + - React-Core-prebuilt + - React-Core/CoreModulesHeaders (= 0.86.2) - React-debug - - React-jsi (= 0.83.0) + - React-featureflags + - React-jsi (= 0.86.2) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-NativeModulesApple - React-RCTBlob - React-RCTFBReactNativeSpec - - React-RCTImage (= 0.83.0) + - React-RCTImage (= 0.86.2) - React-runtimeexecutor - React-utils - ReactCommon - - SocketRocket - - React-cxxreact (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker (= 0.83.0) - - React-debug (= 0.83.0) - - React-jsi (= 0.83.0) + - ReactNativeDependencies + - React-cxxreact (0.86.2): + - hermes-engine + - React-callinvoker (= 0.86.2) + - React-Core-prebuilt + - React-debug (= 0.86.2) + - React-jsi (= 0.86.2) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-logger (= 0.83.0) - - React-perflogger (= 0.83.0) + - React-logger (= 0.86.2) + - React-perflogger (= 0.86.2) - React-runtimeexecutor - - React-timing (= 0.83.0) + - React-timing (= 0.86.2) - React-utils - - SocketRocket - - React-debug (0.83.0) - - React-defaultsnativemodule (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-debug (0.86.2): + - React-debug/redbox (= 0.86.2) + - React-debug/redbox (0.86.2) + - React-defaultsnativemodule (0.86.2): + - hermes-engine + - React-Core-prebuilt - React-domnativemodule + - React-Fabric/animated - React-featureflags - React-featureflagsnativemodule - React-idlecallbacksnativemodule @@ -909,19 +699,15 @@ PODS: - React-jsi - React-jsiexecutor - React-microtasksnativemodule + - React-mutationobservernativemodule - React-RCTFBReactNativeSpec + - React-viewtransitionnativemodule - React-webperformancenativemodule - - SocketRocket + - ReactNativeDependencies - Yoga - - React-domnativemodule (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-domnativemodule (0.86.2): + - hermes-engine + - React-Core-prebuilt - React-Fabric - React-Fabric/bridging - React-FabricComponents @@ -931,41 +717,35 @@ PODS: - React-RCTFBReactNativeSpec - React-runtimeexecutor - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Fabric (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Fabric (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - - React-Fabric/animated (= 0.83.0) - - React-Fabric/animationbackend (= 0.83.0) - - React-Fabric/animations (= 0.83.0) - - React-Fabric/attributedstring (= 0.83.0) - - React-Fabric/bridging (= 0.83.0) - - React-Fabric/componentregistry (= 0.83.0) - - React-Fabric/componentregistrynative (= 0.83.0) - - React-Fabric/components (= 0.83.0) - - React-Fabric/consistency (= 0.83.0) - - React-Fabric/core (= 0.83.0) - - React-Fabric/dom (= 0.83.0) - - React-Fabric/imagemanager (= 0.83.0) - - React-Fabric/leakchecker (= 0.83.0) - - React-Fabric/mounting (= 0.83.0) - - React-Fabric/observers (= 0.83.0) - - React-Fabric/scheduler (= 0.83.0) - - React-Fabric/telemetry (= 0.83.0) - - React-Fabric/templateprocessor (= 0.83.0) - - React-Fabric/uimanager (= 0.83.0) + - React-Fabric/animated (= 0.86.2) + - React-Fabric/animationbackend (= 0.86.2) + - React-Fabric/animations (= 0.86.2) + - React-Fabric/attributedstring (= 0.86.2) + - React-Fabric/bridging (= 0.86.2) + - React-Fabric/componentregistry (= 0.86.2) + - React-Fabric/componentregistrynative (= 0.86.2) + - React-Fabric/components (= 0.86.2) + - React-Fabric/consistency (= 0.86.2) + - React-Fabric/core (= 0.86.2) + - React-Fabric/dom (= 0.86.2) + - React-Fabric/imagemanager (= 0.86.2) + - React-Fabric/leakchecker (= 0.86.2) + - React-Fabric/mounting (= 0.86.2) + - React-Fabric/observers (= 0.86.2) + - React-Fabric/scheduler (= 0.86.2) + - React-Fabric/telemetry (= 0.86.2) + - React-Fabric/uimanager (= 0.86.2) + - React-Fabric/viewtransition (= 0.86.2) - React-featureflags - React-graphics - React-jsi @@ -976,21 +756,16 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/animated (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-Fabric/animated (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug + - React-Fabric/animationbackend - React-featureflags - React-graphics - React-jsi @@ -1001,19 +776,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/animationbackend (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-Fabric/animationbackend (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1026,19 +795,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/animations (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-Fabric/animations (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1051,19 +814,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/attributedstring (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-Fabric/attributedstring (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1076,19 +833,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/bridging (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-Fabric/bridging (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1101,19 +852,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/componentregistry (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-Fabric/componentregistry (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1126,19 +871,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/componentregistrynative (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-Fabric/componentregistrynative (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1151,25 +890,19 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/components (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-Fabric/components (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.83.0) - - React-Fabric/components/root (= 0.83.0) - - React-Fabric/components/scrollview (= 0.83.0) - - React-Fabric/components/view (= 0.83.0) + - React-Fabric/components/legacyviewmanagerinterop (= 0.86.2) + - React-Fabric/components/root (= 0.86.2) + - React-Fabric/components/scrollview (= 0.86.2) + - React-Fabric/components/view (= 0.86.2) - React-featureflags - React-graphics - React-jsi @@ -1180,19 +913,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/components/legacyviewmanagerinterop (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-Fabric/components/legacyviewmanagerinterop (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1205,19 +932,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/components/root (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-Fabric/components/root (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1230,19 +951,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/components/scrollview (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-Fabric/components/scrollview (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1255,19 +970,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/components/view (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-Fabric/components/view (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1281,20 +990,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-Fabric/consistency (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Fabric/consistency (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1307,19 +1010,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/core (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-Fabric/core (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1332,19 +1029,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/dom (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-Fabric/dom (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1357,19 +1048,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/imagemanager (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-Fabric/imagemanager (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1382,19 +1067,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/leakchecker (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-Fabric/leakchecker (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1407,48 +1086,38 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/mounting (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-Fabric/mounting (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags - React-graphics - React-jsi - React-jsiexecutor + - React-jsinspectortracing - React-logger - React-rendererdebug - React-runtimeexecutor - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/observers (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-Fabric/observers (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - - React-Fabric/observers/events (= 0.83.0) - - React-Fabric/observers/intersection (= 0.83.0) + - React-Fabric/observers/events (= 0.86.2) + - React-Fabric/observers/intersection (= 0.86.2) + - React-Fabric/observers/mutation (= 0.86.2) - React-featureflags - React-graphics - React-jsi @@ -1459,19 +1128,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/observers/events (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-Fabric/observers/events (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1484,19 +1147,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/observers/intersection (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-Fabric/observers/intersection (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1509,72 +1166,56 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/scheduler (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-Fabric/observers/mutation (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - - React-Fabric/observers/events - React-featureflags - React-graphics - React-jsi - React-jsiexecutor - React-logger - - React-performancecdpmetrics - - React-performancetimeline - React-rendererdebug - React-runtimeexecutor - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/telemetry (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-Fabric/scheduler (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug + - React-Fabric/animationbackend + - React-Fabric/observers/events + - React-Fabric/viewtransition - React-featureflags - React-graphics - React-jsi - React-jsiexecutor - React-logger + - React-performancecdpmetrics + - React-performancetimeline - React-rendererdebug - React-runtimeexecutor - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/templateprocessor (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-Fabric/telemetry (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1587,22 +1228,16 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/uimanager (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-Fabric/uimanager (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - - React-Fabric/uimanager/consistency (= 0.83.0) + - React-Fabric/uimanager/consistency (= 0.86.2) - React-featureflags - React-graphics - React-jsi @@ -1614,19 +1249,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/uimanager/consistency (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-Fabric/uimanager/consistency (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1640,63 +1269,37 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - React-FabricComponents (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-Fabric/viewtransition (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - - React-Fabric - - React-FabricComponents/components (= 0.83.0) - - React-FabricComponents/textlayoutmanager (= 0.83.0) - React-featureflags - React-graphics - React-jsi - React-jsiexecutor - React-logger - - React-RCTFBReactNativeSpec - React-rendererdebug + - React-runtimeexecutor - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-FabricComponents (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.83.0) - - React-FabricComponents/components/iostextinput (= 0.83.0) - - React-FabricComponents/components/modal (= 0.83.0) - - React-FabricComponents/components/rncore (= 0.83.0) - - React-FabricComponents/components/safeareaview (= 0.83.0) - - React-FabricComponents/components/scrollview (= 0.83.0) - - React-FabricComponents/components/switch (= 0.83.0) - - React-FabricComponents/components/text (= 0.83.0) - - React-FabricComponents/components/textinput (= 0.83.0) - - React-FabricComponents/components/unimplementedview (= 0.83.0) - - React-FabricComponents/components/virtualview (= 0.83.0) - - React-FabricComponents/components/virtualviewexperimental (= 0.83.0) + - React-FabricComponents/components (= 0.86.2) + - React-FabricComponents/textlayoutmanager (= 0.86.2) - React-featureflags - React-graphics - React-jsi @@ -1707,23 +1310,28 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-FabricComponents/components/inputaccessory (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-FabricComponents/components (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric + - React-FabricComponents/components/inputaccessory (= 0.86.2) + - React-FabricComponents/components/iostextinput (= 0.86.2) + - React-FabricComponents/components/modal (= 0.86.2) + - React-FabricComponents/components/rncore (= 0.86.2) + - React-FabricComponents/components/safeareaview (= 0.86.2) + - React-FabricComponents/components/scrollview (= 0.86.2) + - React-FabricComponents/components/switch (= 0.86.2) + - React-FabricComponents/components/text (= 0.86.2) + - React-FabricComponents/components/textinput (= 0.86.2) + - React-FabricComponents/components/unimplementedview (= 0.86.2) + - React-FabricComponents/components/virtualview (= 0.86.2) - React-featureflags - React-graphics - React-jsi @@ -1734,20 +1342,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-FabricComponents/components/iostextinput (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-FabricComponents/components/inputaccessory (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1761,20 +1363,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-FabricComponents/components/modal (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-FabricComponents/components/iostextinput (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1788,20 +1384,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-FabricComponents/components/rncore (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-FabricComponents/components/modal (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1815,20 +1405,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-FabricComponents/components/safeareaview (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-FabricComponents/components/rncore (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1842,20 +1426,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-FabricComponents/components/scrollview (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-FabricComponents/components/safeareaview (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1869,20 +1447,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-FabricComponents/components/switch (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-FabricComponents/components/scrollview (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1896,20 +1468,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-FabricComponents/components/text (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-FabricComponents/components/switch (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1923,20 +1489,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-FabricComponents/components/textinput (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-FabricComponents/components/text (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1950,20 +1510,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-FabricComponents/components/unimplementedview (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-FabricComponents/components/textinput (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1977,20 +1531,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-FabricComponents/components/virtualview (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-FabricComponents/components/unimplementedview (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -2004,20 +1552,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-FabricComponents/components/virtualviewexperimental (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-FabricComponents/components/virtualview (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -2031,20 +1573,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-FabricComponents/textlayoutmanager (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-FabricComponents/textlayoutmanager (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -2058,127 +1594,82 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-FabricImage (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired (= 0.83.0) - - RCTTypeSafety (= 0.83.0) + - React-FabricImage (0.86.2): + - hermes-engine + - RCTRequired (= 0.86.2) + - RCTTypeSafety (= 0.86.2) + - React-Core-prebuilt - React-Fabric - React-featureflags - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.83.0) + - React-jsiexecutor (= 0.86.2) - React-logger - React-rendererdebug - React-utils - ReactCommon - - SocketRocket + - ReactNativeDependencies - Yoga - - React-featureflags (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket - - React-featureflagsnativemodule (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-featureflags (0.86.2): + - React-Core-prebuilt + - ReactNativeDependencies + - React-featureflagsnativemodule (0.86.2): + - hermes-engine + - React-Core-prebuilt - React-featureflags - React-jsi - React-jsiexecutor - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - - SocketRocket - - React-graphics (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-graphics (0.86.2): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt + - React-featureflags - React-jsi - React-jsiexecutor + - React-rendererdebug - React-utils - - SocketRocket - - React-hermes (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-cxxreact (= 0.83.0) - - React-jsi - - React-jsiexecutor (= 0.83.0) + - ReactNativeDependencies + - React-hermes (0.86.2): + - hermes-engine + - React-Core-prebuilt + - React-cxxreact (= 0.86.2) + - React-jsi + - React-jsiexecutor (= 0.86.2) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing + - React-jsitooling - React-oscompat - - React-perflogger (= 0.83.0) + - React-perflogger (= 0.86.2) - React-runtimeexecutor - - SocketRocket - - React-idlecallbacksnativemodule (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-idlecallbacksnativemodule (0.86.2): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-jsi - React-jsiexecutor - React-RCTFBReactNativeSpec - React-runtimeexecutor - React-runtimescheduler - ReactCommon/turbomodule/core - - SocketRocket - - React-ImageManager (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-ImageManager (0.86.2): + - React-Core-prebuilt - React-Core/Default - React-debug - React-Fabric - React-graphics - React-rendererdebug - React-utils - - SocketRocket - - React-intersectionobservernativemodule (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-intersectionobservernativemodule (0.86.2): + - hermes-engine + - React-Core-prebuilt - React-cxxreact - React-Fabric - React-Fabric/bridging @@ -2189,168 +1680,115 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-jserrorhandler (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-jserrorhandler (0.86.2): + - hermes-engine + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags - React-jsi - ReactCommon/turbomodule/bridging - - SocketRocket - - React-jsi (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket - - React-jsiexecutor (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-jsi (0.86.2): + - hermes-engine + - React-Core-prebuilt + - ReactNativeDependencies + - React-jsiexecutor (0.86.2): + - hermes-engine + - React-Core-prebuilt - React-cxxreact - React-debug + - React-jserrorhandler - React-jsi - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing + - React-jsitooling - React-perflogger - React-runtimeexecutor - React-utils - - SocketRocket - - React-jsinspector (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-jsinspector (0.86.2): + - hermes-engine + - React-Core-prebuilt - React-featureflags - React-jsi - React-jsinspectorcdp - React-jsinspectornetwork - React-jsinspectortracing - React-oscompat - - React-perflogger (= 0.83.0) + - React-perflogger (= 0.86.2) - React-runtimeexecutor - React-utils - - SocketRocket - - React-jsinspectorcdp (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket - - React-jsinspectornetwork (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-jsinspectorcdp (0.86.2): + - React-Core-prebuilt + - ReactNativeDependencies + - React-jsinspectornetwork (0.86.2): + - React-Core-prebuilt - React-jsinspectorcdp - - SocketRocket - - React-jsinspectortracing (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-jsinspectortracing (0.86.2): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-jsi - React-jsinspectornetwork - React-oscompat - React-timing - - SocketRocket - - React-jsitooling (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-cxxreact (= 0.83.0) + - React-utils + - ReactNativeDependencies + - React-jsitooling (0.86.2): + - hermes-engine + - React-Core-prebuilt + - React-cxxreact (= 0.86.2) - React-debug - - React-jsi (= 0.83.0) + - React-jsi (= 0.86.2) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-runtimeexecutor - React-utils - - SocketRocket - - React-jsitracing (0.83.0): - - React-jsi - - React-logger (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket - - React-Mapbuffer (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-jsitracing (0.86.2): + - React-jsi + - React-logger (0.86.2): + - React-Core-prebuilt + - ReactNativeDependencies + - React-Mapbuffer (0.86.2): + - React-Core-prebuilt - React-debug - - SocketRocket - - React-microtasksnativemodule (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog + - ReactNativeDependencies + - React-microtasksnativemodule (0.86.2): + - hermes-engine + - React-Core-prebuilt + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - ReactCommon/turbomodule/core + - ReactNativeDependencies + - React-mutationobservernativemodule (0.86.2): - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt + - React-cxxreact + - React-Fabric + - React-Fabric/bridging + - React-Fabric/observers/mutation + - React-featureflags - React-jsi - React-jsiexecutor - React-RCTFBReactNativeSpec + - React-runtimeexecutor - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies + - Yoga - react-native-pager-view (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2365,20 +1803,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - react-native-safe-area-context (5.6.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2395,20 +1827,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - react-native-safe-area-context/common (5.6.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2423,20 +1849,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - react-native-safe-area-context/fabric (5.6.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2452,20 +1872,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - react-native-tab-view (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2481,20 +1895,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - react-native-tab-view/common (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2509,19 +1917,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - React-NativeModulesApple (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-NativeModulesApple (0.86.2): + - hermes-engine - React-callinvoker - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -2531,88 +1933,53 @@ PODS: - React-runtimeexecutor - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket - - React-networking (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-featureflags + - ReactNativeDependencies + - React-networking (0.86.2): + - React-Core-prebuilt - React-jsinspectornetwork - React-jsinspectortracing - React-performancetimeline - React-timing - - SocketRocket - - React-oscompat (0.83.0) - - React-perflogger (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket - - React-performancecdpmetrics (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-oscompat (0.86.2) + - React-perflogger (0.86.2): + - React-Core-prebuilt + - ReactNativeDependencies + - React-performancecdpmetrics (0.86.2): + - hermes-engine + - React-Core-prebuilt - React-jsi - React-performancetimeline - React-runtimeexecutor - React-timing - - SocketRocket - - React-performancetimeline (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-performancetimeline (0.86.2): + - React-Core-prebuilt - React-featureflags + - React-jsinspector - React-jsinspectortracing - React-perflogger - React-timing - - SocketRocket - - React-RCTActionSheet (0.83.0): - - React-Core/RCTActionSheetHeaders (= 0.83.0) - - React-RCTAnimation (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-RCTActionSheet (0.86.2): + - React-Core/RCTActionSheetHeaders (= 0.86.2) + - React-RCTAnimation (0.86.2): - RCTTypeSafety + - React-Core-prebuilt - React-Core/RCTAnimationHeaders + - React-debug - React-featureflags - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - SocketRocket - - React-RCTAppDelegate (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-RCTAppDelegate (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-CoreModules - React-debug - React-defaultsnativemodule @@ -2634,16 +2001,10 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon - - SocketRocket - - React-RCTBlob (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-RCTBlob (0.86.2): + - hermes-engine + - React-Core-prebuilt - React-Core/RCTBlobHeaders - React-Core/RCTWebSocket - React-jsi @@ -2653,18 +2014,12 @@ PODS: - React-RCTFBReactNativeSpec - React-RCTNetwork - ReactCommon - - SocketRocket - - React-RCTFabric (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-RCTFabric (0.86.2): + - hermes-engine - RCTSwiftUIWrapper - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-FabricComponents @@ -2689,37 +2044,25 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - - React-RCTFBReactNativeSpec (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-RCTFBReactNativeSpec (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-jsi - React-NativeModulesApple - - React-RCTFBReactNativeSpec/components (= 0.83.0) + - React-RCTFBReactNativeSpec/components (= 0.86.2) - ReactCommon - - SocketRocket - - React-RCTFBReactNativeSpec/components (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-RCTFBReactNativeSpec/components (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2729,40 +2072,28 @@ PODS: - React-rendererdebug - React-utils - ReactCommon - - SocketRocket + - ReactNativeDependencies - Yoga - - React-RCTImage (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - React-RCTImage (0.86.2): - RCTTypeSafety + - React-Core-prebuilt - React-Core/RCTImageHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - React-RCTNetwork - ReactCommon - - SocketRocket - - React-RCTLinking (0.83.0): - - React-Core/RCTLinkingHeaders (= 0.83.0) - - React-jsi (= 0.83.0) + - ReactNativeDependencies + - React-RCTLinking (0.86.2): + - React-Core/RCTLinkingHeaders (= 0.86.2) + - React-jsi (= 0.86.2) - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - ReactCommon/turbomodule/core (= 0.83.0) - - React-RCTNetwork (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - ReactCommon/turbomodule/core (= 0.86.2) + - React-RCTNetwork (0.86.2): - RCTTypeSafety + - React-Core-prebuilt - React-Core/RCTNetworkHeaders - React-debug - React-featureflags @@ -2773,17 +2104,11 @@ PODS: - React-networking - React-RCTFBReactNativeSpec - ReactCommon - - SocketRocket - - React-RCTRuntime (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-RCTRuntime (0.86.2): + - hermes-engine - React-Core + - React-Core-prebuilt - React-debug - React-jsi - React-jsinspector @@ -2795,63 +2120,39 @@ PODS: - React-runtimeexecutor - React-RuntimeHermes - React-utils - - SocketRocket - - React-RCTSettings (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-RCTSettings (0.86.2): - RCTTypeSafety + - React-Core-prebuilt - React-Core/RCTSettingsHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - SocketRocket - - React-RCTText (0.83.0): - - React-Core/RCTTextHeaders (= 0.83.0) + - ReactNativeDependencies + - React-RCTText (0.86.2): + - React-Core/RCTTextHeaders (= 0.86.2) - Yoga - - React-RCTVibration (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - React-RCTVibration (0.86.2): + - React-Core-prebuilt - React-Core/RCTVibrationHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - SocketRocket - - React-rendererconsistency (0.83.0) - - React-renderercss (0.83.0): + - ReactNativeDependencies + - React-rendererconsistency (0.86.2) + - React-renderercss (0.86.2): - React-debug - React-utils - - React-rendererdebug (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - React-rendererdebug (0.86.2): + - React-Core-prebuilt - React-debug - - SocketRocket - - React-RuntimeApple (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-RuntimeApple (0.86.2): + - hermes-engine - React-callinvoker + - React-Core-prebuilt - React-Core/Default - React-CoreModules - React-cxxreact @@ -2870,16 +2171,10 @@ PODS: - React-RuntimeHermes - React-runtimescheduler - React-utils - - SocketRocket - - React-RuntimeCore (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-RuntimeCore (0.86.2): + - hermes-engine + - React-Core-prebuilt - React-cxxreact - React-Fabric - React-featureflags @@ -2892,29 +2187,17 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket - - React-runtimeexecutor (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-runtimeexecutor (0.86.2): + - React-Core-prebuilt - React-debug - React-featureflags - - React-jsi (= 0.83.0) + - React-jsi (= 0.86.2) - React-utils - - SocketRocket - - React-RuntimeHermes (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-RuntimeHermes (0.86.2): + - hermes-engine + - React-Core-prebuilt - React-featureflags - React-hermes - React-jsi @@ -2926,17 +2209,11 @@ PODS: - React-RuntimeCore - React-runtimeexecutor - React-utils - - SocketRocket - - React-runtimescheduler (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactNativeDependencies + - React-runtimescheduler (0.86.2): + - hermes-engine - React-callinvoker + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -2948,30 +2225,30 @@ PODS: - React-runtimeexecutor - React-timing - React-utils - - SocketRocket - - React-timing (0.83.0): + - ReactNativeDependencies + - React-timing (0.86.2): - React-debug - - React-utils (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-utils (0.86.2): + - hermes-engine + - React-Core-prebuilt - React-debug - - React-jsi (= 0.83.0) - - SocketRocket - - React-webperformancenativemodule (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-jsi (= 0.86.2) + - ReactNativeDependencies + - React-viewtransitionnativemodule (0.86.2): + - hermes-engine + - React-Core-prebuilt + - React-Fabric + - React-Fabric/bridging + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - React-runtimeexecutor + - ReactCommon/turbomodule/core + - ReactNativeDependencies + - Yoga + - React-webperformancenativemodule (0.86.2): + - hermes-engine + - React-Core-prebuilt - React-cxxreact - React-jsi - React-jsiexecutor @@ -2979,21 +2256,15 @@ PODS: - React-RCTFBReactNativeSpec - React-runtimeexecutor - ReactCommon/turbomodule/core - - SocketRocket - - ReactAppDependencyProvider (0.83.0): + - ReactNativeDependencies + - ReactAppDependencyProvider (0.86.2): - ReactCodegen - - ReactCodegen (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - ReactCodegen (0.86.2): + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-FabricImage @@ -3007,81 +2278,51 @@ PODS: - React-utils - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket - - ReactCommon (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - ReactCommon/turbomodule (= 0.83.0) - - SocketRocket - - ReactCommon/turbomodule (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker (= 0.83.0) - - React-cxxreact (= 0.83.0) - - React-jsi (= 0.83.0) - - React-logger (= 0.83.0) - - React-perflogger (= 0.83.0) - - ReactCommon/turbomodule/bridging (= 0.83.0) - - ReactCommon/turbomodule/core (= 0.83.0) - - SocketRocket - - ReactCommon/turbomodule/bridging (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker (= 0.83.0) - - React-cxxreact (= 0.83.0) - - React-jsi (= 0.83.0) - - React-logger (= 0.83.0) - - React-perflogger (= 0.83.0) - - SocketRocket - - ReactCommon/turbomodule/core (0.83.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker (= 0.83.0) - - React-cxxreact (= 0.83.0) - - React-debug (= 0.83.0) - - React-featureflags (= 0.83.0) - - React-jsi (= 0.83.0) - - React-logger (= 0.83.0) - - React-perflogger (= 0.83.0) - - React-utils (= 0.83.0) - - SocketRocket + - ReactNativeDependencies + - ReactCommon (0.86.2): + - React-Core-prebuilt + - ReactCommon/turbomodule (= 0.86.2) + - ReactNativeDependencies + - ReactCommon/turbomodule (0.86.2): + - hermes-engine + - React-callinvoker (= 0.86.2) + - React-Core-prebuilt + - React-cxxreact (= 0.86.2) + - React-jsi (= 0.86.2) + - React-logger (= 0.86.2) + - React-perflogger (= 0.86.2) + - ReactCommon/turbomodule/bridging (= 0.86.2) + - ReactCommon/turbomodule/core (= 0.86.2) + - ReactNativeDependencies + - ReactCommon/turbomodule/bridging (0.86.2): + - hermes-engine + - React-callinvoker (= 0.86.2) + - React-Core-prebuilt + - React-cxxreact (= 0.86.2) + - React-jsi (= 0.86.2) + - React-logger (= 0.86.2) + - React-perflogger (= 0.86.2) + - ReactNativeDependencies + - ReactCommon/turbomodule/core (0.86.2): + - hermes-engine + - React-callinvoker (= 0.86.2) + - React-Core-prebuilt + - React-cxxreact (= 0.86.2) + - React-debug (= 0.86.2) + - React-featureflags (= 0.86.2) + - React-jsi (= 0.86.2) + - React-logger (= 0.86.2) + - React-perflogger (= 0.86.2) + - React-utils (= 0.86.2) + - ReactNativeDependencies - ReactNativeAppUpdate (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - NitroModules - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-callinvoker - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3096,23 +2337,17 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - ReactNativeNativeLogger - - SocketRocket - Yoga - ReactNativeBundleCrypto (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - NitroModules - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-callinvoker - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3127,24 +2362,18 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - ReactNativeNativeLogger - - SocketRocket - Yoga - ReactNativeBundleUpdate (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - MMKV (= 2.4.0) - NitroModules - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-callinvoker - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3160,25 +2389,19 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - ReactNativeBundleCrypto + - ReactNativeDependencies - ReactNativeNativeLogger - ReactNativeRangeDownloader - - SocketRocket - SSZipArchive (>= 2.5.4) - Yoga - ReactNativeCheckBiometricAuthChanged (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - NitroModules - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-callinvoker - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3193,23 +2416,18 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - ReactNativeNativeLogger - - SocketRocket - Yoga + - ReactNativeDependencies (0.86.2) - ReactNativeDeviceUtils (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - NitroModules - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-callinvoker - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3224,23 +2442,17 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - ReactNativeNativeLogger - - SocketRocket - Yoga - ReactNativeGetRandomValues (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - NitroModules - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-callinvoker - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3255,21 +2467,15 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - ReactNativeNativeLogger - - SocketRocket - Yoga - ReactNativeLiteCard (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3284,24 +2490,18 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - ReactNativeNativeLogger - - SocketRocket - Yoga - ReactNativeNativeLogger (3.0.88): - - boost - CocoaLumberjack/Swift (~> 3.8) - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - NitroModules - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-callinvoker - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3316,22 +2516,16 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - ReactNativePerfMemory (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - NitroModules - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-callinvoker - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3346,23 +2540,17 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - ReactNativeNativeLogger - - SocketRocket - Yoga - ReactNativePerfStats (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - NitroModules - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-callinvoker - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3377,23 +2565,17 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - ReactNativeNativeLogger - - SocketRocket - Yoga - ReactNativeRangeDownloader (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - NitroModules - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-callinvoker - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3408,24 +2590,18 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - ReactNativeNativeLogger - - SocketRocket - SSZipArchive (= 2.5.5) - Yoga - ReactNativeSplashScreen (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - NitroModules - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-callinvoker - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3440,22 +2616,16 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - ReactNativeNativeLogger - - SocketRocket - Yoga - ReactNativeZipArchive (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - NitroModules - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3470,21 +2640,15 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - SSZipArchive (>= 2.5.4) - Yoga - RNScreens (4.24.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3500,21 +2664,15 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - RNScreens/common (= 4.24.0) - - SocketRocket - Yoga - RNScreens/common (4.24.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3530,22 +2688,16 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - ScrollGuard (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - NitroModules - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-callinvoker - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3560,22 +2712,16 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - SegmentSlider (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - NitroModules - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-callinvoker - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3590,22 +2736,16 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - Skeleton (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - NitroModules - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-callinvoker - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3620,22 +2760,16 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - SniConnect (3.0.88): - - boost - - DoubleConversion - EMASCurl (= 1.5.5) - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-callinvoker - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3650,21 +2784,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - - SocketRocket (0.7.1) - SplitBundleLoader (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3679,22 +2806,16 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - ReactNativeNativeLogger - - SocketRocket - Yoga - SSZipArchive (2.5.5) - TcpSocket (3.0.88): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3709,7 +2830,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - Yoga (0.0.0) @@ -3718,17 +2839,12 @@ DEPENDENCIES: - "AsyncStorage (from `../../../node_modules/@onekeyfe/react-native-async-storage`)" - "AutoSizeInput (from `../../../node_modules/@onekeyfe/react-native-auto-size-input`)" - "BackgroundThread (from `../../../node_modules/@onekeyfe/react-native-background-thread`)" - - boost (from `../../../node_modules/react-native/third-party-podspecs/boost.podspec`) - "ChartWebview (from `../../../node_modules/@onekeyfe/react-native-chart-webview`)" - "CloudFs (from `../../../node_modules/@onekeyfe/react-native-cloud-fs`)" - "CloudKitModule (from `../../../node_modules/@onekeyfe/react-native-cloud-kit-module`)" - "DnsLookup (from `../../../node_modules/@onekeyfe/react-native-dns-lookup`)" - - DoubleConversion (from `../../../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) - EMASCurl - - fast_float (from `../../../node_modules/react-native/third-party-podspecs/fast_float.podspec`) - FBLazyVector (from `../../../node_modules/react-native/Libraries/FBLazyVector`) - - fmt (from `../../../node_modules/react-native/third-party-podspecs/fmt.podspec`) - - glog (from `../../../node_modules/react-native/third-party-podspecs/glog.podspec`) - hermes-engine (from `../../../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) - "KeychainModule (from `../../../node_modules/@onekeyfe/react-native-keychain-module`)" - "NetworkInfo (from `../../../node_modules/@onekeyfe/react-native-network-info`)" @@ -3737,7 +2853,6 @@ DEPENDENCIES: - "Pbkdf2 (from `../../../node_modules/@onekeyfe/react-native-pbkdf2`)" - "PerpDepthBar (from `../../../node_modules/@onekeyfe/react-native-perp-depth-bar`)" - "Ping (from `../../../node_modules/@onekeyfe/react-native-ping`)" - - RCT-Folly (from `../../../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - RCTDeprecation (from `../../../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) - RCTRequired (from `../../../node_modules/react-native/Libraries/Required`) - RCTSwiftUI (from `../../../node_modules/react-native/ReactApple/RCTSwiftUI`) @@ -3746,6 +2861,7 @@ DEPENDENCIES: - React (from `../../../node_modules/react-native/`) - React-callinvoker (from `../../../node_modules/react-native/ReactCommon/callinvoker`) - React-Core (from `../../../node_modules/react-native/`) + - React-Core-prebuilt (from `../../../node_modules/react-native/React-Core-prebuilt.podspec`) - React-Core/RCTWebSocket (from `../../../node_modules/react-native/`) - React-CoreModules (from `../../../node_modules/react-native/React/CoreModules`) - React-cxxreact (from `../../../node_modules/react-native/ReactCommon/cxxreact`) @@ -3774,6 +2890,7 @@ DEPENDENCIES: - React-logger (from `../../../node_modules/react-native/ReactCommon/logger`) - React-Mapbuffer (from `../../../node_modules/react-native/ReactCommon`) - React-microtasksnativemodule (from `../../../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`) + - React-mutationobservernativemodule (from `../../../node_modules/react-native/ReactCommon/react/nativemodule/mutationobserver`) - "react-native-pager-view (from `../../../node_modules/@onekeyfe/react-native-pager-view`)" - react-native-safe-area-context (from `../../../node_modules/react-native-safe-area-context`) - "react-native-tab-view (from `../../../node_modules/@onekeyfe/react-native-tab-view`)" @@ -3806,6 +2923,7 @@ DEPENDENCIES: - React-runtimescheduler (from `../../../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) - React-timing (from `../../../node_modules/react-native/ReactCommon/react/timing`) - React-utils (from `../../../node_modules/react-native/ReactCommon/react/utils`) + - React-viewtransitionnativemodule (from `../../../node_modules/react-native/ReactCommon/react/nativemodule/viewtransition`) - React-webperformancenativemodule (from `../../../node_modules/react-native/ReactCommon/react/nativemodule/webperformance`) - ReactAppDependencyProvider (from `build/generated/ios/ReactAppDependencyProvider`) - ReactCodegen (from `build/generated/ios/ReactCodegen`) @@ -3814,6 +2932,7 @@ DEPENDENCIES: - "ReactNativeBundleCrypto (from `../../../node_modules/@onekeyfe/react-native-bundle-crypto`)" - "ReactNativeBundleUpdate (from `../../../node_modules/@onekeyfe/react-native-bundle-update`)" - "ReactNativeCheckBiometricAuthChanged (from `../../../node_modules/@onekeyfe/react-native-check-biometric-auth-changed`)" + - ReactNativeDependencies (from `../../../node_modules/react-native/third-party-podspecs/ReactNativeDependencies.podspec`) - "ReactNativeDeviceUtils (from `../../../node_modules/@onekeyfe/react-native-device-utils`)" - "ReactNativeGetRandomValues (from `../../../node_modules/@onekeyfe/react-native-get-random-values`)" - "ReactNativeLiteCard (from `../../../node_modules/@onekeyfe/react-native-lite-card`)" @@ -3828,7 +2947,6 @@ DEPENDENCIES: - "SegmentSlider (from `../../../node_modules/@onekeyfe/react-native-segment-slider`)" - "Skeleton (from `../../../node_modules/@onekeyfe/react-native-skeleton`)" - "SniConnect (from `../../../node_modules/@onekeyfe/react-native-sni-connect`)" - - SocketRocket (~> 0.7.1) - "SplitBundleLoader (from `../../../node_modules/@onekeyfe/react-native-split-bundle-loader`)" - "TcpSocket (from `../../../node_modules/@onekeyfe/react-native-tcp-socket`)" - Yoga (from `../../../node_modules/react-native/ReactCommon/yoga`) @@ -3841,8 +2959,6 @@ SPEC REPOS: - MMKV - MMKVCore - SSZipArchive - trunk: - - SocketRocket EXTERNAL SOURCES: AesCrypto: @@ -3853,8 +2969,6 @@ EXTERNAL SOURCES: :path: "../../../node_modules/@onekeyfe/react-native-auto-size-input" BackgroundThread: :path: "../../../node_modules/@onekeyfe/react-native-background-thread" - boost: - :podspec: "../../../node_modules/react-native/third-party-podspecs/boost.podspec" ChartWebview: :path: "../../../node_modules/@onekeyfe/react-native-chart-webview" CloudFs: @@ -3863,19 +2977,11 @@ EXTERNAL SOURCES: :path: "../../../node_modules/@onekeyfe/react-native-cloud-kit-module" DnsLookup: :path: "../../../node_modules/@onekeyfe/react-native-dns-lookup" - DoubleConversion: - :podspec: "../../../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" - fast_float: - :podspec: "../../../node_modules/react-native/third-party-podspecs/fast_float.podspec" FBLazyVector: :path: "../../../node_modules/react-native/Libraries/FBLazyVector" - fmt: - :podspec: "../../../node_modules/react-native/third-party-podspecs/fmt.podspec" - glog: - :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-v0.14.0 + :tag: hermes-v250829098.0.16 KeychainModule: :path: "../../../node_modules/@onekeyfe/react-native-keychain-module" NetworkInfo: @@ -3890,8 +2996,6 @@ EXTERNAL SOURCES: :path: "../../../node_modules/@onekeyfe/react-native-perp-depth-bar" Ping: :path: "../../../node_modules/@onekeyfe/react-native-ping" - RCT-Folly: - :podspec: "../../../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" RCTDeprecation: :path: "../../../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation" RCTRequired: @@ -3908,6 +3012,8 @@ EXTERNAL SOURCES: :path: "../../../node_modules/react-native/ReactCommon/callinvoker" React-Core: :path: "../../../node_modules/react-native/" + React-Core-prebuilt: + :podspec: "../../../node_modules/react-native/React-Core-prebuilt.podspec" React-CoreModules: :path: "../../../node_modules/react-native/React/CoreModules" React-cxxreact: @@ -3962,6 +3068,8 @@ EXTERNAL SOURCES: :path: "../../../node_modules/react-native/ReactCommon" React-microtasksnativemodule: :path: "../../../node_modules/react-native/ReactCommon/react/nativemodule/microtasks" + React-mutationobservernativemodule: + :path: "../../../node_modules/react-native/ReactCommon/react/nativemodule/mutationobserver" react-native-pager-view: :path: "../../../node_modules/@onekeyfe/react-native-pager-view" react-native-safe-area-context: @@ -4026,6 +3134,8 @@ EXTERNAL SOURCES: :path: "../../../node_modules/react-native/ReactCommon/react/timing" React-utils: :path: "../../../node_modules/react-native/ReactCommon/react/utils" + React-viewtransitionnativemodule: + :path: "../../../node_modules/react-native/ReactCommon/react/nativemodule/viewtransition" React-webperformancenativemodule: :path: "../../../node_modules/react-native/ReactCommon/react/nativemodule/webperformance" ReactAppDependencyProvider: @@ -4042,6 +3152,8 @@ EXTERNAL SOURCES: :path: "../../../node_modules/@onekeyfe/react-native-bundle-update" ReactNativeCheckBiometricAuthChanged: :path: "../../../node_modules/@onekeyfe/react-native-check-biometric-auth-changed" + ReactNativeDependencies: + :podspec: "../../../node_modules/react-native/third-party-podspecs/ReactNativeDependencies.podspec" ReactNativeDeviceUtils: :path: "../../../node_modules/@onekeyfe/react-native-device-utils" ReactNativeGetRandomValues: @@ -4078,128 +3190,125 @@ EXTERNAL SOURCES: :path: "../../../node_modules/react-native/ReactCommon/yoga" SPEC CHECKSUMS: - AesCrypto: cb4ec597a15e7eb5c723aaef8974dcb07f483b12 - AsyncStorage: 8e96a2b3d619c89de3cde8308dc40585ca8c48fe - AutoSizeInput: 82b2b1cc40952ed30efaffcd9fddbd5acf7b3f67 - BackgroundThread: e5b19f216f36ee8e0ab2f1485de499d40329e426 - boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 - ChartWebview: 454e78bb994913699dccbaeba16323065d267bb7 - CloudFs: 31776e777642b192b25c494768ff35dd0220dc50 - CloudKitModule: d3ad84e0e1e5b57f666ad9e71222634efe3f0c7f + AesCrypto: 7e4ba5fa9ec30800ae5d0f3dbebbc1c1cfab658d + AsyncStorage: e3614e1d739fb86369c040cd60990584ba7724b9 + AutoSizeInput: f9343c08a53433de91afe2d8c6b6883ad2de5fae + BackgroundThread: 7f0e140c485557b987c5c49a32ccaa8d6e323e4b + ChartWebview: 496dc64a359a0d5be1008dd19f13e68d8ae0f1c5 + CloudFs: bdc641b149c29fe96b59260762c43e4ced42cab7 + CloudKitModule: 9e16e17cc22f4873fa9b2f26a5018a3d6f1297ad CocoaLumberjack: e4ba3b414dfca8c1916c6303d37f63b3a95134c6 - DnsLookup: d3641304749c67f90806b689982bee81052b061a - DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb + DnsLookup: b8d141563770b6c4f939c87d39a9c8d3211612c5 EMASCurl: d75387e1ce9dec1a75cd25cb33c7a7e7bf21997f - fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 - FBLazyVector: a293a88992c4c33f0aee184acab0b64a08ff9458 - fmt: 530618a01105dae0fa3a2f27c81ae11fa8f67eac - glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 - hermes-engine: 1cce3d70a3d2052d5fc6751fdbf4e0649c710867 - KeychainModule: f5b50cb53c18381347913bf9ecdab9e5678092b5 + FBLazyVector: 3c3be9a019176b5699455f7f66c5444b78a411c6 + hermes-engine: 31834dd8ee77c3307d4754540214d2588c428241 + KeychainModule: 2aae17da3ad379ab3c3b97ba9c21a7c654cbd82a MMKV: 86859fdfa2b0b21db1fd6e48788474a6416a2c77 MMKVCore: 3d16ce9f7d411e135020915fde98a056859a1efa - NetworkInfo: 3ae1a9f4dcc71d6361ac8f2f2a6cc8dfd1bfb7c0 - NitroMmkv: 975be1948fd74280e6febcda06671d7bf604a4cd - NitroModules: ab089a25876d6510138cc21fbf2e36e872f7d607 - Pbkdf2: b1171da3e742ebd02501a8db757862e51e7c7d16 - PerpDepthBar: 80b4d40ccce5edb46032de7afa0f2951dcf8b451 - Ping: 670d4f222bced4e2c37be167a309c079a2a192a9 - RCT-Folly: b29feb752b08042c62badaef7d453f3bb5e6ae23 - RCTDeprecation: 2b70c6e3abe00396cefd8913efbf6a2db01a2b36 - RCTRequired: f3540eee8094231581d40c5c6d41b0f170237a81 - RCTSwiftUI: 5928f7ca7e9e2f1a82d85d4c79ea3065137ad81c - RCTSwiftUIWrapper: 8ff2f9da84b47db66d11ece1589d8e5515c0ab8b - RCTTypeSafety: 6359ff3fcbe18c52059f4d4ce301e47f9da5f0d5 - React: f6f8fc5c01e77349cdfaf49102bcb928ac31d8ed - React-callinvoker: 032b6d1d03654b9fb7de9e2b3b978d3cb1a893ad - React-Core: 418c9278f8a071b44a88a87be9a4943234cc2e77 - React-CoreModules: 925b8cb677649f967f6000f9b1ef74dc4ff60c30 - React-cxxreact: 21f6f0cb2a7d26fbed4d09e04482e5c75662beaf - React-debug: 8fc21f2fecd3d6244e988dc55d60cb117d122588 - React-defaultsnativemodule: 05c6115a2d3a7f4a2cc3f96022261570700dbfa5 - React-domnativemodule: f19d7fd59facf19a4e6cb75bf48357c329acaea7 - React-Fabric: 94acdbc0b889bdcec2d5b1a90ae48f1032c5a5a1 - React-FabricComponents: 9754fb783979b88fb82ed3d0c50ae5f5d775a86f - React-FabricImage: d8f5bcb5006eafc0e2262c11bf4dedaa610fd66c - React-featureflags: 8bd4abaf8adf3cf5cc115f128e8761fd3d95b848 - React-featureflagsnativemodule: 0062ca1dc92cb5aae22df8aed4e8f261759cb3bd - React-graphics: 318048b8f98e040c093adcb77ffeb46d78961c30 - React-hermes: 05ca52f53557a31b8ef8bac8f94c3f9db1ff00ed - React-idlecallbacksnativemodule: d3c5ba0150555ce9b7db85008aeb170a02bbf2d8 - React-ImageManager: 225b19fcb16fd353851d664c344025a6d4d79870 - React-intersectionobservernativemodule: d490ebd28572754dfdad4a8d0771573345b1ec92 - React-jserrorhandler: caafb9c1d42c24422829e71e8178de3dd1c7ea12 - React-jsi: 749de748ad3b760011255326c63bf7b7dd6f8f9d - React-jsiexecutor: 02a5ee45bffcae98197eaa253fbf13b65c95073d - React-jsinspector: 4a031b0605009d4bcd079c99df85eb55d142cd12 - React-jsinspectorcdp: 6d25166ec876053b7b6e290eb57f41a9f9496846 - React-jsinspectornetwork: 5c481d208eade7a338f545b2645a2cf134fdf265 - React-jsinspectortracing: b4d2404ecd64a0dd65e2746d9867fbc3a7cd0927 - React-jsitooling: e0d93e78a5a231e4089459ddbed8d4844be9e238 - React-jsitracing: f3c4aae144b86799e9e23eb5ef16bae6b474d4e2 - React-logger: 9e597cbeda7b8cc8aa8fb93860dade97190f69cc - React-Mapbuffer: 20046c0447efaa7aace0b76085aa9bb35b0e8105 - React-microtasksnativemodule: 0e837de56519c92d8a2e3097717df9497feb33cb - react-native-pager-view: f32a590a76c303c9da2e80b6d9f77d87abe10ce1 - react-native-safe-area-context: c00143b4823773bba23f2f19f85663ae89ceb460 - react-native-tab-view: 3414a57b6d155d2993d2880d8e8fb62e4e8d55bf - React-NativeModulesApple: 1a378198515f8e825c5931a7613e98da69320cee - React-networking: bfd1695ada5a57023006ce05823ac5391c3ce072 - React-oscompat: aedc0afbded67280de6bb6bfac8cfde0389e2b33 - React-perflogger: c174462de00c0b7d768f0b2d61b8e2240717a667 - React-performancecdpmetrics: 2607a034407d55049f1820b7ec86db1efd3d22e1 - React-performancetimeline: 6ebdcdf745dbe372508ad7164e732362e7eeae6f - React-RCTActionSheet: 175c74d343e92793d3187b3a819d565f534e0b1d - React-RCTAnimation: d67919cddb7da39c949b8010b4fd4ea39815fe4e - React-RCTAppDelegate: 5f7b1e4b7ee5a44faf5f9518a7d3cabafb801adf - React-RCTBlob: 7ceb93e0918511163f036cfd295973f132a2bc57 - React-RCTFabric: f2250d34e1143c659b845af7e369b3f8f015950c - React-RCTFBReactNativeSpec: b0fc0c9c8adaf8b9183f9e9fb5455ca5deedc7a0 - React-RCTImage: d6297035168312fc3089f8ca0ee7a75216f21715 - React-RCTLinking: 619a2553c4ef83acaccfb551ada1b7d45cf1cce3 - React-RCTNetwork: 7df41788a194dc5b628f58db6a765224b6b37eac - React-RCTRuntime: f75ec08d991c611f1d74154dfeb852e30b1825dd - React-RCTSettings: fa7882ce3d73f1e3482fe05f9cb3167a35a60869 - React-RCTText: 4d659598d9b7730343d465c43d97b3f4aad13938 - React-RCTVibration: 968c3184bfe5005bedd86c913a3b52438222e3a4 - React-rendererconsistency: 1204c62facf6168b69bc5022e0020f19c92f138e - React-renderercss: 36c02a3c55402fdb06226c2ef04d82fc06c4e2fc - React-rendererdebug: 11b54233498d961d939d2f2ec6c640d44efa3c12 - React-RuntimeApple: 5287d92680f4b08c8e882afe9791a41eab69d4a7 - React-RuntimeCore: 402b658d8e9cefb44824624e39a0804f2237e205 - React-runtimeexecutor: a1ce75c4e153ede11be957ef31bb72eef9cc4daf - React-RuntimeHermes: c987b19a1284c685062d3eaad79fd9300a3aa82f - React-runtimescheduler: a12722da46f562626f5897edf9b8fa02219de065 - React-timing: a453a65192dbe400d61d299024e95a302e726661 - React-utils: 43479e74f806f6633ee04c212c48811530041170 - React-webperformancenativemodule: bd1ad71ea9e217e55f66233e99d02581ee3d5cb7 - ReactAppDependencyProvider: ebcf3a78dc1bcdf054c9e8d309244bade6b31568 - ReactCodegen: 554b421c45b7df35ac791da1b734335470b55fcc - ReactCommon: 424cc34cf5055d69a3dcf02f3436481afb8b0f6f - ReactNativeAppUpdate: cc2fd3cbc82ea9c30f300a35e015e81f59c46312 - ReactNativeBundleCrypto: ea60fb24ee6a5d637a09c37f71897c377841d5c8 - ReactNativeBundleUpdate: 63eae09acacd098921ea552c4ee6501f80081546 - ReactNativeCheckBiometricAuthChanged: 57b10edea2b9fbfd8e9d7cec4b0da3a912153180 - ReactNativeDeviceUtils: f1cc409788fb4c051e575722388de5ae0972cc19 - ReactNativeGetRandomValues: e31b2060624eed66630ac7096ed51e520c8bf7a1 - ReactNativeLiteCard: df83f511578181268ea2b9022707beafe971de17 - ReactNativeNativeLogger: dafba54e0ffca3dcdf22c4a6743a14fae2c775e8 - ReactNativePerfMemory: babb788dfec4ab5813f24b99091b6e9f65ed96a8 - ReactNativePerfStats: 5115ab27cda5f294385a8741a950afc3faf9ce41 - ReactNativeRangeDownloader: 82fce060b7aac507e2dbca60302e457d356db183 - ReactNativeSplashScreen: 99e64fcb2cc68c79312c4c9ff20086e9504d03b0 - ReactNativeZipArchive: 006659d2ed3af6116776a3b72b95047d57ac63ea - RNScreens: 7f643ee0fd1407dc5085c7795460bd93da113b8f - ScrollGuard: fc420757c5939857ca5f1befff1f3107b277c0e3 - SegmentSlider: da63e0e377204a53de198b7eb3da968658ac6a50 - Skeleton: def8d256b9cea2b67ddc4afa841629027f1de92b - SniConnect: c83b685659294a11425a971253f2e70020ec52e2 - SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - SplitBundleLoader: 155685fc0c78b0f38929c2a09b560116bd8f0d07 + NetworkInfo: 10b749059fe49525922063f1c2e4f367e06a9ebb + NitroMmkv: 85a251e15c39d7c95fe58cf40786fa126b8d143c + NitroModules: 452230d9b63c6c3f59dd97eeaa27ec3449271d4a + Pbkdf2: 584767e680c62f2217b6376597879165fac27533 + PerpDepthBar: cd4776fd879aca5d4173376506f358d220b1cf32 + Ping: 4a7bb24ff877aa7c50a33e45a0c1cfcb7a41bd94 + RCTDeprecation: bccb6545c26db881ecddfd83a3f9ea82aba1605f + RCTRequired: b2f74764d596fc0051f00fee94b49bf41a6f7f5a + RCTSwiftUI: c6d6a31b849b9dfa64c33b55dc91ac15dd55774c + RCTSwiftUIWrapper: bdff268d65d662a79b1e571e841e1512275f9319 + RCTTypeSafety: 159e394bdab42023fbdd8fa022dfdc5577a8b9ad + React: 4b2532a459d15e1adf6c22d3e399e5c85a94220f + React-callinvoker: 0b8ce4057e02a0bd15cf0532596e8eb8c0392e92 + React-Core: 5af045531a540ba3f65f07de1e3f585ddfb27948 + React-Core-prebuilt: 405cf395d66cf694faf9aed3483a21b5515cec85 + React-CoreModules: 99b194a721de84ccfc1be149a0de52647dc38c0e + React-cxxreact: b7e8e254074fd8111d147202b391ccf7816946a6 + React-debug: 6bc17013f4dc724c23c91e1c83220251d1eacee6 + React-defaultsnativemodule: aec0c526e254a5ce43c79fecb83123f4aecd4199 + React-domnativemodule: edd8f47d850a7d3fae0626b624a669e8a9e40f21 + React-Fabric: a3b0ce70506ac2e737b9cd6667877382f2ee2f29 + React-FabricComponents: 18bf172f8dc2308cb93c539713a3ac778192e225 + React-FabricImage: 260ea6794cb5d08aacc0f591110bbf66dfc3ed80 + React-featureflags: 828f711206ab1a3aa0ec40f39d9f7f793352489d + React-featureflagsnativemodule: cc62b7be20aa1e76efde77550dbc34db8556d604 + React-graphics: 9a9fa8dd605d210a43d88e7d4c78bfff544b09ad + React-hermes: 6fd579ceeb680830fc508697acdd5e8cd8dbf29f + React-idlecallbacksnativemodule: af59e31212470464d6e6fda0f6cc7e5c413b5d29 + React-ImageManager: 5c97e7ce5c37335c0392f629daba4c2143f0be2f + React-intersectionobservernativemodule: ea5682b04b6cff32fe57d5f0f530f07c33a55b34 + React-jserrorhandler: baa4284f642fd0cbcf7664860abe7e18e54d05de + React-jsi: 7b14065a285f91b3dbe5448371ff575bbb523d59 + React-jsiexecutor: 10b4ba40ec9fd571370dfee20251201f57712e79 + React-jsinspector: ec4602cc56d9ec4c7789017a51a639052d4642e0 + React-jsinspectorcdp: 46a17a5e80e4c84e734ba9cbc8fe4efaa496722a + React-jsinspectornetwork: a6743d072cb0e383de2b9bc7ddc4c824e617c681 + React-jsinspectortracing: 24b2dd80722ef691af02d4aa6a1e32e1f61d9bfb + React-jsitooling: e483e01f15f2b11d8f5317372de762deaff4dcd9 + React-jsitracing: db1285e61be69980443ca27e4f8dea36f8a3b906 + React-logger: 35ab012027cc552057f7ca5d031c6721f896e6bc + React-Mapbuffer: 44dd007f917e2396afa0e70bbd70273237d93fde + React-microtasksnativemodule: f413ee411341fb3c34d20e85e9f6f524921fab15 + React-mutationobservernativemodule: 58f6d2adf7d98e72b241608dfa2ddce414d2a4e7 + react-native-pager-view: 281e9aa4a780488b3d55a3ea71218d74e06d7a87 + react-native-safe-area-context: 91a90d98c310adcc90a511e5aeb6046d7c19d885 + react-native-tab-view: fb46d9d2d12a5c48b40b75468f30fe41feb9520e + React-NativeModulesApple: 167e532fb9bae30f3c66636b8ee0092bab263667 + React-networking: 89f6b69755a3176f30e56ba1ba8e214b1518ecfb + React-oscompat: db6675ddaef3bddd1b41533627f3d26ec710c05f + React-perflogger: c34660c72849d23319f5e544c97e6c6ed687b186 + React-performancecdpmetrics: 13ce0ca13d32007b7369f295c81bfad6316514bc + React-performancetimeline: b68271d5199dc356a80b661bb05622f5ed6777fb + React-RCTActionSheet: 7d18777c531c516ab9f86342583057b15fb7fd7d + React-RCTAnimation: f2505067d2d83268f5619192f8f5ff14b2606c7f + React-RCTAppDelegate: 7bfa4d752f45a0b9195b8da0f188f8904806a86f + React-RCTBlob: 7b4d25eca2a6ecd83766d76790879774b73b4cd5 + React-RCTFabric: a225895f3fd2b11f2c44b13229f2d99065eedda1 + React-RCTFBReactNativeSpec: cb15356d207d325e689eca0c7b15d737aac8c6dc + React-RCTImage: 9123b010921479b5bcd3771a4a4d4e788227a427 + React-RCTLinking: 358d42629d7012c5d75060fd3e25023b72ebae31 + React-RCTNetwork: 32f5274abd61e937bdcbfd85810ae784d3f0e38a + React-RCTRuntime: b11ef93babc2be36f5e10835d246e0e623f6570b + React-RCTSettings: 86aa6e6a3a335d989e3fcd1bd98b9ea6331adfa9 + React-RCTText: 59376611225f3c6fdc75d57571d7c345bdd0be1e + React-RCTVibration: 3c7d17d3373c114220be9ac3b99df1646009b8fe + React-rendererconsistency: c9a2d2351407696ccbefdeb53b4aee109c4cb008 + React-renderercss: 883aebdf574736450571800eeb3edbc804385c76 + React-rendererdebug: fc1e330efedfd4dfe4fd7d75736f9a219dae196f + React-RuntimeApple: f099a47224222ddfc7ddaffdd9aa2ac47a216ee0 + React-RuntimeCore: e91b17661cc543f4a241e69b3f038182d7db8fd6 + React-runtimeexecutor: d27e321bd8e04d4737bc8924473a25defb33a031 + React-RuntimeHermes: 760a0793748cb12b4dd11f323bd516668b7e3b99 + React-runtimescheduler: df1c84ed1a5b78a1a7953d3e86db6163c4542906 + React-timing: 791690a2daa7b13554060f6836c260c8bc311a98 + React-utils: 13f4f227561d2660201dee5cbea253c07d8b5d3a + React-viewtransitionnativemodule: 93335dacae2dd7db207320f384111c2b4c58fca8 + React-webperformancenativemodule: 0bed183d6447493571431c031ad2401c027b5866 + ReactAppDependencyProvider: 0e13d430eadac8a2ef18515a860d5c59df05b475 + ReactCodegen: 01cbf7a08c30e8b71ad71489bb56b5bed195fa5e + ReactCommon: 9002f006f571256348994183f7d4387aa7cf84e8 + ReactNativeAppUpdate: f81ddc98db8382816a9ce4f765d352755304cf04 + ReactNativeBundleCrypto: 88c7edbd223b239fea6e64ff169a17d35db7d5e4 + ReactNativeBundleUpdate: 624355f6114471bf3594aaa513fa2e5161a83013 + ReactNativeCheckBiometricAuthChanged: b0ab1b1e448b8f21ced7942883695fef71869900 + ReactNativeDependencies: 2bd6854ade79bf1b60586d1ab7813a389df1b6bf + ReactNativeDeviceUtils: df93ed20e645113d7bacc34d538fe32ff7000bfb + ReactNativeGetRandomValues: a2e902e4bcf04ce75eceb5bdd3dee162f2725df8 + ReactNativeLiteCard: 6846f62b04f63f01fc31157b4dd47b744732284e + ReactNativeNativeLogger: 99ed6997faacec24fa989a1df37999cd68d7fbd3 + ReactNativePerfMemory: 5fe6aac5156839b6c80512b776c41c8bed17ca61 + ReactNativePerfStats: 9d3e6995b49463785b6b9ae5ef5526112172cd32 + ReactNativeRangeDownloader: 9f32e682e27bf9d05d612aeba147f5d640469d91 + ReactNativeSplashScreen: b06e051ca85c9a0a7e00c658068a77c8358d698a + ReactNativeZipArchive: dbfcc648711e57e80b6c12660aad3193a79f8491 + RNScreens: 01b065ded2dfe7987bcce770ff3a196be417ff41 + ScrollGuard: 6e33f819eb40dcad82551765012ca4da570099d0 + SegmentSlider: 892e75dd16a317549d3bd337422965acc3995c1d + Skeleton: 6f1831ad12bbbe4cab89849977cdfecaa3d28e23 + SniConnect: bfa8d743e7b5385d0289a14f720c768c7607dfa6 + SplitBundleLoader: 6853b8b8ca6dbda79b33f71960cb39c97eac2aae SSZipArchive: c69881e8ac5521f0e622291387add5f60f30f3c4 - TcpSocket: 860b949aa9ca1ac7a84966970f03d8653def109c - Yoga: 6ca93c8c13f56baeec55eb608577619b17a4d64e + TcpSocket: ee26d485fd6386c8f71e1a97b74ae875cf19765d + Yoga: 9891cfb1c680f64de9c41b09e7453dea33454d2b -PODFILE CHECKSUM: 7dbc28b8923a22b4d9fcd35e5fe10389c4fccc09 +PODFILE CHECKSUM: 3be463caa9ed361a5e4482d8655995f4766ac0d4 COCOAPODS: 1.16.2 diff --git a/example/react-native/ios/example.xcodeproj/project.pbxproj b/example/react-native/ios/example.xcodeproj/project.pbxproj index e6705ee6..474902b1 100644 --- a/example/react-native/ios/example.xcodeproj/project.pbxproj +++ b/example/react-native/ios/example.xcodeproj/project.pbxproj @@ -295,7 +295,7 @@ CURRENT_PROJECT_VERSION = 1; ENABLE_BITCODE = NO; INFOPLIST_FILE = example/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.5; + IPHONEOS_DEPLOYMENT_TARGET = 16.4; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -325,7 +325,7 @@ CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; INFOPLIST_FILE = example/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.5; + IPHONEOS_DEPLOYMENT_TARGET = 16.4; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -393,7 +393,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.5; + IPHONEOS_DEPLOYMENT_TARGET = 16.4; LD_RUNPATH_SEARCH_PATHS = ( /usr/lib/swift, "$(inherited)", @@ -405,7 +405,10 @@ ); MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = "$(inherited)"; + OTHER_CFLAGS = ( + "$(inherited)", + "-DRCT_REMOVE_LEGACY_ARCH=1", + ); OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-DFOLLY_NO_CONFIG", @@ -413,10 +416,13 @@ "-DFOLLY_USE_LIBCPP=1", "-DFOLLY_CFG_NO_COROUTINES=1", "-DFOLLY_HAVE_CLOCK_GETTIME=1", + "-DRCT_REMOVE_LEGACY_ARCH=1", ); + PODFILE_DIR = "$(SRCROOT)"; REACT_NATIVE_PATH = "${PODS_ROOT}/../../../../node_modules/react-native"; SDKROOT = iphoneos; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; + SWIFT_ENABLE_EXPLICIT_MODULES = NO; USE_HERMES = true; }; name = Debug; @@ -463,7 +469,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.5; + IPHONEOS_DEPLOYMENT_TARGET = 16.4; LD_RUNPATH_SEARCH_PATHS = ( /usr/lib/swift, "$(inherited)", @@ -474,7 +480,10 @@ "\"$(inherited)\"", ); MTL_ENABLE_DEBUG_INFO = NO; - OTHER_CFLAGS = "$(inherited)"; + OTHER_CFLAGS = ( + "$(inherited)", + "-DRCT_REMOVE_LEGACY_ARCH=1", + ); OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-DFOLLY_NO_CONFIG", @@ -482,9 +491,12 @@ "-DFOLLY_USE_LIBCPP=1", "-DFOLLY_CFG_NO_COROUTINES=1", "-DFOLLY_HAVE_CLOCK_GETTIME=1", + "-DRCT_REMOVE_LEGACY_ARCH=1", ); + PODFILE_DIR = "$(SRCROOT)"; REACT_NATIVE_PATH = "${PODS_ROOT}/../../../../node_modules/react-native"; SDKROOT = iphoneos; + SWIFT_ENABLE_EXPLICIT_MODULES = NO; USE_HERMES = true; VALIDATE_PRODUCT = YES; }; diff --git a/example/react-native/package.json b/example/react-native/package.json index 557568c9..efa52c05 100644 --- a/example/react-native/package.json +++ b/example/react-native/package.json @@ -45,12 +45,12 @@ "@onekeyfe/react-native-tab-view": "workspace:*", "@onekeyfe/react-native-tcp-socket": "workspace:*", "@onekeyfe/react-native-zip-archive": "workspace:*", - "@react-native/new-app-screen": "0.83.0", + "@react-native/new-app-screen": "0.86.2", "@react-navigation/native": "^7.1.33", "@react-navigation/native-stack": "^7.14.4", "fast-base64-decode": "*", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-mmkv": "4.3.2", "react-native-safe-area-context": "^5.5.2", "react-native-screens": "^4.24.0" @@ -59,13 +59,14 @@ "@babel/core": "^7.25.2", "@babel/preset-env": "^7.25.3", "@babel/runtime": "^7.25.0", - "@react-native-community/cli": "20.0.0", - "@react-native-community/cli-platform-android": "20.0.0", - "@react-native-community/cli-platform-ios": "20.0.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", - "@react-native/metro-config": "0.83.0", - "@react-native/typescript-config": "0.83.0", + "@react-native-community/cli": "20.1.0", + "@react-native-community/cli-platform-android": "20.1.0", + "@react-native-community/cli-platform-ios": "20.1.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", + "@react-native/jest-preset": "0.86.2", + "@react-native/metro-config": "0.86.2", + "@react-native/typescript-config": "0.86.2", "@types/jest": "^29.5.13", "@types/react": "^19.2.0", "@types/react-test-renderer": "^19.1.0", @@ -73,7 +74,7 @@ "jest": "^29.6.3", "prettier": "2.8.8", "react-native-nitro-modules": "0.36.5", - "react-test-renderer": "19.2.0", + "react-test-renderer": "19.2.3", "typescript": "^5.8.3" }, "engines": { diff --git a/native-modules/native-logger/package.json b/native-modules/native-logger/package.json index 3966eb48..de6f0764 100644 --- a/native-modules/native-logger/package.json +++ b/native-modules/native-logger/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-native-logger", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-native-logger", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -66,8 +66,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -80,8 +80,8 @@ "lefthook": "^2.0.3", "nitrogen": "0.36.5", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.13", "react-native-nitro-modules": "0.36.5", "release-it": "^19.0.4", diff --git a/native-modules/react-native-aes-crypto/package.json b/native-modules/react-native-aes-crypto/package.json index 7d46c101..ed35fe89 100644 --- a/native-modules/react-native-aes-crypto/package.json +++ b/native-modules/react-native-aes-crypto/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-aes-crypto", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-aes-crypto", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -56,8 +56,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -69,8 +69,8 @@ "jest": "^29.7.0", "lefthook": "^2.0.3", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.17", "release-it": "^19.0.4", "turbo": "^2.5.6", diff --git a/native-modules/react-native-app-update/package.json b/native-modules/react-native-app-update/package.json index 8b9fae57..92e447c0 100644 --- a/native-modules/react-native-app-update/package.json +++ b/native-modules/react-native-app-update/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-app-update", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-app-update", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -66,8 +66,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -80,8 +80,8 @@ "lefthook": "^2.0.3", "nitrogen": "0.36.5", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.13", "react-native-nitro-modules": "0.36.5", "release-it": "^19.0.4", diff --git a/native-modules/react-native-async-storage/package.json b/native-modules/react-native-async-storage/package.json index e8ffa2d7..9a0e3aac 100644 --- a/native-modules/react-native-async-storage/package.json +++ b/native-modules/react-native-async-storage/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-async-storage", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-async-storage", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -62,8 +62,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -75,8 +75,8 @@ "jest": "^29.7.0", "lefthook": "^2.0.3", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.17", "release-it": "^19.0.4", "turbo": "^2.5.6", diff --git a/native-modules/react-native-background-thread/ios/BackgroundThreadManager.mm b/native-modules/react-native-background-thread/ios/BackgroundThreadManager.mm index 1c9fd826..08000379 100644 --- a/native-modules/react-native-background-thread/ios/BackgroundThreadManager.mm +++ b/native-modules/react-native-background-thread/ios/BackgroundThreadManager.mm @@ -44,6 +44,19 @@ explicit BgMgrNSDataJSIBuffer(NSData *data) : data_(data) {} } // namespace +static RCTReactNativeFactory *CreateBackgroundReactNativeFactory( + id delegate) { + Class expoFactoryClass = NSClassFromString(@"EXReactNativeFactory"); + if (expoFactoryClass && + [expoFactoryClass isSubclassOfClass:[RCTReactNativeFactory class]]) { + [BTLogger info:@"Using Expo React Native factory for background runtime"]; + return [(RCTReactNativeFactory *)[expoFactoryClass alloc] + initWithDelegate:delegate]; + } + + return [[RCTReactNativeFactory alloc] initWithDelegate:delegate]; +} + // Exactly-once settle guard for the bg watchdog — same design as // SplitBundleLoader's SBLSettleGuard. An ARC object captured by both the // executor block and the watchdog dispatch_after; ARC keeps its lock alive @@ -255,7 +268,7 @@ - (void)startBackgroundRunnerWithEntryURL:(NSString *)entryURL { NSDictionary *initialProperties = @{}; NSDictionary *launchOptions = @{}; self.reactNativeFactoryDelegate = [[BackgroundReactNativeDelegate alloc] init]; - self.reactNativeFactory = [[RCTReactNativeFactory alloc] initWithDelegate:self.reactNativeFactoryDelegate]; + self.reactNativeFactory = CreateBackgroundReactNativeFactory(self.reactNativeFactoryDelegate); // Only set jsBundleSource for debug HTTP URLs or explicit OTA overrides. // Leaving the default release name ("background.bundle") unset lets the diff --git a/native-modules/react-native-background-thread/package.json b/native-modules/react-native-background-thread/package.json index 8d9360e5..efbbefea 100644 --- a/native-modules/react-native-background-thread/package.json +++ b/native-modules/react-native-background-thread/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-background-thread", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-background-thread", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -63,8 +63,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -76,8 +76,8 @@ "jest": "^29.7.0", "lefthook": "^2.0.3", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.17", "release-it": "^19.0.4", "turbo": "^2.5.6", diff --git a/native-modules/react-native-bundle-crypto/package.json b/native-modules/react-native-bundle-crypto/package.json index f27bd1bb..3e17f338 100644 --- a/native-modules/react-native-bundle-crypto/package.json +++ b/native-modules/react-native-bundle-crypto/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-bundle-crypto", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-bundle-crypto", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -65,8 +65,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -79,8 +79,8 @@ "lefthook": "^2.0.3", "nitrogen": "0.36.5", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.13", "react-native-nitro-modules": "0.36.5", "release-it": "^19.0.4", diff --git a/native-modules/react-native-bundle-update/package.json b/native-modules/react-native-bundle-update/package.json index 0d25f1c7..94d205ae 100644 --- a/native-modules/react-native-bundle-update/package.json +++ b/native-modules/react-native-bundle-update/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-bundle-update", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-bundle-update", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -66,8 +66,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -80,8 +80,8 @@ "lefthook": "^2.0.3", "nitrogen": "0.36.5", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.13", "react-native-nitro-modules": "0.36.5", "release-it": "^19.0.4", diff --git a/native-modules/react-native-check-biometric-auth-changed/package.json b/native-modules/react-native-check-biometric-auth-changed/package.json index c6c4677f..c90b0079 100644 --- a/native-modules/react-native-check-biometric-auth-changed/package.json +++ b/native-modules/react-native-check-biometric-auth-changed/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-check-biometric-auth-changed", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-check-biometric-auth-changed", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -66,8 +66,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -80,8 +80,8 @@ "lefthook": "^2.0.3", "nitrogen": "0.36.5", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.13", "react-native-nitro-modules": "0.36.5", "release-it": "^19.0.4", diff --git a/native-modules/react-native-cloud-fs/package.json b/native-modules/react-native-cloud-fs/package.json index af0de275..04d6b115 100644 --- a/native-modules/react-native-cloud-fs/package.json +++ b/native-modules/react-native-cloud-fs/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-cloud-fs", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-cloud-fs TurboModule for OneKey", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -53,9 +53,9 @@ "react-native": "*" }, "devDependencies": { - "@react-native/babel-preset": "0.83.0", - "react": "19.2.0", - "react-native": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.17", "typescript": "^5.9.2" }, diff --git a/native-modules/react-native-cloud-kit-module/package.json b/native-modules/react-native-cloud-kit-module/package.json index 05e9dd2c..6f0bfe38 100644 --- a/native-modules/react-native-cloud-kit-module/package.json +++ b/native-modules/react-native-cloud-kit-module/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-cloud-kit-module", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-cloud-kit-module", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -66,8 +66,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -80,8 +80,8 @@ "lefthook": "^2.0.3", "nitrogen": "0.36.5", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.13", "react-native-nitro-modules": "0.36.5", "release-it": "^19.0.4", diff --git a/native-modules/react-native-device-utils/package.json b/native-modules/react-native-device-utils/package.json index afa7b5c3..689427c3 100644 --- a/native-modules/react-native-device-utils/package.json +++ b/native-modules/react-native-device-utils/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-device-utils", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-device-utils", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -66,8 +66,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -80,8 +80,8 @@ "lefthook": "^2.0.3", "nitrogen": "0.36.5", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.13", "react-native-nitro-modules": "0.36.5", "release-it": "^19.0.4", diff --git a/native-modules/react-native-dns-lookup/package.json b/native-modules/react-native-dns-lookup/package.json index 78741d8b..43658713 100644 --- a/native-modules/react-native-dns-lookup/package.json +++ b/native-modules/react-native-dns-lookup/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-dns-lookup", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-dns-lookup", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -61,8 +61,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -74,8 +74,8 @@ "jest": "^29.7.0", "lefthook": "^2.0.3", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.17", "release-it": "^19.0.4", "turbo": "^2.5.6", diff --git a/native-modules/react-native-get-random-values/package.json b/native-modules/react-native-get-random-values/package.json index ad93aa55..de371591 100644 --- a/native-modules/react-native-get-random-values/package.json +++ b/native-modules/react-native-get-random-values/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-get-random-values", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-get-random-values", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -66,8 +66,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -80,8 +80,8 @@ "lefthook": "^2.0.3", "nitrogen": "0.36.5", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.13", "react-native-nitro-modules": "0.36.5", "release-it": "^19.0.4", diff --git a/native-modules/react-native-keychain-module/package.json b/native-modules/react-native-keychain-module/package.json index 90f1b862..eb094f2c 100644 --- a/native-modules/react-native-keychain-module/package.json +++ b/native-modules/react-native-keychain-module/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-keychain-module", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-keychain-module", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -66,8 +66,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -80,8 +80,8 @@ "lefthook": "^2.0.3", "nitrogen": "0.36.5", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.13", "react-native-nitro-modules": "0.36.5", "release-it": "^19.0.4", diff --git a/native-modules/react-native-lite-card/package.json b/native-modules/react-native-lite-card/package.json index 27b6207a..47c816f3 100644 --- a/native-modules/react-native-lite-card/package.json +++ b/native-modules/react-native-lite-card/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-lite-card", - "version": "3.0.88", + "version": "3.0.89", "description": "lite card", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -65,8 +65,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -78,8 +78,8 @@ "jest": "^29.7.0", "lefthook": "^2.0.3", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.13", "release-it": "^19.0.4", "turbo": "^2.5.6", diff --git a/native-modules/react-native-network-info/package.json b/native-modules/react-native-network-info/package.json index ab3257d0..994c5648 100644 --- a/native-modules/react-native-network-info/package.json +++ b/native-modules/react-native-network-info/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-network-info", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-network-info", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -61,8 +61,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -74,8 +74,8 @@ "jest": "^29.7.0", "lefthook": "^2.0.3", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.17", "release-it": "^19.0.4", "turbo": "^2.5.6", diff --git a/native-modules/react-native-network-throttle/package.json b/native-modules/react-native-network-throttle/package.json index 29cd4afe..afe8f766 100644 --- a/native-modules/react-native-network-throttle/package.json +++ b/native-modules/react-native-network-throttle/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-network-throttle", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-network-throttle", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -63,8 +63,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -76,8 +76,8 @@ "jest": "^29.7.0", "lefthook": "^2.0.3", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.17", "release-it": "^19.0.4", "turbo": "^2.5.6", diff --git a/native-modules/react-native-pbkdf2/package.json b/native-modules/react-native-pbkdf2/package.json index e8c176c8..cc87bd75 100644 --- a/native-modules/react-native-pbkdf2/package.json +++ b/native-modules/react-native-pbkdf2/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-pbkdf2", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-pbkdf2", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -56,8 +56,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -69,8 +69,8 @@ "jest": "^29.7.0", "lefthook": "^2.0.3", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.17", "release-it": "^19.0.4", "turbo": "^2.5.6", diff --git a/native-modules/react-native-perf-memory/package.json b/native-modules/react-native-perf-memory/package.json index f71fa5e3..98d58693 100644 --- a/native-modules/react-native-perf-memory/package.json +++ b/native-modules/react-native-perf-memory/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-perf-memory", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-perf-memory", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -66,8 +66,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -80,8 +80,8 @@ "lefthook": "^2.0.3", "nitrogen": "0.36.5", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.13", "react-native-nitro-modules": "0.36.5", "release-it": "^19.0.4", diff --git a/native-modules/react-native-perf-stats/package.json b/native-modules/react-native-perf-stats/package.json index 1c11d026..a414fe04 100644 --- a/native-modules/react-native-perf-stats/package.json +++ b/native-modules/react-native-perf-stats/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-perf-stats", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-perf-stats", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -65,8 +65,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -79,8 +79,8 @@ "lefthook": "^2.0.3", "nitrogen": "0.36.5", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "0.83.0", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.13", "react-native-nitro-modules": "0.36.5", "release-it": "^19.0.4", diff --git a/native-modules/react-native-ping/package.json b/native-modules/react-native-ping/package.json index 871ca2aa..d145d44d 100644 --- a/native-modules/react-native-ping/package.json +++ b/native-modules/react-native-ping/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-ping", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-ping TurboModule for OneKey", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -53,9 +53,9 @@ "react-native": "*" }, "devDependencies": { - "@react-native/babel-preset": "0.83.0", - "react": "19.2.0", - "react-native": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.17", "typescript": "^5.9.2" }, diff --git a/native-modules/react-native-range-downloader/package.json b/native-modules/react-native-range-downloader/package.json index 51fc48ca..d4627bf8 100644 --- a/native-modules/react-native-range-downloader/package.json +++ b/native-modules/react-native-range-downloader/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-range-downloader", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-range-downloader", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -65,8 +65,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -79,8 +79,8 @@ "lefthook": "^2.0.3", "nitrogen": "0.36.5", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.13", "react-native-nitro-modules": "0.36.5", "release-it": "^19.0.4", diff --git a/native-modules/react-native-sni-connect/package.json b/native-modules/react-native-sni-connect/package.json index 3b3d59a5..61a59118 100644 --- a/native-modules/react-native-sni-connect/package.json +++ b/native-modules/react-native-sni-connect/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-sni-connect", - "version": "3.0.88", + "version": "3.0.89", "description": "A React Native library for SNI-based HTTP requests with DNS caching and request management", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -64,8 +64,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -77,8 +77,8 @@ "jest": "^29.7.0", "lefthook": "^2.0.3", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.17", "release-it": "^19.0.4", "turbo": "^2.5.6", diff --git a/native-modules/react-native-splash-screen/package.json b/native-modules/react-native-splash-screen/package.json index 1833828e..db2537ac 100644 --- a/native-modules/react-native-splash-screen/package.json +++ b/native-modules/react-native-splash-screen/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-splash-screen", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-splash-screen", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -66,8 +66,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -80,8 +80,8 @@ "lefthook": "^2.0.3", "nitrogen": "0.36.5", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.13", "react-native-nitro-modules": "0.36.5", "release-it": "^19.0.4", diff --git a/native-modules/react-native-split-bundle-loader/package.json b/native-modules/react-native-split-bundle-loader/package.json index 29e12160..36741f36 100644 --- a/native-modules/react-native-split-bundle-loader/package.json +++ b/native-modules/react-native-split-bundle-loader/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-split-bundle-loader", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-split-bundle-loader", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -61,8 +61,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -74,8 +74,8 @@ "jest": "^29.7.0", "lefthook": "^2.0.3", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.17", "release-it": "^19.0.4", "turbo": "^2.5.6", diff --git a/native-modules/react-native-tcp-socket/package.json b/native-modules/react-native-tcp-socket/package.json index fe8812ed..bd93819c 100644 --- a/native-modules/react-native-tcp-socket/package.json +++ b/native-modules/react-native-tcp-socket/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-tcp-socket", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-tcp-socket", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -57,8 +57,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -70,8 +70,8 @@ "jest": "^29.7.0", "lefthook": "^2.0.3", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.17", "release-it": "^19.0.4", "turbo": "^2.5.6", diff --git a/native-modules/react-native-zip-archive/package.json b/native-modules/react-native-zip-archive/package.json index 5645ee66..0dcd7404 100644 --- a/native-modules/react-native-zip-archive/package.json +++ b/native-modules/react-native-zip-archive/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-zip-archive", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-zip-archive Nitro HybridObject for OneKey", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -62,10 +62,10 @@ "react-native-nitro-modules": "0.36.5" }, "devDependencies": { - "@react-native/babel-preset": "0.83.0", + "@react-native/babel-preset": "0.86.2", "nitrogen": "0.36.5", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.17", "react-native-nitro-modules": "0.36.5", "typescript": "^5.9.2" diff --git a/native-views/react-native-auto-size-input/package.json b/native-views/react-native-auto-size-input/package.json index 9fa9c47e..2599ee90 100644 --- a/native-views/react-native-auto-size-input/package.json +++ b/native-views/react-native-auto-size-input/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-auto-size-input", - "version": "3.0.88", + "version": "3.0.89", "description": "Auto-sizing text input with font scaling, prefix and suffix support", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -66,8 +66,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -80,8 +80,8 @@ "lefthook": "^2.0.3", "nitrogen": "0.36.5", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.13", "react-native-nitro-modules": "0.36.5", "release-it": "^19.0.4", diff --git a/native-views/react-native-chart-webview/package.json b/native-views/react-native-chart-webview/package.json index 13f80b8b..e0e0c695 100644 --- a/native-views/react-native-chart-webview/package.json +++ b/native-views/react-native-chart-webview/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-chart-webview", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-chart-webview", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -65,8 +65,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -79,8 +79,8 @@ "lefthook": "^2.0.3", "nitrogen": "0.36.5", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.13", "react-native-nitro-modules": "0.36.5", "release-it": "^19.0.4", diff --git a/native-views/react-native-pager-view/package.json b/native-views/react-native-pager-view/package.json index ebb2fb0e..76193db8 100644 --- a/native-views/react-native-pager-view/package.json +++ b/native-views/react-native-pager-view/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-pager-view", - "version": "3.0.88", + "version": "3.0.89", "description": "React Native wrapper for Android and iOS ViewPager", "source": "./src/index.tsx", "main": "./lib/module/index.js", @@ -59,8 +59,8 @@ }, "devDependencies": { "@types/react": "^19.2.0", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.13", "typescript": "^5.9.2" }, diff --git a/native-views/react-native-perp-depth-bar/package.json b/native-views/react-native-perp-depth-bar/package.json index df3505cf..8949375b 100644 --- a/native-views/react-native-perp-depth-bar/package.json +++ b/native-views/react-native-perp-depth-bar/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-perp-depth-bar", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-perp-depth-bar", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -65,8 +65,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -79,8 +79,8 @@ "lefthook": "^2.0.3", "nitrogen": "0.36.5", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.13", "react-native-nitro-modules": "0.36.5", "release-it": "^19.0.4", diff --git a/native-views/react-native-scroll-guard/package.json b/native-views/react-native-scroll-guard/package.json index 05cbafeb..401b58a3 100644 --- a/native-views/react-native-scroll-guard/package.json +++ b/native-views/react-native-scroll-guard/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-scroll-guard", - "version": "3.0.88", + "version": "3.0.89", "description": "A native view wrapper that prevents parent scrollable containers (PagerView/ViewPager2) from intercepting child scroll gestures", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -60,11 +60,11 @@ "registry": "https://registry.npmjs.org/" }, "devDependencies": { - "@react-native/babel-preset": "0.83.0", + "@react-native/babel-preset": "0.86.2", "del-cli": "^6.0.0", "nitrogen": "0.36.5", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.13", "react-native-nitro-modules": "0.36.5", "typescript": "^5.9.2" diff --git a/native-views/react-native-segment-slider/package.json b/native-views/react-native-segment-slider/package.json index 520b0595..973ad187 100644 --- a/native-views/react-native-segment-slider/package.json +++ b/native-views/react-native-segment-slider/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-segment-slider", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-segment-slider", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -65,8 +65,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -79,8 +79,8 @@ "lefthook": "^2.0.3", "nitrogen": "0.36.5", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.13", "react-native-nitro-modules": "0.36.5", "release-it": "^19.0.4", diff --git a/native-views/react-native-skeleton/package.json b/native-views/react-native-skeleton/package.json index bcac1648..f39241d4 100644 --- a/native-views/react-native-skeleton/package.json +++ b/native-views/react-native-skeleton/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-skeleton", - "version": "3.0.88", + "version": "3.0.89", "description": "react-native-skeleton", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", @@ -66,8 +66,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -80,8 +80,8 @@ "lefthook": "^2.0.3", "nitrogen": "0.36.5", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.13", "react-native-nitro-modules": "0.36.5", "release-it": "^19.0.4", diff --git a/native-views/react-native-tab-view/package.json b/native-views/react-native-tab-view/package.json index 1be40eab..bda6e7c7 100644 --- a/native-views/react-native-tab-view/package.json +++ b/native-views/react-native-tab-view/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-tab-view", - "version": "3.0.88", + "version": "3.0.89", "description": "Native Bottom Tabs for React Native (UIKit implementation)", "source": "./src/index.tsx", "main": "./lib/module/index.js", @@ -61,8 +61,8 @@ }, "devDependencies": { "@types/react": "^19.2.0", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.13", "typescript": "^5.9.2" }, diff --git a/package.json b/package.json index c2296ee6..8630e382 100644 --- a/package.json +++ b/package.json @@ -25,8 +25,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -39,8 +39,8 @@ "lefthook": "^2.0.3", "nitrogen": "0.36.5", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", "react-native-builder-bob": "^0.40.13", "react-native-nitro-modules": "0.36.5", "release-it": "^19.0.4", diff --git a/scripts/nitro-view/template/package.json b/scripts/nitro-view/template/package.json index 72cc8c9f..88a6df26 100644 --- a/scripts/nitro-view/template/package.json +++ b/scripts/nitro-view/template/package.json @@ -65,8 +65,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -79,8 +79,8 @@ "lefthook": "^2.0.3", "nitrogen": "0.36.5", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "0.83.0", + "react": "19.2.3", + "react-native": "0.86.2", "react-native-builder-bob": "^0.40.13", "react-native-nitro-modules": "0.36.5", "release-it": "^19.0.4", diff --git a/scripts/nitro/template/package.json b/scripts/nitro/template/package.json index f86b7c76..ac39c78d 100644 --- a/scripts/nitro/template/package.json +++ b/scripts/nitro/template/package.json @@ -65,8 +65,8 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", - "@react-native/babel-preset": "0.83.0", - "@react-native/eslint-config": "0.83.0", + "@react-native/babel-preset": "0.86.2", + "@react-native/eslint-config": "0.86.2", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", "@types/react": "^19.2.0", @@ -79,8 +79,8 @@ "lefthook": "^2.0.3", "nitrogen": "0.36.5", "prettier": "^2.8.8", - "react": "19.2.0", - "react-native": "0.83.0", + "react": "19.2.3", + "react-native": "0.86.2", "react-native-builder-bob": "^0.40.13", "react-native-nitro-modules": "0.36.5", "release-it": "^19.0.4", diff --git a/yarn.lock b/yarn.lock index 51710b4a..17d583df 100644 --- a/yarn.lock +++ b/yarn.lock @@ -21,7 +21,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.24.7, @babel/code-frame@npm:^7.27.1": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.27.1": version: 7.27.1 resolution: "@babel/code-frame@npm:7.27.1" dependencies: @@ -32,6 +32,17 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.29.0, @babel/code-frame@npm:^7.29.7": + version: 7.29.7 + resolution: "@babel/code-frame@npm:7.29.7" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.29.7" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.1.1" + checksum: 10/84da552e51a55795a50b3589116edb2f9e368a647d266380683775f18effd9acd4521b0246bebd0b049a7f32af1f87b1e8475d3bcb665f876bd04ade8da99697 + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.27.2, @babel/compat-data@npm:^7.27.7, @babel/compat-data@npm:^7.28.5": version: 7.28.5 resolution: "@babel/compat-data@npm:7.28.5" @@ -76,7 +87,7 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.25.0, @babel/generator@npm:^7.28.5, @babel/generator@npm:^7.7.2": +"@babel/generator@npm:^7.28.5, @babel/generator@npm:^7.7.2": version: 7.28.5 resolution: "@babel/generator@npm:7.28.5" dependencies: @@ -89,6 +100,19 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.29.1, @babel/generator@npm:^7.29.8": + version: 7.29.8 + resolution: "@babel/generator@npm:7.29.8" + dependencies: + "@babel/parser": "npm:^7.29.8" + "@babel/types": "npm:^7.29.8" + "@jridgewell/gen-mapping": "npm:^0.3.12" + "@jridgewell/trace-mapping": "npm:^0.3.28" + jsesc: "npm:^3.0.2" + checksum: 10/679c3d1302936f391260acee4059e0c3cd5bff6341772f0b85bb142feab1a253d0e155aad0e9c8531e024d6239a2cc5169d1e294c6890901e7d4ab0f7c9eaaaa + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.27.1, @babel/helper-annotate-as-pure@npm:^7.27.3": version: 7.27.3 resolution: "@babel/helper-annotate-as-pure@npm:7.27.3" @@ -163,6 +187,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-globals@npm:^7.29.7": + version: 7.29.7 + resolution: "@babel/helper-globals@npm:7.29.7" + checksum: 10/e53203e87ae24a45f59639edea0c429bc3c63c6d74f1862fe60a35032d89478e7511d2f34855da0fcb65782668d72e59e93d1de5bc00121ba9bc1aa38f1f0ad3 + languageName: node + linkType: hard + "@babel/helper-member-expression-to-functions@npm:^7.27.1, @babel/helper-member-expression-to-functions@npm:^7.28.5": version: 7.28.5 resolution: "@babel/helper-member-expression-to-functions@npm:7.28.5" @@ -255,6 +286,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.29.7": + version: 7.29.7 + resolution: "@babel/helper-string-parser@npm:7.29.7" + checksum: 10/4d8ef0ef7105f3d9fe4361137c8f42e5b4c7a52b5380b962762f2a528a1ba89064e2c6236090716ce34b63707b886ae0ebf36b2c2fcc2851f27e652febfc3648 + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.27.1, @babel/helper-validator-identifier@npm:^7.28.5": version: 7.28.5 resolution: "@babel/helper-validator-identifier@npm:7.28.5" @@ -262,6 +300,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-identifier@npm:^7.29.7": + version: 7.29.7 + resolution: "@babel/helper-validator-identifier@npm:7.29.7" + checksum: 10/2efa42701eb05babf26dff3332109c9e5e1a3400a71fb9e68ee27af28235036a2a72c2494c04bdab3f909075f42a58b2e8271074372bc7f8e79ec02bd364d7a7 + languageName: node + linkType: hard + "@babel/helper-validator-option@npm:^7.27.1": version: 7.27.1 resolution: "@babel/helper-validator-option@npm:7.27.1" @@ -290,7 +335,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.24.4, @babel/parser@npm:^7.25.3, @babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.5": +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.24.4, @babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.5": version: 7.28.5 resolution: "@babel/parser@npm:7.28.5" dependencies: @@ -301,6 +346,17 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.29.0, @babel/parser@npm:^7.29.7, @babel/parser@npm:^7.29.8": + version: 7.29.8 + resolution: "@babel/parser@npm:7.29.8" + dependencies: + "@babel/types": "npm:^7.29.8" + bin: + parser: ./bin/babel-parser.js + checksum: 10/dbd14ebbba0fa3019acd2712b0db3ffd594d0850d4fc487667287b5702893f54a7911570ea842f0cff4dc492a2412e3287dfabfe00c6b78efa7becb1255f3f86 + languageName: node + linkType: hard + "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.28.5": version: 7.28.5 resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.28.5" @@ -623,7 +679,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-arrow-functions@npm:^7.24.7, @babel/plugin-transform-arrow-functions@npm:^7.27.1": +"@babel/plugin-transform-arrow-functions@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-arrow-functions@npm:7.27.1" dependencies: @@ -722,7 +778,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.24.7, @babel/plugin-transform-computed-properties@npm:^7.27.1": +"@babel/plugin-transform-computed-properties@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-computed-properties@npm:7.27.1" dependencies: @@ -850,7 +906,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-function-name@npm:^7.25.1, @babel/plugin-transform-function-name@npm:^7.27.1": +"@babel/plugin-transform-function-name@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-function-name@npm:7.27.1" dependencies: @@ -874,7 +930,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.25.2, @babel/plugin-transform-literals@npm:^7.27.1": +"@babel/plugin-transform-literals@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-literals@npm:7.27.1" dependencies: @@ -885,7 +941,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-logical-assignment-operators@npm:^7.24.7, @babel/plugin-transform-logical-assignment-operators@npm:^7.28.5": +"@babel/plugin-transform-logical-assignment-operators@npm:^7.28.5": version: 7.28.5 resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.28.5" dependencies: @@ -991,7 +1047,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-numeric-separator@npm:^7.24.7, @babel/plugin-transform-numeric-separator@npm:^7.27.1": +"@babel/plugin-transform-numeric-separator@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-numeric-separator@npm:7.27.1" dependencies: @@ -1002,7 +1058,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-object-rest-spread@npm:^7.24.7, @babel/plugin-transform-object-rest-spread@npm:^7.28.4": +"@babel/plugin-transform-object-rest-spread@npm:^7.28.4": version: 7.28.4 resolution: "@babel/plugin-transform-object-rest-spread@npm:7.28.4" dependencies: @@ -1052,7 +1108,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.24.7, @babel/plugin-transform-parameters@npm:^7.27.7": +"@babel/plugin-transform-parameters@npm:^7.27.7": version: 7.27.7 resolution: "@babel/plugin-transform-parameters@npm:7.27.7" dependencies: @@ -1220,7 +1276,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-shorthand-properties@npm:^7.24.7, @babel/plugin-transform-shorthand-properties@npm:^7.27.1": +"@babel/plugin-transform-shorthand-properties@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-shorthand-properties@npm:7.27.1" dependencies: @@ -1231,7 +1287,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.24.7, @babel/plugin-transform-spread@npm:^7.27.1": +"@babel/plugin-transform-spread@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-spread@npm:7.27.1" dependencies: @@ -1243,7 +1299,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-sticky-regex@npm:^7.24.7, @babel/plugin-transform-sticky-regex@npm:^7.27.1": +"@babel/plugin-transform-sticky-regex@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-sticky-regex@npm:7.27.1" dependencies: @@ -1480,7 +1536,7 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.25.0, @babel/template@npm:^7.27.1, @babel/template@npm:^7.27.2, @babel/template@npm:^7.3.3": +"@babel/template@npm:^7.27.1, @babel/template@npm:^7.27.2, @babel/template@npm:^7.3.3": version: 7.27.2 resolution: "@babel/template@npm:7.27.2" dependencies: @@ -1491,7 +1547,18 @@ __metadata: languageName: node linkType: hard -"@babel/traverse--for-generate-function-map@npm:@babel/traverse@^7.25.3, @babel/traverse@npm:^7.25.3, @babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.28.0, @babel/traverse@npm:^7.28.3, @babel/traverse@npm:^7.28.4, @babel/traverse@npm:^7.28.5": +"@babel/template@npm:^7.28.6, @babel/template@npm:^7.29.7": + version: 7.29.7 + resolution: "@babel/template@npm:7.29.7" + dependencies: + "@babel/code-frame": "npm:^7.29.7" + "@babel/parser": "npm:^7.29.7" + "@babel/types": "npm:^7.29.7" + checksum: 10/da92f7a5b61e05d2fb3934a44f18cec6006ee3c595116c17a3b44cb9756ecd43205c7360dbfa326fa8f4d00aaeb9e777342a881070d11c2305e9c694bc3ca6ff + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.28.0, @babel/traverse@npm:^7.28.3, @babel/traverse@npm:^7.28.4, @babel/traverse@npm:^7.28.5": version: 7.28.5 resolution: "@babel/traverse@npm:7.28.5" dependencies: @@ -1506,7 +1573,22 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.2, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.28.2, @babel/types@npm:^7.28.4, @babel/types@npm:^7.28.5, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": +"@babel/traverse@npm:^7.29.0": + version: 7.29.8 + resolution: "@babel/traverse@npm:7.29.8" + dependencies: + "@babel/code-frame": "npm:^7.29.7" + "@babel/generator": "npm:^7.29.8" + "@babel/helper-globals": "npm:^7.29.7" + "@babel/parser": "npm:^7.29.8" + "@babel/template": "npm:^7.29.7" + "@babel/types": "npm:^7.29.8" + debug: "npm:^4.3.1" + checksum: 10/91f0b4799d27b50ffd5c2ab4ba537065221196858e0899275d8474489c57dd0b53150508b2c0d9b308520e5985bde63049a401d32aa1ac4f1e10e466e2a3f447 + languageName: node + linkType: hard + +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.28.2, @babel/types@npm:^7.28.4, @babel/types@npm:^7.28.5, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": version: 7.28.5 resolution: "@babel/types@npm:7.28.5" dependencies: @@ -1516,6 +1598,16 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.29.0, @babel/types@npm:^7.29.7, @babel/types@npm:^7.29.8": + version: 7.29.8 + resolution: "@babel/types@npm:7.29.8" + dependencies: + "@babel/helper-string-parser": "npm:^7.29.7" + "@babel/helper-validator-identifier": "npm:^7.29.7" + checksum: 10/ff2becf0f8b432f0820f286fb9319d7f3819b2d0eb95bc26957fbc6250a3ca0ae3656feb98ecb5f171f9e04b34a4c08f5036447f17459ed7bfc32ff649d9b71e + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" @@ -2778,14 +2870,15 @@ __metadata: "@onekeyfe/react-native-tab-view": "workspace:*" "@onekeyfe/react-native-tcp-socket": "workspace:*" "@onekeyfe/react-native-zip-archive": "workspace:*" - "@react-native-community/cli": "npm:20.0.0" - "@react-native-community/cli-platform-android": "npm:20.0.0" - "@react-native-community/cli-platform-ios": "npm:20.0.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" - "@react-native/metro-config": "npm:0.83.0" - "@react-native/new-app-screen": "npm:0.83.0" - "@react-native/typescript-config": "npm:0.83.0" + "@react-native-community/cli": "npm:20.1.0" + "@react-native-community/cli-platform-android": "npm:20.1.0" + "@react-native-community/cli-platform-ios": "npm:20.1.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" + "@react-native/jest-preset": "npm:0.86.2" + "@react-native/metro-config": "npm:0.86.2" + "@react-native/new-app-screen": "npm:0.86.2" + "@react-native/typescript-config": "npm:0.86.2" "@react-navigation/native": "npm:^7.1.33" "@react-navigation/native-stack": "npm:^7.14.4" "@types/jest": "npm:^29.5.13" @@ -2795,13 +2888,13 @@ __metadata: fast-base64-decode: "npm:*" jest: "npm:^29.6.3" prettier: "npm:2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-mmkv: "npm:4.3.2" react-native-nitro-modules: "npm:0.36.5" react-native-safe-area-context: "npm:^5.5.2" react-native-screens: "npm:^4.24.0" - react-test-renderer: "npm:19.2.0" + react-test-renderer: "npm:19.2.3" typescript: "npm:^5.8.3" languageName: unknown linkType: soft @@ -2815,8 +2908,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -2829,8 +2922,8 @@ __metadata: lefthook: "npm:^2.0.3" nitrogen: "npm:0.36.5" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.13" react-native-nitro-modules: "npm:0.36.5" release-it: "npm:^19.0.4" @@ -2851,8 +2944,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -2864,8 +2957,8 @@ __metadata: jest: "npm:^29.7.0" lefthook: "npm:^2.0.3" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.17" release-it: "npm:^19.0.4" turbo: "npm:^2.5.6" @@ -2884,8 +2977,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -2898,8 +2991,8 @@ __metadata: lefthook: "npm:^2.0.3" nitrogen: "npm:0.36.5" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.13" react-native-nitro-modules: "npm:0.36.5" release-it: "npm:^19.0.4" @@ -2920,8 +3013,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -2934,8 +3027,8 @@ __metadata: lefthook: "npm:^2.0.3" merge-options: "npm:^3.0.4" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.17" release-it: "npm:^19.0.4" turbo: "npm:^2.5.6" @@ -2954,8 +3047,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -2968,8 +3061,8 @@ __metadata: lefthook: "npm:^2.0.3" nitrogen: "npm:0.36.5" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.13" react-native-nitro-modules: "npm:0.36.5" release-it: "npm:^19.0.4" @@ -2990,8 +3083,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -3003,8 +3096,8 @@ __metadata: jest: "npm:^29.7.0" lefthook: "npm:^2.0.3" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.17" release-it: "npm:^19.0.4" turbo: "npm:^2.5.6" @@ -3024,8 +3117,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -3038,8 +3131,8 @@ __metadata: lefthook: "npm:^2.0.3" nitrogen: "npm:0.36.5" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.13" react-native-nitro-modules: "npm:0.36.5" release-it: "npm:^19.0.4" @@ -3060,8 +3153,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -3074,8 +3167,8 @@ __metadata: lefthook: "npm:^2.0.3" nitrogen: "npm:0.36.5" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.13" react-native-nitro-modules: "npm:0.36.5" release-it: "npm:^19.0.4" @@ -3096,8 +3189,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -3110,8 +3203,8 @@ __metadata: lefthook: "npm:^2.0.3" nitrogen: "npm:0.36.5" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.13" react-native-nitro-modules: "npm:0.36.5" release-it: "npm:^19.0.4" @@ -3132,8 +3225,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -3146,8 +3239,8 @@ __metadata: lefthook: "npm:^2.0.3" nitrogen: "npm:0.36.5" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.13" react-native-nitro-modules: "npm:0.36.5" release-it: "npm:^19.0.4" @@ -3164,9 +3257,9 @@ __metadata: version: 0.0.0-use.local resolution: "@onekeyfe/react-native-cloud-fs@workspace:native-modules/react-native-cloud-fs" dependencies: - "@react-native/babel-preset": "npm:0.83.0" - react: "npm:19.2.0" - react-native: "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.17" typescript: "npm:^5.9.2" peerDependencies: @@ -3183,8 +3276,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -3197,8 +3290,8 @@ __metadata: lefthook: "npm:^2.0.3" nitrogen: "npm:0.36.5" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.13" react-native-nitro-modules: "npm:0.36.5" release-it: "npm:^19.0.4" @@ -3219,8 +3312,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -3233,8 +3326,8 @@ __metadata: lefthook: "npm:^2.0.3" nitrogen: "npm:0.36.5" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.13" react-native-nitro-modules: "npm:0.36.5" release-it: "npm:^19.0.4" @@ -3255,8 +3348,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -3268,8 +3361,8 @@ __metadata: jest: "npm:^29.7.0" lefthook: "npm:^2.0.3" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.17" release-it: "npm:^19.0.4" turbo: "npm:^2.5.6" @@ -3288,8 +3381,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -3302,8 +3395,8 @@ __metadata: lefthook: "npm:^2.0.3" nitrogen: "npm:0.36.5" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.13" react-native-nitro-modules: "npm:0.36.5" release-it: "npm:^19.0.4" @@ -3324,8 +3417,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -3338,8 +3431,8 @@ __metadata: lefthook: "npm:^2.0.3" nitrogen: "npm:0.36.5" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.13" react-native-nitro-modules: "npm:0.36.5" release-it: "npm:^19.0.4" @@ -3360,8 +3453,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -3373,8 +3466,8 @@ __metadata: jest: "npm:^29.7.0" lefthook: "npm:^2.0.3" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.13" release-it: "npm:^19.0.4" turbo: "npm:^2.5.6" @@ -3393,8 +3486,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -3407,8 +3500,8 @@ __metadata: lefthook: "npm:^2.0.3" nitrogen: "npm:0.36.5" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.13" react-native-nitro-modules: "npm:0.36.5" release-it: "npm:^19.0.4" @@ -3429,8 +3522,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -3442,8 +3535,8 @@ __metadata: jest: "npm:^29.7.0" lefthook: "npm:^2.0.3" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.17" release-it: "npm:^19.0.4" turbo: "npm:^2.5.6" @@ -3462,8 +3555,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -3475,8 +3568,8 @@ __metadata: jest: "npm:^29.7.0" lefthook: "npm:^2.0.3" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.17" release-it: "npm:^19.0.4" turbo: "npm:^2.5.6" @@ -3492,8 +3585,8 @@ __metadata: resolution: "@onekeyfe/react-native-pager-view@workspace:native-views/react-native-pager-view" dependencies: "@types/react": "npm:^19.2.0" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.13" typescript: "npm:^5.9.2" peerDependencies: @@ -3510,8 +3603,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -3523,8 +3616,8 @@ __metadata: jest: "npm:^29.7.0" lefthook: "npm:^2.0.3" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.17" release-it: "npm:^19.0.4" turbo: "npm:^2.5.6" @@ -3543,8 +3636,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -3557,8 +3650,8 @@ __metadata: lefthook: "npm:^2.0.3" nitrogen: "npm:0.36.5" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.13" react-native-nitro-modules: "npm:0.36.5" release-it: "npm:^19.0.4" @@ -3579,8 +3672,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -3593,8 +3686,8 @@ __metadata: lefthook: "npm:^2.0.3" nitrogen: "npm:0.36.5" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "npm:0.83.0" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.13" react-native-nitro-modules: "npm:0.36.5" release-it: "npm:^19.0.4" @@ -3615,8 +3708,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -3629,8 +3722,8 @@ __metadata: lefthook: "npm:^2.0.3" nitrogen: "npm:0.36.5" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.13" react-native-nitro-modules: "npm:0.36.5" release-it: "npm:^19.0.4" @@ -3647,9 +3740,9 @@ __metadata: version: 0.0.0-use.local resolution: "@onekeyfe/react-native-ping@workspace:native-modules/react-native-ping" dependencies: - "@react-native/babel-preset": "npm:0.83.0" - react: "npm:19.2.0" - react-native: "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.17" typescript: "npm:^5.9.2" peerDependencies: @@ -3666,8 +3759,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -3680,8 +3773,8 @@ __metadata: lefthook: "npm:^2.0.3" nitrogen: "npm:0.36.5" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.13" react-native-nitro-modules: "npm:0.36.5" release-it: "npm:^19.0.4" @@ -3698,11 +3791,11 @@ __metadata: version: 0.0.0-use.local resolution: "@onekeyfe/react-native-scroll-guard@workspace:native-views/react-native-scroll-guard" dependencies: - "@react-native/babel-preset": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" del-cli: "npm:^6.0.0" nitrogen: "npm:0.36.5" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.13" react-native-nitro-modules: "npm:0.36.5" typescript: "npm:^5.9.2" @@ -3721,8 +3814,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -3735,8 +3828,8 @@ __metadata: lefthook: "npm:^2.0.3" nitrogen: "npm:0.36.5" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.13" react-native-nitro-modules: "npm:0.36.5" release-it: "npm:^19.0.4" @@ -3757,8 +3850,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -3771,8 +3864,8 @@ __metadata: lefthook: "npm:^2.0.3" nitrogen: "npm:0.36.5" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.13" react-native-nitro-modules: "npm:0.36.5" release-it: "npm:^19.0.4" @@ -3793,8 +3886,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -3806,8 +3899,8 @@ __metadata: jest: "npm:^29.7.0" lefthook: "npm:^2.0.3" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.17" release-it: "npm:^19.0.4" turbo: "npm:^2.5.6" @@ -3826,8 +3919,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -3840,8 +3933,8 @@ __metadata: lefthook: "npm:^2.0.3" nitrogen: "npm:0.36.5" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.13" react-native-nitro-modules: "npm:0.36.5" release-it: "npm:^19.0.4" @@ -3862,8 +3955,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -3875,8 +3968,8 @@ __metadata: jest: "npm:^29.7.0" lefthook: "npm:^2.0.3" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.17" release-it: "npm:^19.0.4" turbo: "npm:^2.5.6" @@ -3893,9 +3986,9 @@ __metadata: resolution: "@onekeyfe/react-native-tab-view@workspace:native-views/react-native-tab-view" dependencies: "@types/react": "npm:^19.2.0" - react: "npm:19.2.0" + react: "npm:19.2.3" react-freeze: "npm:^1.0.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.13" sf-symbols-typescript: "npm:^2.0.0" typescript: "npm:^5.9.2" @@ -3914,8 +4007,8 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" - "@react-native/babel-preset": "npm:0.83.0" - "@react-native/eslint-config": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" + "@react-native/eslint-config": "npm:0.86.2" "@release-it/conventional-changelog": "npm:^10.0.1" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.2.0" @@ -3927,8 +4020,8 @@ __metadata: jest: "npm:^29.7.0" lefthook: "npm:^2.0.3" prettier: "npm:^2.8.8" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.17" release-it: "npm:^19.0.4" turbo: "npm:^2.5.6" @@ -3943,10 +4036,10 @@ __metadata: version: 0.0.0-use.local resolution: "@onekeyfe/react-native-zip-archive@workspace:native-modules/react-native-zip-archive" dependencies: - "@react-native/babel-preset": "npm:0.83.0" + "@react-native/babel-preset": "npm:0.86.2" nitrogen: "npm:0.36.5" - react: "npm:19.2.0" - react-native: "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" react-native-builder-bob: "npm:^0.40.17" react-native-nitro-modules: "npm:0.36.5" typescript: "npm:^5.9.2" @@ -3978,119 +4071,119 @@ __metadata: languageName: node linkType: hard -"@react-native-community/cli-clean@npm:20.0.0": - version: 20.0.0 - resolution: "@react-native-community/cli-clean@npm:20.0.0" +"@react-native-community/cli-clean@npm:20.1.0": + version: 20.1.0 + resolution: "@react-native-community/cli-clean@npm:20.1.0" dependencies: - "@react-native-community/cli-tools": "npm:20.0.0" - chalk: "npm:^4.1.2" + "@react-native-community/cli-tools": "npm:20.1.0" execa: "npm:^5.0.0" fast-glob: "npm:^3.3.2" - checksum: 10/56a261a83eb4fc60e81778659ace53997cc5d045fc09c7e7a3a991eaae60347a7349868bcc5b45db73d3234fc714fe6adbaf641669eddd94cfcfe1037dd616c1 + picocolors: "npm:^1.1.1" + checksum: 10/d929c541e07e8d703c5633bce1a7f2c4ff249f5a5e508b8c11f2fcbf97d5bc27eff706cb36b56973f0405e3592e67bc04f4a7d736956427f129a8c88f9c2cfa5 languageName: node linkType: hard -"@react-native-community/cli-config-android@npm:20.0.0": - version: 20.0.0 - resolution: "@react-native-community/cli-config-android@npm:20.0.0" +"@react-native-community/cli-config-android@npm:20.1.0": + version: 20.1.0 + resolution: "@react-native-community/cli-config-android@npm:20.1.0" dependencies: - "@react-native-community/cli-tools": "npm:20.0.0" - chalk: "npm:^4.1.2" + "@react-native-community/cli-tools": "npm:20.1.0" fast-glob: "npm:^3.3.2" fast-xml-parser: "npm:^4.4.1" - checksum: 10/fbd897df48793b050429e77114b8fcf42364b8847a199873818977cb8102ce303bb3e4fbf1842fd66608d96409e27835111e19e80c670dc6067066e53d4c500f + picocolors: "npm:^1.1.1" + checksum: 10/d14b6c5d172c54a9a4ff7fda8feb91d2f644ca50f2bd1d5109b77d0cfd51c808aca4e6fd957500bb6aaf01bdb7b916ea6028a4658b46b2f8f72ee54bea3dfdd2 languageName: node linkType: hard -"@react-native-community/cli-config-apple@npm:20.0.0": - version: 20.0.0 - resolution: "@react-native-community/cli-config-apple@npm:20.0.0" +"@react-native-community/cli-config-apple@npm:20.1.0": + version: 20.1.0 + resolution: "@react-native-community/cli-config-apple@npm:20.1.0" dependencies: - "@react-native-community/cli-tools": "npm:20.0.0" - chalk: "npm:^4.1.2" + "@react-native-community/cli-tools": "npm:20.1.0" execa: "npm:^5.0.0" fast-glob: "npm:^3.3.2" - checksum: 10/7c4e01c894199db48c15265d6d336ece4e103bf23e282e09f08eaa9e03b2237e8dae659e41a2f5fe7f091c9b31f22b3756bdd0f92b8eb6483d279c71b7fc6c99 + picocolors: "npm:^1.1.1" + checksum: 10/5097011bb1831b9eff8d7e1f2964fe265bab3bb7e97ad681985368dc41a853811c474d235ea793edf5e31ad49810744f16bbfff3623e7629ef757eb80858a832 languageName: node linkType: hard -"@react-native-community/cli-config@npm:20.0.0": - version: 20.0.0 - resolution: "@react-native-community/cli-config@npm:20.0.0" +"@react-native-community/cli-config@npm:20.1.0": + version: 20.1.0 + resolution: "@react-native-community/cli-config@npm:20.1.0" dependencies: - "@react-native-community/cli-tools": "npm:20.0.0" - chalk: "npm:^4.1.2" + "@react-native-community/cli-tools": "npm:20.1.0" cosmiconfig: "npm:^9.0.0" deepmerge: "npm:^4.3.0" fast-glob: "npm:^3.3.2" joi: "npm:^17.2.1" - checksum: 10/aaf5e5cb07105abe0eb179b2ed230f24546068780cee02986b5d71447f928f5bff0e2fbc84e02302cf60f2795da8fa919eb204da41f9421f2cfaec9dc53c98c7 + picocolors: "npm:^1.1.1" + checksum: 10/8d53c31641527a245be566992c6a13dc6711d8cfee4f65293ba169e0466c45c71af08a36e00dd550edfa74c1207f702293a8f07acd9a09a36320440e5922bb51 languageName: node linkType: hard -"@react-native-community/cli-doctor@npm:20.0.0": - version: 20.0.0 - resolution: "@react-native-community/cli-doctor@npm:20.0.0" +"@react-native-community/cli-doctor@npm:20.1.0": + version: 20.1.0 + resolution: "@react-native-community/cli-doctor@npm:20.1.0" dependencies: - "@react-native-community/cli-config": "npm:20.0.0" - "@react-native-community/cli-platform-android": "npm:20.0.0" - "@react-native-community/cli-platform-apple": "npm:20.0.0" - "@react-native-community/cli-platform-ios": "npm:20.0.0" - "@react-native-community/cli-tools": "npm:20.0.0" - chalk: "npm:^4.1.2" + "@react-native-community/cli-config": "npm:20.1.0" + "@react-native-community/cli-platform-android": "npm:20.1.0" + "@react-native-community/cli-platform-apple": "npm:20.1.0" + "@react-native-community/cli-platform-ios": "npm:20.1.0" + "@react-native-community/cli-tools": "npm:20.1.0" 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" + picocolors: "npm:^1.1.1" semver: "npm:^7.5.2" wcwidth: "npm:^1.0.1" yaml: "npm:^2.2.1" - checksum: 10/c78de0b83287c1db03e780123a83c3f26a8883dc54b5b3a1c34e2d3ed1050e39fbf597b95d8899f878b5ef61a89e05493c62d644e84293008eb4da73a4feb2a8 + checksum: 10/65101ca2da9d970245bcb09c4ce19ec9b75d9d8fac3dd3dfd857ed09a4e5336e4d4f10815b1a0e6211dfbfb66ef601a3df614aa20f2a57a869a09b71cd9850d8 languageName: node linkType: hard -"@react-native-community/cli-platform-android@npm:20.0.0": - version: 20.0.0 - resolution: "@react-native-community/cli-platform-android@npm:20.0.0" +"@react-native-community/cli-platform-android@npm:20.1.0": + version: 20.1.0 + resolution: "@react-native-community/cli-platform-android@npm:20.1.0" dependencies: - "@react-native-community/cli-config-android": "npm:20.0.0" - "@react-native-community/cli-tools": "npm:20.0.0" - chalk: "npm:^4.1.2" + "@react-native-community/cli-config-android": "npm:20.1.0" + "@react-native-community/cli-tools": "npm:20.1.0" execa: "npm:^5.0.0" logkitty: "npm:^0.7.1" - checksum: 10/a5b4da7a329e3723d4285f60b18068e78a18451cc948ef79088f1dfbfffc22413a7e94a3c3cc91aee27cf9438bb6b57212b5275e7e5d7af7db41011c4c628f12 + picocolors: "npm:^1.1.1" + checksum: 10/a98faac2a41272041d4643e81cd9950002b555a50bfb53567f72b4ea3e64295a0e5cb79c66fd06f1162a3c367d07114067a446a8849b71c8c4a1f8f0bdf7b199 languageName: node linkType: hard -"@react-native-community/cli-platform-apple@npm:20.0.0": - version: 20.0.0 - resolution: "@react-native-community/cli-platform-apple@npm:20.0.0" +"@react-native-community/cli-platform-apple@npm:20.1.0": + version: 20.1.0 + resolution: "@react-native-community/cli-platform-apple@npm:20.1.0" dependencies: - "@react-native-community/cli-config-apple": "npm:20.0.0" - "@react-native-community/cli-tools": "npm:20.0.0" - chalk: "npm:^4.1.2" + "@react-native-community/cli-config-apple": "npm:20.1.0" + "@react-native-community/cli-tools": "npm:20.1.0" execa: "npm:^5.0.0" fast-xml-parser: "npm:^4.4.1" - checksum: 10/a1a4c0fcdf9e3c819e0804de2447aed230d1f16c36107728374121deda60acd644550c0f5aeb98f6cd25846da9e6358617c67aaf895eab6e9a81cff1030cf8dd + picocolors: "npm:^1.1.1" + checksum: 10/8785ffa90d7c5398c1fa00dad37ad8e11b008bec56d6910b1d7d845e90a5b850da9fa51fd8296e7a604771d2e8623654e898f12c4c473ec027d02fc35e682f3b languageName: node linkType: hard -"@react-native-community/cli-platform-ios@npm:20.0.0": - version: 20.0.0 - resolution: "@react-native-community/cli-platform-ios@npm:20.0.0" +"@react-native-community/cli-platform-ios@npm:20.1.0": + version: 20.1.0 + resolution: "@react-native-community/cli-platform-ios@npm:20.1.0" dependencies: - "@react-native-community/cli-platform-apple": "npm:20.0.0" - checksum: 10/c7fc89332a7cb9fa71c1c5d4fe928d39b0514c74fdcc85251a7a35344f1f5e9e3b4cd23a85a70ce447dded6e6552a5edfa848cf07d8b26127a0c3b05ce3e1768 + "@react-native-community/cli-platform-apple": "npm:20.1.0" + checksum: 10/da425c68bb20ade47f6283eba247d210206ddd651c9f80191c1b6e92ee5978a35b69df7a96c323dad9a0cf4dce7236ab84f34d9a6c51aa1d776d61de48f657eb languageName: node linkType: hard -"@react-native-community/cli-server-api@npm:20.0.0": - version: 20.0.0 - resolution: "@react-native-community/cli-server-api@npm:20.0.0" +"@react-native-community/cli-server-api@npm:20.1.0": + version: 20.1.0 + resolution: "@react-native-community/cli-server-api@npm:20.1.0" dependencies: - "@react-native-community/cli-tools": "npm:20.0.0" + "@react-native-community/cli-tools": "npm:20.1.0" body-parser: "npm:^1.20.3" compression: "npm:^1.7.1" connect: "npm:^3.6.5" @@ -4100,82 +4193,82 @@ __metadata: pretty-format: "npm:^29.7.0" serve-static: "npm:^1.13.1" ws: "npm:^6.2.3" - checksum: 10/1d58c5a4a451c861db13065898f6c825b8c811fb37fa588fc76edede10d4899fd786055137339eda4033335db97630419017b4f843f4f36a1b00b37296710f47 + checksum: 10/cfa0fe00cb459459f254b94a770c85693b544e26f708a0ccf0b13bda76cfe8102a038ad9c81e2cf752b7abd4356c383180bdbb140ac2f9b063fdf53e48c411bf languageName: node linkType: hard -"@react-native-community/cli-tools@npm:20.0.0": - version: 20.0.0 - resolution: "@react-native-community/cli-tools@npm:20.0.0" +"@react-native-community/cli-tools@npm:20.1.0": + version: 20.1.0 + resolution: "@react-native-community/cli-tools@npm:20.1.0" dependencies: "@vscode/sudo-prompt": "npm:^9.0.0" appdirsjs: "npm:^1.2.4" - chalk: "npm:^4.1.2" execa: "npm:^5.0.0" find-up: "npm:^5.0.0" launch-editor: "npm:^2.9.1" mime: "npm:^2.4.1" ora: "npm:^5.4.1" + picocolors: "npm:^1.1.1" prompts: "npm:^2.4.2" semver: "npm:^7.5.2" - checksum: 10/5418844eb46e159d05d6ca4af38e054ffd157ae016576eed4d10bb3bdc345bdb8ca30e3cc5a27aff4a7a49727fd4b1da88f7855469ebbfbbdd042ad58951b764 + checksum: 10/f773a183a078fe2077a14405370840fb16a96b77ce2f0b3789b3383840d425657979f64793f8b38e6e9051106a9fa0cca7d062919479e24b1bd3df1692435578 languageName: node linkType: hard -"@react-native-community/cli-types@npm:20.0.0": - version: 20.0.0 - resolution: "@react-native-community/cli-types@npm:20.0.0" +"@react-native-community/cli-types@npm:20.1.0": + version: 20.1.0 + resolution: "@react-native-community/cli-types@npm:20.1.0" dependencies: joi: "npm:^17.2.1" - checksum: 10/b64b03ff09eb3952c37ba96544156f0b6ffa76e616361a48254e645f914beaa844943ff77ee1fba46445ef8b45f726109fc9ad249afb9d360602cb03db846368 + checksum: 10/1ae86701a98ac21d0e67f2fcce3859e44c2315c55076aaf82cf80ebf19e91fe95f177208803fddd562f6578549f6ee816356406b5ce106fa0a4e7d30f5aafcdc languageName: node linkType: hard -"@react-native-community/cli@npm:20.0.0": - version: 20.0.0 - resolution: "@react-native-community/cli@npm:20.0.0" +"@react-native-community/cli@npm:20.1.0": + version: 20.1.0 + resolution: "@react-native-community/cli@npm:20.1.0" dependencies: - "@react-native-community/cli-clean": "npm:20.0.0" - "@react-native-community/cli-config": "npm:20.0.0" - "@react-native-community/cli-doctor": "npm:20.0.0" - "@react-native-community/cli-server-api": "npm:20.0.0" - "@react-native-community/cli-tools": "npm:20.0.0" - "@react-native-community/cli-types": "npm:20.0.0" - chalk: "npm:^4.1.2" + "@react-native-community/cli-clean": "npm:20.1.0" + "@react-native-community/cli-config": "npm:20.1.0" + "@react-native-community/cli-doctor": "npm:20.1.0" + "@react-native-community/cli-server-api": "npm:20.1.0" + "@react-native-community/cli-tools": "npm:20.1.0" + "@react-native-community/cli-types": "npm:20.1.0" 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" + picocolors: "npm:^1.1.1" prompts: "npm:^2.4.2" semver: "npm:^7.5.2" bin: rnc-cli: build/bin.js - checksum: 10/9f52dce4f6c25d414ba4549153b70daef7708f5603f88f90147c9ec4dd29118f62995294eb20cb3f7c4018367bda66dac344d25ed0e9ffaad6b62a94b29ba75b + checksum: 10/edd3e93b45b68c3a1f3cd623d350293505a256bdac39e4dc5760c27ca9bc0cc7330e31f95688a8a068fd32edff91a9bf620b2ed8fdb2ee8b53b362c18a022d59 languageName: node linkType: hard -"@react-native/assets-registry@npm:0.83.0": - version: 0.83.0 - resolution: "@react-native/assets-registry@npm:0.83.0" - checksum: 10/9c314a311739e5ea555155df54821f888f3c61de6bcd71db60a253b27aefb42116892d487efb57a5ba99998c9835e1b123019bfe4397c087d0bcef38bad43c8c +"@react-native/assets-registry@npm:0.86.2": + version: 0.86.2 + resolution: "@react-native/assets-registry@npm:0.86.2" + checksum: 10/e2883510bc5fd655ea1caaea12dbd12e574a101e20b944a6d0a7ab1d0f80123bc2a41120618f35221901bad7d7a0dabb57b7f2b0847e5b39c16cba41b713aeec languageName: node linkType: hard -"@react-native/babel-plugin-codegen@npm:0.83.0": - version: 0.83.0 - resolution: "@react-native/babel-plugin-codegen@npm:0.83.0" +"@react-native/babel-plugin-codegen@npm:0.86.2": + version: 0.86.2 + resolution: "@react-native/babel-plugin-codegen@npm:0.86.2" dependencies: - "@babel/traverse": "npm:^7.25.3" - "@react-native/codegen": "npm:0.83.0" - checksum: 10/e43452305c2fcbfbc1647f1818241366a0924a6869ffae871cd86bffa7d6cd4d789edd1542f919a2f2906ebb2a425f4ad78766a4f3df8d5bc5317994d0a026f6 + "@babel/traverse": "npm:^7.29.0" + "@react-native/codegen": "npm:0.86.2" + checksum: 10/7e290dccb3c37d326fb078cf8725ed7cba4b85f0fe1fa538e9f56e4a425af13bd5776926be0890f5420ff706b0522e7582daa8a9c2647e510acc2bada99fd427 languageName: node linkType: hard -"@react-native/babel-preset@npm:0.83.0": - version: 0.83.0 - resolution: "@react-native/babel-preset@npm:0.83.0" +"@react-native/babel-preset@npm:0.86.2": + version: 0.86.2 + resolution: "@react-native/babel-preset@npm:0.86.2" dependencies: "@babel/core": "npm:^7.25.2" "@babel/plugin-proposal-export-default-from": "npm:^7.24.7" @@ -4183,27 +4276,19 @@ __metadata: "@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" @@ -4212,88 +4297,85 @@ __metadata: "@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.83.0" - babel-plugin-syntax-hermes-parser: "npm:0.32.0" + "@react-native/babel-plugin-codegen": "npm:0.86.2" + babel-plugin-syntax-hermes-parser: "npm:0.36.0" babel-plugin-transform-flow-enums: "npm:^0.0.2" react-refresh: "npm:^0.14.0" peerDependencies: "@babel/core": "*" - checksum: 10/c68fcec86eabdce17c83b2f500d6bf09d5f25755dccb10d1c0117522152331474d605ccfc7f53e4b9e3df63482616e1143d554897b76fcd7154a1f2079192f32 + checksum: 10/4d12187a4ee0c82784b6fddecef460ffd8166a5aaa73a309729ca00311d98f5f9c017fe9bb4c99d4cf8c65f0072a76460f97713df3e133acc6e2d1f806d88bb0 languageName: node linkType: hard -"@react-native/codegen@npm:0.83.0": - version: 0.83.0 - resolution: "@react-native/codegen@npm:0.83.0" +"@react-native/codegen@npm:0.86.2": + version: 0.86.2 + resolution: "@react-native/codegen@npm:0.86.2" dependencies: "@babel/core": "npm:^7.25.2" - "@babel/parser": "npm:^7.25.3" - glob: "npm:^7.1.1" - hermes-parser: "npm:0.32.0" + "@babel/parser": "npm:^7.29.0" + hermes-parser: "npm:0.36.0" invariant: "npm:^2.2.4" nullthrows: "npm:^1.1.1" + tinyglobby: "npm:^0.2.15" yargs: "npm:^17.6.2" peerDependencies: "@babel/core": "*" - checksum: 10/6a201c7760aa7404e869eca97ebbeb233eec318d4881c218b899a8c1534793bd1d17c6ff334c3ef827ccf5e43d90fbab6ca9d932af8f4bf19a8d5c8e9dc8f021 + checksum: 10/1e53ef322b099048fc21186bc2d21e1c4fc8437d19187ebabbad165bd033d88fc3f871f3a43c1fc788482f763205ea3df28e8a20b2c800aa84906f0135a536f0 languageName: node linkType: hard -"@react-native/community-cli-plugin@npm:0.83.0": - version: 0.83.0 - resolution: "@react-native/community-cli-plugin@npm:0.83.0" +"@react-native/community-cli-plugin@npm:0.86.2": + version: 0.86.2 + resolution: "@react-native/community-cli-plugin@npm:0.86.2" dependencies: - "@react-native/dev-middleware": "npm:0.83.0" + "@react-native/dev-middleware": "npm:0.86.2" debug: "npm:^4.4.0" invariant: "npm:^2.2.4" - metro: "npm:^0.83.3" - metro-config: "npm:^0.83.3" - metro-core: "npm:^0.83.3" + metro: "npm:^0.84.3" + metro-config: "npm:^0.84.3" + metro-core: "npm:^0.84.3" semver: "npm:^7.1.3" peerDependencies: "@react-native-community/cli": "*" - "@react-native/metro-config": "*" + "@react-native/metro-config": 0.86.2 peerDependenciesMeta: "@react-native-community/cli": optional: true "@react-native/metro-config": optional: true - checksum: 10/b0a664d828270c7be320c84b6f6f37dc08682d899157865cd8655f5bac99d2b990c9cc4dcaf57f4c284c698af41dd97bc4acd34fec5fc052f535c83a74cf0cb9 + checksum: 10/0fcce65bed24a7eac1ff59fbd8fa8dd92002cc54f1e96aceac524a01960c9ba730ca3dab8128a94ce80d7ab90169b935a248a3507d573cbdc30cc1eddeb7d322 languageName: node linkType: hard -"@react-native/debugger-frontend@npm:0.83.0": - version: 0.83.0 - resolution: "@react-native/debugger-frontend@npm:0.83.0" - checksum: 10/3f52e5400c24173f7619d35be95b6899f15e087e218d8ad580a5a931e908c2d0ef0e752619a73752bc5ed18f35a96fd38723c1967fa65f68e9f8cc6bd43972dc +"@react-native/debugger-frontend@npm:0.86.2": + version: 0.86.2 + resolution: "@react-native/debugger-frontend@npm:0.86.2" + checksum: 10/7636614ba8be9eaff9083708b979b0549d969ca8c6bd71386d6d931b5450c6e817af618b3ef30a916dd18ff00d57d97e6a6330fe85dc53aea3378c31784416fd languageName: node linkType: hard -"@react-native/debugger-shell@npm:0.83.0": - version: 0.83.0 - resolution: "@react-native/debugger-shell@npm:0.83.0" +"@react-native/debugger-shell@npm:0.86.2": + version: 0.86.2 + resolution: "@react-native/debugger-shell@npm:0.86.2" dependencies: cross-spawn: "npm:^7.0.6" + debug: "npm:^4.4.0" fb-dotslash: "npm:0.5.8" - checksum: 10/51b61131b90a9e09f259a5999759b77d9384cf9b0f38e4c4da1b63a1a729126349f9d20f51d599e527ebe5430945e2e1ddde17d933aa30c0775e2437694db50f + checksum: 10/5e6ca82ffdd2c64a611a23e67ecdc060b24c7d2e17149d2ddc159d6eb55da1d431956f729b8ce75c2cbc66eab1d9eb7a9a654f26dbf2dd57629c68d759a60a56 languageName: node linkType: hard -"@react-native/dev-middleware@npm:0.83.0": - version: 0.83.0 - resolution: "@react-native/dev-middleware@npm:0.83.0" +"@react-native/dev-middleware@npm:0.86.2": + version: 0.86.2 + resolution: "@react-native/dev-middleware@npm:0.86.2" dependencies: "@isaacs/ttlcache": "npm:^1.4.1" - "@react-native/debugger-frontend": "npm:0.83.0" - "@react-native/debugger-shell": "npm:0.83.0" + "@react-native/debugger-frontend": "npm:0.86.2" + "@react-native/debugger-shell": "npm:0.86.2" chrome-launcher: "npm:^0.15.2" - chromium-edge-launcher: "npm:^0.2.0" + chromium-edge-launcher: "npm:^0.3.0" connect: "npm:^3.6.5" debug: "npm:^4.4.0" invariant: "npm:^2.2.4" @@ -4301,122 +4383,137 @@ __metadata: open: "npm:^7.0.3" serve-static: "npm:^1.16.2" ws: "npm:^7.5.10" - checksum: 10/524df13d559e4593887b6183cedafb43ea0d6b07e4b04b527549efcce03e2809044937c7fc0c6483fc14fb237d74b0c706c2fd01825e3abb5a3cc009a27aba8b + checksum: 10/8db216e5ef1a74c27f31bf7b2a2f2c9ec8ee445d3bb5d7cbb482fa6ead21d5e2d6381a6fbcd398723c4fd73a2391dceb80602157f322b32f6c0c3d4909318e48 languageName: node linkType: hard -"@react-native/eslint-config@npm:0.83.0": - version: 0.83.0 - resolution: "@react-native/eslint-config@npm:0.83.0" +"@react-native/eslint-config@npm:0.86.2": + version: 0.86.2 + resolution: "@react-native/eslint-config@npm:0.86.2" dependencies: "@babel/core": "npm:^7.25.2" "@babel/eslint-parser": "npm:^7.25.1" - "@react-native/eslint-plugin": "npm:0.83.0" + "@react-native/eslint-plugin": "npm:0.86.2" "@typescript-eslint/eslint-plugin": "npm:^8.36.0" "@typescript-eslint/parser": "npm:^8.36.0" eslint-config-prettier: "npm:^8.5.0" eslint-plugin-eslint-comments: "npm:^3.2.0" eslint-plugin-ft-flow: "npm:^2.0.1" eslint-plugin-jest: "npm:^29.0.1" - eslint-plugin-react: "npm:^7.30.1" + eslint-plugin-react: "npm:^7.37.5" eslint-plugin-react-hooks: "npm:^7.0.1" - eslint-plugin-react-native: "npm:^4.0.0" + eslint-plugin-react-native: "npm:^5.0.0" peerDependencies: - eslint: ">=8" + eslint: ^8.0.0 || ^9.0.0 prettier: ">=2" - checksum: 10/57499395d2438257830aa745da0b5ce520a8c5bded4b300c6b86fbc5695a56ffe2d684559071066ec04686b2c7a1bfb688913ade7f0754ac9dff03871964a63b + checksum: 10/01ca8f576ced813986e05fe917b9531336f2db66fb988841ae8b92038b8119016c83d46796cf032936ed215e8d2980e6d06c44b8a2e4ca9d2d359f6a25c38d2a languageName: node linkType: hard -"@react-native/eslint-plugin@npm:0.83.0": - version: 0.83.0 - resolution: "@react-native/eslint-plugin@npm:0.83.0" - checksum: 10/aa62a1157094926b1cc616ad73887045a189b63e8d3d9b021633019ff92f1bbe5188b5f3c9cd110ea4c33cd3f696ab6b578ed3c1b347f6dc48adef2cf1cb3ecc +"@react-native/eslint-plugin@npm:0.86.2": + version: 0.86.2 + resolution: "@react-native/eslint-plugin@npm:0.86.2" + checksum: 10/c1371776c8157eee36f6e3dbfa9412487f67548ed88d907439fe827308be513785a43dc736787e9d5581dcb8597392984ed5673765d1463b0ad67951903e2362 languageName: node linkType: hard -"@react-native/gradle-plugin@npm:0.83.0": - version: 0.83.0 - resolution: "@react-native/gradle-plugin@npm:0.83.0" - checksum: 10/dcd7a47b21629a78a6f079a16a87d85ed78214dd19efafb054e7718624774b07e8c10572d054b9e31ac80c96148127a40da164b44e04e8aa434cfb93ead258fc +"@react-native/gradle-plugin@npm:0.86.2": + version: 0.86.2 + resolution: "@react-native/gradle-plugin@npm:0.86.2" + checksum: 10/48569f53908b2b3cf6075f298d19e2a1c171240c6b46ff3ffd21014af872bfda716c7df98dbb927b7a5c7849d16f2d3349a7bc3959f86e81c3057ac5c9c90e8d + languageName: node + linkType: hard + +"@react-native/jest-preset@npm:0.86.2": + version: 0.86.2 + resolution: "@react-native/jest-preset@npm:0.86.2" + dependencies: + "@jest/create-cache-key-function": "npm:^29.7.0" + "@react-native/js-polyfills": "npm:0.86.2" + babel-jest: "npm:^29.7.0" + jest-environment-node: "npm:^29.7.0" + regenerator-runtime: "npm:^0.13.2" + peerDependencies: + react: ^19.2.3 + checksum: 10/5b8b434fedee7982ae891145dad6b8a0f34b5d0fa0e6398196ea7df6f98b805a392da13253dde701a751534ecd20ea9a56b9b58d51641acc25d3fcc1ebca7429 languageName: node linkType: hard -"@react-native/js-polyfills@npm:0.83.0": - version: 0.83.0 - resolution: "@react-native/js-polyfills@npm:0.83.0" - checksum: 10/ce6b4d7586cb3abf866437f1590b496ab288bf19e4e4b9e58e5f6ccddb57926825cecad244ed80004f6624ad8a2b624c77becb3107c59cc27101791bf1807556 +"@react-native/js-polyfills@npm:0.86.2": + version: 0.86.2 + resolution: "@react-native/js-polyfills@npm:0.86.2" + checksum: 10/3c076d314c4e220e7722ceb6e03020433607e0ff330ed43d22b8013da134926a9a267d4dd82776256e780c3bf4452b5fded9b1c05ac8604669813c4bc70a7889 languageName: node linkType: hard -"@react-native/metro-babel-transformer@npm:0.83.0": - version: 0.83.0 - resolution: "@react-native/metro-babel-transformer@npm:0.83.0" +"@react-native/metro-babel-transformer@npm:0.86.2": + version: 0.86.2 + resolution: "@react-native/metro-babel-transformer@npm:0.86.2" dependencies: "@babel/core": "npm:^7.25.2" - "@react-native/babel-preset": "npm:0.83.0" - hermes-parser: "npm:0.32.0" + "@react-native/babel-preset": "npm:0.86.2" + hermes-parser: "npm:0.36.0" nullthrows: "npm:^1.1.1" peerDependencies: "@babel/core": "*" - checksum: 10/b87885155d6809ae5171a793a036e17b2c0489d1d5326f4852b07abedd6d8ee316c93466db451818d85f9f783dfd5652ece349a7bea9a9762e3eb829cc5598f8 + checksum: 10/3eee44b6bcf183ed3e18a7db9cf7ca751f62f6d594753f03f53a4ec3c2b0a939f9c1c5cca170480caa7ed62977b06481e4b2eaac2f3a3d27fd9930497f95bfdf languageName: node linkType: hard -"@react-native/metro-config@npm:0.83.0": - version: 0.83.0 - resolution: "@react-native/metro-config@npm:0.83.0" +"@react-native/metro-config@npm:0.86.2": + version: 0.86.2 + resolution: "@react-native/metro-config@npm:0.86.2" dependencies: - "@react-native/js-polyfills": "npm:0.83.0" - "@react-native/metro-babel-transformer": "npm:0.83.0" - metro-config: "npm:^0.83.3" - metro-runtime: "npm:^0.83.3" - checksum: 10/7316d21730443a38195ec1222c1de27a09b219c310d1bc057e0b9a9af503213d71ec9df387c65bbc3cadbb0b4dd1d5ee9958ab3b6b499d1f71a281c13e522614 + "@react-native/js-polyfills": "npm:0.86.2" + "@react-native/metro-babel-transformer": "npm:0.86.2" + metro-config: "npm:^0.84.3" + metro-runtime: "npm:^0.84.3" + checksum: 10/df2f2dad3bce2f72a019c1e829d946b3abe9e714b77519b44ea02e57a46fda205267ff8019e3598ed65ae431109f59c2322e8cc5bd5e1c6d5ea58203b5c2abad languageName: node linkType: hard -"@react-native/new-app-screen@npm:0.83.0": - version: 0.83.0 - resolution: "@react-native/new-app-screen@npm:0.83.0" +"@react-native/new-app-screen@npm:0.86.2": + version: 0.86.2 + resolution: "@react-native/new-app-screen@npm:0.86.2" peerDependencies: "@types/react": ^19.1.0 react: "*" - react-native: "*" + react-native: 0.86.2 peerDependenciesMeta: "@types/react": optional: true - checksum: 10/52b1641e2293a67da999f65d4122bbd0a7604175085a458f6fc27e1e66277da9e750cdaf9e1eb0b89da99b01773aa927c998f7bc689e5e3c30a8f43da87eb2dd + checksum: 10/ce6f7bb23308f2a73e0720352a5b3421c3e13bc80fc589a99ed990c26c5248bc4f95214d2eb6da9e07421ebd9e7dcd738a989a5555d5d67d0c7cf3543cb849d2 languageName: node linkType: hard -"@react-native/normalize-colors@npm:0.83.0": - version: 0.83.0 - resolution: "@react-native/normalize-colors@npm:0.83.0" - checksum: 10/84e3122bd0292ae9ee61a6d2997119196a5dc128ede7770a2a70e3b9de1b78f5f2a10b44dc683ce2652ad8f45767f249a74d1a86f7657a5dae7a377790512f68 +"@react-native/normalize-colors@npm:0.86.2": + version: 0.86.2 + resolution: "@react-native/normalize-colors@npm:0.86.2" + checksum: 10/876478b3010ab47e6a3335aeb9e1dc84a34fa9ce7c48cdf904a3ba9d289764f70b8306680522b0c8dd5db5b8358da525438fd22847577a47fe1a59e59bf7226e languageName: node linkType: hard -"@react-native/typescript-config@npm:0.83.0": - version: 0.83.0 - resolution: "@react-native/typescript-config@npm:0.83.0" - checksum: 10/ad256ffa3602a34539b5f94886c1ce7960537d6992a28d7bbc833996139394081dfbe2ae9f2e40cb505050e8d6c1c9d841330928218281637e34c1b9c5aa0366 +"@react-native/typescript-config@npm:0.86.2": + version: 0.86.2 + resolution: "@react-native/typescript-config@npm:0.86.2" + checksum: 10/9dce152daee53997017e3c27d69fa8b79f3898c15c2dd070e934eb0b13289c8cf2d099d3a3a17e50a14310d5a226bca99c2010c1ea6ac74c0991333501b411e6 languageName: node linkType: hard -"@react-native/virtualized-lists@npm:0.83.0": - version: 0.83.0 - resolution: "@react-native/virtualized-lists@npm:0.83.0" +"@react-native/virtualized-lists@npm:0.86.2": + version: 0.86.2 + resolution: "@react-native/virtualized-lists@npm:0.86.2" dependencies: invariant: "npm:^2.2.4" nullthrows: "npm:^1.1.1" peerDependencies: "@types/react": ^19.2.0 react: "*" - react-native: "*" + react-native: 0.86.2 peerDependenciesMeta: "@types/react": optional: true - checksum: 10/b51a3c0c110b6d259b6cf25fa4d143b03cbd6b637e5b33ea07453c0aa12a061e2f861a67c1b4089f96817ef46a1bd3709ecae3133026e92b77979b96a08bff06 + checksum: 10/a894716f737d797829afa8dda0324e7ff48d12918bef7b3e23c7351a34fa87e41d202a4618db7888e963ea107e758f68f6905307c5093a9fe2f24d38205ba0b3 languageName: node linkType: hard @@ -4970,7 +5067,17 @@ __metadata: languageName: node linkType: hard -"accepts@npm:^1.3.7, accepts@npm:~1.3.8": +"accepts@npm:^2.0.0": + version: 2.0.0 + resolution: "accepts@npm:2.0.0" + dependencies: + mime-types: "npm:^3.0.0" + negotiator: "npm:^1.0.0" + checksum: 10/ea1343992b40b2bfb3a3113fa9c3c2f918ba0f9197ae565c48d3f84d44b174f6b1d5cd9989decd7655963eb03a272abc36968cc439c2907f999bd5ef8653d5a7 + languageName: node + linkType: hard + +"accepts@npm:~1.3.8": version: 1.3.8 resolution: "accepts@npm:1.3.8" dependencies: @@ -5411,12 +5518,12 @@ __metadata: languageName: node linkType: hard -"babel-plugin-syntax-hermes-parser@npm:0.32.0": - version: 0.32.0 - resolution: "babel-plugin-syntax-hermes-parser@npm:0.32.0" +"babel-plugin-syntax-hermes-parser@npm:0.36.0": + version: 0.36.0 + resolution: "babel-plugin-syntax-hermes-parser@npm:0.36.0" dependencies: - hermes-parser: "npm:0.32.0" - checksum: 10/ec76abeefabf940e2d571db3b47d022a9be7602286133291e8e047d4855af6a8afc079e4631bc9a56209d751fad54b5199932a55753b1e2b56a719d20e2d5065 + hermes-parser: "npm:0.36.0" + checksum: 10/22489c19d416f1e071c046ab42d5dd475ed5b76514621f755f55b4e8019ecd665dce8da40be2a5436bbd5d4f2d258ebceda30601e078104ce11fe4371b7a36a0 languageName: node linkType: hard @@ -5732,7 +5839,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.2": +"chalk@npm:^4.0.0, chalk@npm:^4.1.0": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -5793,17 +5900,16 @@ __metadata: languageName: node linkType: hard -"chromium-edge-launcher@npm:^0.2.0": - version: 0.2.0 - resolution: "chromium-edge-launcher@npm:0.2.0" +"chromium-edge-launcher@npm:^0.3.0": + version: 0.3.0 + resolution: "chromium-edge-launcher@npm:0.3.0" dependencies: "@types/node": "npm:*" escape-string-regexp: "npm:^4.0.0" is-wsl: "npm:^2.2.0" lighthouse-logger: "npm:^1.0.0" mkdirp: "npm:^1.0.4" - rimraf: "npm:^3.0.2" - checksum: 10/9c58094cb6f149f8b9aae6937c5e60fee3cdf7e43a6902d8d70d2bc18878a0479f1637a5b44f6fbec5c84aa52972fc3ccba61b9984a584f3d98700e247d4ad94 + checksum: 10/1df5a42cb8bbcc01486b8ab4739341d493075e09715c2039fb2646056d6a6e533048a4274e53b7c4dcd477f205133e3dd4d8d095e0caaf08cefc2dc2627af9dc languageName: node linkType: hard @@ -7107,18 +7213,18 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react-native@npm:^4.0.0": - version: 4.1.0 - resolution: "eslint-plugin-react-native@npm:4.1.0" +"eslint-plugin-react-native@npm:^5.0.0": + version: 5.0.0 + resolution: "eslint-plugin-react-native@npm:5.0.0" dependencies: eslint-plugin-react-native-globals: "npm:^0.1.1" peerDependencies: - eslint: ^3.17.0 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: 10/fb2d65a3faca9bf775a0fa430eb7e86b7c27d0b256916d4f79a94def9ad353c8a10605f1f0dc9a5fb10e446b003341d53af9d8cbca4dd7ba394350355efa30c6 + eslint: ^3.17.0 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + checksum: 10/41e84d806b74e3b4906c5541cad0caf1c79e30031130a1f3e92f9c030fb12e9ee4b193ea7b6ed5c425f2d83795e7f3ca51ab357e7e8f1f3d89c12fd4613343be languageName: node linkType: hard -"eslint-plugin-react@npm:^7.30.1": +"eslint-plugin-react@npm:^7.37.5": version: 7.37.5 resolution: "eslint-plugin-react@npm:7.37.5" dependencies: @@ -8019,7 +8125,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4": +"glob@npm:^7.1.3, glob@npm:^7.1.4": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: @@ -8192,10 +8298,10 @@ __metadata: languageName: node linkType: hard -"hermes-compiler@npm:0.14.0": - version: 0.14.0 - resolution: "hermes-compiler@npm:0.14.0" - checksum: 10/880a5570770a977731f98fe2bedf5b7079e2e851a16e08ec89aeaa1de552e885734de3be513bc5633e5415fd1ac497b7b630aab75a46c359a5d30a243a1dcf11 +"hermes-compiler@npm:250829098.0.16": + version: 250829098.0.16 + resolution: "hermes-compiler@npm:250829098.0.16" + checksum: 10/49cd9558ed26ad2f11c897058f995fab113cf95b1ece9fda512045cebf60b75387aa0d2e7fdf3201b4d0102ea0d63963f7e7e4c3500c9dad2daa95e0c9f57146 languageName: node linkType: hard @@ -8213,10 +8319,17 @@ __metadata: languageName: node linkType: hard -"hermes-estree@npm:0.32.0": - version: 0.32.0 - resolution: "hermes-estree@npm:0.32.0" - checksum: 10/65a30a86a5a560152a2de1842c7bc7ecdadebd62e9cdd7d1809a824de7bc19e8d6a42907d3caff91d9f823862405d4b200447aa0bc25ba16072937e93d0acbd5 +"hermes-estree@npm:0.35.0": + version: 0.35.0 + resolution: "hermes-estree@npm:0.35.0" + checksum: 10/d10283d0189ab2270ecae08632ed4f15eb79f206add4960d198aa6efd5686e1c92ed37c17a020c730281e46ff2f56661f3d787bdfb1692218c1495b329049747 + languageName: node + linkType: hard + +"hermes-estree@npm:0.36.0": + version: 0.36.0 + resolution: "hermes-estree@npm:0.36.0" + checksum: 10/76f3fec9700a8ccb299cf53be22cd9038caf3bfba711370dd24f276444c1ed3c38c27fedd3097f6d9cccaa4dfaa4d02de0f8f02e208ab3fb00c97f8845b8aac5 languageName: node linkType: hard @@ -8229,12 +8342,21 @@ __metadata: languageName: node linkType: hard -"hermes-parser@npm:0.32.0": - version: 0.32.0 - resolution: "hermes-parser@npm:0.32.0" +"hermes-parser@npm:0.35.0": + version: 0.35.0 + resolution: "hermes-parser@npm:0.35.0" dependencies: - hermes-estree: "npm:0.32.0" - checksum: 10/496210490cb45e97df14796d94aec6c817c4cefa20f1dbe3ba1df323cc58c930033cfec93f3ecfad6b90e09166fc9ffc4f665843d25b4862523aa70dacbae81f + hermes-estree: "npm:0.35.0" + checksum: 10/62be25fa41b708db21c4db9153b0d60cfbf9bd4645f1712eb559b3be8c191266b5b381df60fbbc45416799f73c2361eb69a81eead21dc5159fe2ea72f946d5f7 + languageName: node + linkType: hard + +"hermes-parser@npm:0.36.0": + version: 0.36.0 + resolution: "hermes-parser@npm:0.36.0" + dependencies: + hermes-estree: "npm:0.36.0" + checksum: 10/81150c00bd8da17187f421a75e6e427187465386681427024f3dc51de996c44cee18fb062d95254028aa1f4ffcdbe7cbdeda50e6edece5c378c9f909067f5bae languageName: node linkType: hard @@ -8372,17 +8494,6 @@ __metadata: languageName: node linkType: hard -"image-size@npm:^1.0.2": - version: 1.2.1 - resolution: "image-size@npm:1.2.1" - dependencies: - queue: "npm:6.0.2" - bin: - image-size: bin/image-size.js - checksum: 10/b290c6cc5635565b1da51991472eb6522808430dbe3415823649723dc5f5fd8263f0f98f9bdec46184274ea24fe4f3f7a297c84b647b412e14d2208703dd8a19 - languageName: node - linkType: hard - "import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": version: 3.3.1 resolution: "import-fresh@npm:3.3.1" @@ -8436,7 +8547,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3, inherits@npm:~2.0.4": +"inherits@npm:2, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.4": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 10/cd45e923bee15186c07fa4c89db0aace24824c482fb887b528304694b2aa6ff8a898da8657046a5dcf3e46cd6db6c61629551f9215f208d7c3f157cf9b290521 @@ -10197,69 +10308,70 @@ __metadata: languageName: node linkType: hard -"metro-babel-transformer@npm:0.83.3": - version: 0.83.3 - resolution: "metro-babel-transformer@npm:0.83.3" +"metro-babel-transformer@npm:0.84.5": + version: 0.84.5 + resolution: "metro-babel-transformer@npm:0.84.5" dependencies: "@babel/core": "npm:^7.25.2" flow-enums-runtime: "npm:^0.0.6" - hermes-parser: "npm:0.32.0" + hermes-parser: "npm:0.35.0" + metro-cache-key: "npm:0.84.5" nullthrows: "npm:^1.1.1" - checksum: 10/dd178409d1718dae12dfffb6572ebc5bb78f1e0d7e93dce829c945957f8a686cb1b4c466c69585d7b982b3937fbea28d5c53a80691f2fc66717a0bcc800bc5b8 + checksum: 10/73694b1c2707fa69abad039327031e5e73e69e98fa2a438065246ca6fcf189bce68844f69b93f30ac174e31c19df26fed2c5f46381c5bd690e2a091dacdaaba3 languageName: node linkType: hard -"metro-cache-key@npm:0.83.3": - version: 0.83.3 - resolution: "metro-cache-key@npm:0.83.3" +"metro-cache-key@npm:0.84.5": + version: 0.84.5 + resolution: "metro-cache-key@npm:0.84.5" dependencies: flow-enums-runtime: "npm:^0.0.6" - checksum: 10/a6f9d2bf8b810f57d330d6f8f1ebf029e1224f426c5895f73d9bc1007482684048bfc7513a855626ee7f3ae72ca46e1b08cf983aefbfa84321bb7c0cef4ba4ae + checksum: 10/ad6d7980687391281b5ee498b2485fe7f65a0d74b43bb6d336bae892983d54722024a119c2ae71de8670ed7f2e6db840075e18b326e1fca6397043ad1a7d0114 languageName: node linkType: hard -"metro-cache@npm:0.83.3": - version: 0.83.3 - resolution: "metro-cache@npm:0.83.3" +"metro-cache@npm:0.84.5": + version: 0.84.5 + resolution: "metro-cache@npm:0.84.5" dependencies: exponential-backoff: "npm:^3.1.1" flow-enums-runtime: "npm:^0.0.6" https-proxy-agent: "npm:^7.0.5" - metro-core: "npm:0.83.3" - checksum: 10/4bc263ac92f176451710ebd330d156675e40f028be02eb9659a9b024db9897f3ad8510809d699969cb6f06dc0f06d85c38ca7162fb9a70be44510fa03270e089 + metro-core: "npm:0.84.5" + checksum: 10/5bfaf78412d044a861cc42455d008edb8f8ea4e11db39e4328fe9137ed0f68a74a22d1db46cf3232e59892f7a1c4d58d83d3ea88730bca0d51ed19f2939f9507 languageName: node linkType: hard -"metro-config@npm:0.83.3, metro-config@npm:^0.83.3": - version: 0.83.3 - resolution: "metro-config@npm:0.83.3" +"metro-config@npm:0.84.5, metro-config@npm:^0.84.3": + version: 0.84.5 + resolution: "metro-config@npm:0.84.5" dependencies: connect: "npm:^3.6.5" flow-enums-runtime: "npm:^0.0.6" jest-validate: "npm:^29.7.0" - metro: "npm:0.83.3" - metro-cache: "npm:0.83.3" - metro-core: "npm:0.83.3" - metro-runtime: "npm:0.83.3" + metro: "npm:0.84.5" + metro-cache: "npm:0.84.5" + metro-core: "npm:0.84.5" + metro-runtime: "npm:0.84.5" yaml: "npm:^2.6.1" - checksum: 10/e377c375a48afc85a4d742f80a17fc178f9af7f5b007375e65bb49472ad78bc8e1f0ba4399411310ee8b856fb767bd81bd6dae19bec6ef6a44f0ece4d8457b30 + checksum: 10/e4c4a98c34abf8b6fe7a3f31c02e7987bf89f1a0ac7e7297280b3e94a6aac1d38c8aeaccbb3abfe2f742a8ba3e9e6a90cc236ab5c2dabdc898e06f47ab465195 languageName: node linkType: hard -"metro-core@npm:0.83.3, metro-core@npm:^0.83.3": - version: 0.83.3 - resolution: "metro-core@npm:0.83.3" +"metro-core@npm:0.84.5, metro-core@npm:^0.84.3": + version: 0.84.5 + resolution: "metro-core@npm:0.84.5" dependencies: flow-enums-runtime: "npm:^0.0.6" lodash.throttle: "npm:^4.1.1" - metro-resolver: "npm:0.83.3" - checksum: 10/6ef06214faa1d727396d986f989a8150f699d73c5764c66e06e61b08017e462141a7b4c9ca63f67becee58ea1394b41aabfff441e644fc1e945c715e07c60612 + metro-resolver: "npm:0.84.5" + checksum: 10/e3b90d3f11421a73e070992c22e73d1f6f6d58694fee36383a233d75bfde284bdf01f8db66bb9acd51050875615b31cc72c4879176f66861d5d8adec674aa204 languageName: node linkType: hard -"metro-file-map@npm:0.83.3": - version: 0.83.3 - resolution: "metro-file-map@npm:0.83.3" +"metro-file-map@npm:0.84.5": + version: 0.84.5 + resolution: "metro-file-map@npm:0.84.5" dependencies: debug: "npm:^4.4.0" fb-watchman: "npm:^2.0.0" @@ -10270,146 +10382,143 @@ __metadata: micromatch: "npm:^4.0.4" nullthrows: "npm:^1.1.1" walker: "npm:^1.0.7" - checksum: 10/be621b144168b6a35567d4313557596df68ee61c1b9a067fbf8272ec3db7c2d9d76849c9b8d2331716d6839c3f8e243e2b715ca2551d7ffebbd206a34c19591a + checksum: 10/8ded0ed6d5d1ead1df88957ef875b1d6108bff61bd869e56a55ae46e682e1467b81bd1fcb5f7783f4beb7cf078334ebbc592827e903dbd76ed58ed9923038bc4 languageName: node linkType: hard -"metro-minify-terser@npm:0.83.3": - version: 0.83.3 - resolution: "metro-minify-terser@npm:0.83.3" +"metro-minify-terser@npm:0.84.5": + version: 0.84.5 + resolution: "metro-minify-terser@npm:0.84.5" dependencies: flow-enums-runtime: "npm:^0.0.6" terser: "npm:^5.15.0" - checksum: 10/1de88b70b7c903147807baa46497491a87600594fd0868b6538bbb9d7785242cabfbe8bccf36cc2285d0e17be72445b512d00c496952a159572545f3e6bcb199 + checksum: 10/85e884edadbbc4862ddd4bdb8a562de1b6d05338bbd40871ced8bc267bd4d40417776d32a786cfc6cafe2fce13ba9115c8d72b042fdb2ab7a7b5ab500643b5fb languageName: node linkType: hard -"metro-resolver@npm:0.83.3": - version: 0.83.3 - resolution: "metro-resolver@npm:0.83.3" +"metro-resolver@npm:0.84.5": + version: 0.84.5 + resolution: "metro-resolver@npm:0.84.5" dependencies: flow-enums-runtime: "npm:^0.0.6" - checksum: 10/a425376447505a088a365fc1fbe2753d452c0353a189f2c74833f2b30d6401de7ed90e36a927d355fa454d6c439a156eb66bcfcedfbbe8a78d313cf49acfbb4c + checksum: 10/601a26c5b143f857a7be6a03aceb9783f60e9526172017808479fae3c06e18bc3c16ffd0e0cbdc33ba0343a878a99545aee5923da8b4a5bd5672ef80584d9424 languageName: node linkType: hard -"metro-runtime@npm:0.83.3, metro-runtime@npm:^0.83.3": - version: 0.83.3 - resolution: "metro-runtime@npm:0.83.3" +"metro-runtime@npm:0.84.5, metro-runtime@npm:^0.84.3": + version: 0.84.5 + resolution: "metro-runtime@npm:0.84.5" dependencies: "@babel/runtime": "npm:^7.25.0" flow-enums-runtime: "npm:^0.0.6" - checksum: 10/bf916759a7178e1d12e131c64ac67d6015ba35ead7a178e6efedd23f12ec65de99f450fe7da0ffb6c6edbfeb3cd186d2006b979a1c1c588377ae54f5f5d7921d + checksum: 10/ea5977797c1c7908ce4612e8ed18b582158e7874368470f46e0cee1e19abbeff6dc233e52154d7821260087134882c96274dfeddd7586fdc023931d287cee471 languageName: node linkType: hard -"metro-source-map@npm:0.83.3, metro-source-map@npm:^0.83.3": - version: 0.83.3 - resolution: "metro-source-map@npm:0.83.3" +"metro-source-map@npm:0.84.5, metro-source-map@npm:^0.84.3": + version: 0.84.5 + resolution: "metro-source-map@npm:0.84.5" dependencies: - "@babel/traverse": "npm:^7.25.3" - "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3" - "@babel/types": "npm:^7.25.2" + "@babel/traverse": "npm:^7.29.0" + "@babel/types": "npm:^7.29.0" flow-enums-runtime: "npm:^0.0.6" invariant: "npm:^2.2.4" - metro-symbolicate: "npm:0.83.3" + metro-symbolicate: "npm:0.84.5" nullthrows: "npm:^1.1.1" - ob1: "npm:0.83.3" + ob1: "npm:0.84.5" source-map: "npm:^0.5.6" vlq: "npm:^1.0.0" - checksum: 10/1dcfce503628275f97dd85945ca575c71e5654fd8872b7d86449f3352cfc84ea7a59889b2aad012361245b5497e1e097db73390245952dcfb63258ba32fa90bf + checksum: 10/df78c1c6e31a800976a848eaa6aa1dc9736f18d7bc67a18196a73f923178ab3136c18b580263adca471004d9421b381ec6814bf5bf49ba515919f628e9a919af languageName: node linkType: hard -"metro-symbolicate@npm:0.83.3": - version: 0.83.3 - resolution: "metro-symbolicate@npm:0.83.3" +"metro-symbolicate@npm:0.84.5": + version: 0.84.5 + resolution: "metro-symbolicate@npm:0.84.5" dependencies: flow-enums-runtime: "npm:^0.0.6" invariant: "npm:^2.2.4" - metro-source-map: "npm:0.83.3" + metro-source-map: "npm:0.84.5" nullthrows: "npm:^1.1.1" source-map: "npm:^0.5.6" vlq: "npm:^1.0.0" bin: metro-symbolicate: src/index.js - checksum: 10/f3be0740655732044e92728a3bccd5f4a73ab2f9e4423ca05faee02446e9b2efd9400cc7bcd761fad9bc2a1b92855ce5b03bf13e0421a203fe179be40dcc9381 + checksum: 10/9725953c3df5e9b59bca7bf310b42fef48cbdf7134891307271e7ecf594d3d500d2a9ec2e98f3c1d71eade4bf036c275ec1f4d2b1943b22755d948d6b5023fc0 languageName: node linkType: hard -"metro-transform-plugins@npm:0.83.3": - version: 0.83.3 - resolution: "metro-transform-plugins@npm:0.83.3" +"metro-transform-plugins@npm:0.84.5": + version: 0.84.5 + resolution: "metro-transform-plugins@npm:0.84.5" dependencies: "@babel/core": "npm:^7.25.2" - "@babel/generator": "npm:^7.25.0" - "@babel/template": "npm:^7.25.0" - "@babel/traverse": "npm:^7.25.3" + "@babel/generator": "npm:^7.29.1" + "@babel/template": "npm:^7.28.6" + "@babel/traverse": "npm:^7.29.0" flow-enums-runtime: "npm:^0.0.6" nullthrows: "npm:^1.1.1" - checksum: 10/fa7efe6ab4f2ce5f66e1cb302f71341cf7fd55319cf360a269b187d2f507cecce8db8069f92585cf43517aee63e18cf6e66dd124db95c293902ab27c68ac43b1 + checksum: 10/929d5ea4a796d335c730ee9721a75eaf30e6068930f968a78b2e82f3bbb7edfa820910e8cd178127868872af1386044cfebf251c60a7f560f48b8fe105477f58 languageName: node linkType: hard -"metro-transform-worker@npm:0.83.3": - version: 0.83.3 - resolution: "metro-transform-worker@npm:0.83.3" +"metro-transform-worker@npm:0.84.5": + version: 0.84.5 + resolution: "metro-transform-worker@npm:0.84.5" dependencies: "@babel/core": "npm:^7.25.2" - "@babel/generator": "npm:^7.25.0" - "@babel/parser": "npm:^7.25.3" - "@babel/types": "npm:^7.25.2" + "@babel/generator": "npm:^7.29.1" + "@babel/parser": "npm:^7.29.0" + "@babel/types": "npm:^7.29.0" flow-enums-runtime: "npm:^0.0.6" - metro: "npm:0.83.3" - metro-babel-transformer: "npm:0.83.3" - metro-cache: "npm:0.83.3" - metro-cache-key: "npm:0.83.3" - metro-minify-terser: "npm:0.83.3" - metro-source-map: "npm:0.83.3" - metro-transform-plugins: "npm:0.83.3" + metro: "npm:0.84.5" + metro-babel-transformer: "npm:0.84.5" + metro-cache: "npm:0.84.5" + metro-cache-key: "npm:0.84.5" + metro-minify-terser: "npm:0.84.5" + metro-source-map: "npm:0.84.5" + metro-transform-plugins: "npm:0.84.5" nullthrows: "npm:^1.1.1" - checksum: 10/e6db9b54a9b21f4b06fc665321a7aebc6206dbac3976bda74bdf4d101dbd50f91b2e49163581ca1c27b684a4eecc2db988f0fc7aaeb200d2d947cb05d3e89f18 + checksum: 10/5facb1071dd73cf1e5e44eb4247c29478a967631a8b54683f0953aa68d361a2f8a667cb1f15f926718e6c1af9dd0a1e6e78e34a88401ec93e2c0966b3502c47e languageName: node linkType: hard -"metro@npm:0.83.3, metro@npm:^0.83.3": - version: 0.83.3 - resolution: "metro@npm:0.83.3" +"metro@npm:0.84.5, metro@npm:^0.84.3": + version: 0.84.5 + resolution: "metro@npm:0.84.5" dependencies: - "@babel/code-frame": "npm:^7.24.7" + "@babel/code-frame": "npm:^7.29.0" "@babel/core": "npm:^7.25.2" - "@babel/generator": "npm:^7.25.0" - "@babel/parser": "npm:^7.25.3" - "@babel/template": "npm:^7.25.0" - "@babel/traverse": "npm:^7.25.3" - "@babel/types": "npm:^7.25.2" - accepts: "npm:^1.3.7" - chalk: "npm:^4.0.0" + "@babel/generator": "npm:^7.29.1" + "@babel/parser": "npm:^7.29.0" + "@babel/template": "npm:^7.28.6" + "@babel/traverse": "npm:^7.29.0" + "@babel/types": "npm:^7.29.0" + accepts: "npm:^2.0.0" ci-info: "npm:^2.0.0" connect: "npm:^3.6.5" debug: "npm:^4.4.0" error-stack-parser: "npm:^2.0.6" flow-enums-runtime: "npm:^0.0.6" graceful-fs: "npm:^4.2.4" - hermes-parser: "npm:0.32.0" - image-size: "npm:^1.0.2" + hermes-parser: "npm:0.35.0" invariant: "npm:^2.2.4" jest-worker: "npm:^29.7.0" jsc-safe-url: "npm:^0.2.2" lodash.throttle: "npm:^4.1.1" - metro-babel-transformer: "npm:0.83.3" - metro-cache: "npm:0.83.3" - metro-cache-key: "npm:0.83.3" - metro-config: "npm:0.83.3" - metro-core: "npm:0.83.3" - metro-file-map: "npm:0.83.3" - metro-resolver: "npm:0.83.3" - metro-runtime: "npm:0.83.3" - metro-source-map: "npm:0.83.3" - metro-symbolicate: "npm:0.83.3" - metro-transform-plugins: "npm:0.83.3" - metro-transform-worker: "npm:0.83.3" - mime-types: "npm:^2.1.27" + metro-babel-transformer: "npm:0.84.5" + metro-cache: "npm:0.84.5" + metro-cache-key: "npm:0.84.5" + metro-config: "npm:0.84.5" + metro-core: "npm:0.84.5" + metro-file-map: "npm:0.84.5" + metro-resolver: "npm:0.84.5" + metro-runtime: "npm:0.84.5" + metro-source-map: "npm:0.84.5" + metro-symbolicate: "npm:0.84.5" + metro-transform-plugins: "npm:0.84.5" + metro-transform-worker: "npm:0.84.5" + mime-types: "npm:^3.0.1" nullthrows: "npm:^1.1.1" serialize-error: "npm:^2.1.0" source-map: "npm:^0.5.6" @@ -10418,7 +10527,7 @@ __metadata: yargs: "npm:^17.6.2" bin: metro: src/cli.js - checksum: 10/c989031710f02e51d3030660f1913870885647c5a216068333f7b4c43363f9ede03a9efb3b068b6750c6decab40f541376c3d81b32389d24932a46e10d19ebe1 + checksum: 10/d6c97cdbce2933db3ad2ee56b83a36c5b2673537899d116f301cca58bb70c3eb72c45fca63836565733834c1fec2c898822cb73001f3b193bff31c242a106545 languageName: node linkType: hard @@ -10455,7 +10564,16 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.27, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": +"mime-types@npm:^3.0.0, mime-types@npm:^3.0.1": + version: 3.0.2 + resolution: "mime-types@npm:3.0.2" + dependencies: + mime-db: "npm:^1.54.0" + checksum: 10/9db0ad31f5eff10ee8f848130779b7f2d056ddfdb6bda696cb69be68d486d33a3457b4f3f9bdeb60d0736edb471bd5a7c0a384375c011c51c889fd0d5c3b893e + languageName: node + linkType: hard + +"mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -10842,12 +10960,12 @@ __metadata: languageName: node linkType: hard -"ob1@npm:0.83.3": - version: 0.83.3 - resolution: "ob1@npm:0.83.3" +"ob1@npm:0.84.5": + version: 0.84.5 + resolution: "ob1@npm:0.84.5" dependencies: flow-enums-runtime: "npm:^0.0.6" - checksum: 10/20dfe91d48d0cadd97159cfd53f5abdca435b55d58b1f562e0687485e8f44f8a95e8ab3c835badd13d0d8c01e3d7b14d639a316aa4bf82841ac78b49611d4e5c + checksum: 10/7a0389c584b1068486d945e0300deef5f5732207aaec3666c1381aaa3ae1845210bb7eeb6aef61aae8c1eaa4231a7e393563d114a2cb6185d54bbaf619b65b2c languageName: node linkType: hard @@ -11571,15 +11689,6 @@ __metadata: languageName: node linkType: hard -"queue@npm:6.0.2": - version: 6.0.2 - resolution: "queue@npm:6.0.2" - dependencies: - inherits: "npm:~2.0.3" - checksum: 10/3437954ef1442c86ff01a0fbe3dc6222838823b1ca97f37eff651bc20b868c0c2904424ef2c0d44cba46055f54b578f92866e573125dc9a5e8823d751e4d1585 - languageName: node - linkType: hard - "range-parser@npm:~1.2.1": version: 1.2.1 resolution: "range-parser@npm:1.2.1" @@ -11649,10 +11758,10 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^19.2.0": - version: 19.2.3 - resolution: "react-is@npm:19.2.3" - checksum: 10/547ac397308204742447b5e4cf556cf09aa97f4cc1c95c4a28e4b2e73a7efab03e59d7b89b4a01f67bf9bf0ca87348a7f0e88bc87c0af6be458aaac1dec5e132 +"react-is@npm:^19.2.3": + version: 19.2.8 + resolution: "react-is@npm:19.2.8" + checksum: 10/09d053ff36e0ba4d47164baf9eab1c7772791f0371aa92281f0e547e0f6a5a5c8a1eb939aadd1a08b3c565958dd63ee59c746b6ac0d5ccb14ad742ac0314ab15 languageName: node linkType: hard @@ -11742,33 +11851,29 @@ __metadata: languageName: node linkType: hard -"react-native@npm:0.83.0": - version: 0.83.0 - resolution: "react-native@npm:0.83.0" +"react-native@npm:0.86.2": + version: 0.86.2 + resolution: "react-native@npm:0.86.2" dependencies: - "@jest/create-cache-key-function": "npm:^29.7.0" - "@react-native/assets-registry": "npm:0.83.0" - "@react-native/codegen": "npm:0.83.0" - "@react-native/community-cli-plugin": "npm:0.83.0" - "@react-native/gradle-plugin": "npm:0.83.0" - "@react-native/js-polyfills": "npm:0.83.0" - "@react-native/normalize-colors": "npm:0.83.0" - "@react-native/virtualized-lists": "npm:0.83.0" + "@react-native/assets-registry": "npm:0.86.2" + "@react-native/codegen": "npm:0.86.2" + "@react-native/community-cli-plugin": "npm:0.86.2" + "@react-native/gradle-plugin": "npm:0.86.2" + "@react-native/js-polyfills": "npm:0.86.2" + "@react-native/normalize-colors": "npm:0.86.2" + "@react-native/virtualized-lists": "npm:0.86.2" 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.32.0" + babel-plugin-syntax-hermes-parser: "npm:0.36.0" base64-js: "npm:^1.5.1" commander: "npm:^12.0.0" flow-enums-runtime: "npm:^0.0.6" - glob: "npm:^7.1.1" - hermes-compiler: "npm:0.14.0" + hermes-compiler: "npm:250829098.0.16" invariant: "npm:^2.2.4" - jest-environment-node: "npm:^29.7.0" memoize-one: "npm:^5.0.0" - metro-runtime: "npm:^0.83.3" - metro-source-map: "npm:^0.83.3" + metro-runtime: "npm:^0.84.3" + metro-source-map: "npm:^0.84.3" nullthrows: "npm:^1.1.1" pretty-format: "npm:^29.7.0" promise: "npm:^8.3.0" @@ -11778,48 +11883,48 @@ __metadata: scheduler: "npm:0.27.0" semver: "npm:^7.1.3" stacktrace-parser: "npm:^0.1.10" + tinyglobby: "npm:^0.2.15" whatwg-fetch: "npm:^3.0.0" ws: "npm:^7.5.10" yargs: "npm:^17.6.2" peerDependencies: + "@react-native/jest-preset": 0.86.2 "@types/react": ^19.1.1 - react: ^19.2.0 + react: ^19.2.3 peerDependenciesMeta: + "@react-native/jest-preset": + optional: true "@types/react": optional: true bin: react-native: cli.js - checksum: 10/78454fa89c2f5c8794d8d04c099c6d5f43f569696b6e04afb927181bcdcc73646921e428bd29b32a79c94678d572ec00c5d3355e7a43fa94d58065eed4ba78f2 + checksum: 10/d0a666a94572d208f46c406c5feac1d976af3033712d09fd31f2a4db51f52c8bc1ec67f3b405cf942315cd1b5eb730e9adfac5741083213f9438f4024023056a languageName: node linkType: hard -"react-native@patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch": - version: 0.83.0 - resolution: "react-native@patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch::version=0.83.0&hash=f8560f" +"react-native@patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch": + version: 0.86.2 + resolution: "react-native@patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch::version=0.86.2&hash=2a0c27" dependencies: - "@jest/create-cache-key-function": "npm:^29.7.0" - "@react-native/assets-registry": "npm:0.83.0" - "@react-native/codegen": "npm:0.83.0" - "@react-native/community-cli-plugin": "npm:0.83.0" - "@react-native/gradle-plugin": "npm:0.83.0" - "@react-native/js-polyfills": "npm:0.83.0" - "@react-native/normalize-colors": "npm:0.83.0" - "@react-native/virtualized-lists": "npm:0.83.0" + "@react-native/assets-registry": "npm:0.86.2" + "@react-native/codegen": "npm:0.86.2" + "@react-native/community-cli-plugin": "npm:0.86.2" + "@react-native/gradle-plugin": "npm:0.86.2" + "@react-native/js-polyfills": "npm:0.86.2" + "@react-native/normalize-colors": "npm:0.86.2" + "@react-native/virtualized-lists": "npm:0.86.2" 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.32.0" + babel-plugin-syntax-hermes-parser: "npm:0.36.0" base64-js: "npm:^1.5.1" commander: "npm:^12.0.0" flow-enums-runtime: "npm:^0.0.6" - glob: "npm:^7.1.1" - hermes-compiler: "npm:0.14.0" + hermes-compiler: "npm:250829098.0.16" invariant: "npm:^2.2.4" - jest-environment-node: "npm:^29.7.0" memoize-one: "npm:^5.0.0" - metro-runtime: "npm:^0.83.3" - metro-source-map: "npm:^0.83.3" + metro-runtime: "npm:^0.84.3" + metro-source-map: "npm:^0.84.3" nullthrows: "npm:^1.1.1" pretty-format: "npm:^29.7.0" promise: "npm:^8.3.0" @@ -11829,18 +11934,22 @@ __metadata: scheduler: "npm:0.27.0" semver: "npm:^7.1.3" stacktrace-parser: "npm:^0.1.10" + tinyglobby: "npm:^0.2.15" whatwg-fetch: "npm:^3.0.0" ws: "npm:^7.5.10" yargs: "npm:^17.6.2" peerDependencies: + "@react-native/jest-preset": 0.86.2 "@types/react": ^19.1.1 - react: ^19.2.0 + react: ^19.2.3 peerDependenciesMeta: + "@react-native/jest-preset": + optional: true "@types/react": optional: true bin: react-native: cli.js - checksum: 10/7cbda17babe8957971b509c9ef33af857c8f051d11f03c2636259752355ad64691b52f9af86efa854cf99dd19bf9bdb409ed239a91ed72b6909583ec996cb0d5 + checksum: 10/85d1e2bec23d640f076d64eb670a9fb47f04cf6c0b5aae935ae1f8bd8a0b6d92d70355c57ebf09f49a5661836c1b25fb888e701ce978e4cb9a34dc14f58fb184 languageName: node linkType: hard @@ -11851,22 +11960,22 @@ __metadata: languageName: node linkType: hard -"react-test-renderer@npm:19.2.0": - version: 19.2.0 - resolution: "react-test-renderer@npm:19.2.0" +"react-test-renderer@npm:19.2.3": + version: 19.2.3 + resolution: "react-test-renderer@npm:19.2.3" dependencies: - react-is: "npm:^19.2.0" + react-is: "npm:^19.2.3" scheduler: "npm:^0.27.0" peerDependencies: - react: ^19.2.0 - checksum: 10/1a072bf5c383ee9cec1eed5872114a25d8029e8fabe17a9154cbb7b5d6e5570711efc3e80e336d170bb1f60e29d395087147891fa198743d17c29ff86782cde3 + react: ^19.2.3 + checksum: 10/a9de4d869b1555a54c02e8701be262dfa669eb366ff5cdb43ba49fa516beae439cbec2c3e5606c909e773c232328993e231b393af5eef25e87a845d4c7fb00dc languageName: node linkType: hard -"react@npm:19.2.0": - version: 19.2.0 - resolution: "react@npm:19.2.0" - checksum: 10/e13bcdb8e994c3cfa922743cb75ca8deb60531bf02f584d2d8dab940a8132ce8a2e6ef16f8ed7f372b4072e7a7eeff589b2812dabbedfa73e6e46201dac8a9d0 +"react@npm:19.2.3": + version: 19.2.3 + resolution: "react@npm:19.2.3" + checksum: 10/d16b7f35c0d35a56f63d9d1693819762e4abc479c57dd6310298920bed3820fcec7e17a99d44983416d8f5049143ea45b8005d3ab8324bae8973224400502b08 languageName: node linkType: hard From 7c86ff54ac1118fdd9f42fe1ea4a7c339d950c9e Mon Sep 17 00:00:00 2001 From: huhuanming Date: Wed, 26 Aug 2026 01:33:44 +0800 Subject: [PATCH 2/7] fix: order iOS background runtime startup --- CHANGELOG.md | 8 ++++++++ native-modules/native-logger/package.json | 2 +- .../react-native-aes-crypto/package.json | 2 +- .../react-native-app-update/package.json | 2 +- .../react-native-async-storage/package.json | 2 +- .../ios/BackgroundThreadManager.h | 11 +++++++++++ .../ios/BackgroundThreadManager.mm | 18 +++++++++++++++++- .../package.json | 2 +- .../react-native-bundle-crypto/package.json | 2 +- .../react-native-bundle-update/package.json | 2 +- .../package.json | 2 +- .../react-native-cloud-fs/package.json | 2 +- .../react-native-cloud-kit-module/package.json | 2 +- .../react-native-device-utils/package.json | 2 +- .../react-native-dns-lookup/package.json | 2 +- .../package.json | 2 +- .../react-native-keychain-module/package.json | 2 +- .../react-native-lite-card/package.json | 2 +- .../react-native-network-info/package.json | 2 +- .../react-native-network-throttle/package.json | 2 +- .../react-native-pbkdf2/package.json | 2 +- .../react-native-perf-memory/package.json | 2 +- .../react-native-perf-stats/package.json | 2 +- native-modules/react-native-ping/package.json | 2 +- .../react-native-range-downloader/package.json | 2 +- .../react-native-sni-connect/package.json | 2 +- .../react-native-splash-screen/package.json | 2 +- .../package.json | 2 +- .../react-native-tcp-socket/package.json | 2 +- .../react-native-zip-archive/package.json | 2 +- .../react-native-auto-size-input/package.json | 2 +- .../react-native-chart-webview/package.json | 2 +- .../react-native-pager-view/package.json | 2 +- .../react-native-perp-depth-bar/package.json | 2 +- .../react-native-scroll-guard/package.json | 2 +- .../react-native-segment-slider/package.json | 2 +- .../react-native-skeleton/package.json | 2 +- .../react-native-tab-view/package.json | 2 +- 38 files changed, 71 insertions(+), 36 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aaadc48f..7a0043c4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,14 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +## [3.0.90] - 2026-08-26 + +### Bug Fixes +- **background-thread (iOS)**: Add an ordered startup API that waits for the main JS runtime's shared bridge installation before creating an Expo-backed background runtime, preventing concurrent Expo module registration crashes. + +### Chores +- Bump all publishable packages to 3.0.90. + ## [3.0.89] - 2026-08-25 ### Bug Fixes diff --git a/native-modules/native-logger/package.json b/native-modules/native-logger/package.json index de6f0764..e85dbfe2 100644 --- a/native-modules/native-logger/package.json +++ b/native-modules/native-logger/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-native-logger", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-native-logger", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-aes-crypto/package.json b/native-modules/react-native-aes-crypto/package.json index ed35fe89..86f99162 100644 --- a/native-modules/react-native-aes-crypto/package.json +++ b/native-modules/react-native-aes-crypto/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-aes-crypto", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-aes-crypto", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-app-update/package.json b/native-modules/react-native-app-update/package.json index 92e447c0..51d93935 100644 --- a/native-modules/react-native-app-update/package.json +++ b/native-modules/react-native-app-update/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-app-update", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-app-update", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-async-storage/package.json b/native-modules/react-native-async-storage/package.json index 9a0e3aac..97895cc8 100644 --- a/native-modules/react-native-async-storage/package.json +++ b/native-modules/react-native-async-storage/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-async-storage", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-async-storage", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-background-thread/ios/BackgroundThreadManager.h b/native-modules/react-native-background-thread/ios/BackgroundThreadManager.h index 09185f60..bccbf782 100644 --- a/native-modules/react-native-background-thread/ios/BackgroundThreadManager.h +++ b/native-modules/react-native-background-thread/ios/BackgroundThreadManager.h @@ -66,6 +66,17 @@ typedef NS_ENUM(NSInteger, EBgMgrSegmentEvalError) { /// @param host The RCTHost for the main runtime + (void)installSharedBridgeInMainRuntime:(RCTHost *)host; +/// Install the main-runtime bridge and start the background runtime only after +/// that installation has executed on the main JS runtime. Expo initializes its +/// module registry on the JS thread, so this ordered entry point prevents a +/// second Expo-backed runtime from registering modules during foreground +/// runtime startup. +/// +/// @param host The RCTHost for the main runtime +/// @param entryURL The custom entry URL for the background runner ++ (void)installSharedBridgeInMainRuntime:(RCTHost *)host + thenStartBackgroundRunnerWithEntryURL:(NSString *)entryURL; + /// Start background runner with default entry URL - (void)startBackgroundRunner; diff --git a/native-modules/react-native-background-thread/ios/BackgroundThreadManager.mm b/native-modules/react-native-background-thread/ios/BackgroundThreadManager.mm index 08000379..3bebe7bc 100644 --- a/native-modules/react-native-background-thread/ios/BackgroundThreadManager.mm +++ b/native-modules/react-native-background-thread/ios/BackgroundThreadManager.mm @@ -185,7 +185,8 @@ - (instancetype)init { #pragma mark - SharedBridge -+ (void)installSharedBridgeInMainRuntime:(RCTHost *)host { ++ (void)installSharedBridgeInMainRuntime:(RCTHost *)host + completion:(dispatch_block_t)completion { if (!host) { [BTLogger error:@"Cannot install SharedBridge: RCTHost is nil"]; return; @@ -225,6 +226,21 @@ + (void)installSharedBridgeInMainRuntime:(RCTHost *)host { // reload observer reads this to detect host hostDidStart: omissions. [BackgroundThreadManager sharedInstance].mainSharedBridgeInstalled = YES; [BTLogger info:@"SharedStore and SharedRPC installed in main runtime"]; + if (completion) { + completion(); + } + }]; +} + ++ (void)installSharedBridgeInMainRuntime:(RCTHost *)host { + [self installSharedBridgeInMainRuntime:host completion:nil]; +} + ++ (void)installSharedBridgeInMainRuntime:(RCTHost *)host + thenStartBackgroundRunnerWithEntryURL:(NSString *)entryURL { + [self installSharedBridgeInMainRuntime:host completion:^{ + [[BackgroundThreadManager sharedInstance] + startBackgroundRunnerWithEntryURL:entryURL]; }]; } diff --git a/native-modules/react-native-background-thread/package.json b/native-modules/react-native-background-thread/package.json index efbbefea..e4eb5071 100644 --- a/native-modules/react-native-background-thread/package.json +++ b/native-modules/react-native-background-thread/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-background-thread", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-background-thread", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-bundle-crypto/package.json b/native-modules/react-native-bundle-crypto/package.json index 3e17f338..c6ecd9d4 100644 --- a/native-modules/react-native-bundle-crypto/package.json +++ b/native-modules/react-native-bundle-crypto/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-bundle-crypto", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-bundle-crypto", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-bundle-update/package.json b/native-modules/react-native-bundle-update/package.json index 94d205ae..2b657b20 100644 --- a/native-modules/react-native-bundle-update/package.json +++ b/native-modules/react-native-bundle-update/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-bundle-update", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-bundle-update", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-check-biometric-auth-changed/package.json b/native-modules/react-native-check-biometric-auth-changed/package.json index c90b0079..a8aa4013 100644 --- a/native-modules/react-native-check-biometric-auth-changed/package.json +++ b/native-modules/react-native-check-biometric-auth-changed/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-check-biometric-auth-changed", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-check-biometric-auth-changed", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-cloud-fs/package.json b/native-modules/react-native-cloud-fs/package.json index 04d6b115..2d1484fa 100644 --- a/native-modules/react-native-cloud-fs/package.json +++ b/native-modules/react-native-cloud-fs/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-cloud-fs", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-cloud-fs TurboModule for OneKey", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-cloud-kit-module/package.json b/native-modules/react-native-cloud-kit-module/package.json index 6f0bfe38..2cac44c8 100644 --- a/native-modules/react-native-cloud-kit-module/package.json +++ b/native-modules/react-native-cloud-kit-module/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-cloud-kit-module", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-cloud-kit-module", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-device-utils/package.json b/native-modules/react-native-device-utils/package.json index 689427c3..e3c00a05 100644 --- a/native-modules/react-native-device-utils/package.json +++ b/native-modules/react-native-device-utils/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-device-utils", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-device-utils", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-dns-lookup/package.json b/native-modules/react-native-dns-lookup/package.json index 43658713..dc55ab1a 100644 --- a/native-modules/react-native-dns-lookup/package.json +++ b/native-modules/react-native-dns-lookup/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-dns-lookup", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-dns-lookup", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-get-random-values/package.json b/native-modules/react-native-get-random-values/package.json index de371591..4718e2d4 100644 --- a/native-modules/react-native-get-random-values/package.json +++ b/native-modules/react-native-get-random-values/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-get-random-values", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-get-random-values", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-keychain-module/package.json b/native-modules/react-native-keychain-module/package.json index eb094f2c..7cab5871 100644 --- a/native-modules/react-native-keychain-module/package.json +++ b/native-modules/react-native-keychain-module/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-keychain-module", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-keychain-module", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-lite-card/package.json b/native-modules/react-native-lite-card/package.json index 47c816f3..8344e0d5 100644 --- a/native-modules/react-native-lite-card/package.json +++ b/native-modules/react-native-lite-card/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-lite-card", - "version": "3.0.89", + "version": "3.0.90", "description": "lite card", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-network-info/package.json b/native-modules/react-native-network-info/package.json index 994c5648..1167d1f3 100644 --- a/native-modules/react-native-network-info/package.json +++ b/native-modules/react-native-network-info/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-network-info", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-network-info", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-network-throttle/package.json b/native-modules/react-native-network-throttle/package.json index afe8f766..1fb4ed38 100644 --- a/native-modules/react-native-network-throttle/package.json +++ b/native-modules/react-native-network-throttle/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-network-throttle", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-network-throttle", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-pbkdf2/package.json b/native-modules/react-native-pbkdf2/package.json index cc87bd75..21928306 100644 --- a/native-modules/react-native-pbkdf2/package.json +++ b/native-modules/react-native-pbkdf2/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-pbkdf2", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-pbkdf2", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-perf-memory/package.json b/native-modules/react-native-perf-memory/package.json index 98d58693..dbfcf847 100644 --- a/native-modules/react-native-perf-memory/package.json +++ b/native-modules/react-native-perf-memory/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-perf-memory", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-perf-memory", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-perf-stats/package.json b/native-modules/react-native-perf-stats/package.json index a414fe04..4a6f4495 100644 --- a/native-modules/react-native-perf-stats/package.json +++ b/native-modules/react-native-perf-stats/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-perf-stats", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-perf-stats", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-ping/package.json b/native-modules/react-native-ping/package.json index d145d44d..d78f6f8f 100644 --- a/native-modules/react-native-ping/package.json +++ b/native-modules/react-native-ping/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-ping", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-ping TurboModule for OneKey", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-range-downloader/package.json b/native-modules/react-native-range-downloader/package.json index d4627bf8..d1dd5faf 100644 --- a/native-modules/react-native-range-downloader/package.json +++ b/native-modules/react-native-range-downloader/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-range-downloader", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-range-downloader", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-sni-connect/package.json b/native-modules/react-native-sni-connect/package.json index 61a59118..da424f9a 100644 --- a/native-modules/react-native-sni-connect/package.json +++ b/native-modules/react-native-sni-connect/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-sni-connect", - "version": "3.0.89", + "version": "3.0.90", "description": "A React Native library for SNI-based HTTP requests with DNS caching and request management", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-splash-screen/package.json b/native-modules/react-native-splash-screen/package.json index db2537ac..36e33dfd 100644 --- a/native-modules/react-native-splash-screen/package.json +++ b/native-modules/react-native-splash-screen/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-splash-screen", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-splash-screen", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-split-bundle-loader/package.json b/native-modules/react-native-split-bundle-loader/package.json index 36741f36..58132b24 100644 --- a/native-modules/react-native-split-bundle-loader/package.json +++ b/native-modules/react-native-split-bundle-loader/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-split-bundle-loader", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-split-bundle-loader", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-tcp-socket/package.json b/native-modules/react-native-tcp-socket/package.json index bd93819c..6ac086c4 100644 --- a/native-modules/react-native-tcp-socket/package.json +++ b/native-modules/react-native-tcp-socket/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-tcp-socket", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-tcp-socket", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-zip-archive/package.json b/native-modules/react-native-zip-archive/package.json index 0dcd7404..ae781831 100644 --- a/native-modules/react-native-zip-archive/package.json +++ b/native-modules/react-native-zip-archive/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-zip-archive", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-zip-archive Nitro HybridObject for OneKey", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-views/react-native-auto-size-input/package.json b/native-views/react-native-auto-size-input/package.json index 2599ee90..b270645e 100644 --- a/native-views/react-native-auto-size-input/package.json +++ b/native-views/react-native-auto-size-input/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-auto-size-input", - "version": "3.0.89", + "version": "3.0.90", "description": "Auto-sizing text input with font scaling, prefix and suffix support", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-views/react-native-chart-webview/package.json b/native-views/react-native-chart-webview/package.json index e0e0c695..1f73a3d4 100644 --- a/native-views/react-native-chart-webview/package.json +++ b/native-views/react-native-chart-webview/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-chart-webview", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-chart-webview", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-views/react-native-pager-view/package.json b/native-views/react-native-pager-view/package.json index 76193db8..dd200be4 100644 --- a/native-views/react-native-pager-view/package.json +++ b/native-views/react-native-pager-view/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-pager-view", - "version": "3.0.89", + "version": "3.0.90", "description": "React Native wrapper for Android and iOS ViewPager", "source": "./src/index.tsx", "main": "./lib/module/index.js", diff --git a/native-views/react-native-perp-depth-bar/package.json b/native-views/react-native-perp-depth-bar/package.json index 8949375b..5a553f2a 100644 --- a/native-views/react-native-perp-depth-bar/package.json +++ b/native-views/react-native-perp-depth-bar/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-perp-depth-bar", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-perp-depth-bar", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-views/react-native-scroll-guard/package.json b/native-views/react-native-scroll-guard/package.json index 401b58a3..5f2c86bd 100644 --- a/native-views/react-native-scroll-guard/package.json +++ b/native-views/react-native-scroll-guard/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-scroll-guard", - "version": "3.0.89", + "version": "3.0.90", "description": "A native view wrapper that prevents parent scrollable containers (PagerView/ViewPager2) from intercepting child scroll gestures", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-views/react-native-segment-slider/package.json b/native-views/react-native-segment-slider/package.json index 973ad187..d9dff0b3 100644 --- a/native-views/react-native-segment-slider/package.json +++ b/native-views/react-native-segment-slider/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-segment-slider", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-segment-slider", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-views/react-native-skeleton/package.json b/native-views/react-native-skeleton/package.json index f39241d4..2342d6fb 100644 --- a/native-views/react-native-skeleton/package.json +++ b/native-views/react-native-skeleton/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-skeleton", - "version": "3.0.89", + "version": "3.0.90", "description": "react-native-skeleton", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-views/react-native-tab-view/package.json b/native-views/react-native-tab-view/package.json index bda6e7c7..39588a11 100644 --- a/native-views/react-native-tab-view/package.json +++ b/native-views/react-native-tab-view/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-tab-view", - "version": "3.0.89", + "version": "3.0.90", "description": "Native Bottom Tabs for React Native (UIKit implementation)", "source": "./src/index.tsx", "main": "./lib/module/index.js", From 6c570abf22e4a4c6033ed7cdf0b6fb55817a0534 Mon Sep 17 00:00:00 2001 From: huhuanming Date: Wed, 26 Aug 2026 14:55:46 +0800 Subject: [PATCH 3/7] fix: address React Native 0.86 review issues --- example/react-native/ios/Podfile.lock | 140 +++++++++++++------------- scripts/setup-nitro-module.js | 2 +- 2 files changed, 71 insertions(+), 71 deletions(-) diff --git a/example/react-native/ios/Podfile.lock b/example/react-native/ios/Podfile.lock index b901372b..5b23d995 100644 --- a/example/react-native/ios/Podfile.lock +++ b/example/react-native/ios/Podfile.lock @@ -1,5 +1,5 @@ PODS: - - AesCrypto (3.0.88): + - AesCrypto (3.0.90): - hermes-engine - RCTRequired - RCTTypeSafety @@ -21,7 +21,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - AsyncStorage (3.0.88): + - AsyncStorage (3.0.90): - hermes-engine - RCTRequired - RCTTypeSafety @@ -43,7 +43,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - AutoSizeInput (3.0.88): + - AutoSizeInput (3.0.90): - hermes-engine - NitroModules - RCTRequired @@ -67,7 +67,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - BackgroundThread (3.0.88): + - BackgroundThread (3.0.90): - hermes-engine - RCTRequired - RCTTypeSafety @@ -90,7 +90,7 @@ PODS: - ReactNativeDependencies - ReactNativeNativeLogger - Yoga - - ChartWebview (3.0.88): + - ChartWebview (3.0.90): - hermes-engine - NitroModules - RCTRequired @@ -115,7 +115,7 @@ PODS: - ReactNativeDependencies - ReactNativeNativeLogger - Yoga - - CloudFs (3.0.88): + - CloudFs (3.0.90): - hermes-engine - RCTRequired - RCTTypeSafety @@ -137,7 +137,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - CloudKitModule (3.0.88): + - CloudKitModule (3.0.90): - hermes-engine - NitroModules - RCTRequired @@ -165,7 +165,7 @@ PODS: - CocoaLumberjack/Core (3.9.1) - CocoaLumberjack/Swift (3.9.1): - CocoaLumberjack/Core - - DnsLookup (3.0.88): + - DnsLookup (3.0.90): - hermes-engine - RCTRequired - RCTTypeSafety @@ -194,7 +194,7 @@ PODS: - hermes-engine (250829098.0.16): - hermes-engine/Pre-built (= 250829098.0.16) - hermes-engine/Pre-built (250829098.0.16) - - KeychainModule (3.0.88): + - KeychainModule (3.0.90): - hermes-engine - NitroModules - RCTRequired @@ -222,7 +222,7 @@ PODS: - MMKV (2.4.0): - MMKVCore (~> 2.4.0) - MMKVCore (2.4.0) - - NetworkInfo (3.0.88): + - NetworkInfo (3.0.90): - hermes-engine - RCTRequired - RCTTypeSafety @@ -292,7 +292,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - Pbkdf2 (3.0.88): + - Pbkdf2 (3.0.90): - hermes-engine - RCTRequired - RCTTypeSafety @@ -314,7 +314,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - PerpDepthBar (3.0.88): + - PerpDepthBar (3.0.90): - hermes-engine - NitroModules - RCTRequired @@ -338,7 +338,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - Ping (3.0.88): + - Ping (3.0.90): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1783,7 +1783,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - react-native-pager-view (3.0.88): + - react-native-pager-view (3.0.90): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1874,7 +1874,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - react-native-tab-view (3.0.88): + - react-native-tab-view (3.0.90): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1886,7 +1886,7 @@ PODS: - React-graphics - React-ImageManager - React-jsi - - react-native-tab-view/common (= 3.0.88) + - react-native-tab-view/common (= 3.0.90) - React-NativeModulesApple - React-RCTFabric - React-renderercss @@ -1897,7 +1897,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - react-native-tab-view/common (3.0.88): + - react-native-tab-view/common (3.0.90): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2315,7 +2315,7 @@ PODS: - React-perflogger (= 0.86.2) - React-utils (= 0.86.2) - ReactNativeDependencies - - ReactNativeAppUpdate (3.0.88): + - ReactNativeAppUpdate (3.0.90): - hermes-engine - NitroModules - RCTRequired @@ -2340,7 +2340,7 @@ PODS: - ReactNativeDependencies - ReactNativeNativeLogger - Yoga - - ReactNativeBundleCrypto (3.0.88): + - ReactNativeBundleCrypto (3.0.90): - hermes-engine - NitroModules - RCTRequired @@ -2365,7 +2365,7 @@ PODS: - ReactNativeDependencies - ReactNativeNativeLogger - Yoga - - ReactNativeBundleUpdate (3.0.88): + - ReactNativeBundleUpdate (3.0.90): - hermes-engine - MMKV (= 2.4.0) - NitroModules @@ -2394,7 +2394,7 @@ PODS: - ReactNativeRangeDownloader - SSZipArchive (>= 2.5.4) - Yoga - - ReactNativeCheckBiometricAuthChanged (3.0.88): + - ReactNativeCheckBiometricAuthChanged (3.0.90): - hermes-engine - NitroModules - RCTRequired @@ -2420,7 +2420,7 @@ PODS: - ReactNativeNativeLogger - Yoga - ReactNativeDependencies (0.86.2) - - ReactNativeDeviceUtils (3.0.88): + - ReactNativeDeviceUtils (3.0.90): - hermes-engine - NitroModules - RCTRequired @@ -2445,7 +2445,7 @@ PODS: - ReactNativeDependencies - ReactNativeNativeLogger - Yoga - - ReactNativeGetRandomValues (3.0.88): + - ReactNativeGetRandomValues (3.0.90): - hermes-engine - NitroModules - RCTRequired @@ -2470,7 +2470,7 @@ PODS: - ReactNativeDependencies - ReactNativeNativeLogger - Yoga - - ReactNativeLiteCard (3.0.88): + - ReactNativeLiteCard (3.0.90): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2493,7 +2493,7 @@ PODS: - ReactNativeDependencies - ReactNativeNativeLogger - Yoga - - ReactNativeNativeLogger (3.0.88): + - ReactNativeNativeLogger (3.0.90): - CocoaLumberjack/Swift (~> 3.8) - hermes-engine - NitroModules @@ -2518,7 +2518,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - ReactNativePerfMemory (3.0.88): + - ReactNativePerfMemory (3.0.90): - hermes-engine - NitroModules - RCTRequired @@ -2543,7 +2543,7 @@ PODS: - ReactNativeDependencies - ReactNativeNativeLogger - Yoga - - ReactNativePerfStats (3.0.88): + - ReactNativePerfStats (3.0.90): - hermes-engine - NitroModules - RCTRequired @@ -2568,7 +2568,7 @@ PODS: - ReactNativeDependencies - ReactNativeNativeLogger - Yoga - - ReactNativeRangeDownloader (3.0.88): + - ReactNativeRangeDownloader (3.0.90): - hermes-engine - NitroModules - RCTRequired @@ -2594,7 +2594,7 @@ PODS: - ReactNativeNativeLogger - SSZipArchive (= 2.5.5) - Yoga - - ReactNativeSplashScreen (3.0.88): + - ReactNativeSplashScreen (3.0.90): - hermes-engine - NitroModules - RCTRequired @@ -2619,7 +2619,7 @@ PODS: - ReactNativeDependencies - ReactNativeNativeLogger - Yoga - - ReactNativeZipArchive (3.0.88): + - ReactNativeZipArchive (3.0.90): - hermes-engine - NitroModules - RCTRequired @@ -2690,7 +2690,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - ScrollGuard (3.0.88): + - ScrollGuard (3.0.90): - hermes-engine - NitroModules - RCTRequired @@ -2714,7 +2714,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - SegmentSlider (3.0.88): + - SegmentSlider (3.0.90): - hermes-engine - NitroModules - RCTRequired @@ -2738,7 +2738,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - Skeleton (3.0.88): + - Skeleton (3.0.90): - hermes-engine - NitroModules - RCTRequired @@ -2762,7 +2762,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - SniConnect (3.0.88): + - SniConnect (3.0.90): - EMASCurl (= 1.5.5) - hermes-engine - RCTRequired @@ -2786,7 +2786,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - SplitBundleLoader (3.0.88): + - SplitBundleLoader (3.0.90): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2810,7 +2810,7 @@ PODS: - ReactNativeNativeLogger - Yoga - SSZipArchive (2.5.5) - - TcpSocket (3.0.88): + - TcpSocket (3.0.90): - hermes-engine - RCTRequired - RCTTypeSafety @@ -3190,27 +3190,27 @@ EXTERNAL SOURCES: :path: "../../../node_modules/react-native/ReactCommon/yoga" SPEC CHECKSUMS: - AesCrypto: 7e4ba5fa9ec30800ae5d0f3dbebbc1c1cfab658d - AsyncStorage: e3614e1d739fb86369c040cd60990584ba7724b9 - AutoSizeInput: f9343c08a53433de91afe2d8c6b6883ad2de5fae - BackgroundThread: 7f0e140c485557b987c5c49a32ccaa8d6e323e4b - ChartWebview: 496dc64a359a0d5be1008dd19f13e68d8ae0f1c5 - CloudFs: bdc641b149c29fe96b59260762c43e4ced42cab7 - CloudKitModule: 9e16e17cc22f4873fa9b2f26a5018a3d6f1297ad + AesCrypto: d346fe9aa7c66722ed09eae00e1a5a92b11cc4a8 + AsyncStorage: 859501b9da966b1d78ef24b476a2a8cc951ec915 + AutoSizeInput: 334d807374e1d841a78c5cc0b2344e5c8d9079f4 + BackgroundThread: 973c4bbce7468d57d8ddef51822dcf1f6e75194f + ChartWebview: 8bf15c939a1d2e674b3f27df7c9ed7b951c32732 + CloudFs: 018e5b44ee7ab089e5b45d438a68b8f7836af81c + CloudKitModule: ff2ebc0f930061c62e18be8799b6216d8e422828 CocoaLumberjack: e4ba3b414dfca8c1916c6303d37f63b3a95134c6 - DnsLookup: b8d141563770b6c4f939c87d39a9c8d3211612c5 + DnsLookup: 0220553aa658d2009475590557664f1bc8649a0b EMASCurl: d75387e1ce9dec1a75cd25cb33c7a7e7bf21997f FBLazyVector: 3c3be9a019176b5699455f7f66c5444b78a411c6 hermes-engine: 31834dd8ee77c3307d4754540214d2588c428241 - KeychainModule: 2aae17da3ad379ab3c3b97ba9c21a7c654cbd82a + KeychainModule: a998ea6dfc8dba3d7d90adf249459077a96b15e5 MMKV: 86859fdfa2b0b21db1fd6e48788474a6416a2c77 MMKVCore: 3d16ce9f7d411e135020915fde98a056859a1efa - NetworkInfo: 10b749059fe49525922063f1c2e4f367e06a9ebb + NetworkInfo: cf0e0b1fdeb63a44bebf41b838532f42a5598af6 NitroMmkv: 85a251e15c39d7c95fe58cf40786fa126b8d143c NitroModules: 452230d9b63c6c3f59dd97eeaa27ec3449271d4a - Pbkdf2: 584767e680c62f2217b6376597879165fac27533 - PerpDepthBar: cd4776fd879aca5d4173376506f358d220b1cf32 - Ping: 4a7bb24ff877aa7c50a33e45a0c1cfcb7a41bd94 + Pbkdf2: 94d9510f31adf14ecde7dfff7d586567bd6d9b8a + PerpDepthBar: 1feab81472d5737ed61e2fa8662e1cdf274620d7 + Ping: 1286aea6344805e7c331dbe1e2eaf4082ed680f2 RCTDeprecation: bccb6545c26db881ecddfd83a3f9ea82aba1605f RCTRequired: b2f74764d596fc0051f00fee94b49bf41a6f7f5a RCTSwiftUI: c6d6a31b849b9dfa64c33b55dc91ac15dd55774c @@ -3248,9 +3248,9 @@ SPEC CHECKSUMS: React-Mapbuffer: 44dd007f917e2396afa0e70bbd70273237d93fde React-microtasksnativemodule: f413ee411341fb3c34d20e85e9f6f524921fab15 React-mutationobservernativemodule: 58f6d2adf7d98e72b241608dfa2ddce414d2a4e7 - react-native-pager-view: 281e9aa4a780488b3d55a3ea71218d74e06d7a87 + react-native-pager-view: 3b75e1ada7605070212a1c12a589148089d41b19 react-native-safe-area-context: 91a90d98c310adcc90a511e5aeb6046d7c19d885 - react-native-tab-view: fb46d9d2d12a5c48b40b75468f30fe41feb9520e + react-native-tab-view: cc5b234cef39e036eb5cb33eef4e0480f8540b5f React-NativeModulesApple: 167e532fb9bae30f3c66636b8ee0092bab263667 React-networking: 89f6b69755a3176f30e56ba1ba8e214b1518ecfb React-oscompat: db6675ddaef3bddd1b41533627f3d26ec710c05f @@ -3285,28 +3285,28 @@ SPEC CHECKSUMS: ReactAppDependencyProvider: 0e13d430eadac8a2ef18515a860d5c59df05b475 ReactCodegen: 01cbf7a08c30e8b71ad71489bb56b5bed195fa5e ReactCommon: 9002f006f571256348994183f7d4387aa7cf84e8 - ReactNativeAppUpdate: f81ddc98db8382816a9ce4f765d352755304cf04 - ReactNativeBundleCrypto: 88c7edbd223b239fea6e64ff169a17d35db7d5e4 - ReactNativeBundleUpdate: 624355f6114471bf3594aaa513fa2e5161a83013 - ReactNativeCheckBiometricAuthChanged: b0ab1b1e448b8f21ced7942883695fef71869900 + ReactNativeAppUpdate: d105678b1f9863047b645a7ec4fff6b49e54bb1b + ReactNativeBundleCrypto: 105efea759c3b8b105a49bc4ed7f1ab55ce0fbf8 + ReactNativeBundleUpdate: 4db59b144f7364db210c022413428ea68811d8df + ReactNativeCheckBiometricAuthChanged: e661de0668399e2228a457150b2464a33507d148 ReactNativeDependencies: 2bd6854ade79bf1b60586d1ab7813a389df1b6bf - ReactNativeDeviceUtils: df93ed20e645113d7bacc34d538fe32ff7000bfb - ReactNativeGetRandomValues: a2e902e4bcf04ce75eceb5bdd3dee162f2725df8 - ReactNativeLiteCard: 6846f62b04f63f01fc31157b4dd47b744732284e - ReactNativeNativeLogger: 99ed6997faacec24fa989a1df37999cd68d7fbd3 - ReactNativePerfMemory: 5fe6aac5156839b6c80512b776c41c8bed17ca61 - ReactNativePerfStats: 9d3e6995b49463785b6b9ae5ef5526112172cd32 - ReactNativeRangeDownloader: 9f32e682e27bf9d05d612aeba147f5d640469d91 - ReactNativeSplashScreen: b06e051ca85c9a0a7e00c658068a77c8358d698a - ReactNativeZipArchive: dbfcc648711e57e80b6c12660aad3193a79f8491 + ReactNativeDeviceUtils: aa5892571a18a5a53960f18f72ae954b9e475c6f + ReactNativeGetRandomValues: 5c54063b15dd9d635c483344e6d3bb599e7db68f + ReactNativeLiteCard: 255f947b3b3ac561e1056008b49752d5e2b05a5f + ReactNativeNativeLogger: eba564ddcdb4db8fd73b75d4f3129c9c5b75ff5d + ReactNativePerfMemory: ad559eb338f15eaeecb2983a61ad02c03c8d7306 + ReactNativePerfStats: 2b5324011aa09573bfc4cdfca6b37650be3fc4aa + ReactNativeRangeDownloader: 73f76cd50f5ed66cbb68685641382fefa55bf564 + ReactNativeSplashScreen: dbb77a2df1f54906d0d0fb7e2fbc3812c7fb9d73 + ReactNativeZipArchive: 1bbb9bf3b00dbe9c0405f42c4ccf66f6e7cf1e75 RNScreens: 01b065ded2dfe7987bcce770ff3a196be417ff41 - ScrollGuard: 6e33f819eb40dcad82551765012ca4da570099d0 - SegmentSlider: 892e75dd16a317549d3bd337422965acc3995c1d - Skeleton: 6f1831ad12bbbe4cab89849977cdfecaa3d28e23 - SniConnect: bfa8d743e7b5385d0289a14f720c768c7607dfa6 - SplitBundleLoader: 6853b8b8ca6dbda79b33f71960cb39c97eac2aae + ScrollGuard: 26cd578719836d1b94e5103bfe0fcfc6abdfd00c + SegmentSlider: 7f3c5cb28f7d8af9396a8a3d553abf8874e09971 + Skeleton: 517685e61baf765eb30434f895db86f93da16843 + SniConnect: be1f9514b7c4d9261d5e467329a2b28e88a8ef37 + SplitBundleLoader: 2f93f1d8651e695cdca5fa1cb693dd35d4a0cc00 SSZipArchive: c69881e8ac5521f0e622291387add5f60f30f3c4 - TcpSocket: ee26d485fd6386c8f71e1a97b74ae875cf19765d + TcpSocket: 01bfea9a0c17a3b3dc494eeea2259d66b60c5b34 Yoga: 9891cfb1c680f64de9c41b09e7453dea33454d2b PODFILE CHECKSUM: 3be463caa9ed361a5e4482d8655995f4766ac0d4 diff --git a/scripts/setup-nitro-module.js b/scripts/setup-nitro-module.js index 8260ac26..b90d2946 100755 --- a/scripts/setup-nitro-module.js +++ b/scripts/setup-nitro-module.js @@ -229,7 +229,7 @@ if (fs.existsSync(androidBuildFile)) { // Add configuration to react { block const reactBlockRegex = /(react\s*\{)/; const additionalConfig = ` reactNativeDir = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile() - hermesCommand = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/sdks/hermesc/%OS-BIN%/hermesc" + hermesCommand = new File(["node", "--print", "require.resolve('hermes-compiler/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/hermesc/%OS-BIN%/hermesc" codegenDir = new File(["node", "--print", "require.resolve('@react-native/codegen/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile() enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean() `; From 8a71f2e3b7a68b21dce5ee39d2d86a182e32367c Mon Sep 17 00:00:00 2001 From: huhuanming Date: Thu, 27 Aug 2026 02:17:46 +0800 Subject: [PATCH 4/7] fix: guard iOS shared RPC during reload --- .../ios/BackgroundThreadManager.mm | 31 ++++++++++++++----- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/native-modules/react-native-background-thread/ios/BackgroundThreadManager.mm b/native-modules/react-native-background-thread/ios/BackgroundThreadManager.mm index 3bebe7bc..02c3cf80 100644 --- a/native-modules/react-native-background-thread/ios/BackgroundThreadManager.mm +++ b/native-modules/react-native-background-thread/ios/BackgroundThreadManager.mm @@ -210,15 +210,30 @@ + (void)installSharedBridgeInMainRuntime:(RCTHost *)host // see a nil strong reference and bail out — instead of dispatching // callFunctionOnBufferedRuntimeExecutor on a freed instance and // crashing (EXC_BAD_ACCESS / use-after-free). + __weak RCTHost *weakHost = host; __weak id weakInstance = instance; - RPCRuntimeExecutor mainExecutor = [weakInstance](std::function work) { - id strongInstance = weakInstance; - if (!strongInstance) { - return; - } - [strongInstance callFunctionOnBufferedRuntimeExecutor:[work](jsi::Runtime &rt) { - work(rt); - }]; + RPCRuntimeExecutor mainExecutor = [weakHost, weakInstance](std::function work) { + // RCTHost invalidates and swaps its RCTInstance on the main queue. + // Serialize the identity check with that swap: retaining the old + // Objective-C wrapper is not sufficient because its C++ + // ReactInstance may already have been reset during reload. + dispatch_async(dispatch_get_main_queue(), ^{ + RCTHost *strongHost = weakHost; + id strongInstance = weakInstance; + if (!strongHost || !strongInstance) { + return; + } + + Ivar currentInstanceIvar = class_getInstanceVariable([strongHost class], "_instance"); + id currentInstance = object_getIvar(strongHost, currentInstanceIvar); + if (currentInstance != strongInstance) { + return; + } + + [strongInstance callFunctionOnBufferedRuntimeExecutor:[work](jsi::Runtime &rt) { + work(rt); + }]; + }); }; SharedRPC::install(runtime, std::move(mainExecutor), "main"); // Set the integration-health flag from inside the JS-thread lambda so From 13395be216e71d4739c3f9674b146601caf5cc79 Mon Sep 17 00:00:00 2001 From: huhuanming Date: Fri, 28 Aug 2026 22:42:11 +0800 Subject: [PATCH 5/7] feat: release app modules 3.0.91 --- CHANGELOG.md | 12 + example/react-native/ios/Podfile.lock | 6 + example/react-native/package.json | 1 + .../react-native/pages/TextInputTestPage.tsx | 81 ++ example/react-native/route.tsx | 299 +++-- native-modules/native-logger/package.json | 2 +- .../react-native-aes-crypto/package.json | 2 +- .../react-native-app-update/package.json | 2 +- .../react-native-async-storage/package.json | 2 +- .../android/src/main/cpp/cpp-adapter.cpp | 246 +++- .../BackgroundThreadManager.kt | 807 +++++++++++-- .../ios/BackgroundRunnerReactNativeDelegate.h | 8 +- .../BackgroundRunnerReactNativeDelegate.mm | 259 ++++- .../ios/BackgroundThreadManager.h | 5 +- .../ios/BackgroundThreadManager.mm | 142 ++- .../package.json | 2 +- .../react-native-bundle-crypto/package.json | 2 +- .../react-native-bundle-update/package.json | 2 +- .../package.json | 2 +- .../react-native-cloud-fs/package.json | 2 +- .../package.json | 2 +- .../react-native-device-utils/package.json | 2 +- .../react-native-dns-lookup/package.json | 2 +- .../package.json | 2 +- .../react-native-keychain-module/package.json | 2 +- .../react-native-lite-card/package.json | 2 +- .../react-native-network-info/package.json | 2 +- .../package.json | 2 +- .../react-native-pbkdf2/package.json | 2 +- .../react-native-perf-memory/package.json | 2 +- .../react-native-perf-stats/package.json | 2 +- native-modules/react-native-ping/package.json | 2 +- .../package.json | 2 +- .../react-native-sni-connect/package.json | 2 +- .../react-native-splash-screen/package.json | 2 +- .../ios/SplitBundleLoader.h | 8 +- .../ios/SplitBundleLoader.mm | 149 ++- .../package.json | 2 +- .../react-native-tcp-socket/package.json | 2 +- .../react-native-zip-archive/package.json | 2 +- .../react-native-auto-size-input/package.json | 2 +- .../react-native-chart-webview/package.json | 2 +- .../react-native-pager-view/package.json | 2 +- .../react-native-perp-depth-bar/package.json | 2 +- .../react-native-scroll-guard/package.json | 2 +- .../react-native-segment-slider/package.json | 2 +- .../react-native-skeleton/package.json | 2 +- .../react-native-tab-view/package.json | 2 +- native-views/react-native-text-input/LICENSE | 20 + .../OneKeyTextInput.podspec | 18 + .../react-native-text-input/README.md | 15 + .../android/build.gradle | 126 ++ .../android/gradle.properties | 5 + .../android/src/main/AndroidManifest.xml | 3 + .../android/src/main/AndroidManifestNew.xml | 2 + .../main/java/com/textinput/PasteWatcher.kt | 10 + .../java/com/textinput/TextInputPackage.kt | 19 + .../java/com/textinput/TextInputPasteEvent.kt | 48 + .../main/java/com/textinput/TextInputView.kt | 80 ++ .../com/textinput/TextInputViewManager.kt | 72 ++ .../react-native-text-input/babel.config.js | 5 + .../ios/OneKeyTextInputPasteObserver.h | 11 + .../ios/OneKeyTextInputPasteObserver.mm | 204 ++++ .../react-native-text-input/package.json | 93 ++ .../react-native.config.js | 12 + .../src/AndroidTextInputNativeComponent.js | 756 ++++++++++++ .../react-native-text-input/src/Input.js | 1032 +++++++++++++++++ .../src/__tests__/index.test.tsx | 1 + .../react-native-text-input/src/enum.ts | 3 + .../react-native-text-input/src/index.tsx | 17 + .../react-native-text-input/src/type.ts | 13 + .../tsconfig.build.json | 4 + .../react-native-text-input/tsconfig.json | 29 + .../react-native-text-input/turbo.json | 36 + yarn.lock | 18 + 75 files changed, 4446 insertions(+), 299 deletions(-) create mode 100644 example/react-native/pages/TextInputTestPage.tsx create mode 100644 native-views/react-native-text-input/LICENSE create mode 100644 native-views/react-native-text-input/OneKeyTextInput.podspec create mode 100644 native-views/react-native-text-input/README.md create mode 100644 native-views/react-native-text-input/android/build.gradle create mode 100644 native-views/react-native-text-input/android/gradle.properties create mode 100644 native-views/react-native-text-input/android/src/main/AndroidManifest.xml create mode 100644 native-views/react-native-text-input/android/src/main/AndroidManifestNew.xml create mode 100644 native-views/react-native-text-input/android/src/main/java/com/textinput/PasteWatcher.kt create mode 100644 native-views/react-native-text-input/android/src/main/java/com/textinput/TextInputPackage.kt create mode 100644 native-views/react-native-text-input/android/src/main/java/com/textinput/TextInputPasteEvent.kt create mode 100644 native-views/react-native-text-input/android/src/main/java/com/textinput/TextInputView.kt create mode 100644 native-views/react-native-text-input/android/src/main/java/com/textinput/TextInputViewManager.kt create mode 100644 native-views/react-native-text-input/babel.config.js create mode 100644 native-views/react-native-text-input/ios/OneKeyTextInputPasteObserver.h create mode 100644 native-views/react-native-text-input/ios/OneKeyTextInputPasteObserver.mm create mode 100644 native-views/react-native-text-input/package.json create mode 100644 native-views/react-native-text-input/react-native.config.js create mode 100644 native-views/react-native-text-input/src/AndroidTextInputNativeComponent.js create mode 100644 native-views/react-native-text-input/src/Input.js create mode 100644 native-views/react-native-text-input/src/__tests__/index.test.tsx create mode 100644 native-views/react-native-text-input/src/enum.ts create mode 100644 native-views/react-native-text-input/src/index.tsx create mode 100644 native-views/react-native-text-input/src/type.ts create mode 100644 native-views/react-native-text-input/tsconfig.build.json create mode 100644 native-views/react-native-text-input/tsconfig.json create mode 100644 native-views/react-native-text-input/turbo.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a0043c4..92bf32ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,18 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +## [3.0.91] - 2026-08-28 + +### Features +- **text-input**: Move `@onekeyfe/react-native-text-input` into app-modules and add package-owned iOS text/image paste handling so consumers no longer patch React Native's TextInput sources. + +### Bug Fixes +- **background-thread**: Integrate the app-monorepo `x` runtime-generation, background-HMR teardown, and replacement-runtime lifecycle fixes on Android and iOS. +- **split-bundle-loader (iOS)**: Integrate dev-vendor entry loading, HMR setup, and cold-build synchronization from app-monorepo `x`. + +### Chores +- Bump all publishable packages to 3.0.91. + ## [3.0.90] - 2026-08-26 ### Bug Fixes diff --git a/example/react-native/ios/Podfile.lock b/example/react-native/ios/Podfile.lock index 5b23d995..577182b1 100644 --- a/example/react-native/ios/Podfile.lock +++ b/example/react-native/ios/Podfile.lock @@ -292,6 +292,8 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga + - OneKeyTextInput (3.0.90): + - React-Core - Pbkdf2 (3.0.90): - hermes-engine - RCTRequired @@ -2850,6 +2852,7 @@ DEPENDENCIES: - "NetworkInfo (from `../../../node_modules/@onekeyfe/react-native-network-info`)" - NitroMmkv (from `../../../node_modules/react-native-mmkv`) - NitroModules (from `../../../node_modules/react-native-nitro-modules`) + - "OneKeyTextInput (from `../../../node_modules/@onekeyfe/react-native-text-input`)" - "Pbkdf2 (from `../../../node_modules/@onekeyfe/react-native-pbkdf2`)" - "PerpDepthBar (from `../../../node_modules/@onekeyfe/react-native-perp-depth-bar`)" - "Ping (from `../../../node_modules/@onekeyfe/react-native-ping`)" @@ -2990,6 +2993,8 @@ EXTERNAL SOURCES: :path: "../../../node_modules/react-native-mmkv" NitroModules: :path: "../../../node_modules/react-native-nitro-modules" + OneKeyTextInput: + :path: "../../../node_modules/@onekeyfe/react-native-text-input" Pbkdf2: :path: "../../../node_modules/@onekeyfe/react-native-pbkdf2" PerpDepthBar: @@ -3208,6 +3213,7 @@ SPEC CHECKSUMS: NetworkInfo: cf0e0b1fdeb63a44bebf41b838532f42a5598af6 NitroMmkv: 85a251e15c39d7c95fe58cf40786fa126b8d143c NitroModules: 452230d9b63c6c3f59dd97eeaa27ec3449271d4a + OneKeyTextInput: 11bdccb319723ad805b26fb9f8b0679af5295535 Pbkdf2: 94d9510f31adf14ecde7dfff7d586567bd6d9b8a PerpDepthBar: 1feab81472d5737ed61e2fa8662e1cdf274620d7 Ping: 1286aea6344805e7c331dbe1e2eaf4082ed680f2 diff --git a/example/react-native/package.json b/example/react-native/package.json index efa52c05..d64c662d 100644 --- a/example/react-native/package.json +++ b/example/react-native/package.json @@ -44,6 +44,7 @@ "@onekeyfe/react-native-split-bundle-loader": "workspace:*", "@onekeyfe/react-native-tab-view": "workspace:*", "@onekeyfe/react-native-tcp-socket": "workspace:*", + "@onekeyfe/react-native-text-input": "workspace:*", "@onekeyfe/react-native-zip-archive": "workspace:*", "@react-native/new-app-screen": "0.86.2", "@react-navigation/native": "^7.1.33", diff --git a/example/react-native/pages/TextInputTestPage.tsx b/example/react-native/pages/TextInputTestPage.tsx new file mode 100644 index 00000000..e2608be4 --- /dev/null +++ b/example/react-native/pages/TextInputTestPage.tsx @@ -0,0 +1,81 @@ +import { useCallback, useState } from 'react'; +import { StyleSheet, Text, View } from 'react-native'; +import TextInput, { + type IPasteEventParams, +} from '@onekeyfe/react-native-text-input'; +import { TestPageBase } from './TestPageBase'; + +export function TextInputTestPage() { + const [singleLineText, setSingleLineText] = useState(''); + const [multilineText, setMultilineText] = useState(''); + const [lastPaste, setLastPaste] = useState('No paste event yet'); + + const handlePaste = useCallback((event: IPasteEventParams) => { + const item = event.nativeEvent.items?.[0]; + setLastPaste( + item == null + ? 'Paste event contained no items' + : `${item.type ?? 'unknown'}: ${item.data ?? ''}`, + ); + }, []); + + return ( + + Single line + + + Multiline + + + + Last paste + {lastPaste} + + + ); +} + +const styles = StyleSheet.create({ + label: { + fontSize: 16, + fontWeight: '600', + marginBottom: 8, + marginTop: 16, + }, + input: { + borderColor: '#C7C7CC', + borderRadius: 10, + borderWidth: 1, + fontSize: 17, + minHeight: 48, + paddingHorizontal: 12, + paddingVertical: 10, + }, + multiline: { + minHeight: 120, + textAlignVertical: 'top', + }, + result: { + backgroundColor: '#F2F2F7', + borderRadius: 10, + marginTop: 24, + padding: 12, + }, + resultTitle: { + fontWeight: '600', + marginBottom: 8, + }, +}); diff --git a/example/react-native/route.tsx b/example/react-native/route.tsx index 857f87d5..10ec79e1 100644 --- a/example/react-native/route.tsx +++ b/example/react-native/route.tsx @@ -1,5 +1,14 @@ import { useCallback, useMemo, useRef, useState } from 'react'; -import { View, Text, StyleSheet, TouchableOpacity, ScrollView, TextInput, PanResponder, type LayoutChangeEvent } from 'react-native'; +import { + View, + Text, + StyleSheet, + TouchableOpacity, + ScrollView, + TextInput, + PanResponder, + type LayoutChangeEvent, +} from 'react-native'; import { createNativeStackNavigator } from '@react-navigation/native-stack'; import type { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { useNavigation } from '@react-navigation/native'; @@ -30,6 +39,7 @@ import { ChartSingletonTestPage } from './pages/ChartSingletonTestPage'; import { SplashScreenTestPage } from './pages/SplashScreenTestPage'; import { TabViewTestPage } from './pages/TabViewTestPage'; import { TabViewSettingsPage } from './pages/TabViewSettingsPage'; +import { TextInputTestPage } from './pages/TextInputTestPage'; export type TabViewSettingsState = { showBadge: boolean; @@ -69,17 +79,25 @@ export type RootStackParamList = { SplashScreen: undefined; TabView: undefined; TabViewSettings: undefined; + TextInput: undefined; }; -export type RootStackNavigationProp = NativeStackNavigationProp; +export type RootStackNavigationProp = + NativeStackNavigationProp; const Stack = createNativeStackNavigator(); -const modules: { screen: keyof RootStackParamList; name: string; description: string; icon: string }[] = [ +const modules: { + screen: keyof RootStackParamList; + name: string; + description: string; + icon: string; +}[] = [ { screen: 'AutoSizeInput', name: 'Auto Size Input', - description: 'Input with auto-shrinking font size, prefix/suffix, single & multi-line', + description: + 'Input with auto-shrinking font size, prefix/suffix, single & multi-line', icon: '⌨️', }, { @@ -103,49 +121,57 @@ const modules: { screen: keyof RootStackParamList; name: string; description: st { screen: 'BundleUpdate', name: 'Bundle Update', - description: 'JS bundle download, verification, install, and path management', + description: + 'JS bundle download, verification, install, and path management', icon: '📥', }, { screen: 'BundleCrypto', name: 'Bundle Crypto', - description: 'sha256OfFile, secureEqualHex, validateExtractedPathSafety, verifyGpgCleartext', + description: + 'sha256OfFile, secureEqualHex, validateExtractedPathSafety, verifyGpgCleartext', icon: '🔏', }, { screen: 'OtaPipeline', name: 'JS Bundle OTA Pipeline', - description: 'JS bundle OTA: download → sha256 verify → GPG cleartext verify → unzip → path-safety', + description: + 'JS bundle OTA: download → sha256 verify → GPG cleartext verify → unzip → path-safety', icon: '🔗', }, { screen: 'ApkOtaPipeline', name: 'APK OTA Pipeline', - description: 'APK OTA: download → sha256 → verify detached SHA256SUMS.asc → match → install', + description: + 'APK OTA: download → sha256 → verify detached SHA256SUMS.asc → match → install', icon: '📲', }, { screen: 'ChartWebView', name: 'Chart WebView', - description: 'Offline TradingView chart via virtual same-origin + JS↔native message bridge', + description: + 'Offline TradingView chart via virtual same-origin + JS↔native message bridge', icon: '📈', }, { screen: 'ChartSingleton', name: 'Chart Singleton', - description: 'One shared WebView reparented across mount slots (pooled reuseKey)', + description: + 'One shared WebView reparented across mount slots (pooled reuseKey)', icon: '♻️', }, { screen: 'RangeDownloader', name: 'Range Downloader', - description: 'Concurrent multi-range download with progress events and artifact discard', + description: + 'Concurrent multi-range download with progress events and artifact discard', icon: '🚀', }, { screen: 'ZipArchive', name: 'Zip Archive', - description: 'unzip, getUncompressedSize, isPasswordProtected for OTA bundle archives', + description: + 'unzip, getUncompressedSize, isPasswordProtected for OTA bundle archives', icon: '🗜️', }, { @@ -187,7 +213,8 @@ const modules: { screen: keyof RootStackParamList; name: string; description: st { screen: 'PagerView', name: 'Pager View', - description: 'Native page container with swipe navigation and imperative controls', + description: + 'Native page container with swipe navigation and imperative controls', icon: '📄', }, { @@ -199,19 +226,22 @@ const modules: { screen: keyof RootStackParamList; name: string; description: st { screen: 'PerpDepthBar', name: 'Perp Depth Bar', - description: 'Native order-book depth bars + side-ratio (replaces reanimated)', + description: + 'Native order-book depth bars + side-ratio (replaces reanimated)', icon: '📊', }, { screen: 'ScrollGuard', name: 'Scroll Guard', - description: 'Prevent parent PagerView from intercepting child ScrollView gestures', + description: + 'Prevent parent PagerView from intercepting child ScrollView gestures', icon: '🛡️', }, { screen: 'SegmentSlider', name: 'Segment Slider', - description: 'Native segmented slider — track, fill, marks, thumb, bubble drawn natively', + description: + 'Native segmented slider — track, fill, marks, thumb, bubble drawn natively', icon: '🎚️', }, { @@ -229,9 +259,16 @@ const modules: { screen: keyof RootStackParamList; name: string; description: st { screen: 'TabView', name: 'Tab View', - description: 'Native tab bar with UIKit (iOS) / Material (Android), badges, icons, liquid glass', + description: + 'Native tab bar with UIKit (iOS) / Material (Android), badges, icons, liquid glass', icon: '📑', }, + { + screen: 'TextInput', + name: 'Text Input', + description: 'Native text and image paste events on iOS and Android', + icon: '📝', + }, ]; const ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''); @@ -243,14 +280,18 @@ function HomeScreen() { const sectionYRef = useRef>({}); const sidebarRef = useRef(null); const sidebarLayoutRef = useRef({ y: 0, height: 0 }); - const [activeLetterState, setActiveLetterState] = useState(null); + const [activeLetterState, setActiveLetterState] = useState( + null, + ); const filteredModules = useMemo(() => { const sorted = [...modules].sort((a, b) => a.name.localeCompare(b.name)); if (!searchQuery) return sorted; const query = searchQuery.toLowerCase(); return sorted.filter( - (m) => m.name.toLowerCase().includes(query) || m.description.toLowerCase().includes(query), + m => + m.name.toLowerCase().includes(query) || + m.description.toLowerCase().includes(query), ); }, [searchQuery]); @@ -266,15 +307,12 @@ function HomeScreen() { const activeLetters = useMemo(() => new Set(Object.keys(grouped)), [grouped]); - const scrollToLetter = useCallback( - (letter: string) => { - const y = sectionYRef.current[letter]; - if (y != null && scrollViewRef.current) { - scrollViewRef.current.scrollTo({ y, animated: true }); - } - }, - [], - ); + const scrollToLetter = useCallback((letter: string) => { + const y = sectionYRef.current[letter]; + if (y != null && scrollViewRef.current) { + scrollViewRef.current.scrollTo({ y, animated: true }); + } + }, []); const getLetterFromTouch = useCallback((pageY: number) => { const { y, height } = sidebarLayoutRef.current; @@ -288,14 +326,14 @@ function HomeScreen() { PanResponder.create({ onStartShouldSetPanResponder: () => true, onMoveShouldSetPanResponder: () => true, - onPanResponderGrant: (evt) => { + onPanResponderGrant: evt => { const letter = getLetterFromTouch(evt.nativeEvent.pageY); if (letter && activeLetters.has(letter)) { setActiveLetterState(letter); scrollToLetter(letter); } }, - onPanResponderMove: (evt) => { + onPanResponderMove: evt => { const letter = getLetterFromTouch(evt.nativeEvent.pageY); if (letter && activeLetters.has(letter)) { setActiveLetterState(letter); @@ -309,9 +347,12 @@ function HomeScreen() { [activeLetters, getLetterFromTouch, scrollToLetter], ); - const handleSectionLayout = useCallback((letter: string, event: LayoutChangeEvent) => { - sectionYRef.current[letter] = event.nativeEvent.layout.y; - }, []); + const handleSectionLayout = useCallback( + (letter: string, event: LayoutChangeEvent) => { + sectionYRef.current[letter] = event.nativeEvent.layout.y; + }, + [], + ); const handleSidebarLayout = useCallback(() => { sidebarRef.current?.measureInWindow((_x, y, _w, height) => { @@ -341,14 +382,11 @@ function HomeScreen() { {sections.length > 0 ? ( - sections.map((letter) => ( - handleSectionLayout(letter, e)} - > + sections.map(letter => ( + handleSectionLayout(letter, e)}> {letter} - {grouped[letter]!.map((module) => ( + {grouped[letter]!.map(module => ( {module.icon} {module.name} - {module.description} + + {module.description} + @@ -369,7 +409,9 @@ function HomeScreen() { ) : ( No modules found - Try a different search term + + Try a different search term + )} @@ -381,7 +423,7 @@ function HomeScreen() { onLayout={handleSidebarLayout} {...panResponder.panHandlers} > - {ALPHABET.map((letter) => { + {ALPHABET.map(letter => { const isActive = activeLetters.has(letter); const isHighlighted = activeLetterState === letter; return ( @@ -406,34 +448,151 @@ function HomeScreen() { export function AppNavigator() { return ( - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); } diff --git a/native-modules/native-logger/package.json b/native-modules/native-logger/package.json index e85dbfe2..6c79d536 100644 --- a/native-modules/native-logger/package.json +++ b/native-modules/native-logger/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-native-logger", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-native-logger", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-aes-crypto/package.json b/native-modules/react-native-aes-crypto/package.json index 86f99162..9621ade2 100644 --- a/native-modules/react-native-aes-crypto/package.json +++ b/native-modules/react-native-aes-crypto/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-aes-crypto", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-aes-crypto", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-app-update/package.json b/native-modules/react-native-app-update/package.json index 51d93935..3e6d1896 100644 --- a/native-modules/react-native-app-update/package.json +++ b/native-modules/react-native-app-update/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-app-update", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-app-update", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-async-storage/package.json b/native-modules/react-native-async-storage/package.json index 97895cc8..33c5287d 100644 --- a/native-modules/react-native-async-storage/package.json +++ b/native-modules/react-native-async-storage/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-async-storage", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-async-storage", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-background-thread/android/src/main/cpp/cpp-adapter.cpp b/native-modules/react-native-background-thread/android/src/main/cpp/cpp-adapter.cpp index f19e02f1..5574d216 100644 --- a/native-modules/react-native-background-thread/android/src/main/cpp/cpp-adapter.cpp +++ b/native-modules/react-native-background-thread/android/src/main/cpp/cpp-adapter.cpp @@ -70,6 +70,10 @@ static void invokeOptionalGlobalFunction(jsi::Runtime &runtime, const char *name static std::mutex gWorkMutex; static std::unordered_map> gPendingWork; static int64_t gNextWorkId = 0; +// Protected by gWorkMutex. Every background executor captures the generation +// that installed it, so work from an outgoing Hermes runtime can be discarded +// without ever touching its replacement runtime. +static int64_t gBgRuntimeGeneration = 0; using JavaObjectRef = std::shared_ptr<_jobject>; @@ -108,7 +112,11 @@ static void leakAndClearRuntimeQueue(RuntimeWorkQueue &queue) { queue.scheduledDrainWorkId = -1; } -static bool callScheduleOnJSThread(const JavaObjectRef &ref, bool isMain, int64_t workId) { +static bool callScheduleOnJSThread( + const JavaObjectRef &ref, + bool isMain, + int64_t workId, + int64_t runtimeGeneration) { JNIEnv *env = getJNIEnv(); if (!env || !ref) { LOGE("executor: env=%p, ref=%p — aborting", env, ref.get()); @@ -125,7 +133,7 @@ static bool callScheduleOnJSThread(const JavaObjectRef &ref, bool isMain, int64_ return false; } - jmethodID mid = env->GetMethodID(cls, "scheduleOnJSThread", "(ZJ)Z"); + jmethodID mid = env->GetMethodID(cls, "scheduleOnJSThread", "(ZJJ)Z"); if (!mid) { LOGE("executor: scheduleOnJSThread method not found!"); if (env->ExceptionCheck()) { @@ -136,12 +144,14 @@ static bool callScheduleOnJSThread(const JavaObjectRef &ref, bool isMain, int64_ return false; } - LOGI("executor: calling scheduleOnJSThread(isMain=%d, workId=%ld)", isMain, (long)workId); + LOGI("executor: calling scheduleOnJSThread(isMain=%d, workId=%ld, generation=%ld)", + isMain, (long)workId, (long)runtimeGeneration); jboolean scheduled = env->CallBooleanMethod( ref.get(), mid, static_cast(isMain), - static_cast(workId)); + static_cast(workId), + static_cast(runtimeGeneration)); if (env->ExceptionCheck()) { LOGE("executor: JNI exception after scheduleOnJSThread"); env->ExceptionDescribe(); @@ -155,15 +165,25 @@ static bool callScheduleOnJSThread(const JavaObjectRef &ref, bool isMain, int64_ static void drainPendingBgEvals(const std::string &reason); -static void scheduleRuntimeDrain(const JavaObjectRef &ref, bool isMain); +static void scheduleRuntimeDrain( + const JavaObjectRef &ref, + bool isMain, + int64_t runtimeGeneration); -static void drainRuntimeWorkQueue(jsi::Runtime &rt, JavaObjectRef ref, bool isMain) { +static void drainRuntimeWorkQueue( + jsi::Runtime &rt, + JavaObjectRef ref, + bool isMain, + int64_t runtimeGeneration) { size_t drained = 0; while (drained < kRuntimeDrainBatchSize) { std::function work; { std::lock_guard lock(gWorkMutex); + if (!isMain && runtimeGeneration != gBgRuntimeGeneration) { + return; + } auto &queue = getRuntimeWorkQueue(isMain); if (queue.items.empty()) { break; @@ -188,6 +208,9 @@ static void drainRuntimeWorkQueue(jsi::Runtime &rt, JavaObjectRef ref, bool isMa size_t remaining = 0; { std::lock_guard lock(gWorkMutex); + if (!isMain && runtimeGeneration != gBgRuntimeGeneration) { + return; + } auto &queue = getRuntimeWorkQueue(isMain); remaining = queue.items.size(); if (remaining == 0) { @@ -206,15 +229,21 @@ static void drainRuntimeWorkQueue(jsi::Runtime &rt, JavaObjectRef ref, bool isMa } if (shouldReschedule) { - scheduleRuntimeDrain(ref, isMain); + scheduleRuntimeDrain(ref, isMain, runtimeGeneration); } } -static void scheduleRuntimeDrain(const JavaObjectRef &ref, bool isMain) { +static void scheduleRuntimeDrain( + const JavaObjectRef &ref, + bool isMain, + int64_t runtimeGeneration) { int64_t workId; size_t queued = 0; { std::lock_guard lock(gWorkMutex); + if (!isMain && runtimeGeneration != gBgRuntimeGeneration) { + return; + } auto &queue = getRuntimeWorkQueue(isMain); // Stale-id guard: drainRuntimeWorkQueue observes remaining>0, drops the // lock, then calls us — but a concurrent nativeInvalidateSharedRpc can @@ -233,17 +262,21 @@ static void scheduleRuntimeDrain(const JavaObjectRef &ref, bool isMain) { // Track the outstanding drain's workId so a teardown path can erase its // orphaned gPendingWork entry if the post is dropped during reload. queue.scheduledDrainWorkId = workId; - gPendingWork[workId] = [ref, isMain](jsi::Runtime &rt) { - drainRuntimeWorkQueue(rt, ref, isMain); + gPendingWork[workId] = [ref, isMain, runtimeGeneration](jsi::Runtime &rt) { + drainRuntimeWorkQueue(rt, ref, isMain, runtimeGeneration); }; } - bool scheduled = callScheduleOnJSThread(ref, isMain, workId); + bool scheduled = callScheduleOnJSThread(ref, isMain, workId, runtimeGeneration); if (!scheduled) { + bool shouldDrainBgEvals = false; { std::lock_guard lock(gWorkMutex); gPendingWork.erase(workId); - leakAndClearRuntimeQueue(getRuntimeWorkQueue(isMain)); + if (isMain || runtimeGeneration == gBgRuntimeGeneration) { + leakAndClearRuntimeQueue(getRuntimeWorkQueue(isMain)); + shouldDrainBgEvals = !isMain; + } LOGE("executor: failed to schedule runtime drain isMain=%d, workId=%ld, queued=%zu", isMain, (long)workId, queued); } @@ -254,17 +287,25 @@ static void scheduleRuntimeDrain(const JavaObjectRef &ref, bool isMain) { // schedule hiccup must never falsely reject healthy bg evals. Called // outside gWorkMutex: drainPendingBgEvals takes gBgEvalMutex and does a // Java upcall, so it must not run under a native lock. - if (!isMain) { + if (shouldDrainBgEvals) { drainPendingBgEvals("Background JS thread unreachable when scheduling segment eval"); } } } -static void enqueueRuntimeWork(JavaObjectRef ref, bool isMain, std::function work) { +static void enqueueRuntimeWork( + JavaObjectRef ref, + bool isMain, + int64_t runtimeGeneration, + std::function work) { bool shouldSchedule = false; size_t queued = 0; { std::lock_guard lock(gWorkMutex); + if (!isMain && runtimeGeneration != gBgRuntimeGeneration) { + new std::function(std::move(work)); + return; + } auto &queue = getRuntimeWorkQueue(isMain); queue.items.push_back(std::move(work)); queued = queue.items.size(); @@ -279,26 +320,39 @@ static void enqueueRuntimeWork(JavaObjectRef ref, bool isMain, std::function(runtimePtr); - if (!rt) return; + JNIEnv *env, + jobject thiz, + jlong runtimePtr, + jlong workId, + jboolean isMain, + jlong runtimeGeneration) { + LOGI("nativeExecuteWork: runtimePtr=%ld, workId=%ld, generation=%ld", + (long)runtimePtr, (long)workId, (long)runtimeGeneration); std::function work; { std::lock_guard lock(gWorkMutex); auto it = gPendingWork.find(workId); if (it == gPendingWork.end()) return; + if (!isMain && runtimeGeneration != gBgRuntimeGeneration) { + new std::function(std::move(it->second)); + gPendingWork.erase(it); + LOGI("nativeExecuteWork: dropped stale background workId=%ld generation=%ld active=%ld", + (long)workId, (long)runtimeGeneration, (long)gBgRuntimeGeneration); + return; + } work = std::move(it->second); gPendingWork.erase(it); } + auto *rt = reinterpret_cast(runtimePtr); + if (!rt) return; try { work(*rt); } catch (const jsi::JSError &e) { @@ -989,18 +1043,34 @@ Java_com_backgroundthread_BackgroundThreadManager_nativeEvaluateSegmentInBackgro // DOES run stale work (it can't — we erased it) would be a harmless no-op. extern "C" JNIEXPORT void JNICALL Java_com_backgroundthread_BackgroundThreadManager_nativeDropScheduledWork( - JNIEnv * /* env */, jobject /* thiz */, jboolean isMain, jlong workId) { + JNIEnv * /* env */, + jobject /* thiz */, + jboolean isMain, + jlong workId, + jlong runtimeGeneration) { + bool shouldDrainBgEvals = false; { std::lock_guard lock(gWorkMutex); - gPendingWork.erase(static_cast(workId)); + auto pending = gPendingWork.find(static_cast(workId)); + if (!isMain && runtimeGeneration != gBgRuntimeGeneration) { + if (pending != gPendingWork.end()) { + new std::function(std::move(pending->second)); + gPendingWork.erase(pending); + } + return; + } + if (pending != gPendingWork.end()) { + gPendingWork.erase(pending); + } // TRANSIENT ptr==0 (reload in flight): do NOT abandon queue.items — the // recovered runtime still needs them (main has no JS retry net). Only // disarm the drain latch so the next enqueue re-arms a fresh drain. auto &queue = getRuntimeWorkQueue(static_cast(isMain)); queue.drainScheduled = false; queue.scheduledDrainWorkId = -1; + shouldDrainBgEvals = !isMain; } - if (!isMain) { + if (shouldDrainBgEvals) { drainPendingBgEvals("Background runtime unreachable when scheduling segment eval"); } } @@ -1009,11 +1079,32 @@ Java_com_backgroundthread_BackgroundThreadManager_nativeDropScheduledWork( // Install SharedStore and SharedRPC into a runtime. extern "C" JNIEXPORT void JNICALL Java_com_backgroundthread_BackgroundThreadManager_nativeInstallSharedBridge( - JNIEnv *env, jobject thiz, jlong runtimePtr, jboolean isMain) { + JNIEnv *env, + jobject thiz, + jlong runtimePtr, + jboolean isMain, + jlong runtimeGeneration) { auto *rt = reinterpret_cast(runtimePtr); if (!rt) return; + if (!isMain) { + std::lock_guard lock(gWorkMutex); + if (runtimeGeneration < gBgRuntimeGeneration) { + LOGI("nativeInstallSharedBridge: ignored stale background generation=%ld active=%ld", + (long)runtimeGeneration, (long)gBgRuntimeGeneration); + return; + } + if (runtimeGeneration != gBgRuntimeGeneration) { + auto &queue = gBgRuntimeWorkQueue; + if (queue.scheduledDrainWorkId >= 0) { + gPendingWork.erase(queue.scheduledDrainWorkId); + } + leakAndClearRuntimeQueue(queue); + gBgRuntimeGeneration = runtimeGeneration; + } + } + SharedStore::install(*rt); // Create executor that schedules work on this runtime's JS thread via Kotlin. @@ -1027,13 +1118,19 @@ Java_com_backgroundthread_BackgroundThreadManager_nativeInstallSharedBridge( }); bool capturedIsMain = static_cast(isMain); - RPCRuntimeExecutor executor = [ref, capturedIsMain](std::function work) { + int64_t capturedRuntimeGeneration = static_cast(runtimeGeneration); + RPCRuntimeExecutor executor = [ref, capturedIsMain, capturedRuntimeGeneration]( + std::function work) { // Coalesce per-runtime work into a single batched drain (see // enqueueRuntimeWork) instead of one Kotlin scheduleOnJSThread hop per // item. The bg-eval failure-drain that previously lived inline here now // runs in scheduleRuntimeDrain's schedule-failure path — under the // coalesced model that is the single place a schedule can fail. - enqueueRuntimeWork(ref, capturedIsMain, std::move(work)); + enqueueRuntimeWork( + ref, + capturedIsMain, + capturedRuntimeGeneration, + std::move(work)); }; std::string runtimeId = isMain ? "main" : "background"; @@ -1082,13 +1179,16 @@ Java_com_backgroundthread_BackgroundThreadManager_nativeInstallSharedBridge( { std::lock_guard lock(gWorkMutex); auto &queue = getRuntimeWorkQueue(capturedIsMain); - if (!queue.items.empty()) { + if ( + !queue.items.empty() && + (capturedIsMain || capturedRuntimeGeneration == gBgRuntimeGeneration) + ) { queue.drainScheduled = true; shouldRecoverDrain = true; } } if (shouldRecoverDrain) { - scheduleRuntimeDrain(ref, capturedIsMain); + scheduleRuntimeDrain(ref, capturedIsMain, capturedRuntimeGeneration); } } @@ -1164,7 +1264,10 @@ Java_com_backgroundthread_BackgroundThreadManager_nativeSetupErrorHandler( // instead of dispatching onto a dying runtime (parity with iOS). extern "C" JNIEXPORT jboolean JNICALL Java_com_backgroundthread_BackgroundThreadManager_nativeInvalidateSharedRpc( - JNIEnv *env, jobject thiz, jstring runtimeId) { + JNIEnv *env, + jobject thiz, + jstring runtimeId, + jlong runtimeGeneration) { const char *idChars = env->GetStringUTFChars(runtimeId, nullptr); if (!idChars) { @@ -1173,8 +1276,6 @@ Java_com_backgroundthread_BackgroundThreadManager_nativeInvalidateSharedRpc( std::string id(idChars); env->ReleaseStringUTFChars(runtimeId, idChars); - bool found = SharedRPC::invalidate(id); - // The runtime named by `id` is being torn down (restart → host.reload). // Its coalesced work queue must be fully quiesced: if a drain was posted // (drainScheduled==true) but is dropped during reload, the latch would @@ -1188,13 +1289,96 @@ Java_com_backgroundthread_BackgroundThreadManager_nativeInvalidateSharedRpc( std::lock_guard lock(gWorkMutex); bool isMain = (id == "main"); auto &queue = getRuntimeWorkQueue(isMain); + if (!isMain) { + gBgRuntimeGeneration = static_cast(runtimeGeneration); + } if (queue.scheduledDrainWorkId >= 0) { gPendingWork.erase(queue.scheduledDrainWorkId); } leakAndClearRuntimeQueue(queue); } - LOGI("nativeInvalidateSharedRpc: id=%s found=%d", id.c_str(), found ? 1 : 0); + bool found = SharedRPC::invalidate(id); + + if (id == "background") { + // Stop old timers from producing more work after the generation was + // invalidated. Callback wrappers are intentionally leaked because + // destroying a jsi::Function away from its outgoing JS thread is unsafe. + std::lock_guard lock(gTimerMutex); + for (auto &entry : gTimers) { + if (entry.second.callback) { + new std::shared_ptr(std::move(entry.second.callback)); + } + } + gTimers.clear(); + gBgTimerExecutor = nullptr; + gTimerCv.notify_all(); + } + + if (id == "background") { + drainPendingBgEvals("Background runtime invalidated before segment eval ran"); + } + + LOGI("nativeInvalidateSharedRpc: id=%s generation=%ld found=%d", + id.c_str(), (long)runtimeGeneration, found ? 1 : 0); + return found ? JNI_TRUE : JNI_FALSE; +} + +// Invalidate the outgoing background runtime while executing on that runtime's +// JS thread. This is the normal background-HMR path: it can reclaim timer and +// queued-work callbacks instead of leaking their jsi::Function wrappers to +// avoid an unsafe off-thread destructor. +extern "C" JNIEXPORT jboolean JNICALL +Java_com_backgroundthread_BackgroundThreadManager_nativeInvalidateBackgroundRuntimeOnJSThread( + JNIEnv *env, + jobject thiz, + jlong runtimeGeneration) { + + bool found = SharedRPC::invalidate("background"); + + // Prevent the timer worker from capturing or enqueueing another callback + // while the outgoing JS thread drains the callback containers below. + gTimerWorkerStop.store(true); + gTimerCv.notify_all(); + if (gTimerWorkerThread.joinable()) { + gTimerWorkerThread.join(); + } + gTimerWorkerStarted.store(false); + + std::vector> timerCallbacks; + { + std::lock_guard lock(gTimerMutex); + timerCallbacks.reserve(gTimers.size()); + for (auto &entry : gTimers) { + if (entry.second.callback) { + timerCallbacks.push_back(std::move(entry.second.callback)); + } + } + gTimers.clear(); + gBgTimerExecutor = nullptr; + } + + std::deque> queuedWork; + { + std::lock_guard lock(gWorkMutex); + gBgRuntimeGeneration = static_cast(runtimeGeneration); + auto &queue = gBgRuntimeWorkQueue; + if (queue.scheduledDrainWorkId >= 0) { + gPendingWork.erase(queue.scheduledDrainWorkId); + } + queuedWork.swap(queue.items); + queue.drainScheduled = false; + queue.scheduledDrainWorkId = -1; + } + + drainPendingBgEvals( + "Background runtime invalidated before segment eval ran"); + + // timerCallbacks and queuedWork intentionally fall out of scope here, on + // the outgoing runtime's JS thread, before ReactHost.destroy() begins. + LOGI("nativeInvalidateBackgroundRuntimeOnJSThread: generation=%ld found=%d timers=%zu work=%zu", + (long)runtimeGeneration, found ? 1 : 0, + timerCallbacks.size(), queuedWork.size()); return found ? JNI_TRUE : JNI_FALSE; } diff --git a/native-modules/react-native-background-thread/android/src/main/java/com/backgroundthread/BackgroundThreadManager.kt b/native-modules/react-native-background-thread/android/src/main/java/com/backgroundthread/BackgroundThreadManager.kt index 63c295be..3e842fa2 100644 --- a/native-modules/react-native-background-thread/android/src/main/java/com/backgroundthread/BackgroundThreadManager.kt +++ b/native-modules/react-native-background-thread/android/src/main/java/com/backgroundthread/BackgroundThreadManager.kt @@ -1,6 +1,7 @@ package com.backgroundthread import android.app.Activity +import android.content.Context import android.content.Intent import android.net.Uri import android.os.Handler @@ -11,6 +12,7 @@ import com.facebook.react.ReactPackage import com.facebook.proguard.annotations.DoNotStrip import com.facebook.react.ReactInstanceEventListener import com.facebook.react.bridge.JSBundleLoader +import com.facebook.react.bridge.JavaScriptModule import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.bridge.ReactContext import com.facebook.react.common.annotations.UnstableReactNativeAPI @@ -18,13 +20,17 @@ import com.facebook.react.defaults.DefaultComponentsRegistry import com.facebook.react.defaults.DefaultReactHostDelegate import com.facebook.react.defaults.DefaultTurboModuleManagerDelegate import com.facebook.react.fabric.ComponentFactory +import com.facebook.react.interfaces.TaskInterface import com.facebook.react.runtime.ReactHostImpl import com.facebook.react.runtime.hermes.HermesInstance import com.facebook.react.shell.MainReactPackage import java.io.File import java.lang.ref.WeakReference +import java.util.concurrent.CountDownLatch import java.util.concurrent.TimeUnit import java.util.concurrent.atomic.AtomicBoolean +import java.util.concurrent.atomic.AtomicLong +import java.util.concurrent.atomic.AtomicReference /** * Singleton manager for the background React Native runtime. @@ -36,9 +42,38 @@ import java.util.concurrent.atomic.AtomicBoolean * - Cross-runtime communication via SharedRPC onWrite notifications */ class BackgroundThreadManager private constructor() { + // OneKey patch: the prebuilt RN AAR exposes the legacy six-argument HMRClient + // interface, while the patched JS client accepts an exact bundle URL as argument seven. + private interface HMRClient : JavaScriptModule { + fun setup( + platform: String?, + bundleEntry: String?, + host: String?, + port: Int, + isEnabled: Boolean, + scheme: String?, + fullBundleUrlOverride: String?, + ) + } + // OneKey patch: background uses the same local dev-vendor HBC as main, + // then evaluates its own modulesOnly Metro delta in the isolated runtime. + private data class DevVendorConfig( + val commonAssetName: String, + val fingerprint: String, + val backgroundHMREnabled: Boolean, + val runtimeGeneration: Long = 0, + ) private var bgReactHost: ReactHostImpl? = null private var reactPackages: List = emptyList() + private val backgroundRuntimeGeneration = AtomicLong(0) + private val backgroundHMRRestartInFlight = AtomicBoolean(false) + + @Volatile + private var lastBackgroundEntryURL: String? = null + + @Volatile + private var lastDevVendorConfig: DevVendorConfig? = null // Tracks the last resumed Activity so we can replay it onto the bg // ReactContext as soon as the bg host finishes initializing (covers the @@ -59,7 +94,18 @@ class BackgroundThreadManager private constructor() { // full process restart in that case. @Volatile private var mainReactHost: ReactHost? = null - private var isStarted = false + private val runnerState = AtomicReference(BackgroundRunnerState.IDLE) + + @Volatile + private var runnerStartFailureMessage: String? = null + + private enum class BackgroundRunnerState { + IDLE, + STARTING, + RUNNING, + FAILED, + DESTROYING, + } companion object { private const val MODULE_NAME = "background" @@ -101,10 +147,19 @@ class BackgroundThreadManager private constructor() { // ── JNI declarations ──────────────────────────────────────────────────── - private external fun nativeInstallSharedBridge(runtimePtr: Long, isMain: Boolean) + private external fun nativeInstallSharedBridge( + runtimePtr: Long, + isMain: Boolean, + runtimeGeneration: Long, + ) private external fun nativeSetupErrorHandler(runtimePtr: Long) private external fun nativeDestroy() - private external fun nativeExecuteWork(runtimePtr: Long, workId: Long) + private external fun nativeExecuteWork( + runtimePtr: Long, + workId: Long, + isMain: Boolean, + runtimeGeneration: Long, + ) /** * Evaluate the segment at [segmentPath] into the BACKGROUND runtime on its @@ -139,7 +194,11 @@ class BackgroundThreadManager private constructor() { * released and the JS promise resolves immediately instead of leaking until * teardown or the bg watchdog. Exactly-once on the native side. */ - private external fun nativeDropScheduledWork(isMain: Boolean, workId: Long) + private external fun nativeDropScheduledWork( + isMain: Boolean, + workId: Long, + runtimeGeneration: Long, + ) /** * Synchronously mark the SharedRPC listener for `runtimeId` as dead @@ -147,7 +206,19 @@ class BackgroundThreadManager private constructor() { * SharedRPC::invalidate (cpp/SharedRPC.cpp) for the cross-runtime * correctness rationale. */ - private external fun nativeInvalidateSharedRpc(runtimeId: String): Boolean + private external fun nativeInvalidateSharedRpc( + runtimeId: String, + runtimeGeneration: Long, + ): Boolean + + /** + * Quiesce background-native work and release JSI callbacks while this call + * still runs on the outgoing background runtime's JS thread. Destroying + * those callbacks from the UI or teardown worker thread is unsafe. + */ + private external fun nativeInvalidateBackgroundRuntimeOnJSThread( + runtimeGeneration: Long, + ): Boolean // ── SharedBridge ──────────────────────────────────────────────────────── @@ -183,7 +254,7 @@ class BackgroundThreadManager private constructor() { val ptr = context.javaScriptContextHolder?.get() ?: 0L if (ptr != 0L) { mainRuntimePtr = ptr - nativeInstallSharedBridge(ptr, true) + nativeInstallSharedBridge(ptr, true, 0) BTLogger.info("SharedBridge installed in main runtime") } else { BTLogger.warn("Main runtime pointer is 0, cannot install SharedBridge") @@ -332,7 +403,77 @@ class BackgroundThreadManager private constructor() { } } } - + private fun createDevVendorBundleLoader( + appContext: android.content.Context, + entryURL: String, + config: DevVendorConfig, + ): JSBundleLoader { + return object : JSBundleLoader() { + override fun loadScript(delegate: com.facebook.react.bridge.JSBundleLoaderDelegate): String { + val totalStart = System.nanoTime() + delegate.loadScriptFromAssets( + appContext.assets, + "assets://${config.commonAssetName}", + false, + ) + val assertionFile = File(appContext.cacheDir, "onekey-dev-vendor-assert-background.js") + val quotedEntryURL = org.json.JSONObject.quote(entryURL) + assertionFile.writeText( + "if(globalThis.__ONEKEY_DEV_VENDOR_FINGERPRINT__!==\"${config.fingerprint}\")" + + "{throw new Error(\"Dev-vendor common fingerprint mismatch\");}" + + "globalThis.__ONEKEY_DEV_VENDOR_FULL_BUNDLE_URL__=$quotedEntryURL;" + + "globalThis.__ONEKEY_RUNTIME_TARGET__=\"background\";" + + "globalThis.__ONEKEY_BACKGROUND_RUNTIME_GENERATION__=${config.runtimeGeneration};", + ) + delegate.loadScriptFromFile( + assertionFile.absolutePath, + entryURL, + false, + ) + val deltaFile = File( + appContext.cacheDir, + "onekey-dev-vendor-background-${config.fingerprint.take(12)}.bundle", + ) + val temporaryFile = File.createTempFile( + ".${deltaFile.name}-", + ".tmp", + deltaFile.parentFile, + ) + try { + val connection = java.net.URL(entryURL).openConnection() as java.net.HttpURLConnection + try { + connection.connectTimeout = 15_000 + connection.readTimeout = 60_000 + val statusCode = connection.responseCode + if (statusCode !in 200..299) { + throw IllegalStateException( + "Dev-vendor background delta returned HTTP $statusCode", + ) + } + connection.inputStream.use { input -> + temporaryFile.outputStream().use { output -> input.copyTo(output) } + } + } finally { + connection.disconnect() + } + android.system.Os.rename( + temporaryFile.absolutePath, + deltaFile.absolutePath, + ) + } catch (error: Exception) { + temporaryFile.delete() + throw RuntimeException("Failed to download dev-vendor background delta", error) + } + delegate.loadScriptFromFile(deltaFile.absolutePath, entryURL, false) + val totalMs = (System.nanoTime() - totalStart) / 1_000_000.0 + BTLogger.info( + "[DevVendor] background common.hbc + Metro delta loaded in " + + "${String.format("%.1f", totalMs)}ms", + ) + return entryURL + } + } + } private fun createLocalFileBundleLoader(localPath: String, sourceURL: String): JSBundleLoader { return object : JSBundleLoader() { override fun loadScript(delegate: com.facebook.react.bridge.JSBundleLoaderDelegate): String { @@ -347,115 +488,332 @@ class BackgroundThreadManager private constructor() { } } - @OptIn(UnstableReactNativeAPI::class) fun startBackgroundRunnerWithEntryURL(context: ReactApplicationContext, entryURL: String) { - if (isStarted) { - BTLogger.warn("Background runner already started") - return + ensureBackgroundRunnerWithEntryURL(context.applicationContext, entryURL) + } + + @OptIn(UnstableReactNativeAPI::class) + fun ensureBackgroundRunnerWithEntryURL(context: Context, entryURL: String): Boolean { + return ensureBackgroundRunner(context, entryURL, null) + } + + @OptIn(UnstableReactNativeAPI::class) + fun ensureBackgroundRunnerWithDevVendor( + context: Context, + entryURL: String, + commonAssetName: String, + fingerprint: String, + backgroundHMREnabled: Boolean, + ): Boolean { + return ensureBackgroundRunner( + context, + entryURL, + DevVendorConfig(commonAssetName, fingerprint, backgroundHMREnabled), + ) + } + + @OptIn(UnstableReactNativeAPI::class) + private fun ensureBackgroundRunner( + context: Context, + entryURL: String, + devVendorConfig: DevVendorConfig?, + ): Boolean { + if (!runnerState.compareAndSet(BackgroundRunnerState.IDLE, BackgroundRunnerState.STARTING)) { + BTLogger.info("Background runner start coalesced: state=${getBackgroundRunnerState()}") + return false } + + runnerStartFailureMessage = null + val runtimeGeneration = backgroundRuntimeGeneration.incrementAndGet() + val activeDevVendorConfig = + devVendorConfig?.copy(runtimeGeneration = runtimeGeneration) + lastBackgroundEntryURL = entryURL + lastDevVendorConfig = devVendorConfig val bgStartTime = System.nanoTime() BTLogger.info("[SplitBundle] background runner starting with entryURL: $entryURL") val appContext = context.applicationContext - val packages = - if (reactPackages.isNotEmpty()) { - reactPackages - } else { - BTLogger.warn("No ReactPackages registered for background runtime; call setReactPackages(...) from host before start. Falling back to MainReactPackage only.") - listOf(MainReactPackage()) - } + try { + val packages = + if (reactPackages.isNotEmpty()) { + reactPackages + } else { + BTLogger.warn("No ReactPackages registered for background runtime; call setReactPackages(...) from host before start. Falling back to MainReactPackage only.") + listOf(MainReactPackage()) + } - val localBundlePath = resolveLocalBundlePath(entryURL) - val bundleLoader = - when { - // Debug mode: remote URL — use single bundle (Metro dev server) - isRemoteBundleUrl(entryURL) -> createDownloadedBundleLoader(appContext, entryURL) - - // OTA / local file path — try sequential loading with common bundle - localBundlePath != null -> { - val commonPath = resolveCommonBundlePath(localBundlePath) - if (commonPath != null) { - BTLogger.info("Using sequential file bundle loader: common=$commonPath, entry=$localBundlePath") - createSequentialFileBundleLoader(commonPath, localBundlePath, entryURL) - } else { - BTLogger.info("No common bundle found for OTA path, using single bundle: $localBundlePath") - createLocalFileBundleLoader(localBundlePath, entryURL) + val localBundlePath = resolveLocalBundlePath(entryURL) + val bundleLoader = + when { + activeDevVendorConfig != null && isRemoteBundleUrl(entryURL) -> + createDevVendorBundleLoader(appContext, entryURL, activeDevVendorConfig) + + // Debug mode: remote URL — use single bundle (Metro dev server) + isRemoteBundleUrl(entryURL) -> createDownloadedBundleLoader(appContext, entryURL) + + // OTA / local file path — try sequential loading with common bundle + localBundlePath != null -> { + val commonPath = resolveCommonBundlePath(localBundlePath) + if (commonPath != null) { + BTLogger.info("Using sequential file bundle loader: common=$commonPath, entry=$localBundlePath") + createSequentialFileBundleLoader(commonPath, localBundlePath, entryURL) + } else { + BTLogger.info("No common bundle found for OTA path, using single bundle: $localBundlePath") + createLocalFileBundleLoader(localBundlePath, entryURL) + } } - } - // Assets-based loading — try sequential loading with common.bundle in assets - entryURL.startsWith("assets://") -> { - val entryAssetName = entryURL.removePrefix("assets://") - if (hasCommonBundleInAssets(appContext)) { - BTLogger.info("Using sequential asset bundle loader: common=common.bundle, entry=$entryAssetName") - createSequentialAssetBundleLoader(appContext, "common.bundle", entryAssetName) - } else { - BTLogger.info("No common.bundle in assets, using single bundle: $entryURL") - JSBundleLoader.createAssetLoader(appContext, entryURL, true) + // Assets-based loading — try sequential loading with common.bundle in assets + entryURL.startsWith("assets://") -> { + val entryAssetName = entryURL.removePrefix("assets://") + if (hasCommonBundleInAssets(appContext)) { + BTLogger.info("Using sequential asset bundle loader: common=common.bundle, entry=$entryAssetName") + createSequentialAssetBundleLoader(appContext, "common.bundle", entryAssetName) + } else { + BTLogger.info("No common.bundle in assets, using single bundle: $entryURL") + JSBundleLoader.createAssetLoader(appContext, entryURL, true) + } + } + + // Bare filename (e.g. "background.bundle") — treat as asset + else -> { + if (hasCommonBundleInAssets(appContext)) { + BTLogger.info("Using sequential asset bundle loader: common=common.bundle, entry=$entryURL") + createSequentialAssetBundleLoader(appContext, "common.bundle", entryURL) + } else { + BTLogger.info("No common.bundle in assets, using single bundle: assets://$entryURL") + JSBundleLoader.createAssetLoader(appContext, "assets://$entryURL", true) + } } } - // Bare filename (e.g. "background.bundle") — treat as asset - else -> { - if (hasCommonBundleInAssets(appContext)) { - BTLogger.info("Using sequential asset bundle loader: common=common.bundle, entry=$entryURL") - createSequentialAssetBundleLoader(appContext, "common.bundle", entryURL) - } else { - BTLogger.info("No common.bundle in assets, using single bundle: assets://$entryURL") - JSBundleLoader.createAssetLoader(appContext, "assets://$entryURL", true) + val delegate = DefaultReactHostDelegate( + jsMainModulePath = MODULE_NAME, + jsBundleLoader = bundleLoader, + reactPackages = packages, + jsRuntimeFactory = HermesInstance(), + turboModuleManagerDelegateBuilder = DefaultTurboModuleManagerDelegate.Builder(), + ) + + val componentFactory = ComponentFactory() + DefaultComponentsRegistry.register(componentFactory) + + val host = ReactHostImpl( + appContext, + delegate, + componentFactory, + true, /* allowPackagerServerAccess */ + false, /* useDevSupport */ + ) + bgReactHost = host + + host.addReactInstanceEventListener(object : ReactInstanceEventListener { + override fun onReactContextInitialized(context: ReactContext) { + if (backgroundRuntimeGeneration.get() != runtimeGeneration) { + BTLogger.info( + "[BackgroundHMR] ignored stale ReactContext generation=$runtimeGeneration", + ) + return + } + val initMs = (System.nanoTime() - bgStartTime) / 1_000_000.0 + BTLogger.info("[SplitBundle] background ReactContext initialized in ${String.format("%.1f", initMs)}ms") + // Replay the most recent Activity resume so TurboModules on the + // bg host can see getCurrentActivity()/ActivityEventListeners + // from the very first call, even when the bg host finishes + // initializing after the Activity is already resumed. + replayLastResumedActivityOnUi() + context.runOnJSQueueThread { + try { + if ( + backgroundRuntimeGeneration.get() != runtimeGeneration || + bgReactHost?.currentReactContext !== context + ) { + BTLogger.info( + "[BackgroundHMR] skipped stale binding install generation=$runtimeGeneration", + ) + return@runOnJSQueueThread + } + val ptr = context.javaScriptContextHolder?.get() ?: 0L + if (ptr != 0L) { + bgRuntimePtr = ptr + nativeInstallSharedBridge(ptr, false, runtimeGeneration) + nativeSetupErrorHandler(ptr) + BTLogger.info("SharedBridge and error handler installed in background runtime") + } else { + BTLogger.error("Background runtime pointer is 0") + } + } catch (e: Exception) { + BTLogger.error("Error installing bindings in background runtime: ${e.message}") + } + } + if (activeDevVendorConfig?.backgroundHMREnabled == true) { + setupBackgroundHMRClient(context, entryURL, runtimeGeneration) } } - } + }) - val delegate = DefaultReactHostDelegate( - jsMainModulePath = MODULE_NAME, - jsBundleLoader = bundleLoader, - reactPackages = packages, - jsRuntimeFactory = HermesInstance(), - turboModuleManagerDelegateBuilder = DefaultTurboModuleManagerDelegate.Builder(), - ) + watchBackgroundRunnerStart(host.start(), bgStartTime, runtimeGeneration) + return true + } catch (t: Throwable) { + markBackgroundRunnerFailed(t, bgStartTime, runtimeGeneration) + return false + } + } - val componentFactory = ComponentFactory() - DefaultComponentsRegistry.register(componentFactory) + private fun setupBackgroundHMRClient( + context: ReactContext, + entryURL: String, + runtimeGeneration: Long, + ) { + try { + val uri = Uri.parse(entryURL) + val hmrRegistrationUri = uri.buildUpon() + .path("/apps/mobile/background.bundle") + .build() + val scheme = hmrRegistrationUri.scheme ?: "http" + val port = if (hmrRegistrationUri.port != -1) { + hmrRegistrationUri.port + } else if (scheme == "https") { + 443 + } else { + 80 + } + val path = hmrRegistrationUri.path?.removePrefix("/") + ?: "apps/mobile/background.bundle" + context.getJSModule(HMRClient::class.java).setup( + "android", + path, + hmrRegistrationUri.host, + port, + true, + scheme, + hmrRegistrationUri.toString(), + ) + BTLogger.info( + "[BackgroundHMR] client setup queued generation=$runtimeGeneration " + + "downloadURL=$entryURL registrationURL=$hmrRegistrationUri", + ) + } catch (t: Throwable) { + BTLogger.error("[BackgroundHMR] client setup failed: ${t.message}") + } + } + + private fun watchBackgroundRunnerStart( + task: TaskInterface, + bgStartTime: Long, + runtimeGeneration: Long, + ) { + Thread { + try { + task.waitForCompletion() + if ( + runnerState.get() != BackgroundRunnerState.STARTING || + backgroundRuntimeGeneration.get() != runtimeGeneration + ) { + return@Thread + } + when { + task.isFaulted() -> markBackgroundRunnerFailed( + task.getError() ?: RuntimeException("Background ReactHost start faulted"), + bgStartTime, + runtimeGeneration, + ) + task.isCancelled() -> markBackgroundRunnerFailed( + RuntimeException("Background ReactHost start cancelled"), + bgStartTime, + runtimeGeneration, + ) + runnerState.compareAndSet( + BackgroundRunnerState.STARTING, + BackgroundRunnerState.RUNNING, + ) -> { + val startMs = (System.nanoTime() - bgStartTime) / 1_000_000.0 + BTLogger.info("Background runner start task completed in ${String.format("%.1f", startMs)}ms") + } + } + } catch (t: Throwable) { + markBackgroundRunnerFailed(t, bgStartTime, runtimeGeneration) + } + }.apply { + isDaemon = true + name = "OneKey-BgThread-StartWatch" + start() + } + } - val host = ReactHostImpl( - appContext, - delegate, - componentFactory, - true, /* allowPackagerServerAccess */ - false, /* useDevSupport */ + private fun markBackgroundRunnerFailed( + t: Throwable, + bgStartTime: Long, + runtimeGeneration: Long, + ) { + if ( + backgroundRuntimeGeneration.get() != runtimeGeneration || + !runnerState.compareAndSet(BackgroundRunnerState.STARTING, BackgroundRunnerState.FAILED) + ) { + return + } + val startMs = (System.nanoTime() - bgStartTime) / 1_000_000.0 + runnerStartFailureMessage = t.message ?: t.javaClass.simpleName + bgRuntimePtr = 0 + BTLogger.error( + "Background runner start failed after ${String.format("%.1f", startMs)}ms: " + + runnerStartFailureMessage ) - bgReactHost = host - - host.addReactInstanceEventListener(object : ReactInstanceEventListener { - override fun onReactContextInitialized(context: ReactContext) { - val initMs = (System.nanoTime() - bgStartTime) / 1_000_000.0 - BTLogger.info("[SplitBundle] background ReactContext initialized in ${String.format("%.1f", initMs)}ms") - // Replay the most recent Activity resume so TurboModules on the - // bg host can see getCurrentActivity()/ActivityEventListeners - // from the very first call, even when the bg host finishes - // initializing after the Activity is already resumed. - replayLastResumedActivityOnUi() - context.runOnJSQueueThread { - try { - val ptr = context.javaScriptContextHolder?.get() ?: 0L - if (ptr != 0L) { - bgRuntimePtr = ptr - nativeInstallSharedBridge(ptr, false) - nativeSetupErrorHandler(ptr) - BTLogger.info("SharedBridge and error handler installed in background runtime") - } else { - BTLogger.error("Background runtime pointer is 0") + val failedHost = bgReactHost + val destroyTask = try { + failedHost?.destroy("Background runner start failed", t as? Exception) + } catch (destroyError: Throwable) { + BTLogger.error("Failed to destroy faulted background runner: ${destroyError.message}") + null + } + if (destroyTask == null) { + if (failedHost == null) { + runnerState.compareAndSet( + BackgroundRunnerState.FAILED, + BackgroundRunnerState.IDLE, + ) + } + return + } + Thread { + try { + destroyTask.waitForCompletion() + if (destroyTask.isFaulted() || destroyTask.isCancelled()) { + BTLogger.error( + "Faulted background runner teardown did not complete cleanly " + + "(faulted=${destroyTask.isFaulted()}, " + + "cancelled=${destroyTask.isCancelled()}): " + + destroyTask.getError()?.message, + ) + return@Thread + } + if ( + runnerState.compareAndSet( + BackgroundRunnerState.FAILED, + BackgroundRunnerState.DESTROYING, + ) + ) { + Handler(Looper.getMainLooper()).post { + if (bgReactHost === failedHost) { + bgReactHost = null } - } catch (e: Exception) { - BTLogger.error("Error installing bindings in background runtime: ${e.message}") + runnerState.set(BackgroundRunnerState.IDLE) + BTLogger.info( + "Faulted background runner teardown completed; retry is available", + ) } } + } catch (destroyError: Throwable) { + BTLogger.error( + "Failed to await faulted background runner teardown: " + + destroyError.message, + ) } - }) - - host.start() - isStarted = true + }.apply { + isDaemon = true + name = "OneKey-BgThread-FailedHostDestroy" + start() + } } /** @@ -463,9 +821,26 @@ class BackgroundThreadManager private constructor() { * Routes to main or background runtime's JS queue thread, then calls nativeExecuteWork. */ @DoNotStrip - fun scheduleOnJSThread(isMain: Boolean, workId: Long): Boolean { - val context = if (isMain) mainReactContext else bgReactHost?.currentReactContext - BTLogger.info("scheduleOnJSThread: isMain=$isMain, workId=$workId, context=${context != null}") + fun scheduleOnJSThread( + isMain: Boolean, + workId: Long, + runtimeGeneration: Long, + ): Boolean { + val backgroundState = runnerState.get() + val context = if (isMain) { + mainReactContext + } else if ( + backgroundState == BackgroundRunnerState.STARTING || + backgroundState == BackgroundRunnerState.RUNNING + ) { + bgReactHost?.currentReactContext + } else { + null + } + BTLogger.info( + "scheduleOnJSThread: isMain=$isMain, workId=$workId, " + + "generation=$runtimeGeneration, context=${context != null}", + ) if (context == null) { BTLogger.error("scheduleOnJSThread: context is null! isMain=$isMain, mainCtx=${mainReactContext != null}, bgHost=${bgReactHost != null}, bgCtx=${bgReactHost?.currentReactContext != null}") // The just-enqueued native work will never reach the JS thread. @@ -479,13 +854,27 @@ class BackgroundThreadManager private constructor() { } return try { val posted = context.runOnJSQueueThread { - // Re-read ptr inside the block — if a reload happened between - // scheduling and execution, the old ptr may be stale. + if ( + !isMain && + ( + backgroundRuntimeGeneration.get() != runtimeGeneration || + bgReactHost?.currentReactContext !== context + ) + ) { + BTLogger.info( + "scheduleOnJSThread: dropped stale background workId=$workId " + + "generation=$runtimeGeneration active=${backgroundRuntimeGeneration.get()}", + ) + nativeDropScheduledWork(isMain, workId, runtimeGeneration) + return@runOnJSQueueThread + } + // Re-read ptr only after proving this Runnable still belongs to + // the active context and generation. val ptr = if (isMain) mainRuntimePtr else bgRuntimePtr BTLogger.info("scheduleOnJSThread runOnJSQueueThread: isMain=$isMain, workId=$workId, ptr=$ptr") if (ptr != 0L) { try { - nativeExecuteWork(ptr, workId) + nativeExecuteWork(ptr, workId, isMain, runtimeGeneration) } catch (e: Exception) { BTLogger.error("Error executing work on JS thread: ${e.message}") } @@ -501,7 +890,7 @@ class BackgroundThreadManager private constructor() { // runtime recovers and main has no JS retry net). // drainPendingBgEvals inside the native fn is // gated to !isMain, so settling bg evals only happens for bg. - nativeDropScheduledWork(isMain, workId) + nativeDropScheduledWork(isMain, workId, runtimeGeneration) } } if (!posted) { @@ -541,7 +930,7 @@ class BackgroundThreadManager private constructor() { path: String, onComplete: (code: String?, message: String?) -> Unit ) { - if (!isStarted) { + if (!isBackgroundStarted) { // Bg runtime not started yet → retryable (the loader will re-attempt // once the bg host is up). onComplete("SPLIT_BUNDLE_NO_RUNTIME", "Background runtime not started") @@ -950,6 +1339,11 @@ class BackgroundThreadManager private constructor() { fun restart(context: ReactApplicationContext, mode: String, reason: String, promise: com.facebook.react.bridge.Promise) { val isUi = mode == "ui" val isAll = mode == "all" + val isBackgroundHMR = mode == "background" + if (isBackgroundHMR) { + restartBackgroundForHMR(context.applicationContext, reason, promise) + return + } if (!isUi && !isAll) { promise.reject( "BG_RESTART_ERROR", @@ -961,9 +1355,12 @@ class BackgroundThreadManager private constructor() { BTLogger.info("restart: mode=$mode reason=$reason") try { - nativeInvalidateSharedRpc("main") + nativeInvalidateSharedRpc("main", 0) if (isAll) { - nativeInvalidateSharedRpc("background") + nativeInvalidateSharedRpc( + "background", + backgroundRuntimeGeneration.incrementAndGet(), + ) } } catch (t: Throwable) { // Invalidate is best-effort; not fatal if the JNI call somehow @@ -1071,6 +1468,188 @@ class BackgroundThreadManager private constructor() { // any further code here is unreachable } + private fun restartBackgroundForHMR( + context: Context, + reason: String, + promise: com.facebook.react.bridge.Promise, + ) { + if (!BuildConfig.DEBUG) { + promise.reject( + "BG_RESTART_ERROR", + "Background HMR restart is unavailable in release builds", + ) + return + } + val generation = reason + .removePrefix("onekey-bg-hmr:") + .substringBefore(':') + .toLongOrNull() + if (!reason.startsWith("onekey-bg-hmr:") || generation == null) { + promise.reject( + "BG_RESTART_ERROR", + "Background HMR restart is missing its runtime generation", + ) + return + } + + Handler(Looper.getMainLooper()).post { + val activeGeneration = backgroundRuntimeGeneration.get() + if (generation != activeGeneration) { + BTLogger.info( + "[BackgroundHMR] ignored stale restart requested=$generation active=$activeGeneration", + ) + promise.resolve(null) + return@post + } + val entryURL = lastBackgroundEntryURL + val config = lastDevVendorConfig + if ( + entryURL == null || + config?.backgroundHMREnabled != true || + !backgroundHMRRestartInFlight.compareAndSet(false, true) + ) { + BTLogger.info("[BackgroundHMR] restart coalesced or disabled") + promise.resolve(null) + return@post + } + + val outgoingHost = bgReactHost + val outgoingContext = outgoingHost?.currentReactContext + val invalidatedGeneration = backgroundRuntimeGeneration.incrementAndGet() + runnerState.set(BackgroundRunnerState.DESTROYING) + bgRuntimePtr = 0 + val runtimeInvalidated = CountDownLatch(1) + val runtimeInvalidationSucceeded = AtomicBoolean(false) + val invalidationScheduled = try { + outgoingContext?.runOnJSQueueThread { + try { + nativeInvalidateBackgroundRuntimeOnJSThread( + invalidatedGeneration, + ) + runtimeInvalidationSucceeded.set(true) + } catch (t: Throwable) { + BTLogger.error( + "[BackgroundHMR] JS-thread invalidation failed: ${t.message}", + ) + try { + nativeInvalidateSharedRpc("background", invalidatedGeneration) + runtimeInvalidationSucceeded.set(true) + } catch (fallbackError: Throwable) { + BTLogger.error( + "[BackgroundHMR] fallback invalidation failed: " + + fallbackError.message, + ) + } + } finally { + runtimeInvalidated.countDown() + } + } == true + } catch (t: Throwable) { + BTLogger.error( + "[BackgroundHMR] failed to schedule JS-thread invalidation: ${t.message}", + ) + false + } + if (!invalidationScheduled) { + try { + // Safe fallback for a context whose JS queue is already + // unavailable. This retains the old off-thread callback + // disposal safeguards, but still quiesces SharedRPC. + nativeInvalidateSharedRpc("background", invalidatedGeneration) + runtimeInvalidationSucceeded.set(true) + } catch (t: Throwable) { + BTLogger.error( + "[BackgroundHMR] SharedRPC invalidate failed: ${t.message}", + ) + } + runtimeInvalidated.countDown() + } + promise.resolve(null) + + Thread { + try { + runtimeInvalidated.await() + } catch (t: Throwable) { + BTLogger.error( + "[BackgroundHMR] outgoing runtime invalidation wait failed: ${t.message}", + ) + backgroundHMRRestartInFlight.set(false) + return@Thread + } + if (!runtimeInvalidationSucceeded.get()) { + BTLogger.error( + "[BackgroundHMR] replacement blocked: runtime invalidation failed", + ) + backgroundHMRRestartInFlight.set(false) + return@Thread + } + val destroyTask = try { + outgoingHost?.destroy("Background HMR restart", null) + } catch (t: Throwable) { + BTLogger.error( + "[BackgroundHMR] outgoing host destroy threw: ${t.message}", + ) + null + } + if (outgoingHost != null && destroyTask == null) { + backgroundHMRRestartInFlight.set(false) + return@Thread + } + if (destroyTask != null) { + try { + destroyTask.waitForCompletion() + } catch (t: Throwable) { + BTLogger.error( + "[BackgroundHMR] outgoing host destroy wait failed: ${t.message}", + ) + backgroundHMRRestartInFlight.set(false) + return@Thread + } + if (destroyTask.isFaulted() || destroyTask.isCancelled()) { + BTLogger.error( + "[BackgroundHMR] outgoing host destroy did not complete cleanly " + + "(faulted=${destroyTask.isFaulted()}, " + + "cancelled=${destroyTask.isCancelled()}): " + + destroyTask.getError()?.message, + ) + backgroundHMRRestartInFlight.set(false) + return@Thread + } + } + Handler(Looper.getMainLooper()).post { + if (bgReactHost !== outgoingHost) { + BTLogger.error( + "[BackgroundHMR] replacement aborted: outgoing host changed", + ) + backgroundHMRRestartInFlight.set(false) + return@post + } + bgReactHost = null + if ( + !runnerState.compareAndSet( + BackgroundRunnerState.DESTROYING, + BackgroundRunnerState.IDLE, + ) + ) { + BTLogger.error( + "[BackgroundHMR] replacement aborted: unexpected state=" + + getBackgroundRunnerState(), + ) + backgroundHMRRestartInFlight.set(false) + return@post + } + BTLogger.info("[BackgroundHMR] starting replacement background runtime") + ensureBackgroundRunner(context, entryURL, config) + backgroundHMRRestartInFlight.set(false) + } + }.apply { + isDaemon = true + name = "OneKey-BgThread-HMRRestart" + start() + } + } + } + /** * Returns true if Runtime.exit(0) was reached (in which case the process * is now terminating and any code after the call site is unreachable). @@ -1097,9 +1676,24 @@ class BackgroundThreadManager private constructor() { // ── Lifecycle ─────────────────────────────────────────────────────────── - val isBackgroundStarted: Boolean get() = isStarted + val isBackgroundStarted: Boolean + get() = when (runnerState.get()) { + BackgroundRunnerState.STARTING, BackgroundRunnerState.RUNNING -> true + else -> false + } + + fun getBackgroundRunnerState(): String = when (runnerState.get()) { + BackgroundRunnerState.IDLE -> "idle" + BackgroundRunnerState.STARTING -> "starting" + BackgroundRunnerState.RUNNING -> "running" + BackgroundRunnerState.FAILED -> "failed" + BackgroundRunnerState.DESTROYING -> "destroying" + } + + fun getBackgroundRunnerFailureMessage(): String? = runnerStartFailureMessage fun destroy() { + runnerState.set(BackgroundRunnerState.DESTROYING) nativeDestroy() bgRuntimePtr = 0 mainRuntimePtr = 0 @@ -1107,7 +1701,8 @@ class BackgroundThreadManager private constructor() { mainReactHost = null bgReactHost?.destroy("BackgroundThreadManager destroyed", null) bgReactHost = null - isStarted = false + runnerStartFailureMessage = null + runnerState.set(BackgroundRunnerState.IDLE) lastResumedActivityRef = WeakReference(null) } } diff --git a/native-modules/react-native-background-thread/ios/BackgroundRunnerReactNativeDelegate.h b/native-modules/react-native-background-thread/ios/BackgroundRunnerReactNativeDelegate.h index 0b7c8823..950cb1d3 100644 --- a/native-modules/react-native-background-thread/ios/BackgroundRunnerReactNativeDelegate.h +++ b/native-modules/react-native-background-thread/ios/BackgroundRunnerReactNativeDelegate.h @@ -30,7 +30,13 @@ NS_ASSUME_NONNULL_BEGIN * @return Initialized delegate instance with filtered module access */ - (instancetype)init; - +/// Configure debug startup as local common HBC followed by a remote +/// modules-only background entry bundle. +- (void)configureDevVendorCommonBundlePath:(NSString *)commonBundlePath + entryURL:(NSURL *)entryURL + fingerprint:(NSString *)fingerprint + backgroundHMREnabled:(BOOL)backgroundHMREnabled + runtimeGeneration:(NSUInteger)runtimeGeneration; /** * Register a HBC segment in the background runtime (Phase 2.5 spike). * Uses RCTInstance's registerSegmentWithId:path: API. diff --git a/native-modules/react-native-background-thread/ios/BackgroundRunnerReactNativeDelegate.mm b/native-modules/react-native-background-thread/ios/BackgroundRunnerReactNativeDelegate.mm index 4cadac61..4acdc374 100644 --- a/native-modules/react-native-background-thread/ios/BackgroundRunnerReactNativeDelegate.mm +++ b/native-modules/react-native-background-thread/ios/BackgroundRunnerReactNativeDelegate.mm @@ -12,8 +12,9 @@ #include "SharedRPC.h" #import +#import #import - +#import #if __has_include() // static libs / header maps (no use_frameworks!) #import @@ -42,7 +43,33 @@ namespace jsi = facebook::jsi; namespace TurboModuleConvertUtils = facebook::react::TurboModuleConvertUtils; using namespace facebook::react; - +namespace { +constexpr int64_t kDevVendorLoadTimeoutSeconds = 60; +class BackgroundNSDataJSIBuffer : public facebook::jsi::Buffer { + public: + explicit BackgroundNSDataJSIBuffer(NSData *data) : data_(data) {} + size_t size() const override { return data_.length; } + const uint8_t *data() const override { + return static_cast(data_.bytes); + } + private: + NSData *data_; +}; +} // namespace +@interface BTDevVendorDownloadState : NSObject +@property (nonatomic, strong, nullable) NSData *data; +@property (nonatomic, strong, nullable) NSError *error; +@property (nonatomic, strong) dispatch_semaphore_t ready; +@end +@implementation BTDevVendorDownloadState +- (instancetype)init +{ + if (self = [super init]) { + _ready = dispatch_semaphore_create(0); + } + return self; +} +@end static void stubJsiFunction(jsi::Runtime &runtime, jsi::Object &object, const char *name) { object.setProperty( @@ -163,6 +190,11 @@ @interface BackgroundReactNativeDelegate () { RCTInstance *_rctInstance; std::string _origin; std::string _jsBundleSource; + NSString *_devVendorCommonBundlePath; + NSURL *_devVendorEntryURL; + NSString *_devVendorFingerprint; + BOOL _devVendorBackgroundHMREnabled; + NSUInteger _backgroundRuntimeGeneration; // YES when `bundleURL` observed an active OTA main bundle on its most // recent invocation, regardless of whether OTA common actually resolved. // Captures the invariant "this delegate is locked to OTA territory; IPA @@ -182,7 +214,11 @@ @interface BackgroundReactNativeDelegate () { - (void)cleanupResources; - (void)setupErrorHandler:(jsi::Runtime &)runtime; - +- (void)finishHostStartWithBundleData:(NSData * _Nullable)bundleData + sourceURL:(NSString * _Nullable)sourceURL + fingerprint:(NSString * _Nullable)fingerprint + evaluateEntry:(BOOL)evaluateEntry + downloadState:(BTDevVendorDownloadState * _Nullable)downloadState; @end @implementation BackgroundReactNativeDelegate @@ -221,7 +257,18 @@ - (void)setJsBundleSource:(std::string)jsBundleSource { _jsBundleSource = jsBundleSource; } - +- (void)configureDevVendorCommonBundlePath:(NSString *)commonBundlePath + entryURL:(NSURL *)entryURL + fingerprint:(NSString *)fingerprint + backgroundHMREnabled:(BOOL)backgroundHMREnabled + runtimeGeneration:(NSUInteger)runtimeGeneration +{ + _devVendorCommonBundlePath = [commonBundlePath copy]; + _devVendorEntryURL = [entryURL copy]; + _devVendorFingerprint = [fingerprint copy]; + _devVendorBackgroundHMREnabled = backgroundHMREnabled; + _backgroundRuntimeGeneration = runtimeGeneration; +} - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge { return [self bundleURL]; @@ -232,7 +279,9 @@ - (NSURL *)bundleURL // Reset on every call so a re-entry (e.g. host restart) can't carry over // a stale OTA assertion from a previous load. _otaActiveAtBundleResolve = NO; - + if (_devVendorCommonBundlePath.length > 0) { + return [NSURL fileURLWithPath:_devVendorCommonBundlePath]; + } // When _jsBundleSource is set (dev mode or explicit override), use it as-is. // This is a single full bundle (not split), so DON'T use common+entry strategy. if (!_jsBundleSource.empty()) { @@ -323,7 +372,56 @@ - (void)hostDidStart:(RCTHost *)host if (!_rctInstance) { return; } - + if (_devVendorEntryURL) { + NSURL *entryURL = _devVendorEntryURL; + NSString *fingerprint = _devVendorFingerprint; + BTDevVendorDownloadState *downloadState = [[BTDevVendorDownloadState alloc] init]; + [RCTJavaScriptLoader loadBundleAtURL:entryURL + onProgress:^(RCTLoadingProgress *progress) { (void)progress; } + onComplete:^(NSError *error, RCTSource *source) { + downloadState.error = error; + downloadState.data = source.data; + dispatch_semaphore_signal(downloadState.ready); + }]; + [self finishHostStartWithBundleData:nil + sourceURL:entryURL.absoluteString + fingerprint:fingerprint + evaluateEntry:YES + downloadState:downloadState]; + if (_devVendorBackgroundHMREnabled) { + NSURLComponents *hmrComponents = [NSURLComponents componentsWithURL:entryURL + resolvingAgainstBaseURL:NO]; + hmrComponents.path = @"/apps/mobile/background.bundle"; + NSURL *hmrRegistrationURL = hmrComponents.URL; + if (!hmrRegistrationURL) { + [BTLogger error:@"[BackgroundHMR] failed to construct registration URL"]; + return; + } + NSString *path = hmrRegistrationURL.path; + if ([path hasPrefix:@"/"]) { + path = [path substringFromIndex:1]; + } + NSString *scheme = hmrRegistrationURL.scheme ?: @"http"; + NSNumber *port = hmrRegistrationURL.port ?: @([scheme isEqualToString:@"https"] ? 443 : 80); + [host callFunctionOnJSModule:@"HMRClient" + method:@"setup" + args:@[ + @"ios", + path ?: @"apps/mobile/background.bundle", + hmrRegistrationURL.host ?: @"127.0.0.1", + port, + @YES, + scheme, + hmrRegistrationURL.absoluteString + ]]; + [BTLogger info:[NSString stringWithFormat: + @"[BackgroundHMR] client setup queued generation=%lu downloadURL=%@ registrationURL=%@", + (unsigned long)_backgroundRuntimeGeneration, + entryURL.absoluteString, + hmrRegistrationURL.absoluteString]]; + } + return; + } // When _jsBundleSource is set, the bundle loaded in bundleURL was already // a full single bundle (dev mode / explicit override), so skip entry loading. BOOL isSplitBundle = _jsBundleSource.empty(); @@ -359,49 +457,118 @@ - (void)hostDidStart:(RCTHost *)host [BTLogger warn:@"Background entry bundle not found, __setupBackgroundRPCHandler may not be defined"]; } } - + [self finishHostStartWithBundleData:bgBundleData + sourceURL:bgBundleSourceURL + fingerprint:nil + evaluateEntry:isSplitBundle + downloadState:nil]; +} +- (void)finishHostStartWithBundleData:(NSData * _Nullable)bundleData + sourceURL:(NSString * _Nullable)sourceURL + fingerprint:(NSString * _Nullable)fingerprint + evaluateEntry:(BOOL)evaluateEntry + downloadState:(BTDevVendorDownloadState * _Nullable)downloadState +{ + RCTInstance *instance = _rctInstance; + if (!instance) { + return; + } CFAbsoluteTime bgStartTime = CFAbsoluteTimeGetCurrent(); - - [_rctInstance callFunctionOnBufferedRuntimeExecutor:[=](jsi::Runtime &runtime) { - [self setupErrorHandler:runtime]; - - // Install SharedStore into background runtime - SharedStore::install(runtime); - - // Install SharedRPC with executor for cross-runtime notifications. - // Capture the bg RCTInstance __weak so executor lambdas still in flight - // when the bg host is torn down (BackgroundThread.restart mode=all, - // OTA bundle install) no-op cleanly instead of dispatching onto a - // freed instance and crashing. - __weak RCTInstance *weakBgInstance = _rctInstance; - RPCRuntimeExecutor bgExecutor = [weakBgInstance](std::function work) { - RCTInstance *strongBgInstance = weakBgInstance; - if (!strongBgInstance) { - return; + __weak RCTInstance *weakBgInstance = instance; + + [instance callFunctionOnBufferedRuntimeExecutor:[=](jsi::Runtime &runtime) { + try { + NSData *entryData = bundleData; + if (downloadState) { + // Queue this executor before the background surface starts. Once the + // local common HBC completes, wait for Metro without blocking main. + dispatch_time_t deadline = dispatch_time( + DISPATCH_TIME_NOW, kDevVendorLoadTimeoutSeconds * NSEC_PER_SEC); + if (dispatch_semaphore_wait(downloadState.ready, deadline) != 0) { + NSError *timeoutError = [NSError errorWithDomain:@"BackgroundThread" + code:21 + userInfo:@{ + NSLocalizedDescriptionKey: + @"Timed out loading dev-vendor background delta" + }]; + [BTLogger error:@"Dev-vendor background delta timed out after 60 seconds"]; + dispatch_async(dispatch_get_main_queue(), ^{ RCTFatal(timeoutError); }); + return; } - [strongBgInstance callFunctionOnBufferedRuntimeExecutor:[work](jsi::Runtime &rt) { - work(rt); - }]; - }; - SharedRPC::install(runtime, std::move(bgExecutor), "background"); - [BTLogger info:@"SharedStore and SharedRPC installed in background runtime"]; - - // In split-bundle mode, evaluate the background entry bundle now. - // This must happen BEFORE invokeOptionalGlobalFunction since the entry - // bundle defines __setupBackgroundRPCHandler. - if (isSplitBundle && bgBundleData && bgBundleData.length > 0) { - CFAbsoluteTime bgEvalStart = CFAbsoluteTimeGetCurrent(); - auto buffer = std::make_shared( - std::string(static_cast(bgBundleData.bytes), bgBundleData.length)); - runtime.evaluateJavaScript(std::move(buffer), [bgBundleSourceURL UTF8String]); - double bgEvalMs = (CFAbsoluteTimeGetCurrent() - bgEvalStart) * 1000.0; - [BTLogger info:[NSString stringWithFormat:@"[SplitBundle] bg entry evaluated in %.1fms", bgEvalMs]]; + if (downloadState.error || downloadState.data.length == 0) { + NSError *loadError = downloadState.error ?: [NSError errorWithDomain:@"BackgroundThread" + code:20 + userInfo:@{ + NSLocalizedDescriptionKey: + @"Dev-vendor background delta is empty" + }]; + [BTLogger error:[NSString stringWithFormat: + @"Dev-vendor background delta failed: %@", loadError.localizedDescription]]; + dispatch_async(dispatch_get_main_queue(), ^{ RCTFatal(loadError); }); + return; + } + entryData = downloadState.data; + } + + if (fingerprint.length > 0) { + jsi::Value marker = runtime.global().getProperty( + runtime, "__ONEKEY_DEV_VENDOR_FINGERPRINT__"); + if (!marker.isString() || + marker.asString(runtime).utf8(runtime) != std::string(fingerprint.UTF8String)) { + throw std::runtime_error("Dev-vendor common fingerprint mismatch"); + } + runtime.global().setProperty( + runtime, + "__ONEKEY_DEV_VENDOR_FULL_BUNDLE_URL__", + jsi::String::createFromUtf8(runtime, sourceURL.UTF8String)); + runtime.global().setProperty( + runtime, + "__ONEKEY_RUNTIME_TARGET__", + jsi::String::createFromUtf8(runtime, "background")); + runtime.global().setProperty( + runtime, + "__ONEKEY_BACKGROUND_RUNTIME_GENERATION__", + static_cast(_backgroundRuntimeGeneration)); + } + + [self setupErrorHandler:runtime]; + SharedStore::install(runtime); + + RPCRuntimeExecutor bgExecutor = [weakBgInstance](std::function work) { + RCTInstance *strongBgInstance = weakBgInstance; + if (!strongBgInstance) { + return; + } + [strongBgInstance callFunctionOnBufferedRuntimeExecutor:[work](jsi::Runtime &rt) { + work(rt); + }]; + }; + SharedRPC::install(runtime, std::move(bgExecutor), "background"); + [BTLogger info:@"SharedStore and SharedRPC installed in background runtime"]; + + // The entry defines __setupBackgroundRPCHandler, so it must execute + // before the runtime is reported ready. + if (evaluateEntry && entryData.length > 0 && sourceURL.length > 0) { + CFAbsoluteTime bgEvalStart = CFAbsoluteTimeGetCurrent(); + auto buffer = std::make_shared(entryData); + runtime.evaluateJavaScript(buffer, sourceURL.UTF8String); + double bgEvalMs = (CFAbsoluteTimeGetCurrent() - bgEvalStart) * 1000.0; + [BTLogger info:[NSString stringWithFormat:@"[SplitBundle] bg entry evaluated in %.1fms", bgEvalMs]]; + } + + double bgTotalMs = (CFAbsoluteTimeGetCurrent() - bgStartTime) * 1000.0; + [BTLogger info:[NSString stringWithFormat:@"[SplitBundle] bg hostDidStart total setup in %.1fms", bgTotalMs]]; + invokeOptionalGlobalFunction(runtime, "__setupBackgroundRPCHandler"); + } catch (const std::exception &exception) { + NSString *message = [NSString stringWithUTF8String:exception.what()]; + NSError *evaluationError = [NSError errorWithDomain:@"BackgroundThread" + code:21 + userInfo:@{ + NSLocalizedDescriptionKey: + message ?: @"Dev-vendor background evaluation failed" + }]; + dispatch_async(dispatch_get_main_queue(), ^{ RCTFatal(evaluationError); }); } - - double bgTotalMs = (CFAbsoluteTimeGetCurrent() - bgStartTime) * 1000.0; - [BTLogger info:[NSString stringWithFormat:@"[SplitBundle] bg hostDidStart total setup in %.1fms", bgTotalMs]]; - - invokeOptionalGlobalFunction(runtime, "__setupBackgroundRPCHandler"); }]; } diff --git a/native-modules/react-native-background-thread/ios/BackgroundThreadManager.h b/native-modules/react-native-background-thread/ios/BackgroundThreadManager.h index bccbf782..ed0c23e5 100644 --- a/native-modules/react-native-background-thread/ios/BackgroundThreadManager.h +++ b/native-modules/react-native-background-thread/ios/BackgroundThreadManager.h @@ -76,7 +76,10 @@ typedef NS_ENUM(NSInteger, EBgMgrSegmentEvalError) { /// @param entryURL The custom entry URL for the background runner + (void)installSharedBridgeInMainRuntime:(RCTHost *)host thenStartBackgroundRunnerWithEntryURL:(NSString *)entryURL; - +/// Install the main-runtime bridge and start a background runtime from a +/// local common HBC followed by a remote modules-only entry bundle. ++ (void)installSharedBridgeInMainRuntime:(RCTHost *)host + thenStartBackgroundRunnerWithDevVendorConfig:(NSDictionary *)config; /// Start background runner with default entry URL - (void)startBackgroundRunner; diff --git a/native-modules/react-native-background-thread/ios/BackgroundThreadManager.mm b/native-modules/react-native-background-thread/ios/BackgroundThreadManager.mm index 02c3cf80..129f85bd 100644 --- a/native-modules/react-native-background-thread/ios/BackgroundThreadManager.mm +++ b/native-modules/react-native-background-thread/ios/BackgroundThreadManager.mm @@ -142,7 +142,11 @@ @interface BackgroundThreadManager () // same reason as isStarted: written from the caller's thread (public API // doesn't pin start... to main) and read on main by the health-check. @property (atomic, copy) NSString *lastEntryURL; - +// Debug-only dev-vendor bootstrap contract. Retained across mode='all' +// reloads so the self-heal path cannot fall back to a monolithic bundle. +@property (atomic, copy, nullable) NSDictionary *lastDevVendorConfig; +@property (nonatomic, assign) NSUInteger backgroundRuntimeGeneration; +@property (nonatomic, assign) BOOL backgroundHMRRestartInFlight; // Forward declaration so restartWithMode: can call it; definition lives // after restartWithMode: for readability (the call site is the natural // place to start reading the restart flow). @@ -150,6 +154,11 @@ - (void)scheduleHealthCheckForRestart:(NSString *)mode isAll:(BOOL)isAll generation:(NSUInteger)myGen retried:(BOOL)retried; +- (void)startBackgroundRunnerWithDevVendorConfig:(NSDictionary *)config; +- (void)startBackgroundRunnerWithEntryURL:(NSString *)entryURL + devVendorConfig:(NSDictionary * _Nullable)devVendorConfig; +- (void)restartBackgroundForHMRReason:(NSString *)reason + completion:(void (^)(NSError * _Nullable error))completion; @end // First-stage delay for the post-reload health-check. Picked so the host's @@ -164,7 +173,11 @@ @implementation BackgroundThreadManager static dispatch_once_t onceToken; static NSString *const MODULE_NAME = @"background"; static NSString *const MODULE_DEBUG_URL = @"http://localhost:8082/apps/mobile/background.bundle?platform=ios&dev=true&lazy=false&minify=false&inlineSourceMap=false&modulesOnly=false&runModule=true&excludeSource=true&sourcePaths=url-server&app=so.onekey.wallet&transform.routerRoot=app&transform.engine=hermes&transform.bytecode=1&unstable_transformProfile=hermes-stable"; - +static NSString *const DEV_VENDOR_COMMON_PATH_KEY = @"commonBundlePath"; +static NSString *const DEV_VENDOR_ENTRY_URL_KEY = @"entryURL"; +static NSString *const DEV_VENDOR_FINGERPRINT_KEY = @"fingerprint"; +static NSString *const DEV_VENDOR_BACKGROUND_HMR_KEY = @"backgroundHMREnabled"; +static NSString *const BACKGROUND_HMR_REASON_PREFIX = @"onekey-bg-hmr:"; #pragma mark - Singleton + (instancetype)sharedInstance { @@ -258,7 +271,13 @@ + (void)installSharedBridgeInMainRuntime:(RCTHost *)host startBackgroundRunnerWithEntryURL:entryURL]; }]; } - ++ (void)installSharedBridgeInMainRuntime:(RCTHost *)host + thenStartBackgroundRunnerWithDevVendorConfig:(NSDictionary *)config { + [self installSharedBridgeInMainRuntime:host completion:^{ + [[BackgroundThreadManager sharedInstance] + startBackgroundRunnerWithDevVendorConfig:config]; + }]; +} #pragma mark - Public Methods - (void)startBackgroundRunner { @@ -271,6 +290,35 @@ - (void)startBackgroundRunner { } - (void)startBackgroundRunnerWithEntryURL:(NSString *)entryURL { + [self startBackgroundRunnerWithEntryURL:entryURL devVendorConfig:nil]; +} + +- (void)startBackgroundRunnerWithDevVendorConfig:(NSDictionary *)config { + NSString *commonBundlePath = config[DEV_VENDOR_COMMON_PATH_KEY]; + NSString *entryURL = config[DEV_VENDOR_ENTRY_URL_KEY]; + NSString *fingerprint = config[DEV_VENDOR_FINGERPRINT_KEY]; + NSString *backgroundHMRValue = config[DEV_VENDOR_BACKGROUND_HMR_KEY]; + NSURL *parsedEntryURL = [NSURL URLWithString:entryURL]; + NSRegularExpression *fingerprintPattern = + [NSRegularExpression regularExpressionWithPattern:@"^[0-9a-f]{64}$" + options:0 + error:nil]; + if (commonBundlePath.length == 0 || + ![[NSFileManager defaultManager] fileExistsAtPath:commonBundlePath] || + parsedEntryURL.host.length == 0 || + !([backgroundHMRValue isEqualToString:@"true"] || + [backgroundHMRValue isEqualToString:@"false"]) || + [fingerprintPattern numberOfMatchesInString:fingerprint + options:0 + range:NSMakeRange(0, fingerprint.length)] != 1) { + [BTLogger error:@"Invalid dev-vendor background bootstrap config"]; + return; + } + [self startBackgroundRunnerWithEntryURL:entryURL devVendorConfig:config]; +} + +- (void)startBackgroundRunnerWithEntryURL:(NSString *)entryURL + devVendorConfig:(NSDictionary * _Nullable)devVendorConfig { if (self.isStarted) { // Surface the URL mismatch when a second start... call would // otherwise silently drop the host's intent — most common in the @@ -293,18 +341,27 @@ - (void)startBackgroundRunnerWithEntryURL:(NSString *)entryURL { // Updated unconditionally — first-time and re-start with a new URL // both reflect into lastEntryURL. self.lastEntryURL = entryURL; + self.lastDevVendorConfig = devVendorConfig; [BTLogger info:[NSString stringWithFormat:@"Starting background runner with entryURL: %@", entryURL]]; dispatch_async(dispatch_get_main_queue(), ^{ + NSUInteger runtimeGeneration = ++self.backgroundRuntimeGeneration; NSDictionary *initialProperties = @{}; NSDictionary *launchOptions = @{}; self.reactNativeFactoryDelegate = [[BackgroundReactNativeDelegate alloc] init]; self.reactNativeFactory = CreateBackgroundReactNativeFactory(self.reactNativeFactoryDelegate); - + if (devVendorConfig) { + [self.reactNativeFactoryDelegate + configureDevVendorCommonBundlePath:devVendorConfig[DEV_VENDOR_COMMON_PATH_KEY] + entryURL:[NSURL URLWithString:devVendorConfig[DEV_VENDOR_ENTRY_URL_KEY]] + fingerprint:devVendorConfig[DEV_VENDOR_FINGERPRINT_KEY] + backgroundHMREnabled:[devVendorConfig[DEV_VENDOR_BACKGROUND_HMR_KEY] isEqualToString:@"true"] + runtimeGeneration:runtimeGeneration]; + } // Only set jsBundleSource for debug HTTP URLs or explicit OTA overrides. // Leaving the default release name ("background.bundle") unset lets the // delegate fall back to split-bundle mode (common.bundle + entry). - if (![entryURL isEqualToString:@"background.bundle"]) { + if (!devVendorConfig && ![entryURL isEqualToString:@"background.bundle"]) { [self.reactNativeFactoryDelegate setJsBundleSource:std::string([entryURL UTF8String])]; } @@ -491,6 +548,20 @@ - (void)restartWithMode:(NSString *)mode { BOOL isUI = [mode isEqualToString:@"ui"]; BOOL isAll = [mode isEqualToString:@"all"]; + BOOL isBackgroundHMR = [mode isEqualToString:@"background"]; + + if (isBackgroundHMR) { +#if DEBUG + [self restartBackgroundForHMRReason:reason completion:completion]; +#else + NSError *error = [NSError errorWithDomain:@"BackgroundThread" + code:12 + userInfo:@{NSLocalizedDescriptionKey: + @"Background HMR restart is unavailable in release builds"}]; + if (completion) completion(error); +#endif + return; + } if (!isUI && !isAll) { NSError *error = [NSError errorWithDomain:@"BackgroundThread" @@ -567,6 +638,59 @@ - (void)restartWithMode:(NSString *)mode } } +- (void)restartBackgroundForHMRReason:(NSString *)reason + completion:(void (^)(NSError * _Nullable error))completion +{ + dispatch_async(dispatch_get_main_queue(), ^{ + if (![reason hasPrefix:BACKGROUND_HMR_REASON_PREFIX]) { + NSError *error = [NSError errorWithDomain:@"BackgroundThread" + code:13 + userInfo:@{NSLocalizedDescriptionKey: + @"Background HMR restart is missing its runtime generation"}]; + if (completion) completion(error); + return; + } + NSString *generationAndReason = [reason substringFromIndex:BACKGROUND_HMR_REASON_PREFIX.length]; + NSRange separator = [generationAndReason rangeOfString:@":"]; + NSString *generationText = separator.location == NSNotFound + ? generationAndReason + : [generationAndReason substringToIndex:separator.location]; + NSScanner *scanner = [NSScanner scannerWithString:generationText]; + unsigned long long generation = 0; + if (![scanner scanUnsignedLongLong:&generation] || !scanner.isAtEnd || + generation != self.backgroundRuntimeGeneration) { + [BTLogger info:[NSString stringWithFormat: + @"[BackgroundHMR] ignored stale restart requested=%@ active=%lu", + generationText, + (unsigned long)self.backgroundRuntimeGeneration]]; + if (completion) completion(nil); + return; + } + NSDictionary *config = self.lastDevVendorConfig; + if (![config[DEV_VENDOR_BACKGROUND_HMR_KEY] isEqualToString:@"true"] || + self.backgroundHMRRestartInFlight) { + [BTLogger info:@"[BackgroundHMR] restart coalesced or disabled"]; + if (completion) completion(nil); + return; + } + + self.backgroundHMRRestartInFlight = YES; + ++self.backgroundRuntimeGeneration; + SharedRPC::invalidate("background"); + self.reactNativeFactory = nil; + self.reactNativeFactoryDelegate = nil; + self.isStarted = NO; + if (completion) completion(nil); + + // Leave the outgoing TurboModule callback before creating its replacement. + dispatch_async(dispatch_get_main_queue(), ^{ + [BTLogger info:@"[BackgroundHMR] starting replacement background runtime"]; + [self startBackgroundRunnerWithDevVendorConfig:config]; + self.backgroundHMRRestartInFlight = NO; + }); + }); +} + #pragma mark - Restart Health Check // Two-stage post-reload health-check. @@ -649,6 +773,7 @@ - (void)scheduleHealthCheckForRestart:(NSString *)mode if (isAll && !strongSelf.isStarted) { NSString *cachedURL = strongSelf.lastEntryURL; + NSDictionary *devVendorConfig = strongSelf.lastDevVendorConfig; // Treat the bundled default name as "no real cache" so the // OTA warn still fires for hosts that initially bootstrapped // with the default URL and haven't yet swapped to an OTA- @@ -656,7 +781,12 @@ - (void)scheduleHealthCheckForRestart:(NSString *)mode // lastEntryURL that distinguishes them. BOOL hasCustomCachedURL = cachedURL.length > 0 && ![cachedURL isEqualToString:@"background.bundle"]; - if (hasCustomCachedURL) { + if (devVendorConfig) { + [BTLogger info:[NSString stringWithFormat: + @"restart(%@): bg not respawned by host AppDelegate; replaying dev-vendor common + delta", + mode]]; + [strongSelf startBackgroundRunnerWithDevVendorConfig:devVendorConfig]; + } else if (hasCustomCachedURL) { // Preferred path: replay the host's last entry URL. On OTA // devices this is the OTA-resolved bundle, which keeps the // bg moduleId table aligned with the new main bundle and diff --git a/native-modules/react-native-background-thread/package.json b/native-modules/react-native-background-thread/package.json index e4eb5071..a75cb71a 100644 --- a/native-modules/react-native-background-thread/package.json +++ b/native-modules/react-native-background-thread/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-background-thread", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-background-thread", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-bundle-crypto/package.json b/native-modules/react-native-bundle-crypto/package.json index c6ecd9d4..bf409b20 100644 --- a/native-modules/react-native-bundle-crypto/package.json +++ b/native-modules/react-native-bundle-crypto/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-bundle-crypto", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-bundle-crypto", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-bundle-update/package.json b/native-modules/react-native-bundle-update/package.json index 2b657b20..ce1305fb 100644 --- a/native-modules/react-native-bundle-update/package.json +++ b/native-modules/react-native-bundle-update/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-bundle-update", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-bundle-update", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-check-biometric-auth-changed/package.json b/native-modules/react-native-check-biometric-auth-changed/package.json index a8aa4013..bd72b81f 100644 --- a/native-modules/react-native-check-biometric-auth-changed/package.json +++ b/native-modules/react-native-check-biometric-auth-changed/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-check-biometric-auth-changed", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-check-biometric-auth-changed", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-cloud-fs/package.json b/native-modules/react-native-cloud-fs/package.json index 2d1484fa..208ed0ac 100644 --- a/native-modules/react-native-cloud-fs/package.json +++ b/native-modules/react-native-cloud-fs/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-cloud-fs", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-cloud-fs TurboModule for OneKey", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-cloud-kit-module/package.json b/native-modules/react-native-cloud-kit-module/package.json index 2cac44c8..bca39a03 100644 --- a/native-modules/react-native-cloud-kit-module/package.json +++ b/native-modules/react-native-cloud-kit-module/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-cloud-kit-module", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-cloud-kit-module", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-device-utils/package.json b/native-modules/react-native-device-utils/package.json index e3c00a05..291ab42f 100644 --- a/native-modules/react-native-device-utils/package.json +++ b/native-modules/react-native-device-utils/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-device-utils", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-device-utils", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-dns-lookup/package.json b/native-modules/react-native-dns-lookup/package.json index dc55ab1a..da86f01d 100644 --- a/native-modules/react-native-dns-lookup/package.json +++ b/native-modules/react-native-dns-lookup/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-dns-lookup", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-dns-lookup", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-get-random-values/package.json b/native-modules/react-native-get-random-values/package.json index 4718e2d4..c5e319c6 100644 --- a/native-modules/react-native-get-random-values/package.json +++ b/native-modules/react-native-get-random-values/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-get-random-values", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-get-random-values", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-keychain-module/package.json b/native-modules/react-native-keychain-module/package.json index 7cab5871..e672b4a7 100644 --- a/native-modules/react-native-keychain-module/package.json +++ b/native-modules/react-native-keychain-module/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-keychain-module", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-keychain-module", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-lite-card/package.json b/native-modules/react-native-lite-card/package.json index 8344e0d5..f8b5701f 100644 --- a/native-modules/react-native-lite-card/package.json +++ b/native-modules/react-native-lite-card/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-lite-card", - "version": "3.0.90", + "version": "3.0.91", "description": "lite card", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-network-info/package.json b/native-modules/react-native-network-info/package.json index 1167d1f3..857ed61d 100644 --- a/native-modules/react-native-network-info/package.json +++ b/native-modules/react-native-network-info/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-network-info", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-network-info", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-network-throttle/package.json b/native-modules/react-native-network-throttle/package.json index 1fb4ed38..37a73a28 100644 --- a/native-modules/react-native-network-throttle/package.json +++ b/native-modules/react-native-network-throttle/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-network-throttle", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-network-throttle", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-pbkdf2/package.json b/native-modules/react-native-pbkdf2/package.json index 21928306..4ef54d3a 100644 --- a/native-modules/react-native-pbkdf2/package.json +++ b/native-modules/react-native-pbkdf2/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-pbkdf2", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-pbkdf2", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-perf-memory/package.json b/native-modules/react-native-perf-memory/package.json index dbfcf847..8c8f31c5 100644 --- a/native-modules/react-native-perf-memory/package.json +++ b/native-modules/react-native-perf-memory/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-perf-memory", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-perf-memory", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-perf-stats/package.json b/native-modules/react-native-perf-stats/package.json index 4a6f4495..5af9c677 100644 --- a/native-modules/react-native-perf-stats/package.json +++ b/native-modules/react-native-perf-stats/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-perf-stats", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-perf-stats", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-ping/package.json b/native-modules/react-native-ping/package.json index d78f6f8f..b87e3e86 100644 --- a/native-modules/react-native-ping/package.json +++ b/native-modules/react-native-ping/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-ping", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-ping TurboModule for OneKey", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-range-downloader/package.json b/native-modules/react-native-range-downloader/package.json index d1dd5faf..6279d1fd 100644 --- a/native-modules/react-native-range-downloader/package.json +++ b/native-modules/react-native-range-downloader/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-range-downloader", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-range-downloader", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-sni-connect/package.json b/native-modules/react-native-sni-connect/package.json index da424f9a..41e362b1 100644 --- a/native-modules/react-native-sni-connect/package.json +++ b/native-modules/react-native-sni-connect/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-sni-connect", - "version": "3.0.90", + "version": "3.0.91", "description": "A React Native library for SNI-based HTTP requests with DNS caching and request management", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-splash-screen/package.json b/native-modules/react-native-splash-screen/package.json index 36e33dfd..1bfa2e01 100644 --- a/native-modules/react-native-splash-screen/package.json +++ b/native-modules/react-native-splash-screen/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-splash-screen", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-splash-screen", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-split-bundle-loader/ios/SplitBundleLoader.h b/native-modules/react-native-split-bundle-loader/ios/SplitBundleLoader.h index e3178b90..aeb0f842 100644 --- a/native-modules/react-native-split-bundle-loader/ios/SplitBundleLoader.h +++ b/native-modules/react-native-split-bundle-loader/ios/SplitBundleLoader.h @@ -24,5 +24,11 @@ /// @param bundlePath Absolute filesystem path to the bundle file. /// @param host The RCTHost whose runtime should evaluate the bundle. + (void)loadEntryBundle:(NSString *)bundlePath inHost:(id)host; - +/// Download and evaluate a dev-vendor modules-only entry bundle after the +/// host has booted from its local common HBC. HMR setup is queued after the +/// entry bundle evaluation. ++ (void)loadDevVendorEntryBundle:(NSURL *)bundleURL + hmrBundleURL:(NSURL *)hmrBundleURL + fingerprint:(NSString *)fingerprint + inHost:(id)host; @end diff --git a/native-modules/react-native-split-bundle-loader/ios/SplitBundleLoader.mm b/native-modules/react-native-split-bundle-loader/ios/SplitBundleLoader.mm index 7ec0db39..bdb58639 100644 --- a/native-modules/react-native-split-bundle-loader/ios/SplitBundleLoader.mm +++ b/native-modules/react-native-split-bundle-loader/ios/SplitBundleLoader.mm @@ -1,5 +1,9 @@ #import "SplitBundleLoader.h" #import "SBLLogger.h" +#import +#import +#import +#import #import #import #import @@ -11,7 +15,6 @@ #include namespace { - // Zero-copy jsi::Buffer over an NSData (M4/M5). // // WHY: the previous code did `std::string(data.bytes, data.length)` inside a @@ -901,7 +904,149 @@ + (void)loadEntryBundle:(NSString *)bundlePath inHost:(id)host double totalMs = (CFAbsoluteTimeGetCurrent() - startTime) * 1000.0; [SBLLogger info:[NSString stringWithFormat:@"[SplitBundle] loadEntryBundle: %@ dispatched in %.1fms (eval is async)", sourceURL, totalMs]]; } - ++ (void)loadDevVendorEntryBundle:(NSURL *)bundleURL + hmrBundleURL:(NSURL *)hmrBundleURL + fingerprint:(NSString *)fingerprint + inHost:(id)host +{ + if (!host || !bundleURL || bundleURL.fileURL || bundleURL.host.length == 0 || + !hmrBundleURL || hmrBundleURL.fileURL || hmrBundleURL.host.length == 0 || + fingerprint.length == 0) { + [SBLLogger warn:@"loadDevVendorEntryBundle: invalid arguments"]; + return; + } + RCTHost *reactHost = (RCTHost *)host; + Ivar ivar = class_getInstanceVariable([reactHost class], "_instance"); + RCTInstance *instance = ivar ? object_getIvar(reactHost, ivar) : nil; + if (!instance) { + [SBLLogger warn:@"loadDevVendorEntryBundle: RCTInstance is unavailable"]; + return; + } + NSURLComponents *components = [NSURLComponents componentsWithURL:hmrBundleURL + resolvingAgainstBaseURL:NO]; + NSString *path = [components.path hasPrefix:@"/"] + ? [components.path substringFromIndex:1] + : components.path; + NSString *scheme = components.scheme.lowercaseString; + NSString *hostName = components.host; + NSNumber *port = components.port; + if (!port && [scheme isEqualToString:@"http"]) { + port = @80; + } else if (!port && [scheme isEqualToString:@"https"]) { + port = @443; + } + RCTDevSettings *devSettings = + (RCTDevSettings *)[reactHost.moduleRegistry moduleForName:"DevSettings"]; + if (!devSettings || path.length == 0 || hostName.length == 0 || + scheme.length == 0 || port.integerValue <= 0 || port.integerValue > 65535) { + NSError *configurationError = [NSError errorWithDomain:@"SplitBundleLoader" + code:3 + userInfo:@{ + NSLocalizedDescriptionKey: + @"Invalid dev-vendor HMR configuration" + }]; + [SBLLogger error:@"loadDevVendorEntryBundle: invalid HMR configuration"]; + RCTFatal(configurationError); + return; + } + __weak RCTHost *weakHost = reactHost; + __weak RCTInstance *weakInstance = instance; + __block NSError *downloadError = nil; + __block RCTSource *downloadedSource = nil; + dispatch_semaphore_t downloadReady = dispatch_semaphore_create(0); + dispatch_semaphore_t hostRegistrationReady = dispatch_semaphore_create(0); + [RCTJavaScriptLoader loadBundleAtURL:bundleURL + onProgress:^(RCTLoadingProgress *progress) { (void)progress; } + onComplete:^(NSError *error, RCTSource *source) { + downloadError = error; + downloadedSource = source; + dispatch_semaphore_signal(downloadReady); + }]; + dispatch_async(dispatch_get_main_queue(), ^{ + // Match the production loader's next-run-loop deferral so Expo finishes + // native module registration before the entry begins evaluating. + dispatch_semaphore_signal(hostRegistrationReady); + }); + // Queue this before RCTHost starts/restarts surfaces. The executor remains + // buffered until common.hbc completes, then waits only for Metro I/O. This + // preserves common -> delta -> runApplication ordering without blocking the + // main thread. Let RCTJavaScriptLoader completion govern the cold-build wait: + // a fixed deadline can crash a healthy but contended Metro serialization. + // Keep bundleManager on the local common HBC until this buffered executor + // proves RCTInstance completed the initial read. + [instance callFunctionOnBufferedRuntimeExecutor:^(facebook::jsi::Runtime &runtime) { + dispatch_semaphore_wait(downloadReady, DISPATCH_TIME_FOREVER); + dispatch_semaphore_wait(hostRegistrationReady, DISPATCH_TIME_FOREVER); + RCTHost *strongHost = weakHost; + RCTInstance *strongInstance = weakInstance; + Ivar currentIvar = strongHost + ? class_getInstanceVariable([strongHost class], "_instance") + : nil; + if (!strongHost || !strongInstance || !currentIvar || + object_getIvar(strongHost, currentIvar) != strongInstance) { + return; + } + RCTSource *source = downloadedSource; + if (downloadError || source.data.length == 0) { + NSError *loadError = downloadError ?: [NSError errorWithDomain:@"SplitBundleLoader" + code:1 + userInfo:@{ + NSLocalizedDescriptionKey: + @"Dev-vendor main delta is empty" + }]; + [SBLLogger error:[NSString stringWithFormat: + @"loadDevVendorEntryBundle failed: %@", loadError.localizedDescription]]; + dispatch_async(dispatch_get_main_queue(), ^{ RCTFatal(loadError); }); + return; + } + // Keep native reload targeting the live graph after the common HBC is read. + strongHost.bundleManager.bundleURL = bundleURL; + NSData *data = source.data; + NSString *sourceURL = hmrBundleURL.absoluteString; + try { + facebook::jsi::Value marker = runtime.global().getProperty( + runtime, "__ONEKEY_DEV_VENDOR_FINGERPRINT__"); + if (!marker.isString() || + marker.asString(runtime).utf8(runtime) != std::string(fingerprint.UTF8String)) { + throw std::runtime_error("Dev-vendor common fingerprint mismatch"); + } + runtime.global().setProperty( + runtime, + "__ONEKEY_DEV_VENDOR_FULL_BUNDLE_URL__", + facebook::jsi::String::createFromUtf8(runtime, sourceURL.UTF8String)); + auto buffer = std::make_shared(data); + runtime.evaluateJavaScript(buffer, sourceURL.UTF8String); + [SBLLogger info:[NSString stringWithFormat: + @"[DevVendor] main common.hbc + Metro delta ready (%lu bytes)", + (unsigned long)data.length]]; + } catch (const std::exception &exception) { + NSString *message = [NSString stringWithUTF8String:exception.what()]; + NSError *evaluationError = [NSError errorWithDomain:@"SplitBundleLoader" + code:2 + userInfo:@{ + NSLocalizedDescriptionKey: + message ?: @"Dev-vendor main delta evaluation failed" + }]; + dispatch_async(dispatch_get_main_queue(), ^{ RCTFatal(evaluationError); }); + } + }]; + // The initial HBC has a file URL, so RN intentionally skipped HMR setup. + // Queue exactly one setup call after the common+delta executor but before + // RCTHost queues surface startup. Full reload creates a new runtime and runs + // this path again; Fast Refresh reuses the existing HMR client. + [reactHost callFunctionOnJSModule:@"HMRClient" + method:@"setup" + args:@[ + @"ios", + path, + hostName, + port, + @(devSettings.isHotLoadingEnabled), + scheme, + hmrBundleURL.absoluteString + ]]; + [SBLLogger info:@"[DevVendor] main HMR client setup queued"]; +} // MARK: - loadSegment - (void)loadSegment:(double)segmentId diff --git a/native-modules/react-native-split-bundle-loader/package.json b/native-modules/react-native-split-bundle-loader/package.json index 58132b24..ea79c040 100644 --- a/native-modules/react-native-split-bundle-loader/package.json +++ b/native-modules/react-native-split-bundle-loader/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-split-bundle-loader", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-split-bundle-loader", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-tcp-socket/package.json b/native-modules/react-native-tcp-socket/package.json index 6ac086c4..5efb2bce 100644 --- a/native-modules/react-native-tcp-socket/package.json +++ b/native-modules/react-native-tcp-socket/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-tcp-socket", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-tcp-socket", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-zip-archive/package.json b/native-modules/react-native-zip-archive/package.json index ae781831..f479d6ac 100644 --- a/native-modules/react-native-zip-archive/package.json +++ b/native-modules/react-native-zip-archive/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-zip-archive", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-zip-archive Nitro HybridObject for OneKey", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-views/react-native-auto-size-input/package.json b/native-views/react-native-auto-size-input/package.json index b270645e..0d61f3b7 100644 --- a/native-views/react-native-auto-size-input/package.json +++ b/native-views/react-native-auto-size-input/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-auto-size-input", - "version": "3.0.90", + "version": "3.0.91", "description": "Auto-sizing text input with font scaling, prefix and suffix support", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-views/react-native-chart-webview/package.json b/native-views/react-native-chart-webview/package.json index 1f73a3d4..40742dc4 100644 --- a/native-views/react-native-chart-webview/package.json +++ b/native-views/react-native-chart-webview/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-chart-webview", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-chart-webview", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-views/react-native-pager-view/package.json b/native-views/react-native-pager-view/package.json index dd200be4..23e5c597 100644 --- a/native-views/react-native-pager-view/package.json +++ b/native-views/react-native-pager-view/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-pager-view", - "version": "3.0.90", + "version": "3.0.91", "description": "React Native wrapper for Android and iOS ViewPager", "source": "./src/index.tsx", "main": "./lib/module/index.js", diff --git a/native-views/react-native-perp-depth-bar/package.json b/native-views/react-native-perp-depth-bar/package.json index 5a553f2a..6983aa28 100644 --- a/native-views/react-native-perp-depth-bar/package.json +++ b/native-views/react-native-perp-depth-bar/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-perp-depth-bar", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-perp-depth-bar", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-views/react-native-scroll-guard/package.json b/native-views/react-native-scroll-guard/package.json index 5f2c86bd..5549d2ca 100644 --- a/native-views/react-native-scroll-guard/package.json +++ b/native-views/react-native-scroll-guard/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-scroll-guard", - "version": "3.0.90", + "version": "3.0.91", "description": "A native view wrapper that prevents parent scrollable containers (PagerView/ViewPager2) from intercepting child scroll gestures", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-views/react-native-segment-slider/package.json b/native-views/react-native-segment-slider/package.json index d9dff0b3..35c8441b 100644 --- a/native-views/react-native-segment-slider/package.json +++ b/native-views/react-native-segment-slider/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-segment-slider", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-segment-slider", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-views/react-native-skeleton/package.json b/native-views/react-native-skeleton/package.json index 2342d6fb..a532ea07 100644 --- a/native-views/react-native-skeleton/package.json +++ b/native-views/react-native-skeleton/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-skeleton", - "version": "3.0.90", + "version": "3.0.91", "description": "react-native-skeleton", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-views/react-native-tab-view/package.json b/native-views/react-native-tab-view/package.json index 39588a11..d14bdef4 100644 --- a/native-views/react-native-tab-view/package.json +++ b/native-views/react-native-tab-view/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-tab-view", - "version": "3.0.90", + "version": "3.0.91", "description": "Native Bottom Tabs for React Native (UIKit implementation)", "source": "./src/index.tsx", "main": "./lib/module/index.js", diff --git a/native-views/react-native-text-input/LICENSE b/native-views/react-native-text-input/LICENSE new file mode 100644 index 00000000..c7fd288b --- /dev/null +++ b/native-views/react-native-text-input/LICENSE @@ -0,0 +1,20 @@ +MIT License + +Copyright (c) 2024 OneKeyHQ +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/native-views/react-native-text-input/OneKeyTextInput.podspec b/native-views/react-native-text-input/OneKeyTextInput.podspec new file mode 100644 index 00000000..41ee3049 --- /dev/null +++ b/native-views/react-native-text-input/OneKeyTextInput.podspec @@ -0,0 +1,18 @@ +require "json" + +package = JSON.parse(File.read(File.join(__dir__, "package.json"))) + +Pod::Spec.new do |s| + s.name = "OneKeyTextInput" + s.version = package["version"] + s.summary = package["description"] + s.homepage = package["homepage"] + s.license = package["license"] + s.authors = package["author"] + s.platforms = { :ios => "15.5" } + s.source = { :git => "https://github.com/OneKeyHQ/app-modules.git", :tag => "#{s.version}" } + s.source_files = "ios/**/*.{h,m,mm}" + s.frameworks = "UIKit", "UniformTypeIdentifiers" + + s.dependency "React-Core" +end diff --git a/native-views/react-native-text-input/README.md b/native-views/react-native-text-input/README.md new file mode 100644 index 00000000..2ff5e4f7 --- /dev/null +++ b/native-views/react-native-text-input/README.md @@ -0,0 +1,15 @@ +# @onekeyfe/react-native-text-input + +React Native TextInput with paste events for text and images on Android and iOS. + +```tsx +import TextInput from '@onekeyfe/react-native-text-input'; + + { + console.log(nativeEvent.items); + }} +/> +``` + +Image paste items contain a MIME type and a temporary local file URL. Text paste items use `text/plain`. diff --git a/native-views/react-native-text-input/android/build.gradle b/native-views/react-native-text-input/android/build.gradle new file mode 100644 index 00000000..b103755d --- /dev/null +++ b/native-views/react-native-text-input/android/build.gradle @@ -0,0 +1,126 @@ +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["TextInput_kotlinVersion"] + + repositories { + google() + mavenCentral() + } + + dependencies { + classpath "com.android.tools.build:gradle:8.7.2" + // noinspection DifferentKotlinGradleVersion + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +def reactNativeArchitectures() { + def value = rootProject.getProperties().get("reactNativeArchitectures") + return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"] +} + +def isNewArchitectureEnabled() { + return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true" +} + +apply plugin: "com.android.library" +apply plugin: "kotlin-android" + +if (isNewArchitectureEnabled()) { + apply plugin: "com.facebook.react" +} + +def getExtOrDefault(name) { + return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties["TextInput_" + name] +} + +def getExtOrIntegerDefault(name) { + return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties["TextInput_" + name]).toInteger() +} + +def supportsNamespace() { + def parsed = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.') + def major = parsed[0].toInteger() + def minor = parsed[1].toInteger() + + // Namespace support was added in 7.3.0 + return (major == 7 && minor >= 3) || major >= 8 +} + +android { + if (supportsNamespace()) { + namespace "com.textinput" + + sourceSets { + main { + manifest.srcFile "src/main/AndroidManifestNew.xml" + } + } + } + + compileSdkVersion getExtOrIntegerDefault("compileSdkVersion") + + defaultConfig { + minSdkVersion getExtOrIntegerDefault("minSdkVersion") + targetSdkVersion getExtOrIntegerDefault("targetSdkVersion") + buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString() + + } + + buildFeatures { + buildConfig true + } + + buildTypes { + release { + minifyEnabled false + } + } + + lintOptions { + disable "GradleCompatible" + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + sourceSets { + main { + if (isNewArchitectureEnabled()) { + java.srcDirs += [ + "src/newarch", + // Codegen specs + "generated/java", + "generated/jni" + ] + } else { + java.srcDirs += ["src/oldarch"] + } + } + } +} + +repositories { + mavenCentral() + google() +} + +def kotlin_version = getExtOrDefault("kotlinVersion") + +dependencies { + // For < 0.71, this will be from the local maven repo + // For > 0.71, this will be replaced by `com.facebook.react:react-android:$version` by react gradle plugin + //noinspection GradleDynamicVersion + implementation "com.facebook.react:react-android" + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" +} + +if (isNewArchitectureEnabled()) { + react { + jsRootDir = file("../src/") + libraryName = "RNTextInputViewSpec" + codegenJavaPackageName = "com.textinput" + } +} diff --git a/native-views/react-native-text-input/android/gradle.properties b/native-views/react-native-text-input/android/gradle.properties new file mode 100644 index 00000000..d6570b57 --- /dev/null +++ b/native-views/react-native-text-input/android/gradle.properties @@ -0,0 +1,5 @@ +TextInput_kotlinVersion=2.1.20 +TextInput_minSdkVersion=24 +TextInput_targetSdkVersion=36 +TextInput_compileSdkVersion=36 +TextInput_ndkversion=27.1.12297006 diff --git a/native-views/react-native-text-input/android/src/main/AndroidManifest.xml b/native-views/react-native-text-input/android/src/main/AndroidManifest.xml new file mode 100644 index 00000000..b8dead5f --- /dev/null +++ b/native-views/react-native-text-input/android/src/main/AndroidManifest.xml @@ -0,0 +1,3 @@ + + diff --git a/native-views/react-native-text-input/android/src/main/AndroidManifestNew.xml b/native-views/react-native-text-input/android/src/main/AndroidManifestNew.xml new file mode 100644 index 00000000..a2f47b60 --- /dev/null +++ b/native-views/react-native-text-input/android/src/main/AndroidManifestNew.xml @@ -0,0 +1,2 @@ + + diff --git a/native-views/react-native-text-input/android/src/main/java/com/textinput/PasteWatcher.kt b/native-views/react-native-text-input/android/src/main/java/com/textinput/PasteWatcher.kt new file mode 100644 index 00000000..bdd77590 --- /dev/null +++ b/native-views/react-native-text-input/android/src/main/java/com/textinput/PasteWatcher.kt @@ -0,0 +1,10 @@ +package so.onekey.app.wallet.pasteinput + +/** + * Implement this interface to be informed of paste event in the + * ReactTextEdit. This is used by the ReactTextInputManager to forward events + * from the EditText to JS + */ +interface PasteWatcher { + fun onPaste(type: String, data: String) +} diff --git a/native-views/react-native-text-input/android/src/main/java/com/textinput/TextInputPackage.kt b/native-views/react-native-text-input/android/src/main/java/com/textinput/TextInputPackage.kt new file mode 100644 index 00000000..dfb02ebf --- /dev/null +++ b/native-views/react-native-text-input/android/src/main/java/com/textinput/TextInputPackage.kt @@ -0,0 +1,19 @@ +package com.textinput + +import com.facebook.react.ReactPackage +import com.facebook.react.bridge.NativeModule +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.uimanager.ViewManager +import java.util.ArrayList + +class TextInputViewPackage : ReactPackage { + override fun createViewManagers(reactContext: ReactApplicationContext): List> { + val viewManagers: MutableList> = ArrayList() + viewManagers.add(TextInputViewManager()) + return viewManagers + } + + override fun createNativeModules(reactContext: ReactApplicationContext): List { + return emptyList() + } +} diff --git a/native-views/react-native-text-input/android/src/main/java/com/textinput/TextInputPasteEvent.kt b/native-views/react-native-text-input/android/src/main/java/com/textinput/TextInputPasteEvent.kt new file mode 100644 index 00000000..a417b17e --- /dev/null +++ b/native-views/react-native-text-input/android/src/main/java/com/textinput/TextInputPasteEvent.kt @@ -0,0 +1,48 @@ +package com.textinput + +import androidx.annotation.Nullable +import com.facebook.react.bridge.Arguments +import com.facebook.react.bridge.WritableMap +import com.facebook.react.bridge.WritableArray +import com.facebook.react.uimanager.common.ViewUtil +import com.facebook.react.uimanager.events.Event + +/** + * Event emitted by EditText native view when clipboard content is pasted + */ +class TextInputPasteEvent : Event { + + companion object { + private const val EVENT_NAME = "topPaste" + } + + private val mType: String + private val mData: String + + @Deprecated("Use the constructor with surfaceId") + constructor(viewId: Int, type: String, data: String) : this(ViewUtil.NO_SURFACE_ID, viewId, type, data) + + constructor(surfaceId: Int, viewId: Int, type: String, data: String) : super(surfaceId, viewId) { + mType = type + mData = data + } + + override fun getEventName(): String = EVENT_NAME + + override fun canCoalesce(): Boolean = false + + @Nullable + override fun getEventData(): WritableMap? { + val eventData = Arguments.createMap() + + val items = Arguments.createArray() + val item = Arguments.createMap() + item.putString("type", mType) + item.putString("data", mData) + items.pushMap(item) + + eventData.putArray("items", items) + + return eventData + } +} diff --git a/native-views/react-native-text-input/android/src/main/java/com/textinput/TextInputView.kt b/native-views/react-native-text-input/android/src/main/java/com/textinput/TextInputView.kt new file mode 100644 index 00000000..9de35d5e --- /dev/null +++ b/native-views/react-native-text-input/android/src/main/java/com/textinput/TextInputView.kt @@ -0,0 +1,80 @@ +package com.textinput + +import android.content.ClipData +import android.content.ClipDescription +import android.content.ClipboardManager +import android.content.Context +import android.os.Build +import android.text.Spanned +import androidx.annotation.Nullable +import com.facebook.react.uimanager.UIManagerHelper +import com.facebook.react.views.textinput.ReactEditText +import so.onekey.app.wallet.pasteinput.PasteWatcher +import android.view.Gravity + +class TextInputView(context: Context) : ReactEditText(context) { + + private var mPasteWatcher: PasteWatcher? = null + + init { + includeFontPadding = false + } + + override fun scrollTo(x: Int, y: Int) { + if (gravity and Gravity.VERTICAL_GRAVITY_MASK == Gravity.CENTER_VERTICAL) { + super.scrollTo(x, 0) + } else { + super.scrollTo(x, y) + } + } + + override fun onTextContextMenuItem(id: Int): Boolean { + if (id == android.R.id.paste || id == android.R.id.pasteAsPlainText) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + val newId = android.R.id.pasteAsPlainText + mPasteWatcher?.let { pasteWatcher -> + val clipboardManager = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager + val clipData = clipboardManager.primaryClip + var type: String? = null + var data: String? = null + if (clipData?.description?.hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN) == true) { + type = ClipDescription.MIMETYPE_TEXT_PLAIN + data = clipData.getItemAt(0).text.toString() + } else { + val itemUri = clipData?.getItemAt(0)?.uri + itemUri?.let { + val cr = UIManagerHelper.getReactContext(this)?.contentResolver + type = cr?.getType(it) + data = it.toString() + } + } + if (type != null && data != null) { + pasteWatcher.onPaste(type!!, data!!) + } + } + return super.onTextContextMenuItem(newId) + } else { + val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager + val previousClipData = clipboard.primaryClip + previousClipData?.let { + for (i in 0 until it.itemCount) { + val text = it.getItemAt(i).coerceToText(context) + val paste = if (text is Spanned) text.toString() else text + paste?.let { pasteText -> + val clipData = ClipData.newPlainText(null, pasteText) + clipboard.setPrimaryClip(clipData) + } + } + val actionPerformed = super.onTextContextMenuItem(id) + clipboard.setPrimaryClip(previousClipData) + return actionPerformed + } + } + } + return super.onTextContextMenuItem(id) + } + + fun setPasteWatcher(@Nullable pasteWatcher: PasteWatcher?) { + mPasteWatcher = pasteWatcher + } +} diff --git a/native-views/react-native-text-input/android/src/main/java/com/textinput/TextInputViewManager.kt b/native-views/react-native-text-input/android/src/main/java/com/textinput/TextInputViewManager.kt new file mode 100644 index 00000000..4a3309ec --- /dev/null +++ b/native-views/react-native-text-input/android/src/main/java/com/textinput/TextInputViewManager.kt @@ -0,0 +1,72 @@ +package com.textinput + +import android.text.InputType +import android.view.ViewGroup +import com.facebook.react.common.MapBuilder +import com.facebook.react.module.annotations.ReactModule +import com.facebook.react.uimanager.ThemedReactContext +import com.facebook.react.uimanager.UIManagerHelper +import com.facebook.react.uimanager.annotations.ReactProp +import com.facebook.react.uimanager.events.EventDispatcher +import com.facebook.react.views.textinput.ReactEditText +import com.facebook.react.views.textinput.ReactTextInputManager +import so.onekey.app.wallet.pasteinput.PasteWatcher + +@ReactModule(name = TextInputViewManager.REACT_CLASS) +class TextInputViewManager : ReactTextInputManager() { + + companion object { + const val REACT_CLASS = "OneKeyTextInput" + } + + override fun getName(): String = REACT_CLASS + + override fun createViewInstance(context: ThemedReactContext): ReactEditText { + val editText = TextInputView(context) + val inputType = editText.inputType + editText.inputType = inputType and InputType.TYPE_TEXT_FLAG_MULTI_LINE.inv() + editText.returnKeyType = "done" + editText.layoutParams = ViewGroup.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT + ) + return editText + } + + // Fix return type to match ReactTextInputManager's definition, which is Map + override fun getExportedCustomDirectEventTypeConstants(): Map { + val baseEventTypeConstants = + (super.getExportedCustomDirectEventTypeConstants() as? MutableMap) + ?: mutableMapOf() + baseEventTypeConstants["topPaste"] = MapBuilder.of("registrationName", "onPaste") + return baseEventTypeConstants + } + + @ReactProp(name = "onPaste", defaultBoolean = false) + fun setOnPaste(view: TextInputView, onPaste: Boolean) { + if (onPaste) { + view.setPasteWatcher(ReactPasteWatcher(view)) + } else { + view.setPasteWatcher(null) + } + } + + private class ReactPasteWatcher(editText: TextInputView) : PasteWatcher { + private val mReactEditText: TextInputView = editText + private val mEventDispatcher: EventDispatcher + private val mSurfaceId: Int + + init { + val reactContext = UIManagerHelper.getReactContext(editText) + mEventDispatcher = + UIManagerHelper.getEventDispatcherForReactTag(reactContext, editText.id)!! + mSurfaceId = UIManagerHelper.getSurfaceId(reactContext) + } + + override fun onPaste(type: String, data: String) { + mEventDispatcher.dispatchEvent( + TextInputPasteEvent(mSurfaceId, mReactEditText.id, type, data) + ) + } + } +} diff --git a/native-views/react-native-text-input/babel.config.js b/native-views/react-native-text-input/babel.config.js new file mode 100644 index 00000000..cf231eec --- /dev/null +++ b/native-views/react-native-text-input/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + ["module:react-native-builder-bob/babel-preset", { modules: "commonjs" }], + ], +}; diff --git a/native-views/react-native-text-input/ios/OneKeyTextInputPasteObserver.h b/native-views/react-native-text-input/ios/OneKeyTextInputPasteObserver.h new file mode 100644 index 00000000..a00bb642 --- /dev/null +++ b/native-views/react-native-text-input/ios/OneKeyTextInputPasteObserver.h @@ -0,0 +1,11 @@ +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface OneKeyTextInputPasteObserver : RCTEventEmitter + ++ (void)emitPasteForTarget:(NSInteger)target type:(NSString *)type data:(NSString *)data; + +@end + +NS_ASSUME_NONNULL_END diff --git a/native-views/react-native-text-input/ios/OneKeyTextInputPasteObserver.mm b/native-views/react-native-text-input/ios/OneKeyTextInputPasteObserver.mm new file mode 100644 index 00000000..89896bf1 --- /dev/null +++ b/native-views/react-native-text-input/ios/OneKeyTextInputPasteObserver.mm @@ -0,0 +1,204 @@ +#import "OneKeyTextInputPasteObserver.h" + +#import +#import +#import +#import +#import +#import + +static NSString *const OneKeyTextInputPasteEvent = @"OneKeyTextInputPaste"; +static __weak OneKeyTextInputPasteObserver *OneKeyPasteObserver = nil; +static BOOL OneKeyPasteObserverHasListeners = NO; +static const void *OneKeyPasteInFlightKey = &OneKeyPasteInFlightKey; + +@implementation OneKeyTextInputPasteObserver + +RCT_EXPORT_MODULE(OneKeyTextInputPasteObserver) + ++ (BOOL)requiresMainQueueSetup +{ + return YES; +} + +- (instancetype)init +{ + if (self = [super init]) { + OneKeyPasteObserver = self; + } + return self; +} + +- (NSArray *)supportedEvents +{ + return @[ OneKeyTextInputPasteEvent ]; +} + +- (void)startObserving +{ + OneKeyPasteObserverHasListeners = YES; +} + +- (void)stopObserving +{ + OneKeyPasteObserverHasListeners = NO; +} + ++ (void)emitPasteForTarget:(NSInteger)target type:(NSString *)type data:(NSString *)data +{ + NSCharacterSet *whitespace = NSCharacterSet.whitespaceAndNewlineCharacterSet; + if (target <= 0 || + [type stringByTrimmingCharactersInSet:whitespace].length == 0 || + [data stringByTrimmingCharactersInSet:whitespace].length == 0) { + return; + } + dispatch_async(dispatch_get_main_queue(), ^{ + if (!OneKeyPasteObserverHasListeners || OneKeyPasteObserver == nil) { + return; + } + [OneKeyPasteObserver sendEventWithName:OneKeyTextInputPasteEvent + body:@{ + @"target" : @(target), + @"items" : @[ @{ @"type" : type, @"data" : data } ], + }]; + }); +} + +@end + +static NSInteger OneKeyReactTagForBackedTextInput(UIView *view) +{ + for (UIView *candidate = view; candidate != nil; candidate = candidate.superview) { + if (candidate.reactTag != nil) { + return candidate.reactTag.integerValue; + } + if (candidate.tag > 0 && [NSStringFromClass(candidate.class) containsString:@"TextInputComponentView"]) { + return candidate.tag; + } + } + return 0; +} + +static void OneKeyEmitPaste(UIView *view, NSString *type, NSString *data) +{ + [OneKeyTextInputPasteObserver emitPasteForTarget:OneKeyReactTagForBackedTextInput(view) type:type data:data]; +} + +static BOOL OneKeyProcessImagePaste(UIView *view, UIPasteboard *pasteboard, dispatch_block_t fallbackPaste) +{ + if ([objc_getAssociatedObject(view, OneKeyPasteInFlightKey) boolValue]) { + return YES; + } + + for (NSItemProvider *itemProvider in pasteboard.itemProviders) { + for (NSString *identifier in itemProvider.registeredTypeIdentifiers) { + UTType *type = [UTType typeWithIdentifier:identifier]; + if (type == nil || ![type conformsToType:UTTypeImage]) { + continue; + } + + objc_setAssociatedObject(view, OneKeyPasteInFlightKey, @YES, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + NSString *clipboardString = pasteboard.hasStrings ? pasteboard.string : nil; + NSInteger target = OneKeyReactTagForBackedTextInput(view); + [itemProvider loadDataRepresentationForTypeIdentifier:identifier + completionHandler:^(NSData *data, NSError *error) { + NSString *mimeType = type.preferredMIMEType ?: @"application/octet-stream"; + NSString *fileExtension = type.preferredFilenameExtension ?: @"bin"; + NSString *fileName = [NSString stringWithFormat:@"%@.%@", NSUUID.UUID.UUIDString, fileExtension]; + NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:fileName]; + BOOL writeSucceeded = error == nil && data != nil && [data writeToFile:filePath atomically:YES]; + + dispatch_async(dispatch_get_main_queue(), ^{ + objc_setAssociatedObject(view, OneKeyPasteInFlightKey, @NO, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + if (writeSucceeded) { + [OneKeyTextInputPasteObserver emitPasteForTarget:target + type:mimeType + data:[NSURL fileURLWithPath:filePath].absoluteString]; + } else { + if (clipboardString.length > 0) { + [OneKeyTextInputPasteObserver emitPasteForTarget:target type:@"text/plain" data:clipboardString]; + } + fallbackPaste(); + } + }); + }]; + return YES; + } + } + return NO; +} + +static void OneKeySwizzle(Class cls, SEL originalSelector, SEL replacementSelector) +{ + Method originalMethod = class_getInstanceMethod(cls, originalSelector); + Method replacementMethod = class_getInstanceMethod(cls, replacementSelector); + if (originalMethod != nil && replacementMethod != nil) { + method_exchangeImplementations(originalMethod, replacementMethod); + } +} + +@implementation RCTUITextField (OneKeyPaste) + ++ (void)load +{ + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + OneKeySwizzle(self, @selector(paste:), @selector(onekey_paste:)); + OneKeySwizzle(self, @selector(canPerformAction:withSender:), @selector(onekey_canPerformAction:withSender:)); + }); +} + +- (void)onekey_paste:(id)sender +{ + UIPasteboard *pasteboard = UIPasteboard.generalPasteboard; + if (pasteboard.hasImages && OneKeyProcessImagePaste(self, pasteboard, ^{ [self onekey_paste:nil]; })) { + return; + } + if (pasteboard.hasStrings) { + OneKeyEmitPaste(self, @"text/plain", pasteboard.string); + } + [self onekey_paste:sender]; +} + +- (BOOL)onekey_canPerformAction:(SEL)action withSender:(id)sender +{ + if (action == @selector(paste:) && UIPasteboard.generalPasteboard.hasImages) { + return YES; + } + return [self onekey_canPerformAction:action withSender:sender]; +} + +@end + +@implementation RCTUITextView (OneKeyPaste) + ++ (void)load +{ + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + OneKeySwizzle(self, @selector(paste:), @selector(onekey_paste:)); + OneKeySwizzle(self, @selector(canPerformAction:withSender:), @selector(onekey_canPerformAction:withSender:)); + }); +} + +- (void)onekey_paste:(id)sender +{ + UIPasteboard *pasteboard = UIPasteboard.generalPasteboard; + if (pasteboard.hasImages && OneKeyProcessImagePaste(self, pasteboard, ^{ [self onekey_paste:nil]; })) { + return; + } + if (pasteboard.hasStrings) { + OneKeyEmitPaste(self, @"text/plain", pasteboard.string); + } + [self onekey_paste:sender]; +} + +- (BOOL)onekey_canPerformAction:(SEL)action withSender:(id)sender +{ + if (action == @selector(paste:) && UIPasteboard.generalPasteboard.hasImages) { + return YES; + } + return [self onekey_canPerformAction:action withSender:sender]; +} + +@end diff --git a/native-views/react-native-text-input/package.json b/native-views/react-native-text-input/package.json new file mode 100644 index 00000000..7b5e244e --- /dev/null +++ b/native-views/react-native-text-input/package.json @@ -0,0 +1,93 @@ +{ + "name": "@onekeyfe/react-native-text-input", + "version": "3.0.91", + "description": "React Native TextInput with native paste events", + "source": "./src/index.tsx", + "main": "./lib/module/index.js", + "types": "./lib/typescript/src/index.d.ts", + "files": [ + "src", + "lib", + "android", + "ios", + "OneKeyTextInput.podspec", + "react-native.config.js", + "!ios/build", + "!android/build", + "!android/gradle", + "!android/gradlew", + "!android/gradlew.bat", + "!android/local.properties", + "!**/__tests__", + "!**/__fixtures__", + "!**/__mocks__", + "!**/.*", + "!**/*.map" + ], + "scripts": { + "clean": "del-cli android/build lib", + "prepare": "rm -rf lib && bob build", + "typecheck": "tsc", + "lint": "eslint \"**/*.{js,ts,tsx}\"", + "test": "jest", + "release": "yarn prepare && npm whoami && npm publish --access public" + }, + "keywords": [ + "react-native", + "ios", + "android", + "text-input", + "paste" + ], + "homepage": "https://github.com/OneKeyHQ/app-modules#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/OneKeyHQ/app-modules.git", + "directory": "native-views/react-native-text-input" + }, + "author": "@onekeyfe (https://github.com/OneKeyHQ/app-modules)", + "license": "MIT", + "publishConfig": { + "registry": "https://registry.npmjs.org/" + }, + "devDependencies": { + "@react-native/babel-preset": "0.86.2", + "@types/react": "^19.2.0", + "del-cli": "^6.0.0", + "react": "19.2.3", + "react-native": "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch", + "react-native-builder-bob": "^0.40.13", + "typescript": "^5.9.2" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + }, + "packageManager": "yarn@4.1.0", + "react-native-builder-bob": { + "source": "src", + "output": "lib", + "targets": [ + [ + "module", + { + "esm": true + } + ], + [ + "typescript", + { + "project": "tsconfig.build.json" + } + ] + ] + }, + "codegenConfig": { + "name": "RNTextInputViewSpec", + "type": "components", + "jsSrcsDir": "src", + "android": { + "javaPackageName": "com.textinput" + } + } +} diff --git a/native-views/react-native-text-input/react-native.config.js b/native-views/react-native-text-input/react-native.config.js new file mode 100644 index 00000000..e1b1e9ff --- /dev/null +++ b/native-views/react-native-text-input/react-native.config.js @@ -0,0 +1,12 @@ +/** + * @type {import('@react-native-community/cli-types').UserDependencyConfig} + */ +module.exports = { + dependency: { + platforms: { + android: { + cmakeListsPath: "build/generated/source/codegen/jni/CMakeLists.txt", + }, + }, + }, +}; diff --git a/native-views/react-native-text-input/src/AndroidTextInputNativeComponent.js b/native-views/react-native-text-input/src/AndroidTextInputNativeComponent.js new file mode 100644 index 00000000..5e585fd2 --- /dev/null +++ b/native-views/react-native-text-input/src/AndroidTextInputNativeComponent.js @@ -0,0 +1,756 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow strict-local + * @format + */ + +import type {HostComponent} from 'react-native/src/private/types/HostComponent'; +import type {PartialViewConfig} from 'react-native/Libraries/Renderer/shims/ReactNativeTypes'; +import type {ColorValue, TextStyleProp} from 'react-native/Libraries/StyleSheet/StyleSheet'; +import type { + BubblingEventHandler, + DirectEventHandler, + Double, + Float, + Int32, + WithDefault, +} from 'react-native/Libraries/Types/CodegenTypes'; +import type {ViewProps} from 'react-native/Libraries/Components/View/ViewPropTypes'; +import type {TextInputNativeCommands} from 'react-native/Libraries/Components/TextInput/TextInputNativeCommands'; + +import * as NativeComponentRegistry from 'react-native/Libraries/NativeComponent/NativeComponentRegistry'; +import codegenNativeCommands from 'react-native/Libraries/Utilities/codegenNativeCommands'; +import {colorAttribute} from 'react-native/Libraries/Components/View/ReactNativeStyleAttributes'; + +export type KeyboardType = + // Cross Platform + | 'default' + | 'email-address' + | 'numeric' + | 'phone-pad' + | 'number-pad' + | 'decimal-pad' + | 'url' + // iOS-only + | 'ascii-capable' + | 'numbers-and-punctuation' + | 'name-phone-pad' + | 'twitter' + | 'web-search' + // Android-only + | 'visible-password'; + +export type ReturnKeyType = + // Cross Platform + | 'done' + | 'go' + | 'next' + | 'search' + | 'send' + // Android-only + | 'none' + | 'previous' + // iOS-only + | 'default' + | 'emergency-call' + | 'google' + | 'join' + | 'route' + | 'yahoo'; + +export type SubmitBehavior = 'submit' | 'blurAndSubmit' | 'newline'; + +export type AndroidTextInputNativeProps = Readonly<{ + // This allows us to inherit everything from ViewProps except for style (see below) + // This must be commented for Fabric codegen to work. + ...Omit, + + /** + * Android props after this + */ + /** + * Specifies autocomplete hints for the system, so it can provide autofill. On Android, the system will always attempt to offer autofill by using heuristics to identify the type of content. + * To disable autocomplete, set `autoComplete` to `off`. + * + * *Android Only* + * + * Possible values for `autoComplete` are: + * + * - `birthdate-day` + * - `birthdate-full` + * - `birthdate-month` + * - `birthdate-year` + * - `cc-csc` + * - `cc-exp` + * - `cc-exp-day` + * - `cc-exp-month` + * - `cc-exp-year` + * - `cc-number` + * - `2fa-app-otp` + * - `email` + * - `email-otp` + * - `flight-confirmation-code` + * - `flight-number` + * - `gender` + * - `gift-card-number` + * - `gift-card-pin` + * - `loyalty-account-number` + * - `name` + * - `name-family` + * - `name-given` + * - `name-middle` + * - `name-middle-initial` + * - `name-prefix` + * - `name-suffix` + * - `password` + * - `password-new` + * - `postal-address` + * - `postal-address-country` + * - `postal-address-dependent-locality` + * - `postal-address-extended` + * - `postal-address-extended-postal-code` + * - `postal-address-locality` + * - `postal-address-region` + * - `postal-address-unit` + * - `postal-code` + * - `promo-code` + * - `street-address` + * - `sms-otp` + * - `tel` + * - `tel-country-code` + * - `tel-national` + * - `tel-device` + * - `upi-vpa` + * - `wifi-password` + * - `username` + * - `username-new` + * - `off` + * + * @platform android + */ + autoComplete?: WithDefault< + | '2fa-app-otp' + | 'birthdate-day' + | 'birthdate-full' + | 'birthdate-month' + | 'birthdate-year' + | 'cc-csc' + | 'cc-exp' + | 'cc-exp-day' + | 'cc-exp-month' + | 'cc-exp-year' + | 'cc-number' + | 'email' + | 'email-otp' + | 'flight-confirmation-code' + | 'flight-number' + | 'gender' + | 'gift-card-number' + | 'gift-card-pin' + | 'loyalty-account-number' + | 'name' + | 'name-family' + | 'name-given' + | 'name-middle' + | 'name-middle-initial' + | 'name-prefix' + | 'name-suffix' + | 'password' + | 'password-new' + | 'postal-address' + | 'postal-address-country' + | 'postal-address-dependent-locality' + | 'postal-address-extended' + | 'postal-address-extended-postal-code' + | 'postal-address-locality' + | 'postal-address-region' + | 'postal-address-unit' + | 'postal-code' + | 'promo-code' + | 'street-address' + | 'sms-otp' + | 'tel' + | 'tel-country-code' + | 'tel-national' + | 'tel-device' + | 'upi-vpa' + | 'wifi-password' + | 'username' + | 'username-new' + | 'off', + 'off', + >, + + /** + * Sets the return key to the label. Use it instead of `returnKeyType`. + * @platform android + */ + returnKeyLabel?: ?string, + + /** + * Sets the number of lines for a `TextInput`. Use it with multiline set to + * `true` to be able to fill the lines. + * @platform android + */ + numberOfLines?: ?Int32, + + /** + * When `false`, if there is a small amount of space available around a text input + * (e.g. landscape orientation on a phone), the OS may choose to have the user edit + * the text inside of a full screen text input mode. When `true`, this feature is + * disabled and users will always edit the text directly inside of the text input. + * Defaults to `false`. + * @platform android + */ + disableFullscreenUI?: ?boolean, + + /** + * Set text break strategy on Android API Level 23+, possible values are `simple`, `highQuality`, `balanced` + * The default value is `simple`. + * @platform android + */ + textBreakStrategy?: WithDefault< + 'simple' | 'highQuality' | 'balanced', + 'simple', + >, + + /** + * The color of the `TextInput` underline. + * @platform android + */ + underlineColorAndroid?: ?ColorValue, + + /** + * If defined, the provided image resource will be rendered on the left. + * The image resource must be inside `/android/app/src/main/res/drawable` and referenced + * like + * ``` + * + * ``` + * @platform android + */ + inlineImageLeft?: ?string, + + /** + * Padding between the inline image, if any, and the text input itself. + * @platform android + */ + inlineImagePadding?: ?Int32, + + importantForAutofill?: string /*?( + | 'auto' + | 'no' + | 'noExcludeDescendants' + | 'yes' + | 'yesExcludeDescendants' + ),*/, + + /** + * When `false`, it will prevent the soft keyboard from showing when the field is focused. + * Defaults to `true`. + */ + showSoftInputOnFocus?: ?boolean, + + /** + * TextInput props after this + */ + /** + * Can tell `TextInput` to automatically capitalize certain characters. + * + * - `characters`: all characters. + * - `words`: first letter of each word. + * - `sentences`: first letter of each sentence (*default*). + * - `none`: don't auto capitalize anything. + */ + autoCapitalize?: WithDefault< + 'none' | 'sentences' | 'words' | 'characters', + 'none', + >, + + /** + * If `false`, disables auto-correct. The default value is `true`. + */ + autoCorrect?: ?boolean, + + /** + * If `true`, focuses the input on `componentDidMount`. + * The default value is `false`. + */ + autoFocus?: ?boolean, + + /** + * Specifies whether fonts should scale to respect Text Size accessibility settings. The + * default is `true`. + */ + allowFontScaling?: ?boolean, + + /** + * Specifies largest possible scale a font can reach when `allowFontScaling` is enabled. + * Possible values: + * `null/undefined` (default): inherit from the parent node or the global default (0) + * `0`: no max, ignore parent/global default + * `>= 1`: sets the maxFontSizeMultiplier of this node to this value + */ + maxFontSizeMultiplier?: ?Float, + + /** + * If `false`, text is not editable. The default value is `true`. + */ + editable?: ?boolean, + + /** + * Determines which keyboard to open, e.g.`numeric`. + * + * The following values work across platforms: + * + * - `default` + * - `numeric` + * - `number-pad` + * - `decimal-pad` + * - `email-address` + * - `phone-pad` + * - `url` + * + * *Android Only* + * + * The following values work on Android only: + * + * - `visible-password` + */ + keyboardType?: WithDefault, + + /** + * Determines how the return key should look. On Android you can also use + * `returnKeyLabel`. + * + * *Cross platform* + * + * The following values work across platforms: + * + * - `done` + * - `go` + * - `next` + * - `search` + * - `send` + * + * *Android Only* + * + * The following values work on Android only: + * + * - `none` + * - `previous` + */ + returnKeyType?: WithDefault, + + /** + * Limits the maximum number of characters that can be entered. Use this + * instead of implementing the logic in JS to avoid flicker. + */ + maxLength?: ?Int32, + + /** + * If `true`, the text input can be multiple lines. + * The default value is `false`. + */ + multiline?: ?boolean, + + /** + * Callback that is called when the text input is blurred. + * `target` is the reactTag of the element + */ + onBlur?: ?BubblingEventHandler>, + + /** + * Callback that is called when the text input is focused. + * `target` is the reactTag of the element + */ + onFocus?: ?BubblingEventHandler>, + + /** + * Callback that is called when the text input's text changes. + * `target` is the reactTag of the element + * TODO: differentiate between onChange and onChangeText + */ + onChange?: ?BubblingEventHandler< + Readonly<{target: Int32, eventCount: Int32, text: string}>, + >, + + /** + * Callback that is called when the text input's text changes. + * Changed text is passed as an argument to the callback handler. + * TODO: differentiate between onChange and onChangeText + */ + onChangeText?: ?BubblingEventHandler< + Readonly<{target: Int32, eventCount: Int32, text: string}>, + >, + + /** + * Callback that is called when the text input's content size changes. + * This will be called with + * `{ nativeEvent: { contentSize: { width, height } } }`. + * + * Only called for multiline text inputs. + */ + onContentSizeChange?: ?DirectEventHandler< + Readonly<{ + target: Int32, + contentSize: Readonly<{width: Double, height: Double}>, + }>, + >, + + /** + * Callback that is called when text input ends. + */ + onEndEditing?: ?BubblingEventHandler>, + + /** + * Callback that is called when the text input selection is changed. + * This will be called with + * `{ nativeEvent: { selection: { start, end } } }`. + */ + onSelectionChange?: ?DirectEventHandler< + Readonly<{ + target: Int32, + selection: Readonly<{start: Double, end: Double}>, + }>, + >, + + /** + * Callback that is called when the text input's submit button is pressed. + * Invalid if `multiline={true}` is specified. + */ + onSubmitEditing?: ?BubblingEventHandler< + Readonly<{target: Int32, text: string}>, + >, + + /** + * Callback that is called when a key is pressed. + * This will be called with `{ nativeEvent: { key: keyValue } }` + * where `keyValue` is `'Enter'` or `'Backspace'` for respective keys and + * the typed-in character otherwise including `' '` for space. + * Fires before `onChange` callbacks. + */ + onKeyPress?: ?BubblingEventHandler>, + + /** + * Invoked on content scroll with `{ nativeEvent: { contentOffset: { x, y } } }`. + * May also contain other properties from ScrollEvent but on Android contentSize + * is not provided for performance reasons. + */ + onScroll?: ?DirectEventHandler< + Readonly<{ + target: Int32, + responderIgnoreScroll: boolean, + contentInset: Readonly<{ + top: Double, // always 0 on Android + bottom: Double, // always 0 on Android + left: Double, // always 0 on Android + right: Double, // always 0 on Android + }>, + contentOffset: Readonly<{ + x: Double, + y: Double, + }>, + contentSize: Readonly<{ + width: Double, // always 0 on Android + height: Double, // always 0 on Android + }>, + layoutMeasurement: Readonly<{ + width: Double, + height: Double, + }>, + velocity: Readonly<{ + x: Double, // always 0 on Android + y: Double, // always 0 on Android + }>, + }>, + >, + + /** Invoked when the user performs a paste action. */ + onPaste?: ?DirectEventHandler< + Readonly<{ + target: Int32, + items: ReadonlyArray>, + }>, + >, + + /** + * The string that will be rendered before text input has been entered. + */ + placeholder?: ?Stringish, + + /** + * The text color of the placeholder string. + */ + placeholderTextColor?: ?ColorValue, + + /** + * If `true`, the text input obscures the text entered so that sensitive text + * like passwords stay secure. The default value is `false`. Does not work with 'multiline={true}'. + */ + secureTextEntry?: ?boolean, + + /** + * The highlight and cursor color of the text input. + */ + selectionColor?: ?ColorValue, + + /** + * The text selection handle color. + */ + selectionHandleColor?: ?ColorValue, + + /** + * The start and end of the text input's selection. Set start and end to + * the same value to position the cursor. + */ + selection?: ?Readonly<{ + start: Int32, + end?: ?Int32, + }>, + + /** + * The value to show for the text input. `TextInput` is a controlled + * component, which means the native value will be forced to match this + * value prop if provided. For most uses, this works great, but in some + * cases this may cause flickering - one common cause is preventing edits + * by keeping value the same. In addition to simply setting the same value, + * either set `editable={false}`, or set/update `maxLength` to prevent + * unwanted edits without flicker. + */ + value?: ?string, + + /** + * Provides an initial value that will change when the user starts typing. + * Useful for simple use-cases where you do not want to deal with listening + * to events and updating the value prop to keep the controlled state in sync. + */ + defaultValue?: ?string, + + /** + * If `true`, all text will automatically be selected on focus. + */ + selectTextOnFocus?: ?boolean, + + /** + * If `true`, the text field will blur when submitted. + * The default value is true for single-line fields and false for + * multiline fields. Note that for multiline fields, setting `blurOnSubmit` + * to `true` means that pressing return will blur the field and trigger the + * `onSubmitEditing` event instead of inserting a newline into the field. + * + * @deprecated + * Note that `submitBehavior` now takes the place of `blurOnSubmit` and will + * override any behavior defined by `blurOnSubmit`. + * @see submitBehavior + */ + blurOnSubmit?: ?boolean, + + /** + * When the return key is pressed, + * + * For single line inputs: + * + * - `'newline`' defaults to `'blurAndSubmit'` + * - `undefined` defaults to `'blurAndSubmit'` + * + * For multiline inputs: + * + * - `'newline'` adds a newline + * - `undefined` defaults to `'newline'` + * + * For both single line and multiline inputs: + * + * - `'submit'` will only send a submit event and not blur the input + * - `'blurAndSubmit`' will both blur the input and send a submit event + */ + submitBehavior?: ?SubmitBehavior, + + /** + * Note that not all Text styles are supported, an incomplete list of what is not supported includes: + * + * - `borderLeftWidth` + * - `borderTopWidth` + * - `borderRightWidth` + * - `borderBottomWidth` + * - `borderTopLeftRadius` + * - `borderTopRightRadius` + * - `borderBottomRightRadius` + * - `borderBottomLeftRadius` + * + * see [Issue#7070](https://github.com/react/react-native/issues/7070) + * for more detail. + * + * [Styles](docs/style.html) + */ + // TODO: figure out what to do with this style prop for codegen/Fabric purposes + // This must be commented for Fabric codegen to work; it's currently not possible + // to override the default View style prop in codegen. + style?: ?TextStyleProp, + + /** + * If `true`, caret is hidden. The default value is `false`. + * This property is supported only for single-line TextInput component on iOS. + */ + caretHidden?: ?boolean, + + /* + * If `true`, contextMenuHidden is hidden. The default value is `false`. + */ + contextMenuHidden?: ?boolean, + + /** + * The following are props that `BaseTextShadowNode` takes. It is unclear if they + * are used by TextInput. + */ + textShadowColor?: ?ColorValue, + textShadowRadius?: ?Float, + textDecorationLine?: ?string, + fontStyle?: ?string, + textShadowOffset?: ?Readonly<{width?: ?Double, height?: ?Double}>, + lineHeight?: ?Float, + textTransform?: ?string, + color?: ?Int32, + letterSpacing?: ?Float, + fontSize?: ?Float, + textAlign?: ?string, + includeFontPadding?: ?boolean, + fontWeight?: ?string, + fontFamily?: ?string, + + /** + * I cannot find where these are defined but JS complains without them. + */ + textAlignVertical?: ?string, + cursorColor?: ?ColorValue, + + /** + * "Private" fields used by TextInput.js and not users of this component directly + */ + mostRecentEventCount: Int32, + text?: ?string, +}>; + +type NativeType = HostComponent; + +type NativeCommands = TextInputNativeCommands; + +export const Commands: NativeCommands = codegenNativeCommands({ + supportedCommands: ['focus', 'blur', 'setTextAndSelection'], +}); + +export const __INTERNAL_VIEW_CONFIG: PartialViewConfig = { + uiViewClassName: 'OneKeyTextInput', + bubblingEventTypes: { + topEndEditing: { + phasedRegistrationNames: { + bubbled: 'onEndEditing', + captured: 'onEndEditingCapture', + }, + }, + topKeyPress: { + phasedRegistrationNames: { + bubbled: 'onKeyPress', + captured: 'onKeyPressCapture', + }, + }, + topSubmitEditing: { + phasedRegistrationNames: { + bubbled: 'onSubmitEditing', + captured: 'onSubmitEditingCapture', + }, + }, + }, + directEventTypes: { + topScroll: { + registrationName: 'onScroll', + }, + topPaste: { + registrationName: 'onPaste', + }, + }, + validAttributes: { + acceptDragAndDropTypes: true, + maxFontSizeMultiplier: true, + adjustsFontSizeToFit: true, + minimumFontScale: true, + autoFocus: true, + placeholder: true, + inlineImagePadding: true, + contextMenuHidden: true, + textShadowColor: colorAttribute, + maxLength: true, + selectTextOnFocus: true, + textShadowRadius: true, + underlineColorAndroid: colorAttribute, + textDecorationLine: true, + submitBehavior: true, + textAlignVertical: true, + fontStyle: true, + textShadowOffset: true, + selectionColor: colorAttribute, + selectionHandleColor: colorAttribute, + placeholderTextColor: colorAttribute, + importantForAutofill: true, + lineHeight: true, + textTransform: true, + returnKeyType: true, + keyboardType: true, + multiline: true, + color: colorAttribute, + autoComplete: true, + numberOfLines: true, + letterSpacing: true, + returnKeyLabel: true, + fontSize: true, + onKeyPress: true, + cursorColor: colorAttribute, + text: true, + showSoftInputOnFocus: true, + textAlign: true, + autoCapitalize: true, + autoCorrect: true, + caretHidden: true, + secureTextEntry: true, + textBreakStrategy: true, + onScroll: true, + onPaste: true, + onContentSizeChange: true, + disableFullscreenUI: true, + includeFontPadding: true, + fontWeight: true, + fontFamily: true, + allowFontScaling: true, + onSelectionChange: true, + mostRecentEventCount: true, + inlineImageLeft: true, + editable: true, + fontVariant: true, + borderBottomRightRadius: true, + borderBottomColor: colorAttribute, + borderRadius: true, + borderRightColor: colorAttribute, + borderColor: colorAttribute, + borderTopRightRadius: true, + borderStyle: true, + borderBottomLeftRadius: true, + borderLeftColor: colorAttribute, + borderTopLeftRadius: true, + borderTopColor: colorAttribute, + }, +}; + +let AndroidTextInputNativeComponent = + NativeComponentRegistry.get( + 'OneKeyTextInput', + () => __INTERNAL_VIEW_CONFIG, + ); + +// flowlint-next-line unclear-type:off +export default AndroidTextInputNativeComponent as any as HostComponent; diff --git a/native-views/react-native-text-input/src/Input.js b/native-views/react-native-text-input/src/Input.js new file mode 100644 index 00000000..0d611cd2 --- /dev/null +++ b/native-views/react-native-text-input/src/Input.js @@ -0,0 +1,1032 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow strict-local + * @format + */ + +import type {HostInstance} from 'react-native/src/private/types/HostInstance'; +import type {____TextStyle_Internal as TextStyleInternal} from 'react-native/Libraries/StyleSheet/StyleSheetTypes'; +import type { + BlurEvent, + FocusEvent, + GestureResponderEvent, + ScrollEvent, +} from 'react-native/Libraries/Types/CoreEventTypes'; +import type { + AutoCapitalize, + EnterKeyHintType, + EnterKeyHintTypeAndroid, + EnterKeyHintTypeIOS, + EnterKeyHintTypeOptions, + InputModeOptions, + KeyboardType, + KeyboardTypeAndroid, + KeyboardTypeIOS, + KeyboardTypeOptions, + ReturnKeyType, + ReturnKeyTypeAndroid, + ReturnKeyTypeIOS, + ReturnKeyTypeOptions, + Selection, + SubmitBehavior, + TextContentType, + TextInputAndroidProps, + TextInputBlurEvent, + TextInputChangeEvent, + TextInputContentSizeChangeEvent, + TextInputEditingEvent, + TextInputEndEditingEvent, + TextInputEvent, + TextInputFocusEvent, + TextInputInstance, + TextInputIOSProps, + TextInputKeyPressEvent, + TextInputProps, + TextInputSelectionChangeEvent, + TextInputSubmitEditingEvent, + TextInputType, +} from 'react-native/Libraries/Components/TextInput/TextInput.flow'; + +import usePressability from 'react-native/Libraries/Pressability/usePressability'; +import flattenStyle from 'react-native/Libraries/StyleSheet/flattenStyle'; +import StyleSheet, {type TextStyleProp} from 'react-native/Libraries/StyleSheet/StyleSheet'; +import Text from 'react-native/Libraries/Text/Text'; +import TextAncestorContext from 'react-native/Libraries/Text/TextAncestorContext'; +import Platform from 'react-native/Libraries/Utilities/Platform'; +import useMergeRefs from 'react-native/Libraries/Utilities/useMergeRefs'; +import TextInputState from 'react-native/Libraries/Components/TextInput/TextInputState'; +import invariant from 'invariant'; +import nullthrows from 'nullthrows'; +import * as React from 'react'; +import {useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState} from 'react'; +import {findNodeHandle, NativeEventEmitter, NativeModules} from 'react-native'; + +type OneKeyPasteItem = Readonly<{ + type: string, + data: string, +}>; + +type OneKeyPasteEvent = Readonly<{ + nativeEvent: Readonly<{ + items: ReadonlyArray, + }>, +}>; + +type OneKeyTextInputProps = TextInputProps & { + onPaste?: ?(event: OneKeyPasteEvent) => void, +}; + +const iosPasteEmitter = + Platform.OS === 'ios' && NativeModules.OneKeyTextInputPasteObserver != null + ? new NativeEventEmitter(NativeModules.OneKeyTextInputPasteObserver) + : null; + +let AndroidTextInput; +let AndroidTextInputCommands; +let RCTSinglelineTextInputView; +let RCTSinglelineTextInputNativeCommands; +let RCTMultilineTextInputView; +let RCTMultilineTextInputNativeCommands; + +if (Platform.OS === 'android') { + AndroidTextInput = require('./AndroidTextInputNativeComponent').default; + AndroidTextInputCommands = + require('./AndroidTextInputNativeComponent').Commands; +} else if (Platform.OS === 'ios') { + RCTSinglelineTextInputView = + require('react-native/Libraries/Components/TextInput/RCTSingelineTextInputNativeComponent').default; + RCTSinglelineTextInputNativeCommands = + require('react-native/Libraries/Components/TextInput/RCTSingelineTextInputNativeComponent').Commands; + RCTMultilineTextInputView = + require('react-native/Libraries/Components/TextInput/RCTMultilineTextInputNativeComponent').default; + RCTMultilineTextInputNativeCommands = + require('react-native/Libraries/Components/TextInput/RCTMultilineTextInputNativeComponent').Commands; +} + +export type { + AutoCapitalize, + BlurEvent, + EnterKeyHintType, + EnterKeyHintTypeAndroid, + EnterKeyHintTypeIOS, + EnterKeyHintTypeOptions, + FocusEvent, + InputModeOptions, + KeyboardType, + KeyboardTypeAndroid, + KeyboardTypeIOS, + KeyboardTypeOptions, + ReturnKeyType, + ReturnKeyTypeAndroid, + ReturnKeyTypeIOS, + ReturnKeyTypeOptions, + SubmitBehavior, + TextContentType, + TextInputAndroidProps, + TextInputBlurEvent, + TextInputChangeEvent, + TextInputContentSizeChangeEvent, + TextInputEditingEvent, + TextInputEndEditingEvent, + TextInputEvent, + TextInputFocusEvent, + TextInputIOSProps, + TextInputKeyPressEvent, + TextInputProps, + TextInputSelectionChangeEvent, + TextInputSubmitEditingEvent, +}; + +type TextInputStateType = Readonly<{ + /** + * @deprecated Use currentlyFocusedInput + * Returns the ID of the currently focused text field, if one exists + * If no text field is focused it returns null + */ + currentlyFocusedField: () => ?number, + + /** + * Returns the ref of the currently focused text field, if one exists + * If no text field is focused it returns null + */ + currentlyFocusedInput: () => ?HostInstance, + + /** + * @param textField ref of the text field to focus + * Focuses the specified text field + * noop if the text field was already focused + */ + focusTextInput: (textField: ?HostInstance) => void, + + /** + * @param textField ref of the text field to focus + * Unfocuses the specified text field + * noop if it wasn't focused + */ + blurTextInput: (textField: ?HostInstance) => void, +}>; + +type ViewCommands = NonNullable< + | typeof AndroidTextInputCommands + | typeof RCTMultilineTextInputNativeCommands + | typeof RCTSinglelineTextInputNativeCommands, +>; + +type LastNativeSelection = { + selection: Selection, + mostRecentEventCount: number, +}; + +const emptyFunctionThatReturnsTrue = () => true; + +/** + * This hook handles the synchronization between the state of the text input + * in native and in JavaScript. This is necessary due to the asynchronous nature + * of text input events. + */ +function useTextInputStateSynchronization({ + props, + mostRecentEventCount, + selection, + inputRef, + text, + viewCommands, +}: { + props: TextInputProps, + mostRecentEventCount: number, + selection: ?Selection, + inputRef: React.RefObject, + text?: string, + viewCommands: ViewCommands, +}): { + setLastNativeText: string => void, + setLastNativeSelection: LastNativeSelection => void, +} { + const [lastNativeText, setLastNativeText] = useState(props.value); + const [lastNativeSelectionState, setLastNativeSelection] = + useState({ + mostRecentEventCount, + selection: {end: -1, start: -1}, + }); + + const lastNativeSelection = lastNativeSelectionState.selection; + + // This is necessary in case native updates the text and JS decides + // that the update should be ignored and we should stick with the value + // that we have in JS. + useLayoutEffect(() => { + const nativeUpdate: {text?: string, selection?: Selection} = {}; + + if (lastNativeText !== props.value && typeof props.value === 'string') { + nativeUpdate.text = props.value; + setLastNativeText(props.value); + } + + if ( + selection && + lastNativeSelection && + (lastNativeSelection.start !== selection.start || + lastNativeSelection.end !== selection.end) + ) { + nativeUpdate.selection = selection; + setLastNativeSelection({mostRecentEventCount, selection}); + } + + if (Object.keys(nativeUpdate).length === 0) { + return; + } + + if (inputRef.current != null) { + viewCommands.setTextAndSelection( + inputRef.current, + mostRecentEventCount, + text, + selection?.start ?? -1, + selection?.end ?? -1, + ); + } + }, [ + mostRecentEventCount, + inputRef, + props.value, + props.defaultValue, + lastNativeText, + selection, + lastNativeSelection, + text, + viewCommands, + ]); + + return {setLastNativeSelection, setLastNativeText}; +} + +/** + * A foundational component for inputting text into the app via a + * keyboard. Props provide configurability for several features, such as + * auto-correction, auto-capitalization, placeholder text, and different keyboard + * types, such as a numeric keypad. + * + * The simplest use case is to plop down a `TextInput` and subscribe to the + * `onChangeText` events to read the user input. There are also other events, + * such as `onSubmitEditing` and `onFocus` that can be subscribed to. A simple + * example: + * + * ```ReactNativeWebPlayer + * import React, { Component } from 'react'; + * import { AppRegistry, TextInput } from 'react-native'; + * + * export default class UselessTextInput extends Component { + * constructor(props) { + * super(props); + * this.state = { text: 'Useless Placeholder' }; + * } + * + * render() { + * return ( + * this.setState({text})} + * value={this.state.text} + * /> + * ); + * } + * } + * + * // skip this line if using Create React Native App + * AppRegistry.registerComponent('AwesomeProject', () => UselessTextInput); + * ``` + * + * Two methods exposed via the native element are .focus() and .blur() that + * will focus or blur the TextInput programmatically. + * + * Note that some props are only available with `multiline={true/false}`. + * Additionally, border styles that apply to only one side of the element + * (e.g., `borderBottomColor`, `borderLeftWidth`, etc.) will not be applied if + * `multiline=false`. To achieve the same effect, you can wrap your `TextInput` + * in a `View`: + * + * ```ReactNativeWebPlayer + * import React, { Component } from 'react'; + * import { AppRegistry, View, TextInput } from 'react-native'; + * + * class UselessTextInput extends Component { + * render() { + * return ( + * + * ); + * } + * } + * + * export default class UselessTextInputMultiline extends Component { + * constructor(props) { + * super(props); + * this.state = { + * text: 'Useless Multiline Placeholder', + * }; + * } + * + * // If you type something in the text box that is a color, the background will change to that + * // color. + * render() { + * return ( + * + * this.setState({text})} + * value={this.state.text} + * /> + * + * ); + * } + * } + * + * // skip these lines if using Create React Native App + * AppRegistry.registerComponent( + * 'AwesomeProject', + * () => UselessTextInputMultiline + * ); + * ``` + * + * `TextInput` has by default a border at the bottom of its view. This border + * has its padding set by the background image provided by the system, and it + * cannot be changed. Solutions to avoid this is to either not set height + * explicitly, case in which the system will take care of displaying the border + * in the correct position, or to not display the border by setting + * `underlineColorAndroid` to transparent. + * + * Note that on Android performing text selection in input can change + * app's activity `windowSoftInputMode` param to `adjustResize`. + * This may cause issues with components that have position: 'absolute' + * while keyboard is active. To avoid this behavior either specify `windowSoftInputMode` + * in AndroidManifest.xml ( https://developer.android.com/guide/topics/manifest/activity-element.html ) + * or control this param programmatically with native code. + * + */ +function InternalTextInput(props: OneKeyTextInputProps): React.Node { + const { + 'aria-busy': ariaBusy, + 'aria-checked': ariaChecked, + 'aria-disabled': ariaDisabled, + 'aria-expanded': ariaExpanded, + 'aria-selected': ariaSelected, + accessibilityState, + id, + tabIndex, + selection: propsSelection, + selectionColor, + selectionHandleColor, + cursorColor, + onPaste, + ...otherProps + } = props; + + const inputRef = useRef(null); + + useEffect(() => { + if (Platform.OS !== 'ios' || iosPasteEmitter == null || onPaste == null) { + return; + } + const subscription = iosPasteEmitter.addListener( + 'OneKeyTextInputPaste', + (event: {target: number, items: Array}) => { + const target = findNodeHandle(inputRef.current); + if (target != null && target === event.target) { + onPaste({nativeEvent: {items: event.items}}); + } + }, + ); + return () => subscription.remove(); + }, [onPaste]); + + const selection: ?Selection = + propsSelection == null + ? null + : { + end: propsSelection.end ?? propsSelection.start, + start: propsSelection.start, + }; + + const text = + typeof props.value === 'string' + ? props.value + : typeof props.defaultValue === 'string' + ? props.defaultValue + : undefined; + + const viewCommands = + AndroidTextInputCommands || + (props.multiline === true + ? RCTMultilineTextInputNativeCommands + : RCTSinglelineTextInputNativeCommands); + + const [mostRecentEventCount, setMostRecentEventCount] = useState(0); + const {setLastNativeText, setLastNativeSelection} = + useTextInputStateSynchronization({ + inputRef, + mostRecentEventCount, + props, + selection, + text, + viewCommands, + }); + + useLayoutEffect(() => { + const inputRefValue = inputRef.current; + + if (inputRefValue != null) { + TextInputState.registerInput(inputRefValue); + + return () => { + TextInputState.unregisterInput(inputRefValue); + + if (TextInputState.currentlyFocusedInput() === inputRefValue) { + nullthrows(inputRefValue).blur(); + } + }; + } + }, []); + + const setLocalRef = useCallback( + (instance: HostInstance | null) => { + // $FlowExpectedError[incompatible-type] + inputRef.current = instance; + + /* + Hi reader from the future. I'm sorry for this. + + This is a hack. Ideally we would forwardRef to the underlying + host component. However, since TextInput has it's own methods that can be + called as well, if we used the standard forwardRef then these + methods wouldn't be accessible and thus be a breaking change. + + We have a couple of options of how to handle this: + - Return a new ref with everything we methods from both. This is problematic + because we need React to also know it is a host component which requires + internals of the class implementation of the ref. + - Break the API and have some other way to call one set of the methods or + the other. This is our long term approach as we want to eventually + get the methods on host components off the ref. So instead of calling + ref.measure() you might call ReactNative.measure(ref). This would hopefully + let the ref for TextInput then have the methods like `.clear`. Or we do it + the other way and make it TextInput.clear(textInputRef) which would be fine + too. Either way though is a breaking change that is longer term. + - Mutate this ref. :( Gross, but accomplishes what we need in the meantime + before we can get to the long term breaking change. + */ + if (instance != null) { + // Register the input immediately when the ref is set so that focus() + // can be called from ref callbacks + // Double registering during useLayoutEffect is fine, because the underlying + // state is a Set. + TextInputState.registerInput(instance); + + // $FlowFixMe[prop-missing] - See the explanation above. + // $FlowFixMe[unsafe-object-assign] + Object.assign(instance, { + clear(): void { + if (inputRef.current != null) { + viewCommands.setTextAndSelection( + inputRef.current, + mostRecentEventCount, + '', + 0, + 0, + ); + } + }, + getNativeRef(): ?TextInputInstance { + return inputRef.current; + }, + isFocused(): boolean { + const currentlyFocusedInput = + TextInputState.currentlyFocusedInput(); + return ( + currentlyFocusedInput != null && + currentlyFocusedInput === inputRef.current + ); + }, + setSelection(start: number, end: number): void { + if (inputRef.current != null) { + viewCommands.setTextAndSelection( + inputRef.current, + mostRecentEventCount, + null, + start, + end, + ); + } + }, + }); + } + }, + [mostRecentEventCount, viewCommands], + ); + + // $FlowExpectedError[incompatible-type] + const ref = useMergeRefs(setLocalRef, props.forwardedRef); + + const _onChange = (event: TextInputChangeEvent) => { + const currentText = event.nativeEvent.text; + props.onChange && props.onChange(event); + props.onChangeText && props.onChangeText(currentText); + + if (inputRef.current == null) { + // calling `props.onChange` or `props.onChangeText` + // may clean up the input itself. Exits here. + return; + } + + setLastNativeText(currentText); + // This must happen last, after we call setLastNativeText. + // Different ordering can cause bugs when editing AndroidTextInputs + // with multiple Fragments. + // We must update this so that controlled input updates work. + setMostRecentEventCount(event.nativeEvent.eventCount); + }; + + const _onSelectionChange = (event: TextInputSelectionChangeEvent) => { + props.onSelectionChange && props.onSelectionChange(event); + + if (inputRef.current == null) { + // calling `props.onSelectionChange` + // may clean up the input itself. Exits here. + return; + } + + setLastNativeSelection({ + mostRecentEventCount, + selection: event.nativeEvent.selection, + }); + }; + + const _onFocus = (event: FocusEvent) => { + TextInputState.focusInput(inputRef.current); + if (props.onFocus) { + props.onFocus(event); + } + }; + + const _onBlur = (event: BlurEvent) => { + TextInputState.blurInput(inputRef.current); + if (props.onBlur) { + props.onBlur(event); + } + }; + + const _onScroll = (event: ScrollEvent) => { + props.onScroll && props.onScroll(event); + }; + + let textInput = null; + + const multiline = props.multiline ?? false; + + let submitBehavior: SubmitBehavior; + if (props.submitBehavior != null) { + // `submitBehavior` is set explicitly + if (!multiline && props.submitBehavior === 'newline') { + // For single line text inputs, `'newline'` is not a valid option + submitBehavior = 'blurAndSubmit'; + } else { + submitBehavior = props.submitBehavior; + } + } else if (multiline) { + if (props.blurOnSubmit === true) { + submitBehavior = 'blurAndSubmit'; + } else { + submitBehavior = 'newline'; + } + } else { + // Single line + if (props.blurOnSubmit !== false) { + submitBehavior = 'blurAndSubmit'; + } else { + submitBehavior = 'submit'; + } + } + + const accessible = props.accessible !== false; + const focusable = props.focusable !== false; + + const { + editable, + hitSlop, + onPress, + onPressIn, + onPressOut, + rejectResponderTermination, + } = props; + + const config = useMemo( + () => ({ + cancelable: Platform.OS === 'ios' ? !rejectResponderTermination : null, + hitSlop, + onPress: (event: GestureResponderEvent) => { + onPress?.(event); + if (editable !== false) { + if (inputRef.current != null) { + inputRef.current.focus(); + } + } + }, + onPressIn, + onPressOut, + }), + [ + editable, + hitSlop, + onPress, + onPressIn, + onPressOut, + rejectResponderTermination, + ], + ); + + // Hide caret during test runs due to a flashing caret + // makes screenshot tests flakey + let caretHidden = props.caretHidden; + if (Platform.isTesting) { + caretHidden = true; + } + + // TextInput handles onBlur and onFocus events + // so omitting onBlur and onFocus pressability handlers here. + const {onBlur, onFocus, ...eventHandlers} = usePressability(config); + + const _accessibilityLabel = + props?.['aria-label'] ?? props?.accessibilityLabel; + + let _accessibilityState; + if ( + accessibilityState != null || + ariaBusy != null || + ariaChecked != null || + ariaDisabled != null || + ariaExpanded != null || + ariaSelected != null + ) { + _accessibilityState = { + busy: ariaBusy ?? accessibilityState?.busy, + checked: ariaChecked ?? accessibilityState?.checked, + disabled: ariaDisabled ?? accessibilityState?.disabled, + expanded: ariaExpanded ?? accessibilityState?.expanded, + selected: ariaSelected ?? accessibilityState?.selected, + }; + } + + // Keep the original (potentially nested) style when possible, as React can diff these more efficiently + let _style = props.style; + const flattenedStyle = flattenStyle(props.style); + if (flattenedStyle != null) { + let overrides: ?{...TextStyleInternal} = null; + if (typeof flattenedStyle?.fontWeight === 'number') { + overrides = overrides || ({} as {...TextStyleInternal}); + overrides.fontWeight = + // $FlowFixMe[incompatible-type] + flattenedStyle.fontWeight.toString() as TextStyleInternal['fontWeight']; + } + + if (flattenedStyle.verticalAlign != null) { + overrides = overrides || ({} as {...TextStyleInternal}); + overrides.textAlignVertical = + verticalAlignToTextAlignVerticalMap[flattenedStyle.verticalAlign]; + overrides.verticalAlign = undefined; + } + + if (overrides != null) { + // $FlowFixMe[incompatible-type] + _style = [_style, overrides]; + } + } + + if (Platform.OS === 'ios') { + const RCTTextInputView = + props.multiline === true + ? RCTMultilineTextInputView + : RCTSinglelineTextInputView; + + const useMultilineDefaultStyle = + props.multiline === true && + (flattenedStyle == null || + (flattenedStyle.padding == null && + flattenedStyle.paddingVertical == null && + flattenedStyle.paddingTop == null)); + + const _accessibilityElementsHidden = + props['aria-hidden'] ?? props.accessibilityElementsHidden; + + textInput = ( + + ); + } else if (Platform.OS === 'android') { + const autoCapitalize = props.autoCapitalize || 'sentences'; + const _accessibilityLabelledBy = + props?.['aria-labelledby'] ?? props?.accessibilityLabelledBy; + const _importantForAccessibility = + props['aria-hidden'] === true + ? ('no-hide-descendants' as const) + : undefined; + const placeholder = props.placeholder ?? ''; + let children = props.children; + const childCount = React.Children.count(children); + invariant( + !(props.value != null && childCount), + 'Cannot specify both value and children.', + ); + if (childCount > 1) { + children = {children}; + } + // For consistency with iOS set cursor/selectionHandle color as selectionColor + const colorProps = { + cursorColor: cursorColor === undefined ? selectionColor : cursorColor, + selectionColor, + selectionHandleColor: + selectionHandleColor === undefined + ? selectionColor + : selectionHandleColor, + }; + textInput = ( + /* $FlowFixMe[prop-missing] the types for AndroidTextInput don't match up + * exactly with the props for TextInput. This will need to get fixed */ + /* $FlowFixMe[incompatible-type] the types for AndroidTextInput don't + * match up exactly with the props for TextInput. This will need to get + * fixed */ + /* $FlowFixMe[incompatible-type-arg] the types for AndroidTextInput don't + * match up exactly with the props for TextInput. This will need to get + * fixed */ + + ); + } + return {textInput}; +} + +const enterKeyHintToReturnTypeMap = { + done: 'done', + enter: 'default', + go: 'go', + next: 'next', + previous: 'previous', + search: 'search', + send: 'send', +} as const; + +const inputModeToKeyboardTypeMap = { + decimal: 'decimal-pad', + email: 'email-address', + none: 'default', + numeric: 'number-pad', + search: + Platform.OS === 'ios' ? ('web-search' as const) : ('default' as const), + tel: 'phone-pad', + text: 'default', + url: 'url', +} as const; + +// Map HTML autocomplete values to Android autoComplete values +const autoCompleteWebToAutoCompleteAndroidMap = { + 'additional-name': 'name-middle', + 'address-line1': 'postal-address-region', + 'address-line2': 'postal-address-locality', + bday: 'birthdate-full', + 'bday-day': 'birthdate-day', + 'bday-month': 'birthdate-month', + 'bday-year': 'birthdate-year', + 'cc-csc': 'cc-csc', + 'cc-exp': 'cc-exp', + 'cc-exp-month': 'cc-exp-month', + 'cc-exp-year': 'cc-exp-year', + 'cc-number': 'cc-number', + country: 'postal-address-country', + 'current-password': 'password', + email: 'email', + 'family-name': 'name-family', + 'given-name': 'name-given', + 'honorific-prefix': 'name-prefix', + 'honorific-suffix': 'name-suffix', + name: 'name', + 'new-password': 'password-new', + off: 'off', + 'one-time-code': 'sms-otp', + 'postal-code': 'postal-code', + sex: 'gender', + 'street-address': 'street-address', + tel: 'tel', + 'tel-country-code': 'tel-country-code', + 'tel-national': 'tel-national', + username: 'username', +} as const; + +// Map HTML autocomplete values to iOS textContentType values +const autoCompleteWebToTextContentTypeMap = { + 'additional-name': 'middleName', + 'address-line1': 'streetAddressLine1', + 'address-line2': 'streetAddressLine2', + bday: 'birthdate', + 'bday-day': 'birthdateDay', + 'bday-month': 'birthdateMonth', + 'bday-year': 'birthdateYear', + 'cc-additional-name': 'creditCardMiddleName', + 'cc-csc': 'creditCardSecurityCode', + 'cc-exp': 'creditCardExpiration', + 'cc-exp-month': 'creditCardExpirationMonth', + 'cc-exp-year': 'creditCardExpirationYear', + 'cc-family-name': 'creditCardFamilyName', + 'cc-given-name': 'creditCardGivenName', + 'cc-name': 'creditCardName', + 'cc-number': 'creditCardNumber', + 'cc-type': 'creditCardType', + country: 'countryName', + 'current-password': 'password', + email: 'emailAddress', + 'family-name': 'familyName', + 'given-name': 'givenName', + 'honorific-prefix': 'namePrefix', + 'honorific-suffix': 'nameSuffix', + name: 'name', + 'new-password': 'newPassword', + nickname: 'nickname', + off: 'none', + 'one-time-code': 'oneTimeCode', + organization: 'organizationName', + 'organization-title': 'jobTitle', + 'postal-code': 'postalCode', + 'street-address': 'fullStreetAddress', + tel: 'telephoneNumber', + url: 'URL', + username: 'username', +} as const; + +const TextInput: component( + ref?: React.RefSetter, + ...props: React.ElementConfig +) = function TextInput({ + ref: forwardedRef, + allowFontScaling = true, + rejectResponderTermination = true, + underlineColorAndroid = 'transparent', + autoComplete, + textContentType, + readOnly, + editable, + enterKeyHint, + returnKeyType, + inputMode, + showSoftInputOnFocus, + keyboardType, + ...restProps +}: { + ref?: React.RefSetter, + ...React.ElementConfig, +}) { + return ( + + ); +}; + +TextInput.displayName = 'TextInput'; + +// $FlowFixMe[prop-missing] +TextInput.State = { + blurTextInput: TextInputState.blurTextInput, + currentlyFocusedField: TextInputState.currentlyFocusedField, + currentlyFocusedInput: TextInputState.currentlyFocusedInput, + focusTextInput: TextInputState.focusTextInput, +}; + +export type TextInputComponentStatics = Readonly<{ + State: TextInputStateType, +}>; + +const styles = StyleSheet.create({ + multilineDefault: { + // This default top inset makes RCTMultilineTextInputView seem as close as possible + // to single-line RCTSinglelineTextInputView defaults, using the system defaults + // of font size 17 and a height of 31 points. + paddingTop: 5, + }, +}); + +const verticalAlignToTextAlignVerticalMap = { + auto: 'auto', + bottom: 'bottom', + middle: 'center', + top: 'top', +} as const; + +// $FlowFixMe[unclear-type] Unclear type. Using `any` type is not safe. +export default TextInput as any as TextInputType; diff --git a/native-views/react-native-text-input/src/__tests__/index.test.tsx b/native-views/react-native-text-input/src/__tests__/index.test.tsx new file mode 100644 index 00000000..fe7de301 --- /dev/null +++ b/native-views/react-native-text-input/src/__tests__/index.test.tsx @@ -0,0 +1 @@ +it.todo("write a test"); diff --git a/native-views/react-native-text-input/src/enum.ts b/native-views/react-native-text-input/src/enum.ts new file mode 100644 index 00000000..d48533ae --- /dev/null +++ b/native-views/react-native-text-input/src/enum.ts @@ -0,0 +1,3 @@ +export enum EPasteEventPayloadItemType { + TextPlain = "text/plain", +} diff --git a/native-views/react-native-text-input/src/index.tsx b/native-views/react-native-text-input/src/index.tsx new file mode 100644 index 00000000..6aec26da --- /dev/null +++ b/native-views/react-native-text-input/src/index.tsx @@ -0,0 +1,17 @@ +import type { ComponentType } from "react"; +// @ts-expect-error +import TextInputView from "./Input"; +import type { ITextInputProps } from "./type"; + +// export * from './TextInputViewNativeComponent'; + +export type { + IPasteEventPayloadItem, + IPasteEventPayload, + IPasteEventParams, + ITextInputProps, +} from "./type"; +export * from "./enum"; + +const TextInput = TextInputView as ComponentType; +export default TextInput; diff --git a/native-views/react-native-text-input/src/type.ts b/native-views/react-native-text-input/src/type.ts new file mode 100644 index 00000000..782b4fea --- /dev/null +++ b/native-views/react-native-text-input/src/type.ts @@ -0,0 +1,13 @@ +import type { TextInputProps } from "react-native"; +import type { EPasteEventPayloadItemType } from "./enum"; + +export type IPasteEventPayloadItem = { + data?: string; + type?: EPasteEventPayloadItemType; +}; +export type IPasteEventPayload = IPasteEventPayloadItem[]; +export type IPasteEventParams = { nativeEvent: { items?: IPasteEventPayload } }; + +export interface ITextInputProps extends TextInputProps { + onPaste?: (event: IPasteEventParams) => void; +} diff --git a/native-views/react-native-text-input/tsconfig.build.json b/native-views/react-native-text-input/tsconfig.build.json new file mode 100644 index 00000000..3c0636ad --- /dev/null +++ b/native-views/react-native-text-input/tsconfig.build.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig", + "exclude": ["example", "lib"] +} diff --git a/native-views/react-native-text-input/tsconfig.json b/native-views/react-native-text-input/tsconfig.json new file mode 100644 index 00000000..90cc8e66 --- /dev/null +++ b/native-views/react-native-text-input/tsconfig.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + "rootDir": ".", + "paths": { + "react-native-text-input": ["./src/index"] + }, + "allowUnreachableCode": false, + "allowUnusedLabels": false, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "jsx": "react-jsx", + "lib": ["ESNext"], + "module": "ESNext", + "moduleResolution": "Bundler", + "noEmit": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "noImplicitUseStrict": false, + "noStrictGenericChecks": false, + "noUncheckedIndexedAccess": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "strict": true, + "target": "ESNext", + "verbatimModuleSyntax": true + } +} diff --git a/native-views/react-native-text-input/turbo.json b/native-views/react-native-text-input/turbo.json new file mode 100644 index 00000000..405897ee --- /dev/null +++ b/native-views/react-native-text-input/turbo.json @@ -0,0 +1,36 @@ +{ + "$schema": "https://turbo.build/schema.json", + "pipeline": { + "build:android": { + "env": ["ORG_GRADLE_PROJECT_newArchEnabled"], + "inputs": [ + "package.json", + "android", + "!android/build", + "src/*.ts", + "src/*.tsx", + "example/package.json", + "example/android", + "!example/android/.gradle", + "!example/android/build", + "!example/android/app/build" + ], + "outputs": [] + }, + "build:ios": { + "env": ["RCT_NEW_ARCH_ENABLED"], + "inputs": [ + "package.json", + "*.podspec", + "ios", + "src/*.ts", + "src/*.tsx", + "example/package.json", + "example/ios", + "!example/ios/build", + "!example/ios/Pods" + ], + "outputs": [] + } + } +} diff --git a/yarn.lock b/yarn.lock index 17d583df..a2b5481b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2869,6 +2869,7 @@ __metadata: "@onekeyfe/react-native-split-bundle-loader": "workspace:*" "@onekeyfe/react-native-tab-view": "workspace:*" "@onekeyfe/react-native-tcp-socket": "workspace:*" + "@onekeyfe/react-native-text-input": "workspace:*" "@onekeyfe/react-native-zip-archive": "workspace:*" "@react-native-community/cli": "npm:20.1.0" "@react-native-community/cli-platform-android": "npm:20.1.0" @@ -4032,6 +4033,23 @@ __metadata: languageName: unknown linkType: soft +"@onekeyfe/react-native-text-input@workspace:*, @onekeyfe/react-native-text-input@workspace:native-views/react-native-text-input": + version: 0.0.0-use.local + resolution: "@onekeyfe/react-native-text-input@workspace:native-views/react-native-text-input" + dependencies: + "@react-native/babel-preset": "npm:0.86.2" + "@types/react": "npm:^19.2.0" + del-cli: "npm:^6.0.0" + react: "npm:19.2.3" + react-native: "patch:react-native@npm%3A0.86.2#~/.yarn/patches/react-native-npm-0.86.2-c9d546616f.patch" + react-native-builder-bob: "npm:^0.40.13" + typescript: "npm:^5.9.2" + peerDependencies: + react: "*" + react-native: "*" + languageName: unknown + linkType: soft + "@onekeyfe/react-native-zip-archive@workspace:*, @onekeyfe/react-native-zip-archive@workspace:native-modules/react-native-zip-archive": version: 0.0.0-use.local resolution: "@onekeyfe/react-native-zip-archive@workspace:native-modules/react-native-zip-archive" From e7275d6074e3d29df775db0c03c68d2cc24d45fb Mon Sep 17 00:00:00 2001 From: huhuanming Date: Sat, 29 Aug 2026 10:14:01 +0800 Subject: [PATCH 6/7] fix: guard text input paste dispatcher --- .../com/textinput/TextInputViewManager.kt | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/native-views/react-native-text-input/android/src/main/java/com/textinput/TextInputViewManager.kt b/native-views/react-native-text-input/android/src/main/java/com/textinput/TextInputViewManager.kt index 4a3309ec..110e65da 100644 --- a/native-views/react-native-text-input/android/src/main/java/com/textinput/TextInputViewManager.kt +++ b/native-views/react-native-text-input/android/src/main/java/com/textinput/TextInputViewManager.kt @@ -7,7 +7,6 @@ import com.facebook.react.module.annotations.ReactModule import com.facebook.react.uimanager.ThemedReactContext import com.facebook.react.uimanager.UIManagerHelper import com.facebook.react.uimanager.annotations.ReactProp -import com.facebook.react.uimanager.events.EventDispatcher import com.facebook.react.views.textinput.ReactEditText import com.facebook.react.views.textinput.ReactTextInputManager import so.onekey.app.wallet.pasteinput.PasteWatcher @@ -53,19 +52,20 @@ class TextInputViewManager : ReactTextInputManager() { private class ReactPasteWatcher(editText: TextInputView) : PasteWatcher { private val mReactEditText: TextInputView = editText - private val mEventDispatcher: EventDispatcher - private val mSurfaceId: Int - - init { - val reactContext = UIManagerHelper.getReactContext(editText) - mEventDispatcher = - UIManagerHelper.getEventDispatcherForReactTag(reactContext, editText.id)!! - mSurfaceId = UIManagerHelper.getSurfaceId(reactContext) - } override fun onPaste(type: String, data: String) { - mEventDispatcher.dispatchEvent( - TextInputPasteEvent(mSurfaceId, mReactEditText.id, type, data) + val reactContext = UIManagerHelper.getReactContext(mReactEditText) ?: return + val eventDispatcher = + UIManagerHelper.getEventDispatcherForReactTag(reactContext, mReactEditText.id) + ?: return + + eventDispatcher.dispatchEvent( + TextInputPasteEvent( + UIManagerHelper.getSurfaceId(reactContext), + mReactEditText.id, + type, + data + ) ) } } From 94e9e88a10e52ec28050a3913e83f3cb1345200e Mon Sep 17 00:00:00 2001 From: huhuanming Date: Sat, 29 Aug 2026 10:49:44 +0800 Subject: [PATCH 7/7] chore: release app modules 3.0.92 --- CHANGELOG.md | 8 ++++++++ native-modules/native-logger/package.json | 2 +- native-modules/react-native-aes-crypto/package.json | 2 +- native-modules/react-native-app-update/package.json | 2 +- native-modules/react-native-async-storage/package.json | 2 +- .../react-native-background-thread/package.json | 2 +- native-modules/react-native-bundle-crypto/package.json | 2 +- native-modules/react-native-bundle-update/package.json | 2 +- .../package.json | 2 +- native-modules/react-native-cloud-fs/package.json | 2 +- native-modules/react-native-cloud-kit-module/package.json | 2 +- native-modules/react-native-device-utils/package.json | 2 +- native-modules/react-native-dns-lookup/package.json | 2 +- .../react-native-get-random-values/package.json | 2 +- native-modules/react-native-keychain-module/package.json | 2 +- native-modules/react-native-lite-card/package.json | 2 +- native-modules/react-native-network-info/package.json | 2 +- native-modules/react-native-network-throttle/package.json | 2 +- native-modules/react-native-pbkdf2/package.json | 2 +- native-modules/react-native-perf-memory/package.json | 2 +- native-modules/react-native-perf-stats/package.json | 2 +- native-modules/react-native-ping/package.json | 2 +- native-modules/react-native-range-downloader/package.json | 2 +- native-modules/react-native-sni-connect/package.json | 2 +- native-modules/react-native-splash-screen/package.json | 2 +- .../react-native-split-bundle-loader/package.json | 2 +- native-modules/react-native-tcp-socket/package.json | 2 +- native-modules/react-native-zip-archive/package.json | 2 +- native-views/react-native-auto-size-input/package.json | 2 +- native-views/react-native-chart-webview/package.json | 2 +- native-views/react-native-pager-view/package.json | 2 +- native-views/react-native-perp-depth-bar/package.json | 2 +- native-views/react-native-scroll-guard/package.json | 2 +- native-views/react-native-segment-slider/package.json | 2 +- native-views/react-native-skeleton/package.json | 2 +- native-views/react-native-tab-view/package.json | 2 +- native-views/react-native-text-input/package.json | 2 +- 37 files changed, 44 insertions(+), 36 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 92bf32ca..c92bb942 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,14 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +## [3.0.92] - 2026-08-29 + +### Bug Fixes +- **text-input (Android)**: Resolve the React event dispatcher when a paste occurs and safely skip the custom event when the surface is not ready, avoiding a first-mount null-pointer crash without affecting the system paste action. + +### Chores +- Bump all publishable packages to 3.0.92. + ## [3.0.91] - 2026-08-28 ### Features diff --git a/native-modules/native-logger/package.json b/native-modules/native-logger/package.json index 6c79d536..aa9786ef 100644 --- a/native-modules/native-logger/package.json +++ b/native-modules/native-logger/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-native-logger", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-native-logger", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-aes-crypto/package.json b/native-modules/react-native-aes-crypto/package.json index 9621ade2..aea867cf 100644 --- a/native-modules/react-native-aes-crypto/package.json +++ b/native-modules/react-native-aes-crypto/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-aes-crypto", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-aes-crypto", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-app-update/package.json b/native-modules/react-native-app-update/package.json index 3e6d1896..ec23e0bf 100644 --- a/native-modules/react-native-app-update/package.json +++ b/native-modules/react-native-app-update/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-app-update", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-app-update", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-async-storage/package.json b/native-modules/react-native-async-storage/package.json index 33c5287d..d9217f54 100644 --- a/native-modules/react-native-async-storage/package.json +++ b/native-modules/react-native-async-storage/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-async-storage", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-async-storage", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-background-thread/package.json b/native-modules/react-native-background-thread/package.json index a75cb71a..0c83713e 100644 --- a/native-modules/react-native-background-thread/package.json +++ b/native-modules/react-native-background-thread/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-background-thread", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-background-thread", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-bundle-crypto/package.json b/native-modules/react-native-bundle-crypto/package.json index bf409b20..89da7f9a 100644 --- a/native-modules/react-native-bundle-crypto/package.json +++ b/native-modules/react-native-bundle-crypto/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-bundle-crypto", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-bundle-crypto", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-bundle-update/package.json b/native-modules/react-native-bundle-update/package.json index ce1305fb..f3ce6096 100644 --- a/native-modules/react-native-bundle-update/package.json +++ b/native-modules/react-native-bundle-update/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-bundle-update", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-bundle-update", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-check-biometric-auth-changed/package.json b/native-modules/react-native-check-biometric-auth-changed/package.json index bd72b81f..dd6530cf 100644 --- a/native-modules/react-native-check-biometric-auth-changed/package.json +++ b/native-modules/react-native-check-biometric-auth-changed/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-check-biometric-auth-changed", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-check-biometric-auth-changed", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-cloud-fs/package.json b/native-modules/react-native-cloud-fs/package.json index 208ed0ac..c7ec0eb6 100644 --- a/native-modules/react-native-cloud-fs/package.json +++ b/native-modules/react-native-cloud-fs/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-cloud-fs", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-cloud-fs TurboModule for OneKey", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-cloud-kit-module/package.json b/native-modules/react-native-cloud-kit-module/package.json index bca39a03..7fe60720 100644 --- a/native-modules/react-native-cloud-kit-module/package.json +++ b/native-modules/react-native-cloud-kit-module/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-cloud-kit-module", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-cloud-kit-module", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-device-utils/package.json b/native-modules/react-native-device-utils/package.json index 291ab42f..f2e18f55 100644 --- a/native-modules/react-native-device-utils/package.json +++ b/native-modules/react-native-device-utils/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-device-utils", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-device-utils", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-dns-lookup/package.json b/native-modules/react-native-dns-lookup/package.json index da86f01d..af959e21 100644 --- a/native-modules/react-native-dns-lookup/package.json +++ b/native-modules/react-native-dns-lookup/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-dns-lookup", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-dns-lookup", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-get-random-values/package.json b/native-modules/react-native-get-random-values/package.json index c5e319c6..c46c08ed 100644 --- a/native-modules/react-native-get-random-values/package.json +++ b/native-modules/react-native-get-random-values/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-get-random-values", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-get-random-values", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-keychain-module/package.json b/native-modules/react-native-keychain-module/package.json index e672b4a7..b6200adf 100644 --- a/native-modules/react-native-keychain-module/package.json +++ b/native-modules/react-native-keychain-module/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-keychain-module", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-keychain-module", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-lite-card/package.json b/native-modules/react-native-lite-card/package.json index f8b5701f..8a7afba6 100644 --- a/native-modules/react-native-lite-card/package.json +++ b/native-modules/react-native-lite-card/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-lite-card", - "version": "3.0.91", + "version": "3.0.92", "description": "lite card", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-network-info/package.json b/native-modules/react-native-network-info/package.json index 857ed61d..0603aa63 100644 --- a/native-modules/react-native-network-info/package.json +++ b/native-modules/react-native-network-info/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-network-info", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-network-info", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-network-throttle/package.json b/native-modules/react-native-network-throttle/package.json index 37a73a28..b43c85c2 100644 --- a/native-modules/react-native-network-throttle/package.json +++ b/native-modules/react-native-network-throttle/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-network-throttle", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-network-throttle", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-pbkdf2/package.json b/native-modules/react-native-pbkdf2/package.json index 4ef54d3a..f868439b 100644 --- a/native-modules/react-native-pbkdf2/package.json +++ b/native-modules/react-native-pbkdf2/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-pbkdf2", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-pbkdf2", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-perf-memory/package.json b/native-modules/react-native-perf-memory/package.json index 8c8f31c5..1e504591 100644 --- a/native-modules/react-native-perf-memory/package.json +++ b/native-modules/react-native-perf-memory/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-perf-memory", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-perf-memory", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-perf-stats/package.json b/native-modules/react-native-perf-stats/package.json index 5af9c677..77739e09 100644 --- a/native-modules/react-native-perf-stats/package.json +++ b/native-modules/react-native-perf-stats/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-perf-stats", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-perf-stats", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-ping/package.json b/native-modules/react-native-ping/package.json index b87e3e86..5e8831de 100644 --- a/native-modules/react-native-ping/package.json +++ b/native-modules/react-native-ping/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-ping", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-ping TurboModule for OneKey", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-range-downloader/package.json b/native-modules/react-native-range-downloader/package.json index 6279d1fd..c2ef49fe 100644 --- a/native-modules/react-native-range-downloader/package.json +++ b/native-modules/react-native-range-downloader/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-range-downloader", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-range-downloader", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-sni-connect/package.json b/native-modules/react-native-sni-connect/package.json index 41e362b1..313f915a 100644 --- a/native-modules/react-native-sni-connect/package.json +++ b/native-modules/react-native-sni-connect/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-sni-connect", - "version": "3.0.91", + "version": "3.0.92", "description": "A React Native library for SNI-based HTTP requests with DNS caching and request management", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-splash-screen/package.json b/native-modules/react-native-splash-screen/package.json index 1bfa2e01..318563f1 100644 --- a/native-modules/react-native-splash-screen/package.json +++ b/native-modules/react-native-splash-screen/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-splash-screen", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-splash-screen", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-split-bundle-loader/package.json b/native-modules/react-native-split-bundle-loader/package.json index ea79c040..d0413580 100644 --- a/native-modules/react-native-split-bundle-loader/package.json +++ b/native-modules/react-native-split-bundle-loader/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-split-bundle-loader", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-split-bundle-loader", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-tcp-socket/package.json b/native-modules/react-native-tcp-socket/package.json index 5efb2bce..5f14192d 100644 --- a/native-modules/react-native-tcp-socket/package.json +++ b/native-modules/react-native-tcp-socket/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-tcp-socket", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-tcp-socket", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-zip-archive/package.json b/native-modules/react-native-zip-archive/package.json index f479d6ac..782706d2 100644 --- a/native-modules/react-native-zip-archive/package.json +++ b/native-modules/react-native-zip-archive/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-zip-archive", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-zip-archive Nitro HybridObject for OneKey", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-views/react-native-auto-size-input/package.json b/native-views/react-native-auto-size-input/package.json index 0d61f3b7..14bc56e8 100644 --- a/native-views/react-native-auto-size-input/package.json +++ b/native-views/react-native-auto-size-input/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-auto-size-input", - "version": "3.0.91", + "version": "3.0.92", "description": "Auto-sizing text input with font scaling, prefix and suffix support", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-views/react-native-chart-webview/package.json b/native-views/react-native-chart-webview/package.json index 40742dc4..505ce057 100644 --- a/native-views/react-native-chart-webview/package.json +++ b/native-views/react-native-chart-webview/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-chart-webview", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-chart-webview", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-views/react-native-pager-view/package.json b/native-views/react-native-pager-view/package.json index 23e5c597..40705125 100644 --- a/native-views/react-native-pager-view/package.json +++ b/native-views/react-native-pager-view/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-pager-view", - "version": "3.0.91", + "version": "3.0.92", "description": "React Native wrapper for Android and iOS ViewPager", "source": "./src/index.tsx", "main": "./lib/module/index.js", diff --git a/native-views/react-native-perp-depth-bar/package.json b/native-views/react-native-perp-depth-bar/package.json index 6983aa28..7ff2f86c 100644 --- a/native-views/react-native-perp-depth-bar/package.json +++ b/native-views/react-native-perp-depth-bar/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-perp-depth-bar", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-perp-depth-bar", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-views/react-native-scroll-guard/package.json b/native-views/react-native-scroll-guard/package.json index 5549d2ca..1a12093d 100644 --- a/native-views/react-native-scroll-guard/package.json +++ b/native-views/react-native-scroll-guard/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-scroll-guard", - "version": "3.0.91", + "version": "3.0.92", "description": "A native view wrapper that prevents parent scrollable containers (PagerView/ViewPager2) from intercepting child scroll gestures", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-views/react-native-segment-slider/package.json b/native-views/react-native-segment-slider/package.json index 35c8441b..5cfc147c 100644 --- a/native-views/react-native-segment-slider/package.json +++ b/native-views/react-native-segment-slider/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-segment-slider", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-segment-slider", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-views/react-native-skeleton/package.json b/native-views/react-native-skeleton/package.json index a532ea07..669313de 100644 --- a/native-views/react-native-skeleton/package.json +++ b/native-views/react-native-skeleton/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-skeleton", - "version": "3.0.91", + "version": "3.0.92", "description": "react-native-skeleton", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-views/react-native-tab-view/package.json b/native-views/react-native-tab-view/package.json index d14bdef4..81dcdd10 100644 --- a/native-views/react-native-tab-view/package.json +++ b/native-views/react-native-tab-view/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-tab-view", - "version": "3.0.91", + "version": "3.0.92", "description": "Native Bottom Tabs for React Native (UIKit implementation)", "source": "./src/index.tsx", "main": "./lib/module/index.js", diff --git a/native-views/react-native-text-input/package.json b/native-views/react-native-text-input/package.json index 7b5e244e..839296f8 100644 --- a/native-views/react-native-text-input/package.json +++ b/native-views/react-native-text-input/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-text-input", - "version": "3.0.91", + "version": "3.0.92", "description": "React Native TextInput with native paste events", "source": "./src/index.tsx", "main": "./lib/module/index.js",