diff --git a/.eslintignore b/.eslintignore index 75da15ae8..c0b6b5c6a 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,6 +1,7 @@ node_modules example example-new-architecture +benchmarks dist lib packages/core/android/build/reports/tests diff --git a/benchmarks/.bundle/config b/benchmarks/.bundle/config new file mode 100644 index 000000000..848943bb5 --- /dev/null +++ b/benchmarks/.bundle/config @@ -0,0 +1,2 @@ +BUNDLE_PATH: "vendor/bundle" +BUNDLE_FORCE_RUBY_PLATFORM: 1 diff --git a/benchmarks/.env.alternate b/benchmarks/.env.alternate new file mode 100644 index 000000000..2eefe9616 --- /dev/null +++ b/benchmarks/.env.alternate @@ -0,0 +1,7 @@ +DD_CLIENT_TOKEN="ALT_CLIENT_TOKEN" +DD_API_KEY="ALT_API_KEY" +DD_APP_ID="ALT_APP_ID" +DD_SITE="ALT_SITE" +DD_ENV="ALT_ENV" +BENCH_SCENARIO= +BENCH_RUN_TYPE= \ No newline at end of file diff --git a/benchmarks/.eslintrc.js b/benchmarks/.eslintrc.js new file mode 100644 index 000000000..187894b6a --- /dev/null +++ b/benchmarks/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: '@react-native', +}; diff --git a/benchmarks/.gitignore b/benchmarks/.gitignore new file mode 100644 index 000000000..de9995595 --- /dev/null +++ b/benchmarks/.gitignore @@ -0,0 +1,75 @@ +# OSX +# +.DS_Store + +# Xcode +# +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate +**/.xcode.env.local + +# Android/IntelliJ +# +build/ +.idea +.gradle +local.properties +*.iml +*.hprof +.cxx/ +*.keystore +!debug.keystore +.kotlin/ + +# node.js +# +node_modules/ +npm-debug.log +yarn-error.log + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/ + +**/fastlane/report.xml +**/fastlane/Preview.html +**/fastlane/screenshots +**/fastlane/test_output + +# Bundle artifact +*.jsbundle + +# Ruby / CocoaPods +**/Pods/ +/vendor/bundle/ + +# Temporary files created by Metro to check the health of the file watcher +.metro-health-check* + +# testing +/coverage + +# Yarn +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions diff --git a/benchmarks/.prettierrc.js b/benchmarks/.prettierrc.js new file mode 100644 index 000000000..2b540746a --- /dev/null +++ b/benchmarks/.prettierrc.js @@ -0,0 +1,7 @@ +module.exports = { + arrowParens: 'avoid', + bracketSameLine: true, + bracketSpacing: false, + singleQuote: true, + trailingComma: 'all', +}; diff --git a/benchmarks/.watchmanconfig b/benchmarks/.watchmanconfig new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/benchmarks/.watchmanconfig @@ -0,0 +1 @@ +{} diff --git a/benchmarks/Gemfile b/benchmarks/Gemfile new file mode 100644 index 000000000..03278dd5e --- /dev/null +++ b/benchmarks/Gemfile @@ -0,0 +1,10 @@ +source 'https://rubygems.org' + +# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version +ruby ">= 2.6.10" + +# Exclude problematic versions of cocoapods and activesupport that causes build failures. +gem 'cocoapods', '>= 1.13', '!= 1.15.0', '!= 1.15.1' +gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0' +gem 'xcodeproj', '< 1.26.0' +gem 'concurrent-ruby', '< 1.3.4' diff --git a/benchmarks/README.md b/benchmarks/README.md new file mode 100644 index 000000000..f96855363 --- /dev/null +++ b/benchmarks/README.md @@ -0,0 +1,96 @@ +# Benchmark runner app for Datadog React Native SDK + +## Build and run + +1. From the root benchmark folder, run `yarn install`. +2. From the iOS folder, run `pod install`. +3. From the root folder, run `yarn ios` or `yarn android`. + +## Enable new architcture + +### iOS + +``` +RCT_NEW_ARCH_ENABLED=1 pod install +``` + +### Android + +Set `newArchEnabled=true` in `benchmarks/android/gradle.properties`. + +## ENV config + +The .env config file contains configuration for the Datadog API, as well as a test scenario that you can launch when the app boots up. If it doesn't contain a test scenario, the app waits for a deeplink to trigger a test scenario instead. + + DD_CLIENT_TOKEN="CLIENT_TOKEN" + DD_API_KEY="API_KEY" + DD_APP_ID="APP_ID" + DD_SITE="SITE" + DD_ENV="ENV" + BENCH_SCENARIO="" + BENCH_RUN_TYPE="" + +## Changing ENV settings + +### Debug +``` + $ ENVFILE=.env.alternate yarn ios +``` +or: + +``` + $ ENVFILE=.env.alternate yarn android +``` + +### Release +On Android: +``` + $ ENVFILE=.env.alternate ./gradlew assembleRelease +``` + +On iOS: +``` + xcodebuild -scheme alternate +``` + +## Set test scenarios using deeplinks + +You can trigger test scenarios by running a deeplink with a specific set of parameters to the benchmark app. + +## Run a test scenario + +Launch a specific test scenario with a particular configuration: +- **Method**: `start` +- **Parameters**: + - **scenario**: name of the test as defined on Scenario enum in `types/testConfig.ts` + - **runType**: `instrumented|baseline|profiling` + +### iOS + +``` +xcrun simctl openurl booted "benchmark://start?scenario=navigation&runType=instrumented" +``` + +### Android + +``` +adb shell am start -W -a android.intent.action.VIEW -d 'benchmark://start?scenario=navigation\&runType=instrumented' com.benchmarkrunner +``` + +## Stop a test scenario + +Stops the scenario currently running. + +- **Method**: `stop` + +### iOS + +``` +xcrun simctl openurl booted "benchmark://stop" +``` + +### Android + +``` +adb shell am start -W -a android.intent.action.VIEW -d 'benchmark://stop' com.benchmarkrunner +``` \ No newline at end of file diff --git a/benchmarks/android/app/build.gradle b/benchmarks/android/app/build.gradle new file mode 100644 index 000000000..5ca2e62f6 --- /dev/null +++ b/benchmarks/android/app/build.gradle @@ -0,0 +1,133 @@ +apply plugin: "com.android.application" +apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle" +apply plugin: "org.jetbrains.kotlin.android" +apply plugin: 'com.facebook.react' + +def isNewArchitectureEnabled() { + return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true" +} + +/** + * This is the configuration block to customize your React Native Android app. + * By default you don't need to apply any configuration, just uncomment the lines you need. + */ +react { + /* Folders */ + // The root of your project, i.e. where "package.json" lives. Default is '../..' + // root = file("../../") + // The folder where the react-native NPM package is. Default is ../../node_modules/react-native + // reactNativeDir = file("../../node_modules/react-native") + // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen + // codegenDir = file("../../node_modules/@react-native/codegen") + // The cli.js file which is the React Native CLI entrypoint. Default is ../../node_modules/react-native/cli.js + // cliFile = file("../../node_modules/react-native/cli.js") + + /* Variants */ + // The list of variants to that are debuggable. For those we're going to + // skip the bundling of the JS bundle and the assets. By default is just 'debug'. + // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants. + // debuggableVariants = ["liteDebug", "prodDebug"] + + /* Bundling */ + // A list containing the node command and its flags. Default is just 'node'. + // nodeExecutableAndArgs = ["node"] + // + // The command to run when bundling. By default is 'bundle' + // bundleCommand = "ram-bundle" + // + // The path to the CLI configuration file. Default is empty. + // bundleConfig = file(../rn-cli.config.js) + // + // The name of the generated asset file containing your JS bundle + // bundleAssetName = "MyApplication.android.bundle" + // + // The entry file for bundle generation. Default is 'index.android.js' or 'index.js' + // entryFile = file("../js/MyApplication.android.js") + // + // A list of extra flags to pass to the 'bundle' commands. + // See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle + // extraPackagerArgs = [] + + /* Hermes Commands */ + // The hermes compiler command to run. By default it is 'hermesc' + // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc" + // + // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map" + // hermesFlags = ["-O", "-output-source-map"] + + /* Autolinking */ + autolinkLibrariesWithApp() +} + +/** + * Set this to true to Run Proguard on Release builds to minify the Java bytecode. + */ +def enableProguardInReleaseBuilds = false + +/** + * The preferred build flavor of JavaScriptCore (JSC) + * + * For example, to use the international variant, you can use: + * `def jscFlavor = io.github.react-native-community:jsc-android-intl:2026004.+` + * + * The international variant includes ICU i18n library and necessary data + * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that + * give correct results when using with locales other than en-US. Note that + * this variant is about 6MiB larger per architecture than default. + */ +def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+' + +android { + ndkVersion rootProject.ext.ndkVersion + buildToolsVersion rootProject.ext.buildToolsVersion + compileSdk rootProject.ext.compileSdkVersion + + namespace "com.benchmarkrunner" + defaultConfig { + applicationId "com.benchmarkrunner" + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + versionCode 1 + versionName "1.0" + buildConfigField("boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()) + } + signingConfigs { + debug { + storeFile file('debug.keystore') + storePassword 'android' + keyAlias 'androiddebugkey' + keyPassword 'android' + } + } + buildTypes { + debug { + signingConfig signingConfigs.debug + } + release { + // Caution! In production, you need to generate your own keystore file. + // see https://reactnative.dev/docs/signed-apk-android. + signingConfig signingConfigs.debug + minifyEnabled enableProguardInReleaseBuilds + proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" + } + } +} + +repositories { + +} + +dependencies { + // The version of react-native is set by the React Native Gradle Plugin + implementation("com.facebook.react:react-android") + + if (hermesEnabled.toBoolean()) { + implementation("com.facebook.react:hermes-android") + } else { + implementation jscFlavor + } + + // Benchmark tools from dd-sdk-android are used for vitals recording + // Remember to bump thid alongside the main dd-sdk-android dependencies + implementation("com.datadoghq:benchmark:2.21.0") +} diff --git a/benchmarks/android/app/debug.keystore b/benchmarks/android/app/debug.keystore new file mode 100644 index 000000000..364e105ed Binary files /dev/null and b/benchmarks/android/app/debug.keystore differ diff --git a/benchmarks/android/app/proguard-rules.pro b/benchmarks/android/app/proguard-rules.pro new file mode 100644 index 000000000..0d1bfd1c2 --- /dev/null +++ b/benchmarks/android/app/proguard-rules.pro @@ -0,0 +1,15 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# From react-native-config: +# Proguard may rename the BuildConfig Java class in the minification process +# and prevent React Native Config from referencing it +-keep class com.benchmarkrunner.BuildConfig { *; } \ No newline at end of file diff --git a/benchmarks/android/app/src/debug/AndroidManifest.xml b/benchmarks/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 000000000..eb98c01af --- /dev/null +++ b/benchmarks/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/benchmarks/android/app/src/main/AndroidManifest.xml b/benchmarks/android/app/src/main/AndroidManifest.xml new file mode 100644 index 000000000..eaa5b4df0 --- /dev/null +++ b/benchmarks/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + diff --git a/benchmarks/android/app/src/main/java/com/benchmarkrunner/MainActivity.kt b/benchmarks/android/app/src/main/java/com/benchmarkrunner/MainActivity.kt new file mode 100644 index 000000000..ea53f9039 --- /dev/null +++ b/benchmarks/android/app/src/main/java/com/benchmarkrunner/MainActivity.kt @@ -0,0 +1,27 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.benchmarkrunner + +import com.facebook.react.ReactActivity +import com.facebook.react.ReactActivityDelegate +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled +import com.facebook.react.defaults.DefaultReactActivityDelegate + +class MainActivity : ReactActivity() { + /** + * Returns the name of the main component registered from JavaScript. This is used to schedule + * rendering of the component. + */ + override fun getMainComponentName(): String = "BenchmarkRunner" + + /** + * Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate] + * which allows you to enable New Architecture with a single boolean flags [fabricEnabled] + */ + override fun createReactActivityDelegate(): ReactActivityDelegate = + DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled) +} diff --git a/benchmarks/android/app/src/main/java/com/benchmarkrunner/MainApplication.kt b/benchmarks/android/app/src/main/java/com/benchmarkrunner/MainApplication.kt new file mode 100644 index 000000000..84563b3d8 --- /dev/null +++ b/benchmarks/android/app/src/main/java/com/benchmarkrunner/MainApplication.kt @@ -0,0 +1,51 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.benchmarkrunner + +import android.app.Application +import com.facebook.react.PackageList +import com.facebook.react.ReactApplication +import com.facebook.react.ReactHost +import com.facebook.react.ReactNativeHost +import com.facebook.react.ReactPackage +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load +import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost +import com.facebook.react.defaults.DefaultReactNativeHost +import com.facebook.react.soloader.OpenSourceMergedSoMapping +import com.facebook.soloader.SoLoader +import com.benchmarkvitals.BenchmarkVitalsPackage + +class MainApplication : Application(), ReactApplication { + override val reactNativeHost: ReactNativeHost = + object : DefaultReactNativeHost(this) { + override fun getPackages(): List = + PackageList(this).packages.apply { + // Packages that cannot be autolinked yet can be added manually here, for example: + // add(MyReactNativePackage()) + add(BenchmarkVitalsPackage()) + } + + override fun getJSMainModuleName(): String = "index" + + override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG + + override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED + override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED + } + + override val reactHost: ReactHost + get() = getDefaultReactHost(applicationContext, reactNativeHost) + + override fun onCreate() { + super.onCreate() + SoLoader.init(this, OpenSourceMergedSoMapping) + if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { + // If you opted-in for the New Architecture, we load the native entry point for this app. + load() + } + } +} diff --git a/benchmarks/android/app/src/main/java/com/benchmarkvitals/BenchmarkVitalsModule.kt b/benchmarks/android/app/src/main/java/com/benchmarkvitals/BenchmarkVitalsModule.kt new file mode 100644 index 000000000..1ccd2ad55 --- /dev/null +++ b/benchmarks/android/app/src/main/java/com/benchmarkvitals/BenchmarkVitalsModule.kt @@ -0,0 +1,38 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.benchmarkvitals + +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.Promise +import com.facebook.react.bridge.ReactMethod +import com.facebook.react.module.annotations.ReactModule +import com.facebook.react.turbomodule.core.interfaces.TurboModule +import com.facebook.react.bridge.ReactContextBaseJavaModule +import com.facebook.react.bridge.ReadableMap + +@ReactModule(name = BenchmarkVitalsModule.NAME) +class BenchmarkVitalsModule( + reactContext: ReactApplicationContext +) : ReactContextBaseJavaModule(reactContext), TurboModule { + companion object { + const val NAME = "BenchmarkVitals" + } + + private val impl = BenchmarkVitalsModuleImpl(reactContext) + + override fun getName(): String = NAME + + @ReactMethod + fun startCollectingVitals(config: ReadableMap, promise: Promise) { + impl.startCollectingVitals(config, promise) + } + + @ReactMethod + fun stopCollectingVitals(promise: Promise) { + impl.stopCollectingVitals(promise) + } +} diff --git a/benchmarks/android/app/src/main/java/com/benchmarkvitals/BenchmarkVitalsModuleImpl.kt b/benchmarks/android/app/src/main/java/com/benchmarkvitals/BenchmarkVitalsModuleImpl.kt new file mode 100644 index 000000000..81ff632e2 --- /dev/null +++ b/benchmarks/android/app/src/main/java/com/benchmarkvitals/BenchmarkVitalsModuleImpl.kt @@ -0,0 +1,46 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.benchmarkvitals + +import android.content.Context +import com.benchmarkrunner.BuildConfig +import com.facebook.react.bridge.Promise +import com.facebook.react.bridge.ReadableMap +import com.datadog.benchmark.DatadogVitalsMeter +import com.datadog.benchmark.DatadogExporterConfiguration + +private const val METER_INTERVAL_IN_SECONDS = 10L +private const val BENCHMARK_APPLICATION_NAME = "Benchmark RN - Android Application" + +class BenchmarkVitalsModuleImpl(private val context: Context) { + internal lateinit var vitalsMeter: DatadogVitalsMeter + + fun startCollectingVitals(config: ReadableMap, promise: Promise) { + val runType = config.getString("runType") ?: "" + val scenario = config.getString("scenario") ?: "" + val apiKey = config.getString("apiKey") ?: "" + + val exporterConfig = DatadogExporterConfiguration.Builder(apiKey) + .setApplicationId(BuildConfig.APPLICATION_ID) + .setApplicationName(BENCHMARK_APPLICATION_NAME) + .setRun(runType) + .setScenario(scenario) + .setApplicationVersion(BuildConfig.VERSION_NAME) + .setIntervalInSeconds(METER_INTERVAL_IN_SECONDS) + .build() + + vitalsMeter = DatadogVitalsMeter.create(exporterConfig) + vitalsMeter.startMeasuring() + + promise.resolve(true) + } + + fun stopCollectingVitals(promise: Promise) { + vitalsMeter.stopMeasuring() + promise.resolve(true) + } +} diff --git a/benchmarks/android/app/src/main/java/com/benchmarkvitals/BenchmarkVitalsPackage.kt b/benchmarks/android/app/src/main/java/com/benchmarkvitals/BenchmarkVitalsPackage.kt new file mode 100644 index 000000000..53631cbf3 --- /dev/null +++ b/benchmarks/android/app/src/main/java/com/benchmarkvitals/BenchmarkVitalsPackage.kt @@ -0,0 +1,24 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.benchmarkvitals + +import com.facebook.react.ReactPackage +import com.facebook.react.bridge.NativeModule +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.uimanager.ViewManager + +class BenchmarkVitalsPackage : ReactPackage { + override fun createNativeModules( + reactContext: ReactApplicationContext + ): List { + return listOf(BenchmarkVitalsModule(reactContext)) + } + + override fun createViewManagers( + reactContext: ReactApplicationContext + ): List> = emptyList() +} diff --git a/benchmarks/android/app/src/main/res/drawable/rn_edit_text_material.xml b/benchmarks/android/app/src/main/res/drawable/rn_edit_text_material.xml new file mode 100644 index 000000000..5c25e728e --- /dev/null +++ b/benchmarks/android/app/src/main/res/drawable/rn_edit_text_material.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + diff --git a/benchmarks/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/benchmarks/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..a2f590828 Binary files /dev/null and b/benchmarks/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/benchmarks/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/benchmarks/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 000000000..1b5239980 Binary files /dev/null and b/benchmarks/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/benchmarks/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/benchmarks/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..ff10afd6e Binary files /dev/null and b/benchmarks/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/benchmarks/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/benchmarks/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 000000000..115a4c768 Binary files /dev/null and b/benchmarks/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/benchmarks/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/benchmarks/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..dcd3cd808 Binary files /dev/null and b/benchmarks/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/benchmarks/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/benchmarks/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 000000000..459ca609d Binary files /dev/null and b/benchmarks/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/benchmarks/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/benchmarks/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..8ca12fe02 Binary files /dev/null and b/benchmarks/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/benchmarks/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/benchmarks/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 000000000..8e19b410a Binary files /dev/null and b/benchmarks/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/benchmarks/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/benchmarks/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..b824ebdd4 Binary files /dev/null and b/benchmarks/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/benchmarks/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/benchmarks/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 000000000..4c19a13c2 Binary files /dev/null and b/benchmarks/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/benchmarks/android/app/src/main/res/values/strings.xml b/benchmarks/android/app/src/main/res/values/strings.xml new file mode 100644 index 000000000..8aa7b5f60 --- /dev/null +++ b/benchmarks/android/app/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + BenchmarkRunner + diff --git a/benchmarks/android/app/src/main/res/values/styles.xml b/benchmarks/android/app/src/main/res/values/styles.xml new file mode 100644 index 000000000..7ba83a2ad --- /dev/null +++ b/benchmarks/android/app/src/main/res/values/styles.xml @@ -0,0 +1,9 @@ + + + + + + diff --git a/benchmarks/android/build.gradle b/benchmarks/android/build.gradle new file mode 100644 index 000000000..976694691 --- /dev/null +++ b/benchmarks/android/build.gradle @@ -0,0 +1,21 @@ +buildscript { + ext { + buildToolsVersion = "35.0.0" + minSdkVersion = 24 + compileSdkVersion = 35 + targetSdkVersion = 35 + ndkVersion = "27.1.12297006" + kotlinVersion = "2.0.21" + } + repositories { + google() + mavenCentral() + } + dependencies { + classpath("com.android.tools.build:gradle") + classpath("com.facebook.react:react-native-gradle-plugin") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") + } +} + +apply plugin: "com.facebook.react.rootproject" diff --git a/benchmarks/android/gradle.properties b/benchmarks/android/gradle.properties new file mode 100644 index 000000000..9fb15664b --- /dev/null +++ b/benchmarks/android/gradle.properties @@ -0,0 +1,39 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m +org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true + +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app's APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true + +# Use this property to specify which architecture you want to build. +# You can also override it from the CLI using +# ./gradlew -PreactNativeArchitectures=x86_64 +reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 + +# Use this property to enable support to the new architecture. +# This will allow you to use TurboModules and the Fabric render in +# your application. You should enable this flag either if you want +# to write custom TurboModules/Fabric components OR use libraries that +# are providing them. +newArchEnabled=false + +# Use this property to enable or disable the Hermes JS engine. +# If set to false, you will be using JSC instead. +hermesEnabled=true diff --git a/benchmarks/android/gradle/wrapper/gradle-wrapper.jar b/benchmarks/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 000000000..a4b76b953 Binary files /dev/null and b/benchmarks/android/gradle/wrapper/gradle-wrapper.jar differ diff --git a/benchmarks/android/gradle/wrapper/gradle-wrapper.properties b/benchmarks/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..e0fd02028 --- /dev/null +++ b/benchmarks/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/benchmarks/android/gradlew b/benchmarks/android/gradlew new file mode 100755 index 000000000..f3b75f3b0 --- /dev/null +++ b/benchmarks/android/gradlew @@ -0,0 +1,251 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/benchmarks/android/gradlew.bat b/benchmarks/android/gradlew.bat new file mode 100644 index 000000000..9b42019c7 --- /dev/null +++ b/benchmarks/android/gradlew.bat @@ -0,0 +1,94 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/benchmarks/android/settings.gradle b/benchmarks/android/settings.gradle new file mode 100644 index 000000000..aa89e3f77 --- /dev/null +++ b/benchmarks/android/settings.gradle @@ -0,0 +1,6 @@ +pluginManagement { includeBuild("../node_modules/@react-native/gradle-plugin") } +plugins { id("com.facebook.react.settings") } +extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> ex.autolinkLibrariesFromCommand() } +rootProject.name = 'BenchmarkRunner' +include ':app' +includeBuild('../node_modules/@react-native/gradle-plugin') diff --git a/benchmarks/app.json b/benchmarks/app.json new file mode 100644 index 000000000..0c24f2271 --- /dev/null +++ b/benchmarks/app.json @@ -0,0 +1,4 @@ +{ + "name": "BenchmarkRunner", + "displayName": "BenchmarkRunner" +} diff --git a/benchmarks/babel.config.js b/benchmarks/babel.config.js new file mode 100644 index 000000000..f7b3da3b3 --- /dev/null +++ b/benchmarks/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: ['module:@react-native/babel-preset'], +}; diff --git a/benchmarks/index.js b/benchmarks/index.js new file mode 100644 index 000000000..69303b34d --- /dev/null +++ b/benchmarks/index.js @@ -0,0 +1,9 @@ +/** + * @format + */ + +import {AppRegistry} from 'react-native'; +import App from './src/App'; +import {name as appName} from './app.json'; + +AppRegistry.registerComponent(appName, () => App); diff --git a/benchmarks/ios/.xcode.env b/benchmarks/ios/.xcode.env new file mode 100644 index 000000000..3d5782c71 --- /dev/null +++ b/benchmarks/ios/.xcode.env @@ -0,0 +1,11 @@ +# This `.xcode.env` file is versioned and is used to source the environment +# used when running script phases inside Xcode. +# To customize your local environment, you can create an `.xcode.env.local` +# file that is not versioned. + +# NODE_BINARY variable contains the PATH to the node executable. +# +# Customize the NODE_BINARY variable here. +# For example, to use nvm with brew, add the following line +# . "$(brew --prefix nvm)/nvm.sh" --no-use +export NODE_BINARY=$(command -v node) diff --git a/benchmarks/ios/BenchmarkRunner.xcodeproj/project.pbxproj b/benchmarks/ios/BenchmarkRunner.xcodeproj/project.pbxproj new file mode 100644 index 000000000..7303f927a --- /dev/null +++ b/benchmarks/ios/BenchmarkRunner.xcodeproj/project.pbxproj @@ -0,0 +1,717 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 60; + objects = { + +/* Begin PBXBuildFile section */ + 04066FD52DCCB9D200A9E317 /* DatadogBenchmarks in Frameworks */ = {isa = PBXBuildFile; productRef = 04066FD42DCCB9D200A9E317 /* DatadogBenchmarks */; }; + 041FA8A82DCCB7FA00BABC32 /* MetricExporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 041FA8A62DCCB7FA00BABC32 /* MetricExporter.swift */; }; + 041FA8A92DCCB7FA00BABC32 /* BenchmarkVitals.swift in Sources */ = {isa = PBXBuildFile; fileRef = 041FA8A52DCCB7FA00BABC32 /* BenchmarkVitals.swift */; }; + 041FA8AA2DCCB7FA00BABC32 /* Metrics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 041FA8A72DCCB7FA00BABC32 /* Metrics.swift */; }; + 041FA8AB2DCCB7FA00BABC32 /* BenchmarkMeter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 041FA8A22DCCB7FA00BABC32 /* BenchmarkMeter.swift */; }; + 041FA8AD2DCCB7FA00BABC32 /* BenchmarkProfiler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 041FA8A32DCCB7FA00BABC32 /* BenchmarkProfiler.swift */; }; + 041FA8AE2DCCB7FA00BABC32 /* Benchmarks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 041FA8A42DCCB7FA00BABC32 /* Benchmarks.swift */; }; + 043403232DCB9CB200803AF8 /* BenchMarkVitalsImplementation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 043403222DCB9CB200803AF8 /* BenchMarkVitalsImplementation.swift */; }; + 043403262DCB9CD700803AF8 /* BenchmarkVitals.mm in Sources */ = {isa = PBXBuildFile; fileRef = 043403242DCB9CD700803AF8 /* BenchmarkVitals.mm */; }; + 04576C962DCBAF900078DCAB /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 04576C952DCBAF900078DCAB /* main.m */; }; + 0C80B921A6F3F58F76C31292 /* libPods-BenchmarkRunner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-BenchmarkRunner.a */; }; + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; + 20A397FC280595A8A9851556 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */; }; + 761780ED2CA45674006654EE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761780EC2CA45674006654EE /* AppDelegate.swift */; }; + 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 041FA8A12DCCB7FA00BABC32 /* Package.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Package.swift; sourceTree = ""; }; + 041FA8A22DCCB7FA00BABC32 /* BenchmarkMeter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BenchmarkMeter.swift; sourceTree = ""; }; + 041FA8A32DCCB7FA00BABC32 /* BenchmarkProfiler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BenchmarkProfiler.swift; sourceTree = ""; }; + 041FA8A42DCCB7FA00BABC32 /* Benchmarks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Benchmarks.swift; sourceTree = ""; }; + 041FA8A52DCCB7FA00BABC32 /* BenchmarkVitals.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BenchmarkVitals.swift; sourceTree = ""; }; + 041FA8A62DCCB7FA00BABC32 /* MetricExporter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetricExporter.swift; sourceTree = ""; }; + 041FA8A72DCCB7FA00BABC32 /* Metrics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Metrics.swift; sourceTree = ""; }; + 043403222DCB9CB200803AF8 /* BenchMarkVitalsImplementation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BenchMarkVitalsImplementation.swift; sourceTree = ""; }; + 043403242DCB9CD700803AF8 /* BenchmarkVitals.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = BenchmarkVitals.mm; sourceTree = ""; }; + 043403282DCBA1D100803AF8 /* BenchmarkVitals.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BenchmarkVitals.h; sourceTree = ""; }; + 04576C952DCBAF900078DCAB /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 13B07F961A680F5B00A75B9A /* BenchmarkRunner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BenchmarkRunner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = BenchmarkRunner/Images.xcassets; sourceTree = ""; }; + 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = BenchmarkRunner/Info.plist; sourceTree = ""; }; + 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = PrivacyInfo.xcprivacy; path = BenchmarkRunner/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 3B4392A12AC88292D35C810B /* Pods-BenchmarkRunner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BenchmarkRunner.debug.xcconfig"; path = "Target Support Files/Pods-BenchmarkRunner/Pods-BenchmarkRunner.debug.xcconfig"; sourceTree = ""; }; + 5709B34CF0A7D63546082F79 /* Pods-BenchmarkRunner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BenchmarkRunner.release.xcconfig"; path = "Target Support Files/Pods-BenchmarkRunner/Pods-BenchmarkRunner.release.xcconfig"; sourceTree = ""; }; + 5DCACB8F33CDC322A6C60F78 /* libPods-BenchmarkRunner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-BenchmarkRunner.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 761780EC2CA45674006654EE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = BenchmarkRunner/AppDelegate.swift; sourceTree = ""; }; + 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = BenchmarkRunner/LaunchScreen.storyboard; sourceTree = ""; }; + ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 0C80B921A6F3F58F76C31292 /* libPods-BenchmarkRunner.a in Frameworks */, + 04066FD52DCCB9D200A9E317 /* DatadogBenchmarks in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 04066FD22DCCB97400A9E317 /* Sources */ = { + isa = PBXGroup; + children = ( + 041FA8A42DCCB7FA00BABC32 /* Benchmarks.swift */, + 041FA8A62DCCB7FA00BABC32 /* MetricExporter.swift */, + 041FA8A72DCCB7FA00BABC32 /* Metrics.swift */, + ); + path = Sources; + sourceTree = ""; + }; + 041FA8A02DCCB7EA00BABC32 /* Vitals */ = { + isa = PBXGroup; + children = ( + 041FA8A12DCCB7FA00BABC32 /* Package.swift */, + 041FA8A52DCCB7FA00BABC32 /* BenchmarkVitals.swift */, + 041FA8A22DCCB7FA00BABC32 /* BenchmarkMeter.swift */, + 041FA8A32DCCB7FA00BABC32 /* BenchmarkProfiler.swift */, + 04066FD22DCCB97400A9E317 /* Sources */, + ); + path = Vitals; + sourceTree = ""; + }; + 0434031E2DCB70D200803AF8 /* BenchmarkVitals */ = { + isa = PBXGroup; + children = ( + 043403282DCBA1D100803AF8 /* BenchmarkVitals.h */, + 043403242DCB9CD700803AF8 /* BenchmarkVitals.mm */, + 043403222DCB9CB200803AF8 /* BenchMarkVitalsImplementation.swift */, + 041FA8A02DCCB7EA00BABC32 /* Vitals */, + ); + path = BenchmarkVitals; + sourceTree = ""; + }; + 13B07FAE1A68108700A75B9A /* BenchmarkRunner */ = { + isa = PBXGroup; + children = ( + 04576C952DCBAF900078DCAB /* main.m */, + 761780EC2CA45674006654EE /* AppDelegate.swift */, + 13B07FB61A68108700A75B9A /* Info.plist */, + 13B07FB51A68108700A75B9A /* Images.xcassets */, + 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */, + 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */, + ); + name = BenchmarkRunner; + sourceTree = ""; + }; + 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { + isa = PBXGroup; + children = ( + ED297162215061F000B7C4FE /* JavaScriptCore.framework */, + 5DCACB8F33CDC322A6C60F78 /* libPods-BenchmarkRunner.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + 832341AE1AAA6A7D00B99B32 /* Libraries */ = { + isa = PBXGroup; + children = ( + ); + name = Libraries; + sourceTree = ""; + }; + 83CBB9F61A601CBA00E9B192 = { + isa = PBXGroup; + children = ( + 0434031E2DCB70D200803AF8 /* BenchmarkVitals */, + 13B07FAE1A68108700A75B9A /* BenchmarkRunner */, + 832341AE1AAA6A7D00B99B32 /* Libraries */, + 83CBBA001A601CBA00E9B192 /* Products */, + 2D16E6871FA4F8E400B85C8A /* Frameworks */, + BBD78D7AC51CEA395F1C20DB /* Pods */, + ); + indentWidth = 2; + sourceTree = ""; + tabWidth = 2; + usesTabs = 0; + }; + 83CBBA001A601CBA00E9B192 /* Products */ = { + isa = PBXGroup; + children = ( + 13B07F961A680F5B00A75B9A /* BenchmarkRunner.app */, + ); + name = Products; + sourceTree = ""; + }; + BBD78D7AC51CEA395F1C20DB /* Pods */ = { + isa = PBXGroup; + children = ( + 3B4392A12AC88292D35C810B /* Pods-BenchmarkRunner.debug.xcconfig */, + 5709B34CF0A7D63546082F79 /* Pods-BenchmarkRunner.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 13B07F861A680F5B00A75B9A /* BenchmarkRunner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "BenchmarkRunner" */; + buildPhases = ( + C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */, + 13B07F871A680F5B00A75B9A /* Sources */, + 13B07F8C1A680F5B00A75B9A /* Frameworks */, + 13B07F8E1A680F5B00A75B9A /* Resources */, + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, + 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */, + E235C05ADACE081382539298 /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = BenchmarkRunner; + productName = BenchmarkRunner; + productReference = 13B07F961A680F5B00A75B9A /* BenchmarkRunner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 83CBB9F71A601CBA00E9B192 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1210; + TargetAttributes = { + 13B07F861A680F5B00A75B9A = { + LastSwiftMigration = 1620; + }; + }; + }; + buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "BenchmarkRunner" */; + compatibilityVersion = "Xcode 12.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 83CBB9F61A601CBA00E9B192; + packageReferences = ( + 04066FD32DCCB9D200A9E317 /* XCLocalSwiftPackageReference "Vitals" */, + ); + productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 13B07F861A680F5B00A75B9A /* BenchmarkRunner */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 13B07F8E1A680F5B00A75B9A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */, + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, + 20A397FC280595A8A9851556 /* PrivacyInfo.xcprivacy in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(SRCROOT)/.xcode.env.local", + "$(SRCROOT)/.xcode.env", + ); + name = "Bundle React Native code and images"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "set -e\n\nWITH_ENVIRONMENT=\"$REACT_NATIVE_PATH/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"$REACT_NATIVE_PATH/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n"; + }; + 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-BenchmarkRunner/Pods-BenchmarkRunner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-BenchmarkRunner/Pods-BenchmarkRunner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-BenchmarkRunner/Pods-BenchmarkRunner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-BenchmarkRunner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-BenchmarkRunner/Pods-BenchmarkRunner-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-BenchmarkRunner/Pods-BenchmarkRunner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-BenchmarkRunner/Pods-BenchmarkRunner-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 13B07F871A680F5B00A75B9A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 041FA8A82DCCB7FA00BABC32 /* MetricExporter.swift in Sources */, + 041FA8A92DCCB7FA00BABC32 /* BenchmarkVitals.swift in Sources */, + 041FA8AA2DCCB7FA00BABC32 /* Metrics.swift in Sources */, + 041FA8AB2DCCB7FA00BABC32 /* BenchmarkMeter.swift in Sources */, + 041FA8AD2DCCB7FA00BABC32 /* BenchmarkProfiler.swift in Sources */, + 041FA8AE2DCCB7FA00BABC32 /* Benchmarks.swift in Sources */, + 043403262DCB9CD700803AF8 /* BenchmarkVitals.mm in Sources */, + 043403232DCB9CB200803AF8 /* BenchMarkVitalsImplementation.swift in Sources */, + 04576C962DCBAF900078DCAB /* main.m in Sources */, + 761780ED2CA45674006654EE /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 13B07F941A680F5B00A75B9A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-BenchmarkRunner.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + ENABLE_BITCODE = NO; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "\"${PODS_ROOT}/Headers/Public\"", + "\"${PODS_ROOT}/Headers/Public/DatadogCore\"", + "\"${PODS_ROOT}/Headers/Public/DatadogSDKReactNative\"", + "\"${PODS_ROOT}/Headers/Public/DoubleConversion\"", + "\"${PODS_ROOT}/Headers/Public/FBLazyVector\"", + "\"${PODS_ROOT}/Headers/Public/RCT-Folly\"", + "\"${PODS_ROOT}/Headers/Public/RCTDeprecation\"", + "\"${PODS_ROOT}/Headers/Public/RCTRequired\"", + "\"${PODS_ROOT}/Headers/Public/RCTTypeSafety\"", + "\"${PODS_ROOT}/Headers/Public/RNScreens\"", + "\"${PODS_ROOT}/Headers/Public/React-Core\"", + "\"${PODS_ROOT}/Headers/Public/React-Fabric\"", + "\"${PODS_ROOT}/Headers/Public/React-FabricComponents\"", + "\"${PODS_ROOT}/Headers/Public/React-FabricImage\"", + "\"${PODS_ROOT}/Headers/Public/React-ImageManager\"", + "\"${PODS_ROOT}/Headers/Public/React-Mapbuffer\"", + "\"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\"", + "\"${PODS_ROOT}/Headers/Public/React-RCTAnimation\"", + "\"${PODS_ROOT}/Headers/Public/React-RCTAppDelegate\"", + "\"${PODS_ROOT}/Headers/Public/React-RCTBlob\"", + "\"${PODS_ROOT}/Headers/Public/React-RCTFBReactNativeSpec\"", + "\"${PODS_ROOT}/Headers/Public/React-RCTFabric\"", + "\"${PODS_ROOT}/Headers/Public/React-RCTText\"", + "\"${PODS_ROOT}/Headers/Public/React-RuntimeApple\"", + "\"${PODS_ROOT}/Headers/Public/React-RuntimeCore\"", + "\"${PODS_ROOT}/Headers/Public/React-RuntimeHermes\"", + "\"${PODS_ROOT}/Headers/Public/React-callinvoker\"", + "\"${PODS_ROOT}/Headers/Public/React-cxxreact\"", + "\"${PODS_ROOT}/Headers/Public/React-debug\"", + "\"${PODS_ROOT}/Headers/Public/React-defaultsnativemodule\"", + "\"${PODS_ROOT}/Headers/Public/React-domnativemodule\"", + "\"${PODS_ROOT}/Headers/Public/React-featureflags\"", + "\"${PODS_ROOT}/Headers/Public/React-featureflagsnativemodule\"", + "\"${PODS_ROOT}/Headers/Public/React-graphics\"", + "\"${PODS_ROOT}/Headers/Public/React-hermes\"", + "\"${PODS_ROOT}/Headers/Public/React-idlecallbacksnativemodule\"", + "\"${PODS_ROOT}/Headers/Public/React-jserrorhandler\"", + "\"${PODS_ROOT}/Headers/Public/React-jsi\"", + "\"${PODS_ROOT}/Headers/Public/React-jsiexecutor\"", + "\"${PODS_ROOT}/Headers/Public/React-jsinspector\"", + "\"${PODS_ROOT}/Headers/Public/React-jsinspectortracing\"", + "\"${PODS_ROOT}/Headers/Public/React-logger\"", + "\"${PODS_ROOT}/Headers/Public/React-microtasksnativemodule\"", + "\"${PODS_ROOT}/Headers/Public/React-perflogger\"", + "\"${PODS_ROOT}/Headers/Public/React-performancetimeline\"", + "\"${PODS_ROOT}/Headers/Public/React-rendererconsistency\"", + "\"${PODS_ROOT}/Headers/Public/React-rendererdebug\"", + "\"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\"", + "\"${PODS_ROOT}/Headers/Public/React-runtimescheduler\"", + "\"${PODS_ROOT}/Headers/Public/React-timing\"", + "\"${PODS_ROOT}/Headers/Public/React-utils\"", + "\"${PODS_ROOT}/Headers/Public/ReactAppDependencyProvider\"", + "\"${PODS_ROOT}/Headers/Public/ReactCodegen\"", + "\"${PODS_ROOT}/Headers/Public/ReactCommon\"", + "\"${PODS_ROOT}/Headers/Public/SocketRocket\"", + "\"${PODS_ROOT}/Headers/Public/Yoga\"", + "\"${PODS_ROOT}/Headers/Public/boost\"", + "\"${PODS_ROOT}/Headers/Public/fast_float\"", + "\"${PODS_ROOT}/Headers/Public/fmt\"", + "\"${PODS_ROOT}/Headers/Public/glog\"", + "\"${PODS_ROOT}/Headers/Public/hermes-engine\"", + "\"${PODS_ROOT}/Headers/Public/react-native-config\"", + "\"${PODS_ROOT}/Headers/Public/react-native-safe-area-context\"", + "\"$(PODS_ROOT)/DoubleConversion\"", + "\"$(PODS_ROOT)/boost\"", + "\"$(PODS_ROOT)/Headers/Private/React-Core\"", + "\"$(PODS_ROOT)/Headers/Private/React-Core\"", + "\"$(PODS_ROOT)/Headers/Private/Yoga\"", + "$(PROJECT_DIR)/build/generated/ios/**", + ); + INFOPLIST_FILE = BenchmarkRunner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = BenchmarkRunner; + SWIFT_OBJC_BRIDGING_HEADER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 13B07F951A680F5B00A75B9A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-BenchmarkRunner.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "\"${PODS_ROOT}/Headers/Public\"", + "\"${PODS_ROOT}/Headers/Public/DatadogCore\"", + "\"${PODS_ROOT}/Headers/Public/DatadogSDKReactNative\"", + "\"${PODS_ROOT}/Headers/Public/DoubleConversion\"", + "\"${PODS_ROOT}/Headers/Public/FBLazyVector\"", + "\"${PODS_ROOT}/Headers/Public/RCT-Folly\"", + "\"${PODS_ROOT}/Headers/Public/RCTDeprecation\"", + "\"${PODS_ROOT}/Headers/Public/RCTRequired\"", + "\"${PODS_ROOT}/Headers/Public/RCTTypeSafety\"", + "\"${PODS_ROOT}/Headers/Public/RNScreens\"", + "\"${PODS_ROOT}/Headers/Public/React-Core\"", + "\"${PODS_ROOT}/Headers/Public/React-Fabric\"", + "\"${PODS_ROOT}/Headers/Public/React-FabricComponents\"", + "\"${PODS_ROOT}/Headers/Public/React-FabricImage\"", + "\"${PODS_ROOT}/Headers/Public/React-ImageManager\"", + "\"${PODS_ROOT}/Headers/Public/React-Mapbuffer\"", + "\"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\"", + "\"${PODS_ROOT}/Headers/Public/React-RCTAnimation\"", + "\"${PODS_ROOT}/Headers/Public/React-RCTAppDelegate\"", + "\"${PODS_ROOT}/Headers/Public/React-RCTBlob\"", + "\"${PODS_ROOT}/Headers/Public/React-RCTFBReactNativeSpec\"", + "\"${PODS_ROOT}/Headers/Public/React-RCTFabric\"", + "\"${PODS_ROOT}/Headers/Public/React-RCTText\"", + "\"${PODS_ROOT}/Headers/Public/React-RuntimeApple\"", + "\"${PODS_ROOT}/Headers/Public/React-RuntimeCore\"", + "\"${PODS_ROOT}/Headers/Public/React-RuntimeHermes\"", + "\"${PODS_ROOT}/Headers/Public/React-callinvoker\"", + "\"${PODS_ROOT}/Headers/Public/React-cxxreact\"", + "\"${PODS_ROOT}/Headers/Public/React-debug\"", + "\"${PODS_ROOT}/Headers/Public/React-defaultsnativemodule\"", + "\"${PODS_ROOT}/Headers/Public/React-domnativemodule\"", + "\"${PODS_ROOT}/Headers/Public/React-featureflags\"", + "\"${PODS_ROOT}/Headers/Public/React-featureflagsnativemodule\"", + "\"${PODS_ROOT}/Headers/Public/React-graphics\"", + "\"${PODS_ROOT}/Headers/Public/React-hermes\"", + "\"${PODS_ROOT}/Headers/Public/React-idlecallbacksnativemodule\"", + "\"${PODS_ROOT}/Headers/Public/React-jserrorhandler\"", + "\"${PODS_ROOT}/Headers/Public/React-jsi\"", + "\"${PODS_ROOT}/Headers/Public/React-jsiexecutor\"", + "\"${PODS_ROOT}/Headers/Public/React-jsinspector\"", + "\"${PODS_ROOT}/Headers/Public/React-jsinspectortracing\"", + "\"${PODS_ROOT}/Headers/Public/React-logger\"", + "\"${PODS_ROOT}/Headers/Public/React-microtasksnativemodule\"", + "\"${PODS_ROOT}/Headers/Public/React-perflogger\"", + "\"${PODS_ROOT}/Headers/Public/React-performancetimeline\"", + "\"${PODS_ROOT}/Headers/Public/React-rendererconsistency\"", + "\"${PODS_ROOT}/Headers/Public/React-rendererdebug\"", + "\"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\"", + "\"${PODS_ROOT}/Headers/Public/React-runtimescheduler\"", + "\"${PODS_ROOT}/Headers/Public/React-timing\"", + "\"${PODS_ROOT}/Headers/Public/React-utils\"", + "\"${PODS_ROOT}/Headers/Public/ReactAppDependencyProvider\"", + "\"${PODS_ROOT}/Headers/Public/ReactCodegen\"", + "\"${PODS_ROOT}/Headers/Public/ReactCommon\"", + "\"${PODS_ROOT}/Headers/Public/SocketRocket\"", + "\"${PODS_ROOT}/Headers/Public/Yoga\"", + "\"${PODS_ROOT}/Headers/Public/boost\"", + "\"${PODS_ROOT}/Headers/Public/fast_float\"", + "\"${PODS_ROOT}/Headers/Public/fmt\"", + "\"${PODS_ROOT}/Headers/Public/glog\"", + "\"${PODS_ROOT}/Headers/Public/hermes-engine\"", + "\"${PODS_ROOT}/Headers/Public/react-native-config\"", + "\"${PODS_ROOT}/Headers/Public/react-native-safe-area-context\"", + "\"$(PODS_ROOT)/DoubleConversion\"", + "\"$(PODS_ROOT)/boost\"", + "\"$(PODS_ROOT)/Headers/Private/React-Core\"", + "\"$(PODS_ROOT)/Headers/Private/React-Core\"", + "\"$(PODS_ROOT)/Headers/Private/Yoga\"", + "$(PROJECT_DIR)/build/generated/ios/**", + ); + INFOPLIST_FILE = BenchmarkRunner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = BenchmarkRunner; + SWIFT_OBJC_BRIDGING_HEADER = ""; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; + 83CBBA201A601CBA00E9B192 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD_RUNPATH_SEARCH_PATHS = ( + /usr/lib/swift, + "$(inherited)", + ); + LIBRARY_SEARCH_PATHS = ( + "\"$(SDKROOT)/usr/lib/swift\"", + "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", + "\"$(inherited)\"", + ); + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-DFOLLY_NO_CONFIG", + "-DFOLLY_MOBILE=1", + "-DFOLLY_USE_LIBCPP=1", + "-DFOLLY_CFG_NO_COROUTINES=1", + "-DFOLLY_HAVE_CLOCK_GETTIME=1", + ); + OTHER_LDFLAGS = ( + "$(inherited)", + " ", + ); + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; + USE_HERMES = true; + }; + name = Debug; + }; + 83CBBA211A601CBA00E9B192 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD_RUNPATH_SEARCH_PATHS = ( + /usr/lib/swift, + "$(inherited)", + ); + LIBRARY_SEARCH_PATHS = ( + "\"$(SDKROOT)/usr/lib/swift\"", + "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", + "\"$(inherited)\"", + ); + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-DFOLLY_NO_CONFIG", + "-DFOLLY_MOBILE=1", + "-DFOLLY_USE_LIBCPP=1", + "-DFOLLY_CFG_NO_COROUTINES=1", + "-DFOLLY_HAVE_CLOCK_GETTIME=1", + ); + OTHER_LDFLAGS = ( + "$(inherited)", + " ", + ); + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; + SDKROOT = iphoneos; + USE_HERMES = true; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "BenchmarkRunner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 13B07F941A680F5B00A75B9A /* Debug */, + 13B07F951A680F5B00A75B9A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "BenchmarkRunner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 83CBBA201A601CBA00E9B192 /* Debug */, + 83CBBA211A601CBA00E9B192 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + 04066FD32DCCB9D200A9E317 /* XCLocalSwiftPackageReference "Vitals" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = BenchmarkVitals/Vitals; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 04066FD42DCCB9D200A9E317 /* DatadogBenchmarks */ = { + isa = XCSwiftPackageProductDependency; + productName = DatadogBenchmarks; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; +} diff --git a/benchmarks/ios/BenchmarkRunner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/benchmarks/ios/BenchmarkRunner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 000000000..fefebe144 --- /dev/null +++ b/benchmarks/ios/BenchmarkRunner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,177 @@ +{ + "originHash" : "6080434f841a87c8e7ac3b20dc830d9b44f71d3a779bd2cd618583a99aad2fc9", + "pins" : [ + { + "identity" : "grpc-swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/grpc/grpc-swift.git", + "state" : { + "revision" : "8c5e99d0255c373e0330730d191a3423c57373fb", + "version" : "1.24.2" + } + }, + { + "identity" : "opentelemetry-swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/open-telemetry/opentelemetry-swift", + "state" : { + "revision" : "2ffffae2a027e2159dbf3fd53de1f25ba6d2d11d", + "version" : "1.13.0" + } + }, + { + "identity" : "opentracing-objc", + "kind" : "remoteSourceControl", + "location" : "https://github.com/undefinedlabs/opentracing-objc", + "state" : { + "revision" : "18c1a35ca966236cee0c5a714a51a73ff33384c1", + "version" : "0.5.2" + } + }, + { + "identity" : "swift-algorithms", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-algorithms.git", + "state" : { + "revision" : "87e50f483c54e6efd60e885f7f5aa946cee68023", + "version" : "1.2.1" + } + }, + { + "identity" : "swift-atomics", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-atomics.git", + "state" : { + "revision" : "cd142fd2f64be2100422d658e7411e39489da985", + "version" : "1.2.0" + } + }, + { + "identity" : "swift-collections", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-collections.git", + "state" : { + "revision" : "671108c96644956dddcd89dd59c203dcdb36cec7", + "version" : "1.1.4" + } + }, + { + "identity" : "swift-http-structured-headers", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-http-structured-headers.git", + "state" : { + "revision" : "f280fc7676b9940ff2c6598642751ea333c6544f", + "version" : "1.2.2" + } + }, + { + "identity" : "swift-http-types", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-http-types.git", + "state" : { + "revision" : "a0a57e949a8903563aba4615869310c0ebf14c03", + "version" : "1.4.0" + } + }, + { + "identity" : "swift-log", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-log.git", + "state" : { + "revision" : "3d8596ed08bd13520157f0355e35caed215ffbfa", + "version" : "1.6.3" + } + }, + { + "identity" : "swift-metrics", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-metrics.git", + "state" : { + "revision" : "4c83e1cdf4ba538ef6e43a9bbd0bcc33a0ca46e3", + "version" : "2.7.0" + } + }, + { + "identity" : "swift-nio", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-nio.git", + "state" : { + "revision" : "0f54d58bb5db9e064f332e8524150de379d1e51c", + "version" : "2.82.1" + } + }, + { + "identity" : "swift-nio-extras", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-nio-extras.git", + "state" : { + "revision" : "f1f6f772198bee35d99dd145f1513d8581a54f2c", + "version" : "1.26.0" + } + }, + { + "identity" : "swift-nio-http2", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-nio-http2.git", + "state" : { + "revision" : "4281466512f63d1bd530e33f4aa6993ee7864be0", + "version" : "1.36.0" + } + }, + { + "identity" : "swift-nio-ssl", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-nio-ssl.git", + "state" : { + "revision" : "6df102a39c8da5fdc2eae29a0f63546d660866fc", + "version" : "2.30.0" + } + }, + { + "identity" : "swift-nio-transport-services", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-nio-transport-services.git", + "state" : { + "revision" : "cd1e89816d345d2523b11c55654570acd5cd4c56", + "version" : "1.24.0" + } + }, + { + "identity" : "swift-numerics", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-numerics.git", + "state" : { + "revision" : "e0ec0f5f3af6f3e4d5e7a19d2af26b481acb6ba8", + "version" : "1.0.3" + } + }, + { + "identity" : "swift-protobuf", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-protobuf.git", + "state" : { + "revision" : "d72aed98f8253ec1aa9ea1141e28150f408cf17f", + "version" : "1.29.0" + } + }, + { + "identity" : "swift-system", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-system.git", + "state" : { + "revision" : "a34201439c74b53f0fd71ef11741af7e7caf01e1", + "version" : "1.4.2" + } + }, + { + "identity" : "thrift-swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/undefinedlabs/Thrift-Swift", + "state" : { + "revision" : "18ff09e6b30e589ed38f90a1af23e193b8ecef8e", + "version" : "1.1.2" + } + } + ], + "version" : 3 +} diff --git a/benchmarks/ios/BenchmarkRunner.xcodeproj/xcshareddata/xcschemes/BenchmarkRunner.xcscheme b/benchmarks/ios/BenchmarkRunner.xcodeproj/xcshareddata/xcschemes/BenchmarkRunner.xcscheme new file mode 100644 index 000000000..ae3025f76 --- /dev/null +++ b/benchmarks/ios/BenchmarkRunner.xcodeproj/xcshareddata/xcschemes/BenchmarkRunner.xcscheme @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/benchmarks/ios/BenchmarkRunner.xcworkspace/contents.xcworkspacedata b/benchmarks/ios/BenchmarkRunner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..1411fce3d --- /dev/null +++ b/benchmarks/ios/BenchmarkRunner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/benchmarks/ios/BenchmarkRunner.xcworkspace/xcshareddata/swiftpm/Package.resolved b/benchmarks/ios/BenchmarkRunner.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 000000000..fefebe144 --- /dev/null +++ b/benchmarks/ios/BenchmarkRunner.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,177 @@ +{ + "originHash" : "6080434f841a87c8e7ac3b20dc830d9b44f71d3a779bd2cd618583a99aad2fc9", + "pins" : [ + { + "identity" : "grpc-swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/grpc/grpc-swift.git", + "state" : { + "revision" : "8c5e99d0255c373e0330730d191a3423c57373fb", + "version" : "1.24.2" + } + }, + { + "identity" : "opentelemetry-swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/open-telemetry/opentelemetry-swift", + "state" : { + "revision" : "2ffffae2a027e2159dbf3fd53de1f25ba6d2d11d", + "version" : "1.13.0" + } + }, + { + "identity" : "opentracing-objc", + "kind" : "remoteSourceControl", + "location" : "https://github.com/undefinedlabs/opentracing-objc", + "state" : { + "revision" : "18c1a35ca966236cee0c5a714a51a73ff33384c1", + "version" : "0.5.2" + } + }, + { + "identity" : "swift-algorithms", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-algorithms.git", + "state" : { + "revision" : "87e50f483c54e6efd60e885f7f5aa946cee68023", + "version" : "1.2.1" + } + }, + { + "identity" : "swift-atomics", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-atomics.git", + "state" : { + "revision" : "cd142fd2f64be2100422d658e7411e39489da985", + "version" : "1.2.0" + } + }, + { + "identity" : "swift-collections", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-collections.git", + "state" : { + "revision" : "671108c96644956dddcd89dd59c203dcdb36cec7", + "version" : "1.1.4" + } + }, + { + "identity" : "swift-http-structured-headers", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-http-structured-headers.git", + "state" : { + "revision" : "f280fc7676b9940ff2c6598642751ea333c6544f", + "version" : "1.2.2" + } + }, + { + "identity" : "swift-http-types", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-http-types.git", + "state" : { + "revision" : "a0a57e949a8903563aba4615869310c0ebf14c03", + "version" : "1.4.0" + } + }, + { + "identity" : "swift-log", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-log.git", + "state" : { + "revision" : "3d8596ed08bd13520157f0355e35caed215ffbfa", + "version" : "1.6.3" + } + }, + { + "identity" : "swift-metrics", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-metrics.git", + "state" : { + "revision" : "4c83e1cdf4ba538ef6e43a9bbd0bcc33a0ca46e3", + "version" : "2.7.0" + } + }, + { + "identity" : "swift-nio", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-nio.git", + "state" : { + "revision" : "0f54d58bb5db9e064f332e8524150de379d1e51c", + "version" : "2.82.1" + } + }, + { + "identity" : "swift-nio-extras", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-nio-extras.git", + "state" : { + "revision" : "f1f6f772198bee35d99dd145f1513d8581a54f2c", + "version" : "1.26.0" + } + }, + { + "identity" : "swift-nio-http2", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-nio-http2.git", + "state" : { + "revision" : "4281466512f63d1bd530e33f4aa6993ee7864be0", + "version" : "1.36.0" + } + }, + { + "identity" : "swift-nio-ssl", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-nio-ssl.git", + "state" : { + "revision" : "6df102a39c8da5fdc2eae29a0f63546d660866fc", + "version" : "2.30.0" + } + }, + { + "identity" : "swift-nio-transport-services", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-nio-transport-services.git", + "state" : { + "revision" : "cd1e89816d345d2523b11c55654570acd5cd4c56", + "version" : "1.24.0" + } + }, + { + "identity" : "swift-numerics", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-numerics.git", + "state" : { + "revision" : "e0ec0f5f3af6f3e4d5e7a19d2af26b481acb6ba8", + "version" : "1.0.3" + } + }, + { + "identity" : "swift-protobuf", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-protobuf.git", + "state" : { + "revision" : "d72aed98f8253ec1aa9ea1141e28150f408cf17f", + "version" : "1.29.0" + } + }, + { + "identity" : "swift-system", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-system.git", + "state" : { + "revision" : "a34201439c74b53f0fd71ef11741af7e7caf01e1", + "version" : "1.4.2" + } + }, + { + "identity" : "thrift-swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/undefinedlabs/Thrift-Swift", + "state" : { + "revision" : "18ff09e6b30e589ed38f90a1af23e193b8ecef8e", + "version" : "1.1.2" + } + } + ], + "version" : 3 +} diff --git a/benchmarks/ios/BenchmarkRunner/AppDelegate.swift b/benchmarks/ios/BenchmarkRunner/AppDelegate.swift new file mode 100644 index 000000000..8ca5d31fd --- /dev/null +++ b/benchmarks/ios/BenchmarkRunner/AppDelegate.swift @@ -0,0 +1,45 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +import React +import ReactAppDependencyProvider +import React_RCTAppDelegate +import UIKit + +@objc(AppDelegate) +class AppDelegate: RCTAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil + ) -> Bool { + self.moduleName = "BenchmarkRunner" + self.dependencyProvider = RCTAppDependencyProvider() + + // You can add your custom initial props in the dictionary below. + // They will be passed down to the ViewController used by React Native. + self.initialProps = [:] + + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } + + override func sourceURL(for bridge: RCTBridge) -> URL? { + self.bundleURL() + } + + override func bundleURL() -> URL? { + #if DEBUG + RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index") + #else + Bundle.main.url(forResource: "main", withExtension: "jsbundle") + #endif + } + + override func application( + _ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:] + ) -> Bool { + return RCTLinkingManager.application(app, open: url, options: options) + } +} diff --git a/benchmarks/ios/BenchmarkRunner/BenchmarkVitalsModule.m b/benchmarks/ios/BenchmarkRunner/BenchmarkVitalsModule.m new file mode 100644 index 000000000..89fbb0ca1 --- /dev/null +++ b/benchmarks/ios/BenchmarkRunner/BenchmarkVitalsModule.m @@ -0,0 +1,12 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +#import + +@interface RCT_EXTERN_MODULE(BenchmarkVitalsModule, NSObject) +RCT_EXTERN_METHOD(startCollectingVitals:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) +RCT_EXTERN_METHOD(stopCollectingVitals:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) +@end diff --git a/benchmarks/ios/BenchmarkRunner/BenchmarkVitalsModule.swift b/benchmarks/ios/BenchmarkRunner/BenchmarkVitalsModule.swift new file mode 100644 index 000000000..5848fe310 --- /dev/null +++ b/benchmarks/ios/BenchmarkRunner/BenchmarkVitalsModule.swift @@ -0,0 +1,22 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +import Foundation +import React + +@objc(BenchmarkVitals) +class BenchmarkVitalsModule: NSObject { +// var vitals: Vitals? + + @objc + func startCollectingVitals(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) { + resolve(true) + } + + @objc func stopCollectingVitals(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) { + resolve(true) + } +} diff --git a/benchmarks/ios/BenchmarkRunner/Images.xcassets/AppIcon.appiconset/Contents.json b/benchmarks/ios/BenchmarkRunner/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..81213230d --- /dev/null +++ b/benchmarks/ios/BenchmarkRunner/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,53 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/benchmarks/ios/BenchmarkRunner/Images.xcassets/Contents.json b/benchmarks/ios/BenchmarkRunner/Images.xcassets/Contents.json new file mode 100644 index 000000000..2d92bd53f --- /dev/null +++ b/benchmarks/ios/BenchmarkRunner/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/benchmarks/ios/BenchmarkRunner/Info.plist b/benchmarks/ios/BenchmarkRunner/Info.plist new file mode 100644 index 000000000..112ea814a --- /dev/null +++ b/benchmarks/ios/BenchmarkRunner/Info.plist @@ -0,0 +1,61 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + BenchmarkRunner + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(MARKETING_VERSION) + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + CFBundleURLTypes + + + CFBundleURLSchemes + + benchmark + + + + LSRequiresIPhoneOS + + NSAppTransportSecurity + + + NSAllowsArbitraryLoads + + NSAllowsLocalNetworking + + + NSLocationWhenInUseUsageDescription + + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + arm64 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + + diff --git a/benchmarks/ios/BenchmarkRunner/LaunchScreen.storyboard b/benchmarks/ios/BenchmarkRunner/LaunchScreen.storyboard new file mode 100644 index 000000000..a3c16a42c --- /dev/null +++ b/benchmarks/ios/BenchmarkRunner/LaunchScreen.storyboard @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/benchmarks/ios/BenchmarkRunner/PrivacyInfo.xcprivacy b/benchmarks/ios/BenchmarkRunner/PrivacyInfo.xcprivacy new file mode 100644 index 000000000..bad327615 --- /dev/null +++ b/benchmarks/ios/BenchmarkRunner/PrivacyInfo.xcprivacy @@ -0,0 +1,37 @@ + + + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPITypeReasons + + CA92.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryFileTimestamp + NSPrivacyAccessedAPITypeReasons + + C617.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategorySystemBootTime + NSPrivacyAccessedAPITypeReasons + + 35F9.1 + + + + NSPrivacyCollectedDataTypes + + NSPrivacyTracking + + + diff --git a/benchmarks/ios/BenchmarkRunner/main.m b/benchmarks/ios/BenchmarkRunner/main.m new file mode 100644 index 000000000..f3348bc1f --- /dev/null +++ b/benchmarks/ios/BenchmarkRunner/main.m @@ -0,0 +1,8 @@ +#import +#import "BenchmarkRunner-Swift.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/benchmarks/ios/BenchmarkVitals/BenchMarkVitalsImplementation.swift b/benchmarks/ios/BenchmarkVitals/BenchMarkVitalsImplementation.swift new file mode 100644 index 000000000..546973eac --- /dev/null +++ b/benchmarks/ios/BenchmarkVitals/BenchMarkVitalsImplementation.swift @@ -0,0 +1,75 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +import Foundation +import React +import DatadogBenchmarks + +struct NativeTestConfig { + let scenario: String + let runType: String + let clientToken: String + let applicationID: String + let apiKey: String + + init(from dict: NSDictionary) { + self.scenario = dict["scenario"] as? String ?? "" + self.runType = dict["runType"] as? String ?? "" + self.clientToken = dict["clientToken"] as? String ?? "" + self.applicationID = dict["applicationID"] as? String ?? "" + self.apiKey = dict["apiKey"] as? String ?? "" + } +} + +@objc +public class BenchmarkVitalsImplementation: NSObject { + + var vitals: Vitals? + + @objc + public func startCollectingVitals(config: NSDictionary, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void { + let nativeConfig = NativeTestConfig(from: config) + + let appId = Bundle.main.bundleIdentifier ?? "unknown.bundle.id" + let appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleExecutable") as! String + let appVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String + let osName = UIDevice.current.systemName + let osVersion = UIDevice.current.systemVersion + let deviceModel = UIDevice.current.model + + let context = Benchmarks.Configuration.Context( + applicationIdentifier: appId, + applicationName: appName, + applicationVersion: appVersion, + sdkVersion: "", + deviceModel: deviceModel, + osName: osName, + osVersion: osVersion, + run: nativeConfig.runType, + scenario: nativeConfig.scenario, + branch: "") + let configuration = Benchmarks.Configuration(clientToken: nativeConfig.clientToken, apiKey: nativeConfig.apiKey, context: context) + let vitals = Vitals( + provider: Benchmarks.meterProvider( + with: configuration + ) + ) + + vitals.observeCPU() + vitals.observeMemory() + vitals.observeFPS() + + + self.vitals = vitals + resolve(true) + } + + @objc + public func stopCollectingVitals(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void { + vitals = nil + resolve(true) + } +} diff --git a/benchmarks/ios/BenchmarkVitals/BenchmarkVitals.h b/benchmarks/ios/BenchmarkVitals/BenchmarkVitals.h new file mode 100644 index 000000000..0df654a46 --- /dev/null +++ b/benchmarks/ios/BenchmarkVitals/BenchmarkVitals.h @@ -0,0 +1,23 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +#import +@class BenchmarkVitalsImplementation; + +#ifdef RCT_NEW_ARCH_ENABLED +#import "BenchmarkVitalsSpec.h" +@interface BenchmarkVitals: NSObject + +#else + +#import +@interface BenchmarkVitals : NSObject + +#endif + +@property (nonatomic, strong) BenchmarkVitalsImplementation* benchmarkVitalsImplementation; + +@end diff --git a/benchmarks/ios/BenchmarkVitals/BenchmarkVitals.mm b/benchmarks/ios/BenchmarkVitals/BenchmarkVitals.mm new file mode 100644 index 000000000..c2a011ff1 --- /dev/null +++ b/benchmarks/ios/BenchmarkVitals/BenchmarkVitals.mm @@ -0,0 +1,56 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +#if __has_include("BenchmarkRunner-Swift.h") +#import "BenchmarkRunner-Swift.h" +#else +#import +#endif +#import "BenchmarkVitals.h" + +@implementation BenchmarkVitals + +RCT_EXPORT_MODULE() + +RCT_REMAP_METHOD(startCollectingVitals, startCollectingVitalswithConfig:(NSDictionary *)config + withResolve: (RCTPromiseResolveBlock)resolve + withRejecter: (RCTPromiseRejectBlock)reject) +{ + [self startCollectingVitals:config resolve:resolve reject:reject]; +} + +RCT_REMAP_METHOD(stopCollectingVitals, stopCollectingVitalswithResolve: (RCTPromiseResolveBlock)resolve + withRejecter: (RCTPromiseRejectBlock)reject) +{ + [self stopCollectingVitals:resolve reject:reject]; +} + +#ifdef RCT_NEW_ARCH_ENABLED +- (std::shared_ptr)getTurboModule: + (const facebook::react::ObjCTurboModule::InitParams &)params +{ + return std::make_shared(params); +} +#endif + +- (BenchmarkVitalsImplementation*)benchmarkVitalsImplementation +{ + if (_benchmarkVitalsImplementation == nil) { + _benchmarkVitalsImplementation = [[BenchmarkVitalsImplementation alloc] init]; + } + return _benchmarkVitalsImplementation; +} + + +- (void)startCollectingVitals:(NSDictionary *)config resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { + [self.benchmarkVitalsImplementation startCollectingVitalsWithConfig:config resolve:resolve reject:reject]; +} + +- (void)stopCollectingVitals:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { + [self.benchmarkVitalsImplementation stopCollectingVitalsWithResolve:resolve reject:reject]; +} + +@end diff --git a/benchmarks/ios/BenchmarkVitals/Vitals/BenchmarkMeter.swift b/benchmarks/ios/BenchmarkVitals/Vitals/BenchmarkMeter.swift new file mode 100644 index 000000000..694b6ae07 --- /dev/null +++ b/benchmarks/ios/BenchmarkVitals/Vitals/BenchmarkMeter.swift @@ -0,0 +1,53 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2019-Present Datadog, Inc. + */ + +import Foundation +import DatadogInternal +import DatadogBenchmarks +import OpenTelemetryApi + +internal final class Meter: DatadogInternal.BenchmarkMeter { + let meter: OpenTelemetryApi.Meter + + init(provider: MeterProvider) { + self.meter = provider.get( + instrumentationName: "benchmarks", + instrumentationVersion: nil + ) + } + + func counter(metric: @autoclosure () -> String) -> DatadogInternal.BenchmarkCounter { + meter.createDoubleCounter(name: metric()) + } + + func gauge(metric: @autoclosure () -> String) -> DatadogInternal.BenchmarkGauge { + meter.createDoubleMeasure(name: metric()) + } + + func observe(metric: @autoclosure () -> String, callback: @escaping (any DatadogInternal.BenchmarkGauge) -> Void) { + _ = meter.createDoubleObserver(name: metric()) { callback(DoubleObserverWrapper(observer: $0)) } + } +} + +extension AnyCounterMetric: DatadogInternal.BenchmarkCounter { + public func add(value: Double, attributes: @autoclosure () -> [String: String]) { + add(value: value, labelset: LabelSet(labels: attributes())) + } +} + +extension AnyMeasureMetric: DatadogInternal.BenchmarkGauge { + public func record(value: Double, attributes: @autoclosure () -> [String: String]) { + record(value: value, labelset: LabelSet(labels: attributes())) + } +} + +private struct DoubleObserverWrapper: DatadogInternal.BenchmarkGauge { + let observer: DoubleObserverMetric + + func record(value: Double, attributes: @autoclosure () -> [String: String]) { + observer.observe(value: value, labelset: LabelSet(labels: attributes())) + } +} diff --git a/benchmarks/ios/BenchmarkVitals/Vitals/BenchmarkProfiler.swift b/benchmarks/ios/BenchmarkVitals/Vitals/BenchmarkProfiler.swift new file mode 100644 index 000000000..e19b6759b --- /dev/null +++ b/benchmarks/ios/BenchmarkVitals/Vitals/BenchmarkProfiler.swift @@ -0,0 +1,56 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2019-Present Datadog, Inc. + */ + +import Foundation +import DatadogInternal +import DatadogBenchmarks +import OpenTelemetryApi + +internal final class Profiler: DatadogInternal.BenchmarkProfiler { + let provider: TracerProvider + + init(provider: TracerProvider) { + self.provider = provider + } + + func tracer(operation: @autoclosure () -> String) -> any DatadogInternal.BenchmarkTracer { + TracerWrapper( + tracer: provider.get( + instrumentationName: operation(), + instrumentationVersion: nil + ) + ) + } +} + +private final class TracerWrapper: DatadogInternal.BenchmarkTracer { + let tracer: OpenTelemetryApi.Tracer + + init(tracer: OpenTelemetryApi.Tracer) { + self.tracer = tracer + } + + func startSpan(named: @autoclosure () -> String) -> any DatadogInternal.BenchmarkSpan { + SpanWrapper( + span: tracer + .spanBuilder(spanName: named()) + .setActive(true) + .startSpan() + ) + } +} + +private final class SpanWrapper: DatadogInternal.BenchmarkSpan { + let span: OpenTelemetryApi.Span + + init(span: OpenTelemetryApi.Span) { + self.span = span + } + + func stop() { + span.end() + } +} diff --git a/benchmarks/ios/BenchmarkVitals/Vitals/BenchmarkVitals.swift b/benchmarks/ios/BenchmarkVitals/Vitals/BenchmarkVitals.swift new file mode 100644 index 000000000..772c6b76e --- /dev/null +++ b/benchmarks/ios/BenchmarkVitals/Vitals/BenchmarkVitals.swift @@ -0,0 +1,63 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2019-Present Datadog, Inc. + */ + +import Foundation +import DatadogBenchmarks +import OpenTelemetryApi + +/// Collect Vital Metrics such CPU, Memory, and FPS. +/// +/// The metrics are reported via opentelemetry. +internal final class Vitals { + let provider: OpenTelemetryApi.MeterProvider + + private lazy var meter: OpenTelemetryApi.Meter = provider.get(instrumentationName: "vitals", instrumentationVersion: nil) + + let queue = DispatchQueue(label: "com.datadoghq.benchmarks.rn.ios.vitals", target: .global(qos: .utility)) + + init(provider: MeterProvider) { + self.provider = provider + } + + @discardableResult + func observeMemory() -> OpenTelemetryApi.DoubleObserverMetric { + let memory = Memory(queue: queue) + return meter.createDoubleObservableGauge(name: "rn.ios.benchmark.memory") { metric in + // report the maximum memory footprint that was recorded during push interval + if let value = memory.aggregation?.max { + metric.observe(value: value, labelset: .empty) + } + + memory.reset() + } + } + + @discardableResult + func observeCPU() -> OpenTelemetryApi.DoubleObserverMetric { + let cpu = CPU(queue: queue) + return meter.createDoubleObservableGauge(name: "rn.ios.benchmark.cpu") { metric in + // report the average cpu usage that was recorded during push interval + if let value = cpu.aggregation?.avg { + metric.observe(value: value, labelset: .empty) + } + + cpu.reset() + } + } + + @discardableResult + func observeFPS() -> OpenTelemetryApi.IntObserverMetric { + let fps = FPS() + return meter.createIntObservableGauge(name: "rn.ios.benchmark.fps.min") { metric in + // report the minimum frame rate that was recorded during push interval + if let value = fps.aggregation?.min { + metric.observe(value: value, labelset: .empty) + } + + fps.reset() + } + } +} diff --git a/benchmarks/ios/BenchmarkVitals/Vitals/Package.swift b/benchmarks/ios/BenchmarkVitals/Vitals/Package.swift new file mode 100644 index 000000000..ff099cb82 --- /dev/null +++ b/benchmarks/ios/BenchmarkVitals/Vitals/Package.swift @@ -0,0 +1,38 @@ +// swift-tools-version: 5.9 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription +import Foundation + +let package = Package( + name: "DatadogBenchmarks", + products: [ + .library( + name: "DatadogBenchmarks", + targets: ["DatadogBenchmarks"] + ) + ] +) + +func addOpenTelemetryDependency(_ version: Version) { + package.platforms = [.iOS(.v13), .tvOS(.v13)] + + package.dependencies = [ + .package(url: "https://github.com/open-telemetry/opentelemetry-swift", exact: version) + ] + + package.targets = [ + .target( + name: "DatadogBenchmarks", + dependencies: [ + .product(name: "OpenTelemetryApi", package: "opentelemetry-swift"), + .product(name: "OpenTelemetrySdk", package: "opentelemetry-swift"), + .product(name: "DatadogExporter", package: "opentelemetry-swift") + ], + swiftSettings: [.define("OTEL_SWIFT")] + ) + ] +} + +addOpenTelemetryDependency("1.13.0") + diff --git a/benchmarks/ios/BenchmarkVitals/Vitals/Sources/Benchmarks.swift b/benchmarks/ios/BenchmarkVitals/Vitals/Sources/Benchmarks.swift new file mode 100644 index 000000000..020c14af6 --- /dev/null +++ b/benchmarks/ios/BenchmarkVitals/Vitals/Sources/Benchmarks.swift @@ -0,0 +1,125 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2019-Present Datadog, Inc. + */ + +#if OTEL_API +#error("Benchmarks depends on opentelemetry-swift. Please open the project with 'make benchmark-tests-open'.") +#endif + +import Foundation +import OpenTelemetryApi +import OpenTelemetrySdk +import DatadogExporter + +/// Benchmark entrypoint to configure opentelemetry with metrics meters +/// and tracer. +public enum Benchmarks { + /// Configuration of the Benchmarks library. + public struct Configuration { + /// Context of Benchmarks measures. + /// The context properties will be added to metrics as tags. + public struct Context { + var applicationIdentifier: String + var applicationName: String + var applicationVersion: String + var sdkVersion: String + var deviceModel: String + var osName: String + var osVersion: String + var run: String + var scenario: String + var branch: String + + public init( + applicationIdentifier: String, + applicationName: String, + applicationVersion: String, + sdkVersion: String, + deviceModel: String, + osName: String, + osVersion: String, + run: String, + scenario: String, + branch: String + ) { + self.applicationIdentifier = applicationIdentifier + self.applicationName = applicationName + self.applicationVersion = applicationVersion + self.sdkVersion = sdkVersion + self.deviceModel = deviceModel + self.osName = osName + self.osVersion = osVersion + self.run = run + self.scenario = scenario + self.branch = branch + } + } + + var clientToken: String + var apiKey: String + var context: Context + + public init( + clientToken: String, + apiKey: String, + context: Context + ) { + self.clientToken = clientToken + self.apiKey = apiKey + self.context = context + } + } + + /// Configure an OpenTelemetry meter provider. + /// + /// - Parameter configuration: The Benchmark configuration. + public static func meterProvider(with configuration: Configuration) -> MeterProvider { + let metricExporter = MetricExporter( + configuration: MetricExporter.Configuration( + apiKey: configuration.apiKey, + version: configuration.context.applicationVersion + ) + ) + + return MeterProviderBuilder() + .with(pushInterval: 10) + .with(processor: MetricProcessorSdk()) + .with(exporter: metricExporter) + .with(resource: Resource(attributes: [ + "device_model": .string(configuration.context.deviceModel), + "os": .string(configuration.context.osName), + "os_version": .string(configuration.context.osVersion), + "run": .string(configuration.context.run), + "scenario": .string(configuration.context.scenario), + "application_id": .string(configuration.context.applicationIdentifier), + "sdk_version": .string(configuration.context.sdkVersion), + "branch": .string(configuration.context.branch), + ])) + .build() + } + + /// Configure an OpenTelemetry tracer provider. + /// + /// - Parameter configuration: The Benchmark configuration. + public static func tracerProvider(with configuration: Configuration) -> TracerProvider { + let exporterConfiguration = ExporterConfiguration( + serviceName: configuration.context.applicationIdentifier, + resource: "Benchmark Tracer", + applicationName: configuration.context.applicationName, + applicationVersion: configuration.context.applicationVersion, + environment: "benchmarks", + apiKey: configuration.apiKey, + endpoint: .us1, + uploadCondition: { true } + ) + + let exporter = try! DatadogExporter(config: exporterConfiguration) + let processor = SimpleSpanProcessor(spanExporter: exporter) + + return TracerProviderBuilder() + .add(spanProcessor: processor) + .build() + } +} diff --git a/benchmarks/ios/BenchmarkVitals/Vitals/Sources/MetricExporter.swift b/benchmarks/ios/BenchmarkVitals/Vitals/Sources/MetricExporter.swift new file mode 100644 index 000000000..5109a455c --- /dev/null +++ b/benchmarks/ios/BenchmarkVitals/Vitals/Sources/MetricExporter.swift @@ -0,0 +1,162 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2019-Present Datadog, Inc. + */ + +import Foundation +import OpenTelemetrySdk + +enum MetricExporterError: Error { + case unsupportedMetric(aggregation: AggregationType, dataType: Any.Type) +} + +/// Replacement of otel `DatadogExporter` for metrics. +/// +/// This version does not store data to disk, it uploads to the intake directly. +/// Additionally, it does not crash. +final class MetricExporter: OpenTelemetrySdk.MetricExporter { + struct Configuration { + let apiKey: String + let version: String + } + + /// The type of metric. The available types are 0 (unspecified), 1 (count), 2 (rate), and 3 (gauge). Allowed enum values: 0,1,2,3 + enum MetricType: Int, Codable { + case unspecified = 0 + case count = 1 + case rate = 2 + case gauge = 3 + } + + /// https://docs.datadoghq.com/api/latest/metrics/#submit-metrics + internal struct Serie: Codable { + struct Point: Codable { + let timestamp: Int64 + let value: Double + } + + struct Resource: Codable { + let name: String + let type: String + } + + let type: MetricType + let interval: Int64? + let metric: String + let unit: String? + let points: [Point] + let resources: [Resource] + let tags: [String] + } + + let session: URLSession + let encoder = JSONEncoder() + let configuration: Configuration + + // swiftlint:disable force_unwrapping + let intake = URL(string: "https://api.datadoghq.com/api/v2/series")! + let prefix = "{ \"series\": [".data(using: .utf8)! + let separator = ",".data(using: .utf8)! + let suffix = "]}".data(using: .utf8)! + // swiftlint:enable force_unwrapping + + required init(configuration: Configuration) { + let sessionConfiguration: URLSessionConfiguration = .ephemeral + sessionConfiguration.urlCache = nil + self.session = URLSession(configuration: sessionConfiguration) + self.configuration = configuration + } + + func export(metrics: [Metric], shouldCancel: (() -> Bool)?) -> MetricExporterResultCode { + do { + let series = try metrics.map(transform) + try submit(series: series) + return.success + } catch { + return .failureNotRetryable + } + } + + /// Transforms otel `Metric` to Datadog `serie`. + /// + /// - Parameter metric: The otel metric + /// - Returns: The timeserie. + func transform(_ metric: Metric) throws -> Serie { + var tags = Set(metric.resource.attributes.map { "\($0):\($1)" }) + + let points: [Serie.Point] = try metric.data.map { data in + let timestamp = Int64(data.timestamp.timeIntervalSince1970) + + data.labels.forEach { tags.insert("\($0):\($1)") } + + switch data { + case let data as SumData: + return Serie.Point(timestamp: timestamp, value: data.sum) + case let data as SumData: + return Serie.Point(timestamp: timestamp, value: Double(data.sum)) + case let data as SummaryData: + return Serie.Point(timestamp: timestamp, value: data.sum) + case let data as SummaryData: + return Serie.Point(timestamp: timestamp, value: Double(data.sum)) +// case let data as HistogramData: +// return Serie.Point(timestamp: timestamp, value: Double(data.sum)) +// case let data as HistogramData: +// return Serie.Point(timestamp: timestamp, value: data.sum) + default: + throw MetricExporterError.unsupportedMetric( + aggregation: metric.aggregationType, + dataType: type(of: data) + ) + } + } + + return Serie( + type: MetricType(metric.aggregationType), + interval: nil, + metric: metric.name, + unit: nil, + points: points, + resources: [], + tags: Array(tags) + ) + } + + /// Submit timeseries to the Metrics intake. + /// + /// - Parameter series: The timeseries. + func submit(series: [Serie]) throws { + var data = try series.reduce(Data()) { data, serie in + try data + encoder.encode(serie) + separator + } + + // remove last separator + data.removeLast(separator.count) + + var request = URLRequest(url: intake) + request.httpMethod = "POST" + request.allHTTPHeaderFields = [ + "Content-Type": "application/json", + "DD-API-KEY": configuration.apiKey, + "DD-EVP-ORIGIN": "ios", + "DD-EVP-ORIGIN-VERSION": configuration.version, + "DD-REQUEST-ID": UUID().uuidString, + ] + + request.httpBody = prefix + data + suffix + session.dataTask(with: request).resume() + } +} + +private extension MetricExporter.MetricType { + init(_ type: OpenTelemetrySdk.AggregationType) { + switch type { + case .doubleSum, .intSum: + self = .count + case .intGauge, .doubleGauge: + self = .gauge + case .doubleSummary, .intSummary, .doubleHistogram, .intHistogram: + self = .unspecified + } + } +} diff --git a/benchmarks/ios/BenchmarkVitals/Vitals/Sources/Metrics.swift b/benchmarks/ios/BenchmarkVitals/Vitals/Sources/Metrics.swift new file mode 100644 index 000000000..184c54f46 --- /dev/null +++ b/benchmarks/ios/BenchmarkVitals/Vitals/Sources/Metrics.swift @@ -0,0 +1,275 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2019-Present Datadog, Inc. + */ + +import Foundation +import QuartzCore + +// The `TASK_VM_INFO_COUNT` and `TASK_VM_INFO_REV1_COUNT` macros are too +// complex for the Swift C importer, so we have to define them ourselves. +let TASK_VM_INFO_COUNT = mach_msg_type_number_t(MemoryLayout.size / MemoryLayout.size) +let TASK_VM_INFO_REV1_COUNT = mach_msg_type_number_t(MemoryLayout.offset(of: \task_vm_info_data_t.min_address)! / MemoryLayout.size) + +public enum MachError: Error { + case task_info(return: kern_return_t) + case task_threads(return: kern_return_t) + case thread_info(return: kern_return_t) +} + +/// Aggregate metric values and compute `min`, `max`, `sum`, `avg`, and `count`. +public class MetricAggregator where T: Numeric { + public struct Aggregation { + public let min: T + public let max: T + public let sum: T + public let count: Int + public let avg: Double + } + + private var mutex = pthread_mutex_t() + private var _aggregation: Aggregation? + + public var aggregation: Aggregation? { + pthread_mutex_lock(&mutex) + defer { pthread_mutex_unlock(&mutex) } + return _aggregation + } + + /// Resets the minimum frame rate to `nil`. + public func reset() { + pthread_mutex_lock(&mutex) + _aggregation = nil + pthread_mutex_unlock(&mutex) + } + + deinit { + pthread_mutex_destroy(&mutex) + } +} + +extension MetricAggregator where T: BinaryInteger { + /// Records a `BinaryInteger` value. + /// + /// - Parameter value: The value to record. + public func record(value: T) { + pthread_mutex_lock(&mutex) + _aggregation = _aggregation.map { + let sum = $0.sum + value + let count = $0.count + 1 + return Aggregation( + min: Swift.min($0.min, value), + max: Swift.max($0.max, value), + sum: sum, + count: count, + avg: Double(sum) / Double(count) + ) + } ?? Aggregation(min: value, max: value, sum: value, count: 1, avg: Double(value)) + pthread_mutex_unlock(&mutex) + } +} + +extension MetricAggregator where T: BinaryFloatingPoint { + /// Records a `BinaryFloatingPoint` value. + /// + /// - Parameter value: The value to record. + internal func record(value: T) { + pthread_mutex_lock(&mutex) + _aggregation = _aggregation.map { + let sum = $0.sum + value + let count = $0.count + 1 + return Aggregation( + min: Swift.min($0.min, value), + max: Swift.max($0.max, value), + sum: sum, + count: count, + avg: Double(sum) / Double(count) + ) + } ?? Aggregation(min: value, max: value, sum: value, count: 1, avg: Double(value)) + pthread_mutex_unlock(&mutex) + } +} + +/// Collect Memory footprint metric. +/// +/// Based on a timer, the `Memory` aggregator will periodically record the memory footprint. +public final class Memory: MetricAggregator { + /// Dispatch source object for monitoring timer events. + private let timer: DispatchSourceTimer + + /// Create a `Memory` aggregator to periodically record the memory footprint on the + /// provided queue. + /// + /// By default, the timer is scheduled with 100 ms interval with 10 ms leeway. + /// + /// - Parameters: + /// - queue: The queue on which to execute the timer handler. + /// - interval: The timer interval, default to 100 ms. + /// - leeway: The timer leeway, default to 10 ms. + public required init( + queue: DispatchQueue, + every interval: DispatchTimeInterval = .milliseconds(100), + leeway: DispatchTimeInterval = .milliseconds(10) + ) { + timer = DispatchSource.makeTimerSource(queue: queue) + super.init() + + timer.setEventHandler { [weak self] in + guard let self, let footprint = try? self.footprint() else { + return + } + + self.record(value: footprint) + } + + timer.schedule(deadline: .now(), repeating: interval, leeway: leeway) + timer.activate() + } + + deinit { + timer.cancel() + } + + /// Collects single sample of current memory footprint. + /// + /// The computation is based on https://developer.apple.com/forums/thread/105088 + /// It leverages recommended `phys_footprint` value, which returns values that are close to Xcode's _Memory Use_ + /// gauge and _Allocations Instrument_. + /// + /// - Returns: Current memory footprint in bytes, `throws` if failed to read. + private func footprint() throws -> Double { + var info = task_vm_info_data_t() + var count = TASK_VM_INFO_COUNT + let kr = withUnsafeMutablePointer(to: &info) { + $0.withMemoryRebound(to: integer_t.self, capacity: Int(count)) { + task_info(mach_task_self_, task_flavor_t(TASK_VM_INFO), $0, &count) + } + } + + guard kr == KERN_SUCCESS, count >= TASK_VM_INFO_REV1_COUNT else { + throw MachError.task_info(return: kr) + } + + return Double(info.phys_footprint) + } +} + +/// Collect CPU usage metric. +/// +/// Based on a timer, the `CPU` aggregator will periodically record the CPU usage. +public final class CPU: MetricAggregator { + /// Dispatch source object for monitoring timer events. + private let timer: DispatchSourceTimer + + /// Create a `CPU` aggregator to periodically record the CPU usage on the + /// provided queue. + /// + /// By default, the timer is scheduled with 100 ms interval with 10 ms leeway. + /// + /// - Parameters: + /// - queue: The queue on which to execute the timer handler. + /// - interval: The timer interval, default to 100 ms. + /// - leeway: The timer leeway, default to 10 ms. + public required init( + queue: DispatchQueue, + every interval: DispatchTimeInterval = .milliseconds(100), + leeway: DispatchTimeInterval = .milliseconds(10) + ) { + self.timer = DispatchSource.makeTimerSource(queue: queue) + super.init() + + timer.setEventHandler { [weak self] in + guard let self, let usage = try? self.usage() else { + return + } + + self.record(value: usage) + } + + timer.schedule(deadline: .now(), repeating: interval, leeway: leeway) + timer.activate() + } + + deinit { + timer.cancel() + } + + /// Collect single sample of current cpu usage. + /// + /// The computation is based on https://gist.github.com/hisui/10004131#file-cpu-usage-cpp + /// It reads the `cpu_usage` from all thread to compute the application usage percentage. + /// + /// - Returns: The cpu usage of all threads. + private func usage() throws -> Double { + var threads_list: thread_act_array_t? + var threads_count = mach_msg_type_number_t() + let kr = withUnsafeMutablePointer(to: &threads_list) { + $0.withMemoryRebound(to: thread_act_array_t?.self, capacity: 1) { + task_threads(mach_task_self_, $0, &threads_count) + } + } + + guard kr == KERN_SUCCESS, let threads_list = threads_list else { + throw MachError.task_threads(return: kr) + } + + defer { + vm_deallocate(mach_task_self_, vm_address_t(bitPattern: threads_list), vm_size_t(Int(threads_count) * MemoryLayout.stride)) + } + + return try (0.. { + private class CADisplayLinker { + weak var fps: FPS? + + init() { } + + @objc + func tick(link: CADisplayLink) { + guard let fps else { + return + } + + let rate = 1 / (link.targetTimestamp - link.timestamp) + fps.record(value: lround(rate)) + } + } + + private var displayLink: CADisplayLink + + override public init() { + let linker = CADisplayLinker() + displayLink = CADisplayLink(target: linker, selector: #selector(CADisplayLinker.tick(link:))) + super.init() + + linker.fps = self + displayLink.add(to: RunLoop.main, forMode: .common) + } + + deinit { + displayLink.invalidate() + } +} diff --git a/benchmarks/ios/Podfile b/benchmarks/ios/Podfile new file mode 100644 index 000000000..059b1eae4 --- /dev/null +++ b/benchmarks/ios/Podfile @@ -0,0 +1,35 @@ +# Resolve react_native_pods.rb with node to allow for hoisting +require Pod::Executable.execute_command('node', ['-p', + 'require.resolve( + "react-native/scripts/react_native_pods.rb", + {paths: [process.argv[1]]}, + )', __dir__]).strip + +platform :ios, min_ios_version_supported +prepare_react_native_project! + +linkage = ENV['USE_FRAMEWORKS'] +if linkage != nil + Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green + use_frameworks! :linkage => linkage.to_sym +end + +target 'BenchmarkRunner' do + config = use_native_modules! + + use_react_native!( + :path => config[:reactNativePath], + # An absolute path to your application root. + :app_path => "#{Pod::Config.instance.installation_root}/.." + ) + + post_install do |installer| + # https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202 + react_native_post_install( + installer, + config[:reactNativePath], + :mac_catalyst_enabled => false, + # :ccache_enabled => true + ) + end +end diff --git a/benchmarks/ios/Podfile.lock b/benchmarks/ios/Podfile.lock new file mode 100644 index 000000000..948c531df --- /dev/null +++ b/benchmarks/ios/Podfile.lock @@ -0,0 +1,2004 @@ +PODS: + - boost (1.84.0) + - DatadogCore (2.27.0): + - DatadogInternal (= 2.27.0) + - DatadogCrashReporting (2.27.0): + - DatadogInternal (= 2.27.0) + - PLCrashReporter (~> 1.12.0) + - DatadogInternal (2.27.0) + - DatadogLogs (2.27.0): + - DatadogInternal (= 2.27.0) + - DatadogRUM (2.27.0): + - DatadogInternal (= 2.27.0) + - DatadogSDKReactNative (2.8.0): + - DatadogCore (~> 2.27.0) + - DatadogCrashReporting (~> 2.27.0) + - DatadogLogs (~> 2.27.0) + - DatadogRUM (~> 2.27.0) + - DatadogTrace (~> 2.27.0) + - DatadogWebViewTracking (~> 2.27.0) + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - DatadogTrace (2.27.0): + - DatadogInternal (= 2.27.0) + - OpenTelemetrySwiftApi (= 1.13.1) + - DatadogWebViewTracking (2.27.0): + - DatadogInternal (= 2.27.0) + - DoubleConversion (1.1.6) + - fast_float (6.1.4) + - FBLazyVector (0.78.2) + - fmt (11.0.2) + - glog (0.3.5) + - hermes-engine (0.78.2): + - hermes-engine/Pre-built (= 0.78.2) + - hermes-engine/Pre-built (0.78.2) + - OpenTelemetrySwiftApi (1.13.1) + - PLCrashReporter (1.12.0) + - RCT-Folly (2024.11.18.00): + - boost + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - RCT-Folly/Default (= 2024.11.18.00) + - RCT-Folly/Default (2024.11.18.00): + - boost + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - RCT-Folly/Fabric (2024.11.18.00): + - boost + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - RCTDeprecation (0.78.2) + - RCTRequired (0.78.2) + - RCTTypeSafety (0.78.2): + - FBLazyVector (= 0.78.2) + - RCTRequired (= 0.78.2) + - React-Core (= 0.78.2) + - React (0.78.2): + - React-Core (= 0.78.2) + - React-Core/DevSupport (= 0.78.2) + - React-Core/RCTWebSocket (= 0.78.2) + - React-RCTActionSheet (= 0.78.2) + - React-RCTAnimation (= 0.78.2) + - React-RCTBlob (= 0.78.2) + - React-RCTImage (= 0.78.2) + - React-RCTLinking (= 0.78.2) + - React-RCTNetwork (= 0.78.2) + - React-RCTSettings (= 0.78.2) + - React-RCTText (= 0.78.2) + - React-RCTVibration (= 0.78.2) + - React-callinvoker (0.78.2) + - React-Core (0.78.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation + - React-Core/Default (= 0.78.2) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/CoreModulesHeaders (0.78.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/Default (0.78.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/DevSupport (0.78.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation + - React-Core/Default (= 0.78.2) + - React-Core/RCTWebSocket (= 0.78.2) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTActionSheetHeaders (0.78.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTAnimationHeaders (0.78.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTBlobHeaders (0.78.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTImageHeaders (0.78.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTLinkingHeaders (0.78.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTNetworkHeaders (0.78.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTSettingsHeaders (0.78.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTTextHeaders (0.78.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTVibrationHeaders (0.78.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTWebSocket (0.78.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation + - React-Core/Default (= 0.78.2) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-CoreModules (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - RCT-Folly (= 2024.11.18.00) + - RCTTypeSafety (= 0.78.2) + - React-Core/CoreModulesHeaders (= 0.78.2) + - React-jsi (= 0.78.2) + - React-jsinspector + - React-NativeModulesApple + - React-RCTBlob + - React-RCTFBReactNativeSpec + - React-RCTImage (= 0.78.2) + - ReactCommon + - SocketRocket (= 0.7.1) + - React-cxxreact (0.78.2): + - boost + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-callinvoker (= 0.78.2) + - React-debug (= 0.78.2) + - React-jsi (= 0.78.2) + - React-jsinspector + - React-logger (= 0.78.2) + - React-perflogger (= 0.78.2) + - React-runtimeexecutor (= 0.78.2) + - React-timing (= 0.78.2) + - React-debug (0.78.2) + - React-defaultsnativemodule (0.78.2): + - hermes-engine + - RCT-Folly + - React-domnativemodule + - React-featureflagsnativemodule + - React-idlecallbacksnativemodule + - React-jsi + - React-jsiexecutor + - React-microtasksnativemodule + - React-RCTFBReactNativeSpec + - React-domnativemodule (0.78.2): + - hermes-engine + - RCT-Folly + - React-Fabric + - React-FabricComponents + - React-graphics + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - ReactCommon/turbomodule/core + - Yoga + - React-Fabric (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/animations (= 0.78.2) + - React-Fabric/attributedstring (= 0.78.2) + - React-Fabric/componentregistry (= 0.78.2) + - React-Fabric/componentregistrynative (= 0.78.2) + - React-Fabric/components (= 0.78.2) + - React-Fabric/consistency (= 0.78.2) + - React-Fabric/core (= 0.78.2) + - React-Fabric/dom (= 0.78.2) + - React-Fabric/imagemanager (= 0.78.2) + - React-Fabric/leakchecker (= 0.78.2) + - React-Fabric/mounting (= 0.78.2) + - React-Fabric/observers (= 0.78.2) + - React-Fabric/scheduler (= 0.78.2) + - React-Fabric/telemetry (= 0.78.2) + - React-Fabric/templateprocessor (= 0.78.2) + - React-Fabric/uimanager (= 0.78.2) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/animations (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/attributedstring (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/componentregistry (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/componentregistrynative (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/components/legacyviewmanagerinterop (= 0.78.2) + - React-Fabric/components/root (= 0.78.2) + - React-Fabric/components/view (= 0.78.2) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/legacyviewmanagerinterop (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/root (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/view (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-Fabric/consistency (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/core (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/dom (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/imagemanager (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/leakchecker (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/mounting (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/observers (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/observers/events (= 0.78.2) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/observers/events (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/scheduler (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/observers/events + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-performancetimeline + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/telemetry (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/templateprocessor (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/uimanager (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/uimanager/consistency (= 0.78.2) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererconsistency + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/uimanager/consistency (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererconsistency + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-FabricComponents (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-FabricComponents/components (= 0.78.2) + - React-FabricComponents/textlayoutmanager (= 0.78.2) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-FabricComponents/components/inputaccessory (= 0.78.2) + - React-FabricComponents/components/iostextinput (= 0.78.2) + - React-FabricComponents/components/modal (= 0.78.2) + - React-FabricComponents/components/rncore (= 0.78.2) + - React-FabricComponents/components/safeareaview (= 0.78.2) + - React-FabricComponents/components/scrollview (= 0.78.2) + - React-FabricComponents/components/text (= 0.78.2) + - React-FabricComponents/components/textinput (= 0.78.2) + - React-FabricComponents/components/unimplementedview (= 0.78.2) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/inputaccessory (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/iostextinput (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/modal (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/rncore (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/safeareaview (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/scrollview (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/text (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/textinput (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/unimplementedview (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/textlayoutmanager (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-FabricImage (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired (= 0.78.2) + - RCTTypeSafety (= 0.78.2) + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-jsiexecutor (= 0.78.2) + - React-logger + - React-rendererdebug + - React-utils + - ReactCommon + - Yoga + - React-featureflags (0.78.2): + - RCT-Folly (= 2024.11.18.00) + - React-featureflagsnativemodule (0.78.2): + - hermes-engine + - RCT-Folly + - React-featureflags + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - ReactCommon/turbomodule/core + - React-graphics (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - React-jsi + - React-jsiexecutor + - React-utils + - React-hermes (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-cxxreact (= 0.78.2) + - React-jsi + - React-jsiexecutor (= 0.78.2) + - React-jsinspector + - React-perflogger (= 0.78.2) + - React-runtimeexecutor + - React-idlecallbacksnativemodule (0.78.2): + - glog + - hermes-engine + - RCT-Folly + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - React-runtimescheduler + - ReactCommon/turbomodule/core + - React-ImageManager (0.78.2): + - glog + - RCT-Folly/Fabric + - React-Core/Default + - React-debug + - React-Fabric + - React-graphics + - React-rendererdebug + - React-utils + - React-jserrorhandler (0.78.2): + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - React-cxxreact + - React-debug + - React-featureflags + - React-jsi + - ReactCommon/turbomodule/bridging + - React-jsi (0.78.2): + - boost + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-jsiexecutor (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-cxxreact (= 0.78.2) + - React-jsi (= 0.78.2) + - React-jsinspector + - React-perflogger (= 0.78.2) + - React-jsinspector (0.78.2): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly + - React-featureflags + - React-jsi + - React-jsinspectortracing + - React-perflogger (= 0.78.2) + - React-runtimeexecutor (= 0.78.2) + - React-jsinspectortracing (0.78.2): + - RCT-Folly + - React-jsitracing (0.78.2): + - React-jsi + - React-logger (0.78.2): + - glog + - React-Mapbuffer (0.78.2): + - glog + - React-debug + - React-microtasksnativemodule (0.78.2): + - hermes-engine + - RCT-Folly + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - ReactCommon/turbomodule/core + - react-native-config (1.5.5): + - react-native-config/App (= 1.5.5) + - react-native-config/App (1.5.5): + - React-Core + - react-native-safe-area-context (5.4.1): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - react-native-safe-area-context/common (= 5.4.1) + - react-native-safe-area-context/fabric (= 5.4.1) + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-safe-area-context/common (5.4.1): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-safe-area-context/fabric (5.4.1): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - react-native-safe-area-context/common + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - React-NativeModulesApple (0.78.2): + - glog + - hermes-engine + - React-callinvoker + - React-Core + - React-cxxreact + - React-jsi + - React-jsinspector + - React-runtimeexecutor + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - React-perflogger (0.78.2): + - DoubleConversion + - RCT-Folly (= 2024.11.18.00) + - React-performancetimeline (0.78.2): + - RCT-Folly (= 2024.11.18.00) + - React-cxxreact + - React-featureflags + - React-jsinspectortracing + - React-timing + - React-RCTActionSheet (0.78.2): + - React-Core/RCTActionSheetHeaders (= 0.78.2) + - React-RCTAnimation (0.78.2): + - RCT-Folly (= 2024.11.18.00) + - RCTTypeSafety + - React-Core/RCTAnimationHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - React-RCTAppDelegate (0.78.2): + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-CoreModules + - React-debug + - React-defaultsnativemodule + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-NativeModulesApple + - React-RCTFabric + - React-RCTFBReactNativeSpec + - React-RCTImage + - React-RCTNetwork + - React-rendererdebug + - React-RuntimeApple + - React-RuntimeCore + - React-RuntimeHermes + - React-runtimescheduler + - React-utils + - ReactCommon + - React-RCTBlob (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-Core/RCTBlobHeaders + - React-Core/RCTWebSocket + - React-jsi + - React-jsinspector + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - React-RCTNetwork + - ReactCommon + - React-RCTFabric (0.78.2): + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - React-Core + - React-debug + - React-Fabric + - React-FabricComponents + - React-FabricImage + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-jsinspector + - React-jsinspectortracing + - React-performancetimeline + - React-RCTImage + - React-RCTText + - React-rendererconsistency + - React-rendererdebug + - React-runtimescheduler + - React-utils + - Yoga + - React-RCTFBReactNativeSpec (0.78.2): + - hermes-engine + - RCT-Folly + - RCTRequired + - RCTTypeSafety + - React-Core + - React-jsi + - React-jsiexecutor + - React-NativeModulesApple + - ReactCommon + - React-RCTImage (0.78.2): + - RCT-Folly (= 2024.11.18.00) + - RCTTypeSafety + - React-Core/RCTImageHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - React-RCTNetwork + - ReactCommon + - React-RCTLinking (0.78.2): + - React-Core/RCTLinkingHeaders (= 0.78.2) + - React-jsi (= 0.78.2) + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - ReactCommon/turbomodule/core (= 0.78.2) + - React-RCTNetwork (0.78.2): + - RCT-Folly (= 2024.11.18.00) + - RCTTypeSafety + - React-Core/RCTNetworkHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - React-RCTSettings (0.78.2): + - RCT-Folly (= 2024.11.18.00) + - RCTTypeSafety + - React-Core/RCTSettingsHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - React-RCTText (0.78.2): + - React-Core/RCTTextHeaders (= 0.78.2) + - Yoga + - React-RCTVibration (0.78.2): + - RCT-Folly (= 2024.11.18.00) + - React-Core/RCTVibrationHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - React-rendererconsistency (0.78.2) + - React-rendererdebug (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - RCT-Folly (= 2024.11.18.00) + - React-debug + - React-rncore (0.78.2) + - React-RuntimeApple (0.78.2): + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - React-callinvoker + - React-Core/Default + - React-CoreModules + - React-cxxreact + - React-featureflags + - React-jserrorhandler + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-Mapbuffer + - React-NativeModulesApple + - React-RCTFabric + - React-RCTFBReactNativeSpec + - React-RuntimeCore + - React-runtimeexecutor + - React-RuntimeHermes + - React-runtimescheduler + - React-utils + - React-RuntimeCore (0.78.2): + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - React-cxxreact + - React-Fabric + - React-featureflags + - React-jserrorhandler + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-performancetimeline + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - React-runtimeexecutor (0.78.2): + - React-jsi (= 0.78.2) + - React-RuntimeHermes (0.78.2): + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - React-featureflags + - React-hermes + - React-jsi + - React-jsinspector + - React-jsitracing + - React-RuntimeCore + - React-utils + - React-runtimescheduler (0.78.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-callinvoker + - React-cxxreact + - React-debug + - React-featureflags + - React-jsi + - React-performancetimeline + - React-rendererconsistency + - React-rendererdebug + - React-runtimeexecutor + - React-timing + - React-utils + - React-timing (0.78.2) + - React-utils (0.78.2): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-debug + - React-jsi (= 0.78.2) + - ReactAppDependencyProvider (0.78.2): + - ReactCodegen + - ReactCodegen (0.78.2): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-FabricImage + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-NativeModulesApple + - React-RCTAppDelegate + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - ReactCommon (0.78.2): + - ReactCommon/turbomodule (= 0.78.2) + - ReactCommon/turbomodule (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-callinvoker (= 0.78.2) + - React-cxxreact (= 0.78.2) + - React-jsi (= 0.78.2) + - React-logger (= 0.78.2) + - React-perflogger (= 0.78.2) + - ReactCommon/turbomodule/bridging (= 0.78.2) + - ReactCommon/turbomodule/core (= 0.78.2) + - ReactCommon/turbomodule/bridging (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-callinvoker (= 0.78.2) + - React-cxxreact (= 0.78.2) + - React-jsi (= 0.78.2) + - React-logger (= 0.78.2) + - React-perflogger (= 0.78.2) + - ReactCommon/turbomodule/core (0.78.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-callinvoker (= 0.78.2) + - React-cxxreact (= 0.78.2) + - React-debug (= 0.78.2) + - React-featureflags (= 0.78.2) + - React-jsi (= 0.78.2) + - React-logger (= 0.78.2) + - React-perflogger (= 0.78.2) + - React-utils (= 0.78.2) + - RNScreens (4.11.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-RCTImage + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - RNScreens/common (= 4.11.0) + - Yoga + - RNScreens/common (4.11.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-RCTImage + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - SocketRocket (0.7.1) + - Yoga (0.0.0) + +DEPENDENCIES: + - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) + - "DatadogSDKReactNative (from `../node_modules/@datadog/mobile-react-native`)" + - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) + - 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`) + - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) + - RCT-Folly/Fabric (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) + - RCTDeprecation (from `../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) + - RCTRequired (from `../node_modules/react-native/Libraries/Required`) + - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) + - React (from `../node_modules/react-native/`) + - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) + - React-Core (from `../node_modules/react-native/`) + - React-Core/RCTWebSocket (from `../node_modules/react-native/`) + - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) + - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) + - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`) + - React-defaultsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/defaults`) + - React-domnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/dom`) + - React-Fabric (from `../node_modules/react-native/ReactCommon`) + - React-FabricComponents (from `../node_modules/react-native/ReactCommon`) + - React-FabricImage (from `../node_modules/react-native/ReactCommon`) + - React-featureflags (from `../node_modules/react-native/ReactCommon/react/featureflags`) + - React-featureflagsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/featureflags`) + - React-graphics (from `../node_modules/react-native/ReactCommon/react/renderer/graphics`) + - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) + - React-idlecallbacksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks`) + - React-ImageManager (from `../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`) + - React-jserrorhandler (from `../node_modules/react-native/ReactCommon/jserrorhandler`) + - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) + - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) + - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector-modern`) + - React-jsinspectortracing (from `../node_modules/react-native/ReactCommon/jsinspector-modern/tracing`) + - React-jsitracing (from `../node_modules/react-native/ReactCommon/hermes/executor/`) + - 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-native-config (from `../../node_modules/react-native-config`) + - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) + - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) + - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) + - React-performancetimeline (from `../node_modules/react-native/ReactCommon/react/performance/timeline`) + - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) + - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) + - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`) + - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) + - React-RCTFabric (from `../node_modules/react-native/React`) + - React-RCTFBReactNativeSpec (from `../node_modules/react-native/React`) + - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) + - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) + - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`) + - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) + - React-RCTText (from `../node_modules/react-native/Libraries/Text`) + - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) + - React-rendererconsistency (from `../node_modules/react-native/ReactCommon/react/renderer/consistency`) + - React-rendererdebug (from `../node_modules/react-native/ReactCommon/react/renderer/debug`) + - React-rncore (from `../node_modules/react-native/ReactCommon`) + - React-RuntimeApple (from `../node_modules/react-native/ReactCommon/react/runtime/platform/ios`) + - React-RuntimeCore (from `../node_modules/react-native/ReactCommon/react/runtime`) + - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) + - React-RuntimeHermes (from `../node_modules/react-native/ReactCommon/react/runtime`) + - 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`) + - ReactAppDependencyProvider (from `build/generated/ios`) + - ReactCodegen (from `build/generated/ios`) + - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) + - RNScreens (from `../node_modules/react-native-screens`) + - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) + +SPEC REPOS: + trunk: + - DatadogCore + - DatadogCrashReporting + - DatadogInternal + - DatadogLogs + - DatadogRUM + - DatadogTrace + - DatadogWebViewTracking + - OpenTelemetrySwiftApi + - PLCrashReporter + - SocketRocket + +EXTERNAL SOURCES: + boost: + :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" + DatadogSDKReactNative: + :path: "../node_modules/@datadog/mobile-react-native" + 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-2025-01-13-RNv0.78.0-a942ef374897d85da38e9c8904574f8376555388 + RCT-Folly: + :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" + RCTDeprecation: + :path: "../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation" + RCTRequired: + :path: "../node_modules/react-native/Libraries/Required" + RCTTypeSafety: + :path: "../node_modules/react-native/Libraries/TypeSafety" + React: + :path: "../node_modules/react-native/" + React-callinvoker: + :path: "../node_modules/react-native/ReactCommon/callinvoker" + React-Core: + :path: "../node_modules/react-native/" + React-CoreModules: + :path: "../node_modules/react-native/React/CoreModules" + React-cxxreact: + :path: "../node_modules/react-native/ReactCommon/cxxreact" + React-debug: + :path: "../node_modules/react-native/ReactCommon/react/debug" + React-defaultsnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/defaults" + React-domnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/dom" + React-Fabric: + :path: "../node_modules/react-native/ReactCommon" + React-FabricComponents: + :path: "../node_modules/react-native/ReactCommon" + React-FabricImage: + :path: "../node_modules/react-native/ReactCommon" + React-featureflags: + :path: "../node_modules/react-native/ReactCommon/react/featureflags" + React-featureflagsnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/featureflags" + React-graphics: + :path: "../node_modules/react-native/ReactCommon/react/renderer/graphics" + React-hermes: + :path: "../node_modules/react-native/ReactCommon/hermes" + React-idlecallbacksnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks" + React-ImageManager: + :path: "../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios" + React-jserrorhandler: + :path: "../node_modules/react-native/ReactCommon/jserrorhandler" + React-jsi: + :path: "../node_modules/react-native/ReactCommon/jsi" + React-jsiexecutor: + :path: "../node_modules/react-native/ReactCommon/jsiexecutor" + React-jsinspector: + :path: "../node_modules/react-native/ReactCommon/jsinspector-modern" + React-jsinspectortracing: + :path: "../node_modules/react-native/ReactCommon/jsinspector-modern/tracing" + React-jsitracing: + :path: "../node_modules/react-native/ReactCommon/hermes/executor/" + React-logger: + :path: "../node_modules/react-native/ReactCommon/logger" + React-Mapbuffer: + :path: "../node_modules/react-native/ReactCommon" + React-microtasksnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/microtasks" + react-native-config: + :path: "../../node_modules/react-native-config" + react-native-safe-area-context: + :path: "../node_modules/react-native-safe-area-context" + React-NativeModulesApple: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios" + React-perflogger: + :path: "../node_modules/react-native/ReactCommon/reactperflogger" + React-performancetimeline: + :path: "../node_modules/react-native/ReactCommon/react/performance/timeline" + React-RCTActionSheet: + :path: "../node_modules/react-native/Libraries/ActionSheetIOS" + React-RCTAnimation: + :path: "../node_modules/react-native/Libraries/NativeAnimation" + React-RCTAppDelegate: + :path: "../node_modules/react-native/Libraries/AppDelegate" + React-RCTBlob: + :path: "../node_modules/react-native/Libraries/Blob" + React-RCTFabric: + :path: "../node_modules/react-native/React" + React-RCTFBReactNativeSpec: + :path: "../node_modules/react-native/React" + React-RCTImage: + :path: "../node_modules/react-native/Libraries/Image" + React-RCTLinking: + :path: "../node_modules/react-native/Libraries/LinkingIOS" + React-RCTNetwork: + :path: "../node_modules/react-native/Libraries/Network" + React-RCTSettings: + :path: "../node_modules/react-native/Libraries/Settings" + React-RCTText: + :path: "../node_modules/react-native/Libraries/Text" + React-RCTVibration: + :path: "../node_modules/react-native/Libraries/Vibration" + React-rendererconsistency: + :path: "../node_modules/react-native/ReactCommon/react/renderer/consistency" + React-rendererdebug: + :path: "../node_modules/react-native/ReactCommon/react/renderer/debug" + React-rncore: + :path: "../node_modules/react-native/ReactCommon" + React-RuntimeApple: + :path: "../node_modules/react-native/ReactCommon/react/runtime/platform/ios" + React-RuntimeCore: + :path: "../node_modules/react-native/ReactCommon/react/runtime" + React-runtimeexecutor: + :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" + React-RuntimeHermes: + :path: "../node_modules/react-native/ReactCommon/react/runtime" + React-runtimescheduler: + :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler" + React-timing: + :path: "../node_modules/react-native/ReactCommon/react/timing" + React-utils: + :path: "../node_modules/react-native/ReactCommon/react/utils" + ReactAppDependencyProvider: + :path: build/generated/ios + ReactCodegen: + :path: build/generated/ios + ReactCommon: + :path: "../node_modules/react-native/ReactCommon" + RNScreens: + :path: "../node_modules/react-native-screens" + Yoga: + :path: "../node_modules/react-native/ReactCommon/yoga" + +SPEC CHECKSUMS: + boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 + DatadogCore: 68aee4ffcc3ea17a3b0aa527907757883fc72c84 + DatadogCrashReporting: e6a83b143394e28c9c1cb48c5cfb18eff507b3be + DatadogInternal: 3c5cae6772295fd175a9de11e4747a9322aaa4e7 + DatadogLogs: 09d6358dc7682f9d3eaea85dd418f82d2db3560c + DatadogRUM: 0f267df8c9c8579a291870c2bce4549587391a07 + DatadogSDKReactNative: 41500432b5a826ba95715dccd3f2fb4fa32f37e6 + DatadogTrace: f46c8220c73463d09741013f385a6e27cd39185b + DatadogWebViewTracking: dc8376420c8686efd09d00752bc1034b639d180b + DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb + fast_float: 06eeec4fe712a76acc9376682e4808b05ce978b6 + FBLazyVector: e32d34492c519a2194ec9d7f5e7a79d11b73f91c + fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd + glog: eb93e2f488219332457c3c4eafd2738ddc7e80b8 + hermes-engine: 2771b98fb813fdc6f92edd7c9c0035ecabf9fee7 + OpenTelemetrySwiftApi: aaee576ed961e0c348af78df58b61300e95bd104 + PLCrashReporter: db59ef96fa3d25f3650040d02ec2798cffee75f2 + RCT-Folly: e78785aa9ba2ed998ea4151e314036f6c49e6d82 + RCTDeprecation: be794de7dc6ed8f9f7fbf525f86e7651b8b68746 + RCTRequired: a83787b092ec554c2eb6019ff3f5b8d125472b3b + RCTTypeSafety: 48ad3c858926b1c46f46a81a58822b476e178e2c + React: 3b5754191f1b65f1dbc52fbea7959c3d2d9e39c9 + React-callinvoker: 6beeaf4c7db11b6cc953fac45f2c76e3fb125013 + React-Core: 8a10ac9de53373a3ecb5dfcbcf56df1d3dad0861 + React-CoreModules: af6999b35c7c01b0e12b59d27f3e054e13da43b1 + React-cxxreact: 833f00155ce8c2fda17f6d286f8eaeff2ececc69 + React-debug: 440175830c448e7e53e61ebb8d8468c3256b645e + React-defaultsnativemodule: a970effe18fe50bdbbb7115c3297f873b666d0d4 + React-domnativemodule: 45f886342a724e61531b18fba1859bb6782e5d62 + React-Fabric: 69f1881f2177a8512304a64157943548ab6df0cf + React-FabricComponents: f54111c8e2439fc273ab07483e3a7054ca1e75af + React-FabricImage: 9ad2619dfe8c386d79e8aaa87da6e8f018ab9592 + React-featureflags: b9cf9b35baca1c7f20c06a104ffc325a02752faa + React-featureflagsnativemodule: 7f1bc76d1d2c5bede5e753b8d188dbde7c59b12f + React-graphics: 069e0d0b31ed1e80feb023ad4f7e97f00e84f7b9 + React-hermes: 63df5ac5a944889c8758a6213b39ed825863adb7 + React-idlecallbacksnativemodule: 4c700bd7c0012adf904929075a79418b828b5ffc + React-ImageManager: 5d1ba8a7bae44ebba43fc93da64937c713d42941 + React-jserrorhandler: 0defd58f8bb797cdd0a820f733bf42d8bee708ce + React-jsi: 99d6207ec802ad73473a0dad3c9ad48cd98463f6 + React-jsiexecutor: 8c8097b4ba7e7f480582d6e6238b01be5dcc01c0 + React-jsinspector: ea148ec45bc7ff830e443383ea715f9780c15934 + React-jsinspectortracing: 46bb2841982f01e7b63eaab98140fa1de5b2a1db + React-jsitracing: c1063fc2233960d1c8322291e74bca51d25c10d7 + React-logger: 763728cf4eebc9c5dc9bfc3649e22295784f69f3 + React-Mapbuffer: 63278529b5cf531a7eaf8fc71244fabb062ca90c + React-microtasksnativemodule: 6a39463c32ce831c4c2aa8469273114d894b6be9 + react-native-config: 644074ab88db883fcfaa584f03520ec29589d7df + react-native-safe-area-context: 9d7528d2e8fce82d20cb0b643c8be34a4ad57464 + React-NativeModulesApple: fd0545efbb7f936f78edd15a6564a72d2c34bb32 + React-perflogger: 5f8fa36a8e168fb355efe72099efe77213bc2ac6 + React-performancetimeline: 8c0ecfa1ae459cc5678a65f95ac3bf85644d6feb + React-RCTActionSheet: 2ef95837e89b9b154f13cd8401f9054fc3076aff + React-RCTAnimation: 46abefd5acfda7e6629f9e153646deecc70babd2 + React-RCTAppDelegate: 7e58e0299e304cceee3f7019fa77bc6990f66b22 + React-RCTBlob: f68c63a801ef1d27e83c4011e3b083cc86a200d7 + React-RCTFabric: c59f41d0c4edbaac8baa232731ca09925ae4dda7 + React-RCTFBReactNativeSpec: 3240b9b8d792aa4be0fb85c9898fc183125ba8de + React-RCTImage: 34e0bba1507e55f1c614bd759eb91d9be48c8c5b + React-RCTLinking: a0b6c9f4871c18b0b81ea952f43e752718bd5f1d + React-RCTNetwork: bdafd661ac2b20d23b779e45bf7ac3e4c8bd1b60 + React-RCTSettings: 98aa5163796f43789314787b584a84eba47787a9 + React-RCTText: 424a274fc9015b29de89cf3cbcdf4dd85dd69f83 + React-RCTVibration: 92d9875a955b0adb34b4b773528fdbbbc5addd6c + React-rendererconsistency: 5ac4164ec18cfdd76ed5f864dbfdc56a5a948bc9 + React-rendererdebug: 710dbd7990e355852c786aa6bc7753f6028f357a + React-rncore: 0bace3b991d8843bb5b57c5f2301ec6e9c94718b + React-RuntimeApple: 701ec44a8b5d863ee9b6a2b2447b6a26bb6805a1 + React-RuntimeCore: a82767065b9a936b05e209dc6987bc1ea9eb5d2d + React-runtimeexecutor: 876dfc1d8daa819dfd039c40f78f277c5a3e66a6 + React-RuntimeHermes: e7a051fd91cab8849df56ac917022ef6064ad621 + React-runtimescheduler: c544141f2124ee3d5f3d5bf0d69f4029a61a68b0 + React-timing: 1ee3572c398f5579c9df5bf76aacddf5683ff74e + React-utils: 18703928768cb37e70cf2efff09def12d74a399e + ReactAppDependencyProvider: 4893bde33952f997a323eb1a1ee87a72764018ff + ReactCodegen: da30aff1cea9b5993dcbc33bf1ef47a463c55194 + ReactCommon: 865ebe76504a95e115b6229dd00a31e56d2d4bfe + RNScreens: e0fb5d61ce1fd33f4988ec643a05da33a04fda25 + SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 + Yoga: e14bad835e12b6c7e2260fc320bd00e0f4b45add + +PODFILE CHECKSUM: 4410ec48cbe9f00cc7dce5aa595affed6a14ea0d + +COCOAPODS: 1.16.2 diff --git a/benchmarks/ios/main.m b/benchmarks/ios/main.m new file mode 100644 index 000000000..51ae013f8 --- /dev/null +++ b/benchmarks/ios/main.m @@ -0,0 +1,11 @@ +#import +#import "BenchmarkRunner-Swift.h" + +@interface AppDelegate : UIResponder +@end + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/benchmarks/jest.config.js b/benchmarks/jest.config.js new file mode 100644 index 000000000..8eb675e9b --- /dev/null +++ b/benchmarks/jest.config.js @@ -0,0 +1,3 @@ +module.exports = { + preset: 'react-native', +}; diff --git a/benchmarks/metro.config.js b/benchmarks/metro.config.js new file mode 100644 index 000000000..84b107529 --- /dev/null +++ b/benchmarks/metro.config.js @@ -0,0 +1,45 @@ +const path = require('path'); +const pakCore = require('../packages/core/package.json'); +const exclusionList = require('metro-config/src/defaults/exclusionList'); +const escape = require('escape-string-regexp'); +const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config'); + +const root = path.resolve(__dirname, '..'); +const modules = Object.keys({ + ...pakCore.peerDependencies +}); + +/** + * Metro configuration + * https://facebook.github.io/metro/docs/configuration + * + * @type {import('metro-config').MetroConfig} + */ +const config = { + projectRoot: __dirname, + watchFolders: [ + root + ], + resetCache: true, + // We need to make sure that only one version is loaded for peerDependencies + // So we denylist them at the root, and alias them to the versions in example's node_modules + // This block is very important, because otherwise things like React can be packed multiple times + // while it should be only one React instance in the runtime. exclusionList relies on the modules which are + // declared as peer dependencies in the core package. + resolver: { + blacklistRE: exclusionList( + modules.map( + m => + new RegExp( + `^${escape(path.join(root, 'node_modules', m))}\\/.*$` + ) + ) + ), + extraNodeModules: modules.reduce((acc, name) => { + acc[name] = path.join(__dirname, 'node_modules', name); + return acc; + }, {}) + }, +}; + +module.exports = mergeConfig(getDefaultConfig(__dirname), config); diff --git a/benchmarks/package.json b/benchmarks/package.json new file mode 100644 index 000000000..3b429bf8e --- /dev/null +++ b/benchmarks/package.json @@ -0,0 +1,56 @@ +{ + "name": "benchmark-runner", + "version": "0.0.1", + "private": true, + "scripts": { + "android": "react-native run-android", + "ios": "react-native run-ios", + "lint": "eslint .", + "start": "react-native start", + "test": "jest" + }, + "codegenConfig": { + "name": "BenchmarkVitalsSpec", + "type": "modules", + "jsSrcsDir": "src/specs", + "android": { + "javaPackageName": "com.benchmarkvitals" + }, + "library": "BenchmarkRunner" + }, + "dependencies": { + "@datadog/mobile-react-native": "workspace:packages/core", + "@react-navigation/bottom-tabs": "^7.3.12", + "@react-navigation/native": "^7.1.8", + "@react-navigation/native-stack": "^7.3.12", + "query-string": "9.1.1", + "react": "19.0.0", + "react-native": "0.78.2", + "react-native-config": "1.5.5", + "react-native-safe-area-context": "^5.4.0", + "react-native-screens": "^4.10.0" + }, + "devDependencies": { + "@babel/core": "7.25.2", + "@babel/preset-env": "7.25.3", + "@babel/runtime": "7.25.0", + "@react-native-community/cli": "15.0.1", + "@react-native-community/cli-platform-android": "15.0.1", + "@react-native-community/cli-platform-ios": "15.0.1", + "@react-native/babel-preset": "0.78.2", + "@react-native/eslint-config": "0.78.2", + "@react-native/metro-config": "0.78.2", + "@react-native/typescript-config": "0.78.2", + "@types/jest": "29.5.13", + "@types/react": "19.0.0", + "@types/react-test-renderer": "19.0.0", + "eslint": "8.19.0", + "jest": "29.6.3", + "prettier": "2.8.8", + "react-test-renderer": "19.0.0", + "typescript": "5.0.4" + }, + "engines": { + "node": ">=18" + } +} diff --git a/benchmarks/react-native-config.d.ts b/benchmarks/react-native-config.d.ts new file mode 100644 index 000000000..0de73ed3d --- /dev/null +++ b/benchmarks/react-native-config.d.ts @@ -0,0 +1,16 @@ +import { RunType, Scenario } from "./src/testSetup/types/testConfig"; + +declare module 'react-native-config' { + export interface NativeConfig { + DD_CLIENT_TOKEN?: string; + DD_API_KEY?: string; + DD_APP_ID?: string; + DD_SITE?: string; + DD_ENV?: string; + BENCH_SCENARIO?: Scenario; + BENCH_RUN_TYPE?: RunType; + } + + export const Config: NativeConfig; + export default Config; + } diff --git a/benchmarks/src/App.tsx b/benchmarks/src/App.tsx new file mode 100644 index 000000000..678800981 --- /dev/null +++ b/benchmarks/src/App.tsx @@ -0,0 +1,80 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +import React, { useEffect, useState } from 'react'; +import { + Linking, + Text, + View, +} from 'react-native'; +import { DEFAULT_ENV_TEST_CONFIG, getDatadogConfig, getTestConfigFromDeeplink, isValidScenario, startCollectingVitals, stopCollectingVitals } from './testSetup/testUtils'; +import { Command, Scenario } from './testSetup/types/testConfig'; +import type { TestConfig } from './testSetup/types/testConfig'; +import DefaultScenario from './scenario/Default/defaultScenario'; +import NavigationExampleScenario from './scenario/NavigationExample/navigationExampleScenario'; + +function App(): React.JSX.Element { + const [testConfig, setTestConfig] = useState(); + + useEffect(() => { + setupFromTestConfig(DEFAULT_ENV_TEST_CONFIG); + + Linking.getInitialURL().then(url => { + setupFromUrl(url); + }); + + const deeplinkListener = Linking.addEventListener('url', ({ url }) => { + setupFromUrl(url); + }) + + return () => { + deeplinkListener.remove(); + } + }, []); + + const setupFromTestConfig = async (testConfig: TestConfig | undefined) => { + switch (testConfig?.command) { + case Command.Start: + if (isValidScenario(testConfig?.scenario)) { + const datadogConfig = getDatadogConfig(); + testConfig.datadogConfig = datadogConfig; + + await startCollectingVitals(testConfig, datadogConfig); + + // Starts running the Scenario + setTestConfig(testConfig); + } + break; + case Command.Stop: + setTestConfig(undefined); + await stopCollectingVitals(); + break; + } + } + + const setupFromUrl = (url: string | null | undefined) => { + if (url) { + const newTestConfig = getTestConfigFromDeeplink(url); + setupFromTestConfig(newTestConfig); + } + } + + switch(testConfig?.scenario) { + case Scenario.Default: + return ; + case Scenario.NavigationExample: + return ; + // Add new scenarios here + default: + return ( + + No scenario loaded + + ); + } +} + +export default App; diff --git a/benchmarks/src/scenario/Default/defaultScenario.tsx b/benchmarks/src/scenario/Default/defaultScenario.tsx new file mode 100644 index 000000000..c1d85a27b --- /dev/null +++ b/benchmarks/src/scenario/Default/defaultScenario.tsx @@ -0,0 +1,30 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +import React, { useEffect } from 'react'; +import { + Text, + View, +} from 'react-native'; +import type { DefaultScenarioProps } from './types'; +import { RunType } from '../../testSetup/types/testConfig'; +import { instrument } from '../../testSetup/testUtils'; + +function DefaultScenario(props: DefaultScenarioProps): React.JSX.Element { + useEffect(() => { + if (props.testConfig?.runType !== RunType.BASELINE) { + instrument(); + } + }, []); + + return ( + + {'Default Scenario'} + + ); +} + +export default DefaultScenario; diff --git a/benchmarks/src/scenario/Default/types.ts b/benchmarks/src/scenario/Default/types.ts new file mode 100644 index 000000000..d74aa5935 --- /dev/null +++ b/benchmarks/src/scenario/Default/types.ts @@ -0,0 +1,11 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +import type { TestConfig } from "../../testSetup/types/testConfig" + +export type DefaultScenarioProps = { + testConfig?: TestConfig, +} \ No newline at end of file diff --git a/benchmarks/src/scenario/NavigationExample/navigationExampleScenario.tsx b/benchmarks/src/scenario/NavigationExample/navigationExampleScenario.tsx new file mode 100644 index 000000000..d7cb2e239 --- /dev/null +++ b/benchmarks/src/scenario/NavigationExample/navigationExampleScenario.tsx @@ -0,0 +1,53 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +import React, { useEffect } from 'react'; +import { + Text, + View, +} from 'react-native'; +import { NavigationContainer } from '@react-navigation/native'; +import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; +import type { NavigationExampleScenarioProps } from './types'; +import { RunType } from '../../testSetup/types/testConfig'; +import { instrument } from '../../testSetup/testUtils'; + +function NavigationExampleScenario(props: NavigationExampleScenarioProps): React.JSX.Element { + useEffect(() => { + if (props.testConfig?.runType !== RunType.BASELINE) { + instrument(); + } + }, []); + + function FirstTabScreen() { + return ( + + {'Navigation Example Scenario - First Tab'} + + ); + } + + function SecondTabScreen() { + return ( + + {'Navigation Example Scenario - Second Tab'} + + ); + } + + const Tabs = createBottomTabNavigator(); + + return ( + + + + + + + ) +} + +export default NavigationExampleScenario; diff --git a/benchmarks/src/scenario/NavigationExample/types.ts b/benchmarks/src/scenario/NavigationExample/types.ts new file mode 100644 index 000000000..02c9cd336 --- /dev/null +++ b/benchmarks/src/scenario/NavigationExample/types.ts @@ -0,0 +1,11 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +import type { TestConfig } from "../../testSetup/types/testConfig" + +export type NavigationExampleScenarioProps = { + testConfig?: TestConfig, +} \ No newline at end of file diff --git a/benchmarks/src/specs/NativeBenchmarkVitals.ts b/benchmarks/src/specs/NativeBenchmarkVitals.ts new file mode 100644 index 000000000..55fb248f5 --- /dev/null +++ b/benchmarks/src/specs/NativeBenchmarkVitals.ts @@ -0,0 +1,15 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +import type { TurboModule } from "react-native"; +import { TurboModuleRegistry } from "react-native"; + +export interface Spec extends TurboModule { + startCollectingVitals(config: Object): Promise; + stopCollectingVitals(): Promise; +} + +export default TurboModuleRegistry.getEnforcing('BenchmarkVitals'); \ No newline at end of file diff --git a/benchmarks/src/testSetup/testUtils.ts b/benchmarks/src/testSetup/testUtils.ts new file mode 100644 index 000000000..9321b31d8 --- /dev/null +++ b/benchmarks/src/testSetup/testUtils.ts @@ -0,0 +1,100 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +import queryString from 'query-string'; +import { + DdLogs, + DdSdkReactNative, + DdSdkReactNativeConfiguration, + SdkVerbosity, + TrackingConsent +} from '@datadog/mobile-react-native'; +import Config from 'react-native-config'; +import BenchmarkVitals from '../specs/NativeBenchmarkVitals'; +import { Command, RunType, Scenario } from './types/testConfig'; +import type { DatadogConfig, NativeTestConfig, TestConfig } from './types/testConfig'; +import { Platform } from 'react-native'; + +export const DEFAULT_ENV_TEST_CONFIG: TestConfig = { + command: Command.Start, + scenario: Config.BENCH_SCENARIO, + runType: Config.BENCH_RUN_TYPE, +}; + +export const getDatadogConfig =(): DatadogConfig => { + return { + clientToken: Config.DD_CLIENT_TOKEN, + applicationID: Config.DD_APP_ID, + apiKey: Config.DD_API_KEY, + site: Config.DD_SITE, + env: Config.DD_ENV, + } +}; + +export const getTestConfigFromDeeplink = (url: string): TestConfig | undefined => { + try { + const parsed = queryString.parseUrl(url); + const command = parsed.url.split('://')[1]; + const scenario = parsed.query.scenario; + const runType = parsed.query.runType; + + const testConfig: TestConfig = { + command: command ? command as Command : undefined, + scenario: scenario ? scenario as Scenario : Scenario.Default, + runType: runType ? runType as RunType : RunType.BASELINE, + } + + return testConfig; + } catch( _error) { + return undefined; + } +}; + +export const startCollectingVitals = async (testConfig: TestConfig, datadogConfig: DatadogConfig) => { + const nativeTestConfig: NativeTestConfig = { + scenario: testConfig.scenario, + runType: testConfig.runType, + clientToken: datadogConfig.clientToken, + applicationID: datadogConfig.applicationID, + apiKey: datadogConfig.apiKey, + }; + + await BenchmarkVitals?.startCollectingVitals(nativeTestConfig); +}; + +export const stopCollectingVitals = async () => { + await BenchmarkVitals?.stopCollectingVitals(); +}; + +export const instrument = () => { + const datadogConfig = getDatadogConfig(); + initializeDatadog(datadogConfig.clientToken, datadogConfig.env, datadogConfig.applicationID); +}; + +export const isValidScenario = (scenario?: string): boolean => { + return Object.values(Scenario).includes(scenario as Scenario); +}; + +export const initializeDatadog = (clientToken?: string, environment?: string, appId?: string) => { + const platform = Platform.OS; + const config = new DdSdkReactNativeConfiguration( + clientToken ?? '', + environment ?? '', + appId ?? '', + true, + true, + true, + TrackingConsent.GRANTED + ); + config.nativeCrashReportEnabled = true + config.sampleRate = 100 + config.serviceName = `com.rn.${platform}.benchmark` + config.verbosity = SdkVerbosity.DEBUG; + + DdSdkReactNative.initialize(config).then(() => { + DdLogs.info('Datadog RN SDK initialized') + }); +}; \ No newline at end of file diff --git a/benchmarks/src/testSetup/types/testConfig.ts b/benchmarks/src/testSetup/types/testConfig.ts new file mode 100644 index 000000000..a625a7f0d --- /dev/null +++ b/benchmarks/src/testSetup/types/testConfig.ts @@ -0,0 +1,45 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +export enum Command { + Start = 'start', + Stop = 'stop', +} + +export enum Scenario { + Default = 'default', + NavigationExample = 'navigation' + // Add new scenarios here +} + +export enum RunType { + BASELINE = 'baseline', + INSTRUMENTED = 'instrumented', + PROFILING ='profiling' +}; + +export interface TestConfig { + command?: Command; + scenario?: Scenario; + runType?: RunType; + datadogConfig?: DatadogConfig; +} + +export interface DatadogConfig { + clientToken?: string; + applicationID?: string; + apiKey?: string; + site?: string; + env?: string; +} + +export interface NativeTestConfig { + scenario?: Scenario; + runType?: RunType; + clientToken?: string; + applicationID?: string; + apiKey?: string; +} \ No newline at end of file diff --git a/benchmarks/tsconfig.json b/benchmarks/tsconfig.json new file mode 100644 index 000000000..243b9849b --- /dev/null +++ b/benchmarks/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "jsx": "react-native" + }, + "extends": "@react-native/typescript-config/tsconfig.json" +} diff --git a/package.json b/package.json index 97c91fe44..da3db0610 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,8 @@ "packages": [ "packages/*", "example", - "example-new-architecture" + "example-new-architecture", + "benchmarks" ] }, "scripts": { diff --git a/packages/core/android/build.gradle b/packages/core/android/build.gradle index 96f0e1bb4..8a28a11f8 100644 --- a/packages/core/android/build.gradle +++ b/packages/core/android/build.gradle @@ -192,10 +192,10 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" compileOnly "com.squareup.okhttp3:okhttp:3.12.13" - implementation "com.datadoghq:dd-sdk-android-rum:2.19.2" - implementation "com.datadoghq:dd-sdk-android-logs:2.19.2" - implementation "com.datadoghq:dd-sdk-android-trace:2.19.2" - implementation "com.datadoghq:dd-sdk-android-webview:2.19.2" + implementation "com.datadoghq:dd-sdk-android-rum:2.21.0" + implementation "com.datadoghq:dd-sdk-android-logs:2.21.0" + implementation "com.datadoghq:dd-sdk-android-trace:2.21.0" + implementation "com.datadoghq:dd-sdk-android-webview:2.21.0" implementation "com.google.code.gson:gson:2.10.0" testImplementation "org.junit.platform:junit-platform-launcher:1.6.2" testImplementation "org.junit.jupiter:junit-jupiter-api:5.6.2" diff --git a/packages/react-native-session-replay/android/build.gradle b/packages/react-native-session-replay/android/build.gradle index a7e019b1e..f55d1ac04 100644 --- a/packages/react-native-session-replay/android/build.gradle +++ b/packages/react-native-session-replay/android/build.gradle @@ -209,8 +209,8 @@ dependencies { api "com.facebook.react:react-android:$reactNativeVersion" } implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - implementation "com.datadoghq:dd-sdk-android-session-replay:2.19.2" - implementation "com.datadoghq:dd-sdk-android-internal:2.19.2" + implementation "com.datadoghq:dd-sdk-android-session-replay:2.21.0" + implementation "com.datadoghq:dd-sdk-android-internal:2.21.0" implementation project(path: ':datadog_mobile-react-native') testImplementation "org.junit.platform:junit-platform-launcher:1.6.2" diff --git a/yarn.lock b/yarn.lock index 379b5bb42..dcbfb5ca4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -774,33 +774,56 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.27.2": - version: 7.27.2 - resolution: "@babel/compat-data@npm:7.27.2" - checksum: 8d4066324e5f1275adc43f2e22110cac29ee09fe926260c43f0eaa432c148859367df4152574a28ee02dbb3e3d11dd57145eed345d49cc07f9b6e11fee06535f +"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.2, @babel/compat-data@npm:^7.27.2": + version: 7.27.3 + resolution: "@babel/compat-data@npm:7.27.3" + checksum: c6087989612312de697b21e6855d087c8b7376e5cf47e05a2a990fc67318e439e117ae2d977d317e5912e0323a3da13d6aca88348ef3c1218b0c74cc58b0a0cf languageName: node linkType: hard -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.13.16, @babel/core@npm:^7.18.5, @babel/core@npm:^7.23.9, @babel/core@npm:^7.25.2": - version: 7.27.1 - resolution: "@babel/core@npm:7.27.1" +"@babel/core@npm:7.25.2": + version: 7.25.2 + resolution: "@babel/core@npm:7.25.2" + dependencies: + "@ampproject/remapping": ^2.2.0 + "@babel/code-frame": ^7.24.7 + "@babel/generator": ^7.25.0 + "@babel/helper-compilation-targets": ^7.25.2 + "@babel/helper-module-transforms": ^7.25.2 + "@babel/helpers": ^7.25.0 + "@babel/parser": ^7.25.0 + "@babel/template": ^7.25.0 + "@babel/traverse": ^7.25.2 + "@babel/types": ^7.25.2 + convert-source-map: ^2.0.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.3 + semver: ^6.3.1 + checksum: 9a1ef604a7eb62195f70f9370cec45472a08114e3934e3eaaedee8fd754edf0730e62347c7b4b5e67d743ce57b5bb8cf3b92459482ca94d06e06246ef021390a + languageName: node + linkType: hard + +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.13.16, @babel/core@npm:^7.18.5, @babel/core@npm:^7.23.9, @babel/core@npm:^7.24.7, @babel/core@npm:^7.25.2": + version: 7.27.3 + resolution: "@babel/core@npm:7.27.3" dependencies: "@ampproject/remapping": ^2.2.0 "@babel/code-frame": ^7.27.1 - "@babel/generator": ^7.27.1 - "@babel/helper-compilation-targets": ^7.27.1 - "@babel/helper-module-transforms": ^7.27.1 - "@babel/helpers": ^7.27.1 - "@babel/parser": ^7.27.1 - "@babel/template": ^7.27.1 - "@babel/traverse": ^7.27.1 - "@babel/types": ^7.27.1 + "@babel/generator": ^7.27.3 + "@babel/helper-compilation-targets": ^7.27.2 + "@babel/helper-module-transforms": ^7.27.3 + "@babel/helpers": ^7.27.3 + "@babel/parser": ^7.27.3 + "@babel/template": ^7.27.2 + "@babel/traverse": ^7.27.3 + "@babel/types": ^7.27.3 convert-source-map: ^2.0.0 debug: ^4.1.0 gensync: ^1.0.0-beta.2 json5: ^2.2.3 semver: ^6.3.1 - checksum: fce205f9eea387ed8a9c6de64e5a8f50256359bfc8f1352c576c843b4c148a6c2ef187cfe8d729453e520fdcc997f65920aca6cb8911fb25dfd2286966b9b914 + checksum: d70d5e4e99d87d07e9dd51ef20f6558e2145562c6bab9db4b26a9d1ca3fe96db87f3b0385d85df6e6582faf623e4bec4150a417095fdb598956dbd8608cd6270 languageName: node linkType: hard @@ -818,29 +841,29 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.25.0, @babel/generator@npm:^7.27.1, @babel/generator@npm:^7.7.2": - version: 7.27.1 - resolution: "@babel/generator@npm:7.27.1" +"@babel/generator@npm:^7.25.0, @babel/generator@npm:^7.27.3, @babel/generator@npm:^7.7.2": + version: 7.27.3 + resolution: "@babel/generator@npm:7.27.3" dependencies: - "@babel/parser": ^7.27.1 - "@babel/types": ^7.27.1 + "@babel/parser": ^7.27.3 + "@babel/types": ^7.27.3 "@jridgewell/gen-mapping": ^0.3.5 "@jridgewell/trace-mapping": ^0.3.25 jsesc: ^3.0.2 - checksum: d5e220eb20aca1d93aef85c4c716237f84c5aab7d3ed8dfeb7060dcd73d20c593a687fe74cfb6d3dc1604ef9faff2ca24e6cfdb1af18e03e3a5f9f63a04c0bdc + checksum: c0b1b399ff62fa0f1903679ab2b088fd4312c33154c0ae78228094c196ecf53ce8e525b8f5e537ac3117ff9a49cdf7b3640f129114908dfadc6541853f3747a2 languageName: node linkType: hard "@babel/helper-annotate-as-pure@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-annotate-as-pure@npm:7.27.1" + version: 7.27.3 + resolution: "@babel/helper-annotate-as-pure@npm:7.27.3" dependencies: - "@babel/types": ^7.27.1 - checksum: 3f8e4d591458d6c0621a3d670f8798b8895580214287390126e3e621ddf3df0bd07cbcc9500c2671b9ec10162c2f9feb1194da5cf039d40df8cb69d181fc0cd8 + "@babel/types": ^7.27.3 + checksum: 63863a5c936ef82b546ca289c9d1b18fabfc24da5c4ee382830b124e2e79b68d626207febc8d4bffc720f50b2ee65691d7d12cc0308679dee2cd6bdc926b7190 languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.27.1, @babel/helper-compilation-targets@npm:^7.27.2": +"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.25.2, @babel/helper-compilation-targets@npm:^7.27.1, @babel/helper-compilation-targets@npm:^7.27.2": version: 7.27.2 resolution: "@babel/helper-compilation-targets@npm:7.27.2" dependencies: @@ -883,7 +906,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-define-polyfill-provider@npm:^0.6.3, @babel/helper-define-polyfill-provider@npm:^0.6.4": +"@babel/helper-define-polyfill-provider@npm:^0.6.2, @babel/helper-define-polyfill-provider@npm:^0.6.3, @babel/helper-define-polyfill-provider@npm:^0.6.4": version: 0.6.4 resolution: "@babel/helper-define-polyfill-provider@npm:0.6.4" dependencies: @@ -918,16 +941,16 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-module-transforms@npm:7.27.1" +"@babel/helper-module-transforms@npm:^7.25.2, @babel/helper-module-transforms@npm:^7.27.1, @babel/helper-module-transforms@npm:^7.27.3": + version: 7.27.3 + resolution: "@babel/helper-module-transforms@npm:7.27.3" dependencies: "@babel/helper-module-imports": ^7.27.1 "@babel/helper-validator-identifier": ^7.27.1 - "@babel/traverse": ^7.27.1 + "@babel/traverse": ^7.27.3 peerDependencies: "@babel/core": ^7.0.0 - checksum: 816dd166f0a850616d01ca198715d78fef052a834dc155dd57e4405d702f288071077be3ed58e13c86ac9e63ca560e876cc6d70cf5ef0f1f62bd9321084d4c06 + checksum: c611d42d3cb7ba23b1a864fcf8d6cde0dc99e876ca1c9a67e4d7919a70706ded4aaa45420de2bf7f7ea171e078e59f0edcfa15a56d74b9485e151b95b93b946e languageName: node linkType: hard @@ -940,7 +963,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.27.1, @babel/helper-plugin-utils@npm:^7.8.0": +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.24.8, @babel/helper-plugin-utils@npm:^7.27.1, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": version: 7.27.1 resolution: "@babel/helper-plugin-utils@npm:7.27.1" checksum: 5d715055301badab62bdb2336075a77f8dc8bd290cad2bc1b37ea3bf1b3efc40594d308082229f239deb4d6b5b80b0a73bce000e595ea74416e0339c11037047 @@ -997,7 +1020,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.27.1": +"@babel/helper-validator-option@npm:^7.24.8, @babel/helper-validator-option@npm:^7.27.1": version: 7.27.1 resolution: "@babel/helper-validator-option@npm:7.27.1" checksum: db73e6a308092531c629ee5de7f0d04390835b21a263be2644276cb27da2384b64676cab9f22cd8d8dbd854c92b1d7d56fc8517cf0070c35d1c14a8c828b0903 @@ -1015,28 +1038,28 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helpers@npm:7.27.1" +"@babel/helpers@npm:^7.25.0, @babel/helpers@npm:^7.27.3": + version: 7.27.3 + resolution: "@babel/helpers@npm:7.27.3" dependencies: - "@babel/template": ^7.27.1 - "@babel/types": ^7.27.1 - checksum: 19ede1e996cbd295fb3a881ff70bc0f91c5133ebac256441e9ecd69dfba89456e75cf7ecf06cd276c638a4de7bd6eff21151961c78038d0b23d94b4d23415ee4 + "@babel/template": ^7.27.2 + "@babel/types": ^7.27.3 + checksum: c572acf07cb4248a67eca76c9bfa6d4f120594e0c73ae6b014159509583981a519935f8997f611896272a1d38dc46dbb8e81f645ab52ad82da78a930b2dd4e8c languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.25.3, @babel/parser@npm:^7.27.1, @babel/parser@npm:^7.27.2": - version: 7.27.2 - resolution: "@babel/parser@npm:7.27.2" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.24.7, @babel/parser@npm:^7.25.0, @babel/parser@npm:^7.25.3, @babel/parser@npm:^7.27.2, @babel/parser@npm:^7.27.3": + version: 7.27.3 + resolution: "@babel/parser@npm:7.27.3" dependencies: - "@babel/types": ^7.27.1 + "@babel/types": ^7.27.3 bin: parser: ./bin/babel-parser.js - checksum: 1ac70a75028f1cc10eefb10ed2d83cf700ca3e1ddb4cf556a003fc5c4ca53ae83350bbb8065020fcc70d476fcf7bf1c17191b72384f719614ae18397142289cf + checksum: aef2cfd154e47a639615d173d3f05a8ce8007fcc5a0ade013c953adee71a8bc19465a147e060cc67388fd748b62a3b42bf3b5cc3e83d4f8add526b3b722e2231 languageName: node linkType: hard -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.27.1": +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.3, @babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.27.1" dependencies: @@ -1048,7 +1071,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.27.1": +"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.25.0, @babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.27.1" dependencies: @@ -1059,7 +1082,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.27.1": +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.25.0, @babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.27.1" dependencies: @@ -1070,7 +1093,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.27.1": +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.24.7, @babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.27.1" dependencies: @@ -1083,7 +1106,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.27.1": +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.25.0, @babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.27.1" dependencies: @@ -1218,6 +1241,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-export-namespace-from@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-export-namespace-from@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 85740478be5b0de185228e7814451d74ab8ce0a26fcca7613955262a26e99e8e15e9da58f60c754b84515d4c679b590dbd3f2148f0f58025f4ae706f1c5a5d4a + languageName: node + linkType: hard + "@babel/plugin-syntax-flow@npm:^7.12.1, @babel/plugin-syntax-flow@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-syntax-flow@npm:7.27.1" @@ -1229,7 +1263,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-import-assertions@npm:^7.27.1": +"@babel/plugin-syntax-import-assertions@npm:^7.24.7, @babel/plugin-syntax-import-assertions@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-syntax-import-assertions@npm:7.27.1" dependencies: @@ -1406,7 +1440,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-async-generator-functions@npm:^7.25.4, @babel/plugin-transform-async-generator-functions@npm:^7.27.1": +"@babel/plugin-transform-async-generator-functions@npm:^7.25.0, @babel/plugin-transform-async-generator-functions@npm:^7.25.4, @babel/plugin-transform-async-generator-functions@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-async-generator-functions@npm:7.27.1" dependencies: @@ -1432,7 +1466,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-block-scoped-functions@npm:^7.27.1": +"@babel/plugin-transform-block-scoped-functions@npm:^7.24.7, @babel/plugin-transform-block-scoped-functions@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.27.1" dependencies: @@ -1444,17 +1478,17 @@ __metadata: linkType: hard "@babel/plugin-transform-block-scoping@npm:^7.25.0, @babel/plugin-transform-block-scoping@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-block-scoping@npm:7.27.1" + version: 7.27.3 + resolution: "@babel/plugin-transform-block-scoping@npm:7.27.3" dependencies: "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 490773ee111fd298d74bd0ba454c941ae23a39db5cd08bf4258997f44f7584399fc4214a7c3816ee70f0273c263fe2ea4e11bb07939e57845702ba05258a9cb0 + checksum: 03e85d9a5578e4a22618ae9b010cdbb883b8fea100007f81e919cbd37704d6b237ce657ab9320d216c84a8212239662252d5eb60f2d45520346c8722050e1624 languageName: node linkType: hard -"@babel/plugin-transform-class-properties@npm:^7.25.4, @babel/plugin-transform-class-properties@npm:^7.27.1": +"@babel/plugin-transform-class-properties@npm:^7.24.7, @babel/plugin-transform-class-properties@npm:^7.25.4, @babel/plugin-transform-class-properties@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-class-properties@npm:7.27.1" dependencies: @@ -1466,7 +1500,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-class-static-block@npm:^7.27.1": +"@babel/plugin-transform-class-static-block@npm:^7.24.7, @babel/plugin-transform-class-static-block@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-class-static-block@npm:7.27.1" dependencies: @@ -1478,7 +1512,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.25.4, @babel/plugin-transform-classes@npm:^7.27.1": +"@babel/plugin-transform-classes@npm:^7.25.0, @babel/plugin-transform-classes@npm:^7.25.4, @babel/plugin-transform-classes@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-classes@npm:7.27.1" dependencies: @@ -1506,18 +1540,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.24.8, @babel/plugin-transform-destructuring@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-destructuring@npm:7.27.1" +"@babel/plugin-transform-destructuring@npm:^7.24.8, @babel/plugin-transform-destructuring@npm:^7.27.1, @babel/plugin-transform-destructuring@npm:^7.27.3": + version: 7.27.3 + resolution: "@babel/plugin-transform-destructuring@npm:7.27.3" dependencies: "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 492013fc4befd5f3554853f983b82cfa748dd2004a525f1f16a37f841ac402a51e891cac2084b03e2b89553f0e1e685cf5bf8bf9df8fed82114c580b3c567bb6 + checksum: 1b00a609e6292a1e48104d63dd479a688e773dcf42c715f7b342ba1725ae9335d75c8569aa0518388ed359f98f0b7155fd7bb0453fbc36445e986b17e5ccaa98 languageName: node linkType: hard -"@babel/plugin-transform-dotall-regex@npm:^7.27.1": +"@babel/plugin-transform-dotall-regex@npm:^7.24.7, @babel/plugin-transform-dotall-regex@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-dotall-regex@npm:7.27.1" dependencies: @@ -1529,7 +1563,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-duplicate-keys@npm:^7.27.1": +"@babel/plugin-transform-duplicate-keys@npm:^7.24.7, @babel/plugin-transform-duplicate-keys@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-duplicate-keys@npm:7.27.1" dependencies: @@ -1540,7 +1574,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.27.1": +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.25.0, @babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.27.1" dependencies: @@ -1552,7 +1586,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-dynamic-import@npm:^7.27.1": +"@babel/plugin-transform-dynamic-import@npm:^7.24.7, @babel/plugin-transform-dynamic-import@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-dynamic-import@npm:7.27.1" dependencies: @@ -1563,7 +1597,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-exponentiation-operator@npm:^7.27.1": +"@babel/plugin-transform-exponentiation-operator@npm:^7.24.7, @babel/plugin-transform-exponentiation-operator@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.27.1" dependencies: @@ -1574,7 +1608,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-export-namespace-from@npm:^7.27.1": +"@babel/plugin-transform-export-namespace-from@npm:^7.24.7, @babel/plugin-transform-export-namespace-from@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-export-namespace-from@npm:7.27.1" dependencies: @@ -1622,7 +1656,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-json-strings@npm:^7.27.1": +"@babel/plugin-transform-json-strings@npm:^7.24.7, @babel/plugin-transform-json-strings@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-json-strings@npm:7.27.1" dependencies: @@ -1655,7 +1689,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-member-expression-literals@npm:^7.27.1": +"@babel/plugin-transform-member-expression-literals@npm:^7.24.7, @babel/plugin-transform-member-expression-literals@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-member-expression-literals@npm:7.27.1" dependencies: @@ -1666,7 +1700,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-amd@npm:^7.27.1": +"@babel/plugin-transform-modules-amd@npm:^7.24.7, @babel/plugin-transform-modules-amd@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-modules-amd@npm:7.27.1" dependencies: @@ -1678,7 +1712,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.13.8, @babel/plugin-transform-modules-commonjs@npm:^7.24.8, @babel/plugin-transform-modules-commonjs@npm:^7.27.1": +"@babel/plugin-transform-modules-commonjs@npm:^7.13.8, @babel/plugin-transform-modules-commonjs@npm:^7.24.7, @babel/plugin-transform-modules-commonjs@npm:^7.24.8, @babel/plugin-transform-modules-commonjs@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-modules-commonjs@npm:7.27.1" dependencies: @@ -1690,7 +1724,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.27.1": +"@babel/plugin-transform-modules-systemjs@npm:^7.25.0, @babel/plugin-transform-modules-systemjs@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-modules-systemjs@npm:7.27.1" dependencies: @@ -1704,7 +1738,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-umd@npm:^7.27.1": +"@babel/plugin-transform-modules-umd@npm:^7.24.7, @babel/plugin-transform-modules-umd@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-modules-umd@npm:7.27.1" dependencies: @@ -1728,7 +1762,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-new-target@npm:^7.27.1": +"@babel/plugin-transform-new-target@npm:^7.24.7, @babel/plugin-transform-new-target@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-new-target@npm:7.27.1" dependencies: @@ -1762,20 +1796,20 @@ __metadata: linkType: hard "@babel/plugin-transform-object-rest-spread@npm:^7.24.7, @babel/plugin-transform-object-rest-spread@npm:^7.27.2": - version: 7.27.2 - resolution: "@babel/plugin-transform-object-rest-spread@npm:7.27.2" + version: 7.27.3 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.27.3" dependencies: "@babel/helper-compilation-targets": ^7.27.2 "@babel/helper-plugin-utils": ^7.27.1 - "@babel/plugin-transform-destructuring": ^7.27.1 + "@babel/plugin-transform-destructuring": ^7.27.3 "@babel/plugin-transform-parameters": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 6d518c21cddfa436029d72409aac8f680d3ba3a10eb94477112869132226498474a61218893ac9958f8bc079109af0f684d1347d5036fee8e9b477daecf2d8f3 + checksum: 624db8badc844d3256ce9b5d062f1716f01c15ab3ed023dc971eb8083bba55e83be8dc25971b4570d2cd8979eb2c61a3b08d332bd0ec1816ee8afbf1659472bf languageName: node linkType: hard -"@babel/plugin-transform-object-super@npm:^7.27.1": +"@babel/plugin-transform-object-super@npm:^7.24.7, @babel/plugin-transform-object-super@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-object-super@npm:7.27.1" dependencies: @@ -1798,7 +1832,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-optional-chaining@npm:^7.24.8, @babel/plugin-transform-optional-chaining@npm:^7.27.1": +"@babel/plugin-transform-optional-chaining@npm:^7.24.7, @babel/plugin-transform-optional-chaining@npm:^7.24.8, @babel/plugin-transform-optional-chaining@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-optional-chaining@npm:7.27.1" dependencies: @@ -1846,7 +1880,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-property-literals@npm:^7.27.1": +"@babel/plugin-transform-property-literals@npm:^7.24.7, @babel/plugin-transform-property-literals@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-property-literals@npm:7.27.1" dependencies: @@ -1951,7 +1985,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-reserved-words@npm:^7.27.1": +"@babel/plugin-transform-reserved-words@npm:^7.24.7, @babel/plugin-transform-reserved-words@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-reserved-words@npm:7.27.1" dependencies: @@ -1963,8 +1997,8 @@ __metadata: linkType: hard "@babel/plugin-transform-runtime@npm:^7.24.7, @babel/plugin-transform-runtime@npm:^7.25.0": - version: 7.27.1 - resolution: "@babel/plugin-transform-runtime@npm:7.27.1" + version: 7.27.3 + resolution: "@babel/plugin-transform-runtime@npm:7.27.3" dependencies: "@babel/helper-module-imports": ^7.27.1 "@babel/helper-plugin-utils": ^7.27.1 @@ -1974,7 +2008,7 @@ __metadata: semver: ^6.3.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 9328060b54e430732883cac672cfd4c952c2bf2d9fb5268c675ae01f74ccb224ecdf105f5ad52b6277ad8b34b6df1e7cec6d1c02a0d17be54414265414e8ac88 + checksum: 61b5a64e8206193b6ee30281e5e8949d9772504fb680b9fea628f4df7a80d08b1211cc1c3c2cb5d878d141af6fb1a4bb8ee8859ca7199fe8ea3999013eb17290 languageName: node linkType: hard @@ -2012,7 +2046,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-template-literals@npm:^7.27.1": +"@babel/plugin-transform-template-literals@npm:^7.24.7, @babel/plugin-transform-template-literals@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-template-literals@npm:7.27.1" dependencies: @@ -2023,7 +2057,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-typeof-symbol@npm:^7.27.1": +"@babel/plugin-transform-typeof-symbol@npm:^7.24.8, @babel/plugin-transform-typeof-symbol@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-typeof-symbol@npm:7.27.1" dependencies: @@ -2049,7 +2083,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-unicode-escapes@npm:^7.27.1": +"@babel/plugin-transform-unicode-escapes@npm:^7.24.7, @babel/plugin-transform-unicode-escapes@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-unicode-escapes@npm:7.27.1" dependencies: @@ -2060,7 +2094,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-unicode-property-regex@npm:^7.27.1": +"@babel/plugin-transform-unicode-property-regex@npm:^7.24.7, @babel/plugin-transform-unicode-property-regex@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.27.1" dependencies: @@ -2084,7 +2118,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-unicode-sets-regex@npm:^7.27.1": +"@babel/plugin-transform-unicode-sets-regex@npm:^7.24.7, @babel/plugin-transform-unicode-sets-regex@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.27.1" dependencies: @@ -2096,6 +2130,99 @@ __metadata: languageName: node linkType: hard +"@babel/preset-env@npm:7.25.3": + version: 7.25.3 + resolution: "@babel/preset-env@npm:7.25.3" + dependencies: + "@babel/compat-data": ^7.25.2 + "@babel/helper-compilation-targets": ^7.25.2 + "@babel/helper-plugin-utils": ^7.24.8 + "@babel/helper-validator-option": ^7.24.8 + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ^7.25.3 + "@babel/plugin-bugfix-safari-class-field-initializer-scope": ^7.25.0 + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.25.0 + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.24.7 + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ^7.25.0 + "@babel/plugin-proposal-private-property-in-object": 7.21.0-placeholder-for-preset-env.2 + "@babel/plugin-syntax-async-generators": ^7.8.4 + "@babel/plugin-syntax-class-properties": ^7.12.13 + "@babel/plugin-syntax-class-static-block": ^7.14.5 + "@babel/plugin-syntax-dynamic-import": ^7.8.3 + "@babel/plugin-syntax-export-namespace-from": ^7.8.3 + "@babel/plugin-syntax-import-assertions": ^7.24.7 + "@babel/plugin-syntax-import-attributes": ^7.24.7 + "@babel/plugin-syntax-import-meta": ^7.10.4 + "@babel/plugin-syntax-json-strings": ^7.8.3 + "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + "@babel/plugin-syntax-numeric-separator": ^7.10.4 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + "@babel/plugin-syntax-private-property-in-object": ^7.14.5 + "@babel/plugin-syntax-top-level-await": ^7.14.5 + "@babel/plugin-syntax-unicode-sets-regex": ^7.18.6 + "@babel/plugin-transform-arrow-functions": ^7.24.7 + "@babel/plugin-transform-async-generator-functions": ^7.25.0 + "@babel/plugin-transform-async-to-generator": ^7.24.7 + "@babel/plugin-transform-block-scoped-functions": ^7.24.7 + "@babel/plugin-transform-block-scoping": ^7.25.0 + "@babel/plugin-transform-class-properties": ^7.24.7 + "@babel/plugin-transform-class-static-block": ^7.24.7 + "@babel/plugin-transform-classes": ^7.25.0 + "@babel/plugin-transform-computed-properties": ^7.24.7 + "@babel/plugin-transform-destructuring": ^7.24.8 + "@babel/plugin-transform-dotall-regex": ^7.24.7 + "@babel/plugin-transform-duplicate-keys": ^7.24.7 + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": ^7.25.0 + "@babel/plugin-transform-dynamic-import": ^7.24.7 + "@babel/plugin-transform-exponentiation-operator": ^7.24.7 + "@babel/plugin-transform-export-namespace-from": ^7.24.7 + "@babel/plugin-transform-for-of": ^7.24.7 + "@babel/plugin-transform-function-name": ^7.25.1 + "@babel/plugin-transform-json-strings": ^7.24.7 + "@babel/plugin-transform-literals": ^7.25.2 + "@babel/plugin-transform-logical-assignment-operators": ^7.24.7 + "@babel/plugin-transform-member-expression-literals": ^7.24.7 + "@babel/plugin-transform-modules-amd": ^7.24.7 + "@babel/plugin-transform-modules-commonjs": ^7.24.8 + "@babel/plugin-transform-modules-systemjs": ^7.25.0 + "@babel/plugin-transform-modules-umd": ^7.24.7 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.24.7 + "@babel/plugin-transform-new-target": ^7.24.7 + "@babel/plugin-transform-nullish-coalescing-operator": ^7.24.7 + "@babel/plugin-transform-numeric-separator": ^7.24.7 + "@babel/plugin-transform-object-rest-spread": ^7.24.7 + "@babel/plugin-transform-object-super": ^7.24.7 + "@babel/plugin-transform-optional-catch-binding": ^7.24.7 + "@babel/plugin-transform-optional-chaining": ^7.24.8 + "@babel/plugin-transform-parameters": ^7.24.7 + "@babel/plugin-transform-private-methods": ^7.24.7 + "@babel/plugin-transform-private-property-in-object": ^7.24.7 + "@babel/plugin-transform-property-literals": ^7.24.7 + "@babel/plugin-transform-regenerator": ^7.24.7 + "@babel/plugin-transform-reserved-words": ^7.24.7 + "@babel/plugin-transform-shorthand-properties": ^7.24.7 + "@babel/plugin-transform-spread": ^7.24.7 + "@babel/plugin-transform-sticky-regex": ^7.24.7 + "@babel/plugin-transform-template-literals": ^7.24.7 + "@babel/plugin-transform-typeof-symbol": ^7.24.8 + "@babel/plugin-transform-unicode-escapes": ^7.24.7 + "@babel/plugin-transform-unicode-property-regex": ^7.24.7 + "@babel/plugin-transform-unicode-regex": ^7.24.7 + "@babel/plugin-transform-unicode-sets-regex": ^7.24.7 + "@babel/preset-modules": 0.1.6-no-external-plugins + babel-plugin-polyfill-corejs2: ^0.4.10 + babel-plugin-polyfill-corejs3: ^0.10.4 + babel-plugin-polyfill-regenerator: ^0.6.1 + core-js-compat: ^3.37.1 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9735a44e557f7ef4ade87f59c0d69e4af3383432a23ae7a3cba33e3741bd7812f2d6403a0d94ebfda5f4bd9fdc6250a52c4a156407029f590fde511a792e64e2 + languageName: node + linkType: hard + "@babel/preset-env@npm:^7.18.2, @babel/preset-env@npm:^7.25.3": version: 7.27.2 resolution: "@babel/preset-env@npm:7.27.2" @@ -2175,7 +2302,7 @@ __metadata: languageName: node linkType: hard -"@babel/preset-flow@npm:^7.13.13, @babel/preset-flow@npm:^7.17.12": +"@babel/preset-flow@npm:^7.13.13, @babel/preset-flow@npm:^7.17.12, @babel/preset-flow@npm:^7.24.7": version: 7.27.1 resolution: "@babel/preset-flow@npm:7.27.1" dependencies: @@ -2217,7 +2344,7 @@ __metadata: languageName: node linkType: hard -"@babel/preset-typescript@npm:^7.13.0, @babel/preset-typescript@npm:^7.17.12": +"@babel/preset-typescript@npm:^7.13.0, @babel/preset-typescript@npm:^7.17.12, @babel/preset-typescript@npm:^7.24.7": version: 7.27.1 resolution: "@babel/preset-typescript@npm:7.27.1" dependencies: @@ -2232,7 +2359,7 @@ __metadata: languageName: node linkType: hard -"@babel/register@npm:^7.13.16": +"@babel/register@npm:^7.13.16, @babel/register@npm:^7.24.6": version: 7.27.1 resolution: "@babel/register@npm:7.27.1" dependencies: @@ -2247,14 +2374,23 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:7.25.0": + version: 7.25.0 + resolution: "@babel/runtime@npm:7.25.0" + dependencies: + regenerator-runtime: ^0.14.0 + checksum: 4a2a374a58eb01aaa65c5762606e90b3a1f448e0c637d42278b6cc0b42a9f5399b5f381ba9f237ee087da2860d14dd2d1de7bddcbe18be6a3cafba97e44bed64 + languageName: node + linkType: hard + "@babel/runtime@npm:^7.25.0": - version: 7.27.1 - resolution: "@babel/runtime@npm:7.27.1" - checksum: 11339838a54783e5b14e04d94d7a4d032e9965c5823f3f687e41556fa40344ae7aeb57c535720b7a74ab3e8217def7834a6f1a665ee55bbb3befede141419913 + version: 7.27.3 + resolution: "@babel/runtime@npm:7.27.3" + checksum: 4eadd745756c9de7a9bba1b2b138b8b99f34aa544cf69c7e6fd1d2a120ba6d31580e93f00657145add7a8945db8ffea5ef7fdbe18f0f0f8e82f2929cb56a0d61 languageName: node linkType: hard -"@babel/template@npm:^7.25.0, @babel/template@npm:^7.27.1, @babel/template@npm:^7.3.3": +"@babel/template@npm:^7.25.0, @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: @@ -2265,28 +2401,28 @@ __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.7.4": - version: 7.27.1 - resolution: "@babel/traverse@npm:7.27.1" +"@babel/traverse--for-generate-function-map@npm:@babel/traverse@^7.25.3, @babel/traverse@npm:^7.25.2, @babel/traverse@npm:^7.25.3, @babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.27.3, @babel/traverse@npm:^7.7.4": + version: 7.27.3 + resolution: "@babel/traverse@npm:7.27.3" dependencies: "@babel/code-frame": ^7.27.1 - "@babel/generator": ^7.27.1 - "@babel/parser": ^7.27.1 - "@babel/template": ^7.27.1 - "@babel/types": ^7.27.1 + "@babel/generator": ^7.27.3 + "@babel/parser": ^7.27.3 + "@babel/template": ^7.27.2 + "@babel/types": ^7.27.3 debug: ^4.3.1 globals: ^11.1.0 - checksum: 7ea3ec36a65e734f2921f5dba6f417f5dd0c90eb44a60f6addbacbbedb44e8c82eba415a74feb7d6df58e351519b81b11b6ca3c0c7c41a3f73ebeaf6895a826c + checksum: 914402382921b796b740f7c90d56ba130ffd5eeda8d18dc82f1243a1a510ff21a26d5b713df08c8e8aad2ffc969ce4624cee309406d69bcee8efa350483688c9 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.3.3, @babel/types@npm:^7.4.4": - version: 7.27.1 - resolution: "@babel/types@npm:7.27.1" +"@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.3.3, @babel/types@npm:^7.4.4": + version: 7.27.3 + resolution: "@babel/types@npm:7.27.3" dependencies: "@babel/helper-string-parser": ^7.27.1 "@babel/helper-validator-identifier": ^7.27.1 - checksum: 357c13f37aaa2f2e2cfcdb63f986d5f7abc9f38df20182b620ace34387d2460620415770fe5856eb54d70c9f0ba2f71230d29465e789188635a948476b830ae4 + checksum: f0d43c0231f3ebc118480e149292dcd92ea128e2650285ced99ff2e5610db2171305f59aa07406ba0cb36af8e4331a53a69576d6b0c3f3176144dd3ad514b9ae languageName: node linkType: hard @@ -2605,6 +2741,23 @@ __metadata: languageName: node linkType: hard +"@eslint/eslintrc@npm:^1.3.0": + version: 1.4.1 + resolution: "@eslint/eslintrc@npm:1.4.1" + dependencies: + ajv: ^6.12.4 + debug: ^4.3.2 + espree: ^9.4.0 + globals: ^13.19.0 + ignore: ^5.2.0 + import-fresh: ^3.2.1 + js-yaml: ^4.1.0 + minimatch: ^3.1.2 + strip-json-comments: ^3.1.1 + checksum: cd3e5a8683db604739938b1c1c8b77927dc04fce3e28e0c88e7f2cd4900b89466baf83dfbad76b2b9e4d2746abdd00dd3f9da544d3e311633d8693f327d04cd7 + languageName: node + linkType: hard + "@eslint/eslintrc@npm:^2.1.4": version: 2.1.4 resolution: "@eslint/eslintrc@npm:2.1.4" @@ -2763,6 +2916,17 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/config-array@npm:^0.9.2": + version: 0.9.5 + resolution: "@humanwhocodes/config-array@npm:0.9.5" + dependencies: + "@humanwhocodes/object-schema": ^1.2.1 + debug: ^4.1.1 + minimatch: ^3.0.4 + checksum: 8ba6281bc0590f6c6eadeefc14244b5a3e3f5903445aadd1a32099ed80e753037674026ce1b3c945ab93561bea5eb29e3c5bff67060e230c295595ba517a3492 + languageName: node + linkType: hard + "@humanwhocodes/module-importer@npm:^1.0.1": version: 1.0.1 resolution: "@humanwhocodes/module-importer@npm:1.0.1" @@ -2770,6 +2934,13 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/object-schema@npm:^1.2.1": + version: 1.2.1 + resolution: "@humanwhocodes/object-schema@npm:1.2.1" + checksum: a824a1ec31591231e4bad5787641f59e9633827d0a2eaae131a288d33c9ef0290bd16fda8da6f7c0fcb014147865d12118df10db57f27f41e20da92369fcb3f1 + languageName: node + linkType: hard + "@humanwhocodes/object-schema@npm:^2.0.3": version: 2.0.3 resolution: "@humanwhocodes/object-schema@npm:2.0.3" @@ -2855,7 +3026,7 @@ __metadata: languageName: node linkType: hard -"@jest/core@npm:^29.7.0": +"@jest/core@npm:^29.6.3, @jest/core@npm:^29.7.0": version: 29.7.0 resolution: "@jest/core@npm:29.7.0" dependencies: @@ -4105,6 +4276,13 @@ __metadata: languageName: node linkType: hard +"@react-native/assets-registry@npm:0.78.2": + version: 0.78.2 + resolution: "@react-native/assets-registry@npm:0.78.2" + checksum: 097b367ecd22dc03bf2724ce9c52ab5b2848c76bca42d3c5f0a7345124554ff315a2f83b5f8f1ad8d3ee53009289cf7ca0961eab82f0f07b849424406247027c + languageName: node + linkType: hard + "@react-native/babel-plugin-codegen@npm:0.76.9": version: 0.76.9 resolution: "@react-native/babel-plugin-codegen@npm:0.76.9" @@ -4114,6 +4292,16 @@ __metadata: languageName: node linkType: hard +"@react-native/babel-plugin-codegen@npm:0.78.2": + version: 0.78.2 + resolution: "@react-native/babel-plugin-codegen@npm:0.78.2" + dependencies: + "@babel/traverse": ^7.25.3 + "@react-native/codegen": 0.78.2 + checksum: d00b246793b8019b3e831a28a9c3a3529c221284351137847080d58bf4aa7fb202eef5b8c2085b0516ad5579dd7bfe904752e943f2126f6c1fb7f0590c00f7ce + languageName: node + linkType: hard + "@react-native/babel-preset@npm:0.76.9": version: 0.76.9 resolution: "@react-native/babel-preset@npm:0.76.9" @@ -4169,6 +4357,61 @@ __metadata: languageName: node linkType: hard +"@react-native/babel-preset@npm:0.78.2": + version: 0.78.2 + resolution: "@react-native/babel-preset@npm:0.78.2" + dependencies: + "@babel/core": ^7.25.2 + "@babel/plugin-proposal-export-default-from": ^7.24.7 + "@babel/plugin-syntax-dynamic-import": ^7.8.3 + "@babel/plugin-syntax-export-default-from": ^7.24.7 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + "@babel/plugin-transform-arrow-functions": ^7.24.7 + "@babel/plugin-transform-async-generator-functions": ^7.25.4 + "@babel/plugin-transform-async-to-generator": ^7.24.7 + "@babel/plugin-transform-block-scoping": ^7.25.0 + "@babel/plugin-transform-class-properties": ^7.25.4 + "@babel/plugin-transform-classes": ^7.25.4 + "@babel/plugin-transform-computed-properties": ^7.24.7 + "@babel/plugin-transform-destructuring": ^7.24.8 + "@babel/plugin-transform-flow-strip-types": ^7.25.2 + "@babel/plugin-transform-for-of": ^7.24.7 + "@babel/plugin-transform-function-name": ^7.25.1 + "@babel/plugin-transform-literals": ^7.25.2 + "@babel/plugin-transform-logical-assignment-operators": ^7.24.7 + "@babel/plugin-transform-modules-commonjs": ^7.24.8 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.24.7 + "@babel/plugin-transform-nullish-coalescing-operator": ^7.24.7 + "@babel/plugin-transform-numeric-separator": ^7.24.7 + "@babel/plugin-transform-object-rest-spread": ^7.24.7 + "@babel/plugin-transform-optional-catch-binding": ^7.24.7 + "@babel/plugin-transform-optional-chaining": ^7.24.8 + "@babel/plugin-transform-parameters": ^7.24.7 + "@babel/plugin-transform-private-methods": ^7.24.7 + "@babel/plugin-transform-private-property-in-object": ^7.24.7 + "@babel/plugin-transform-react-display-name": ^7.24.7 + "@babel/plugin-transform-react-jsx": ^7.25.2 + "@babel/plugin-transform-react-jsx-self": ^7.24.7 + "@babel/plugin-transform-react-jsx-source": ^7.24.7 + "@babel/plugin-transform-regenerator": ^7.24.7 + "@babel/plugin-transform-runtime": ^7.24.7 + "@babel/plugin-transform-shorthand-properties": ^7.24.7 + "@babel/plugin-transform-spread": ^7.24.7 + "@babel/plugin-transform-sticky-regex": ^7.24.7 + "@babel/plugin-transform-typescript": ^7.25.2 + "@babel/plugin-transform-unicode-regex": ^7.24.7 + "@babel/template": ^7.25.0 + "@react-native/babel-plugin-codegen": 0.78.2 + babel-plugin-syntax-hermes-parser: 0.25.1 + babel-plugin-transform-flow-enums: ^0.0.2 + react-refresh: ^0.14.0 + peerDependencies: + "@babel/core": "*" + checksum: 5ac8b00124a960de84305436be2fd285328508e63796dd4e584adb661b3665f7d3a1f71f48ee0a545eba938a88351a7bd557ab96a56fdd1c9d2f09c4d0339583 + languageName: node + linkType: hard + "@react-native/codegen@npm:0.76.9": version: 0.76.9 resolution: "@react-native/codegen@npm:0.76.9" @@ -4187,6 +4430,23 @@ __metadata: languageName: node linkType: hard +"@react-native/codegen@npm:0.78.2": + version: 0.78.2 + resolution: "@react-native/codegen@npm:0.78.2" + dependencies: + "@babel/parser": ^7.25.3 + glob: ^7.1.1 + hermes-parser: 0.25.1 + invariant: ^2.2.4 + jscodeshift: ^17.0.0 + nullthrows: ^1.1.1 + yargs: ^17.6.2 + peerDependencies: + "@babel/preset-env": ^7.1.6 + checksum: e0e6e53d458d177fb9a767e5c8c3d28965575ab799beaf78111a43424270251e6a4a9dd420297eea90bf838b3f5cbf23a6e4dbebb5670b1fa501d012fcadee79 + languageName: node + linkType: hard + "@react-native/community-cli-plugin@npm:0.76.9": version: 0.76.9 resolution: "@react-native/community-cli-plugin@npm:0.76.9" @@ -4211,6 +4471,29 @@ __metadata: languageName: node linkType: hard +"@react-native/community-cli-plugin@npm:0.78.2": + version: 0.78.2 + resolution: "@react-native/community-cli-plugin@npm:0.78.2" + dependencies: + "@react-native/dev-middleware": 0.78.2 + "@react-native/metro-babel-transformer": 0.78.2 + chalk: ^4.0.0 + debug: ^2.2.0 + invariant: ^2.2.4 + metro: ^0.81.3 + metro-config: ^0.81.3 + metro-core: ^0.81.3 + readline: ^1.3.0 + semver: ^7.1.3 + peerDependencies: + "@react-native-community/cli": "*" + peerDependenciesMeta: + "@react-native-community/cli": + optional: true + checksum: 306db9ae03fc629b8cacde9f93cfb573e4c8bdcb94b0fa28cafb5ec65f839894bd7a23b44d64f45eea602d83cae93bebfa0e9650c4504cbc54aca190435102d5 + languageName: node + linkType: hard + "@react-native/debugger-frontend@npm:0.76.9": version: 0.76.9 resolution: "@react-native/debugger-frontend@npm:0.76.9" @@ -4218,6 +4501,13 @@ __metadata: languageName: node linkType: hard +"@react-native/debugger-frontend@npm:0.78.2": + version: 0.78.2 + resolution: "@react-native/debugger-frontend@npm:0.78.2" + checksum: 7f8a905589c03af301f4e262d4c8f5f78d3f47a2655d7c31ea92431afd980abf04197a078be6e57c87584edc94c9cd1a918df91a637ec9f7dd5b122577013d24 + languageName: node + linkType: hard + "@react-native/dev-middleware@npm:0.76.9": version: 0.76.9 resolution: "@react-native/dev-middleware@npm:0.76.9" @@ -4238,6 +4528,26 @@ __metadata: languageName: node linkType: hard +"@react-native/dev-middleware@npm:0.78.2": + version: 0.78.2 + resolution: "@react-native/dev-middleware@npm:0.78.2" + dependencies: + "@isaacs/ttlcache": ^1.4.1 + "@react-native/debugger-frontend": 0.78.2 + chrome-launcher: ^0.15.2 + chromium-edge-launcher: ^0.2.0 + connect: ^3.6.5 + debug: ^2.2.0 + invariant: ^2.2.4 + nullthrows: ^1.1.1 + open: ^7.0.3 + selfsigned: ^2.4.1 + serve-static: ^1.16.2 + ws: ^6.2.3 + checksum: 92836695737a4ab6d0fe52b77dfdf78778e5ceb10a8f575f4aae582850bc1704fcad78312c3c4b1e2384bf9fbdb86083ca23fd28d40d914c9a6b8419492fe8f8 + languageName: node + linkType: hard + "@react-native/eslint-config@npm:0.76.9": version: 0.76.9 resolution: "@react-native/eslint-config@npm:0.76.9" @@ -4261,6 +4571,29 @@ __metadata: languageName: node linkType: hard +"@react-native/eslint-config@npm:0.78.2": + version: 0.78.2 + resolution: "@react-native/eslint-config@npm:0.78.2" + dependencies: + "@babel/core": ^7.25.2 + "@babel/eslint-parser": ^7.25.1 + "@react-native/eslint-plugin": 0.78.2 + "@typescript-eslint/eslint-plugin": ^7.1.1 + "@typescript-eslint/parser": ^7.1.1 + eslint-config-prettier: ^8.5.0 + eslint-plugin-eslint-comments: ^3.2.0 + eslint-plugin-ft-flow: ^2.0.1 + eslint-plugin-jest: ^27.9.0 + eslint-plugin-react: ^7.30.1 + eslint-plugin-react-hooks: ^4.6.0 + eslint-plugin-react-native: ^4.0.0 + peerDependencies: + eslint: ">=8" + prettier: ">=2" + checksum: 4cbdf40717a3f51432f685364ad81a2fd8bf7746d9dcb1e285900ddafdea777b058c931daf2a23916f909498ae756f0f1baab4636596a90653cd9a0e59ac9b84 + languageName: node + linkType: hard + "@react-native/eslint-plugin@npm:0.76.9": version: 0.76.9 resolution: "@react-native/eslint-plugin@npm:0.76.9" @@ -4268,6 +4601,13 @@ __metadata: languageName: node linkType: hard +"@react-native/eslint-plugin@npm:0.78.2": + version: 0.78.2 + resolution: "@react-native/eslint-plugin@npm:0.78.2" + checksum: d79285f702e25e467525cb55ae824c50c7333138cce1295b4a1c046f11c68e7bd43ffa0c78fb0e5b1a59be92a5cf44e59c2bfc16e6c2e5b2550ea251f3cb65c6 + languageName: node + linkType: hard + "@react-native/gradle-plugin@npm:0.76.9": version: 0.76.9 resolution: "@react-native/gradle-plugin@npm:0.76.9" @@ -4275,6 +4615,13 @@ __metadata: languageName: node linkType: hard +"@react-native/gradle-plugin@npm:0.78.2": + version: 0.78.2 + resolution: "@react-native/gradle-plugin@npm:0.78.2" + checksum: 537b8e739ff174937b8a505cc89a1566d2bbf93eca96ca8754cb495152eb36d8aca0e8ca0535411c8510cac2289aeb7e18c06d5c6ea71ce9ad6d24b43a452776 + languageName: node + linkType: hard + "@react-native/js-polyfills@npm:0.76.9": version: 0.76.9 resolution: "@react-native/js-polyfills@npm:0.76.9" @@ -4282,6 +4629,13 @@ __metadata: languageName: node linkType: hard +"@react-native/js-polyfills@npm:0.78.2": + version: 0.78.2 + resolution: "@react-native/js-polyfills@npm:0.78.2" + checksum: 2ee7bf50b0eee67456b2b340592723d19c0b4b0d2c29a8dd3f65a796870e581ccd8185e03ec6e8f674541ebf471890afd432784944b8d1673d2ac02484754a7f + languageName: node + linkType: hard + "@react-native/metro-babel-transformer@npm:0.76.9": version: 0.76.9 resolution: "@react-native/metro-babel-transformer@npm:0.76.9" @@ -4296,6 +4650,20 @@ __metadata: languageName: node linkType: hard +"@react-native/metro-babel-transformer@npm:0.78.2": + version: 0.78.2 + resolution: "@react-native/metro-babel-transformer@npm:0.78.2" + dependencies: + "@babel/core": ^7.25.2 + "@react-native/babel-preset": 0.78.2 + hermes-parser: 0.25.1 + nullthrows: ^1.1.1 + peerDependencies: + "@babel/core": "*" + checksum: d15c994dd4747c6f01def8081a2861eff696ea1c6272fb8c701fd8cc7beec3e2a3661132761810eb4676d163952f23187fe9bf94611096bef79dd59103e61b90 + languageName: node + linkType: hard + "@react-native/metro-config@npm:0.76.9": version: 0.76.9 resolution: "@react-native/metro-config@npm:0.76.9" @@ -4308,6 +4676,18 @@ __metadata: languageName: node linkType: hard +"@react-native/metro-config@npm:0.78.2": + version: 0.78.2 + resolution: "@react-native/metro-config@npm:0.78.2" + dependencies: + "@react-native/js-polyfills": 0.78.2 + "@react-native/metro-babel-transformer": 0.78.2 + metro-config: ^0.81.3 + metro-runtime: ^0.81.3 + checksum: a62603160f4bcbb8d7a0f6b070538837e6c2542f9a34f38a01cf5fe06012ebf2da55a62006481b756c446640a97685867e8c7d89db339562a4bff7ad6b114922 + languageName: node + linkType: hard + "@react-native/normalize-colors@npm:0.76.9": version: 0.76.9 resolution: "@react-native/normalize-colors@npm:0.76.9" @@ -4315,6 +4695,13 @@ __metadata: languageName: node linkType: hard +"@react-native/normalize-colors@npm:0.78.2": + version: 0.78.2 + resolution: "@react-native/normalize-colors@npm:0.78.2" + checksum: b7e9e10f13ac5b1c9de942a8db56076f51022d07f9b9913e4976172e2e0d01c7b4cc69a9e0d83ac12830a6c9d6882f610c13e252ade1bb4fa7f1b2ddd7167dd6 + languageName: node + linkType: hard + "@react-native/typescript-config@npm:0.76.9": version: 0.76.9 resolution: "@react-native/typescript-config@npm:0.76.9" @@ -4322,6 +4709,13 @@ __metadata: languageName: node linkType: hard +"@react-native/typescript-config@npm:0.78.2": + version: 0.78.2 + resolution: "@react-native/typescript-config@npm:0.78.2" + checksum: 0cec653b5ece8ec4f91eca16a19770401b3bf421c29510f2990fbad489afd93372183fa17a4c6e84771325560b0098247866ce14e2b57060cc91ab26a1189c5d + languageName: node + linkType: hard + "@react-native/virtualized-lists@npm:0.76.9": version: 0.76.9 resolution: "@react-native/virtualized-lists@npm:0.76.9" @@ -4339,6 +4733,23 @@ __metadata: languageName: node linkType: hard +"@react-native/virtualized-lists@npm:0.78.2": + version: 0.78.2 + resolution: "@react-native/virtualized-lists@npm:0.78.2" + dependencies: + invariant: ^2.2.4 + nullthrows: ^1.1.1 + peerDependencies: + "@types/react": ^19.0.0 + react: "*" + react-native: "*" + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 87759ad5c822d3cb9ad209bbbb4309b151d76adfeebf2cbf61ece5cfe3cb335f690620fcbd427a2b0e9f7cf68e98dbe1925db4dd3a41b37c58136e75e452d7ff + languageName: node + linkType: hard + "@react-navigation/bottom-tabs@npm:^6.3.1": version: 6.6.1 resolution: "@react-navigation/bottom-tabs@npm:6.6.1" @@ -4356,6 +4767,22 @@ __metadata: languageName: node linkType: hard +"@react-navigation/bottom-tabs@npm:^7.3.12": + version: 7.3.13 + resolution: "@react-navigation/bottom-tabs@npm:7.3.13" + dependencies: + "@react-navigation/elements": ^2.4.2 + color: ^4.2.3 + peerDependencies: + "@react-navigation/native": ^7.1.9 + react: ">= 18.2.0" + react-native: "*" + react-native-safe-area-context: ">= 4.0.0" + react-native-screens: ">= 4.0.0" + checksum: 2387205f6f8689bcfc7f6b50cc66e1b6108fee02eb18ae6a801586f8499d3e9f589e98110a6a4128d4c5be2072ccafdd8590ac2d3081fa5393f72bdc4cf039bb + languageName: node + linkType: hard + "@react-navigation/core@npm:^5.16.1": version: 5.16.1 resolution: "@react-navigation/core@npm:5.16.1" @@ -4387,6 +4814,23 @@ __metadata: languageName: node linkType: hard +"@react-navigation/core@npm:^7.9.2": + version: 7.9.2 + resolution: "@react-navigation/core@npm:7.9.2" + dependencies: + "@react-navigation/routers": ^7.3.7 + escape-string-regexp: ^4.0.0 + nanoid: ^3.3.11 + query-string: ^7.1.3 + react-is: ^19.1.0 + use-latest-callback: ^0.2.3 + use-sync-external-store: ^1.5.0 + peerDependencies: + react: ">= 18.2.0" + checksum: 346040b232b8e9dae6930cc8dd306020d3c6779d0aaf704947ca7279b7862aa0fc2e91abdcd8cc25b373d98435d787149539ca86e314317e7a5465df1e640239 + languageName: node + linkType: hard + "@react-navigation/elements@npm:^1.3.3, @react-navigation/elements@npm:^1.3.31": version: 1.3.31 resolution: "@react-navigation/elements@npm:1.3.31" @@ -4399,6 +4843,40 @@ __metadata: languageName: node linkType: hard +"@react-navigation/elements@npm:^2.4.2": + version: 2.4.2 + resolution: "@react-navigation/elements@npm:2.4.2" + dependencies: + color: ^4.2.3 + peerDependencies: + "@react-native-masked-view/masked-view": ">= 0.2.0" + "@react-navigation/native": ^7.1.9 + react: ">= 18.2.0" + react-native: "*" + react-native-safe-area-context: ">= 4.0.0" + peerDependenciesMeta: + "@react-native-masked-view/masked-view": + optional: true + checksum: 5fee0e6601d50512256028c5de9da924ab17e5edbdfbf84963c1e95b0a3da05eb09aa753111453f3a9701b7d123dbb14c2ce2bff888ec9488fcc893872e2e079 + languageName: node + linkType: hard + +"@react-navigation/native-stack@npm:^7.3.12": + version: 7.3.13 + resolution: "@react-navigation/native-stack@npm:7.3.13" + dependencies: + "@react-navigation/elements": ^2.4.2 + warn-once: ^0.1.1 + peerDependencies: + "@react-navigation/native": ^7.1.9 + react: ">= 18.2.0" + react-native: "*" + react-native-safe-area-context: ">= 4.0.0" + react-native-screens: ">= 4.0.0" + checksum: 141d208b35a84875226cea53125e47925ce21c828a69fffe7e44439cff1b5d7ae16dc41db3d0e48a84a349ec44d636294d3fde58e5dde4d1415c3b3aeeef670c + languageName: node + linkType: hard + "@react-navigation/native-v5@npm:@react-navigation/native@5.9.8": version: 5.9.8 resolution: "@react-navigation/native@npm:5.9.8" @@ -4443,6 +4921,22 @@ __metadata: languageName: node linkType: hard +"@react-navigation/native@npm:^7.1.8": + version: 7.1.9 + resolution: "@react-navigation/native@npm:7.1.9" + dependencies: + "@react-navigation/core": ^7.9.2 + escape-string-regexp: ^4.0.0 + fast-deep-equal: ^3.1.3 + nanoid: ^3.3.11 + use-latest-callback: ^0.2.3 + peerDependencies: + react: ">= 18.2.0" + react-native: "*" + checksum: 3dd504d6d7c4482612c48909754d051a68b36d5d7cdf1ae610333da99c1309e194b65cd4e79ed343dd12cbbb55a3fb856453830d6cb45b54f6f3fe88464667cd + languageName: node + linkType: hard + "@react-navigation/routers@npm:^5.7.4": version: 5.7.4 resolution: "@react-navigation/routers@npm:5.7.4" @@ -4461,6 +4955,15 @@ __metadata: languageName: node linkType: hard +"@react-navigation/routers@npm:^7.3.7": + version: 7.3.7 + resolution: "@react-navigation/routers@npm:7.3.7" + dependencies: + nanoid: ^3.3.11 + checksum: cc3fb52957220adb8486c5546c78e4a9a92863f44368e5aeec74e6d3a31a9930d24e0cf022d91a7074a8e7d779690e11994f8f1254aaf0035d0d55b1656d8a3f + languageName: node + linkType: hard + "@react-navigation/stack-v5@npm:@react-navigation/stack@5.14.2": version: 5.14.2 resolution: "@react-navigation/stack@npm:5.14.2" @@ -5449,6 +5952,16 @@ __metadata: languageName: node linkType: hard +"@types/jest@npm:29.5.13": + version: 29.5.13 + resolution: "@types/jest@npm:29.5.13" + dependencies: + expect: ^29.0.0 + pretty-format: ^29.0.0 + checksum: 875ac23c2398cdcf22aa56c6ba24560f11d2afda226d4fa23936322dde6202f9fdbd2b91602af51c27ecba223d9fc3c1e33c9df7e47b3bf0e2aefc6baf13ce53 + languageName: node + linkType: hard + "@types/jest@npm:^29.5.0": version: 29.5.14 resolution: "@types/jest@npm:29.5.14" @@ -5520,11 +6033,11 @@ __metadata: linkType: hard "@types/node@npm:*, @types/node@npm:>=13.7.0": - version: 22.15.21 - resolution: "@types/node@npm:22.15.21" + version: 22.15.23 + resolution: "@types/node@npm:22.15.23" dependencies: undici-types: ~6.21.0 - checksum: 989f1ce3a99916a7298ae885210385fbcb339b07f8ef420b015d69dd68863aca68aeae07833736b300720d9394b8e1875600ce74166c24957d9907d29de0b788 + checksum: 24d204beedcf96d5c9068da2553e01b8e90edecab8498055d1abc24d454211a7757fa858fabebbe0aec86988012c33d0025e31bab63ab2c6307807c84931930e languageName: node linkType: hard @@ -5560,6 +6073,15 @@ __metadata: languageName: node linkType: hard +"@types/react-test-renderer@npm:19.0.0": + version: 19.0.0 + resolution: "@types/react-test-renderer@npm:19.0.0" + dependencies: + "@types/react": "*" + checksum: a22c4401e3af216a8c2cded22702bb6f928e22af7fbcaca7e0cc28447ec34bea5a94c6d6de7ed5734c527a1b53868393e67b7b4815623802e29abb1d8d378d61 + languageName: node + linkType: hard + "@types/react-test-renderer@npm:^18.0.0": version: 18.3.1 resolution: "@types/react-test-renderer@npm:18.3.1" @@ -5570,21 +6092,30 @@ __metadata: linkType: hard "@types/react@npm:*": - version: 19.1.5 - resolution: "@types/react@npm:19.1.5" + version: 19.1.6 + resolution: "@types/react@npm:19.1.6" dependencies: csstype: ^3.0.2 - checksum: 49c01b9d1874e11c02c26f08623474d86093ae02c76cf2b9c952093d855fab505ab8d8aaa162200270bd7b1fc03033859db24f6599affa1d05c5fe46374ecafc + checksum: 7f4d2e5fd0c1afa6aef956e551c982a59c3ccf37cf30b877300306dcae87e0c4bf7b28b54676b1783f4ca92e730af6fb7a4c1b7f6df27ba14579aa1617a58b09 + languageName: node + linkType: hard + +"@types/react@npm:19.0.0": + version: 19.0.0 + resolution: "@types/react@npm:19.0.0" + dependencies: + csstype: ^3.0.2 + checksum: dd7d7388b28fdf78cdf28c88490fe99413a0e1fab33e92afdf862620edc77dfe605ffe48dd3aeffb1de29107ea958a12f6d667236b2ead1affdf609db7152fad languageName: node linkType: hard "@types/react@npm:^18, @types/react@npm:^18.2.6": - version: 18.3.22 - resolution: "@types/react@npm:18.3.22" + version: 18.3.23 + resolution: "@types/react@npm:18.3.23" dependencies: "@types/prop-types": "*" csstype: ^3.0.2 - checksum: e69bdec2df18397e0ecc48e0e858ba331e56130b0b2cd1561098dcdddf04a8aa1ae0b51a294d60d0ade13bfabe5670131a3bd82bedca3b323d51de2b9cd0debd + checksum: d781257d42bf3c66f4bcd21e76a86cd9b6e21fbaf377fe0f840f1ff35049efa59491aa6a4dcf2b3db42af4ab085acebe185f0ae28b7c36d60be5e9094c707bdd languageName: node linkType: hard @@ -6180,7 +6711,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.12.4": +"ajv@npm:^6.10.0, ajv@npm:^6.12.4": version: 6.12.6 resolution: "ajv@npm:6.12.6" dependencies: @@ -6523,6 +7054,15 @@ __metadata: languageName: node linkType: hard +"ast-types@npm:^0.16.1": + version: 0.16.1 + resolution: "ast-types@npm:0.16.1" + dependencies: + tslib: ^2.0.1 + checksum: 21c186da9fdb1d8087b1b7dabbc4059f91aa5a1e593a9776b4393cc1eaa857e741b2dda678d20e34b16727b78fef3ab59cf8f0c75ed1ba649c78fe194e5c114b + languageName: node + linkType: hard + "astral-regex@npm:^1.0.0": version: 1.0.0 resolution: "astral-regex@npm:1.0.0" @@ -6671,6 +7211,18 @@ __metadata: languageName: node linkType: hard +"babel-plugin-polyfill-corejs3@npm:^0.10.4": + version: 0.10.6 + resolution: "babel-plugin-polyfill-corejs3@npm:0.10.6" + dependencies: + "@babel/helper-define-polyfill-provider": ^0.6.2 + core-js-compat: ^3.38.0 + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: f762f29f7acca576897c63149c850f0a72babd3fb9ea436a2e36f0c339161c4b912a77828541d8188ce8a91e50965c6687120cf36071eabb1b7aa92f279e2164 + languageName: node + linkType: hard + "babel-plugin-polyfill-corejs3@npm:^0.11.0": version: 0.11.1 resolution: "babel-plugin-polyfill-corejs3@npm:0.11.1" @@ -6694,6 +7246,15 @@ __metadata: languageName: node linkType: hard +"babel-plugin-syntax-hermes-parser@npm:0.25.1, babel-plugin-syntax-hermes-parser@npm:^0.25.1": + version: 0.25.1 + resolution: "babel-plugin-syntax-hermes-parser@npm:0.25.1" + dependencies: + hermes-parser: 0.25.1 + checksum: dc80fafde1aed8e60cf86ecd2e9920e7f35ffe02b33bd4e772daaa786167bcf508aac3fc1aea425ff4c7a0be94d82528f3fe8619b7f41dac853264272d640c04 + languageName: node + linkType: hard + "babel-plugin-syntax-hermes-parser@npm:^0.23.1": version: 0.23.1 resolution: "babel-plugin-syntax-hermes-parser@npm:0.23.1" @@ -6703,15 +7264,6 @@ __metadata: languageName: node linkType: hard -"babel-plugin-syntax-hermes-parser@npm:^0.25.1": - version: 0.25.1 - resolution: "babel-plugin-syntax-hermes-parser@npm:0.25.1" - dependencies: - hermes-parser: 0.25.1 - checksum: dc80fafde1aed8e60cf86ecd2e9920e7f35ffe02b33bd4e772daaa786167bcf508aac3fc1aea425ff4c7a0be94d82528f3fe8619b7f41dac853264272d640c04 - languageName: node - linkType: hard - "babel-plugin-transform-flow-enums@npm:^0.0.2": version: 0.0.2 resolution: "babel-plugin-transform-flow-enums@npm:0.0.2" @@ -6795,6 +7347,41 @@ __metadata: languageName: node linkType: hard +"benchmark-runner@workspace:benchmarks": + version: 0.0.0-use.local + resolution: "benchmark-runner@workspace:benchmarks" + dependencies: + "@babel/core": 7.25.2 + "@babel/preset-env": 7.25.3 + "@babel/runtime": 7.25.0 + "@datadog/mobile-react-native": "workspace:packages/core" + "@react-native-community/cli": 15.0.1 + "@react-native-community/cli-platform-android": 15.0.1 + "@react-native-community/cli-platform-ios": 15.0.1 + "@react-native/babel-preset": 0.78.2 + "@react-native/eslint-config": 0.78.2 + "@react-native/metro-config": 0.78.2 + "@react-native/typescript-config": 0.78.2 + "@react-navigation/bottom-tabs": ^7.3.12 + "@react-navigation/native": ^7.1.8 + "@react-navigation/native-stack": ^7.3.12 + "@types/jest": 29.5.13 + "@types/react": 19.0.0 + "@types/react-test-renderer": 19.0.0 + eslint: 8.19.0 + jest: 29.6.3 + prettier: 2.8.8 + query-string: 9.1.1 + react: 19.0.0 + react-native: 0.78.2 + react-native-config: 1.5.5 + react-native-safe-area-context: ^5.4.0 + react-native-screens: ^4.10.0 + react-test-renderer: 19.0.0 + typescript: 5.0.4 + languageName: unknown + linkType: soft + "big-integer@npm:1.6.x, big-integer@npm:^1.6.52": version: 1.6.52 resolution: "big-integer@npm:1.6.52" @@ -7683,7 +8270,7 @@ __metadata: languageName: node linkType: hard -"core-js-compat@npm:^3.40.0": +"core-js-compat@npm:^3.37.1, core-js-compat@npm:^3.38.0, core-js-compat@npm:^3.40.0": version: 3.42.0 resolution: "core-js-compat@npm:3.42.0" dependencies: @@ -8096,6 +8683,13 @@ __metadata: languageName: node linkType: hard +"decode-uri-component@npm:^0.4.1": + version: 0.4.1 + resolution: "decode-uri-component@npm:0.4.1" + checksum: 0473924860986fb6ca19ee65a2af13e08801b4f3660475b058500ea8479ed715c919884a026b6bf4296dbb640d3cea74fadf45490b2439152fc548271d0201ec + languageName: node + linkType: hard + "dedent@npm:1.5.3": version: 1.5.3 resolution: "dedent@npm:1.5.3" @@ -8451,9 +9045,9 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.5.149": - version: 1.5.157 - resolution: "electron-to-chromium@npm:1.5.157" - checksum: 479d1bb9458f0e19d0853a7f423b8a2468ca0f4a36772bfe115460183bc94662d63d4a4cde98c4aaf3c06e1840646e85dd48ef854ddf634fd169c6504540ea44 + version: 1.5.159 + resolution: "electron-to-chromium@npm:1.5.159" + checksum: 8d432d17b514e77f18f195aa52b88112fc943a5a86d1994afa504024e2895c59c9151d37952eb7e3477eda58f4bf63199a3a164680f700fe8f1e1723036f4cc4 languageName: node linkType: hard @@ -9026,7 +9620,7 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:^7.2.2": +"eslint-scope@npm:^7.1.1, eslint-scope@npm:^7.2.2": version: 7.2.2 resolution: "eslint-scope@npm:7.2.2" dependencies: @@ -9036,7 +9630,18 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^2.1.0": +"eslint-utils@npm:^3.0.0": + version: 3.0.0 + resolution: "eslint-utils@npm:3.0.0" + dependencies: + eslint-visitor-keys: ^2.0.0 + peerDependencies: + eslint: ">=5" + checksum: 0668fe02f5adab2e5a367eee5089f4c39033af20499df88fe4e6aba2015c20720404d8c3d6349b6f716b08fdf91b9da4e5d5481f265049278099c4c836ccb619 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^2.0.0, eslint-visitor-keys@npm:^2.1.0": version: 2.1.0 resolution: "eslint-visitor-keys@npm:2.1.0" checksum: e3081d7dd2611a35f0388bbdc2f5da60b3a3c5b8b6e928daffff7391146b434d691577aa95064c8b7faad0b8a680266bcda0a42439c18c717b80e6718d7e267d @@ -9050,6 +9655,51 @@ __metadata: languageName: node linkType: hard +"eslint@npm:8.19.0": + version: 8.19.0 + resolution: "eslint@npm:8.19.0" + dependencies: + "@eslint/eslintrc": ^1.3.0 + "@humanwhocodes/config-array": ^0.9.2 + ajv: ^6.10.0 + chalk: ^4.0.0 + cross-spawn: ^7.0.2 + debug: ^4.3.2 + doctrine: ^3.0.0 + escape-string-regexp: ^4.0.0 + eslint-scope: ^7.1.1 + eslint-utils: ^3.0.0 + eslint-visitor-keys: ^3.3.0 + espree: ^9.3.2 + esquery: ^1.4.0 + esutils: ^2.0.2 + fast-deep-equal: ^3.1.3 + file-entry-cache: ^6.0.1 + functional-red-black-tree: ^1.0.1 + glob-parent: ^6.0.1 + globals: ^13.15.0 + ignore: ^5.2.0 + import-fresh: ^3.0.0 + imurmurhash: ^0.1.4 + is-glob: ^4.0.0 + js-yaml: ^4.1.0 + json-stable-stringify-without-jsonify: ^1.0.1 + levn: ^0.4.1 + lodash.merge: ^4.6.2 + minimatch: ^3.1.2 + natural-compare: ^1.4.0 + optionator: ^0.9.1 + regexpp: ^3.2.0 + strip-ansi: ^6.0.1 + strip-json-comments: ^3.1.0 + text-table: ^0.2.0 + v8-compile-cache: ^2.0.3 + bin: + eslint: bin/eslint.js + checksum: 0bc9df1a3a09dcd5a781ec728f280aa8af3ab19c2d1f14e2668b5ee5b8b1fb0e72dde5c3acf738e7f4281685fb24ec149b6154255470b06cf41de76350bca7a4 + languageName: node + linkType: hard + "eslint@npm:^8.19.0": version: 8.57.1 resolution: "eslint@npm:8.57.1" @@ -9098,7 +9748,7 @@ __metadata: languageName: node linkType: hard -"espree@npm:^9.6.0, espree@npm:^9.6.1": +"espree@npm:^9.3.2, espree@npm:^9.4.0, espree@npm:^9.6.0, espree@npm:^9.6.1": version: 9.6.1 resolution: "espree@npm:9.6.1" dependencies: @@ -9119,7 +9769,7 @@ __metadata: languageName: node linkType: hard -"esquery@npm:^1.4.2": +"esquery@npm:^1.4.0, esquery@npm:^1.4.2": version: 1.6.0 resolution: "esquery@npm:1.6.0" dependencies: @@ -9425,14 +10075,14 @@ __metadata: linkType: hard "fdir@npm:^6.4.4": - version: 6.4.4 - resolution: "fdir@npm:6.4.4" + version: 6.4.5 + resolution: "fdir@npm:6.4.5" peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: picomatch: optional: true - checksum: 79043610236579ffbd0647c508b43bd030a2d034a17c43cf96813a00e8e92e51acdb115c6ddecef3b5812cc2692b976155b4f6413e51e3761f1e772fa019a321 + checksum: 14efd2d6617a6f9fb314916ccff64e00bdb96216f26542ec9dfa532ed60a7ebb45463f7009aa215c14071566bf43caeb8ba268ccb52a11e6b51e4aaa8cb58d81 languageName: node linkType: hard @@ -9479,6 +10129,13 @@ __metadata: languageName: node linkType: hard +"filter-obj@npm:^5.1.0": + version: 5.1.0 + resolution: "filter-obj@npm:5.1.0" + checksum: ba7c24d9b2c0552ee87d268e07eca74483af61fb740545ffa809f7e9e5294de38cf163ecc55af0e8a40020af9a49512c32f4022de2a858b110420fc8bffa7c9c + languageName: node + linkType: hard + "finalhandler@npm:1.1.2": version: 1.1.2 resolution: "finalhandler@npm:1.1.2" @@ -9821,6 +10478,13 @@ __metadata: languageName: node linkType: hard +"functional-red-black-tree@npm:^1.0.1": + version: 1.0.1 + resolution: "functional-red-black-tree@npm:1.0.1" + checksum: ca6c170f37640e2d94297da8bb4bf27a1d12bea3e00e6a3e007fd7aa32e37e000f5772acf941b4e4f3cf1c95c3752033d0c509af157ad8f526e7f00723b9eb9f + languageName: node + linkType: hard + "functions-have-names@npm:^1.2.3": version: 1.2.3 resolution: "functions-have-names@npm:1.2.3" @@ -10065,7 +10729,7 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:6.0.2, glob-parent@npm:^6.0.2": +"glob-parent@npm:6.0.2, glob-parent@npm:^6.0.1, glob-parent@npm:^6.0.2": version: 6.0.2 resolution: "glob-parent@npm:6.0.2" dependencies: @@ -10159,7 +10823,7 @@ __metadata: languageName: node linkType: hard -"globals@npm:^13.19.0": +"globals@npm:^13.15.0, globals@npm:^13.19.0": version: 13.24.0 resolution: "globals@npm:13.24.0" dependencies: @@ -10609,7 +11273,7 @@ __metadata: languageName: node linkType: hard -"import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": +"import-fresh@npm:^3.0.0, import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": version: 3.3.1 resolution: "import-fresh@npm:3.3.1" dependencies: @@ -11432,7 +12096,7 @@ __metadata: languageName: node linkType: hard -"jest-cli@npm:^29.7.0": +"jest-cli@npm:^29.6.3, jest-cli@npm:^29.7.0": version: 29.7.0 resolution: "jest-cli@npm:29.7.0" dependencies: @@ -11813,6 +12477,25 @@ __metadata: languageName: node linkType: hard +"jest@npm:29.6.3": + version: 29.6.3 + resolution: "jest@npm:29.6.3" + dependencies: + "@jest/core": ^29.6.3 + "@jest/types": ^29.6.3 + import-local: ^3.0.2 + jest-cli: ^29.6.3 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: dd4f53fb84f28b665b47c628222e5d3b624e9e0afa79b22afceef4f2a53dc0d8f0edd7ca254917ace5c94c3a7bf58c108563234c4fe34e86c679ce99633cfbe6 + languageName: node + linkType: hard + "jest@npm:^29.6.3, jest@npm:^29.7.0": version: 29.7.0 resolution: "jest@npm:29.7.0" @@ -11946,6 +12629,39 @@ __metadata: languageName: node linkType: hard +"jscodeshift@npm:^17.0.0": + version: 17.3.0 + resolution: "jscodeshift@npm:17.3.0" + dependencies: + "@babel/core": ^7.24.7 + "@babel/parser": ^7.24.7 + "@babel/plugin-transform-class-properties": ^7.24.7 + "@babel/plugin-transform-modules-commonjs": ^7.24.7 + "@babel/plugin-transform-nullish-coalescing-operator": ^7.24.7 + "@babel/plugin-transform-optional-chaining": ^7.24.7 + "@babel/plugin-transform-private-methods": ^7.24.7 + "@babel/preset-flow": ^7.24.7 + "@babel/preset-typescript": ^7.24.7 + "@babel/register": ^7.24.6 + flow-parser: 0.* + graceful-fs: ^4.2.4 + micromatch: ^4.0.7 + neo-async: ^2.5.0 + picocolors: ^1.0.1 + recast: ^0.23.11 + tmp: ^0.2.3 + write-file-atomic: ^5.0.1 + peerDependencies: + "@babel/preset-env": ^7.1.6 + peerDependenciesMeta: + "@babel/preset-env": + optional: true + bin: + jscodeshift: bin/jscodeshift.js + checksum: 6a529c8dcab8eef48381425c706d58a0a9205397cad367925872845ff1c35924f8f838bbd1397b28a065061032047c9fd843877000a3743240db4ba6ded2546b + languageName: node + linkType: hard + "jsesc@npm:^3.0.2": version: 3.1.0 resolution: "jsesc@npm:3.1.0" @@ -12808,7 +13524,7 @@ __metadata: languageName: node linkType: hard -"metro-config@npm:0.81.5, metro-config@npm:^0.81.0": +"metro-config@npm:0.81.5, metro-config@npm:^0.81.0, metro-config@npm:^0.81.3": version: 0.81.5 resolution: "metro-config@npm:0.81.5" dependencies: @@ -12824,7 +13540,7 @@ __metadata: languageName: node linkType: hard -"metro-core@npm:0.81.5, metro-core@npm:^0.81.0": +"metro-core@npm:0.81.5, metro-core@npm:^0.81.0, metro-core@npm:^0.81.3": version: 0.81.5 resolution: "metro-core@npm:0.81.5" dependencies: @@ -12871,7 +13587,7 @@ __metadata: languageName: node linkType: hard -"metro-runtime@npm:0.81.5, metro-runtime@npm:^0.81.0": +"metro-runtime@npm:0.81.5, metro-runtime@npm:^0.81.0, metro-runtime@npm:^0.81.3": version: 0.81.5 resolution: "metro-runtime@npm:0.81.5" dependencies: @@ -12881,7 +13597,7 @@ __metadata: languageName: node linkType: hard -"metro-source-map@npm:0.81.5, metro-source-map@npm:^0.81.0": +"metro-source-map@npm:0.81.5, metro-source-map@npm:^0.81.0, metro-source-map@npm:^0.81.3": version: 0.81.5 resolution: "metro-source-map@npm:0.81.5" dependencies: @@ -12950,7 +13666,7 @@ __metadata: languageName: node linkType: hard -"metro@npm:0.81.5, metro@npm:^0.81.0": +"metro@npm:0.81.5, metro@npm:^0.81.0, metro@npm:^0.81.3": version: 0.81.5 resolution: "metro@npm:0.81.5" dependencies: @@ -13000,7 +13716,7 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.8": +"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.7, micromatch@npm:^4.0.8": version: 4.0.8 resolution: "micromatch@npm:4.0.8" dependencies: @@ -14022,7 +14738,7 @@ __metadata: languageName: node linkType: hard -"optionator@npm:^0.9.3": +"optionator@npm:^0.9.1, optionator@npm:^0.9.3": version: 0.9.4 resolution: "optionator@npm:0.9.4" dependencies: @@ -14486,7 +15202,7 @@ __metadata: languageName: node linkType: hard -"picocolors@npm:^1.1.1": +"picocolors@npm:^1.0.1, picocolors@npm:^1.1.1": version: 1.1.1 resolution: "picocolors@npm:1.1.1" checksum: e1cf46bf84886c79055fdfa9dcb3e4711ad259949e3565154b004b260cd356c5d54b31a1437ce9782624bf766272fe6b0154f5f0c744fb7af5d454d2b60db045 @@ -14645,7 +15361,7 @@ __metadata: languageName: node linkType: hard -"prettier@npm:^2.8.8": +"prettier@npm:2.8.8, prettier@npm:^2.8.8": version: 2.8.8 resolution: "prettier@npm:2.8.8" bin: @@ -14887,6 +15603,17 @@ __metadata: languageName: node linkType: hard +"query-string@npm:9.1.1": + version: 9.1.1 + resolution: "query-string@npm:9.1.1" + dependencies: + decode-uri-component: ^0.4.1 + filter-obj: ^5.1.0 + split-on-first: ^3.0.0 + checksum: cc9c89c61f41eca2eccc67d85667708a29e517ccc93ae62753c4a1207c64ea04bf9cdb3c4006dc6c9693407aacdefad7a6e54e47158914f4efcf1c4c88371a6c + languageName: node + linkType: hard + "query-string@npm:^6.13.6": version: 6.14.1 resolution: "query-string@npm:6.14.1" @@ -14979,6 +15706,16 @@ __metadata: languageName: node linkType: hard +"react-devtools-core@npm:^6.0.1": + version: 6.1.2 + resolution: "react-devtools-core@npm:6.1.2" + dependencies: + shell-quote: ^1.6.1 + ws: ^7 + checksum: aa72d4ad993af861088ead93bcce789dbf084a530a7723d94d3a040dad6cdb3fa46e14ff0d6e1c1c8f22713f30cf52505c6083f3c91b5114c1d90f7a3c2c1e43 + languageName: node + linkType: hard + "react-freeze@npm:^1.0.0": version: 1.0.4 resolution: "react-freeze@npm:1.0.4" @@ -15009,6 +15746,13 @@ __metadata: languageName: node linkType: hard +"react-is@npm:^19.0.0, react-is@npm:^19.1.0": + version: 19.1.0 + resolution: "react-is@npm:19.1.0" + checksum: 3eb4eac7f09bf178bdc6fa98d384f5f243b85de7c99679a88b0154ead4d818ad94386ccb00ea31ec52409ffd13299057f5ec6ca2eaec06f9f7eddc1ad4832332 + languageName: node + linkType: hard + "react-lifecycles-compat@npm:2.0.0": version: 2.0.0 resolution: "react-lifecycles-compat@npm:2.0.0" @@ -15067,6 +15811,18 @@ __metadata: languageName: node linkType: hard +"react-native-config@npm:1.5.5": + version: 1.5.5 + resolution: "react-native-config@npm:1.5.5" + peerDependencies: + react-native-windows: ">=0.61" + peerDependenciesMeta: + react-native-windows: + optional: true + checksum: 96b83f6eaed4d4dd3095c18abdebb6231a9d5206203dbef65070414fb8f0582f30872dbc5120b47bb9e2e019ea842a9678838f7056d0f5e7b9c68de9ff5f971a + languageName: node + linkType: hard + "react-native-crash-tester@npm:0.2.3": version: 0.2.3 resolution: "react-native-crash-tester@npm:0.2.3" @@ -15120,6 +15876,16 @@ __metadata: languageName: node linkType: hard +"react-native-is-edge-to-edge@npm:^1.1.7": + version: 1.1.7 + resolution: "react-native-is-edge-to-edge@npm:1.1.7" + peerDependencies: + react: "*" + react-native: "*" + checksum: 4cdf2b2fb5b131f2015c26d2cb7688b4a0c5f3c8474b1bf0ddfa9eabb0263df440c87262ae8f812a6ecab0d5310df0373bddad4b51f53dabb2ffee01e9ef0f44 + languageName: node + linkType: hard + "react-native-navigation@npm:7.31.1": version: 7.31.1 resolution: "react-native-navigation@npm:7.31.1" @@ -15184,6 +15950,16 @@ __metadata: languageName: node linkType: hard +"react-native-safe-area-context@npm:^5.4.0": + version: 5.4.1 + resolution: "react-native-safe-area-context@npm:5.4.1" + peerDependencies: + react: "*" + react-native: "*" + checksum: 695e2a46a988725ac7a948e2a0f52fa91dbf6cfd29e7fd8c4b9e511022279cc7530fcec5dc6430415dcb5d137c593c53dd88249d41d1e049a254c32421a12d44 + languageName: node + linkType: hard + "react-native-screens@npm:4.5.0": version: 4.5.0 resolution: "react-native-screens@npm:4.5.0" @@ -15197,6 +15973,20 @@ __metadata: languageName: node linkType: hard +"react-native-screens@npm:^4.10.0": + version: 4.11.0 + resolution: "react-native-screens@npm:4.11.0" + dependencies: + react-freeze: ^1.0.0 + react-native-is-edge-to-edge: ^1.1.7 + warn-once: ^0.1.0 + peerDependencies: + react: "*" + react-native: "*" + checksum: 29ab15641e96c11c5035475e80b14ba0018d8e96f6f1320aa5eea83fa82b34604ad57242a59728e1b2a465a1cf33f716740bd943fd8473daf4bb2c11449b9ee8 + languageName: node + linkType: hard + "react-native-webview@npm:13.12.2": version: 13.12.2 resolution: "react-native-webview@npm:13.12.2" @@ -15277,6 +16067,58 @@ __metadata: languageName: node linkType: hard +"react-native@npm:0.78.2": + version: 0.78.2 + resolution: "react-native@npm:0.78.2" + dependencies: + "@jest/create-cache-key-function": ^29.6.3 + "@react-native/assets-registry": 0.78.2 + "@react-native/codegen": 0.78.2 + "@react-native/community-cli-plugin": 0.78.2 + "@react-native/gradle-plugin": 0.78.2 + "@react-native/js-polyfills": 0.78.2 + "@react-native/normalize-colors": 0.78.2 + "@react-native/virtualized-lists": 0.78.2 + abort-controller: ^3.0.0 + anser: ^1.4.9 + ansi-regex: ^5.0.0 + babel-jest: ^29.7.0 + babel-plugin-syntax-hermes-parser: 0.25.1 + base64-js: ^1.5.1 + chalk: ^4.0.0 + commander: ^12.0.0 + event-target-shim: ^5.0.1 + flow-enums-runtime: ^0.0.6 + glob: ^7.1.1 + invariant: ^2.2.4 + jest-environment-node: ^29.6.3 + memoize-one: ^5.0.0 + metro-runtime: ^0.81.3 + metro-source-map: ^0.81.3 + nullthrows: ^1.1.1 + pretty-format: ^29.7.0 + promise: ^8.3.0 + react-devtools-core: ^6.0.1 + react-refresh: ^0.14.0 + regenerator-runtime: ^0.13.2 + scheduler: 0.25.0 + semver: ^7.1.3 + stacktrace-parser: ^0.1.10 + whatwg-fetch: ^3.0.0 + ws: ^6.2.3 + yargs: ^17.6.2 + peerDependencies: + "@types/react": ^19.0.0 + react: ^19.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + bin: + react-native: cli.js + checksum: 22e33f6717c60ab3942fe5ecd3461d3563302e28d6ef0b3627ac469da0349ec3f4f29f844bbd617fccbebc9180b18df37f2e6625d1b2ca6578dcad6cc1203fbf + languageName: node + linkType: hard + "react-refresh@npm:^0.14.0": version: 0.14.2 resolution: "react-refresh@npm:0.14.2" @@ -15309,6 +16151,18 @@ __metadata: languageName: node linkType: hard +"react-test-renderer@npm:19.0.0": + version: 19.0.0 + resolution: "react-test-renderer@npm:19.0.0" + dependencies: + react-is: ^19.0.0 + scheduler: ^0.25.0 + peerDependencies: + react: ^19.0.0 + checksum: 2e1e527588c69e822b7aa25262c9f4a48161ede9cee5109b88228ecafbd91ce82f7afed176645efcba903ba5a43d05842a8229cdde220049e42a0cf679715dbc + languageName: node + linkType: hard + "react@npm:18.3.1": version: 18.3.1 resolution: "react@npm:18.3.1" @@ -15318,6 +16172,13 @@ __metadata: languageName: node linkType: hard +"react@npm:19.0.0": + version: 19.0.0 + resolution: "react@npm:19.0.0" + checksum: 86de15d85b2465feb40297a90319c325cb07cf27191a361d47bcfe8c6126c973d660125aa67b8f4cbbe39f15a2f32efd0c814e98196d8e5b68c567ba40a399c6 + languageName: node + linkType: hard + "read-cmd-shim@npm:4.0.0, read-cmd-shim@npm:^4.0.0": version: 4.0.0 resolution: "read-cmd-shim@npm:4.0.0" @@ -15433,6 +16294,19 @@ __metadata: languageName: node linkType: hard +"recast@npm:^0.23.11": + version: 0.23.11 + resolution: "recast@npm:0.23.11" + dependencies: + ast-types: ^0.16.1 + esprima: ~4.0.0 + source-map: ~0.6.1 + tiny-invariant: ^1.3.3 + tslib: ^2.0.1 + checksum: 1807159b1c33bc4a2d146e4ffea13b658e54bdcfab04fc4f9c9d7f1b4626c931e2ce41323e214516ec1e02a119037d686d825fc62f28072db27962b85e5b481d + languageName: node + linkType: hard + "recursive-fs@npm:^2.1.0": version: 2.1.0 resolution: "recursive-fs@npm:2.1.0" @@ -15492,6 +16366,13 @@ __metadata: languageName: node linkType: hard +"regenerator-runtime@npm:^0.14.0": + version: 0.14.1 + resolution: "regenerator-runtime@npm:0.14.1" + checksum: 9f57c93277b5585d3c83b0cf76be47b473ae8c6d9142a46ce8b0291a04bb2cf902059f0f8445dcabb3fb7378e5fe4bb4ea1e008876343d42e46d3b484534ce38 + languageName: node + linkType: hard + "regexp.prototype.flags@npm:^1.5.3, regexp.prototype.flags@npm:^1.5.4": version: 1.5.4 resolution: "regexp.prototype.flags@npm:1.5.4" @@ -15506,6 +16387,13 @@ __metadata: languageName: node linkType: hard +"regexpp@npm:^3.2.0": + version: 3.2.0 + resolution: "regexpp@npm:3.2.0" + checksum: a78dc5c7158ad9ddcfe01aa9144f46e192ddbfa7b263895a70a5c6c73edd9ce85faf7c0430e59ac38839e1734e275b9c3de5c57ee3ab6edc0e0b1bdebefccef8 + languageName: node + linkType: hard + "regexpu-core@npm:^6.2.0": version: 6.2.0 resolution: "regexpu-core@npm:6.2.0" @@ -15912,6 +16800,13 @@ __metadata: languageName: node linkType: hard +"scheduler@npm:0.25.0, scheduler@npm:^0.25.0": + version: 0.25.0 + resolution: "scheduler@npm:0.25.0" + checksum: b7bb9fddbf743e521e9aaa5198a03ae823f5e104ebee0cb9ec625392bb7da0baa1c28ab29cee4b1e407a94e76acc6eee91eeb749614f91f853efda2613531566 + languageName: node + linkType: hard + "scheduler@npm:^0.23.2": version: 0.23.2 resolution: "scheduler@npm:0.23.2" @@ -16381,6 +17276,13 @@ __metadata: languageName: node linkType: hard +"split-on-first@npm:^3.0.0": + version: 3.0.0 + resolution: "split-on-first@npm:3.0.0" + checksum: 75dc27ecbac65cfbeab9a3b90cf046307220192d3d7a30e46aa0f19571cc9b4802aac813f3de2cc9b16f2e46aae72f275659b5d2614bb5369c77724d739e5f73 + languageName: node + linkType: hard + "split2@npm:^3.2.2": version: 3.2.2 resolution: "split2@npm:3.2.2" @@ -16739,7 +17641,7 @@ __metadata: languageName: node linkType: hard -"strip-json-comments@npm:^3.1.1": +"strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 @@ -16954,8 +17856,8 @@ __metadata: linkType: hard "terser@npm:^5.15.0": - version: 5.39.2 - resolution: "terser@npm:5.39.2" + version: 5.40.0 + resolution: "terser@npm:5.40.0" dependencies: "@jridgewell/source-map": ^0.3.3 acorn: ^8.14.0 @@ -16963,7 +17865,7 @@ __metadata: source-map-support: ~0.5.20 bin: terser: bin/terser - checksum: 986a47896503c5bc6475c751d9445d4326de2e6f8b0be2c943b7726426ad0fe2385aacb9dce1dbc3aee13171595a0234411479bc855e6c730a51f23175132c84 + checksum: 2c84b1a06a8417a3443f63b447b276f724221a2b0d5cdbdd642c4753e72c3711f232a87b25b1ecb8a7282a07effe4eba0c1c3d2461c5c92243f0384579a56d11 languageName: node linkType: hard @@ -17023,6 +17925,13 @@ __metadata: languageName: node linkType: hard +"tiny-invariant@npm:^1.3.3": + version: 1.3.3 + resolution: "tiny-invariant@npm:1.3.3" + checksum: 5e185c8cc2266967984ce3b352a4e57cb89dad5a8abb0dea21468a6ecaa67cd5bb47a3b7a85d08041008644af4f667fb8b6575ba38ba5fb00b3b5068306e59fe + languageName: node + linkType: hard + "tinyglobby@npm:^0.2.12": version: 0.2.14 resolution: "tinyglobby@npm:0.2.14" @@ -17049,7 +17958,7 @@ __metadata: languageName: node linkType: hard -"tmp@npm:~0.2.1": +"tmp@npm:^0.2.3, tmp@npm:~0.2.1": version: 0.2.3 resolution: "tmp@npm:0.2.3" checksum: 73b5c96b6e52da7e104d9d44afb5d106bb1e16d9fa7d00dbeb9e6522e61b571fbdb165c756c62164be9a3bbe192b9b268c236d370a2a0955c7689cd2ae377b95 @@ -17558,7 +18467,7 @@ __metadata: languageName: node linkType: hard -"use-latest-callback@npm:^0.2.1": +"use-latest-callback@npm:^0.2.1, use-latest-callback@npm:^0.2.3": version: 0.2.3 resolution: "use-latest-callback@npm:0.2.3" peerDependencies: @@ -17567,6 +18476,15 @@ __metadata: languageName: node linkType: hard +"use-sync-external-store@npm:^1.5.0": + version: 1.5.0 + resolution: "use-sync-external-store@npm:1.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: 5e639c9273200adb6985b512c96a3a02c458bc8ca1a72e91da9cdc6426144fc6538dca434b0f99b28fb1baabc82e1c383ba7900b25ccdcb43758fb058dc66c34 + languageName: node + linkType: hard + "util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" @@ -17617,6 +18535,13 @@ __metadata: languageName: node linkType: hard +"v8-compile-cache@npm:^2.0.3": + version: 2.4.0 + resolution: "v8-compile-cache@npm:2.4.0" + checksum: 8eb6ddb59d86f24566503f1e6ca98f3e6f43599f05359bd3ab737eaaf1585b338091478a4d3d5c2646632cf8030288d7888684ea62238cdce15a65ae2416718f + languageName: node + linkType: hard + "v8-to-istanbul@npm:^9.0.1": version: 9.3.0 resolution: "v8-to-istanbul@npm:9.3.0" @@ -17675,7 +18600,7 @@ __metadata: languageName: node linkType: hard -"warn-once@npm:^0.1.0": +"warn-once@npm:^0.1.0, warn-once@npm:^0.1.1": version: 0.1.1 resolution: "warn-once@npm:0.1.1" checksum: e6a5a1f5a8dba7744399743d3cfb571db4c3947897875d4962a7c5b1bf2195ab4518c838cb4cea652e71729f21bba2e98dc75686f5fccde0fabbd894e2ed0c0d @@ -17879,7 +18804,7 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:5.0.1, write-file-atomic@npm:^5.0.0": +"write-file-atomic@npm:5.0.1, write-file-atomic@npm:^5.0.0, write-file-atomic@npm:^5.0.1": version: 5.0.1 resolution: "write-file-atomic@npm:5.0.1" dependencies: