diff --git a/README.md b/README.md index 6e55f335..4b8090dc 100644 --- a/README.md +++ b/README.md @@ -15,12 +15,12 @@ First, install the library from npm with the package manager of your choice: ```sh -yarn add @expensify/react-native-live-markdown react-native-reanimated expensify-common html-entities@2.5.3 -npm install @expensify/react-native-live-markdown react-native-reanimated expensify-common html-entities@2.5.3 --save -npx expo install @expensify/react-native-live-markdown react-native-reanimated expensify-common html-entities@2.5.3 +yarn add @expensify/react-native-live-markdown react-native-worklets expensify-common html-entities@2.5.3 +npm install @expensify/react-native-live-markdown react-native-worklets expensify-common html-entities@2.5.3 --save +npx expo install @expensify/react-native-live-markdown react-native-worklets expensify-common html-entities@2.5.3 ``` -React Native Live Markdown requires [react-native-reanimated](https://github.com/software-mansion/react-native-reanimated) 3.17.0 or newer as well as [expensify-common](https://github.com/Expensify/expensify-common) 2.0.115 and [html-entities](https://github.com/mdevils/html-entities) 2.5.3 exactly if using the default built-in ExpensiMark parser. +React Native Live Markdown requires [react-native-worklets](https://github.com/software-mansion/react-native-reanimated/tree/main/packages/react-native-worklets) 0.6.0 or newer as well as [expensify-common](https://github.com/Expensify/expensify-common) 2.0.115 and [html-entities](https://github.com/mdevils/html-entities) 2.5.3 exactly if using the default built-in ExpensiMark parser. Then, install the iOS dependencies with CocoaPods: @@ -148,7 +148,7 @@ Currently, only the following types are supported: type MarkdownType = 'bold' | 'italic' | 'strikethrough' | 'emoji' | 'mention-here' | 'mention-user' | 'mention-report' | 'link' | 'code' | 'pre' | 'blockquote' | 'h1' | 'syntax'; ``` -Parser needs to be marked as a [worklet](https://docs.swmansion.com/react-native-reanimated/docs/guides/worklets/) because it's executed on the UI thread as the user types. +Parser needs to be marked as a [worklet](https://docs.swmansion.com/react-native-worklets/docs/fundamentals/glossary#worklet) because it's executed on the UI thread as the user types. Here's a sample function that parses all substrings located between two asterisks as bold text: diff --git a/RNLiveMarkdown.podspec b/RNLiveMarkdown.podspec index c2b20a07..001197d2 100644 --- a/RNLiveMarkdown.podspec +++ b/RNLiveMarkdown.podspec @@ -5,14 +5,9 @@ react_native_json = JSON.parse(File.read(File.join(react_native_node_modules_dir react_native_minor_version = react_native_json['version'].split('.')[1].to_i pods_root = Pod::Config.instance.project_pods_root - -react_native_worklets_path = `cd "#{Pod::Config.instance.installation_root.to_s}" && node --print "require.resolve('react-native-worklets/package.json')"` -worklets_installed = react_native_worklets_path != "" -worklets_package_name = worklets_installed ? 'react-native-worklets' : 'react-native-reanimated' - -react_native_worklets_or_reanimated_node_modules_dir = ENV['REACT_NATIVE_WORKLETS_NODE_MODULES_DIR'] || ENV['REACT_NATIVE_REANIMATED_NODE_MODULES_DIR'] || - File.dirname(`cd "#{Pod::Config.instance.installation_root.to_s}" && node --print "require.resolve('#{worklets_package_name}/package.json')"`) -react_native_worklets_or_reanimated_node_modules_dir_from_pods_root = Pathname.new(react_native_worklets_or_reanimated_node_modules_dir).relative_path_from(pods_root).to_s +react_native_worklets_node_modules_dir = ENV['REACT_NATIVE_WORKLETS_NODE_MODULES_DIR'] || + File.dirname(`cd "#{Pod::Config.instance.installation_root.to_s}" && node --print "require.resolve('react-native-worklets/package.json')"`) +react_native_worklets_node_modules_dir_from_pods_root = Pathname.new(react_native_worklets_node_modules_dir).relative_path_from(pods_root).to_s react_native_react_common_dir = File.join(react_native_node_modules_dir, 'react-native/ReactCommon') react_native_react_common_dir_from_pods_root = Pathname.new(react_native_react_common_dir).relative_path_from(pods_root).to_s @@ -33,24 +28,16 @@ Pod::Spec.new do |s| s.source_files = "apple/**/*.{h,m,mm}", "cpp/**/*.{h,cpp}" - if worklets_installed - s.dependency "RNWorklets" - else - s.dependency "RNReanimated/worklets" - end + s.dependency "RNWorklets" - xcconfig = { + s.xcconfig = { "OTHER_CFLAGS" => "$(inherited) -DREACT_NATIVE_MINOR_VERSION=#{react_native_minor_version}", "HEADER_SEARCH_PATHS" => [ - "\"$(PODS_ROOT)/#{react_native_worklets_or_reanimated_node_modules_dir_from_pods_root}/apple\"", - "\"$(PODS_ROOT)/#{react_native_worklets_or_reanimated_node_modules_dir_from_pods_root}/Common/cpp\"", + "\"$(PODS_ROOT)/#{react_native_worklets_node_modules_dir_from_pods_root}/apple\"", + "\"$(PODS_ROOT)/#{react_native_worklets_node_modules_dir_from_pods_root}/Common/cpp\"", "\"$(PODS_ROOT)/#{react_native_react_common_dir_from_pods_root}\"", ].join(' '), } - if worklets_installed - xcconfig["OTHER_CFLAGS"] << " -DWORKLETS_INSTALLED=1" - end - s.xcconfig = xcconfig s.pod_target_xcconfig = { "HEADER_SEARCH_PATHS" => "\"$(PODS_TARGET_SRCROOT)/cpp\"" } diff --git a/android/build.gradle b/android/build.gradle index f78d677f..47713119 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -67,7 +67,6 @@ def getReactNativeMinorVersion() { } def REACT_NATIVE_MINOR_VERSION = getReactNativeMinorVersion() -def workletsInstalled = rootProject.findProject(':react-native-worklets') != null android { if (supportsNamespace()) { @@ -96,8 +95,7 @@ android { "-DANDROID_TOOLCHAIN=clang", "-DREACT_NATIVE_MINOR_VERSION=${REACT_NATIVE_MINOR_VERSION}", "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON", - "-DREACT_NATIVE_ROOT_DIR=${resolveReactNativeDirectory().path}", - "-DWORKLETS_INSTALLED=${workletsInstalled}" + "-DREACT_NATIVE_ROOT_DIR=${resolveReactNativeDirectory().path}" abiFilters (*reactNativeArchitectures()) } } @@ -180,12 +178,7 @@ repositories { dependencies { implementation "com.facebook.react:react-android" // version substituted by RNGP implementation "com.facebook.react:hermes-android" // version substituted by RNGP - - if (workletsInstalled) { - implementation project(":react-native-worklets") - } else { - implementation project(":react-native-reanimated") - } + implementation project(":react-native-worklets") } // This fixes linking errors due to undefined symbols from libworklets.so. @@ -193,11 +186,6 @@ dependencies { // like a header-only library. During build, config files are not regenerated // because the cache key does not change and AGP thinks that they are up-to-date. afterEvaluate { - if (workletsInstalled) { - prepareKotlinBuildScriptModel.dependsOn(":react-native-worklets:prefabDebugPackage") - prepareKotlinBuildScriptModel.dependsOn(":react-native-worklets:prefabReleasePackage") - } else { - prepareKotlinBuildScriptModel.dependsOn(":react-native-reanimated:prefabDebugPackage") - prepareKotlinBuildScriptModel.dependsOn(":react-native-reanimated:prefabReleasePackage") - } + prepareKotlinBuildScriptModel.dependsOn(":react-native-worklets:prefabDebugPackage") + prepareKotlinBuildScriptModel.dependsOn(":react-native-worklets:prefabReleasePackage") } diff --git a/android/src/main/cpp/CMakeLists.txt b/android/src/main/cpp/CMakeLists.txt index 19d9db85..8976b396 100644 --- a/android/src/main/cpp/CMakeLists.txt +++ b/android/src/main/cpp/CMakeLists.txt @@ -4,10 +4,8 @@ cmake_minimum_required(VERSION 3.13) set(CMAKE_VERBOSE_MAKEFILE on) -if(WORKLETS_INSTALLED) - include("${REACT_NATIVE_ROOT_DIR}/ReactAndroid/cmake-utils/folly-flags.cmake") - add_compile_options(${folly_FLAGS}) -endif() +include("${REACT_NATIVE_ROOT_DIR}/ReactAndroid/cmake-utils/folly-flags.cmake") +add_compile_options(${folly_FLAGS}) add_compile_options(-fvisibility=hidden -fexceptions -frtti) @@ -20,32 +18,16 @@ file(GLOB CPP_SRC CONFIGURE_DEPENDS "${CPP_DIR}/*.cpp") add_library(${CMAKE_PROJECT_NAME} SHARED ${ANDROID_SRC} ${CPP_SRC}) -if(WORKLETS_INSTALLED) - target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CPP_DIR} "${REACT_NATIVE_ROOT_DIR}/ReactCommon/jsiexecutor") -else() - target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CPP_DIR}) -endif() +target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CPP_DIR} "${REACT_NATIVE_ROOT_DIR}/ReactCommon/jsiexecutor") find_package(fbjni REQUIRED CONFIG) find_package(ReactAndroid REQUIRED CONFIG) - -if(WORKLETS_INSTALLED) - find_package(react-native-worklets REQUIRED CONFIG) - add_definitions(-DWORKLETS_INSTALLED) -else() - find_package(react-native-reanimated REQUIRED CONFIG) -endif() - +find_package(react-native-worklets REQUIRED CONFIG) target_link_libraries( ${CMAKE_PROJECT_NAME} fbjni::fbjni ReactAndroid::jsi ReactAndroid::reactnative + react-native-worklets::worklets ) - -if(WORKLETS_INSTALLED) - target_link_libraries(${CMAKE_PROJECT_NAME} react-native-worklets::worklets) -else() - target_link_libraries(${CMAKE_PROJECT_NAME} react-native-reanimated::worklets) -endif() diff --git a/apple/MarkdownParser.mm b/apple/MarkdownParser.mm index c4cfb79b..fe469612 100644 --- a/apple/MarkdownParser.mm +++ b/apple/MarkdownParser.mm @@ -19,11 +19,7 @@ @implementation MarkdownParser { const auto &markdownRuntime = expensify::livemarkdown::getMarkdownRuntime(); jsi::Runtime &rt = markdownRuntime->getJSIRuntime(); -#ifdef WORKLETS_INSTALLED std::shared_ptr markdownWorklet; -#else - std::shared_ptr markdownWorklet; -#endif try { markdownWorklet = expensify::livemarkdown::getMarkdownWorklet([parserId intValue]); } catch (const std::out_of_range &error) { diff --git a/cpp/MarkdownGlobal.h b/cpp/MarkdownGlobal.h index 677b3911..e1817261 100644 --- a/cpp/MarkdownGlobal.h +++ b/cpp/MarkdownGlobal.h @@ -10,10 +10,6 @@ using namespace worklets; namespace expensify { namespace livemarkdown { -#ifndef WORKLETS_INSTALLED -using SerializableWorklet = ShareableWorklet; // ShareableWorklet was renamed to SerializableWorklet -#endif - void setMarkdownRuntime(const std::shared_ptr &markdownWorkletRuntime); std::shared_ptr getMarkdownRuntime(); diff --git a/cpp/RuntimeDecorator.cpp b/cpp/RuntimeDecorator.cpp index 74746277..f7ed5f91 100644 --- a/cpp/RuntimeDecorator.cpp +++ b/cpp/RuntimeDecorator.cpp @@ -23,12 +23,7 @@ void injectJSIBindings(jsi::Runtime &rt) { jsi::PropNameID::forAscii(rt, "jsi_registerMarkdownWorklet"), 1, [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) -> jsi::Value { -#ifdef WORKLETS_INSTALLED - auto worklet = extractSerializableOrThrow(rt, args[0]); -#else - auto worklet = extractShareableOrThrow(rt, args[0]); -#endif - auto parserId = registerMarkdownWorklet(worklet); + const auto parserId = registerMarkdownWorklet(extractSerializableOrThrow(rt, args[0])); return jsi::Value(parserId); })); diff --git a/example/babel.config.js b/example/babel.config.js index f51a858a..058e8577 100644 --- a/example/babel.config.js +++ b/example/babel.config.js @@ -1,14 +1,6 @@ const path = require('path'); const pak = require('../package.json'); -let workletsPlugin = null; -try { - require.resolve('react-native-worklets'); - workletsPlugin = 'react-native-worklets/plugin'; -} catch (e) { - workletsPlugin = 'react-native-reanimated/plugin'; -} - module.exports = { presets: ['module:@react-native/babel-preset'], plugins: [ @@ -21,6 +13,6 @@ module.exports = { }, }, ], - workletsPlugin, + 'react-native-worklets/plugin', ], }; diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index 12941c42..96741f1a 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -2253,7 +2253,7 @@ PODS: - React-perflogger (= 0.81.4) - React-utils (= 0.81.4) - SocketRocket - - RNLiveMarkdown (0.1.314): + - RNLiveMarkdown (0.1.315): - boost - DoubleConversion - fast_float @@ -2282,98 +2282,6 @@ PODS: - RNWorklets - SocketRocket - Yoga - - RNReanimated (4.1.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - RNReanimated/reanimated (= 4.1.3) - - RNWorklets - - SocketRocket - - Yoga - - RNReanimated/reanimated (4.1.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - RNReanimated/reanimated/apple (= 4.1.3) - - RNWorklets - - SocketRocket - - Yoga - - RNReanimated/reanimated/apple (4.1.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - RNWorklets - - SocketRocket - - Yoga - RNWorklets (0.6.1): - boost - DoubleConversion @@ -2539,7 +2447,6 @@ DEPENDENCIES: - ReactCodegen (from `build/generated/ios`) - ReactCommon/turbomodule/core (from `../../node_modules/react-native/ReactCommon`) - RNLiveMarkdown (from `../..`) - - RNReanimated (from `../../node_modules/react-native-reanimated`) - RNWorklets (from `../../node_modules/react-native-worklets`) - SocketRocket (~> 0.7.1) - Yoga (from `../../node_modules/react-native/ReactCommon/yoga`) @@ -2692,8 +2599,6 @@ EXTERNAL SOURCES: :path: "../../node_modules/react-native/ReactCommon" RNLiveMarkdown: :path: "../.." - RNReanimated: - :path: "../../node_modules/react-native-reanimated" RNWorklets: :path: "../../node_modules/react-native-worklets" Yoga: @@ -2770,8 +2675,7 @@ SPEC CHECKSUMS: ReactAppDependencyProvider: 433ddfb4536948630aadd5bd925aff8a632d2fe3 ReactCodegen: adf5027f30e34c68b5a09f0b68acb3e5ef9e1a5d ReactCommon: 394c6b92765cf6d211c2c3f7f6bc601dffb316a6 - RNLiveMarkdown: 438d2f94171d69be01ac4a32ec607a6339eede39 - RNReanimated: e04fc279d4e0d936a27f50c9a170cfa269c3434d + RNLiveMarkdown: dc31d8eeff71886ccb18174114a77edb421829fc RNWorklets: 879b69a98caa893353b964b6fece154a819145af SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 Yoga: a3ed390a19db0459bd6839823a6ac6d9c6db198d diff --git a/example/package.json b/example/package.json index 588ef943..32a79bc1 100644 --- a/example/package.json +++ b/example/package.json @@ -12,7 +12,6 @@ "expensify-common": "2.0.148", "react": "19.1.0", "react-native": "0.81.4", - "react-native-reanimated": "4.1.3", "react-native-worklets": "0.6.1" }, "devDependencies": { diff --git a/package-lock.json b/package-lock.json index 43ea2f01..6814b93b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -52,7 +52,6 @@ "react-dom": "19.1.0", "react-native": "0.81.4", "react-native-builder-bob": "^0.30.2", - "react-native-reanimated": "4.1.3", "react-native-web": "^0.20.0", "react-native-worklets": "^0.6.1", "release-it": "^15.0.0", @@ -66,13 +65,7 @@ "expensify-common": ">=2.0.148", "react": "*", "react-native": "*", - "react-native-reanimated": ">=3.17.0", "react-native-worklets": ">=0.6.0" - }, - "peerDependenciesMeta": { - "react-native-worklets": { - "optional": true - } } }, "example": { @@ -82,7 +75,6 @@ "expensify-common": "2.0.148", "react": "19.1.0", "react-native": "0.81.4", - "react-native-reanimated": "4.1.3", "react-native-worklets": "0.6.1" }, "devDependencies": { @@ -251,7 +243,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-16.12.0.tgz", "integrity": "sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA==", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -386,7 +377,6 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", "license": "MIT", - "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.2", @@ -427,7 +417,6 @@ "integrity": "sha512-dtnzmSjXfgL/HDgMcmsLSzyGbEosi4DrGWoCNfuI+W4IkVJw6izpTe7LtOdwAXnkDqw5yweboYCTkM2rQizCng==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", "eslint-visitor-keys": "^2.1.0", @@ -2242,7 +2231,6 @@ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz", "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", "license": "MIT", - "peer": true, "dependencies": { "@babel/compat-data": "^7.26.8", "@babel/helper-compilation-targets": "^7.26.5", @@ -2405,6 +2393,7 @@ "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.25.9.tgz", "integrity": "sha512-8D43jXtGsYmEeDvm4MWHYUpWf8iiXgWYx3fW7E7Wb7Oe6FWqJPl5K6TuFW0dOwNZzEE5rjlaSJYH9JjrUKJszA==", "license": "MIT", + "peer": true, "dependencies": { "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", @@ -2424,6 +2413,7 @@ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "license": "MIT", + "peer": true, "dependencies": { "commondir": "^1.0.1", "make-dir": "^2.0.0", @@ -2438,6 +2428,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "license": "MIT", + "peer": true, "dependencies": { "locate-path": "^3.0.0" }, @@ -2450,6 +2441,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "license": "MIT", + "peer": true, "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -2463,6 +2455,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "license": "MIT", + "peer": true, "dependencies": { "pify": "^4.0.1", "semver": "^5.6.0" @@ -2476,6 +2469,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "license": "MIT", + "peer": true, "dependencies": { "p-try": "^2.0.0" }, @@ -2491,6 +2485,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "license": "MIT", + "peer": true, "dependencies": { "p-limit": "^2.0.0" }, @@ -2503,6 +2498,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=4" } @@ -2512,6 +2508,7 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "license": "MIT", + "peer": true, "engines": { "node": ">=6" } @@ -2521,6 +2518,7 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "license": "MIT", + "peer": true, "dependencies": { "find-up": "^3.0.0" }, @@ -2533,6 +2531,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "license": "ISC", + "peer": true, "bin": { "semver": "bin/semver" } @@ -2681,7 +2680,6 @@ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -2793,6 +2791,7 @@ "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-1.0.0-canary-20250306-d9d3e02.tgz", "integrity": "sha512-Pp7PgZeG7O9Ou5d2W8vf3gwsUrIrFIw9VIycwJf37xplOFS/e/imenbR191N/FATxU9bzFThg0GN6p8fSYdeNA==", "license": "MIT", + "peer": true, "dependencies": { "@0no-co/graphql.web": "^1.0.8", "@babel/runtime": "^7.20.0", @@ -2865,6 +2864,7 @@ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", "license": "MIT", + "peer": true, "dependencies": { "restore-cursor": "^2.0.0" }, @@ -2877,6 +2877,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "license": "MIT", + "peer": true, "dependencies": { "color-name": "1.1.3" } @@ -2885,13 +2886,15 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@expo/cli/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.8.0" } @@ -2901,6 +2904,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "license": "ISC", + "peer": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -2921,6 +2925,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "license": "MIT", + "peer": true, "engines": { "node": ">=4" } @@ -2930,6 +2935,7 @@ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "license": "MIT", + "peer": true, "dependencies": { "chalk": "^2.0.1" }, @@ -2942,6 +2948,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "license": "MIT", + "peer": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -2954,6 +2961,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "license": "MIT", + "peer": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -2968,6 +2976,7 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=4" } @@ -2977,6 +2986,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", "license": "MIT", + "peer": true, "dependencies": { "mimic-fn": "^1.0.0" }, @@ -2989,6 +2999,7 @@ "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", "license": "MIT", + "peer": true, "dependencies": { "chalk": "^2.4.2", "cli-cursor": "^2.1.0", @@ -3006,6 +3017,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "license": "MIT", + "peer": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -3018,6 +3030,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "license": "MIT", + "peer": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -3032,6 +3045,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -3041,6 +3055,7 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", "license": "MIT", + "peer": true, "dependencies": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" @@ -3054,6 +3069,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "license": "MIT", + "peer": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -3066,6 +3082,7 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", "license": "MIT", + "peer": true, "engines": { "node": ">=10.0.0" }, @@ -3097,6 +3114,7 @@ "resolved": "https://registry.npmjs.org/@expo/config/-/config-11.0.0-canary-20250306-d9d3e02.tgz", "integrity": "sha512-f/mkS3sYTYjo67MU3daDfH5JOYVXFcOg8gcfgbo+QsFiRJpKD72uTit/mAL+59bvPxsP38KKQJNAzJ1Yey9q4w==", "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "~7.10.4", "@expo/config-plugins": "9.1.0-canary-20250306-d9d3e02", @@ -3118,6 +3136,7 @@ "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-9.1.0-canary-20250306-d9d3e02.tgz", "integrity": "sha512-8v0v67OV6jcSBUOocyc0ELo66DkZks1wfT1FPHPLZz43J/oOrptAdm71ZKvHweSdHkbOgkS6DyciKdWnjcK6gg==", "license": "MIT", + "peer": true, "dependencies": { "@expo/config-types": "53.0.0-canary-20250306-d9d3e02", "@expo/json-file": "9.0.3-canary-20250306-d9d3e02", @@ -3140,6 +3159,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "license": "ISC", + "peer": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -3160,6 +3180,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -3169,6 +3190,7 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -3177,13 +3199,15 @@ "version": "53.0.0-canary-20250306-d9d3e02", "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-53.0.0-canary-20250306-d9d3e02.tgz", "integrity": "sha512-Kna72gQozGDCeCnayyKksA8XDdGozvK7oL9Yp0/DdjCwZgut3uXE38aN9Agmi5dYK6XzbakpPUimSxNU/i083w==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@expo/config/node_modules/@babel/code-frame": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "license": "MIT", + "peer": true, "dependencies": { "@babel/highlight": "^7.10.4" } @@ -3193,6 +3217,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "license": "ISC", + "peer": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -3213,6 +3238,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -3278,6 +3304,7 @@ "resolved": "https://registry.npmjs.org/@expo/env/-/env-1.0.1-canary-20250306-d9d3e02.tgz", "integrity": "sha512-9+ZxeROpsPS/3K51uUfXyoXw8Y3pORT+u9K5rkhkOeeNRTE7FR8f4NFgDWOk7qle2NkG6/JTnE2QbJSWhqfyUQ==", "license": "MIT", + "peer": true, "dependencies": { "chalk": "^4.0.0", "debug": "^4.3.4", @@ -3291,6 +3318,7 @@ "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.11.12-canary-20250306-d9d3e02.tgz", "integrity": "sha512-77hVUZqByM7bIMTYy4vf0canNEuPlp1mjKn9T8VnMMAkiJMJJGi6hMRyU0nsnJM8x5NtZD/L9DgoKhK8iYy9jw==", "license": "MIT", + "peer": true, "dependencies": { "@expo/spawn-async": "^1.7.2", "arg": "^5.0.2", @@ -3312,6 +3340,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -3321,6 +3350,7 @@ "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.6.6-canary-20250306-d9d3e02.tgz", "integrity": "sha512-2Sqi+10F8uKNYWZMDxvWP1cXUmdpRq50NYTBTV0IgHDsBc+bcJ+fWYe/4NmF8aukY/MgB0BAycIiDBxXn5JZOg==", "license": "MIT", + "peer": true, "dependencies": { "@expo/spawn-async": "^1.7.2", "chalk": "^4.0.0", @@ -3338,6 +3368,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -3347,6 +3378,7 @@ "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-9.0.3-canary-20250306-d9d3e02.tgz", "integrity": "sha512-9qrcHOEUqoesMRcjCxnxISvYT6XmKS0k30yBaVOMJ7UN021kgQbe5KT58Nf6kv8tkZ90AouAI1i/XqlBbbOayw==", "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "~7.10.4", "json5": "^2.2.3", @@ -3358,6 +3390,7 @@ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "license": "MIT", + "peer": true, "dependencies": { "@babel/highlight": "^7.10.4" } @@ -3367,6 +3400,7 @@ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "license": "ISC", + "peer": true, "dependencies": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", @@ -3378,6 +3412,7 @@ "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.20.0-canary-20250306-d9d3e02.tgz", "integrity": "sha512-LRQroidJZCRsdmIQueCZJ9CeDeDsNGMrhB7NrrljmkMtQW2VKoBcugM+DDY+lLADr9S3a5JRl74new6HQDkWZQ==", "license": "MIT", + "peer": true, "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.5", @@ -3403,6 +3438,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "license": "ISC", + "peer": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -3437,6 +3473,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.1.1", @@ -3451,6 +3488,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -3460,6 +3498,7 @@ "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.1.7-canary-20250306-d9d3e02.tgz", "integrity": "sha512-84GY3VyI/KSSixjAVtQtZHTZ6qb6naGrv0CLFLOSxTIfYEUrdkutxMIAxxIPawsTWzZdTh3Ph8ZR8jSdrfTYjw==", "license": "MIT", + "peer": true, "dependencies": { "@expo/spawn-async": "^1.7.2", "exec-async": "^2.2.0" @@ -3473,6 +3512,7 @@ "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.6.2-canary-20250306-d9d3e02.tgz", "integrity": "sha512-sF4tK3fHluqXJSzeF4tfJNLqCxLrLGigu8f9BDFZsUnlp0vjOViV0ymEJPBcx6//pgCPTuCWkDoGsj5UyYwbcQ==", "license": "MIT", + "peer": true, "dependencies": { "@expo/json-file": "9.0.3-canary-20250306-d9d3e02", "@expo/spawn-async": "^1.7.2", @@ -3487,6 +3527,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "license": "MIT", + "peer": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -3499,6 +3540,7 @@ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", "license": "MIT", + "peer": true, "dependencies": { "restore-cursor": "^2.0.0" }, @@ -3511,6 +3553,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "license": "MIT", + "peer": true, "dependencies": { "color-name": "1.1.3" } @@ -3519,13 +3562,15 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@expo/package-manager/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.8.0" } @@ -3535,6 +3580,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "license": "MIT", + "peer": true, "engines": { "node": ">=4" } @@ -3544,6 +3590,7 @@ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "license": "MIT", + "peer": true, "dependencies": { "chalk": "^2.0.1" }, @@ -3556,6 +3603,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "license": "MIT", + "peer": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -3570,6 +3618,7 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=4" } @@ -3579,6 +3628,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", "license": "MIT", + "peer": true, "dependencies": { "mimic-fn": "^1.0.0" }, @@ -3591,6 +3641,7 @@ "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", "license": "MIT", + "peer": true, "dependencies": { "chalk": "^2.4.2", "cli-cursor": "^2.1.0", @@ -3608,6 +3659,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "license": "MIT", + "peer": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -3622,6 +3674,7 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", "license": "MIT", + "peer": true, "dependencies": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" @@ -3635,6 +3688,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "license": "MIT", + "peer": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -3647,6 +3701,7 @@ "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.2.3-canary-20250306-d9d3e02.tgz", "integrity": "sha512-2ImG5M36tAuKH5YQe7bvtzjQdkCakGmjsyj62RCWwrQ4TsZW7Z0DUHrjMl3GLt7hoy/tzYFGNWLQ7/sASDECyw==", "license": "MIT", + "peer": true, "dependencies": { "@xmldom/xmldom": "^0.8.8", "base64-js": "^1.2.3", @@ -3658,6 +3713,7 @@ "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-9.0.0-canary-20250306-d9d3e02.tgz", "integrity": "sha512-7K7NdT/t8GaYHC30EydZQV63jrFLSGYrCxtPIp9VHqjiqInXZlUOoe6x/TnCncWPTMOirXSW1S8OZw4t15gKAg==", "license": "MIT", + "peer": true, "dependencies": { "@expo/config": "11.0.0-canary-20250306-d9d3e02", "@expo/config-plugins": "9.1.0-canary-20250306-d9d3e02", @@ -3676,6 +3732,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -4743,7 +4800,6 @@ "integrity": "sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@octokit/auth-token": "^3.0.0", "@octokit/graphql": "^5.0.0", @@ -5212,6 +5268,7 @@ "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.78.0.tgz", "integrity": "sha512-+Sy9Uine0QAbQRxMl6kBlkzKW0qHQk8hghCoKswRWt1ZfxaMA3rezobD5mtSwt/Yhadds9cGbMFWfFJM3Tynsg==", "license": "MIT", + "peer": true, "dependencies": { "@babel/traverse": "^7.25.3", "@react-native/codegen": "0.78.0" @@ -5225,6 +5282,7 @@ "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.78.0.tgz", "integrity": "sha512-q44ZbR0JXdPvNrjNw75VmiVXXoJhZIx8dTUBVgnZx/UHBQuhPu0e8pAuo56E2mZVkF7FK0s087/Zji8n5OSxbQ==", "license": "MIT", + "peer": true, "dependencies": { "@babel/core": "^7.25.2", "@babel/plugin-proposal-export-default-from": "^7.24.7", @@ -5284,6 +5342,7 @@ "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.78.0.tgz", "integrity": "sha512-8iVT2VYhkalLFUWoQRGSluZZHEG93StfwQGwQ+wk1vOUlOfoT/Xqglt6DvGXIyM9gaMCr6fJBFQVrU+FrXEFYA==", "license": "MIT", + "peer": true, "dependencies": { "@babel/parser": "^7.25.3", "glob": "^7.1.1", @@ -5382,6 +5441,7 @@ "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.78.0.tgz", "integrity": "sha512-KQYD9QlxES/VdmXh9EEvtZCJK1KAemLlszQq4dpLU1stnue5N8dnCY6A7PpStMf5UtAMk7tiniQhaicw0uVHgQ==", "license": "BSD-3-Clause", + "peer": true, "engines": { "node": ">=18" } @@ -5391,6 +5451,7 @@ "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.78.0.tgz", "integrity": "sha512-zEafAZdOz4s37Jh5Xcv4hJE5qZ6uNxgrTLcpjDOJnQG6dO34/BoZeXvDrjomQFNn6ogdysR51mKJStaQ3ixp5A==", "license": "MIT", + "peer": true, "dependencies": { "@isaacs/ttlcache": "^1.4.1", "@react-native/debugger-frontend": "0.78.0", @@ -5414,6 +5475,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", + "peer": true, "dependencies": { "ms": "2.0.0" } @@ -5422,13 +5484,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@react-native/dev-middleware/node_modules/open": { "version": "7.4.2", "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "license": "MIT", + "peer": true, "dependencies": { "is-docker": "^2.0.0", "is-wsl": "^2.1.1" @@ -5508,7 +5572,6 @@ "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", "dev": true, "license": "BSD-2-Clause", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "7.18.0", "@typescript-eslint/types": "7.18.0", @@ -5878,7 +5941,8 @@ "version": "0.78.0", "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.78.0.tgz", "integrity": "sha512-FkeLvLLaMYlGsSntixTUvlNtc1OHij4TYRtymMNPWqBKFAMXJB/qe45VxXNzWP+jD0Ok6yXineQFtktKcHk9PA==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@react-native/typescript-config": { "version": "0.81.4", @@ -6474,7 +6538,6 @@ "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", "@typescript-eslint/scope-manager": "6.21.0", @@ -6511,7 +6574,6 @@ "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, "license": "BSD-2-Clause", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/types": "6.21.0", @@ -7095,7 +7157,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -7179,7 +7240,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -7617,6 +7677,7 @@ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.0.1" }, @@ -7996,6 +8057,7 @@ "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-13.0.0-canary-20250306-d9d3e02.tgz", "integrity": "sha512-65eIaxpY2EmsBIpCcF+ZvC9vWQn/1PML2tnGiB5dPSAmkmNlSPiC69WuD4pDEDX4L4Sy1pfEuuGPNEVixxGasQ==", "license": "MIT", + "peer": true, "dependencies": { "@babel/helper-module-imports": "^7.25.9", "@babel/plugin-proposal-decorators": "^7.12.9", @@ -8037,6 +8099,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -8445,7 +8508,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001688", "electron-to-chromium": "^1.5.73", @@ -9128,6 +9190,7 @@ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "license": "MIT", + "peer": true, "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", @@ -9806,7 +9869,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -10085,7 +10147,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -11893,7 +11954,6 @@ "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -12357,7 +12417,6 @@ "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.8", @@ -12593,7 +12652,6 @@ "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "aria-query": "^5.3.2", "array-includes": "^3.1.8", @@ -12686,7 +12744,6 @@ "integrity": "sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", @@ -12720,7 +12777,6 @@ "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10" }, @@ -13201,7 +13257,6 @@ "integrity": "sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -13291,6 +13346,7 @@ "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-12.0.0-canary-20250306-d9d3e02.tgz", "integrity": "sha512-gOXnvbC5cr8jVeicZ51BAWR/Lfm5W+qCP89Di2VTPCDpmfKoIm2sepxnNcSWp4BmhWAVjDPewUsJYTvc2RqgCQ==", "license": "MIT", + "peer": true, "dependencies": { "@expo/image-utils": "0.6.6-canary-20250306-d9d3e02", "expo-constants": "18.0.0-canary-20250306-d9d3e02" @@ -13306,6 +13362,7 @@ "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-18.0.0-canary-20250306-d9d3e02.tgz", "integrity": "sha512-bzreYC9p/m7ovgIWabGLYFjXwJgUVEnzNNCVuas62vMLaNulcGtpSKNjlleVMgHsgsbCqaDfFcYtRGWm1GPQlw==", "license": "MIT", + "peer": true, "dependencies": { "@expo/config": "11.0.0-canary-20250306-d9d3e02", "@expo/env": "1.0.1-canary-20250306-d9d3e02" @@ -13320,6 +13377,7 @@ "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-19.0.0-canary-20250306-d9d3e02.tgz", "integrity": "sha512-zP1ChBtf0z9UKqssxcYIKav3wv2h8vzUbdXA9GBfdKiLqkRfBb3HiG8B2IO8vVa6jv6bahbX1NernT2XAQ21lg==", "license": "MIT", + "peer": true, "dependencies": { "web-streams-polyfill": "^3.3.2" }, @@ -13333,6 +13391,7 @@ "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-14.0.0-canary-20250306-d9d3e02.tgz", "integrity": "sha512-8VXoNfJcNLxfsV9Fz+rDK6G0Ufdwwndif0JlKwZmCjlB0mnpnMQS/HX7MfmYu4J0JyX+uYKWHM6aFolx6/7XDw==", "license": "MIT", + "peer": true, "dependencies": { "fontfaceobserver": "^2.1.0" }, @@ -13346,6 +13405,7 @@ "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-15.0.0-canary-20250306-d9d3e02.tgz", "integrity": "sha512-MNaZlQaWoC9F8sHWUhu+EWkwraP16Ba8gGlEDMlhe9bPp3PCCveQyfwFHu57vlJPO2DQ6+kThPLz67SWe2qHjw==", "license": "MIT", + "peer": true, "peerDependencies": { "expo": "53.0.0-canary-20250306-d9d3e02", "react": "*" @@ -13356,6 +13416,7 @@ "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-3.0.0-canary-20250306-d9d3e02.tgz", "integrity": "sha512-ZXVNf+cz3uaazWK8agQc9TG6RfMdcbBRwMZB7Gr5GlxG/3Ss6+duIeR/Ilc5testMm0nH16WCLn0BH1yj2Zf0g==", "license": "MIT", + "peer": true, "dependencies": { "@expo/spawn-async": "^1.7.2", "chalk": "^4.1.0", @@ -13374,6 +13435,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "license": "MIT", + "peer": true, "engines": { "node": ">= 10" } @@ -13383,6 +13445,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "license": "ISC", + "peer": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -13403,6 +13466,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -13412,6 +13476,7 @@ "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-3.0.0-canary-20250306-d9d3e02.tgz", "integrity": "sha512-ArvZty2BYOTfxFqfjo49mpdiJNyn0G9cGSYOkoj/1cS03QHw6lFCKdTgf6I03JKHKpiGC5hPZe66PLW553V9mw==", "license": "MIT", + "peer": true, "dependencies": { "invariant": "^2.2.4" } @@ -13917,6 +13982,7 @@ "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", "license": "BSD-3-Clause", + "peer": true, "dependencies": { "fbjs": "^3.0.0" } @@ -14151,6 +14217,7 @@ "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.265.3.tgz", "integrity": "sha512-YH50TTYgnzDnuaZlAxLYQ0UZtXSbbizMO3OCpoY8obvLReJmvQ5UUW22efsC3SZJmze/tATfQ0PtkKul2XwWBw==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.4.0" } @@ -16388,6 +16455,7 @@ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "license": "MIT", + "peer": true, "dependencies": { "isobject": "^3.0.1" }, @@ -16678,6 +16746,7 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -17583,6 +17652,7 @@ "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-17.3.0.tgz", "integrity": "sha512-LjFrGOIORqXBU+jwfC9nbkjmQfFldtMIoS6d9z2LG/lkmyNXsJAySPT+2SWXJEoE68/bCWcxKpXH37npftgmow==", "license": "MIT", + "peer": true, "dependencies": { "@babel/core": "^7.24.7", "@babel/parser": "^7.24.7", @@ -17623,6 +17693,7 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "license": "ISC", + "peer": true, "engines": { "node": ">=14" }, @@ -17635,6 +17706,7 @@ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", "license": "MIT", + "peer": true, "engines": { "node": ">=14.14" } @@ -17644,6 +17716,7 @@ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "license": "ISC", + "peer": true, "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^4.0.1" @@ -19565,7 +19638,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -21305,7 +21377,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", @@ -21840,7 +21911,6 @@ "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "license": "MIT", - "peer": true, "bin": { "prettier": "bin-prettier.js" }, @@ -22314,7 +22384,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -22355,7 +22424,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.26.0" }, @@ -22374,7 +22442,6 @@ "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.81.4.tgz", "integrity": "sha512-bt5bz3A/+Cv46KcjV0VQa+fo7MKxs17RCcpzjftINlen4ZDUl0I6Ut+brQ2FToa5oD0IB0xvQHfmsg2EDqsZdQ==", "license": "MIT", - "peer": true, "dependencies": { "@jest/create-cache-key-function": "^29.7.0", "@react-native/assets-registry": "0.81.4", @@ -23199,22 +23266,6 @@ "react-native": "*" } }, - "node_modules/react-native-reanimated": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-4.1.3.tgz", - "integrity": "sha512-GP8wsi1u3nqvC1fMab/m8gfFwFyldawElCcUSBJQgfrXeLmsPPUOpDw44lbLeCpcwUuLa05WTVePdTEwCLTUZg==", - "license": "MIT", - "dependencies": { - "react-native-is-edge-to-edge": "^1.2.1", - "semver": "7.7.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0", - "react": "*", - "react-native": "*", - "react-native-worklets": ">=0.5.0" - } - }, "node_modules/react-native-web": { "version": "0.20.0", "resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.20.0.tgz", @@ -23252,7 +23303,6 @@ "resolved": "https://registry.npmjs.org/react-native-worklets/-/react-native-worklets-0.6.1.tgz", "integrity": "sha512-URca8l7c7Uog7gv4mcg9KILdJlnbvwdS5yfXQYf5TDkD2W1VY1sduEKrD+sA3lUPXH/TG1vmXAvNxCNwPMYgGg==", "license": "MIT", - "peer": true, "dependencies": { "@babel/plugin-transform-arrow-functions": "^7.0.0-0", "@babel/plugin-transform-class-properties": "^7.0.0-0", @@ -23554,6 +23604,7 @@ "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.11.tgz", "integrity": "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==", "license": "MIT", + "peer": true, "dependencies": { "ast-types": "^0.16.1", "esprima": "~4.0.0", @@ -23775,7 +23826,6 @@ "integrity": "sha512-lZwoGEnKYKwGnfxxlA7vtR7vvozPrOSsIgQaHO4bgQ5ARbG3IA6Dmo0IVusv6nR1KmnjH70QIeNAgsWs6Ji/tw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@iarna/toml": "2.2.5", "@octokit/rest": "19.0.11", @@ -25050,6 +25100,7 @@ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "license": "MIT", + "peer": true, "dependencies": { "kind-of": "^6.0.2" }, @@ -26352,7 +26403,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -26549,7 +26599,8 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/titleize": { "version": "3.0.0", @@ -26996,7 +27047,6 @@ "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "devOptional": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -27482,7 +27532,6 @@ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", "license": "MIT", - "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.6", @@ -27552,7 +27601,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -27671,7 +27719,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -27816,7 +27863,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -29153,7 +29199,6 @@ "version": "53.0.0-preview.5", "resolved": "https://registry.npmjs.org/expo/-/expo-53.0.0-preview.5.tgz", "integrity": "sha512-pQXfQ5ygluhixQ9Pl3FrYqEIcSr3IXE5kRTQVDKuU175WRdpHrsHnVzbLwSiNmzsT/l7uWFFG1rYr9ebhVKNgw==", - "peer": true, "dependencies": { "@babel/runtime": "^7.20.0", "@expo/cli": "0.24.0", @@ -29872,7 +29917,6 @@ "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.80.1.tgz", "integrity": "sha512-cIiJiPItdC2+Z9n30FmE2ef1y4522kgmOjMIoDtlD16jrOMNTUdB2u+CylLTy3REkWkWTS6w8Ub7skUthkeo5w==", "license": "MIT", - "peer": true, "dependencies": { "@jest/create-cache-key-function": "^29.7.0", "@react-native/assets-registry": "0.80.1", diff --git a/package.json b/package.json index 913f4d86..1573e4c3 100644 --- a/package.json +++ b/package.json @@ -102,21 +102,14 @@ "release-it": "^15.0.0", "turbo": "^1.10.7", "typescript": "^5.8.3", - "react-native-reanimated": "4.1.3", "react-native-worklets": "^0.6.1" }, "peerDependencies": { "expensify-common": ">=2.0.148", "react": "*", "react-native": "*", - "react-native-reanimated": ">=3.17.0", "react-native-worklets": ">=0.6.0" }, - "peerDependenciesMeta": { - "react-native-worklets": { - "optional": true - } - }, "overrides": { "@expo/webpack-config": { "expo": "53.0.0-preview.5" diff --git a/src/MarkdownTextInput.tsx b/src/MarkdownTextInput.tsx index 84f9684c..935b0554 100644 --- a/src/MarkdownTextInput.tsx +++ b/src/MarkdownTextInput.tsx @@ -1,19 +1,20 @@ import {StyleSheet, TextInput, processColor} from 'react-native'; import React from 'react'; import type {TextInputProps} from 'react-native'; -import {createWorkletRuntime, makeShareableCloneRecursive} from 'react-native-reanimated'; +import {createSerializable, createWorkletRuntime} from 'react-native-worklets'; +import type {SerializableRef, WorkletFunction, WorkletRuntime} from 'react-native-worklets'; import MarkdownTextInputDecoratorViewNativeComponent from './MarkdownTextInputDecoratorViewNativeComponent'; import type {MarkdownStyle} from './MarkdownTextInputDecoratorViewNativeComponent'; import NativeLiveMarkdownModule from './NativeLiveMarkdownModule'; import {mergeMarkdownStyleWithDefault} from './styleUtils'; import type {PartialMarkdownStyle} from './styleUtils'; -import type {InlineImagesInputProps, MarkdownRange, ShareableRef, WorkletFunction, WorkletRuntime} from './commonTypes'; +import type {InlineImagesInputProps, MarkdownRange} from './commonTypes'; declare global { // eslint-disable-next-line no-var var jsi_setMarkdownRuntime: (runtime: WorkletRuntime) => void; // eslint-disable-next-line no-var - var jsi_registerMarkdownWorklet: (shareableWorklet: ShareableRef>) => number; + var jsi_registerMarkdownWorklet: (shareableWorklet: SerializableRef>) => number; // eslint-disable-next-line no-var var jsi_unregisterMarkdownWorklet: (parserId: number) => void; } @@ -40,15 +41,15 @@ function initializeLiveMarkdownIfNeeded() { if (!global.jsi_setMarkdownRuntime) { throw new Error('[react-native-live-markdown] global.jsi_setMarkdownRuntime is not available'); } - workletRuntime = createWorkletRuntime('LiveMarkdownRuntime'); + workletRuntime = createWorkletRuntime({name: 'LiveMarkdownRuntime'}); global.jsi_setMarkdownRuntime(workletRuntime); initialized = true; } function registerParser(parser: (input: string) => MarkdownRange[]): number { initializeLiveMarkdownIfNeeded(); - const shareableWorklet = makeShareableCloneRecursive(parser) as unknown as ShareableRef>; - const parserId = global.jsi_registerMarkdownWorklet(shareableWorklet); + const serializableWorklet = createSerializable(parser as WorkletFunction<[string], MarkdownRange[]>); + const parserId = global.jsi_registerMarkdownWorklet(serializableWorklet); return parserId; } diff --git a/src/commonTypes.ts b/src/commonTypes.ts index c3016910..6e08c471 100644 --- a/src/commonTypes.ts +++ b/src/commonTypes.ts @@ -29,78 +29,4 @@ type InlineImagesInputProps = { imagePreviewAuthRequiredURLs?: string[]; }; -// Temporary types from `react-native-reanimated` and `react-native-worklets` -// TODO: remove once `react-native-reanimated` dependency is removed - -type WorkletStackDetails = [error: Error, lineOffset: number, columnOffset: number]; - -type WorkletClosure = Record; - -interface WorkletInitData { - code: string; - /** Only in dev builds. */ - location?: string; - /** Only in dev builds. */ - sourceMap?: string; -} - -interface WorkletProps { - __closure: WorkletClosure; - __workletHash: number; - /** Only in Legacy Bundling. */ - __initData?: WorkletInitData; - /** Only for Handles. */ - __init?: () => unknown; - /** `__stackDetails` is removed after parsing. */ - __stackDetails?: WorkletStackDetails; - /** Only in dev builds. */ - __pluginVersion?: string; -} - -type WorkletFunctionWorklets = ((...args: TArgs) => TReturn) & WorkletProps; - -interface WorkletInitDataCommon { - code: string; -} - -type WorkletInitDataRelease = WorkletInitDataCommon; - -interface WorkletInitDataDev extends WorkletInitDataCommon { - location: string; - sourceMap: string; - version: string; -} - -interface WorkletBaseCommon { - __closure: WorkletClosure; - __workletHash: number; -} - -interface WorkletBaseRelease extends WorkletBaseCommon { - __initData: WorkletInitDataRelease; -} - -interface WorkletBaseDev extends WorkletBaseCommon { - __initData: WorkletInitDataDev; - /** `__stackDetails` is removed after parsing. */ - __stackDetails?: WorkletStackDetails; -} - -type WorkletFunctionDev = ((...args: Args) => ReturnValue) & WorkletBaseDev; - -type WorkletFunctionRelease = ((...args: Args) => ReturnValue) & WorkletBaseRelease; - -type WorkletFunctionReanimated = WorkletFunctionDev | WorkletFunctionRelease; - -type WorkletFunction = WorkletFunctionWorklets | WorkletFunctionReanimated; - -type ShareableRef = { - __hostObjectShareableJSRef: T; -}; - -type WorkletRuntime = { - __hostObjectWorkletRuntime: never; - readonly name: string; -}; - -export type {MarkdownType, MarkdownRange, InlineImagesInputProps, WorkletFunction, ShareableRef, WorkletRuntime}; +export type {MarkdownType, MarkdownRange, InlineImagesInputProps}; diff --git a/src/parseExpensiMark.ts b/src/parseExpensiMark.ts index 85185533..7a1745eb 100644 --- a/src/parseExpensiMark.ts +++ b/src/parseExpensiMark.ts @@ -4,8 +4,9 @@ import {Platform} from 'react-native'; import {ExpensiMark} from 'expensify-common'; import {unescapeText} from 'expensify-common/dist/utils'; import {decode} from 'html-entities'; -import type {MarkdownType, MarkdownRange, WorkletFunction} from './commonTypes'; +import type {WorkletFunction} from 'react-native-worklets'; import {groupRanges, sortRanges, excludeRangeTypesFromFormatting, getRangesToExcludeFormatting} from './rangeUtils'; +import type {MarkdownRange, MarkdownType} from './commonTypes'; function isWeb() { return Platform.OS === 'web';