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/.gitlab-ci.yml b/.gitlab-ci.yml
index cd9aebeab..3f655575a 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,114 +1,138 @@
include:
- - 'https://gitlab-templates.ddbuild.io/slack-notifier/v1/template.yml'
+ - 'https://gitlab-templates.ddbuild.io/slack-notifier/v1/template.yml'
# SETUP
variables:
- GIT_DEPTH: 5
-
- ANDROID_SDK_VERSION: "commandlinetools-mac-11076708_latest"
- EMULATOR_NAME: "android_emulator"
- ANDROID_ARCH: "arm64-v8a"
- ANDROID_API: "35"
- ANDROID_EMULATOR_IMAGE: "system-images;android-$ANDROID_API;google_apis;${ANDROID_ARCH}"
- ANDROID_PLATFORM: "platforms;android-$ANDROID_API"
- ANDROID_BUILD_TOOLS: "build-tools;$ANDROID_API.0.0"
- # KUBERNETES_MEMORY_REQUEST: "8Gi"
- # KUBERNETES_MEMORY_LIMIT: "13Gi"
-
+ GIT_DEPTH: 5
+ DEVELOP_BRANCH: 'develop'
+ ANDROID_SDK_VERSION: 'commandlinetools-mac-11076708_latest'
+ EMULATOR_NAME: 'android_emulator'
+ ANDROID_ARCH: 'arm64-v8a'
+ ANDROID_API: '35'
+ ANDROID_EMULATOR_IMAGE: 'system-images;android-$ANDROID_API;google_apis;${ANDROID_ARCH}'
+ ANDROID_PLATFORM: 'platforms;android-$ANDROID_API'
+ ANDROID_BUILD_TOOLS: 'build-tools;$ANDROID_API.0.0'
+ # KUBERNETES_MEMORY_REQUEST: "8Gi"
+ # KUBERNETES_MEMORY_LIMIT: "13Gi"
stages:
- - test
- - notify
-
+ - benchmark
+ - test
+ - notify
.snippets:
- install-jdk-17:
- - brew install openjdk@17
- install-android-sdk:
- - curl -sSL -o commandlinetools.zip https://dl.google.com/android/repository/$ANDROID_SDK_VERSION.zip
- - rm -rf ~/android_sdk
- - rm -rf ~/cmdline-tools
- - unzip -q commandlinetools -d ~/
- - mkdir -p ~/android_sdk/cmdline-tools/latest
- - mv ~/cmdline-tools/* ~/android_sdk/cmdline-tools/latest
- - rm ./commandlinetools.zip
- - export ANDROID_HOME="$HOME/android_sdk/"
- - export ANDROID_SDK_ROOT="$HOME/android_sdk/"
- - echo y | ~/android_sdk/cmdline-tools/latest/bin/sdkmanager --install "emulator"
- - echo y | ~/android_sdk/cmdline-tools/latest/bin/sdkmanager --install "platform-tools"
- - echo y | ~/android_sdk/cmdline-tools/latest/bin/sdkmanager --install "$ANDROID_PLATFORM"
- - echo y | ~/android_sdk/cmdline-tools/latest/bin/sdkmanager --install "$ANDROID_BUILD_TOOLS"
- - echo y | ~/android_sdk/cmdline-tools/latest/bin/sdkmanager --install "$ANDROID_EMULATOR_IMAGE"
- - yes | ~/android_sdk/cmdline-tools/latest/bin/sdkmanager --licenses || true
- - echo "no" | ~/android_sdk/cmdline-tools/latest/bin/avdmanager --verbose create avd --force --name "$EMULATOR_NAME" --package "$ANDROID_EMULATOR_IMAGE"
+ install-jdk-17:
+ - brew install openjdk@17
+ install-android-sdk:
+ - curl -sSL -o commandlinetools.zip https://dl.google.com/android/repository/$ANDROID_SDK_VERSION.zip
+ - rm -rf ~/android_sdk
+ - rm -rf ~/cmdline-tools
+ - unzip -q commandlinetools -d ~/
+ - mkdir -p ~/android_sdk/cmdline-tools/latest
+ - mv ~/cmdline-tools/* ~/android_sdk/cmdline-tools/latest
+ - rm ./commandlinetools.zip
+ - export ANDROID_HOME="$HOME/android_sdk/"
+ - export ANDROID_SDK_ROOT="$HOME/android_sdk/"
+ - echo y | ~/android_sdk/cmdline-tools/latest/bin/sdkmanager --install "emulator"
+ - echo y | ~/android_sdk/cmdline-tools/latest/bin/sdkmanager --install "platform-tools"
+ - echo y | ~/android_sdk/cmdline-tools/latest/bin/sdkmanager --install "$ANDROID_PLATFORM"
+ - echo y | ~/android_sdk/cmdline-tools/latest/bin/sdkmanager --install "$ANDROID_BUILD_TOOLS"
+ - echo y | ~/android_sdk/cmdline-tools/latest/bin/sdkmanager --install "$ANDROID_EMULATOR_IMAGE"
+ - yes | ~/android_sdk/cmdline-tools/latest/bin/sdkmanager --licenses || true
+ - echo "no" | ~/android_sdk/cmdline-tools/latest/bin/avdmanager --verbose create avd --force --name "$EMULATOR_NAME" --package "$ANDROID_EMULATOR_IMAGE"
# TESTS
test:lint:
- tags: [ "macos:sonoma", "specific:true" ]
- stage: test
- timeout: 1h
- script:
- - yarn
- - yarn run lint
+ tags: ['macos:sonoma', 'specific:true']
+ stage: test
+ rules:
+ - if: '$BUILD_BENCHMARK != "true"'
+ timeout: 1h
+ script:
+ - yarn
+ - yarn run lint
test:js:
- tags: [ "macos:sonoma", "specific:true" ]
- stage: test
- timeout: 1h
- script:
- - yarn
- - cp jestSetup.js.override node_modules/react-native-gesture-handler/jestSetup.js
- - NODE_OPTIONS='-r dd-trace/ci/init' DD_ENV=ci DD_SERVICE=dd-sdk-reactnative yarn test
+ tags: ['macos:sonoma', 'specific:true']
+ stage: test
+ rules:
+ - if: '$BUILD_BENCHMARK != "true"'
+ timeout: 1h
+ script:
+ - yarn
+ - cp jestSetup.js.override node_modules/react-native-gesture-handler/jestSetup.js
+ - NODE_OPTIONS='-r dd-trace/ci/init' DD_ENV=ci DD_SERVICE=dd-sdk-reactnative yarn test
test:build:
- tags: [ "macos:sonoma", "specific:true" ]
- stage: test
- timeout: 1h
- script:
- - yarn
- - yarn prepare
+ tags: ['macos:sonoma', 'specific:true']
+ stage: test
+ rules:
+ - if: '$BUILD_BENCHMARK != "true"'
+ timeout: 1h
+ script:
+ - yarn
+ - yarn prepare
test:native-android:
- tags: [ "macos:sonoma", "specific:true" ]
- stage: test
- timeout: 1h
- script:
- - !reference [.snippets, install-android-sdk]
- - !reference [.snippets, install-jdk-17]
- - /opt/homebrew/opt/openjdk@17/bin/java --version
- - echo "org.gradle.java.home=/opt/homebrew/opt/openjdk@17" >> packages/core/android/gradle.properties
- - echo "org.gradle.java.home=/opt/homebrew/opt/openjdk@17" >> packages/react-native-session-replay/android/gradle.properties
- - echo "org.gradle.java.home=/opt/homebrew/opt/openjdk@17" >> packages/internal-testing-tools/android/gradle.properties
- - yarn
- - (cd packages/core/android && ./gradlew build -PDdSdkReactNative_minSdkVersion=24)
- - (cd packages/react-native-session-replay/android && ./gradlew build -PDdSdkReactNative_minSdkVersion=24 -PDatadogSDKReactNativeSessionReplay_minSdkVersion=24)
- - (cd packages/internal-testing-tools/android && ./gradlew build -PDdSdkReactNative_minSdkVersion=24 -PDatadogInternalTesting_minSdkVersion=24)
+ tags: ['macos:sonoma', 'specific:true']
+ stage: test
+ rules:
+ - if: '$BUILD_BENCHMARK != "true"'
+ timeout: 1h
+ script:
+ - !reference [.snippets, install-android-sdk]
+ - !reference [.snippets, install-jdk-17]
+ - /opt/homebrew/opt/openjdk@17/bin/java --version
+ - echo "org.gradle.java.home=/opt/homebrew/opt/openjdk@17" >> packages/core/android/gradle.properties
+ - echo "org.gradle.java.home=/opt/homebrew/opt/openjdk@17" >> packages/react-native-session-replay/android/gradle.properties
+ - echo "org.gradle.java.home=/opt/homebrew/opt/openjdk@17" >> packages/internal-testing-tools/android/gradle.properties
+ - yarn
+ - (cd packages/core/android && ./gradlew build -PDdSdkReactNative_minSdkVersion=24)
+ - (cd packages/react-native-session-replay/android && ./gradlew build -PDdSdkReactNative_minSdkVersion=24 -PDatadogSDKReactNativeSessionReplay_minSdkVersion=24)
+ - (cd packages/internal-testing-tools/android && ./gradlew build -PDdSdkReactNative_minSdkVersion=24 -PDatadogInternalTesting_minSdkVersion=24)
test:native-ios:
- tags: [ "macos:sonoma", "specific:true" ]
- stage: test
- timeout: 1h
- script:
- - yarn
- - (cd example/ios && RCT_NEW_ARCH_ENABLED=0 pod install --repo-update)
- - set -o pipefail && xcodebuild -workspace example/ios/DdSdkReactNativeExample.xcworkspace -scheme DatadogSDKReactNative test -destination "platform=iOS Simulator,OS=17.4,name=iPhone 15 Pro Max" | xcbeautify
+ tags: ['macos:sonoma', 'specific:true']
+ stage: test
+ rules:
+ - if: '$BUILD_BENCHMARK != "true"'
+ timeout: 1h
+ script:
+ - yarn
+ - (cd example/ios && RCT_NEW_ARCH_ENABLED=0 pod install --repo-update)
+ - set -o pipefail && xcodebuild -workspace example/ios/DdSdkReactNativeExample.xcworkspace -scheme DatadogSDKReactNative test -destination "platform=iOS Simulator,OS=17.4,name=iPhone 15 Pro Max" | xcbeautify
test:native-ios-sr:
- tags: [ "macos:sonoma", "specific:true" ]
- stage: test
- timeout: 1h
- script:
- - yarn
- - (cd example/ios && RCT_NEW_ARCH_ENABLED=0 pod install --repo-update)
- - set -o pipefail && xcodebuild -workspace example/ios/DdSdkReactNativeExample.xcworkspace -scheme DatadogSDKReactNativeSessionReplay test -destination "platform=iOS Simulator,OS=17.4,name=iPhone 15 Pro Max" | xcbeautify
+ tags: ['macos:sonoma', 'specific:true']
+ stage: test
+ rules:
+ - if: '$BUILD_BENCHMARK != "true"'
+ timeout: 1h
+ script:
+ - yarn
+ - (cd example/ios && RCT_NEW_ARCH_ENABLED=0 pod install --repo-update)
+ - set -o pipefail && xcodebuild -workspace example/ios/DdSdkReactNativeExample.xcworkspace -scheme DatadogSDKReactNativeSessionReplay test -destination "platform=iOS Simulator,OS=17.4,name=iPhone 15 Pro Max" | xcbeautify
test:native-ios-newarch:
- tags: [ "macos:sonoma", "specific:true" ]
- stage: test
- timeout: 1h
- script:
- - yarn
- - (cd example-new-architecture/ios && RCT_NEW_ARCH_ENABLED=1 pod install --repo-update)
- - set -o pipefail && xcodebuild -workspace example-new-architecture/ios/DdSdkReactNativeExample.xcworkspace -scheme DatadogSDKReactNative test -destination "platform=iOS Simulator,OS=17.4,name=iPhone 15 Pro Max" | xcbeautify
\ No newline at end of file
+ tags: ['macos:sonoma', 'specific:true']
+ stage: test
+ rules:
+ - if: '$BUILD_BENCHMARK != "true"'
+ timeout: 1h
+ script:
+ - yarn
+ - (cd example-new-architecture/ios && RCT_NEW_ARCH_ENABLED=1 pod install --repo-update)
+ - set -o pipefail && xcodebuild -workspace example-new-architecture/ios/DdSdkReactNativeExample.xcworkspace -scheme DatadogSDKReactNative test -destination "platform=iOS Simulator,OS=17.4,name=iPhone 15 Pro Max" | xcbeautify
+
+benchmark:
+ stage: benchmark
+ rules:
+ - if: '$BUILD_BENCHMARK == "true"'
+ allow_failure: true
+ - if: '$CI_COMMIT_BRANCH == "$DEVELOP_BRANCH"'
+ allow_failure: true
+ trigger:
+ include: 'benchmarks/.benchmarks-ci.yml'
+ strategy: depend
diff --git a/benchmarks/.benchmarks-ci.yml b/benchmarks/.benchmarks-ci.yml
new file mode 100644
index 000000000..5f945f463
--- /dev/null
+++ b/benchmarks/.benchmarks-ci.yml
@@ -0,0 +1,109 @@
+include:
+ - 'https://gitlab-templates.ddbuild.io/slack-notifier/v1/template.yml'
+
+# GLOBAL VARIABLES
+variables:
+ GIT_DEPTH: 5
+ NODE_VERSION: '22.5.1'
+ ANDROID_SDK_VERSION: 'commandlinetools-mac-11076708_latest'
+ EMULATOR_NAME: 'android_emulator'
+ ANDROID_ARCH: 'arm64-v8a'
+ ANDROID_API: '35'
+ ANDROID_EMULATOR_IMAGE: 'system-images;android-$ANDROID_API;google_apis;${ANDROID_ARCH}'
+ ANDROID_PLATFORM: 'platforms;android-$ANDROID_API'
+ ANDROID_BUILD_TOOLS: 'build-tools;$ANDROID_API.0.0'
+
+stages:
+ - build-and-upload
+ - notify
+
+# SNIPPETS
+.snippets:
+ install-node:
+ # Install Node Version Manager (NVM)
+ - echo "Installing nvm..."
+ - curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
+ - '. ~/.nvm/nvm.sh --no-use'
+ - nvm --version
+ - echo "Installing NODE $NODE_VERSION..."
+ # Change Node version
+ - nvm install $NODE_VERSION
+ - nvm use $NODE_VERSION
+ - nvm alias default $NODE_VERSION
+ - echo "Node version:" && node -v
+ - echo "NPM version:" && npm -v
+
+ install-jdk-17:
+ - brew install openjdk@17
+ install-android-sdk:
+ - curl -sSL -o commandlinetools.zip https://dl.google.com/android/repository/$ANDROID_SDK_VERSION.zip
+ - rm -rf ~/android_sdk
+ - rm -rf ~/cmdline-tools
+ - unzip -q commandlinetools -d ~/
+ - mkdir -p ~/android_sdk/cmdline-tools/latest
+ - mv ~/cmdline-tools/* ~/android_sdk/cmdline-tools/latest
+ - rm ./commandlinetools.zip
+ - export ANDROID_HOME="$HOME/android_sdk/"
+ - export ANDROID_SDK_ROOT="$HOME/android_sdk/"
+ - echo y | ~/android_sdk/cmdline-tools/latest/bin/sdkmanager --install "emulator"
+ - echo y | ~/android_sdk/cmdline-tools/latest/bin/sdkmanager --install "platform-tools"
+ - echo y | ~/android_sdk/cmdline-tools/latest/bin/sdkmanager --install "$ANDROID_PLATFORM"
+ - echo y | ~/android_sdk/cmdline-tools/latest/bin/sdkmanager --install "$ANDROID_BUILD_TOOLS"
+ - echo y | ~/android_sdk/cmdline-tools/latest/bin/sdkmanager --install "$ANDROID_EMULATOR_IMAGE"
+ - yes | ~/android_sdk/cmdline-tools/latest/bin/sdkmanager --licenses || true
+ - echo "no" | ~/android_sdk/cmdline-tools/latest/bin/avdmanager --verbose create avd --force --name "$EMULATOR_NAME" --package "$ANDROID_EMULATOR_IMAGE"
+
+ check-versions:
+ - echo "Node version:" && node -v
+ - echo "Xcode version:" && xcodebuild -version
+ - echo "CocoaPods version:" && pod --version
+
+build-and-upload:app:
+ stage: build-and-upload
+ tags: ['macos:sonoma', 'specific:true']
+ script:
+ - !reference [.snippets, install-node]
+ - !reference [.snippets, install-android-sdk]
+ - !reference [.snippets, install-jdk-17]
+ - !reference [.snippets, check-versions]
+
+ - echo $(pwd)
+
+ # Datadog SDK - Yarn install
+ - echo "Installing DDSDK dependencies"
+ - yarn install
+
+ # Prepare Logs Directory
+ - cd $(pwd)/benchmarks
+ - mkdir -p logs
+
+ # Create .env config file
+ - echo "Creating .env config"
+ - ./scripts/create-env-config.sh
+
+ # Yarn install
+ - echo "Installing dependencies"
+ - yarn install
+
+ # Android Build
+ - echo "Starting Android build for BenchmarkRunner"
+ - ./scripts/build-android-benchmark.sh
+
+ # iOS Build
+ - echo "Starting iOS build for BenchmarkRunner"
+ - XCODEBUILD_LOG_PATH=$(pwd)/logs/build_ios_benchmark_runner.log
+ - touch $XCODEBUILD_LOG_PATH
+ - ./scripts/build-ios-benchmark.sh | tee -a $XCODEBUILD_LOG_PATH
+
+ # Upload builds to synthetics
+ - echo "Uploading app-release.apk to Synthetics"
+ - ./scripts/upload.sh android/app/build/outputs/apk/release/app-release.apk ANDROID
+ - echo "Uploading BenchmarkRunner.ipa to Synthetics"
+ - ./scripts/upload.sh ios/BenchmarkRunner.ipa/BenchmarkRunner.ipa IOS
+
+ artifacts:
+ paths:
+ - ./benchmarks/logs
+ - ./benchmarks/android/app/build/outputs/apk/release/app-release.apk
+ - ./benchmarks/ios/BenchmarkRunner.ipa
+ when: always
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..e2bbf063b
--- /dev/null
+++ b/benchmarks/README.md
@@ -0,0 +1,182 @@
+# 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
+```
+
+## Adding a New Scenario to Benchmarks
+
+### Define the New Scenario
+
+In `benchmarks/src/testSetup/types/testConfig.ts`, add a new entry to the `Scenario` enum:
+
+```ts
+export enum Scenario {
+ Default = 'default',
+ NavigationExample = 'navigation',
+ (...)
+ NewScenario = 'newScenario'
+}
+```
+
+The string value (`'newScenario'`) is what must be passed using deeplink as the `scenario` parameter.
+
+Alternatively, if you're using a `.env` file to set the scenario, add:
+
+```env
+BENCH_SCENARIO="newScenario"
+```
+
+### Create the Scenario Component
+
+Create a new folder under `benchmarks/src/scenario/` named after your scenario (for example, `NewScenario`). Inside this folder, define your scenario’s main component and its props.
+
+Create a `types.ts` file:
+
+```ts
+import type { TestConfig } from "benchmarks/src/testSetup/types/testConfig";
+
+export type NewScenarioProps = {
+ testConfig?: TestConfig;
+};
+```
+
+Then, define the main component:
+
+```ts
+import { NewScenarioProps } from "./types";
+
+function NewScenario(props: NewScenarioProps): React.JSX.Element {
+ (...)
+}
+
+export default NewScenario;
+```
+
+### Register the Scenario in the App
+
+In `benchmarks/src/App.tsx`, add a new case to the scenario switch using the enum identifier you just created:
+
+```tsx
+case Scenario.NewScenario:
+ return ;
+```
+
+You can now trigger this scenario either through a deeplink or by setting `BENCH_SCENARIO` in the `.env` file.
+
+## Instrumenting a Scenario
+
+Depending on the scenario’s structure and flow, the Datadog SDK initialization may vary. Each scenario is responsible for managing its own initialization logic.
+
+To simplify this, use the `instrument()` helper from `benchmarks/src/testSetup/testUtils`. It initializes the SDK with a default configuration.
+
+Since your scenario component receives `testConfig` as a prop, you can use it to determine whether instrumentation should occur:
+
+```ts
+useEffect(() => {
+ if (props.testConfig?.runType !== RunType.BASELINE) {
+ instrument().then(() => {
+ // Datadog is initialized
+ });
+ }
+}, []);
+```
+
+## Using the Datadog Provider
+
+If your scenario uses the `DatadogProvider`, you can retrieve the necessary configuration using `getDatadogProviderConfig()` from the same `testUtils` module:
+
+```ts
+return ...
+```
diff --git a/benchmarks/android/app/build.gradle b/benchmarks/android/app/build.gradle
new file mode 100644
index 000000000..d14d070b1
--- /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:dd-sdk-android-benchmark-internal:2.23.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..e8c70650d
--- /dev/null
+++ b/benchmarks/ios/BenchmarkRunner.xcodeproj/project.pbxproj
@@ -0,0 +1,721 @@
+// !$*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;
+ DEVELOPMENT_TEAM = JKFCB4CN7C;
+ 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 = "com.datadog.react.native.--PRODUCT-NAME-rfc1034identifier-";
+ "PRODUCT_BUNDLE_IDENTIFIER[sdk=iphoneos*]" = com.datadog.react.native.BenchmarkRunner;
+ 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;
+ DEVELOPMENT_TEAM = JKFCB4CN7C;
+ 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 = "com.datadog.react.native.--PRODUCT-NAME-rfc1034identifier-";
+ "PRODUCT_BUNDLE_IDENTIFIER[sdk=iphoneos*]" = com.datadog.react.native.BenchmarkRunner;
+ 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..6a4199cab
--- /dev/null
+++ b/benchmarks/ios/BenchmarkRunner/Info.plist
@@ -0,0 +1,60 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleDisplayName
+ BenchmarkRunner
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ $(MARKETING_VERSION)
+ CFBundleSignature
+ ????
+ CFBundleURLTypes
+
+
+ CFBundleURLSchemes
+
+ benchmark
+
+
+
+ CFBundleVersion
+ $(CURRENT_PROJECT_VERSION)
+ 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..c9a471204
--- /dev/null
+++ b/benchmarks/ios/Podfile.lock
@@ -0,0 +1,2160 @@
+PODS:
+ - boost (1.84.0)
+ - DatadogCore (2.29.0):
+ - DatadogInternal (= 2.29.0)
+ - DatadogCrashReporting (2.29.0):
+ - DatadogInternal (= 2.29.0)
+ - PLCrashReporter (~> 1.12.0)
+ - DatadogInternal (2.29.0)
+ - DatadogLogs (2.29.0):
+ - DatadogInternal (= 2.29.0)
+ - DatadogRUM (2.29.0):
+ - DatadogInternal (= 2.29.0)
+ - DatadogSDKReactNative (2.10.1):
+ - DatadogCore (= 2.29.0)
+ - DatadogCrashReporting (= 2.29.0)
+ - DatadogLogs (= 2.29.0)
+ - DatadogRUM (= 2.29.0)
+ - DatadogTrace (= 2.29.0)
+ - DatadogWebViewTracking (= 2.29.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
+ - DatadogSDKReactNativeSessionReplay (2.10.1):
+ - DatadogSDKReactNative
+ - DatadogSessionReplay (= 2.29.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
+ - DatadogSDKReactNativeWebView (2.10.1):
+ - DatadogInternal (= 2.29.0)
+ - DatadogSDKReactNative
+ - DatadogWebViewTracking (= 2.29.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
+ - DatadogSessionReplay (2.29.0):
+ - DatadogInternal (= 2.29.0)
+ - DatadogTrace (2.29.0):
+ - DatadogInternal (= 2.29.0)
+ - OpenTelemetrySwiftApi (= 1.13.1)
+ - DatadogWebViewTracking (2.29.0):
+ - DatadogInternal (= 2.29.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.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-native-safe-area-context/common (= 5.4.0)
+ - react-native-safe-area-context/fabric (= 5.4.0)
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-rendererdebug
+ - React-utils
+ - ReactCodegen
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - Yoga
+ - react-native-safe-area-context/common (5.4.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
+ - react-native-safe-area-context/fabric (5.4.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-native-safe-area-context/common
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-rendererdebug
+ - React-utils
+ - ReactCodegen
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - Yoga
+ - react-native-slider (4.5.7):
+ - 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-slider/common (= 4.5.7)
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-rendererdebug
+ - React-utils
+ - ReactCodegen
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - Yoga
+ - react-native-slider/common (4.5.7):
+ - 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-webview (13.15.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
+ - 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)
+ - RNCPicker (2.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-rendererdebug
+ - React-utils
+ - ReactCodegen
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - Yoga
+ - RNScreens (4.10.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.10.0)
+ - Yoga
+ - RNScreens/common (4.10.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`)"
+ - "DatadogSDKReactNativeSessionReplay (from `../node_modules/@datadog/mobile-react-native-session-replay`)"
+ - "DatadogSDKReactNativeWebView (from `../node_modules/@datadog/mobile-react-native-webview`)"
+ - 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-native-slider (from `../../node_modules/@react-native-community/slider`)"
+ - react-native-webview (from `../node_modules/react-native-webview`)
+ - 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`)
+ - "RNCPicker (from `../node_modules/@react-native-picker/picker`)"
+ - RNScreens (from `../node_modules/react-native-screens`)
+ - Yoga (from `../node_modules/react-native/ReactCommon/yoga`)
+
+SPEC REPOS:
+ trunk:
+ - DatadogCore
+ - DatadogCrashReporting
+ - DatadogInternal
+ - DatadogLogs
+ - DatadogRUM
+ - DatadogSessionReplay
+ - 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"
+ DatadogSDKReactNativeSessionReplay:
+ :path: "../node_modules/@datadog/mobile-react-native-session-replay"
+ DatadogSDKReactNativeWebView:
+ :path: "../node_modules/@datadog/mobile-react-native-webview"
+ 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-native-slider:
+ :path: "../../node_modules/@react-native-community/slider"
+ react-native-webview:
+ :path: "../node_modules/react-native-webview"
+ 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"
+ RNCPicker:
+ :path: "../node_modules/@react-native-picker/picker"
+ RNScreens:
+ :path: "../node_modules/react-native-screens"
+ Yoga:
+ :path: "../node_modules/react-native/ReactCommon/yoga"
+
+SPEC CHECKSUMS:
+ boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90
+ DatadogCore: 919080d4ba0bf172f42e8cf49a6ea33a79bdeb9a
+ DatadogCrashReporting: 3de14c873c0492803eca0373769791fde30639f6
+ DatadogInternal: f98c60cc5b44db688692e2b560ea273182cde022
+ DatadogLogs: c314b15a97bfc7e0728ea253d3638b0513032d88
+ DatadogRUM: 6ec371f477a1022fd5aad6ccb5407b85a04db399
+ DatadogSDKReactNative: dc3487e1416597865b3e0a6190e3860af27b7c91
+ DatadogSDKReactNativeSessionReplay: a2a2731423054420cc070d2caf0c20d69a328109
+ DatadogSDKReactNativeWebView: af8ad5fecbed66d2cd1498cbc0466e577e51d511
+ DatadogSessionReplay: 1f2f70afa2fc5870ce7304a02749f73529d3e6cb
+ DatadogTrace: f0de55334db1630938ef980b5e054964652c4606
+ DatadogWebViewTracking: f637f0e36cf62b713cd6673690d94072e6223570
+ 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: afcc2e2b3e78ae8ef90d81e658aacee34ebc27ea
+ react-native-slider: 310d3f89edd6ca8344a974bfe83a29a3fbb60e5a
+ react-native-webview: 80ef603d1df42e24fdde765686fbb9b8a6ecd554
+ 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
+ RNCPicker: cfb51a08c6e10357d9a65832e791825b0747b483
+ RNScreens: 790123c4a28783d80a342ce42e8c7381bed62db1
+ SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748
+ Yoga: e14bad835e12b6c7e2260fc320bd00e0f4b45add
+
+PODFILE CHECKSUM: 4410ec48cbe9f00cc7dce5aa595affed6a14ea0d
+
+COCOAPODS: 1.16.2
diff --git a/benchmarks/ios/exportOptions.plist b/benchmarks/ios/exportOptions.plist
new file mode 100644
index 000000000..52aa90a21
--- /dev/null
+++ b/benchmarks/ios/exportOptions.plist
@@ -0,0 +1,15 @@
+
+
+
+
+ provisioningProfiles
+
+ com.datadog.react.native.BenchmarkRunner
+ React Native Benchmark App
+
+ uploadBitcode
+
+ uploadSymbols
+
+
+
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..7425dad49
--- /dev/null
+++ b/benchmarks/package.json
@@ -0,0 +1,62 @@
+{
+ "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",
+ "@datadog/mobile-react-native-session-replay": "workspace:packages/react-native-session-replay",
+ "@datadog/mobile-react-native-webview": "workspace:packages/react-native-webview",
+ "@datadog/mobile-react-navigation": "workspace:packages/react-navigation",
+ "@react-native-community/slider": "4.5.7",
+ "@react-native-picker/picker": "2.11.0",
+ "@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",
+ "react-native-webview": "13.15.0"
+ },
+ "devDependencies": {
+ "@babel/core": "7.25.2",
+ "@babel/preset-env": "7.25.3",
+ "@babel/runtime": "7.25.0",
+ "@datadog/datadog-ci": "3.12.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-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/scripts/build-android-benchmark.sh b/benchmarks/scripts/build-android-benchmark.sh
new file mode 100755
index 000000000..ad06246e5
--- /dev/null
+++ b/benchmarks/scripts/build-android-benchmark.sh
@@ -0,0 +1,37 @@
+set -e
+source ./scripts/secrets/config.sh
+
+# Builds the Android Benchmark app
+#
+# Usage: ./scripts/build-android-benchmark.sh
+
+function build_android_app {
+
+ if [ ! -d "./android/app/src/main/assets" ]; then
+ mkdir ./android/app/src/main/assets
+ fi
+
+ touch ./android/app/src/main/assets/index.android
+
+ # Generate bundle
+ echo "Generating bundle..."
+
+ npx react-native bundle \
+ --platform android \
+ --dev false \
+ --entry-file index.js \
+ --bundle-output android/app/src/main/assets/index.android.bundle \
+ --assets-dest android/app/build/intermediates/res/merged/release/ \
+
+ rm -rf android/app/src/main/res/drawable-*
+ rm -rf android/app/src/main/res/raw/*
+ echo "Building Android App in release mode..."
+ echo "Assembling Release APK..."
+ cd android
+ ./gradlew assembleRelease || exit 1
+}
+
+# run_checks
+build_android_app
+
+cd $ROOT
diff --git a/benchmarks/scripts/build-ios-benchmark.sh b/benchmarks/scripts/build-ios-benchmark.sh
new file mode 100755
index 000000000..e5f811a79
--- /dev/null
+++ b/benchmarks/scripts/build-ios-benchmark.sh
@@ -0,0 +1,72 @@
+#!/bin/bash
+set -eo pipefail
+source ./scripts/secrets/config.sh
+source ./scripts/secrets/get-secret.sh
+
+# Builds the iOS Benchmark app
+#
+# Usage: ./build-ios-benhchmark.sh
+
+CODE_SIGN_STYLE="${CODE_SIGN_STYLE:-Manual}"
+CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY:-Apple Development: Sergio Barrio (64DLL4SMU9)}"
+PROVISIONING_PROFILE_SPECIFIER="${PROVISIONING_PROFILE_SPECIFIER:-React Native Benchmark App}"
+DEVELOPMENT_TEAM="${DEVELOPMENT_TEAM:-JKFCB4CN7C}"
+
+function setup_ios_singing {
+ mkdir -p "$HOME/Library/MobileDevice/Provisioning Profiles"
+
+ get_secret $DD_RN_BENCHMARK_E2E_PROVISIONING_PROFILE_BASE64 | base64 --decode > "$HOME/Library/MobileDevice/Provisioning Profiles/datadog.mobileprovision"
+
+ export KEYCHAIN_PASSWORD="$(openssl rand -base64 32)"
+ export KEYCHAIN="datadog.keychain"
+ security delete-keychain "$KEYCHAIN" || true
+ security create-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN"
+ security set-keychain-settings -lut 21600 "$KEYCHAIN"
+ security unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN"
+ security list-keychain -d user -s "$KEYCHAIN" "login.keychain" "System.keychain"
+
+ get_secret $DD_RN_BENCHMARK_E2E_CERTIFICATE_P12_BASE64 | base64 --decode > "datadog.certificate.p12"
+ export P12_PASSWORD="$(get_secret $DD_RN_BENCHMARK_E2E_CERTIFICATE_PASSWORD)"
+
+ security import "datadog.certificate.p12" -P $P12_PASSWORD -A -t cert -f pkcs12 -k $KEYCHAIN
+ security set-key-partition-list -S "apple-tool:,apple:" -s -k "$KEYCHAIN_PASSWORD" "$KEYCHAIN"
+}
+
+function build_ios_app {
+ cd ${ROOT}/ios
+
+ echo export NODE_BINARY=$(command -v node) > ${ROOT}/ios/.xcode.env
+ rm Podfile.lock || true
+ pod install --repo-update
+
+ # Build & Archive
+ LOG_PATH="${XCODEBUILD_LOG_PATH:-logs/xcodebuild_full_output_benchmark_runner.log}"
+ mkdir -p logs
+ touch "$LOG_PATH"
+ echo "=== Creating iOS archive ===" | tee -a "$LOG_PATH"
+
+ xcodebuild -workspace BenchmarkRunner.xcworkspace \
+ -scheme BenchmarkRunner clean archive \
+ -configuration release \
+ -sdk iphoneos \
+ -archivePath BenchmarkRunner.xcarchive \
+ CODE_SIGN_STYLE="$CODE_SIGN_STYLE" \
+ CODE_SIGN_IDENTITY="$CODE_SIGN_IDENTITY" \
+ PROVISIONING_PROFILE_SPECIFIER="$PROVISIONING_PROFILE_SPECIFIER" \
+ DEVELOPMENT_TEAM="$DEVELOPMENT_TEAM" \
+ 2>&1 | tee -a "$LOG_PATH" | xcbeautify || exit 1
+
+ # Export IPA
+ echo "=== Exporting iOS ipa ===" | tee -a "$LOG_PATH"
+
+ xcodebuild -exportArchive \
+ -archivePath BenchmarkRunner.xcarchive \
+ -exportOptionsPlist ./exportOptions.plist \
+ -exportPath BenchmarkRunner.ipa \
+ 2>&1 | tee -a "$LOG_PATH" | xcbeautify || exit 1
+}
+
+setup_ios_singing
+build_ios_app
+
+cd $ROOT
\ No newline at end of file
diff --git a/benchmarks/scripts/create-env-config.sh b/benchmarks/scripts/create-env-config.sh
new file mode 100755
index 000000000..be0a8cb30
--- /dev/null
+++ b/benchmarks/scripts/create-env-config.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+set -eo pipefail
+source ./scripts/secrets/get-secret.sh
+
+cd $ROOT
+ENV_FILENAME=".env"
+
+DD_CLIENT_TOKEN="$(get_secret $DD_RN_BENCHMARK_CLIENT_TOKEN)"
+DD_API_KEY="$(get_secret $DD_RN_BENCHMARK_API_KEY)"
+DD_APP_ID="$(get_secret $DD_RN_BENCHMARK_APP_ID)"
+DD_SITE="us1"
+DD_ENV="dev"
+
+cat > "$ENV_FILENAME" </dev/null; then
+ echo "Reading '$secret_name' secret in local env. You are already authenticated with 'vault'." >&2
+ else
+ echo "Reading '$secret_name' secret in local env. You will now be authenticated with OIDC in your web browser." >&2
+ vault login -method=oidc -no-print
+ fi
+ fi
+
+ local secret_value=$(vault kv get -field=value "$DD_SDK_RN_SECRETS_PATH_PREFIX/$secret_name")
+
+ if [[ -z "$secret_value" ]]; then
+ echo "Error" "Failed to retrieve the '$secret_name' secret or the secret is empty." >&2
+ exit 1
+ fi
+
+ echo "$secret_value"
+}
diff --git a/benchmarks/scripts/upload.sh b/benchmarks/scripts/upload.sh
new file mode 100755
index 000000000..ca7b1b276
--- /dev/null
+++ b/benchmarks/scripts/upload.sh
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+# Upload app binary to synthetics to be used on tests
+#
+# Usage: ./upload.sh FILE_PATH PLATFORM
+
+set -e
+source ./scripts/secrets/get-secret.sh
+
+
+FILE_PATH=$1 # Path to app binary (.ipa/.apk)
+PLATFORM=$2 # IOS/ANDROID
+
+API_KEY="$(get_secret $DD_RN_BENCHMARK_API_KEY)"
+APP_KEY="$(get_secret $DD_RN_BENCHMARK_APP_KEY)"
+
+if [ "$PLATFORM" = "ANDROID" ]; then
+ SYNTHETICS_APP_ID="$(get_secret "$DD_RN_BENCHMARK_SYNTHETICS_ANDROID_APP_ID")"
+elif [ "$PLATFORM" = "IOS" ]; then
+ SYNTHETICS_APP_ID="$(get_secret "$DD_RN_BENCHMARK_SYNTHETICS_IOS_APP_ID")"
+else
+ echo "Can't upload - Unknown platform ${PLATFORM}"
+ exit 1
+fi
+
+timestamp=$(date +"%Y/%m/%d-%H:%M:%S")
+
+yarn datadog-ci synthetics upload-application --apiKey $API_KEY --appKey $APP_KEY --mobileApplicationId $SYNTHETICS_APP_ID --mobileApplicationVersionFilePath $FILE_PATH --versionName "benchmark_${PLATFORM}_${timestamp}" --latest
diff --git a/benchmarks/src/App.tsx b/benchmarks/src/App.tsx
new file mode 100644
index 000000000..4a3bc0255
--- /dev/null
+++ b/benchmarks/src/App.tsx
@@ -0,0 +1,98 @@
+/*
+ * 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';
+import LogsCustomScenario from './scenario/Logs/Custom/logsCustomScenario';
+import LogsHeavyTrafficScenario from './scenario/Logs/HeavyTraffic/logsHeavyTraffic';
+import TracesScenario from './scenario/Traces/tracesScenario';
+import RUMManualScenario from './scenario/RUM/Manual/rumManualScenario';
+import RUMAutoScenario from './scenario/RUM/Auto/rumAutoScenario';
+import SessionReplayScenario from './scenario/SessionReplay/sessionReplayScenario';
+
+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 ;
+ case Scenario.LogsCustom:
+ return ;
+ case Scenario.LogsHeavyTraffic:
+ return ;
+ case Scenario.Traces:
+ return ;
+ case Scenario.RUMManual:
+ return ;
+ case Scenario.RUMAuto:
+ return ;
+ case Scenario.SessionReplay:
+ return ;
+ // Add new scenarios here
+ default:
+ return (
+
+ No scenario loaded
+
+ );
+ }
+}
+
+export default App;
diff --git a/benchmarks/src/common/styles.ts b/benchmarks/src/common/styles.ts
new file mode 100644
index 000000000..7b4a24d33
--- /dev/null
+++ b/benchmarks/src/common/styles.ts
@@ -0,0 +1,315 @@
+/*
+ * 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 { Dimensions, StyleSheet } from "react-native";
+
+const SCR_WIDTH = Dimensions.get('screen').width;
+const SCR_HEIGHT = Dimensions.get('screen').height;
+
+export enum Colors {
+ White = '#FFFFFF',
+ Black = '#000000',
+ Grey = '#EEEEEF',
+ DarkGrey = '#9E9E9F',
+ DatadogPurple = '#BC72E4',
+ Background = '#F2F2F7',
+ Title = '#AFAFA0',
+}
+
+export const CommonStyles = StyleSheet.create({
+ safeAreaContainer: {
+ flex: 1,
+ backgroundColor: Colors.Grey,
+ },
+ container: {
+ flex: 1,
+ paddingHorizontal: 20,
+ paddingVertical: 20,
+ },
+ uiItemsContainer: {
+ flex: 1,
+ backgroundColor: Colors.White,
+ paddingHorizontal: 10,
+ },
+ lightContainer: {
+ flex: 1,
+ paddingHorizontal: 10,
+ paddingVertical: 10,
+ backgroundColor: Colors.White,
+ },
+ title: {
+ paddingLeft: 20,
+ fontSize: 13,
+ color: Colors.Title,
+ },
+ holder: {
+ backgroundColor: Colors.White,
+ borderRadius: 15,
+ padding: 15,
+ marginTop: 5,
+ marginBottom: 20,
+ },
+ fullScreenHolder: {
+ flex: 1,
+ justifyContent: 'space-around',
+ alignItems: 'center',
+ backgroundColor: Colors.White,
+ },
+ separator: {
+ height: 1,
+ width: '100%',
+ backgroundColor: Colors.Background,
+ },
+ input: {
+ flex: 1,
+ },
+ smallInput: {
+ flex: 0.5,
+ maxWidth: '25%',
+ },
+ inputBorder: {
+ padding: 5,
+ borderColor: Colors.Grey,
+ borderWidth: 1,
+ },
+ row: {
+ minHeight: '5%',
+ flexDirection: 'row',
+ justifyContent: 'space-between',
+ alignItems: 'center',
+ },
+ label: {
+ color: Colors.Black,
+ fontSize: 15,
+ marginRight: 20,
+ },
+ buttonWrapper: {
+ backgroundColor: Colors.DatadogPurple,
+ borderRadius: 10,
+ padding: 5,
+ marginBottom: 20,
+ },
+ greyButton: {
+ backgroundColor: Colors.Grey,
+ },
+ logEntry: {
+ padding: 5,
+ borderBottomColor: Colors.Grey,
+ borderBottomWidth: 1,
+ fontSize: 12,
+ },
+ image: {
+ height: 150,
+ padding: 10,
+ borderRadius: 10,
+ backgroundColor: Colors.White,
+ },
+ resultTitle: {
+ fontSize: 16,
+ color: Colors.Black,
+ marginTop: 15,
+ textAlign: 'center',
+ },
+ listContainer: {
+ flex: 1,
+ paddingHorizontal: 10,
+ },
+ resultList: {
+ borderRadius: 10,
+ },
+ resultCell: {
+ flex: 1,
+ padding: 10,
+ backgroundColor: Colors.White,
+ flexDirection: 'row',
+ justifyContent: 'flex-start',
+ },
+ cellImage: {
+ height: 60,
+ width: 60,
+ borderRadius: 5,
+ marginRight: 10,
+ },
+ cellTitle: {
+ fontSize: 18,
+ fontWeight: 500,
+ },
+ cellContent: {
+ flex: 1,
+ borderBottomWidth: 1,
+ borderBottomColor: Colors.Background,
+ paddingBottom: 10,
+ },
+ cellArrow: {
+ color: Colors.DarkGrey,
+ lineHeight: 60,
+ fontSize: 20,
+ paddingHorizontal: 10,
+ },
+ detailImage: {
+ height: 120,
+ width: 120,
+ },
+ detailTitle: {
+ marginVertical: 10,
+ fontSize: 18,
+ fontWeight: 500,
+ },
+ detailRow: {
+ flexDirection: 'row',
+ justifyContent: 'space-between',
+ },
+ detailLabel: {
+ color: Colors.DarkGrey,
+ },
+ detailField: {
+
+ },
+ expandedContentEntry: {
+ paddingVertical: 10,
+ },
+ gridItem: {
+ padding: 10,
+ },
+ gridItemLabel: {
+ width: 100,
+ marginVertical: 10,
+ fontSize: 16,
+ fontWeight: 500,
+ textAlign: 'center',
+ },
+ gridImage: {
+ height: 100,
+ width: 100,
+ },
+ uiElementCell: {
+ padding: 15,
+ flex: 1,
+ backgroundColor: Colors.White,
+ flexDirection: 'row',
+ justifyContent: 'space-around',
+ alignContent: 'space-around',
+ borderBottomWidth: 1,
+ borderBottomColor: Colors.Grey,
+ },
+ uiElementTitle: {
+ flex: 0.9,
+ fontSize: 25,
+ },
+ uiElementArrow: {
+ flex: 0.1,
+ color: Colors.DatadogPurple,
+ fontSize: 25,
+ },
+ sessionReplayView: {
+ height: 250,
+ width: 250,
+ backgroundColor: 'green',
+ marginVertical: 30,
+ },
+ sessionReplayRotatedView: {
+ backgroundColor: 'blue',
+ transform: [{ rotate: '30deg' }],
+ },
+ sessionReplayOpacityView:{
+ backgroundColor: 'yellow',
+ },
+ sessionReplayOpacityViewChild:{
+ backgroundColor: 'blue',
+ opacity: 0.2,
+ height: 100,
+ width: 100,
+ },
+ sessionReplayContainerView:{
+ backgroundColor: 'purple',
+ borderRadius: 30,
+ justifyContent: 'center',
+ alignItems: 'center',
+ },
+ sessionReplayContainerViewText:{
+ color: Colors.White,
+ fontSize: 20,
+ },
+ sessionReplayImage: {
+ width: 350,
+ height: 350,
+ },
+ sessionReplayText: {
+ color: Colors.DatadogPurple,
+ fontSize: 16,
+ textAlign: 'left',
+ marginVertical: 10,
+ },
+ sessionReplayTextCursive: {
+ color: Colors.Black,
+ fontStyle: 'italic',
+ textAlign: 'center',
+ },
+ sessionReplayTextBold: {
+ color: Colors.DarkGrey,
+ fontWeight: '900',
+ textAlign: 'right',
+ },
+ sessionReplayTextSpaced: {
+ color: Colors.DatadogPurple,
+ letterSpacing: 10,
+ lineHeight: 25,
+ },
+ sessionReplayTextInput: {
+ marginVertical: 15,
+ backgroundColor: Colors.Grey,
+ width: '80%',
+ fontSize: 20,
+ padding: 10,
+ borderRadius: 10,
+ },
+ sessionReplaySwitch: {
+ marginVertical: 30,
+ },
+ sessionReplayButton: {
+ marginVertical: 20,
+ backgroundColor: Colors.DatadogPurple,
+ width: '80%',
+ padding: 20,
+ borderRadius: 15,
+ color: Colors.White,
+ },
+ sessionReplayButtonLabel: {
+ color: Colors.White,
+ textAlign: 'center',
+ fontSize: 20,
+ },
+ sessionReplayActivityIndicator : {
+ marginVertical: 50,
+ },
+ sessionReplayPicker: {
+
+ },
+ sessionReplaySlider: {
+ width: 200,
+ height: 40,
+ marginVertical: 40,
+ },
+ sessionReplayWebView: {
+ height: SCR_HEIGHT,
+ width: SCR_WIDTH,
+ },
+ sessionReplaySectionList: {
+ width: SCR_WIDTH,
+ },
+ sessionReplaySectionListItem: {
+ backgroundColor: Colors.DatadogPurple,
+ padding: 20,
+ marginVertical: 8,
+ },
+ sessionReplaySectionListItemTitle: {
+ color: Colors.White,
+ },
+ sessionReplaySectionListHeader: {
+ fontSize: 32,
+ backgroundColor: Colors.White,
+ },
+})
diff --git a/benchmarks/src/component/Picker/Picker.tsx b/benchmarks/src/component/Picker/Picker.tsx
new file mode 100644
index 000000000..531c3bc81
--- /dev/null
+++ b/benchmarks/src/component/Picker/Picker.tsx
@@ -0,0 +1,64 @@
+/*
+ * 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, {useState} from 'react';
+import {Platform, Pressable, Text } from 'react-native';
+import {Picker as RNPicker, PickerIOS as RNPickerIOS} from '@react-native-picker/picker';
+import type {PickerProps} from './types';
+import styles from './styles';
+
+const isIOS = Platform.OS === 'ios';
+
+function Picker(props: PickerProps): React.JSX.Element {
+ const [isOpen, setIsOpen] = useState(false);
+
+ const openPicker = () => {
+ setIsOpen(true);
+ };
+
+ const onValueChange = (newValue: unknown) => {
+ setIsOpen(false);
+ props?.onValueChange(newValue);
+ };
+
+ if (isIOS) {
+ if (isOpen) {
+ return (
+
+ {props.values.map(({label, value}, index) => (
+
+ ))}
+
+ )
+ } else {
+ return (
+
+ {props.label.toUpperCase()}
+
+ )
+ }
+ } else {
+ return (
+
+ {props.values.map(({label, value}, index) => (
+
+ ))}
+
+ )
+ };
+}
+
+export default Picker;
diff --git a/benchmarks/src/component/Picker/styles.ts b/benchmarks/src/component/Picker/styles.ts
new file mode 100644
index 000000000..358f36814
--- /dev/null
+++ b/benchmarks/src/component/Picker/styles.ts
@@ -0,0 +1,16 @@
+import { StyleSheet } from "react-native";
+import { Colors } from "../../common/styles";
+
+export default StyleSheet.create({
+ pickerButton: {
+ padding: 10,
+ },
+ picker: {
+ width: '40%',
+ backgroundColor: Colors.White,
+ },
+ pickerLabel: {
+ color: Colors.DarkGrey,
+ fontSize: 15,
+ },
+});
\ No newline at end of file
diff --git a/benchmarks/src/component/Picker/types.ts b/benchmarks/src/component/Picker/types.ts
new file mode 100644
index 000000000..fdc58beee
--- /dev/null
+++ b/benchmarks/src/component/Picker/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.
+ */
+
+export interface PickerProps {
+ onValueChange: (newValue: unknown) => void,
+ label: string;
+ values: {label: string, value: string}[];
+};
\ No newline at end of file
diff --git a/benchmarks/src/component/Stepper/Stepper.tsx b/benchmarks/src/component/Stepper/Stepper.tsx
new file mode 100644
index 000000000..4a342b7b6
--- /dev/null
+++ b/benchmarks/src/component/Stepper/Stepper.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 from 'react';
+import {
+ Pressable,
+ Text,
+ View,
+} from 'react-native';
+import type { StepperProps } from "./types";
+import styles from "./styles";
+
+function Stepper(props: StepperProps): React.JSX.Element {
+ return (
+
+
+ {'-'}
+
+
+
+ {'+'}
+
+
+ );
+}
+
+export default Stepper;
\ No newline at end of file
diff --git a/benchmarks/src/component/Stepper/styles.ts b/benchmarks/src/component/Stepper/styles.ts
new file mode 100644
index 000000000..b2d57ca48
--- /dev/null
+++ b/benchmarks/src/component/Stepper/styles.ts
@@ -0,0 +1,31 @@
+/*
+ * 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 { StyleSheet } from "react-native";
+import { Colors } from "../../common/styles";
+
+export default StyleSheet.create({
+ container: {
+ backgroundColor: Colors.Grey,
+ flexDirection: 'row',
+ justifyContent: 'space-between',
+ borderRadius: 10,
+ maxWidth: '30%',
+ },
+ separator: {
+ backgroundColor: Colors.DarkGrey,
+ width: 1,
+ height: 20,
+ marginTop: 5,
+ marginBottom: 5,
+ },
+ buttonLabel: {
+ color: Colors.Black,
+ minWidth: '45%',
+ textAlign: 'center',
+ fontSize: 24,
+ },
+})
\ No newline at end of file
diff --git a/benchmarks/src/component/Stepper/types.ts b/benchmarks/src/component/Stepper/types.ts
new file mode 100644
index 000000000..99d025127
--- /dev/null
+++ b/benchmarks/src/component/Stepper/types.ts
@@ -0,0 +1,10 @@
+/*
+ * 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 interface StepperProps {
+ onDecreasePressed: () => void,
+ onIncreasePressed: () => void,
+};
\ No newline at end of file
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/Logs/Custom/logsCustomScenario.tsx b/benchmarks/src/scenario/Logs/Custom/logsCustomScenario.tsx
new file mode 100644
index 000000000..dd846f770
--- /dev/null
+++ b/benchmarks/src/scenario/Logs/Custom/logsCustomScenario.tsx
@@ -0,0 +1,267 @@
+/*
+ * 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, useRef, useState} from 'react';
+import {
+ Button,
+ Platform,
+ Pressable,
+ SafeAreaView,
+ ScrollView,
+ Switch,
+ Text,
+ TextInput,
+ View,
+} from 'react-native';
+import { LogLevel, PAYLOADS_BY_SIZE, PayloadSize } from '../types';
+import type {LogsCustomScenarioProps} from '../types';
+import { RunType } from '../../../testSetup/types/testConfig';
+import { instrument } from '../../../testSetup/testUtils';
+import { Colors, CommonStyles as styles } from '../../../common/styles';
+import Stepper from '../../../component/Stepper/Stepper';
+import { DdLogs } from '@datadog/mobile-react-native';
+import { Logger } from '../../../testSetup/logger';
+import Picker from '../../../component/Picker/Picker';
+import { DEFAULT_LOGS_PER_SECOND, DEFAULT_LOG_INTERVAL, DEFAULT_LOG_MESSAGE, LOG_LEVELS, MAX_LOG_OUTPUT_ENTRIES, PAYLOAD_SIZES } from '../constants';
+
+function LogsCustomScenario(props: LogsCustomScenarioProps): React.JSX.Element {
+ const logger = useRef(Logger);
+ const [logMessage, setLogMessage] = useState(DEFAULT_LOG_MESSAGE);
+ const [logLevel, setLogLevel] = useState(LogLevel.INFO);
+ const [payloadSize, setPayloadSize] = useState(
+ PayloadSize.Small,
+ );
+ const [logsPerSecond, setLogsPerSecond] = useState(
+ DEFAULT_LOGS_PER_SECOND,
+ );
+ const [logInterval, setLogInterval] = useState(DEFAULT_LOG_INTERVAL);
+ const [isRepeatLogging, setIsRepeatLogging] = useState(false);
+ const isLogging = useRef(false);
+ const [isLoggingState, setIsLoggingState] = useState(isLogging.current);
+
+ const logOutputBuffer = useRef([]);
+ const [logOutput, setLogOutput] = useState(logOutputBuffer.current);
+ const logOutPutScrollViewRef = useRef(null);
+
+ useEffect(() => {
+ if (props.testConfig?.runType !== RunType.BASELINE) {
+ instrument().then(() => {
+ logger.current = DdLogs;
+ });
+ }
+ }, []);
+
+ // UI Management
+ const onLogLevelChanged = (newLogLevel: LogLevel | unknown) => {
+ setLogLevel(newLogLevel as LogLevel);
+ };
+
+ const onPayloadSizeChanged = (newPayloadSize: PayloadSize | unknown) => {
+ setPayloadSize(newPayloadSize as PayloadSize);
+ };
+
+ const onLogsPerSecondChanged = (newLogsPerSecond: string) => {
+ const newLogsPerSecondNumber = parseInt(newLogsPerSecond, 10);
+ if (!Number.isNaN(newLogsPerSecondNumber)) {
+ setLogsPerSecond(newLogsPerSecondNumber);
+ }
+ };
+
+ const onLogsPerSecondDecrease = () => {
+ const newLogsPerSecond = logsPerSecond > 1 ? logsPerSecond - 1 : 1;
+ setLogsPerSecond(newLogsPerSecond);
+ };
+
+ const onLogsPerSecondIncrease = () => {
+ setLogsPerSecond(logsPerSecond + 1);
+ };
+
+ const onLogIntervalChanged = (newLogInterval: string) => {
+ const newLogsIntervalNumber = parseInt(newLogInterval, 10);
+ if (!Number.isNaN(newLogsIntervalNumber)) {
+ setLogInterval(newLogsIntervalNumber);
+ }
+ };
+
+ const onLogIntervalDecrease = () => {
+ const newLogInterval = logInterval > 1 ? logInterval - 1 : 1;
+ setLogInterval(newLogInterval);
+ };
+
+ const onLogIntervalIncrease = () => {
+ setLogInterval(logInterval + 1);
+ };
+
+ const onToggleIsRepeatLogging = () => {
+ setIsRepeatLogging(!isRepeatLogging);
+ };
+
+ // Logging
+ const startLogging = () => {
+ isLogging.current = true;
+ setIsLoggingState(true);
+ clearLogOutput();
+
+ if (isRepeatLogging) {
+ const interval = setInterval(() => {
+ if (!isLogging.current) {
+ clearInterval(interval);
+ } else {
+ logBatch(logsPerSecond, logMessage, logLevel, payloadSize);
+ }
+ }, logInterval * 1000); // in ms
+ } else {
+ logBatch(logsPerSecond, logMessage, logLevel, payloadSize);
+ stopLogging();
+ }
+ };
+
+ const stopLogging = () => {
+ isLogging.current = false;
+ setIsLoggingState(false);
+ };
+
+ const clearLogOutput = () => {
+ logOutputBuffer.current = [];
+ setLogOutput(logOutputBuffer.current);
+ }
+
+ const logBatch = (
+ amount: number,
+ message: string,
+ level: LogLevel,
+ size: PayloadSize,
+ ) => {
+ for (let i = 0; i < amount; i++) {
+ logOutputBuffer.current = [
+ ...logOutputBuffer.current,
+ `${new Date().toISOString()} - ${level} - ${size}: ${message}`,
+ ];
+
+ if (logOutputBuffer.current.length > MAX_LOG_OUTPUT_ENTRIES) {
+ logOutputBuffer.current.shift();
+ };
+
+ setLogOutput(logOutputBuffer.current);
+
+ switch (level) {
+ case LogLevel.DEBUG:
+ logger.current.debug(message, PAYLOADS_BY_SIZE[size]);
+ break;
+ case LogLevel.ERROR:
+ logger.current.error(message, PAYLOADS_BY_SIZE[size]);
+ break;
+ case LogLevel.INFO:
+ logger.current.info(message, PAYLOADS_BY_SIZE[size]);
+ break;
+ case LogLevel.WARN:
+ logger.current.warn(message, PAYLOADS_BY_SIZE[size]);
+ break;
+ }
+ }
+ };
+
+ return (
+
+
+ LOG CONFIGURATION
+
+
+
+
+
+
+ {'Log Level'}
+
+
+
+
+ {'Payload size'}
+
+
+
+ LOGGING FREQUENCY
+
+
+ {'Logs per Second:'}
+
+
+
+
+
+ {'Interval (sec):'}
+
+
+
+
+
+
+ {'Repeat logging'}
+
+
+
+
+
+
+
+
+ CONSOLE OUTPUT
+ {
+ logOutPutScrollViewRef.current?.scrollToEnd({animated: true});
+ }}>
+ {logOutput.map((entry: string, index: number) => (
+
+ {entry}
+
+ ))}
+
+ Clear log
+
+
+ );
+}
+
+export default LogsCustomScenario;
diff --git a/benchmarks/src/scenario/Logs/HeavyTraffic/config.tsx b/benchmarks/src/scenario/Logs/HeavyTraffic/config.tsx
new file mode 100644
index 000000000..8e3469967
--- /dev/null
+++ b/benchmarks/src/scenario/Logs/HeavyTraffic/config.tsx
@@ -0,0 +1,110 @@
+/*
+ * 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 {
+ View,
+ Text,
+ TextInput,
+ Button
+} from 'react-native';
+import React, { useState } from 'react';
+import Stepper from '../../../component/Stepper/Stepper';
+import Picker from '../../../component/Picker/Picker';
+import { Colors, CommonStyles as styles } from '../../../common/styles';
+import {LogLevel, PayloadSize} from '../types';
+import { DEFAULT_LOGS_PER_BATCH, DEFAULT_LOG_MESSAGE, LOG_LEVELS, PAYLOAD_SIZES } from '../constants';
+import { StackActions, useNavigation } from '@react-navigation/native';
+
+function ConfigScreen(): React.JSX.Element {
+ const navigation = useNavigation();
+ const [logMessage, setLogMessage] = useState(DEFAULT_LOG_MESSAGE);
+ const [logLevel, setLogLevel] = useState(LogLevel.DEBUG);
+ const [payloadSize, setPayloadSize] = useState(
+ PayloadSize.Small,
+ );
+ const [logsPerBatch, setLogsPerBatch] = useState(DEFAULT_LOGS_PER_BATCH);
+
+ // UI Management
+ const onLogLevelChanged = (newLogLevel: LogLevel | unknown) => {
+ setLogLevel(newLogLevel as LogLevel);
+ };
+
+ const onPayloadSizeChanged = (newPayloadSize: PayloadSize | unknown) => {
+ setPayloadSize(newPayloadSize as PayloadSize);
+ };
+
+ const onLogsPerBatchChanged = (newLogsPerBatch: string) => {
+ const newLogsPerBatchNumber = parseInt(newLogsPerBatch, 10);
+ if (!Number.isNaN(newLogsPerBatchNumber)) {
+ setLogsPerBatch(newLogsPerBatchNumber);
+ }
+ };
+
+ const onLogsPerBatchDecrease = () => {
+ const newLogsPerBatch = logsPerBatch > 1 ? logsPerBatch - 1 : 1;
+ setLogsPerBatch(newLogsPerBatch);
+ };
+
+ const onLogsPerBatchIncrease = () => {
+ setLogsPerBatch(logsPerBatch + 1);
+ };
+
+ const applyConfig = () => {
+ const popToAction = StackActions.popTo('ImageList', {logMessage, logLevel, logsPerBatch, payloadSize});
+ navigation.dispatch(popToAction);
+ }
+
+ return (
+
+ LOG CONFIGURATION
+
+
+
+
+
+
+ {'Log Level'}
+
+
+
+
+ {'Payload size'}
+
+
+
+ LOGGING FREQUENCY
+
+
+ {'Logs per image:'}
+
+
+
+
+
+ )
+ }
+
+ export default ConfigScreen;
\ No newline at end of file
diff --git a/benchmarks/src/scenario/Logs/HeavyTraffic/imageList.tsx b/benchmarks/src/scenario/Logs/HeavyTraffic/imageList.tsx
new file mode 100644
index 000000000..25c939b66
--- /dev/null
+++ b/benchmarks/src/scenario/Logs/HeavyTraffic/imageList.tsx
@@ -0,0 +1,98 @@
+
+/*
+ * 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 {
+ View,
+ Image,
+ FlatList,
+} from 'react-native';
+import React, { useEffect, useRef, useState } from 'react';
+import { useIsFocused, useRoute } from '@react-navigation/native';
+import { CommonStyles as styles } from '../../../common/styles';
+import { RunType } from "../../../testSetup/types/testConfig";
+import { instrument } from "../../../testSetup/testUtils";
+import {DdLogs} from '@datadog/mobile-react-native';
+import { Logger } from '../../../testSetup/logger';
+import { LogLevel, PAYLOADS_BY_SIZE, PayloadSize } from '../types';
+import type { LogsHeavyTrafficConfigParams, ImageListProps } from '../types';
+import { DEFAULT_LOGS_PER_BATCH, DEFAULT_LOG_MESSAGE, DEFAULT_HEAVY_IMAGE_URL, DEFAULT_IMAGES_TO_LOAD } from '../constants';
+
+function ImageListScreen(props: ImageListProps): React.JSX.Element {
+ const route = useRoute();
+ const logger = useRef(Logger);
+ const isFocused = useIsFocused();
+ const [readyToRun, setReadyToRun] = useState(false);
+
+ const params: LogsHeavyTrafficConfigParams = route?.params as LogsHeavyTrafficConfigParams;
+ const logMessage = params?.logMessage || DEFAULT_LOG_MESSAGE;
+ const logLevel = params?.logLevel || LogLevel.DEBUG;
+ const payloadSize = params?.payloadSize || PayloadSize.Small;
+ const logsPerBatch = params?.logsPerBatch || DEFAULT_LOGS_PER_BATCH;
+
+ useEffect(() => {
+ if (props.testConfig?.runType !== RunType.BASELINE) {
+ instrument().then(() => {
+ logger.current = DdLogs;
+ setReadyToRun(true);
+ });
+ } else {
+ setReadyToRun(true);
+ };
+ }, []);
+
+ const log = () => {
+ for (let i = 0; i < logsPerBatch; i++) {
+ switch (logLevel) {
+ case LogLevel.DEBUG:
+ logger.current.debug(logMessage, PAYLOADS_BY_SIZE[payloadSize]);
+ break;
+ case LogLevel.ERROR:
+ logger.current.error(logMessage, PAYLOADS_BY_SIZE[payloadSize]);
+ break;
+ case LogLevel.INFO:
+ logger.current.info(logMessage, PAYLOADS_BY_SIZE[payloadSize]);
+ break;
+ case LogLevel.WARN:
+ logger.current.warn(logMessage, PAYLOADS_BY_SIZE[payloadSize]);
+ break;
+ }
+ }
+ }
+
+ const HeavyImage = ({ url }: { url: string }) => {
+ useEffect(() => {
+ log();
+ }, []);
+
+ return ;
+ };
+
+ const renderImage = ({ item }: { item: { url: string } }) => (
+
+ );
+
+ const imageData = Array.from({ length: DEFAULT_IMAGES_TO_LOAD }, (_, index) => ({
+ key: index.toString(),
+ url: `${DEFAULT_HEAVY_IMAGE_URL}${index}`,
+ }));
+
+ return (
+
+ {readyToRun && isFocused && (
+ item.key}
+ />
+ )}
+
+ )
+}
+
+export default ImageListScreen;
\ No newline at end of file
diff --git a/benchmarks/src/scenario/Logs/HeavyTraffic/logsHeavyTraffic.tsx b/benchmarks/src/scenario/Logs/HeavyTraffic/logsHeavyTraffic.tsx
new file mode 100644
index 000000000..1f8171ba4
--- /dev/null
+++ b/benchmarks/src/scenario/Logs/HeavyTraffic/logsHeavyTraffic.tsx
@@ -0,0 +1,70 @@
+/*
+ * 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 from 'react';
+import { createStaticNavigation, useNavigation } from '@react-navigation/native';
+import { createNativeStackNavigator } from '@react-navigation/native-stack';
+import {
+ Text,
+ Pressable
+} from 'react-native';
+import type { LogsHeavyTrafficScenarioProps } from "../types";
+import ImageListScreen from './imageList';
+import ConfigScreen from './config';
+import { Colors } from '../../../common/styles';
+
+function LogsHeavyTrafficScenario(props: LogsHeavyTrafficScenarioProps): React.JSX.Element {
+ function ConfigHeaderButton() {
+ const navigation = useNavigation();
+
+ return (
+ navigation.navigate('Config' as never)}>
+ {"Config"}
+
+ );
+ }
+
+ const ImageListWithProps = () => {
+ return ;
+ };
+
+ const RootStack = createNativeStackNavigator({
+ initialRouteName: "ImageList",
+ screenOptions: {
+ headerTintColor: Colors.DatadogPurple,
+ headerTitleAlign: 'left',
+ headerTitleStyle: {
+ fontSize: 22,
+ fontWeight: 'bold',
+ },
+ headerRight: () =>
+ },
+ screens: {
+ ImageList: {
+ screen: ImageListWithProps,
+ options: {
+ title: "HeavyTraffic",
+ }
+ } ,
+ Config: {
+ screen: ConfigScreen,
+ options: {
+ title: '',
+ headerLeft: undefined,
+ headerRight: undefined,
+ }
+ }
+ }
+ });
+
+ const Navigation = createStaticNavigation(RootStack);
+
+ return (
+
+ )
+}
+
+export default LogsHeavyTrafficScenario;
\ No newline at end of file
diff --git a/benchmarks/src/scenario/Logs/constants.ts b/benchmarks/src/scenario/Logs/constants.ts
new file mode 100644
index 000000000..8104c33fb
--- /dev/null
+++ b/benchmarks/src/scenario/Logs/constants.ts
@@ -0,0 +1,20 @@
+import { Platform } from "react-native";
+import { LogLevel, PayloadSize } from "./types";
+
+export const DEFAULT_LOG_MESSAGE = `Hello from the RN ${Platform.OS} Benchmark app`;
+export const DEFAULT_LOGS_PER_SECOND = 10;
+export const DEFAULT_LOGS_PER_BATCH = 10;
+export const DEFAULT_LOG_INTERVAL = 1; // In seconds
+export const DEFAULT_IMAGES_TO_LOAD = 1000;
+export const DEFAULT_HEAVY_IMAGE_URL = "https://picsum.photos/800/600?random=";
+export const MAX_LOG_OUTPUT_ENTRIES = 20;
+
+export const LOG_LEVELS = Object.entries(LogLevel).map(([key, value]) => ({
+ label: key,
+ value,
+}));
+
+export const PAYLOAD_SIZES = Object.entries(PayloadSize).map(([key, value]) => ({
+ label: key,
+ value,
+}));
\ No newline at end of file
diff --git a/benchmarks/src/scenario/Logs/types.ts b/benchmarks/src/scenario/Logs/types.ts
new file mode 100644
index 000000000..c90b1ada8
--- /dev/null
+++ b/benchmarks/src/scenario/Logs/types.ts
@@ -0,0 +1,87 @@
+/*
+ * 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";
+import { Platform } from 'react-native';
+
+export enum PayloadSize {
+ Small = 'Small',
+ Medium = 'Medium',
+ Large = 'Large',
+}
+
+export enum LogLevel {
+ DEBUG = 'debug',
+ INFO = 'info',
+ WARN = 'warn',
+ ERROR = 'error'
+}
+
+export type LogsCustomScenarioProps = {
+ testConfig?: TestConfig,
+}
+
+export type LogsHeavyTrafficScenarioProps = {
+ testConfig?: TestConfig,
+}
+
+export type ImageListProps = {
+ testConfig?: TestConfig,
+}
+
+export type LogsHeavyTrafficConfigParams = {
+ logMessage?: string;
+ logLevel?: LogLevel;
+ payloadSize?: PayloadSize;
+ logsPerBatch?: number;
+}
+
+export const PAYLOADS_BY_SIZE = {
+ Small: {
+ log_type: "simple",
+ },
+ Medium: {
+ user: {
+ id: "ded3deb2-08cf-4c4f-8c41-fb64765071f0",
+ name: "John Doe",
+ email: "johndoe@example.com",
+ },
+ device: {
+ type: Platform.OS === 'ios' ? "iPhone" : "Android Phone",
+ os: Platform.OS === 'ios' ? "iOS 17.0" : "Android 15",
+ },
+ log_type: "user_event",
+ },
+ Large: {
+ log_type: "user_event",
+ session: {
+ id: "23091509-8e00-4802-ae41-dcb89b7ff999",
+ startTime: "2024-02-27T12:00:00Z",
+ duration: "2450",
+ },
+ user: {
+ id: "a1b2c3d4-e5f6-7g8h-9i0j-k1l2m3n4o5p6",
+ name: "John Doe",
+ email: "johndoe@example.com",
+ },
+ location: {
+ city: "San Francisco",
+ country: "USA",
+ },
+ device: {
+ model: Platform.OS === 'ios' ? "iPhone 15 Pro" : "Google Pixel 8",
+ os: Platform.OS === 'ios' ? "iOS 17.0" : "Android 15",
+ battery: "80%",
+ },
+ network: {
+ type: "WiFi",
+ carrier: "Verizon",
+ },
+ errorStack: {
+ stackTrace: "Error at module XYZ -> function ABC",
+ crashType: "NullPointerException",
+ },
+ },
+};
\ 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/scenario/RUM/Auto/rumAutoScenario.tsx b/benchmarks/src/scenario/RUM/Auto/rumAutoScenario.tsx
new file mode 100644
index 000000000..4e1d7b6df
--- /dev/null
+++ b/benchmarks/src/scenario/RUM/Auto/rumAutoScenario.tsx
@@ -0,0 +1,91 @@
+/*
+ * 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 * as React from 'react';
+import { Platform } from 'react-native';
+import { useNavigationContainerRef } from '@react-navigation/native';
+import { DatadogProvider } from "@datadog/mobile-react-native";
+import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
+import { NavigationContainer } from "@react-navigation/native";
+import { DdRumReactNavigationTracking, type ViewNamePredicate } from '@datadog/mobile-react-navigation';
+import type { Route } from "@react-navigation/native";
+import { RunType } from '../../../testSetup/types/testConfig';
+import { getDatadogProviderConfig } from '../../../testSetup/testUtils';
+import type { RUMAutoScenarioProps, RootStackParamList } from './types';
+import { createNativeStackNavigator } from '@react-navigation/native-stack';
+import CharactersScreen from './screens/characters';
+import LocationsScreen from './screens/locations';
+import EpisodesScreen from './screens/episodes';
+import DocsScreen from './screens/docs';
+import CharacterDetailScreen from './screens/characterDetail';
+import EpisodeDetailScreen from './screens/episodeDetail';
+import LocationDetailScreen from './screens/locationDetail';
+
+function RUMAutoScenario(props: RUMAutoScenarioProps): React.JSX.Element {
+ const instrumented = props.testConfig?.runType !== RunType.BASELINE;
+ const navigationRef = useNavigationContainerRef();
+ const viewNamePredicate: ViewNamePredicate = function customViewNamePredicate(route: Route, trackedName: string) {
+ return `RN ${Platform.OS} Benchmark - RUM Auto - ${trackedName} / ${route.name}`;
+ };
+
+ const onDatadogInitialization = () => {
+ console.info("Datadog SDK initialized");
+ };
+
+ const Tab = createBottomTabNavigator();
+ const RootStack = createNativeStackNavigator();
+
+ function TabNavigatior() {
+ return (
+
+
+
+
+
+
+ )
+ }
+
+ function renderApp() {
+ return (
+ {
+ if (instrumented) {
+ DdRumReactNavigationTracking.startTrackingViews(navigationRef.current, viewNamePredicate);
+ };
+ }}>
+
+
+
+
+
+
+
+ )
+ };
+
+ if (instrumented) {
+ return (
+
+ {renderApp()}
+
+ )
+ } else {
+ return renderApp();
+ };
+}
+
+export default RUMAutoScenario;
\ No newline at end of file
diff --git a/benchmarks/src/scenario/RUM/Auto/screens/characterDetail.tsx b/benchmarks/src/scenario/RUM/Auto/screens/characterDetail.tsx
new file mode 100644
index 000000000..20329c589
--- /dev/null
+++ b/benchmarks/src/scenario/RUM/Auto/screens/characterDetail.tsx
@@ -0,0 +1,89 @@
+/*
+ * 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 { useNavigation, useRoute } from '@react-navigation/native';
+import React, { useEffect, useState } from 'react';
+import {
+ Alert,
+ FlatList,
+ Image,
+ Pressable,
+ SafeAreaView,
+ Text,
+ View,
+} from 'react-native';
+import { CommonStyles as styles } from '../../../../common/styles';
+import type { CharacterNavigationParams } from '../types';
+import RickMortyService from '../service/rickMorty';
+
+function CharacterDetailScreen(): React.JSX.Element {
+ const navigation = useNavigation();
+ const params = useRoute()?.params as CharacterNavigationParams;
+ const character = params?.character;
+ const episodeURLs = character.episode;
+ const origin = params?.origin;
+ const [episodes, setEpisodes] = useState ([]);
+
+ useEffect(() => {
+ navigation.setOptions({ headerBackTitle: origin, headerTitle: '' });
+ }, []);
+
+ const onShowEpisodes = async () => {
+ try {
+ const episodeNames = await Promise.all(episodeURLs.map((url) =>
+ RickMortyService.fetchRequest(url).then(json => json.name)
+ ));
+ setEpisodes(episodeNames);
+ } catch (_error) {
+ Alert.alert("Something went wrong. Please try again later.");
+ };
+ };
+
+ const renderEpisode = ({item}: {item: string}) => {
+ return (
+
+ {item}
+
+ );
+ };
+
+ return (
+
+
+
+ {character.name}
+
+ {'Name'}
+ {character.name}
+
+
+ {'Status'}
+ {character.status}
+
+
+ {'Species'}
+ {character.species}
+
+
+ {'Gender'}
+ {character.gender}
+
+
+ {`Episodes: ${character.episode.length}`}
+
+
+
+
+ );
+};
+
+export default CharacterDetailScreen;
\ No newline at end of file
diff --git a/benchmarks/src/scenario/RUM/Auto/screens/characters.tsx b/benchmarks/src/scenario/RUM/Auto/screens/characters.tsx
new file mode 100644
index 000000000..64cfacf27
--- /dev/null
+++ b/benchmarks/src/scenario/RUM/Auto/screens/characters.tsx
@@ -0,0 +1,91 @@
+/*
+ * 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 {
+ Alert,
+ FlatList,
+ Image,
+ Pressable,
+ SafeAreaView,
+ Text,
+ View,
+} from 'react-native';
+import type { CharacterDetailNavigationProp } from '../types';
+import { CommonStyles as styles } from '../../../../common/styles';
+import RickMortyService from '../service/rickMorty';
+import type { Character } from '../service/types';
+import { useNavigation } from '@react-navigation/native';
+
+function CharactersScreen(): React.JSX.Element {
+ const navigation = useNavigation();
+ const [nextPage, setNextPage] = useState(undefined);
+ const [characterData, setCharacterData] = useState([]);
+
+ useEffect(() => {
+ getCharacters();
+ }, []);
+
+ const getCharacters = (page?: number) => {
+ RickMortyService.fetchCharacters(page).then((data) => {
+ const next = data?.info?.next ? parseInt(data.info.next.split("=")[1], 10) : undefined;
+ setCharacterData([ ...characterData, ...data.results]);
+ setNextPage(next);
+ }).catch((error) => {
+ Alert.alert("Something went wrong. Please try again later.", error);
+ setCharacterData([]);
+ setNextPage(undefined);
+ });
+ };
+
+ const showCharacterDetail = (character: Character) => {
+ navigation.navigate('CharacterDetail', { character, origin: 'Characters'});
+ };
+
+ const onEndReached = () => {
+ nextPage && getCharacters(nextPage);
+ };
+
+ const renderCharacterCell = ({item}: {item: Character} ) => {
+ return (
+ showCharacterDetail(item)}
+ >
+
+
+ {item.name}
+ {item.species}
+ {item.status}
+ {item.origin.name}
+
+ {">"}
+
+ );
+ };
+
+ return (
+
+
+
+
+
+ );
+};
+
+export default CharactersScreen;
\ No newline at end of file
diff --git a/benchmarks/src/scenario/RUM/Auto/screens/docs.tsx b/benchmarks/src/scenario/RUM/Auto/screens/docs.tsx
new file mode 100644
index 000000000..6ba5f79c2
--- /dev/null
+++ b/benchmarks/src/scenario/RUM/Auto/screens/docs.tsx
@@ -0,0 +1,29 @@
+/*
+ * 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 from 'react';
+import { WebView } from "@datadog/mobile-react-native-webview";
+import { Alert, SafeAreaView } from 'react-native';
+import { CommonStyles as styles} from '../../../../common/styles';
+
+function DocsScreen(): React.JSX.Element {
+ const onError = () => {
+ Alert.alert("Something went wrong, try again later.");
+ };
+
+ return (
+
+
+
+ );
+};
+
+export default DocsScreen;
\ No newline at end of file
diff --git a/benchmarks/src/scenario/RUM/Auto/screens/episodeDetail.tsx b/benchmarks/src/scenario/RUM/Auto/screens/episodeDetail.tsx
new file mode 100644
index 000000000..a6a280af8
--- /dev/null
+++ b/benchmarks/src/scenario/RUM/Auto/screens/episodeDetail.tsx
@@ -0,0 +1,106 @@
+/*
+ * 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 {
+ ActivityIndicator,
+ Alert,
+ FlatList,
+ Image,
+ Pressable,
+ SafeAreaView,
+ Text,
+ View,
+} from 'react-native';
+import { useNavigation, useRoute } from '@react-navigation/native';
+import type { CharacterDetailNavigationProp, EpisodeNavigationParams } from '../types';
+import React, { useEffect, useState } from 'react';
+import { CommonStyles as styles } from '../../../../common/styles';
+import RickMortyService from '../service/rickMorty';
+import type { Character } from '../service/types';
+
+function EpisodeDetailScreen(): React.JSX.Element {
+ const navigation = useNavigation();
+ const params = useRoute()?.params as EpisodeNavigationParams;
+ const episode = params?.episode;
+ const characterURLS = episode.characters;
+ const origin = params?.origin;
+ const [characters, setCharacters] = useState([]);
+ const [isLoading, setIsLoading] = useState(false);
+
+ useEffect(() => {
+ navigation.setOptions({ headerBackTitle: origin, headerTitle: episode.episode});
+ getCharacters();
+ }, []);
+
+ const getCharacters = async () => {
+ try {
+ setIsLoading(true);
+ const charaterList = await Promise.all(characterURLS.map((url) =>
+ RickMortyService.fetchRequest(url).then(json => json as Character)
+ ));
+ setCharacters(charaterList);
+ } catch (_error) {
+ Alert.alert("Something went wrong. Please try again later.");
+ } finally {
+ setIsLoading(false);
+ };
+ };
+
+ const showCharacterDetail = (character: Character) => {
+ navigation.navigate('CharacterDetail', { character, origin: episode.episode});
+ };
+
+ const renderCharacter = ({item}: {item: Character}) => {
+ return (
+
+ showCharacterDetail(item)}
+ style={styles.gridItem}
+ >
+
+
+ {item.name}
+
+
+ );
+ };
+
+
+ return (
+
+
+ {episode.name}
+
+ {'Code'}
+ {episode.episode}
+
+
+ {'Air date'}
+ {episode.air_date}
+
+
+ {'Created'}
+ {episode.created}
+
+ {isLoading && }
+
+
+
+ );
+};
+
+export default EpisodeDetailScreen;
\ No newline at end of file
diff --git a/benchmarks/src/scenario/RUM/Auto/screens/episodes.tsx b/benchmarks/src/scenario/RUM/Auto/screens/episodes.tsx
new file mode 100644
index 000000000..be1b4e39d
--- /dev/null
+++ b/benchmarks/src/scenario/RUM/Auto/screens/episodes.tsx
@@ -0,0 +1,85 @@
+/*
+ * 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 {
+ Alert,
+ FlatList,
+ Pressable,
+ SafeAreaView,
+ Text,
+ View,
+} from 'react-native';
+import type { EpisodeDetailNavigationProp } from '../types';
+import { CommonStyles as styles } from '../../../../common/styles';
+import RickMortyService from '../service/rickMorty';
+import { useNavigation } from '@react-navigation/native';
+import type { Episode } from '../service/types';
+
+function EpisodesScreen(): React.JSX.Element {
+ const navigation = useNavigation();
+ const [nextPage, setNextPage] = useState(undefined);
+ const [episodeData, setEpisodeData] = useState([]);
+
+ useEffect(() => {
+ getEpisodes();
+ }, []);
+
+ const getEpisodes = (page? :number) => {
+ RickMortyService.fetchEpisodes(page).then((data) => {
+ const next = data?.info?.next ? parseInt(data.info.next.split("=")[1], 10) : undefined;
+ setEpisodeData([ ...episodeData, ...data.results]);
+ setNextPage(next);
+ }).catch((error) => {
+ Alert.alert("Something went wrong. Please try again later.", error);
+ setEpisodeData([]);
+ setNextPage(undefined);
+ });
+ };
+
+ const showEpisodeDetail = (episode: Episode) => {
+ navigation.navigate('EpisodeDetail', { episode, origin: 'Episodes'});
+ };
+
+ const renderEpisodeCell = ({item}: {item: Episode} ) => {
+ return(
+ { showEpisodeDetail(item)}}
+ >
+
+ {item.name}
+ {item.episode}
+ {item.air_date}
+
+
+
+ );
+ };
+
+ const onEndReached = () => {
+ nextPage && getEpisodes(nextPage);
+ };
+
+ return (
+
+
+
+
+
+ );
+};
+
+export default EpisodesScreen;
\ No newline at end of file
diff --git a/benchmarks/src/scenario/RUM/Auto/screens/locationDetail.tsx b/benchmarks/src/scenario/RUM/Auto/screens/locationDetail.tsx
new file mode 100644
index 000000000..263a31c17
--- /dev/null
+++ b/benchmarks/src/scenario/RUM/Auto/screens/locationDetail.tsx
@@ -0,0 +1,106 @@
+/*
+ * 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 {
+ ActivityIndicator,
+ Alert,
+ FlatList,
+ Image,
+ Pressable,
+ SafeAreaView,
+ Text,
+ View,
+} from 'react-native';
+import { useNavigation, useRoute } from '@react-navigation/native';
+import type { CharacterDetailNavigationProp, LocationNavigationParams } from '../types';
+import React, { useEffect, useState } from 'react';
+import { CommonStyles as styles } from '../../../../common/styles';
+import RickMortyService from '../service/rickMorty';
+import type { Character } from '../service/types';
+
+function LocationDetailScreen(): React.JSX.Element {
+ const navigation = useNavigation();
+ const params = useRoute()?.params as LocationNavigationParams;
+ const location = params?.location;
+ const characterURLS = location.residents;
+ const origin = params?.origin;
+ const [characters, setCharacters] = useState([]);
+ const [isLoading, setIsLoading] = useState(false);
+
+ useEffect(() => {
+ navigation.setOptions({ headerBackTitle: origin, headerTitle: ''});
+ getCharacters();
+ }, []);
+
+ const getCharacters = async () => {
+ try {
+ setIsLoading(true);
+ const charaterList = await Promise.all(characterURLS.map((url) =>
+ RickMortyService.fetchRequest(url).then(json => json as Character)
+ ));
+ setCharacters(charaterList);
+ } catch (_error) {
+ Alert.alert("Something went wrong. Please try again later.");
+ } finally {
+ setIsLoading(false);
+ };
+ };
+
+ const showCharacterDetail = (character: Character) => {
+ navigation.navigate('CharacterDetail', { character, origin: location.name});
+ };
+
+ const renderCharacter = ({item}: {item: Character}) => {
+ return (
+
+ showCharacterDetail(item)}
+ style={styles.gridItem}
+ >
+
+
+ {item.name}
+
+
+ );
+ };
+
+
+ return (
+
+
+ {location.name}
+
+ {'Type'}
+ {location.type}
+
+
+ {'Dimension'}
+ {location.dimension}
+
+
+ {'Created'}
+ {location.created}
+
+ {isLoading && }
+
+
+
+ );
+};
+
+export default LocationDetailScreen;
\ No newline at end of file
diff --git a/benchmarks/src/scenario/RUM/Auto/screens/locations.tsx b/benchmarks/src/scenario/RUM/Auto/screens/locations.tsx
new file mode 100644
index 000000000..ac4fa2d54
--- /dev/null
+++ b/benchmarks/src/scenario/RUM/Auto/screens/locations.tsx
@@ -0,0 +1,84 @@
+/*
+ * 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 {
+ Alert,
+ FlatList,
+ Pressable,
+ SafeAreaView,
+ Text,
+ View,
+} from 'react-native';
+import type { LocationDetailNavigationProp } from '../types';
+import { CommonStyles as styles } from '../../../../common/styles';
+import RickMortyService from '../service/rickMorty';
+import { useNavigation } from '@react-navigation/native';
+import type { Location } from '../service/types';
+function LocationsScreen(): React.JSX.Element {
+ const navigation = useNavigation();
+ const [nextPage, setNextPage] = useState(undefined);
+ const [locationData, setLocationData] = useState([]);
+
+ useEffect(() => {
+ getLocations();
+ }, []);
+
+ const getLocations = (page? :number) => {
+ RickMortyService.fetchLocations(page).then((data) => {
+ const next = data?.info?.next ? parseInt(data.info.next.split("=")[1], 10) : undefined;
+ setLocationData([ ...locationData, ...data.results]);
+ setNextPage(next);
+ }).catch((error) => {
+ Alert.alert("Something went wrong. Please try again later.", error);
+ setLocationData([]);
+ setNextPage(undefined);
+ });
+ };
+
+ const showLocationDetail = (location: Location) => {
+ navigation.navigate('LocationDetail', { location, origin: 'Locations'});
+ };
+
+ const renderLocationCell = ({item}: {item: Location} ) => {
+ return(
+ { showLocationDetail(item)}}
+ >
+
+ {item.name}
+ {item.type}
+ {item.dimension}
+
+
+
+ );
+ };
+
+ const onEndReached = () => {
+ nextPage && getLocations(nextPage);
+ };
+
+ return (
+
+
+
+
+
+ );
+};
+
+export default LocationsScreen;
\ No newline at end of file
diff --git a/benchmarks/src/scenario/RUM/Auto/service/rickMorty.ts b/benchmarks/src/scenario/RUM/Auto/service/rickMorty.ts
new file mode 100644
index 000000000..2c776dfef
--- /dev/null
+++ b/benchmarks/src/scenario/RUM/Auto/service/rickMorty.ts
@@ -0,0 +1,36 @@
+/*
+ * 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.
+ */
+
+
+const BASE_URL = "https://rickandmortyapi.com/api";
+const CHARACTERS_ENDPOINT = "character";
+const LOCATIONS_ENDPOINT = "location";
+const EPISODES_ENDPOINT = "episode";
+
+class RickMortyService {
+ fetchRequest(url: string, page?: number) {
+ const fullURL = url + (page ? ("?page=" + page.toString()) : '');
+ return fetch(fullURL).then((data) => {
+ return data.json();
+ }).catch((_error) => {
+ return Promise.reject();
+ })
+ };
+
+ fetchCharacters(page?: number) {
+ return this.fetchRequest(BASE_URL + "/" + CHARACTERS_ENDPOINT, page);
+ };
+
+ fetchLocations(page?: number) {
+ return this.fetchRequest(BASE_URL + "/" + LOCATIONS_ENDPOINT, page);
+ };
+
+ fetchEpisodes(page?: number) {
+ return this.fetchRequest(BASE_URL + "/" + EPISODES_ENDPOINT, page);
+ };
+};
+
+export default new RickMortyService();
\ No newline at end of file
diff --git a/benchmarks/src/scenario/RUM/Auto/service/types.ts b/benchmarks/src/scenario/RUM/Auto/service/types.ts
new file mode 100644
index 000000000..d27168f26
--- /dev/null
+++ b/benchmarks/src/scenario/RUM/Auto/service/types.ts
@@ -0,0 +1,37 @@
+/*
+ * 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 interface Character {
+ id: number;
+ name: string;
+ species: string;
+ status: string;
+ gender: string;
+ image: string;
+ origin: {
+ name: string;
+ url: string;
+ },
+ episode: string[];
+};
+
+export interface Location {
+ id: string;
+ dimension: string;
+ name: string;
+ residents: string[];
+ type: string;
+ created: string;
+};
+
+export interface Episode {
+ id: number;
+ name: string;
+ episode: string;
+ air_date: string;
+ created: string;
+ characters: string[];
+};
\ No newline at end of file
diff --git a/benchmarks/src/scenario/RUM/Auto/types.ts b/benchmarks/src/scenario/RUM/Auto/types.ts
new file mode 100644
index 000000000..2fff9fe2f
--- /dev/null
+++ b/benchmarks/src/scenario/RUM/Auto/types.ts
@@ -0,0 +1,39 @@
+/*
+ * 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 { NativeStackNavigationProp } from '@react-navigation/native-stack';
+import type { TestConfig } from "benchmarks/src/testSetup/types/testConfig";
+import type { Character, Location, Episode } from "./service/types";
+
+export type RUMAutoScenarioProps = {
+ testConfig?: TestConfig,
+};
+
+export interface CharacterNavigationParams {
+ character: Character;
+ origin: string;
+};
+
+export interface LocationNavigationParams {
+ location: Location;
+ origin: string;
+};
+
+export interface EpisodeNavigationParams {
+ episode: Episode;
+ origin: string;
+};
+
+export type RootStackParamList = {
+ Tabs: undefined;
+ CharacterDetail: CharacterNavigationParams;
+ LocationDetail: LocationNavigationParams;
+ EpisodeDetail: EpisodeNavigationParams;
+};
+
+export type CharacterDetailNavigationProp = NativeStackNavigationProp;
+export type EpisodeDetailNavigationProp = NativeStackNavigationProp;
+export type LocationDetailNavigationProp = NativeStackNavigationProp;
\ No newline at end of file
diff --git a/benchmarks/src/scenario/RUM/Manual/rumManualScenario.tsx b/benchmarks/src/scenario/RUM/Manual/rumManualScenario.tsx
new file mode 100644
index 000000000..a75fd6e91
--- /dev/null
+++ b/benchmarks/src/scenario/RUM/Manual/rumManualScenario.tsx
@@ -0,0 +1,305 @@
+/*
+ * 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, useRef, useState} from 'react';
+import {
+ Button,
+ Platform,
+ Pressable,
+ SafeAreaView,
+ Switch,
+ Text,
+ TextInput,
+ View,
+} from 'react-native';
+import { DdRum, ErrorSource, RumActionType } from '@datadog/mobile-react-native';
+import { RUMEvent} from '../types';
+import type { RUMManualScenarioProps } from '../types';
+import { RunType } from '../../../testSetup/types/testConfig';
+import { instrument, sleep } from '../../../testSetup/testUtils';
+import { Colors, CommonStyles as styles } from '../../../common/styles';
+import Picker from '../../../component/Picker/Picker';
+import Stepper from '../../../component/Stepper/Stepper';
+import { RUM_ACTION_TYPES, RUM_EVENTS } from '../constants';
+import { Monitor } from '../../../testSetup/monitor';
+
+const OS = Platform.OS
+const DEFAULT_EVENTS_PER_SECOND = 5;
+const DEFAULT_INTERVAL_SECONDS = 2;
+const DEFAULT_VIEW_NAME = 'FooComponentView';
+const DEFAULT_ACTION_URL = 'actionEventTitle';
+const DEFAULT_RESOURCE_URL = 'https://api.shopist.io/checkout.json';
+const DEFAULT_ERROR_MESSAGE = `RN ${OS} benchmark debug error message`;
+
+function RUMManualScenario(props: RUMManualScenarioProps): React.JSX.Element {
+ const monitor = useRef(Monitor);
+
+ const isSending = useRef(false);
+ const [isSendingState, setIsSendingState] = useState(isSending.current);
+ const [eventsSentCount, setEventsSentCount] = useState(0);
+
+ const [eventType, setEventType] = useState(RUMEvent.View);
+ const [viewName, setViewName] = useState(DEFAULT_VIEW_NAME);
+ const [actionType, setActionType] = useState(RumActionType.TAP);
+ const [actionURL, setActionURL] = useState(DEFAULT_ACTION_URL);
+ const [resourceURL, setResourceURL] = useState(DEFAULT_RESOURCE_URL);
+ const [errorMessage, setErrorMessage] = useState(DEFAULT_ERROR_MESSAGE);
+
+ const [eventsPerBatch, setEventsPerBatch] = useState(DEFAULT_EVENTS_PER_SECOND);
+ const [intervalSeconds, setIntervalSeconds] = useState(DEFAULT_INTERVAL_SECONDS);
+
+ const [isRepeatSendingEvents, setIsRepeatSendingEvents] = useState(false);
+
+ useEffect(() => {
+ if (props.testConfig?.runType !== RunType.BASELINE) {
+ instrument().then(() => {
+ monitor.current = DdRum;
+ monitor.current.startView('rumManualScenarioView', 'rumManual');
+ });
+ }
+
+ return(() => {
+ monitor.current.stopView('rumManualScenarioView');
+ });
+ }, []);
+
+ const onEventTypeChanged = (newEventType: RUMEvent | unknown) => {
+ setEventType(newEventType as RUMEvent);
+ };
+
+ const onActionTypeChanged = (newActionType: RumActionType | unknown) => {
+ setActionType(newActionType as RumActionType);
+ };
+
+ const onEventsPerBatchChanged = (newEventsPerBatch: string) => {
+ const newEventsPerBatchNumber = parseInt(newEventsPerBatch, 10);
+ if (!Number.isNaN(newEventsPerBatchNumber)) {
+ setEventsPerBatch(newEventsPerBatchNumber);
+ } else {
+ setEventsPerBatch(0);
+ }
+ };
+
+ const onEventsPerBatchDecrease = () => {
+ const newEventsPerBatch = eventsPerBatch > 1 ? eventsPerBatch - 1 : 1;
+ setEventsPerBatch(newEventsPerBatch);
+ };
+
+ const onEventsPerBatchIncrease = () => {
+ setEventsPerBatch(eventsPerBatch + 1);
+ };
+
+ const onIntervalSecondsChanged = (newIntervalSeconds: string) => {
+ const newIntervalSecondsNumber = parseInt(newIntervalSeconds, 10);
+ if (!Number.isNaN(newIntervalSecondsNumber)) {
+ setIntervalSeconds(newIntervalSecondsNumber);
+ } else {
+ setIntervalSeconds(0);
+ }
+ };
+
+ const onIntervalSecondsDecrease = () => {
+ const newIntervalSeconds = intervalSeconds > 1 ? intervalSeconds - 1 : 1;
+ setIntervalSeconds(newIntervalSeconds);
+ };
+
+ const onIntervalSecondsIncrease = () => {
+ setIntervalSeconds(intervalSeconds + 1);
+ };
+
+ const onToggleIsRepeatSendingEvents = () => {
+ setIsRepeatSendingEvents(!isRepeatSendingEvents);
+ };
+
+ const startSending = () => {
+ isSending.current = true;
+ setIsSendingState(true);
+
+ if (isRepeatSendingEvents) {
+ const sendInterval = setInterval(() => {
+ if (!isSending.current) {
+ clearInterval(sendInterval);
+ stopSending();
+ return;
+ }
+ sendEvents();
+ }, intervalSeconds * 1000); // in ms
+ } else {
+ sendEvents();
+ stopSending();
+ }
+ };
+
+ const stopSending = () => {
+ isSending.current = false;
+ setIsSendingState(false);
+ };
+
+ const sendEvents = async () => {
+ for (let i=0; i prev + eventsPerBatch);
+ };
+
+ const sendViewEvent = async () => {
+ monitor.current.startView(viewName, viewName);
+ await sleep(500);
+ monitor.current.stopView(viewName);
+ };
+
+ const sendActionEvent = async () => {
+ monitor.current.startView(viewName, viewName);
+ await sleep(200);
+ monitor.current.addAction(actionType, viewName);
+ await sleep(500);
+ monitor.current.stopView(viewName);
+ };
+
+ const sendResourceEvent = async () => {
+ monitor.current.startView(viewName, viewName);
+ const resourceKey = '/resource/1';
+ monitor.current.startResource(resourceKey, 'GET', resourceURL);
+ await sleep(200);
+ monitor.current.stopResource(resourceKey, 200, 'image');
+ monitor.current.stopView(viewName);
+ };
+
+ const sendErrorEvent = () => {
+ monitor.current.startView(viewName, viewName);
+ monitor.current.addError(errorMessage, ErrorSource.NETWORK, 'foo.js:45');
+ monitor.current.stopView(viewName);
+ };
+
+ return (
+
+
+ RUM EVENT SELECTION
+
+
+ {'Select RUM event'}
+
+
+
+ {`${eventType.toUpperCase()} EVENT CONFIGURATION`}
+
+
+
+
+ {eventType === RUMEvent.Action &&
+
+ {'Action Type'}
+
+
+ }
+ {eventType === RUMEvent.Action &&
+
+
+
+ }
+ {eventType === RUMEvent.Resource &&
+
+
+
+ }
+ {eventType === RUMEvent.Error &&
+
+
+
+ }
+
+ SENDING CONFIGURATION
+
+
+ {'Events per Batch:'}
+
+
+
+
+ {'Interval (sec):'}
+
+
+
+
+
+ {'Repeat sending events'}
+
+
+
+
+
+
+
+ {`Events sent: ${eventsSentCount}`}
+
+
+ );
+};
+
+export default RUMManualScenario;
\ No newline at end of file
diff --git a/benchmarks/src/scenario/RUM/constants.ts b/benchmarks/src/scenario/RUM/constants.ts
new file mode 100644
index 000000000..c925bae2b
--- /dev/null
+++ b/benchmarks/src/scenario/RUM/constants.ts
@@ -0,0 +1,18 @@
+/*
+ * 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 { RumActionType } from "@datadog/mobile-react-native";
+import { RUMEvent } from "./types";
+
+export const RUM_EVENTS = Object.entries(RUMEvent).map(([key, value]) => ({
+ label: key,
+ value,
+}));
+
+export const RUM_ACTION_TYPES = Object.entries(RumActionType).map(([key, value]) => ({
+ label: key,
+ value,
+}));
\ No newline at end of file
diff --git a/benchmarks/src/scenario/RUM/types.ts b/benchmarks/src/scenario/RUM/types.ts
new file mode 100644
index 000000000..749f0cb89
--- /dev/null
+++ b/benchmarks/src/scenario/RUM/types.ts
@@ -0,0 +1,19 @@
+/*
+ * 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 RUMManualScenarioProps = {
+ testConfig?: TestConfig,
+}
+
+export enum RUMEvent {
+ View = "View",
+ Action = "Action",
+ Resource = "Resource",
+ Error = "Error",
+};
+
diff --git a/benchmarks/src/scenario/SessionReplay/UICatalogMenu.tsx b/benchmarks/src/scenario/SessionReplay/UICatalogMenu.tsx
new file mode 100644
index 000000000..0ea1ba866
--- /dev/null
+++ b/benchmarks/src/scenario/SessionReplay/UICatalogMenu.tsx
@@ -0,0 +1,38 @@
+import {
+ SafeAreaView,
+ ScrollView,
+ Pressable,
+ Text,
+} from 'react-native';
+import React from 'react';
+import { useNavigation } from '@react-navigation/native';
+
+import { CommonStyles as styles } from '../../common/styles';
+import { UIElement } from './types';
+
+function UICatalogMenu(): React.JSX.Element {
+ const navigation = useNavigation();
+
+ const goToDetail = (component: string) => {
+ navigation.navigate('UIDetailView' as unknown as never, {component} as unknown as never);
+ };
+
+ return (
+
+
+ {Object.values(UIElement).map((entry: string, index: number) => (
+ goToDetail(entry)}
+ style={styles.uiElementCell}
+ >
+ {entry}
+ {">"}
+
+ ))}
+
+
+ )
+};
+
+export default UICatalogMenu;
diff --git a/benchmarks/src/scenario/SessionReplay/UIDetailView.tsx b/benchmarks/src/scenario/SessionReplay/UIDetailView.tsx
new file mode 100644
index 000000000..a95ae9809
--- /dev/null
+++ b/benchmarks/src/scenario/SessionReplay/UIDetailView.tsx
@@ -0,0 +1,78 @@
+import {
+ View,
+ SafeAreaView,
+ Text,
+} from 'react-native';
+import React, { useEffect } from 'react';
+import { type RouteProp, useNavigation, useRoute } from '@react-navigation/native';
+
+import type { SessionReplayStackParamList } from './types';
+import { CommonStyles as styles } from '../../common/styles';
+import { UIElement } from './types';
+import Picker from './component/Picker';
+import Buttons from './component/Buttons';
+import Images from './component/Images';
+import TextViews from './component/TextViews';
+import Views from './component/Views';
+import TextInputs from './component/TextInputs';
+import ActivityIndicators from './component/ActivityIndicators';
+import Switches from './component/Swtiches';
+import Webview from './component/WebView';
+import Sliders from './component/Sliders';
+import SectionList from './component/SectionList';
+import Modal from './component/Modal';
+
+type UIDetailViewRouteProp = RouteProp;
+
+function UIDetailView(): React.JSX.Element {
+ const navigation = useNavigation();
+ const route = useRoute();
+ const component = route.params?.component;
+
+ useEffect(() => {
+ navigation.setOptions({ headerBackTitle: 'Back', headerTitle: component });
+ }, []);
+
+ const renderUIElement = (component?: string) => {
+ switch(component) {
+ case UIElement.Views:
+ return ;
+ case UIElement.Images:
+ return
+ case UIElement.TextViews:
+ return ;
+ case UIElement.TextInputs:
+ return ;
+ case UIElement.Switches:
+ return ;
+ case UIElement.Buttons:
+ return ;
+ case UIElement.Picker:
+ return
+ case UIElement.Sliders:
+ return ;
+ case UIElement.ActivityIndicators:
+ return ;
+ case UIElement.WebView:
+ return ;
+ case UIElement.SectionList:
+ return ;
+ case UIElement.Modal:
+ return ;
+ default:
+ return (
+
+ Unknown UIElement :/
+
+ );
+ }
+ }
+
+ return (
+
+ {renderUIElement(component)}
+
+ )
+};
+
+export default UIDetailView;
diff --git a/benchmarks/src/scenario/SessionReplay/component/ActivityIndicators.tsx b/benchmarks/src/scenario/SessionReplay/component/ActivityIndicators.tsx
new file mode 100644
index 000000000..9e577cc3e
--- /dev/null
+++ b/benchmarks/src/scenario/SessionReplay/component/ActivityIndicators.tsx
@@ -0,0 +1,20 @@
+import {
+ ActivityIndicator,
+ View,
+} from 'react-native';
+import React from 'react';
+
+import { Colors, CommonStyles as styles } from '../../../common/styles';
+
+function ActivityIndicators(): React.JSX.Element {
+ return (
+
+
+
+
+
+
+ )
+};
+
+export default ActivityIndicators;
diff --git a/benchmarks/src/scenario/SessionReplay/component/Buttons.tsx b/benchmarks/src/scenario/SessionReplay/component/Buttons.tsx
new file mode 100644
index 000000000..9b7ade064
--- /dev/null
+++ b/benchmarks/src/scenario/SessionReplay/component/Buttons.tsx
@@ -0,0 +1,42 @@
+import {
+ Alert,
+ Button,
+ Pressable,
+ Text,
+ TouchableHighlight,
+ TouchableOpacity,
+ View,
+} from 'react-native';
+import React from 'react';
+
+import { CommonStyles as styles } from '../../../common/styles';
+
+function Buttons(): React.JSX.Element {
+ return (
+
+
+ )
+};
+
+export default Buttons;
diff --git a/benchmarks/src/scenario/SessionReplay/component/Images.tsx b/benchmarks/src/scenario/SessionReplay/component/Images.tsx
new file mode 100644
index 000000000..1ee2d40ce
--- /dev/null
+++ b/benchmarks/src/scenario/SessionReplay/component/Images.tsx
@@ -0,0 +1,24 @@
+import {
+ Image,
+ ScrollView,
+ View,
+} from 'react-native';
+import React from 'react';
+
+import { CommonStyles as styles } from '../../../common/styles';
+
+function ImageViews(): React.JSX.Element {
+ return (
+
+
+
+
+
+
+
+
+
+ )
+};
+
+export default ImageViews;
diff --git a/benchmarks/src/scenario/SessionReplay/component/Modal.tsx b/benchmarks/src/scenario/SessionReplay/component/Modal.tsx
new file mode 100644
index 000000000..2fb6b9567
--- /dev/null
+++ b/benchmarks/src/scenario/SessionReplay/component/Modal.tsx
@@ -0,0 +1,89 @@
+import {
+ Alert,
+ Modal as RNModal,
+ Pressable,
+ StyleSheet,
+ Text,
+ View,
+} from 'react-native';
+import React, { useState } from 'react';
+
+import { CommonStyles } from '../../../common/styles';
+
+function Modal(): React.JSX.Element {
+ const [modalVisible, setModalVisible] = useState(false);
+
+ return (
+
+ {
+ Alert.alert('Modal has been closed.');
+ setModalVisible(!modalVisible);
+ }}>
+
+
+ Hello World!
+ setModalVisible(!modalVisible)}>
+ Hide Modal
+
+
+
+
+ setModalVisible(true)}>
+ Show Modal
+
+
+ )
+};
+
+const styles = StyleSheet.create({
+ centeredView: {
+ flex: 1,
+ justifyContent: 'center',
+ alignItems: 'center',
+ },
+ modalView: {
+ margin: 20,
+ backgroundColor: 'white',
+ borderRadius: 20,
+ padding: 35,
+ alignItems: 'center',
+ shadowColor: '#000',
+ shadowOffset: {
+ width: 0,
+ height: 2,
+ },
+ shadowOpacity: 0.25,
+ shadowRadius: 4,
+ elevation: 5,
+ },
+ button: {
+ borderRadius: 20,
+ padding: 10,
+ elevation: 2,
+ },
+ buttonOpen: {
+ backgroundColor: '#F194FF',
+ },
+ buttonClose: {
+ backgroundColor: '#2196F3',
+ },
+ textStyle: {
+ color: 'white',
+ fontWeight: 'bold',
+ textAlign: 'center',
+ },
+ modalText: {
+ marginBottom: 15,
+ textAlign: 'center',
+ },
+});
+
+export default Modal;
diff --git a/benchmarks/src/scenario/SessionReplay/component/Picker.tsx b/benchmarks/src/scenario/SessionReplay/component/Picker.tsx
new file mode 100644
index 000000000..d843a7a40
--- /dev/null
+++ b/benchmarks/src/scenario/SessionReplay/component/Picker.tsx
@@ -0,0 +1,27 @@
+import {
+ View,
+} from 'react-native';
+import React, { useState } from 'react';
+
+import { CommonStyles as styles } from '../../../common/styles';
+import CustomPicker from '../../../component/Picker/Picker';
+import { Dog, TEST_DOGS } from '../constants';
+
+function Picker(): React.JSX.Element {
+ const [value, setValue] = useState("Select a dog");
+
+ const setNewValue = (newValue: Dog | unknown) => {
+ setValue(newValue as Dog);
+ };
+
+ return (
+
+
+
+ )
+};
+
+export default Picker;
diff --git a/benchmarks/src/scenario/SessionReplay/component/SectionList.tsx b/benchmarks/src/scenario/SessionReplay/component/SectionList.tsx
new file mode 100644
index 000000000..0bfa2e173
--- /dev/null
+++ b/benchmarks/src/scenario/SessionReplay/component/SectionList.tsx
@@ -0,0 +1,53 @@
+import {
+ SectionList as RNSectionList,
+ Text,
+ View,
+} from 'react-native';
+import React from 'react';
+
+import { CommonStyles as styles } from '../../../common/styles';
+
+const DATA = [
+ {
+ title: 'Sporting Dogs',
+ data: ['Labrador Retriever', 'Golden Retriever', 'Cocker Spaniel', 'Weimaraner'],
+ },
+ {
+ title: 'Working Dogs',
+ data: ['Rottweiler', 'Doberman Pinscher', 'Great Dane', 'Boxer'],
+ },
+ {
+ title: 'Toy Breeds',
+ data: ['Chihuahua', 'Pomeranian', 'Shih Tzu', 'Yorkshire Terrier'],
+ },
+ {
+ title: 'Herding Dogs',
+ data: ['Border Collie', 'Australian Shepherd', 'German Shepherd', 'Belgian Malinois'],
+ },
+ {
+ title: 'Hound Dogs',
+ data: ['Beagle', 'Basset Hound', 'Dachshund', 'Bloodhound'],
+ },
+];
+
+function SectionList(): React.JSX.Element {
+ return (
+
+ item + index}
+ renderItem={({item}) => (
+
+ {item}
+
+ )}
+ renderSectionHeader={({section: {title}}) => (
+ {title}
+ )}
+ />
+
+ )
+};
+
+export default SectionList;
diff --git a/benchmarks/src/scenario/SessionReplay/component/Sliders.tsx b/benchmarks/src/scenario/SessionReplay/component/Sliders.tsx
new file mode 100644
index 000000000..f1ec8c34f
--- /dev/null
+++ b/benchmarks/src/scenario/SessionReplay/component/Sliders.tsx
@@ -0,0 +1,49 @@
+import {
+ View,
+} from 'react-native';
+import React from 'react';
+import Slider from '@react-native-community/slider';
+
+import { Colors, CommonStyles as styles } from '../../../common/styles';
+
+function Sliders(): React.JSX.Element {
+ return (
+
+
+
+
+
+
+ )
+};
+
+export default Sliders;
diff --git a/benchmarks/src/scenario/SessionReplay/component/Swtiches.tsx b/benchmarks/src/scenario/SessionReplay/component/Swtiches.tsx
new file mode 100644
index 000000000..7ee8bedf9
--- /dev/null
+++ b/benchmarks/src/scenario/SessionReplay/component/Swtiches.tsx
@@ -0,0 +1,36 @@
+import {
+ Switch,
+ View,
+} from 'react-native';
+import React, { useState } from 'react';
+
+import { CommonStyles as styles } from '../../../common/styles';
+
+function Switches(): React.JSX.Element {
+ const [isEnabled, setIsEnabled] = useState(false);
+ const toggleSwitch = () => setIsEnabled(previousState => !previousState);
+
+ return (
+
+
+
+
+
+ )
+};
+
+export default Switches;
diff --git a/benchmarks/src/scenario/SessionReplay/component/TextInputs.tsx b/benchmarks/src/scenario/SessionReplay/component/TextInputs.tsx
new file mode 100644
index 000000000..524adf2b9
--- /dev/null
+++ b/benchmarks/src/scenario/SessionReplay/component/TextInputs.tsx
@@ -0,0 +1,44 @@
+import {
+ TextInput,
+ View,
+} from 'react-native';
+import React from 'react';
+
+import { CommonStyles as styles } from '../../../common/styles';
+
+function TextInputs(): React.JSX.Element {
+ return (
+
+
+
+
+
+
+
+ )
+};
+
+export default TextInputs;
diff --git a/benchmarks/src/scenario/SessionReplay/component/TextViews.tsx b/benchmarks/src/scenario/SessionReplay/component/TextViews.tsx
new file mode 100644
index 000000000..ca2fc90b0
--- /dev/null
+++ b/benchmarks/src/scenario/SessionReplay/component/TextViews.tsx
@@ -0,0 +1,20 @@
+import {
+ Text,
+ View,
+} from 'react-native';
+import React from 'react';
+
+import { CommonStyles as styles } from '../../../common/styles';
+
+function TextViews(): React.JSX.Element {
+ return (
+
+ Doggo shibe shoob shoober doggorino shooberino long doggo length boy pupperino fat boi snoot, very hand that feed shibe puggorino very jealous pupper boof pupper big ol pupper I am bekom fat much ruin diet very taste wow.
+ Borkdrive doggo he made many woofs many pats tungg shibe you are doing me the shock heckin good boys shoob, h*ck wow such tempt porgo sub woofer floofs shoober doge borkf smol, blep dat tungg tho ur givin me a spook very taste wow most angery pupper I have ever seen length boy woofer.
+ Super chub big ol pupper floofs blep doggo pupper such treat shooberino, adorable doggo borkdrive he made many woofs heck long water shoob h*ck, wrinkler lotsa pats dat tungg tho fat boi much ruin diet most angery pupper I have ever seen.
+ Adorable doggo waggy wags maximum borkdrive smol long doggo mlem bork, fluffer ur givin me a spook doggorino puggorino.
+
+ )
+};
+
+export default TextViews;
diff --git a/benchmarks/src/scenario/SessionReplay/component/Views.tsx b/benchmarks/src/scenario/SessionReplay/component/Views.tsx
new file mode 100644
index 000000000..8c9cae8bc
--- /dev/null
+++ b/benchmarks/src/scenario/SessionReplay/component/Views.tsx
@@ -0,0 +1,27 @@
+import {
+ Text,
+ ScrollView,
+ View,
+} from 'react-native';
+import React from 'react';
+
+import { CommonStyles as styles } from '../../../common/styles';
+
+function Views(): React.JSX.Element {
+ return (
+
+
+
+
+
+
+
+
+ {"Container"}
+
+
+
+ )
+};
+
+export default Views;
diff --git a/benchmarks/src/scenario/SessionReplay/component/WebView.tsx b/benchmarks/src/scenario/SessionReplay/component/WebView.tsx
new file mode 100644
index 000000000..f20046306
--- /dev/null
+++ b/benchmarks/src/scenario/SessionReplay/component/WebView.tsx
@@ -0,0 +1,27 @@
+import {
+ Alert,
+ View,
+} from 'react-native';
+import React from 'react';
+import { WebView } from "@datadog/mobile-react-native-webview";
+
+import { CommonStyles as styles } from '../../../common/styles';
+
+function Webview(): React.JSX.Element {
+ const onError = () => {
+ Alert.alert("Something went wrong, try again later.");
+ };
+
+ return (
+
+
+
+ )
+};
+
+export default Webview;
diff --git a/benchmarks/src/scenario/SessionReplay/component/assets/bits.png b/benchmarks/src/scenario/SessionReplay/component/assets/bits.png
new file mode 100644
index 000000000..3d8ebe036
Binary files /dev/null and b/benchmarks/src/scenario/SessionReplay/component/assets/bits.png differ
diff --git a/benchmarks/src/scenario/SessionReplay/constants.ts b/benchmarks/src/scenario/SessionReplay/constants.ts
new file mode 100644
index 000000000..9642ed592
--- /dev/null
+++ b/benchmarks/src/scenario/SessionReplay/constants.ts
@@ -0,0 +1,27 @@
+export enum Dog {
+ LabradorRetriever = "Labrador Retriever",
+ GermanShepherd = "German Shepherd",
+ GoldenRetriever = "Golden Retriever",
+ Bulldog = "Bulldog",
+ Poodle = "Poodle",
+ Beagle = "Beagle",
+ Rottweiler = "Rottweiler",
+ Dachshund = "Dachshund",
+ SiberianHusky = "Siberian Husky",
+ Boxer = "Boxer",
+ GreatDane = "Great Dane",
+ DobermanPinscher = "Doberman Pinscher",
+ CockerSpaniel = "Cocker Spaniel",
+ BorderCollie = "Border Collie",
+ ShihTzu = "Shih Tzu",
+ Chihuahua = "Chihuahua",
+ AustralianShepherd = "Australian Shepherd",
+ BassetHound = "Basset Hound",
+ CavalierKingCharlesSpaniel = "Cavalier King Charles Spaniel",
+ Mastiff = "Mastiff"
+}
+
+export const TEST_DOGS = Object.entries(Dog).map(([_key, value]) => ({
+ label: value,
+ value,
+}));
diff --git a/benchmarks/src/scenario/SessionReplay/sessionReplayScenario.tsx b/benchmarks/src/scenario/SessionReplay/sessionReplayScenario.tsx
new file mode 100644
index 000000000..4a7a50094
--- /dev/null
+++ b/benchmarks/src/scenario/SessionReplay/sessionReplayScenario.tsx
@@ -0,0 +1,69 @@
+import React, {useEffect, useState} from 'react';
+import { createNativeStackNavigator } from '@react-navigation/native-stack';
+import { createStaticNavigation } from '@react-navigation/native';
+import { ImagePrivacyLevel, SessionReplay, TextAndInputPrivacyLevel, TouchPrivacyLevel } from "@datadog/mobile-react-native-session-replay";
+
+import type { SessionReplayScenarioProps } from "./types";
+import { Colors, CommonStyles as styles } from '../../common/styles';
+import { RunType } from '../../testSetup/types/testConfig';
+import { instrument } from '../../testSetup/testUtils';
+import UICatalogMenu from './UICatalogMenu';
+import UIDetailView from './UIDetailView';
+import { ActivityIndicator, SafeAreaView, View } from 'react-native';
+
+function SessionReplayScenario(props: SessionReplayScenarioProps): React.JSX.Element {
+ const [isReady, setIsReady] = useState(false);
+
+ useEffect(() => {
+ if (props.testConfig?.runType !== RunType.BASELINE) {
+ instrument().then(() => {
+ SessionReplay.enable({
+ textAndInputPrivacyLevel: TextAndInputPrivacyLevel.MASK_SENSITIVE_INPUTS,
+ imagePrivacyLevel: ImagePrivacyLevel.MASK_NONE,
+ touchPrivacyLevel: TouchPrivacyLevel.SHOW,
+ }).then(() => {
+ setIsReady(true);
+ console.log("Session replay - start recording");
+ });
+ });
+ } else {
+ setIsReady(true);
+ }
+ }, []);
+
+ if (isReady) {
+ const RootStack = createNativeStackNavigator({
+ initialRouteName: "UICatalogMenu",
+ headerTintColor: Colors.DatadogPurple,
+ headerTitleAlign: 'left',
+ headerTitleStyle: {
+ fontSize: 22,
+ fontWeight: 'bold',
+ },
+ screens: {
+ UICatalogMenu: {
+ screen: UICatalogMenu,
+ },
+ UIDetailView: {
+ screen: UIDetailView,
+ }
+ }
+ });
+
+ const Navigation = createStaticNavigation(RootStack);
+
+ return (
+
+ );
+ } else {
+ return (
+
+
+
+
+
+ );
+ };
+}
+
+export default SessionReplayScenario
diff --git a/benchmarks/src/scenario/SessionReplay/types.ts b/benchmarks/src/scenario/SessionReplay/types.ts
new file mode 100644
index 000000000..fbcd5a6a5
--- /dev/null
+++ b/benchmarks/src/scenario/SessionReplay/types.ts
@@ -0,0 +1,27 @@
+import type { TestConfig } from "benchmarks/src/testSetup/types/testConfig";
+
+export type SessionReplayScenarioProps = {
+ testConfig?: TestConfig,
+};
+
+export type SessionReplayStackParamList = {
+ UICatalogMenu: undefined;
+ UIDetailView: {
+ component: string;
+ };
+};
+
+export enum UIElement {
+ Views = "Views",
+ Images = "Images",
+ TextViews = "TextViews",
+ TextInputs = "TextInputs",
+ Switches = "Switches",
+ Buttons = "Buttons",
+ ActivityIndicators = "Activity Indicators",
+ Picker = "Pickers",
+ Sliders = "Sliders",
+ WebView = "WebView",
+ SectionList = "SectionList",
+ Modal = "Modal",
+}
diff --git a/benchmarks/src/scenario/Traces/tracesScenario.tsx b/benchmarks/src/scenario/Traces/tracesScenario.tsx
new file mode 100644
index 000000000..dd8153e3e
--- /dev/null
+++ b/benchmarks/src/scenario/Traces/tracesScenario.tsx
@@ -0,0 +1,249 @@
+/*
+ * 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, useRef, useState } from 'react';
+import {
+ ActivityIndicator,
+ Button,
+ Platform,
+ Pressable,
+ SafeAreaView,
+ Switch,
+ Text,
+ TextInput,
+ View,
+} from 'react-native';
+import { DdLogs, DdTrace } from '@datadog/mobile-react-native';
+import type { TracesScenarioProps } from './types';
+import { RunType } from '../../testSetup/types/testConfig';
+import { instrument, sleep } from '../../testSetup/testUtils';
+import Stepper from '../../component/Stepper/Stepper';
+import { Colors, CommonStyles as styles } from '../../common/styles';
+import { Tracer } from '../../testSetup/tracer';
+import { Logger } from '../../testSetup/logger';
+
+const DEFAULT_CHILDREN_COUNT = 0;
+const DEFAULT_DEPTH = 1;
+const DEFAULT_CHILD_DELAY_MS = 100;
+const OS = Platform.OS
+
+function TracesScenario(props: TracesScenarioProps): React.JSX.Element {
+ const tracer = useRef(Tracer);
+ const logger = useRef(Logger);
+
+ const [isSending, setIsSending] = useState(false);
+ const [tracesSentCount, setTracesSentCount] = useState(0);
+
+ const [spanOperation, setSpanOperation] = useState(`RN ${OS} benchmark span operation`);
+ const [spanResource, setSpanResource] = useState(`RN ${OS} benchmark span resource`);
+ const [isError, setIsError] = useState(false);
+
+ const [childrenCount, setChildrenCount] = useState(DEFAULT_CHILDREN_COUNT)
+ const [depth, setDepth] = useState(DEFAULT_DEPTH);
+ const [childDelay, setChildDelay] = useState(DEFAULT_CHILD_DELAY_MS);
+
+ useEffect(() => {
+ if (props.testConfig?.runType !== RunType.BASELINE) {
+ instrument().then (() => {
+ tracer.current = DdTrace;
+ logger.current = DdLogs;
+ });
+ }
+ }, []);
+
+ const sendTraces = async () => {
+ setIsSending(true);
+ setTracesSentCount(0);
+
+ let rootSpan = await tracer.current.startSpan(spanOperation)
+
+ if (isError) {
+ const fields = {
+ event: 'error',
+ errorKind: 'simulatedError',
+ message: 'Describe what happened',
+ stack: 'foo.bar:64'
+ }
+ logger.current.error(fields.errorKind, fields);
+ }
+
+ await sleep(childDelay);
+
+ await sendSpanTree(rootSpan, 0, depth);
+
+ await sleep(500);
+ tracer.current.finishSpan(rootSpan, {});
+
+ setTracesSentCount(tracesSentCount + 1);
+ setIsSending(false);
+ };
+
+ const sendSpanTree = async (parent: string, currentLevel: number, maxDepth: number) => {
+ if (currentLevel >= maxDepth || childrenCount <= 0) {
+ return;
+ }
+
+ for (let i=0; i < childrenCount; i++) {
+ const childOperation = `${parent} = Child ${i} at level ${currentLevel + 1}`
+ const childSpan = await tracer.current.startSpan(childOperation);
+
+ await sleep(childDelay);
+ await sendSpanTree(childSpan, currentLevel + 1, maxDepth);
+ tracer.current.finishSpan(childSpan);
+ };
+ };
+
+ const onToggleIsError = () => {
+ setIsError(!isError);
+ };
+
+ const onChildrenCountChanged = (newChildrenCount: string) => {
+ const newChildrenCountNumber = parseInt(newChildrenCount, 10);
+ if (!Number.isNaN(newChildrenCountNumber)) {
+ setChildrenCount(newChildrenCountNumber);
+ } else {
+ setChildrenCount(DEFAULT_CHILDREN_COUNT);
+ }
+ };
+
+ const onChildrenCountDecrease = () => {
+ const newChildrenCount = childrenCount > 0 ? childrenCount - 1 : 0;
+ setChildrenCount(newChildrenCount);
+ };
+
+ const onChildrenCountIncrease = () => {
+ setChildrenCount(childrenCount + 1)
+ };
+
+ const onDepthChanged = (newDepth: string) => {
+ const newDepthNumber = parseInt(newDepth, 10);
+ if (!Number.isNaN(newDepthNumber)) {
+ setDepth(newDepthNumber);
+ } else {
+ setDepth(DEFAULT_DEPTH);
+ }
+ };
+
+ const onDepthDecrease = () => {
+ const newDepth = depth > 1 ? depth - 1 : 1;
+ setDepth(newDepth);
+ };
+
+ const onDepthIncrease = () => {
+ setDepth(depth + 1);
+ };
+
+ const onChildDelayChanged = (newChildDelay: string) => {
+ const newChildDelayNumber = parseInt(newChildDelay, 10);
+ if (!Number.isNaN(newChildDelayNumber)) {
+ setChildDelay(newChildDelayNumber);
+ } else {
+ setChildDelay(0);
+ }
+ };
+
+ const onChildDelayDecrease = () => {
+ const newChildDelay = childDelay > 0 ? childDelay - 1 : 0;
+ setChildDelay(newChildDelay);
+ };
+
+ const onChildDelayIncrease = () => {
+ setChildDelay(childDelay + 1);
+ };
+
+ return (
+
+
+ SPAN CONFIGURATION
+
+
+
+
+
+
+
+
+
+
+
+ {'isError'}
+
+
+
+
+ COMPLEX SPAN CONFIGURATION
+
+
+ {'Children count:'}
+
+
+
+
+
+ {'Depth:'}
+
+
+
+
+
+ {'Child delay'}
+
+
+
+
+
+
+
+
+ {isSending && }
+ {`Traces sent: ${tracesSentCount}`}
+
+
+ );
+};
+
+export default TracesScenario;
diff --git a/benchmarks/src/scenario/Traces/types.ts b/benchmarks/src/scenario/Traces/types.ts
new file mode 100644
index 000000000..573422df4
--- /dev/null
+++ b/benchmarks/src/scenario/Traces/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 TracesScenarioProps = {
+ 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/logger.ts b/benchmarks/src/testSetup/logger.ts
new file mode 100644
index 000000000..b59bd5cdc
--- /dev/null
+++ b/benchmarks/src/testSetup/logger.ts
@@ -0,0 +1,20 @@
+/*
+ * 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 const Logger = {
+ error: (message: string, context: Object) => {
+ console.error(message, context);
+ },
+ warn: (message: string, context: Object) => {
+ console.warn(message, context);
+ },
+ info: (message: string, context: Object) => {
+ console.info(message, context);
+ },
+ debug: (message: string, context: Object) => {
+ console.log(message, context);
+ }
+};
\ No newline at end of file
diff --git a/benchmarks/src/testSetup/monitor.ts b/benchmarks/src/testSetup/monitor.ts
new file mode 100644
index 000000000..c7cc23473
--- /dev/null
+++ b/benchmarks/src/testSetup/monitor.ts
@@ -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 { DefaultTimeProvider, RumActionType } from "@datadog/mobile-react-native";
+import { ErrorSource } from "@datadog/mobile-react-native/lib/typescript/rum/types";
+import type { DdRumType, ResourceKind } from "@datadog/mobile-react-native/lib/typescript/rum/types";
+import type { GestureResponderEvent } from "react-native/types";
+
+const timeProvider = new DefaultTimeProvider();
+
+export const Monitor: Pick = {
+ startView: (
+ key: string,
+ name: string,
+ context: object = {},
+ timestampMs: number = timeProvider.now()
+ ): Promise => {
+ console.info("Monitor - startView", key, name, context, timestampMs);
+ return Promise.resolve();
+ },
+ stopView: (
+ key: string,
+ context: object = {},
+ timestampMs: number = timeProvider.now()
+ ): Promise => {
+ console.info("Monitor - stopView", key, context, timestampMs);
+ return Promise.resolve();
+ },
+ addAction: (
+ type: RumActionType,
+ name: string,
+ context: object = {},
+ timestampMs: number = timeProvider.now(),
+ actionContext?: GestureResponderEvent
+ ): Promise => {
+ console.info("Monitor - addAction", type, name, context, timestampMs, actionContext);
+ return Promise.resolve();
+ },
+ startResource: (
+ key: string,
+ method: string,
+ url: string,
+ context: object = {},
+ timestampMs: number = timeProvider.now()
+ ): Promise => {
+ console.info("Monitor - startResource", key, method, url, context, timestampMs);
+ return Promise.resolve();
+ },
+ stopResource: (
+ key: string,
+ statusCode: number,
+ kind: ResourceKind,
+ size: number = -1,
+ context: object = {},
+ timestampMs: number = timeProvider.now(),
+ resourceContext?: XMLHttpRequest
+ ): Promise => {
+ console.info("Monitor - stopResource", key, statusCode, kind, size, context, timestampMs, resourceContext);
+ return Promise.resolve();
+ },
+ addError: (
+ message: string,
+ source: ErrorSource,
+ stacktrace: string,
+ context: object = {},
+ timestampMs: number = timeProvider.now(),
+ fingerprint?: string
+ ): Promise => {
+ console.info("Monitor - addError", message, source, stacktrace, context, timestampMs, fingerprint);
+ return Promise.resolve();
+ },
+};
\ 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..e56a04efa
--- /dev/null
+++ b/benchmarks/src/testSetup/testUtils.ts
@@ -0,0 +1,124 @@
+/*
+ * 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 {
+ DatadogProviderConfiguration,
+ 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 || undefined,
+ runType: Config.BENCH_RUN_TYPE || RunType.BASELINE,
+};
+
+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 getDatadogProviderConfig = () => {
+ const platform = Platform.OS;
+ let baseConfig = getDatadogConfig();
+ let config = new DatadogProviderConfiguration(
+ baseConfig.clientToken ?? '',
+ baseConfig.env ?? '',
+ baseConfig.applicationID ?? '',
+ true,
+ true,
+ true,
+ TrackingConsent.GRANTED
+ );
+
+ config.nativeCrashReportEnabled = true
+ config.sessionSamplingRate = 100;
+ config.serviceName = `com.rn.${platform}.benchmark`
+ config.verbosity = SdkVerbosity.DEBUG;
+
+ return config;
+};
+
+export const initializeDatadog = (clientToken?: string, environment?: string, appId?: string): Promise => {
+ const platform = Platform.OS;
+ const config = new DdSdkReactNativeConfiguration(
+ clientToken ?? '',
+ environment ?? '',
+ appId ?? '',
+ true,
+ true,
+ true,
+ TrackingConsent.GRANTED
+ );
+ config.nativeCrashReportEnabled = true
+ config.sessionSamplingRate = 100;
+ config.serviceName = `com.rn.${platform}.benchmark`
+ config.verbosity = SdkVerbosity.DEBUG;
+
+ return DdSdkReactNative.initialize(config);
+};
+
+
+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 = async (): Promise => {
+ const datadogConfig = getDatadogConfig();
+ return initializeDatadog(datadogConfig.clientToken, datadogConfig.env, datadogConfig.applicationID);
+};
+
+export const isValidScenario = (scenario?: string): boolean => {
+ return Object.values(Scenario).includes(scenario as Scenario);
+};
+
+export const sleep = (ms: number) => {
+ return new Promise(resolve => setTimeout(resolve, ms));
+};
\ No newline at end of file
diff --git a/benchmarks/src/testSetup/tracer.ts b/benchmarks/src/testSetup/tracer.ts
new file mode 100644
index 000000000..47255beab
--- /dev/null
+++ b/benchmarks/src/testSetup/tracer.ts
@@ -0,0 +1,20 @@
+/*
+ * 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 { DefaultTimeProvider } from "@datadog/mobile-react-native";
+
+const timeProvider = new DefaultTimeProvider();
+
+export const Tracer = {
+ startSpan: (operation: string, context?: object, timestampMs: number = timeProvider.now()): Promise => {
+ console.info("Tracer - startSpan", operation, context, timestampMs);
+ return Promise.resolve(`spanId_${operation}_${timestampMs}`);
+ },
+ finishSpan: (spanId: string, context?: object, timestampMs: number = timeProvider.now()): Promise => {
+ console.info("Tracer - finishSpan", spanId, context, timestampMs);
+ return Promise.resolve();
+ }
+}
\ 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..dae7587d1
--- /dev/null
+++ b/benchmarks/src/testSetup/types/testConfig.ts
@@ -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.
+ */
+
+export enum Command {
+ Start = 'start',
+ Stop = 'stop',
+}
+
+export enum Scenario {
+ Default = 'default',
+ NavigationExample = 'navigation',
+ LogsCustom = 'logsCustom',
+ LogsHeavyTraffic = 'logsHeavyTraffic',
+ Traces = 'traces',
+ RUMManual = 'rumManual',
+ RUMAuto = 'rumAuto',
+ SessionReplay = 'sessionReplay'
+ // 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;
+}
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/bump-native-dd-sdk.sh b/bump-native-dd-sdk.sh
index 7a8aff966..8545802db 100755
--- a/bump-native-dd-sdk.sh
+++ b/bump-native-dd-sdk.sh
@@ -14,6 +14,7 @@ build_gradle_files=(
"packages/core/android/build.gradle"
"packages/react-native-session-replay/android/build.gradle"
"packages/react-native-webview/android/build.gradle"
+ "benchmarks/android/app/build.gradle"
)
podspec_files=(
diff --git a/package.json b/package.json
index dea40de1b..f7d6e2f6d 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/yarn.lock b/yarn.lock
index 0d50362b4..56c3543af 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -109,8 +109,8 @@ __metadata:
linkType: hard
"@aws-sdk/client-cloudwatch-logs@npm:^3.624.0":
- version: 3.830.0
- resolution: "@aws-sdk/client-cloudwatch-logs@npm:3.830.0"
+ version: 3.832.0
+ resolution: "@aws-sdk/client-cloudwatch-logs@npm:3.832.0"
dependencies:
"@aws-crypto/sha256-browser": 5.2.0
"@aws-crypto/sha256-js": 5.2.0
@@ -156,7 +156,59 @@ __metadata:
"@types/uuid": ^9.0.1
tslib: ^2.6.2
uuid: ^9.0.1
- checksum: fb777d191e6728b8fffddeb1e5c5214933f56f7691b298eb3087687aa7652ecfdc1e940a09c06b6f088c67e27aed375b0e555ec8121542cce6c1d6f821da1dc4
+ checksum: adce5efe6448b38bcfeb25a991774a8d50dc92bd70b81a69b2182cb098e8c27fb76efe55ac6aea23b367bfec7acb99cc849cb164a25f7b76b1b94f1b0275c008
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/client-cloudwatch-logs@npm:^3.709.0":
+ version: 3.844.0
+ resolution: "@aws-sdk/client-cloudwatch-logs@npm:3.844.0"
+ dependencies:
+ "@aws-crypto/sha256-browser": 5.2.0
+ "@aws-crypto/sha256-js": 5.2.0
+ "@aws-sdk/core": 3.844.0
+ "@aws-sdk/credential-provider-node": 3.844.0
+ "@aws-sdk/middleware-host-header": 3.840.0
+ "@aws-sdk/middleware-logger": 3.840.0
+ "@aws-sdk/middleware-recursion-detection": 3.840.0
+ "@aws-sdk/middleware-user-agent": 3.844.0
+ "@aws-sdk/region-config-resolver": 3.840.0
+ "@aws-sdk/types": 3.840.0
+ "@aws-sdk/util-endpoints": 3.844.0
+ "@aws-sdk/util-user-agent-browser": 3.840.0
+ "@aws-sdk/util-user-agent-node": 3.844.0
+ "@smithy/config-resolver": ^4.1.4
+ "@smithy/core": ^3.7.0
+ "@smithy/eventstream-serde-browser": ^4.0.4
+ "@smithy/eventstream-serde-config-resolver": ^4.1.2
+ "@smithy/eventstream-serde-node": ^4.0.4
+ "@smithy/fetch-http-handler": ^5.1.0
+ "@smithy/hash-node": ^4.0.4
+ "@smithy/invalid-dependency": ^4.0.4
+ "@smithy/middleware-content-length": ^4.0.4
+ "@smithy/middleware-endpoint": ^4.1.14
+ "@smithy/middleware-retry": ^4.1.15
+ "@smithy/middleware-serde": ^4.0.8
+ "@smithy/middleware-stack": ^4.0.4
+ "@smithy/node-config-provider": ^4.1.3
+ "@smithy/node-http-handler": ^4.1.0
+ "@smithy/protocol-http": ^5.1.2
+ "@smithy/smithy-client": ^4.4.6
+ "@smithy/types": ^4.3.1
+ "@smithy/url-parser": ^4.0.4
+ "@smithy/util-base64": ^4.0.0
+ "@smithy/util-body-length-browser": ^4.0.0
+ "@smithy/util-body-length-node": ^4.0.0
+ "@smithy/util-defaults-mode-browser": ^4.0.22
+ "@smithy/util-defaults-mode-node": ^4.0.22
+ "@smithy/util-endpoints": ^3.0.6
+ "@smithy/util-middleware": ^4.0.4
+ "@smithy/util-retry": ^4.0.6
+ "@smithy/util-utf8": ^4.0.0
+ "@types/uuid": ^9.0.1
+ tslib: ^2.6.2
+ uuid: ^9.0.1
+ checksum: db7974d3e9577bbfa140863c25fc151dcfd91054d07d96fd69e0a25f2da022a04ceeb9fed422f8728da0751490b55458b88ef9b4e2da10496adb1cc37322a918
languageName: node
linkType: hard
@@ -207,6 +259,53 @@ __metadata:
languageName: node
linkType: hard
+"@aws-sdk/client-cognito-identity@npm:3.844.0":
+ version: 3.844.0
+ resolution: "@aws-sdk/client-cognito-identity@npm:3.844.0"
+ dependencies:
+ "@aws-crypto/sha256-browser": 5.2.0
+ "@aws-crypto/sha256-js": 5.2.0
+ "@aws-sdk/core": 3.844.0
+ "@aws-sdk/credential-provider-node": 3.844.0
+ "@aws-sdk/middleware-host-header": 3.840.0
+ "@aws-sdk/middleware-logger": 3.840.0
+ "@aws-sdk/middleware-recursion-detection": 3.840.0
+ "@aws-sdk/middleware-user-agent": 3.844.0
+ "@aws-sdk/region-config-resolver": 3.840.0
+ "@aws-sdk/types": 3.840.0
+ "@aws-sdk/util-endpoints": 3.844.0
+ "@aws-sdk/util-user-agent-browser": 3.840.0
+ "@aws-sdk/util-user-agent-node": 3.844.0
+ "@smithy/config-resolver": ^4.1.4
+ "@smithy/core": ^3.7.0
+ "@smithy/fetch-http-handler": ^5.1.0
+ "@smithy/hash-node": ^4.0.4
+ "@smithy/invalid-dependency": ^4.0.4
+ "@smithy/middleware-content-length": ^4.0.4
+ "@smithy/middleware-endpoint": ^4.1.14
+ "@smithy/middleware-retry": ^4.1.15
+ "@smithy/middleware-serde": ^4.0.8
+ "@smithy/middleware-stack": ^4.0.4
+ "@smithy/node-config-provider": ^4.1.3
+ "@smithy/node-http-handler": ^4.1.0
+ "@smithy/protocol-http": ^5.1.2
+ "@smithy/smithy-client": ^4.4.6
+ "@smithy/types": ^4.3.1
+ "@smithy/url-parser": ^4.0.4
+ "@smithy/util-base64": ^4.0.0
+ "@smithy/util-body-length-browser": ^4.0.0
+ "@smithy/util-body-length-node": ^4.0.0
+ "@smithy/util-defaults-mode-browser": ^4.0.22
+ "@smithy/util-defaults-mode-node": ^4.0.22
+ "@smithy/util-endpoints": ^3.0.6
+ "@smithy/util-middleware": ^4.0.4
+ "@smithy/util-retry": ^4.0.6
+ "@smithy/util-utf8": ^4.0.0
+ tslib: ^2.6.2
+ checksum: e3e1e8bd44530b95a7346b0176d3a8c62c5d4f5f4cbf49ce60f5a51fffe66b8cb0f5e9bec11d6b283721f9bc2f5cfc556ef7c730bc48aa9c406ddcf5109fc0f7
+ languageName: node
+ linkType: hard
+
"@aws-sdk/client-iam@npm:^3.624.0":
version: 3.830.0
resolution: "@aws-sdk/client-iam@npm:3.830.0"
@@ -255,9 +354,57 @@ __metadata:
languageName: node
linkType: hard
+"@aws-sdk/client-iam@npm:^3.709.0":
+ version: 3.844.0
+ resolution: "@aws-sdk/client-iam@npm:3.844.0"
+ dependencies:
+ "@aws-crypto/sha256-browser": 5.2.0
+ "@aws-crypto/sha256-js": 5.2.0
+ "@aws-sdk/core": 3.844.0
+ "@aws-sdk/credential-provider-node": 3.844.0
+ "@aws-sdk/middleware-host-header": 3.840.0
+ "@aws-sdk/middleware-logger": 3.840.0
+ "@aws-sdk/middleware-recursion-detection": 3.840.0
+ "@aws-sdk/middleware-user-agent": 3.844.0
+ "@aws-sdk/region-config-resolver": 3.840.0
+ "@aws-sdk/types": 3.840.0
+ "@aws-sdk/util-endpoints": 3.844.0
+ "@aws-sdk/util-user-agent-browser": 3.840.0
+ "@aws-sdk/util-user-agent-node": 3.844.0
+ "@smithy/config-resolver": ^4.1.4
+ "@smithy/core": ^3.7.0
+ "@smithy/fetch-http-handler": ^5.1.0
+ "@smithy/hash-node": ^4.0.4
+ "@smithy/invalid-dependency": ^4.0.4
+ "@smithy/middleware-content-length": ^4.0.4
+ "@smithy/middleware-endpoint": ^4.1.14
+ "@smithy/middleware-retry": ^4.1.15
+ "@smithy/middleware-serde": ^4.0.8
+ "@smithy/middleware-stack": ^4.0.4
+ "@smithy/node-config-provider": ^4.1.3
+ "@smithy/node-http-handler": ^4.1.0
+ "@smithy/protocol-http": ^5.1.2
+ "@smithy/smithy-client": ^4.4.6
+ "@smithy/types": ^4.3.1
+ "@smithy/url-parser": ^4.0.4
+ "@smithy/util-base64": ^4.0.0
+ "@smithy/util-body-length-browser": ^4.0.0
+ "@smithy/util-body-length-node": ^4.0.0
+ "@smithy/util-defaults-mode-browser": ^4.0.22
+ "@smithy/util-defaults-mode-node": ^4.0.22
+ "@smithy/util-endpoints": ^3.0.6
+ "@smithy/util-middleware": ^4.0.4
+ "@smithy/util-retry": ^4.0.6
+ "@smithy/util-utf8": ^4.0.0
+ "@smithy/util-waiter": ^4.0.6
+ tslib: ^2.6.2
+ checksum: a0d8b6e46517c46a491a25ebb883757a7ab7167e4a6b5a0b3510346c1a0954e681f4f4731e284ddf467a811c53e6a32c94a4cea916055e0a88fdaccf45af516f
+ languageName: node
+ linkType: hard
+
"@aws-sdk/client-lambda@npm:^3.624.0":
- version: 3.830.0
- resolution: "@aws-sdk/client-lambda@npm:3.830.0"
+ version: 3.833.0
+ resolution: "@aws-sdk/client-lambda@npm:3.833.0"
dependencies:
"@aws-crypto/sha256-browser": 5.2.0
"@aws-crypto/sha256-js": 5.2.0
@@ -303,7 +450,59 @@ __metadata:
"@smithy/util-utf8": ^4.0.0
"@smithy/util-waiter": ^4.0.5
tslib: ^2.6.2
- checksum: 21c6c4a1667431297167546f4f34ee46f4b4eafb62b7d7e53b23235e27f8d22cc2fafafc10b332bf3ad68297915701f6776985b0c297c9b98087a41a25c70ba1
+ checksum: d9fe0e1d29f00bd5d8f0b63713fb6714a3cede101e2583459cf1404c56c7afec59da118342d0402769dd6ea6db528415b859cc377886224999c175ad2eca2744
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/client-lambda@npm:^3.709.0":
+ version: 3.844.0
+ resolution: "@aws-sdk/client-lambda@npm:3.844.0"
+ dependencies:
+ "@aws-crypto/sha256-browser": 5.2.0
+ "@aws-crypto/sha256-js": 5.2.0
+ "@aws-sdk/core": 3.844.0
+ "@aws-sdk/credential-provider-node": 3.844.0
+ "@aws-sdk/middleware-host-header": 3.840.0
+ "@aws-sdk/middleware-logger": 3.840.0
+ "@aws-sdk/middleware-recursion-detection": 3.840.0
+ "@aws-sdk/middleware-user-agent": 3.844.0
+ "@aws-sdk/region-config-resolver": 3.840.0
+ "@aws-sdk/types": 3.840.0
+ "@aws-sdk/util-endpoints": 3.844.0
+ "@aws-sdk/util-user-agent-browser": 3.840.0
+ "@aws-sdk/util-user-agent-node": 3.844.0
+ "@smithy/config-resolver": ^4.1.4
+ "@smithy/core": ^3.7.0
+ "@smithy/eventstream-serde-browser": ^4.0.4
+ "@smithy/eventstream-serde-config-resolver": ^4.1.2
+ "@smithy/eventstream-serde-node": ^4.0.4
+ "@smithy/fetch-http-handler": ^5.1.0
+ "@smithy/hash-node": ^4.0.4
+ "@smithy/invalid-dependency": ^4.0.4
+ "@smithy/middleware-content-length": ^4.0.4
+ "@smithy/middleware-endpoint": ^4.1.14
+ "@smithy/middleware-retry": ^4.1.15
+ "@smithy/middleware-serde": ^4.0.8
+ "@smithy/middleware-stack": ^4.0.4
+ "@smithy/node-config-provider": ^4.1.3
+ "@smithy/node-http-handler": ^4.1.0
+ "@smithy/protocol-http": ^5.1.2
+ "@smithy/smithy-client": ^4.4.6
+ "@smithy/types": ^4.3.1
+ "@smithy/url-parser": ^4.0.4
+ "@smithy/util-base64": ^4.0.0
+ "@smithy/util-body-length-browser": ^4.0.0
+ "@smithy/util-body-length-node": ^4.0.0
+ "@smithy/util-defaults-mode-browser": ^4.0.22
+ "@smithy/util-defaults-mode-node": ^4.0.22
+ "@smithy/util-endpoints": ^3.0.6
+ "@smithy/util-middleware": ^4.0.4
+ "@smithy/util-retry": ^4.0.6
+ "@smithy/util-stream": ^4.2.3
+ "@smithy/util-utf8": ^4.0.0
+ "@smithy/util-waiter": ^4.0.6
+ tslib: ^2.6.2
+ checksum: bfefc7a0de33d198ab34925b26f54300f6fb23aaa8f0bf6c5a4098e8438277ee64838ccdee94128036c3705847635e63512aadd267c43cc633c0e5cc7a6d7fd1
languageName: node
linkType: hard
@@ -356,6 +555,55 @@ __metadata:
languageName: node
linkType: hard
+"@aws-sdk/client-sfn@npm:^3.709.0":
+ version: 3.844.0
+ resolution: "@aws-sdk/client-sfn@npm:3.844.0"
+ dependencies:
+ "@aws-crypto/sha256-browser": 5.2.0
+ "@aws-crypto/sha256-js": 5.2.0
+ "@aws-sdk/core": 3.844.0
+ "@aws-sdk/credential-provider-node": 3.844.0
+ "@aws-sdk/middleware-host-header": 3.840.0
+ "@aws-sdk/middleware-logger": 3.840.0
+ "@aws-sdk/middleware-recursion-detection": 3.840.0
+ "@aws-sdk/middleware-user-agent": 3.844.0
+ "@aws-sdk/region-config-resolver": 3.840.0
+ "@aws-sdk/types": 3.840.0
+ "@aws-sdk/util-endpoints": 3.844.0
+ "@aws-sdk/util-user-agent-browser": 3.840.0
+ "@aws-sdk/util-user-agent-node": 3.844.0
+ "@smithy/config-resolver": ^4.1.4
+ "@smithy/core": ^3.7.0
+ "@smithy/fetch-http-handler": ^5.1.0
+ "@smithy/hash-node": ^4.0.4
+ "@smithy/invalid-dependency": ^4.0.4
+ "@smithy/middleware-content-length": ^4.0.4
+ "@smithy/middleware-endpoint": ^4.1.14
+ "@smithy/middleware-retry": ^4.1.15
+ "@smithy/middleware-serde": ^4.0.8
+ "@smithy/middleware-stack": ^4.0.4
+ "@smithy/node-config-provider": ^4.1.3
+ "@smithy/node-http-handler": ^4.1.0
+ "@smithy/protocol-http": ^5.1.2
+ "@smithy/smithy-client": ^4.4.6
+ "@smithy/types": ^4.3.1
+ "@smithy/url-parser": ^4.0.4
+ "@smithy/util-base64": ^4.0.0
+ "@smithy/util-body-length-browser": ^4.0.0
+ "@smithy/util-body-length-node": ^4.0.0
+ "@smithy/util-defaults-mode-browser": ^4.0.22
+ "@smithy/util-defaults-mode-node": ^4.0.22
+ "@smithy/util-endpoints": ^3.0.6
+ "@smithy/util-middleware": ^4.0.4
+ "@smithy/util-retry": ^4.0.6
+ "@smithy/util-utf8": ^4.0.0
+ "@types/uuid": ^9.0.1
+ tslib: ^2.6.2
+ uuid: ^9.0.1
+ checksum: 0a8453fb72c6cc48cb4ee9534b9ec01fc79f8cf94136a3322ce47012de134d4be4fc2f6375691763586268d042994eb65014479bafa4c1a10c0ffdec1bdd4e43
+ languageName: node
+ linkType: hard
+
"@aws-sdk/client-sso@npm:3.830.0":
version: 3.830.0
resolution: "@aws-sdk/client-sso@npm:3.830.0"
@@ -402,6 +650,52 @@ __metadata:
languageName: node
linkType: hard
+"@aws-sdk/client-sso@npm:3.844.0":
+ version: 3.844.0
+ resolution: "@aws-sdk/client-sso@npm:3.844.0"
+ dependencies:
+ "@aws-crypto/sha256-browser": 5.2.0
+ "@aws-crypto/sha256-js": 5.2.0
+ "@aws-sdk/core": 3.844.0
+ "@aws-sdk/middleware-host-header": 3.840.0
+ "@aws-sdk/middleware-logger": 3.840.0
+ "@aws-sdk/middleware-recursion-detection": 3.840.0
+ "@aws-sdk/middleware-user-agent": 3.844.0
+ "@aws-sdk/region-config-resolver": 3.840.0
+ "@aws-sdk/types": 3.840.0
+ "@aws-sdk/util-endpoints": 3.844.0
+ "@aws-sdk/util-user-agent-browser": 3.840.0
+ "@aws-sdk/util-user-agent-node": 3.844.0
+ "@smithy/config-resolver": ^4.1.4
+ "@smithy/core": ^3.7.0
+ "@smithy/fetch-http-handler": ^5.1.0
+ "@smithy/hash-node": ^4.0.4
+ "@smithy/invalid-dependency": ^4.0.4
+ "@smithy/middleware-content-length": ^4.0.4
+ "@smithy/middleware-endpoint": ^4.1.14
+ "@smithy/middleware-retry": ^4.1.15
+ "@smithy/middleware-serde": ^4.0.8
+ "@smithy/middleware-stack": ^4.0.4
+ "@smithy/node-config-provider": ^4.1.3
+ "@smithy/node-http-handler": ^4.1.0
+ "@smithy/protocol-http": ^5.1.2
+ "@smithy/smithy-client": ^4.4.6
+ "@smithy/types": ^4.3.1
+ "@smithy/url-parser": ^4.0.4
+ "@smithy/util-base64": ^4.0.0
+ "@smithy/util-body-length-browser": ^4.0.0
+ "@smithy/util-body-length-node": ^4.0.0
+ "@smithy/util-defaults-mode-browser": ^4.0.22
+ "@smithy/util-defaults-mode-node": ^4.0.22
+ "@smithy/util-endpoints": ^3.0.6
+ "@smithy/util-middleware": ^4.0.4
+ "@smithy/util-retry": ^4.0.6
+ "@smithy/util-utf8": ^4.0.0
+ tslib: ^2.6.2
+ checksum: e2e22ccc5e029f044b7647e87140f6f60c637f3791d1f1b26dd171c8b6db71197004040f83f7228b9a31b92ff746ad82c0575f9f71f32499b8df153883a53feb
+ languageName: node
+ linkType: hard
+
"@aws-sdk/core@npm:3.826.0, @aws-sdk/core@npm:^3.624.0":
version: 3.826.0
resolution: "@aws-sdk/core@npm:3.826.0"
@@ -425,6 +719,29 @@ __metadata:
languageName: node
linkType: hard
+"@aws-sdk/core@npm:3.844.0, @aws-sdk/core@npm:^3.709.0":
+ version: 3.844.0
+ resolution: "@aws-sdk/core@npm:3.844.0"
+ dependencies:
+ "@aws-sdk/types": 3.840.0
+ "@aws-sdk/xml-builder": 3.821.0
+ "@smithy/core": ^3.7.0
+ "@smithy/node-config-provider": ^4.1.3
+ "@smithy/property-provider": ^4.0.4
+ "@smithy/protocol-http": ^5.1.2
+ "@smithy/signature-v4": ^5.1.2
+ "@smithy/smithy-client": ^4.4.6
+ "@smithy/types": ^4.3.1
+ "@smithy/util-base64": ^4.0.0
+ "@smithy/util-body-length-browser": ^4.0.0
+ "@smithy/util-middleware": ^4.0.4
+ "@smithy/util-utf8": ^4.0.0
+ fast-xml-parser: 5.2.5
+ tslib: ^2.6.2
+ checksum: 28f7397c058a39009965b0e76055c78ff599bce13c8204bd6fcb4f04f1a3a514d009489478e089f8f9b79193b294f3b0240994411bba449230e17947cc2af115
+ languageName: node
+ linkType: hard
+
"@aws-sdk/credential-provider-cognito-identity@npm:3.830.0":
version: 3.830.0
resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.830.0"
@@ -438,6 +755,19 @@ __metadata:
languageName: node
linkType: hard
+"@aws-sdk/credential-provider-cognito-identity@npm:3.844.0":
+ version: 3.844.0
+ resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.844.0"
+ dependencies:
+ "@aws-sdk/client-cognito-identity": 3.844.0
+ "@aws-sdk/types": 3.840.0
+ "@smithy/property-provider": ^4.0.4
+ "@smithy/types": ^4.3.1
+ tslib: ^2.6.2
+ checksum: 38b721be3c5981b9f9408021b418256dcf7ea2401758b2ff60bf1ee134f67238d88f1f9d95e8abef6ede6eaa8a47809345aca247c3be54c0cf158ff729d9ca42
+ languageName: node
+ linkType: hard
+
"@aws-sdk/credential-provider-env@npm:3.826.0":
version: 3.826.0
resolution: "@aws-sdk/credential-provider-env@npm:3.826.0"
@@ -451,6 +781,19 @@ __metadata:
languageName: node
linkType: hard
+"@aws-sdk/credential-provider-env@npm:3.844.0":
+ version: 3.844.0
+ resolution: "@aws-sdk/credential-provider-env@npm:3.844.0"
+ dependencies:
+ "@aws-sdk/core": 3.844.0
+ "@aws-sdk/types": 3.840.0
+ "@smithy/property-provider": ^4.0.4
+ "@smithy/types": ^4.3.1
+ tslib: ^2.6.2
+ checksum: 292a9b4c4e5402546ec78b971fa3be8e07e0af7fb795dceb038e5dcdbcccf9da6cba484185764a5895a6d681ea5008966313572be241024f379726634abca60b
+ languageName: node
+ linkType: hard
+
"@aws-sdk/credential-provider-http@npm:3.826.0":
version: 3.826.0
resolution: "@aws-sdk/credential-provider-http@npm:3.826.0"
@@ -469,6 +812,24 @@ __metadata:
languageName: node
linkType: hard
+"@aws-sdk/credential-provider-http@npm:3.844.0":
+ version: 3.844.0
+ resolution: "@aws-sdk/credential-provider-http@npm:3.844.0"
+ dependencies:
+ "@aws-sdk/core": 3.844.0
+ "@aws-sdk/types": 3.840.0
+ "@smithy/fetch-http-handler": ^5.1.0
+ "@smithy/node-http-handler": ^4.1.0
+ "@smithy/property-provider": ^4.0.4
+ "@smithy/protocol-http": ^5.1.2
+ "@smithy/smithy-client": ^4.4.6
+ "@smithy/types": ^4.3.1
+ "@smithy/util-stream": ^4.2.3
+ tslib: ^2.6.2
+ checksum: 1b4c6ce7bedd77bfe10d2f9b7384ab5b1e0a110044f14e73da92be9969dfd84e07c25b854e252bb34e4032ed61b7863a9581e6c0b302f9adfb6ac3c69f47a20b
+ languageName: node
+ linkType: hard
+
"@aws-sdk/credential-provider-ini@npm:3.830.0, @aws-sdk/credential-provider-ini@npm:^3.624.0":
version: 3.830.0
resolution: "@aws-sdk/credential-provider-ini@npm:3.830.0"
@@ -490,6 +851,27 @@ __metadata:
languageName: node
linkType: hard
+"@aws-sdk/credential-provider-ini@npm:3.844.0, @aws-sdk/credential-provider-ini@npm:^3.709.0":
+ version: 3.844.0
+ resolution: "@aws-sdk/credential-provider-ini@npm:3.844.0"
+ dependencies:
+ "@aws-sdk/core": 3.844.0
+ "@aws-sdk/credential-provider-env": 3.844.0
+ "@aws-sdk/credential-provider-http": 3.844.0
+ "@aws-sdk/credential-provider-process": 3.844.0
+ "@aws-sdk/credential-provider-sso": 3.844.0
+ "@aws-sdk/credential-provider-web-identity": 3.844.0
+ "@aws-sdk/nested-clients": 3.844.0
+ "@aws-sdk/types": 3.840.0
+ "@smithy/credential-provider-imds": ^4.0.6
+ "@smithy/property-provider": ^4.0.4
+ "@smithy/shared-ini-file-loader": ^4.0.4
+ "@smithy/types": ^4.3.1
+ tslib: ^2.6.2
+ checksum: 5f5acce165d5de9ba8f90aba3f43b4efb741d0106ad3d47ad26dc3c8b59c3e77e8c8d8a76dd410338f9459c85527ec6f7be27d9a98766ebb3677dee495af5473
+ languageName: node
+ linkType: hard
+
"@aws-sdk/credential-provider-node@npm:3.830.0":
version: 3.830.0
resolution: "@aws-sdk/credential-provider-node@npm:3.830.0"
@@ -510,6 +892,26 @@ __metadata:
languageName: node
linkType: hard
+"@aws-sdk/credential-provider-node@npm:3.844.0":
+ version: 3.844.0
+ resolution: "@aws-sdk/credential-provider-node@npm:3.844.0"
+ dependencies:
+ "@aws-sdk/credential-provider-env": 3.844.0
+ "@aws-sdk/credential-provider-http": 3.844.0
+ "@aws-sdk/credential-provider-ini": 3.844.0
+ "@aws-sdk/credential-provider-process": 3.844.0
+ "@aws-sdk/credential-provider-sso": 3.844.0
+ "@aws-sdk/credential-provider-web-identity": 3.844.0
+ "@aws-sdk/types": 3.840.0
+ "@smithy/credential-provider-imds": ^4.0.6
+ "@smithy/property-provider": ^4.0.4
+ "@smithy/shared-ini-file-loader": ^4.0.4
+ "@smithy/types": ^4.3.1
+ tslib: ^2.6.2
+ checksum: 5b859fb4ff746906053e0686951e268743a2b9e025fa70284ed341956917b47d803a16cd38879cfd124407623969e248a90044202909fe4d281e7e5ee331ec8a
+ languageName: node
+ linkType: hard
+
"@aws-sdk/credential-provider-process@npm:3.826.0":
version: 3.826.0
resolution: "@aws-sdk/credential-provider-process@npm:3.826.0"
@@ -524,6 +926,20 @@ __metadata:
languageName: node
linkType: hard
+"@aws-sdk/credential-provider-process@npm:3.844.0":
+ version: 3.844.0
+ resolution: "@aws-sdk/credential-provider-process@npm:3.844.0"
+ dependencies:
+ "@aws-sdk/core": 3.844.0
+ "@aws-sdk/types": 3.840.0
+ "@smithy/property-provider": ^4.0.4
+ "@smithy/shared-ini-file-loader": ^4.0.4
+ "@smithy/types": ^4.3.1
+ tslib: ^2.6.2
+ checksum: 0dbf2fd52d308ecc51a456799f48fcb17094fbe46c4f03f9eff7693dda9c15f3d667637b23e0cc810a6b64f00d41c63eba2419637c3c44af3da27bbfd7c09ed4
+ languageName: node
+ linkType: hard
+
"@aws-sdk/credential-provider-sso@npm:3.830.0":
version: 3.830.0
resolution: "@aws-sdk/credential-provider-sso@npm:3.830.0"
@@ -540,6 +956,22 @@ __metadata:
languageName: node
linkType: hard
+"@aws-sdk/credential-provider-sso@npm:3.844.0":
+ version: 3.844.0
+ resolution: "@aws-sdk/credential-provider-sso@npm:3.844.0"
+ dependencies:
+ "@aws-sdk/client-sso": 3.844.0
+ "@aws-sdk/core": 3.844.0
+ "@aws-sdk/token-providers": 3.844.0
+ "@aws-sdk/types": 3.840.0
+ "@smithy/property-provider": ^4.0.4
+ "@smithy/shared-ini-file-loader": ^4.0.4
+ "@smithy/types": ^4.3.1
+ tslib: ^2.6.2
+ checksum: 9775b782f12fee185fdc13e047a6cf0940e3b5abec99208500a12707ccff4d1c65f0181bb9494f47968fc1159a657387c014bc41b7c4b906ede8e18f3d78f175
+ languageName: node
+ linkType: hard
+
"@aws-sdk/credential-provider-web-identity@npm:3.830.0":
version: 3.830.0
resolution: "@aws-sdk/credential-provider-web-identity@npm:3.830.0"
@@ -554,6 +986,20 @@ __metadata:
languageName: node
linkType: hard
+"@aws-sdk/credential-provider-web-identity@npm:3.844.0":
+ version: 3.844.0
+ resolution: "@aws-sdk/credential-provider-web-identity@npm:3.844.0"
+ dependencies:
+ "@aws-sdk/core": 3.844.0
+ "@aws-sdk/nested-clients": 3.844.0
+ "@aws-sdk/types": 3.840.0
+ "@smithy/property-provider": ^4.0.4
+ "@smithy/types": ^4.3.1
+ tslib: ^2.6.2
+ checksum: 90186be1fa65421141c62571a059203756c3b79ae198ed0413b4d9970a832738e87c62121a1834bfbce1cd956e35ca15e6db9ca07fe855729fbe89cdea0938f5
+ languageName: node
+ linkType: hard
+
"@aws-sdk/credential-providers@npm:^3.624.0":
version: 3.830.0
resolution: "@aws-sdk/credential-providers@npm:3.830.0"
@@ -581,6 +1027,33 @@ __metadata:
languageName: node
linkType: hard
+"@aws-sdk/credential-providers@npm:^3.709.0":
+ version: 3.844.0
+ resolution: "@aws-sdk/credential-providers@npm:3.844.0"
+ dependencies:
+ "@aws-sdk/client-cognito-identity": 3.844.0
+ "@aws-sdk/core": 3.844.0
+ "@aws-sdk/credential-provider-cognito-identity": 3.844.0
+ "@aws-sdk/credential-provider-env": 3.844.0
+ "@aws-sdk/credential-provider-http": 3.844.0
+ "@aws-sdk/credential-provider-ini": 3.844.0
+ "@aws-sdk/credential-provider-node": 3.844.0
+ "@aws-sdk/credential-provider-process": 3.844.0
+ "@aws-sdk/credential-provider-sso": 3.844.0
+ "@aws-sdk/credential-provider-web-identity": 3.844.0
+ "@aws-sdk/nested-clients": 3.844.0
+ "@aws-sdk/types": 3.840.0
+ "@smithy/config-resolver": ^4.1.4
+ "@smithy/core": ^3.7.0
+ "@smithy/credential-provider-imds": ^4.0.6
+ "@smithy/node-config-provider": ^4.1.3
+ "@smithy/property-provider": ^4.0.4
+ "@smithy/types": ^4.3.1
+ tslib: ^2.6.2
+ checksum: 20f98117e9344297e4c099ed5903dbe006a444cf8bba725bf606fab63c2300b88972aa75a1444607a1c2c366126ecf0ca2e42e8894af800b183f9d193577d5a8
+ languageName: node
+ linkType: hard
+
"@aws-sdk/middleware-host-header@npm:3.821.0":
version: 3.821.0
resolution: "@aws-sdk/middleware-host-header@npm:3.821.0"
@@ -593,6 +1066,18 @@ __metadata:
languageName: node
linkType: hard
+"@aws-sdk/middleware-host-header@npm:3.840.0":
+ version: 3.840.0
+ resolution: "@aws-sdk/middleware-host-header@npm:3.840.0"
+ dependencies:
+ "@aws-sdk/types": 3.840.0
+ "@smithy/protocol-http": ^5.1.2
+ "@smithy/types": ^4.3.1
+ tslib: ^2.6.2
+ checksum: 8d4a51007aa740daeea1c8427d7f2bf5d91d8fa9bd890ed7212a7460b68878bd651666585ef7cf2f553fe34aac141b1eaa8cd9b3520da0fc62918e7e43473b02
+ languageName: node
+ linkType: hard
+
"@aws-sdk/middleware-logger@npm:3.821.0":
version: 3.821.0
resolution: "@aws-sdk/middleware-logger@npm:3.821.0"
@@ -604,6 +1089,17 @@ __metadata:
languageName: node
linkType: hard
+"@aws-sdk/middleware-logger@npm:3.840.0":
+ version: 3.840.0
+ resolution: "@aws-sdk/middleware-logger@npm:3.840.0"
+ dependencies:
+ "@aws-sdk/types": 3.840.0
+ "@smithy/types": ^4.3.1
+ tslib: ^2.6.2
+ checksum: 2d9744eb17f969057956008d74a34adc27ee810f8a95e26547b2c8d8987bbe42f585ac6a1d033e341761245cd34c58a670155cfec01ee6ae3d29ed5c1531bc48
+ languageName: node
+ linkType: hard
+
"@aws-sdk/middleware-recursion-detection@npm:3.821.0":
version: 3.821.0
resolution: "@aws-sdk/middleware-recursion-detection@npm:3.821.0"
@@ -616,6 +1112,18 @@ __metadata:
languageName: node
linkType: hard
+"@aws-sdk/middleware-recursion-detection@npm:3.840.0":
+ version: 3.840.0
+ resolution: "@aws-sdk/middleware-recursion-detection@npm:3.840.0"
+ dependencies:
+ "@aws-sdk/types": 3.840.0
+ "@smithy/protocol-http": ^5.1.2
+ "@smithy/types": ^4.3.1
+ tslib: ^2.6.2
+ checksum: aa8aed9a33edb472dceb5eca4f92af4db814415422282ed9910d60ac585c1e99eaf46fed9b5890d358cee65631708a22014ac558a9404c6bd6487387046e6886
+ languageName: node
+ linkType: hard
+
"@aws-sdk/middleware-user-agent@npm:3.828.0":
version: 3.828.0
resolution: "@aws-sdk/middleware-user-agent@npm:3.828.0"
@@ -631,6 +1139,21 @@ __metadata:
languageName: node
linkType: hard
+"@aws-sdk/middleware-user-agent@npm:3.844.0":
+ version: 3.844.0
+ resolution: "@aws-sdk/middleware-user-agent@npm:3.844.0"
+ dependencies:
+ "@aws-sdk/core": 3.844.0
+ "@aws-sdk/types": 3.840.0
+ "@aws-sdk/util-endpoints": 3.844.0
+ "@smithy/core": ^3.7.0
+ "@smithy/protocol-http": ^5.1.2
+ "@smithy/types": ^4.3.1
+ tslib: ^2.6.2
+ checksum: c693072fb6b63d88d80b6675ab195b47166d53bcd8ae94c1941d284c08271b1dc9903bc121df074da685e5c302d325572e7444974e15bc1d767e424a46dc8c1c
+ languageName: node
+ linkType: hard
+
"@aws-sdk/nested-clients@npm:3.830.0":
version: 3.830.0
resolution: "@aws-sdk/nested-clients@npm:3.830.0"
@@ -677,17 +1200,77 @@ __metadata:
languageName: node
linkType: hard
+"@aws-sdk/nested-clients@npm:3.844.0":
+ version: 3.844.0
+ resolution: "@aws-sdk/nested-clients@npm:3.844.0"
+ dependencies:
+ "@aws-crypto/sha256-browser": 5.2.0
+ "@aws-crypto/sha256-js": 5.2.0
+ "@aws-sdk/core": 3.844.0
+ "@aws-sdk/middleware-host-header": 3.840.0
+ "@aws-sdk/middleware-logger": 3.840.0
+ "@aws-sdk/middleware-recursion-detection": 3.840.0
+ "@aws-sdk/middleware-user-agent": 3.844.0
+ "@aws-sdk/region-config-resolver": 3.840.0
+ "@aws-sdk/types": 3.840.0
+ "@aws-sdk/util-endpoints": 3.844.0
+ "@aws-sdk/util-user-agent-browser": 3.840.0
+ "@aws-sdk/util-user-agent-node": 3.844.0
+ "@smithy/config-resolver": ^4.1.4
+ "@smithy/core": ^3.7.0
+ "@smithy/fetch-http-handler": ^5.1.0
+ "@smithy/hash-node": ^4.0.4
+ "@smithy/invalid-dependency": ^4.0.4
+ "@smithy/middleware-content-length": ^4.0.4
+ "@smithy/middleware-endpoint": ^4.1.14
+ "@smithy/middleware-retry": ^4.1.15
+ "@smithy/middleware-serde": ^4.0.8
+ "@smithy/middleware-stack": ^4.0.4
+ "@smithy/node-config-provider": ^4.1.3
+ "@smithy/node-http-handler": ^4.1.0
+ "@smithy/protocol-http": ^5.1.2
+ "@smithy/smithy-client": ^4.4.6
+ "@smithy/types": ^4.3.1
+ "@smithy/url-parser": ^4.0.4
+ "@smithy/util-base64": ^4.0.0
+ "@smithy/util-body-length-browser": ^4.0.0
+ "@smithy/util-body-length-node": ^4.0.0
+ "@smithy/util-defaults-mode-browser": ^4.0.22
+ "@smithy/util-defaults-mode-node": ^4.0.22
+ "@smithy/util-endpoints": ^3.0.6
+ "@smithy/util-middleware": ^4.0.4
+ "@smithy/util-retry": ^4.0.6
+ "@smithy/util-utf8": ^4.0.0
+ tslib: ^2.6.2
+ checksum: a64f94c2f07a919719c5f9e902874b35f96feef0657462a4f11238f9915c00cf395b4246ccc658684545327c1ad6fad8a89af4b8b69f8da51e9bd048af9129cc
+ languageName: node
+ linkType: hard
+
"@aws-sdk/region-config-resolver@npm:3.821.0":
version: 3.821.0
resolution: "@aws-sdk/region-config-resolver@npm:3.821.0"
dependencies:
- "@aws-sdk/types": 3.821.0
+ "@aws-sdk/types": 3.821.0
+ "@smithy/node-config-provider": ^4.1.3
+ "@smithy/types": ^4.3.1
+ "@smithy/util-config-provider": ^4.0.0
+ "@smithy/util-middleware": ^4.0.4
+ tslib: ^2.6.2
+ checksum: e3688c64180308ef3db8347b13402f5d261d9d033c9c7e912746630c519d30f123e8a89cac87fc0314e798aa2edacf0a01d6fb901a14ca0e3d179058959dcc2f
+ languageName: node
+ linkType: hard
+
+"@aws-sdk/region-config-resolver@npm:3.840.0":
+ version: 3.840.0
+ resolution: "@aws-sdk/region-config-resolver@npm:3.840.0"
+ dependencies:
+ "@aws-sdk/types": 3.840.0
"@smithy/node-config-provider": ^4.1.3
"@smithy/types": ^4.3.1
"@smithy/util-config-provider": ^4.0.0
"@smithy/util-middleware": ^4.0.4
tslib: ^2.6.2
- checksum: e3688c64180308ef3db8347b13402f5d261d9d033c9c7e912746630c519d30f123e8a89cac87fc0314e798aa2edacf0a01d6fb901a14ca0e3d179058959dcc2f
+ checksum: c0368460299c12da578f03cfcdfb3b0fe5f0c29103e4d49fa7b1323fc4ed6b8059801597d1b68b95967df92397cda8d02fe8326eaa31431c26e0ace30cb0d272
languageName: node
linkType: hard
@@ -706,6 +1289,21 @@ __metadata:
languageName: node
linkType: hard
+"@aws-sdk/token-providers@npm:3.844.0":
+ version: 3.844.0
+ resolution: "@aws-sdk/token-providers@npm:3.844.0"
+ dependencies:
+ "@aws-sdk/core": 3.844.0
+ "@aws-sdk/nested-clients": 3.844.0
+ "@aws-sdk/types": 3.840.0
+ "@smithy/property-provider": ^4.0.4
+ "@smithy/shared-ini-file-loader": ^4.0.4
+ "@smithy/types": ^4.3.1
+ tslib: ^2.6.2
+ checksum: f7756f7213e52f7736a24e98a848036074d7f9be050fc79d8409cd93f0c8b1d0b44165a321c14a6ce147d94a9b0bfb5eac484f83a8a8385e646b282cdf1db847
+ languageName: node
+ linkType: hard
+
"@aws-sdk/types@npm:3.821.0, @aws-sdk/types@npm:^3.222.0":
version: 3.821.0
resolution: "@aws-sdk/types@npm:3.821.0"
@@ -716,6 +1314,16 @@ __metadata:
languageName: node
linkType: hard
+"@aws-sdk/types@npm:3.840.0":
+ version: 3.840.0
+ resolution: "@aws-sdk/types@npm:3.840.0"
+ dependencies:
+ "@smithy/types": ^4.3.1
+ tslib: ^2.6.2
+ checksum: 01c30bb35090b8105a120ac10bfb5adb291e2b07b15813eebc45a25e8febe79bb4c363600f52abd5348e73b5171611f5e7da8d7f7aeafb7cb3c7b22ac83a1cf8
+ languageName: node
+ linkType: hard
+
"@aws-sdk/util-endpoints@npm:3.828.0":
version: 3.828.0
resolution: "@aws-sdk/util-endpoints@npm:3.828.0"
@@ -728,6 +1336,19 @@ __metadata:
languageName: node
linkType: hard
+"@aws-sdk/util-endpoints@npm:3.844.0":
+ version: 3.844.0
+ resolution: "@aws-sdk/util-endpoints@npm:3.844.0"
+ dependencies:
+ "@aws-sdk/types": 3.840.0
+ "@smithy/types": ^4.3.1
+ "@smithy/url-parser": ^4.0.4
+ "@smithy/util-endpoints": ^3.0.6
+ tslib: ^2.6.2
+ checksum: 8610a2c6c21be65ada7795c892f1c0ffabbe84537d02bb8df18f19373165089c10d82ef0bc4aa4c45179fa8a7d36544586635f762a0fce3af6bfe95d694ff938
+ languageName: node
+ linkType: hard
+
"@aws-sdk/util-locate-window@npm:^3.0.0":
version: 3.804.0
resolution: "@aws-sdk/util-locate-window@npm:3.804.0"
@@ -749,6 +1370,18 @@ __metadata:
languageName: node
linkType: hard
+"@aws-sdk/util-user-agent-browser@npm:3.840.0":
+ version: 3.840.0
+ resolution: "@aws-sdk/util-user-agent-browser@npm:3.840.0"
+ dependencies:
+ "@aws-sdk/types": 3.840.0
+ "@smithy/types": ^4.3.1
+ bowser: ^2.11.0
+ tslib: ^2.6.2
+ checksum: eb99a07b7d96f0555aca25f11cd9e2f579e149d102cc78300c47cc0031a40e7ea1d559bfe15b47bccd675d33fe56ee8e4855198d8eb2fb6e9bb6517e10f39700
+ languageName: node
+ linkType: hard
+
"@aws-sdk/util-user-agent-node@npm:3.828.0":
version: 3.828.0
resolution: "@aws-sdk/util-user-agent-node@npm:3.828.0"
@@ -767,6 +1400,24 @@ __metadata:
languageName: node
linkType: hard
+"@aws-sdk/util-user-agent-node@npm:3.844.0":
+ version: 3.844.0
+ resolution: "@aws-sdk/util-user-agent-node@npm:3.844.0"
+ dependencies:
+ "@aws-sdk/middleware-user-agent": 3.844.0
+ "@aws-sdk/types": 3.840.0
+ "@smithy/node-config-provider": ^4.1.3
+ "@smithy/types": ^4.3.1
+ tslib: ^2.6.2
+ peerDependencies:
+ aws-crt: ">=1.0.0"
+ peerDependenciesMeta:
+ aws-crt:
+ optional: true
+ checksum: 847ae34d65bd4ccefd4ff0ac1ba9c078f73d8f333003053a23b81348d80f7c25ae68344120f73bf5d1ea0c2c8be7ae743313bb3f089b0de79c7ec1b58c674965
+ languageName: node
+ linkType: hard
+
"@aws-sdk/xml-builder@npm:3.821.0":
version: 3.821.0
resolution: "@aws-sdk/xml-builder@npm:3.821.0"
@@ -777,6 +1428,168 @@ __metadata:
languageName: node
linkType: hard
+"@azure/abort-controller@npm:^2.0.0, @azure/abort-controller@npm:^2.1.2":
+ version: 2.1.2
+ resolution: "@azure/abort-controller@npm:2.1.2"
+ dependencies:
+ tslib: ^2.6.2
+ checksum: 22176c04ea01498311c6bbd336669f6e3faffad1cbb0c9ebc6ee9c1ff2cf958fd17ce73c7354b99d8bda9fcd311325ece7bee248875279174e3fc460e8b1a63d
+ languageName: node
+ linkType: hard
+
+"@azure/arm-appservice@npm:^16.0.0":
+ version: 16.0.0
+ resolution: "@azure/arm-appservice@npm:16.0.0"
+ dependencies:
+ "@azure/abort-controller": ^2.1.2
+ "@azure/core-auth": ^1.9.0
+ "@azure/core-client": ^1.9.2
+ "@azure/core-lro": ^2.5.4
+ "@azure/core-paging": ^1.6.2
+ "@azure/core-rest-pipeline": ^1.19.0
+ tslib: ^2.8.1
+ checksum: 1ff8289cc4ab0cdec35527d8ca60f57b01d06b1397975ec604e18bb2c5b5b48b045705aa54d254beacdb3f1ad8808234138b5e96d69175c926b6cb105904eac7
+ languageName: node
+ linkType: hard
+
+"@azure/core-auth@npm:^1.4.0, @azure/core-auth@npm:^1.8.0, @azure/core-auth@npm:^1.9.0":
+ version: 1.10.0
+ resolution: "@azure/core-auth@npm:1.10.0"
+ dependencies:
+ "@azure/abort-controller": ^2.0.0
+ "@azure/core-util": ^1.11.0
+ tslib: ^2.6.2
+ checksum: 373d2dae505f5c7681ebe59f1aae7fb000826400cc8f94f42f567e1e91764d37731c0633c07ee2440088878a03e60b941599317c4c59e1d4627257af2563568f
+ languageName: node
+ linkType: hard
+
+"@azure/core-client@npm:^1.9.2":
+ version: 1.10.0
+ resolution: "@azure/core-client@npm:1.10.0"
+ dependencies:
+ "@azure/abort-controller": ^2.0.0
+ "@azure/core-auth": ^1.4.0
+ "@azure/core-rest-pipeline": ^1.20.0
+ "@azure/core-tracing": ^1.0.0
+ "@azure/core-util": ^1.6.1
+ "@azure/logger": ^1.0.0
+ tslib: ^2.6.2
+ checksum: 5881e8ad4f0948557149e2ccee9c6d820eaa0fb86d6bf21b4e1149d6038f0a1a4f5ed141561fb40dbeb1a7f1f7c999aedcf4652e6b98e411901819226d2e7124
+ languageName: node
+ linkType: hard
+
+"@azure/core-lro@npm:^2.5.4":
+ version: 2.7.2
+ resolution: "@azure/core-lro@npm:2.7.2"
+ dependencies:
+ "@azure/abort-controller": ^2.0.0
+ "@azure/core-util": ^1.2.0
+ "@azure/logger": ^1.0.0
+ tslib: ^2.6.2
+ checksum: dc2e5bbb004a86704bcf584422cd099b7a6beef57ce6501afacced65f4f3b5fbba57a2439f701687237867552a661fd6568f8b3c9e3eacdfd9039004772f85b0
+ languageName: node
+ linkType: hard
+
+"@azure/core-paging@npm:^1.6.2":
+ version: 1.6.2
+ resolution: "@azure/core-paging@npm:1.6.2"
+ dependencies:
+ tslib: ^2.6.2
+ checksum: 4b57f953998473ee784c3ea774a8b54f4be0ec239bd43cbabe28113ca18f141455289713302d4fcd802898dd7ab58380ff575b7ce9400ec1ec20c505791c0b25
+ languageName: node
+ linkType: hard
+
+"@azure/core-rest-pipeline@npm:^1.17.0, @azure/core-rest-pipeline@npm:^1.19.0, @azure/core-rest-pipeline@npm:^1.20.0":
+ version: 1.22.0
+ resolution: "@azure/core-rest-pipeline@npm:1.22.0"
+ dependencies:
+ "@azure/abort-controller": ^2.0.0
+ "@azure/core-auth": ^1.8.0
+ "@azure/core-tracing": ^1.0.1
+ "@azure/core-util": ^1.11.0
+ "@azure/logger": ^1.0.0
+ "@typespec/ts-http-runtime": ^0.3.0
+ tslib: ^2.6.2
+ checksum: 949b24f4e392f8fd4ba6aeb28ef475ffc80dea831d87f6a22133e8e7c98b118bfa448634677fceacb945869bf888f81ec73252518dbb5168b109515093475449
+ languageName: node
+ linkType: hard
+
+"@azure/core-tracing@npm:^1.0.0, @azure/core-tracing@npm:^1.0.1":
+ version: 1.3.0
+ resolution: "@azure/core-tracing@npm:1.3.0"
+ dependencies:
+ tslib: ^2.6.2
+ checksum: b05c064fff4b4e8e1d97becacd4fb7983df269e1ac726228c17560fcb2c33a14018c3d0021a8248d3231beeb5dc8395eb676a9ad78896058b7dd9e348937bcb6
+ languageName: node
+ linkType: hard
+
+"@azure/core-util@npm:^1.11.0, @azure/core-util@npm:^1.2.0, @azure/core-util@npm:^1.6.1":
+ version: 1.13.0
+ resolution: "@azure/core-util@npm:1.13.0"
+ dependencies:
+ "@azure/abort-controller": ^2.0.0
+ "@typespec/ts-http-runtime": ^0.3.0
+ tslib: ^2.6.2
+ checksum: a1e1d3c329e895db22348ff6b225dcffb9f3644c567ef76e60c78f3b0223a997c768a6194ce87e5eefab2cfcf08748c67300cb09ee224470a57feaf8c152f07a
+ languageName: node
+ linkType: hard
+
+"@azure/identity@npm:^4.10.0":
+ version: 4.10.2
+ resolution: "@azure/identity@npm:4.10.2"
+ dependencies:
+ "@azure/abort-controller": ^2.0.0
+ "@azure/core-auth": ^1.9.0
+ "@azure/core-client": ^1.9.2
+ "@azure/core-rest-pipeline": ^1.17.0
+ "@azure/core-tracing": ^1.0.0
+ "@azure/core-util": ^1.11.0
+ "@azure/logger": ^1.0.0
+ "@azure/msal-browser": ^4.2.0
+ "@azure/msal-node": ^3.5.0
+ open: ^10.1.0
+ tslib: ^2.2.0
+ checksum: 6b9459dbea35545a643c9df569f19ad2d455ca8a777074fc8f46b50cf53808132433da47cf05b884ddf85af54b46ae6f4fed8aa99d6ff4a36d032848994e21bd
+ languageName: node
+ linkType: hard
+
+"@azure/logger@npm:^1.0.0":
+ version: 1.3.0
+ resolution: "@azure/logger@npm:1.3.0"
+ dependencies:
+ "@typespec/ts-http-runtime": ^0.3.0
+ tslib: ^2.6.2
+ checksum: 2089429ef3eadc6d4d10c5e12f1cf6580587ac0eed5c7107fc621c56927fc162e150e57668e98092d4ba0dc10c6425ee61971dea67e80022fb3906e9c4efc3a6
+ languageName: node
+ linkType: hard
+
+"@azure/msal-browser@npm:^4.2.0":
+ version: 4.15.0
+ resolution: "@azure/msal-browser@npm:4.15.0"
+ dependencies:
+ "@azure/msal-common": 15.8.1
+ checksum: 493026644d409addcd22ee975838f8091996a008418cccf49261a1c7cdc7917143f9d6fedb76b18b1cfe898d61f3f7d660405e2793c8d3351064bb03aeb54f9c
+ languageName: node
+ linkType: hard
+
+"@azure/msal-common@npm:15.8.1":
+ version: 15.8.1
+ resolution: "@azure/msal-common@npm:15.8.1"
+ checksum: 0ea62b41f59d35ebfb8342c73e814e57d7990b5d66f7f89aaf9df6fd066717862e26815d95d27434770a2336253ab1141012b5d384347631e3af0f6791ef8413
+ languageName: node
+ linkType: hard
+
+"@azure/msal-node@npm:^3.5.0":
+ version: 3.6.3
+ resolution: "@azure/msal-node@npm:3.6.3"
+ dependencies:
+ "@azure/msal-common": 15.8.1
+ jsonwebtoken: ^9.0.0
+ uuid: ^8.3.0
+ checksum: be248a4f6ae1e89ea9e15ccd385f88418a4c5f7ac468cb9e9bc338eb3e906380b3bf61970e51e64bf2d062792a25ff78227c3046b3d33981676d3af5feef24ae
+ languageName: node
+ linkType: hard
+
"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.24.7, @babel/code-frame@npm:^7.27.1":
version: 7.27.1
resolution: "@babel/code-frame@npm:7.27.1"
@@ -788,14 +1601,37 @@ __metadata:
languageName: node
linkType: hard
-"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.27.2":
+"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.2, @babel/compat-data@npm:^7.27.2":
version: 7.27.5
resolution: "@babel/compat-data@npm:7.27.5"
checksum: 8706be55f1c6e1cf85bfb3f2b3afdabba82142b339a11b62c694d07907b082d5715dfbe77fbbad891979809bdd013a0c9e2e5c3419dc8099b9fb7a45215f0f73
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":
+"@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.4
resolution: "@babel/core@npm:7.27.4"
dependencies:
@@ -854,7 +1690,7 @@ __metadata:
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:
@@ -897,7 +1733,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:
@@ -932,7 +1768,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-module-transforms@npm:^7.27.1, @babel/helper-module-transforms@npm:^7.27.3":
+"@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:
@@ -954,7 +1790,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
@@ -1011,7 +1847,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
@@ -1029,7 +1865,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helpers@npm:^7.27.4":
+"@babel/helpers@npm:^7.25.0, @babel/helpers@npm:^7.27.4":
version: 7.27.6
resolution: "@babel/helpers@npm:7.27.6"
dependencies:
@@ -1039,7 +1875,7 @@ __metadata:
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.2, @babel/parser@npm:^7.27.4, @babel/parser@npm:^7.27.5":
+"@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.4, @babel/parser@npm:^7.27.5":
version: 7.27.5
resolution: "@babel/parser@npm:7.27.5"
dependencies:
@@ -1050,7 +1886,7 @@ __metadata:
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:
@@ -1062,7 +1898,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:
@@ -1073,7 +1909,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:
@@ -1084,7 +1920,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:
@@ -1097,7 +1933,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:
@@ -1232,6 +2068,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"
@@ -1243,7 +2090,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:
@@ -1420,7 +2267,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:
@@ -1446,7 +2293,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:
@@ -1468,7 +2315,7 @@ __metadata:
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:
@@ -1480,7 +2327,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:
@@ -1492,7 +2339,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:
@@ -1531,7 +2378,7 @@ __metadata:
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:
@@ -1543,7 +2390,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:
@@ -1554,7 +2401,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:
@@ -1566,7 +2413,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:
@@ -1577,7 +2424,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:
@@ -1588,7 +2435,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:
@@ -1636,7 +2483,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:
@@ -1669,7 +2516,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:
@@ -1680,7 +2527,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:
@@ -1692,7 +2539,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:
@@ -1704,7 +2551,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:
@@ -1718,7 +2565,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:
@@ -1742,7 +2589,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:
@@ -1789,7 +2636,7 @@ __metadata:
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:
@@ -1812,7 +2659,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:
@@ -1860,7 +2707,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:
@@ -1965,7 +2812,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:
@@ -2026,7 +2873,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:
@@ -2037,7 +2884,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:
@@ -2063,7 +2910,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:
@@ -2074,7 +2921,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:
@@ -2098,7 +2945,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:
@@ -2110,6 +2957,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"
@@ -2189,7 +3129,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:
@@ -2231,7 +3171,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:
@@ -2246,7 +3186,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:
@@ -2261,6 +3201,15 @@ __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.6
resolution: "@babel/runtime@npm:7.27.6"
@@ -2279,7 +3228,7 @@ __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.27.3, @babel/traverse@npm:^7.27.4, @babel/traverse@npm:^7.7.4":
+"@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.27.4, @babel/traverse@npm:^7.7.4":
version: 7.27.4
resolution: "@babel/traverse@npm:7.27.4"
dependencies:
@@ -2311,6 +3260,68 @@ __metadata:
languageName: node
linkType: hard
+"@datadog/datadog-ci@npm:3.12.0":
+ version: 3.12.0
+ resolution: "@datadog/datadog-ci@npm:3.12.0"
+ dependencies:
+ "@aws-sdk/client-cloudwatch-logs": ^3.709.0
+ "@aws-sdk/client-iam": ^3.709.0
+ "@aws-sdk/client-lambda": ^3.709.0
+ "@aws-sdk/client-sfn": ^3.709.0
+ "@aws-sdk/core": ^3.709.0
+ "@aws-sdk/credential-provider-ini": ^3.709.0
+ "@aws-sdk/credential-providers": ^3.709.0
+ "@azure/arm-appservice": ^16.0.0
+ "@azure/identity": ^4.10.0
+ "@google-cloud/logging": ^11.1.0
+ "@google-cloud/run": ^2.1.0
+ "@smithy/property-provider": ^2.0.12
+ "@smithy/util-retry": ^2.0.4
+ "@types/datadog-metrics": 0.6.1
+ ajv: ^8.12.0
+ ajv-formats: ^2.1.1
+ async-retry: 1.3.1
+ axios: ^1.8.4
+ chalk: 3.0.0
+ clipanion: ^3.2.1
+ datadog-metrics: 0.9.3
+ deep-extend: 0.6.0
+ deep-object-diff: ^1.1.9
+ fast-deep-equal: ^3.1.3
+ fast-levenshtein: ^3.0.0
+ fast-xml-parser: ^4.4.1
+ form-data: ^4.0.3
+ fuzzy: ^0.1.3
+ get-value: ^4.0.1
+ glob: ^10.4.5
+ google-auth-library: ^9.12.0
+ inquirer: ^8.2.5
+ inquirer-checkbox-plus-prompt: ^1.4.2
+ js-yaml: 3.13.1
+ jszip: ^3.10.1
+ ora: 5.4.1
+ packageurl-js: ^2.0.1
+ proxy-agent: ^6.4.0
+ semver: ^7.5.3
+ set-value: ^4.1.0
+ simple-git: 3.16.0
+ ssh2: ^1.15.0
+ ssh2-streams: 0.4.10
+ sshpk: 1.16.1
+ terminal-link: 2.1.1
+ tiny-async-pool: ^2.1.0
+ typanion: ^3.14.0
+ upath: ^2.0.1
+ uuid: ^9.0.0
+ ws: ^7.5.10
+ xml2js: 0.5.0
+ yamux-js: 0.1.2
+ bin:
+ datadog-ci: dist/cli.js
+ checksum: 8d1be1ac850ec423a842ee35d303b99376b91b79ce387c7bfbe951a6371b565ebef70cad9e3e3381d0a22cf11cba217cfbd17f8ad1434b93a1a67c1b0646ad5a
+ languageName: node
+ linkType: hard
+
"@datadog/datadog-ci@npm:^2.39.0":
version: 2.48.0
resolution: "@datadog/datadog-ci@npm:2.48.0"
@@ -2619,6 +3630,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"
@@ -2717,6 +3745,15 @@ __metadata:
languageName: node
linkType: hard
+"@google-cloud/run@npm:^2.1.0":
+ version: 2.2.0
+ resolution: "@google-cloud/run@npm:2.2.0"
+ dependencies:
+ google-gax: ^5.0.0
+ checksum: 1f315d38eda49eec001c16a9c4e227d2fd9f7ece55682730800e367d48a1729cf0ffcc62982e942f7fab94f92b923fc1f152c97e0b18d6a0e0ac77f8c2770550
+ languageName: node
+ linkType: hard
+
"@graphql-typed-document-node/core@npm:^3.1.1":
version: 3.2.0
resolution: "@graphql-typed-document-node/core@npm:3.2.0"
@@ -2726,7 +3763,7 @@ __metadata:
languageName: node
linkType: hard
-"@grpc/grpc-js@npm:^1.10.9":
+"@grpc/grpc-js@npm:^1.10.9, @grpc/grpc-js@npm:^1.12.6":
version: 1.13.4
resolution: "@grpc/grpc-js@npm:1.13.4"
dependencies:
@@ -2777,6 +3814,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"
@@ -2784,6 +3832,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"
@@ -2869,7 +3924,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:
@@ -4112,6 +5167,23 @@ __metadata:
languageName: node
linkType: hard
+"@react-native-community/slider@npm:4.5.7":
+ version: 4.5.7
+ resolution: "@react-native-community/slider@npm:4.5.7"
+ checksum: f8b722c1821332398324d4d45a31c70b90007c1f859840ddc58388a0783d3a4706e7d0808898ecc76091de60041ae20a0758ef4d706d2ae06a4b4d46ff934028
+ languageName: node
+ linkType: hard
+
+"@react-native-picker/picker@npm:2.11.0":
+ version: 2.11.0
+ resolution: "@react-native-picker/picker@npm:2.11.0"
+ peerDependencies:
+ react: "*"
+ react-native: "*"
+ checksum: 889107a9c6d6b23404332ec60d7526a6244ff6433be1e06892014849c97dce8a52c1d7c670aa89761ad814da923c7585b2934bf50f8c8431fdb50f28d4a55fe3
+ languageName: node
+ linkType: hard
+
"@react-native/assets-registry@npm:0.76.9":
version: 0.76.9
resolution: "@react-native/assets-registry@npm:0.76.9"
@@ -4119,6 +5191,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"
@@ -4128,6 +5207,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"
@@ -4183,6 +5272,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"
@@ -4201,6 +5345,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"
@@ -4225,6 +5386,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"
@@ -4232,6 +5416,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"
@@ -4252,6 +5443,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"
@@ -4275,6 +5486,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"
@@ -4282,6 +5516,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"
@@ -4289,6 +5530,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"
@@ -4296,6 +5544,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"
@@ -4310,6 +5565,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"
@@ -4322,6 +5591,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"
@@ -4329,6 +5610,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"
@@ -4336,6 +5624,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"
@@ -4353,6 +5648,39 @@ __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:7.3.12":
+ version: 7.3.12
+ resolution: "@react-navigation/bottom-tabs@npm:7.3.12"
+ dependencies:
+ "@react-navigation/elements": ^2.4.1
+ color: ^4.2.3
+ peerDependencies:
+ "@react-navigation/native": ^7.1.8
+ react: ">= 18.2.0"
+ react-native: "*"
+ react-native-safe-area-context: ">= 4.0.0"
+ react-native-screens: ">= 4.0.0"
+ checksum: 0c75d4945f31f88554a86546e65584f2d39440f21095095d67f273a49d1b997b643aa92b60e2bf5ba77be1d3e3ff045e4042437c2a37b544590096774a6ea173
+ 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"
@@ -4401,6 +5729,23 @@ __metadata:
languageName: node
linkType: hard
+"@react-navigation/core@npm:^7.9.1":
+ version: 7.12.0
+ resolution: "@react-navigation/core@npm:7.12.0"
+ dependencies:
+ "@react-navigation/routers": ^7.4.1
+ 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.4
+ use-sync-external-store: ^1.5.0
+ peerDependencies:
+ react: ">= 18.2.0"
+ checksum: 3b608272c33aa70d94e70ec080c4bc1972cbefa5da1f176d96cc43cc73c42432600a1571a58050c261ba779af2ad7675516431e6c6c49876bc6f88e7613de680
+ 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"
@@ -4413,6 +5758,42 @@ __metadata:
languageName: node
linkType: hard
+"@react-navigation/elements@npm:^2.4.1":
+ version: 2.4.6
+ resolution: "@react-navigation/elements@npm:2.4.6"
+ dependencies:
+ color: ^4.2.3
+ use-latest-callback: ^0.2.4
+ use-sync-external-store: ^1.5.0
+ peerDependencies:
+ "@react-native-masked-view/masked-view": ">= 0.2.0"
+ "@react-navigation/native": ^7.1.13
+ react: ">= 18.2.0"
+ react-native: "*"
+ react-native-safe-area-context: ">= 4.0.0"
+ peerDependenciesMeta:
+ "@react-native-masked-view/masked-view":
+ optional: true
+ checksum: 156f347fe125a4f4389dbd6236430b16314b593b94ac91f8503883ad3c7056a5c18c1797c0420b22d10ad99d8156a9b72b109e39ac20a4508b9bdb4e823482c2
+ languageName: node
+ linkType: hard
+
+"@react-navigation/native-stack@npm:7.3.12":
+ version: 7.3.12
+ resolution: "@react-navigation/native-stack@npm:7.3.12"
+ dependencies:
+ "@react-navigation/elements": ^2.4.1
+ warn-once: ^0.1.1
+ peerDependencies:
+ "@react-navigation/native": ^7.1.8
+ react: ">= 18.2.0"
+ react-native: "*"
+ react-native-safe-area-context: ">= 4.0.0"
+ react-native-screens: ">= 4.0.0"
+ checksum: 367e52770c954378e8b5972ad771cfabd1ea41d0c20f843f981f070fac8923092a52a3de1becd1ccc036ca376dd894a7b1f8c29a1c81f518a84c158ebfe87f92
+ 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"
@@ -4442,6 +5823,22 @@ __metadata:
languageName: node
linkType: hard
+"@react-navigation/native@npm:7.1.8":
+ version: 7.1.8
+ resolution: "@react-navigation/native@npm:7.1.8"
+ dependencies:
+ "@react-navigation/core": ^7.9.1
+ 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: 4b36e283cb35f8f8f9bbef141d2670b43cfbcbe253c2cfd83a07cc78890a9eb73cce586b3c9523e3c79e29360bd435766dc36248f31e833e46da4e5f6a0247f9
+ languageName: node
+ linkType: hard
+
"@react-navigation/native@npm:^6.1.18":
version: 6.1.18
resolution: "@react-navigation/native@npm:6.1.18"
@@ -4475,6 +5872,15 @@ __metadata:
languageName: node
linkType: hard
+"@react-navigation/routers@npm:^7.4.1":
+ version: 7.4.1
+ resolution: "@react-navigation/routers@npm:7.4.1"
+ dependencies:
+ nanoid: ^3.3.11
+ checksum: 7cc889f8a89c656082b7302653b462bb28db422c443a9df3d5d379715cb837027f484faf8889567adf829638754ab9c7f36a6d0771942530460aec2a64605840
+ 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"
@@ -4772,6 +6178,23 @@ __metadata:
languageName: node
linkType: hard
+"@smithy/core@npm:^3.7.0":
+ version: 3.7.0
+ resolution: "@smithy/core@npm:3.7.0"
+ dependencies:
+ "@smithy/middleware-serde": ^4.0.8
+ "@smithy/protocol-http": ^5.1.2
+ "@smithy/types": ^4.3.1
+ "@smithy/util-base64": ^4.0.0
+ "@smithy/util-body-length-browser": ^4.0.0
+ "@smithy/util-middleware": ^4.0.4
+ "@smithy/util-stream": ^4.2.3
+ "@smithy/util-utf8": ^4.0.0
+ tslib: ^2.6.2
+ checksum: ca9c7f956e054bdb97ed8c4e4758846d6dcde36761955927abd12089371f795925bd9e67e4977f0a31750388f446e4d6eeeb406a4aebfb342d26546e72485ab1
+ languageName: node
+ linkType: hard
+
"@smithy/credential-provider-imds@npm:^4.0.6":
version: 4.0.6
resolution: "@smithy/credential-provider-imds@npm:4.0.6"
@@ -4853,6 +6276,19 @@ __metadata:
languageName: node
linkType: hard
+"@smithy/fetch-http-handler@npm:^5.1.0":
+ version: 5.1.0
+ resolution: "@smithy/fetch-http-handler@npm:5.1.0"
+ dependencies:
+ "@smithy/protocol-http": ^5.1.2
+ "@smithy/querystring-builder": ^4.0.4
+ "@smithy/types": ^4.3.1
+ "@smithy/util-base64": ^4.0.0
+ tslib: ^2.6.2
+ checksum: f88242d6b4f1341e7d45b1defdc6b930f1600d840da57ce015583a81fd24a320e12b9fda12e3c51ecf9ce49ede37fe1f77d21d5e4bb94f094e801b6464dfee8c
+ languageName: node
+ linkType: hard
+
"@smithy/hash-node@npm:^4.0.4":
version: 4.0.4
resolution: "@smithy/hash-node@npm:4.0.4"
@@ -4920,6 +6356,22 @@ __metadata:
languageName: node
linkType: hard
+"@smithy/middleware-endpoint@npm:^4.1.14":
+ version: 4.1.14
+ resolution: "@smithy/middleware-endpoint@npm:4.1.14"
+ dependencies:
+ "@smithy/core": ^3.7.0
+ "@smithy/middleware-serde": ^4.0.8
+ "@smithy/node-config-provider": ^4.1.3
+ "@smithy/shared-ini-file-loader": ^4.0.4
+ "@smithy/types": ^4.3.1
+ "@smithy/url-parser": ^4.0.4
+ "@smithy/util-middleware": ^4.0.4
+ tslib: ^2.6.2
+ checksum: 8cc4dbfada407590eb2ffae00b655ab76b5915b2380041df9bf71c157e067da7cad9565852ccad9d6def40325de5d91e508f9451664511dc1bf5c111f405c6db
+ languageName: node
+ linkType: hard
+
"@smithy/middleware-retry@npm:^4.1.12":
version: 4.1.12
resolution: "@smithy/middleware-retry@npm:4.1.12"
@@ -4933,7 +6385,24 @@ __metadata:
"@smithy/util-retry": ^4.0.5
tslib: ^2.6.2
uuid: ^9.0.1
- checksum: 401d97e2b9e2d62220215ec98f9b7299b9a8aed909b3ae9a5e0c29993087fdfe22464a17bb980eb72c027c1a056d365159102ddd9c06c8045a1a6f0be441f1dd
+ checksum: 401d97e2b9e2d62220215ec98f9b7299b9a8aed909b3ae9a5e0c29993087fdfe22464a17bb980eb72c027c1a056d365159102ddd9c06c8045a1a6f0be441f1dd
+ languageName: node
+ linkType: hard
+
+"@smithy/middleware-retry@npm:^4.1.15":
+ version: 4.1.15
+ resolution: "@smithy/middleware-retry@npm:4.1.15"
+ dependencies:
+ "@smithy/node-config-provider": ^4.1.3
+ "@smithy/protocol-http": ^5.1.2
+ "@smithy/service-error-classification": ^4.0.6
+ "@smithy/smithy-client": ^4.4.6
+ "@smithy/types": ^4.3.1
+ "@smithy/util-middleware": ^4.0.4
+ "@smithy/util-retry": ^4.0.6
+ tslib: ^2.6.2
+ uuid: ^9.0.1
+ checksum: 95fa796973ee58420992e97d88f2ac3e8a794d51a845f3c09e6aab7fac239d7f4e36439b46f9706b295c97d8e9c5ae184b5007947905f5e9bc21a3a265fefa55
languageName: node
linkType: hard
@@ -4983,6 +6452,19 @@ __metadata:
languageName: node
linkType: hard
+"@smithy/node-http-handler@npm:^4.1.0":
+ version: 4.1.0
+ resolution: "@smithy/node-http-handler@npm:4.1.0"
+ dependencies:
+ "@smithy/abort-controller": ^4.0.4
+ "@smithy/protocol-http": ^5.1.2
+ "@smithy/querystring-builder": ^4.0.4
+ "@smithy/types": ^4.3.1
+ tslib: ^2.6.2
+ checksum: 4ea660acadb0f30255066b068451cd8521d130f5702060c19af5e488f681cc7f76834612e566d80a933d92e897b4fca94973ed942f0a32f1703f6140bdd66b81
+ languageName: node
+ linkType: hard
+
"@smithy/property-provider@npm:^2.0.12":
version: 2.2.0
resolution: "@smithy/property-provider@npm:2.2.0"
@@ -5052,6 +6534,15 @@ __metadata:
languageName: node
linkType: hard
+"@smithy/service-error-classification@npm:^4.0.6":
+ version: 4.0.6
+ resolution: "@smithy/service-error-classification@npm:4.0.6"
+ dependencies:
+ "@smithy/types": ^4.3.1
+ checksum: c851c882358af75cac41508ffdd2cfdc59e0cd298cb25cf6a4a97dd6cbc92f4890ce04590305726ebb1bbb6b6c527dde8d80ec84095c76bcdb6a3a1cc2107a90
+ languageName: node
+ linkType: hard
+
"@smithy/shared-ini-file-loader@npm:^4.0.4":
version: 4.0.4
resolution: "@smithy/shared-ini-file-loader@npm:4.0.4"
@@ -5093,6 +6584,21 @@ __metadata:
languageName: node
linkType: hard
+"@smithy/smithy-client@npm:^4.4.6":
+ version: 4.4.6
+ resolution: "@smithy/smithy-client@npm:4.4.6"
+ dependencies:
+ "@smithy/core": ^3.7.0
+ "@smithy/middleware-endpoint": ^4.1.14
+ "@smithy/middleware-stack": ^4.0.4
+ "@smithy/protocol-http": ^5.1.2
+ "@smithy/types": ^4.3.1
+ "@smithy/util-stream": ^4.2.3
+ tslib: ^2.6.2
+ checksum: 6579149131e16f0dbcb87ff9d6fc4d9f8d71056066d73e4838e8233a0a9f2bf9abd07a8b890db7dded9d539d37a6a66fa6044ae91e0e015d0b73453c5344eeae
+ languageName: node
+ linkType: hard
+
"@smithy/types@npm:^2.12.0":
version: 2.12.0
resolution: "@smithy/types@npm:2.12.0"
@@ -5193,6 +6699,19 @@ __metadata:
languageName: node
linkType: hard
+"@smithy/util-defaults-mode-browser@npm:^4.0.22":
+ version: 4.0.22
+ resolution: "@smithy/util-defaults-mode-browser@npm:4.0.22"
+ dependencies:
+ "@smithy/property-provider": ^4.0.4
+ "@smithy/smithy-client": ^4.4.6
+ "@smithy/types": ^4.3.1
+ bowser: ^2.11.0
+ tslib: ^2.6.2
+ checksum: 7ba4f23367a66cb73db19f9e5ae2fb2a6337127ed6f65278b909a37a152b3efb09c5fbcd933e4c4531a257f691cf4f5b3b1f4816024a3112a4c94c4afc55c04d
+ languageName: node
+ linkType: hard
+
"@smithy/util-defaults-mode-node@npm:^4.0.19":
version: 4.0.19
resolution: "@smithy/util-defaults-mode-node@npm:4.0.19"
@@ -5208,6 +6727,21 @@ __metadata:
languageName: node
linkType: hard
+"@smithy/util-defaults-mode-node@npm:^4.0.22":
+ version: 4.0.22
+ resolution: "@smithy/util-defaults-mode-node@npm:4.0.22"
+ dependencies:
+ "@smithy/config-resolver": ^4.1.4
+ "@smithy/credential-provider-imds": ^4.0.6
+ "@smithy/node-config-provider": ^4.1.3
+ "@smithy/property-provider": ^4.0.4
+ "@smithy/smithy-client": ^4.4.6
+ "@smithy/types": ^4.3.1
+ tslib: ^2.6.2
+ checksum: 1a10953d1b6b0e0ae484cfa6a1df3a0782414c2d6b95e2c43d3320c2e1260a80b582a68bbfb48eb373c1e5effb337286e85794878c4da6a9dc797011ff809d7a
+ languageName: node
+ linkType: hard
+
"@smithy/util-endpoints@npm:^3.0.6":
version: 3.0.6
resolution: "@smithy/util-endpoints@npm:3.0.6"
@@ -5260,6 +6794,17 @@ __metadata:
languageName: node
linkType: hard
+"@smithy/util-retry@npm:^4.0.6":
+ version: 4.0.6
+ resolution: "@smithy/util-retry@npm:4.0.6"
+ dependencies:
+ "@smithy/service-error-classification": ^4.0.6
+ "@smithy/types": ^4.3.1
+ tslib: ^2.6.2
+ checksum: 0faef3d90da51024a5abd90de6bf1a846b6cd0f61c78791a2fecc7e49b0e8a705ca5619ae538cad4bab8995456d8219fe1c2769dacd156195cb73befcb02ca03
+ languageName: node
+ linkType: hard
+
"@smithy/util-stream@npm:^4.2.2":
version: 4.2.2
resolution: "@smithy/util-stream@npm:4.2.2"
@@ -5276,6 +6821,22 @@ __metadata:
languageName: node
linkType: hard
+"@smithy/util-stream@npm:^4.2.3":
+ version: 4.2.3
+ resolution: "@smithy/util-stream@npm:4.2.3"
+ dependencies:
+ "@smithy/fetch-http-handler": ^5.1.0
+ "@smithy/node-http-handler": ^4.1.0
+ "@smithy/types": ^4.3.1
+ "@smithy/util-base64": ^4.0.0
+ "@smithy/util-buffer-from": ^4.0.0
+ "@smithy/util-hex-encoding": ^4.0.0
+ "@smithy/util-utf8": ^4.0.0
+ tslib: ^2.6.2
+ checksum: 3384df45323f9af1ecc3bad506e8dc0100af44397d623e4b456654b997c87458b9c550b6f540f31e1d498f93e914b868f4bda6cf7eb36b34e26f86426c5299fd
+ languageName: node
+ linkType: hard
+
"@smithy/util-uri-escape@npm:^4.0.0":
version: 4.0.0
resolution: "@smithy/util-uri-escape@npm:4.0.0"
@@ -5316,6 +6877,17 @@ __metadata:
languageName: node
linkType: hard
+"@smithy/util-waiter@npm:^4.0.6":
+ version: 4.0.6
+ resolution: "@smithy/util-waiter@npm:4.0.6"
+ dependencies:
+ "@smithy/abort-controller": ^4.0.4
+ "@smithy/types": ^4.3.1
+ tslib: ^2.6.2
+ checksum: 0fb8f5bd351f875f50e4b82845eb427f42d200dd49d39001be3c1f8da6c08383e41c2fcfb5a53fb628211210fe181da30c3c60cb3923805a2063df5cf1be6dd7
+ languageName: node
+ linkType: hard
+
"@testing-library/react-native@npm:7.0.2":
version: 7.0.2
resolution: "@testing-library/react-native@npm:7.0.2"
@@ -5464,6 +7036,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"
@@ -5498,9 +7080,9 @@ __metadata:
linkType: hard
"@types/lodash@npm:*":
- version: 4.17.17
- resolution: "@types/lodash@npm:4.17.17"
- checksum: cfa34a752f3c540a196e9f92dbaff93ae15fe4058da8cce1918dd9219076dc19eec33b043aae45865e2b3ef8234a845bb57366144ec8e52551e2bc3f119e04a1
+ version: 4.17.18
+ resolution: "@types/lodash@npm:4.17.18"
+ checksum: 539b2a01a83062888c36e53450b03ff2fbb4631a8226df38e1d77888c954c931b0b1abcbb26bb4f19ffc37da5b0be4db8b3002560d2acc036e8d28ebad132c47
languageName: node
linkType: hard
@@ -5575,6 +7157,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"
@@ -5603,7 +7194,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/request@npm:^2.48.8":
+"@types/request@npm:^2.48.12, @types/request@npm:^2.48.8":
version: 2.48.12
resolution: "@types/request@npm:2.48.12"
dependencies:
@@ -5970,6 +7561,17 @@ __metadata:
languageName: node
linkType: hard
+"@typespec/ts-http-runtime@npm:^0.3.0":
+ version: 0.3.0
+ resolution: "@typespec/ts-http-runtime@npm:0.3.0"
+ dependencies:
+ http-proxy-agent: ^7.0.0
+ https-proxy-agent: ^7.0.0
+ tslib: ^2.6.2
+ checksum: 1adc5ebdad420d5db3cc59b3f26d079b98c3a7a11ce82f6c6effd93319b5ce27a18537f03b0c79e26a2ccb42bbed9cd8e872c19b8500e51b39c2b98b77839e01
+ languageName: node
+ linkType: hard
+
"@ungap/structured-clone@npm:^1.2.0":
version: 1.3.0
resolution: "@ungap/structured-clone@npm:1.3.0"
@@ -6195,7 +7797,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:
@@ -6540,6 +8142,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"
@@ -6688,6 +8299,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"
@@ -6711,6 +8334,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"
@@ -6720,15 +8352,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"
@@ -6812,6 +8435,47 @@ __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/datadog-ci": 3.12.0
+ "@datadog/mobile-react-native": "workspace:packages/core"
+ "@datadog/mobile-react-native-session-replay": "workspace:packages/react-native-session-replay"
+ "@datadog/mobile-react-native-webview": "workspace:packages/react-native-webview"
+ "@datadog/mobile-react-navigation": "workspace:packages/react-navigation"
+ "@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-community/slider": 4.5.7
+ "@react-native-picker/picker": 2.11.0
+ "@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-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-native-webview: 13.15.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"
@@ -6970,6 +8634,15 @@ __metadata:
languageName: node
linkType: hard
+"bundle-name@npm:^4.1.0":
+ version: 4.1.0
+ resolution: "bundle-name@npm:4.1.0"
+ dependencies:
+ run-applescript: ^7.0.0
+ checksum: 1d966c8d2dbf4d9d394e53b724ac756c2414c45c01340b37743621f59cc565a435024b394ddcb62b9b335d1c9a31f4640eb648c3fec7f97ee74dc0694c9beb6c
+ languageName: node
+ linkType: hard
+
"byte-size@npm:8.1.1":
version: 8.1.1
resolution: "byte-size@npm:8.1.1"
@@ -7114,9 +8787,9 @@ __metadata:
linkType: hard
"caniuse-lite@npm:^1.0.30001718":
- version: 1.0.30001723
- resolution: "caniuse-lite@npm:1.0.30001723"
- checksum: 0acd7f33f15cfc6cf81a5155bb288afb34ce63cddd90bbf1740243b3c6c1de813ad10b393650f1c15e47f13ff4da61a8d14b02fac8e47e7367aede3ef162a1c6
+ version: 1.0.30001724
+ resolution: "caniuse-lite@npm:1.0.30001724"
+ checksum: 3285f9c56898ffd9f5fce8f6cff9deb832c5897da8046474f8961a5848771cac293b80200c6311c8a97822dd25b8af699af35042a2033d5ec54017fe4dc6c5e3
languageName: node
linkType: hard
@@ -7700,7 +9373,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.43.0
resolution: "core-js-compat@npm:3.43.0"
dependencies:
@@ -7849,6 +9522,13 @@ __metadata:
languageName: node
linkType: hard
+"data-uri-to-buffer@npm:^4.0.0":
+ version: 4.0.1
+ resolution: "data-uri-to-buffer@npm:4.0.1"
+ checksum: 0d0790b67ffec5302f204c2ccca4494f70b4e2d940fea3d36b09f0bb2b8539c2e86690429eb1f1dc4bcc9e4df0644193073e63d9ee48ac9fce79ec1506e4aa4c
+ languageName: node
+ linkType: hard
+
"data-uri-to-buffer@npm:^6.0.2":
version: 6.0.2
resolution: "data-uri-to-buffer@npm:6.0.2"
@@ -8114,6 +9794,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"
@@ -8173,6 +9860,23 @@ __metadata:
languageName: node
linkType: hard
+"default-browser-id@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "default-browser-id@npm:5.0.0"
+ checksum: 185bfaecec2c75fa423544af722a3469b20704c8d1942794a86e4364fe7d9e8e9f63241a5b769d61c8151993bc65833a5b959026fa1ccea343b3db0a33aa6deb
+ languageName: node
+ linkType: hard
+
+"default-browser@npm:^5.2.1":
+ version: 5.2.1
+ resolution: "default-browser@npm:5.2.1"
+ dependencies:
+ bundle-name: ^4.1.0
+ default-browser-id: ^5.0.0
+ checksum: afab7eff7b7f5f7a94d9114d1ec67273d3fbc539edf8c0f80019879d53aa71e867303c6f6d7cffeb10a6f3cfb59d4f963dba3f9c96830b4540cc7339a1bf9840
+ languageName: node
+ linkType: hard
+
"defaults@npm:^1.0.3":
version: 1.0.4
resolution: "defaults@npm:1.0.4"
@@ -8200,6 +9904,13 @@ __metadata:
languageName: node
linkType: hard
+"define-lazy-prop@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "define-lazy-prop@npm:3.0.0"
+ checksum: 54884f94caac0791bf6395a3ec530ce901cf71c47b0196b8754f3fd17edb6c0e80149c1214429d851873bb0d689dbe08dcedbb2306dc45c8534a5934723851b6
+ languageName: node
+ linkType: hard
+
"define-properties@npm:^1.1.3, define-properties@npm:^1.2.1":
version: 1.2.1
resolution: "define-properties@npm:1.2.1"
@@ -8412,7 +10123,7 @@ __metadata:
languageName: node
linkType: hard
-"duplexify@npm:^4.0.0, duplexify@npm:^4.1.1":
+"duplexify@npm:^4.0.0, duplexify@npm:^4.1.1, duplexify@npm:^4.1.3":
version: 4.1.3
resolution: "duplexify@npm:4.1.3"
dependencies:
@@ -8469,9 +10180,9 @@ __metadata:
linkType: hard
"electron-to-chromium@npm:^1.5.160":
- version: 1.5.169
- resolution: "electron-to-chromium@npm:1.5.169"
- checksum: 299a0dc36ce00460aafb5cbc4029b70c12c6842d3c81c5bf0ec070f8fda80bea54b545a8ddebfdead8969127aa04c93d440f8255db2a4723ef2e275d1cf89016
+ version: 1.5.171
+ resolution: "electron-to-chromium@npm:1.5.171"
+ checksum: 2fd04844c0a28295723246b915a41056c19fae53a779a8f138338e13bb42f24aeae55d724c38269ea5b4edc357ad7d043dee3a7897e52a9c75762b6bb679cc56
languageName: node
linkType: hard
@@ -8837,14 +10548,14 @@ __metadata:
linkType: hard
"eslint-module-utils@npm:^2.8.0":
- version: 2.12.0
- resolution: "eslint-module-utils@npm:2.12.0"
+ version: 2.12.1
+ resolution: "eslint-module-utils@npm:2.12.1"
dependencies:
debug: ^3.2.7
peerDependenciesMeta:
eslint:
optional: true
- checksum: be3ac52e0971c6f46daeb1a7e760e45c7c45f820c8cc211799f85f10f04ccbf7afc17039165d56cb2da7f7ca9cec2b3a777013cddf0b976784b37eb9efa24180
+ checksum: 2f074670d8c934687820a83140048776b28bbaf35fc37f35623f63cc9c438d496d11f0683b4feabb9a120435435d4a69604b1c6c567f118be2c9a0aba6760fc1
languageName: node
linkType: hard
@@ -9047,7 +10758,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:
@@ -9057,7 +10768,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
@@ -9071,6 +10793,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"
@@ -9119,7 +10886,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:
@@ -9140,7 +10907,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:
@@ -9387,6 +11154,17 @@ __metadata:
languageName: node
linkType: hard
+"fast-xml-parser@npm:5.2.5":
+ version: 5.2.5
+ resolution: "fast-xml-parser@npm:5.2.5"
+ dependencies:
+ strnum: ^2.1.0
+ bin:
+ fxparser: src/cli/cli.js
+ checksum: b12daa933bc226bd7df1e1ecbd305e561c83fd6e4a234b5e2728901deca25a9b9522b9d3ebafde41b1f4d87ab814e3efe18c636638580795fdbe4670a556be88
+ languageName: node
+ linkType: hard
+
"fast-xml-parser@npm:^4.4.1":
version: 4.5.3
resolution: "fast-xml-parser@npm:4.5.3"
@@ -9457,6 +11235,16 @@ __metadata:
languageName: node
linkType: hard
+"fetch-blob@npm:^3.1.2, fetch-blob@npm:^3.1.4":
+ version: 3.2.0
+ resolution: "fetch-blob@npm:3.2.0"
+ dependencies:
+ node-domexception: ^1.0.0
+ web-streams-polyfill: ^3.0.3
+ checksum: f19bc28a2a0b9626e69fd7cf3a05798706db7f6c7548da657cbf5026a570945f5eeaedff52007ea35c8bcd3d237c58a20bf1543bc568ab2422411d762dd3d5bf
+ languageName: node
+ linkType: hard
+
"figures@npm:3.2.0, figures@npm:^3.0.0":
version: 3.2.0
resolution: "figures@npm:3.2.0"
@@ -9500,6 +11288,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"
@@ -9686,7 +11481,7 @@ __metadata:
languageName: node
linkType: hard
-"form-data@npm:^4.0.0":
+"form-data@npm:^4.0.0, form-data@npm:^4.0.3":
version: 4.0.3
resolution: "form-data@npm:4.0.3"
dependencies:
@@ -9699,6 +11494,15 @@ __metadata:
languageName: node
linkType: hard
+"formdata-polyfill@npm:^4.0.10":
+ version: 4.0.10
+ resolution: "formdata-polyfill@npm:4.0.10"
+ dependencies:
+ fetch-blob: ^3.1.2
+ checksum: 82a34df292afadd82b43d4a740ce387bc08541e0a534358425193017bf9fb3567875dc5f69564984b1da979979b70703aa73dee715a17b6c229752ae736dd9db
+ languageName: node
+ linkType: hard
+
"formidable@npm:3.5.3":
version: 3.5.3
resolution: "formidable@npm:3.5.3"
@@ -9843,6 +11647,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"
@@ -9870,6 +11681,17 @@ __metadata:
languageName: node
linkType: hard
+"gaxios@npm:^7.0.0":
+ version: 7.1.1
+ resolution: "gaxios@npm:7.1.1"
+ dependencies:
+ extend: ^3.0.2
+ https-proxy-agent: ^7.0.1
+ node-fetch: ^3.3.2
+ checksum: 1dc0416deab839e3ce2dfe813fc6aae361c9ab51a1c05f810acbd4d7f87fa64e551e0faeba18c9d7da8cc94866a84c536e5695db2a6e77dc8a4550f264e385bb
+ languageName: node
+ linkType: hard
+
"gcp-metadata@npm:^6.0.0, gcp-metadata@npm:^6.1.0":
version: 6.1.1
resolution: "gcp-metadata@npm:6.1.1"
@@ -9881,6 +11703,17 @@ __metadata:
languageName: node
linkType: hard
+"gcp-metadata@npm:^7.0.0":
+ version: 7.0.1
+ resolution: "gcp-metadata@npm:7.0.1"
+ dependencies:
+ gaxios: ^7.0.0
+ google-logging-utils: ^1.0.0
+ json-bigint: ^1.0.0
+ checksum: 2f66aaad97198212cce06b22879769aac79f16edfdea46927d2eae37e40202d01286e1807f2e0b02727b992971f2add8bff1c3bc890bb1f01f8eaf034006877f
+ languageName: node
+ linkType: hard
+
"gensync@npm:^1.0.0-beta.2":
version: 1.0.0-beta.2
resolution: "gensync@npm:1.0.0-beta.2"
@@ -10015,6 +11848,13 @@ __metadata:
languageName: node
linkType: hard
+"get-value@npm:^4.0.1":
+ version: 4.0.1
+ resolution: "get-value@npm:4.0.1"
+ checksum: 5096ba4c5aaffa22651180040eaa1ad7ea285ff7663d7a1c95a734323f82613cb3735deeaad06ab132a6d62acef25d5914fe8547caa4d515bf0f4d38d79d61d2
+ languageName: node
+ linkType: hard
+
"getpass@npm:^0.1.1":
version: 0.1.7
resolution: "getpass@npm:0.1.7"
@@ -10087,7 +11927,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:
@@ -10105,7 +11945,7 @@ __metadata:
languageName: node
linkType: hard
-"glob@npm:^10.2.2, glob@npm:^10.3.10":
+"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.4.5":
version: 10.4.5
resolution: "glob@npm:10.4.5"
dependencies:
@@ -10181,7 +12021,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:
@@ -10214,6 +12054,21 @@ __metadata:
languageName: node
linkType: hard
+"google-auth-library@npm:^10.1.0":
+ version: 10.1.0
+ resolution: "google-auth-library@npm:10.1.0"
+ dependencies:
+ base64-js: ^1.3.0
+ ecdsa-sig-formatter: ^1.0.11
+ gaxios: ^7.0.0
+ gcp-metadata: ^7.0.0
+ google-logging-utils: ^1.0.0
+ gtoken: ^8.0.0
+ jws: ^4.0.0
+ checksum: b453dc5595b54aecd9ad92189a67dab9f5fd644637189577aeedbc50a750946f21e9b4999c2e0a30904b6606ca4dbca8e800bbcebb194a41b2704935968d4172
+ languageName: node
+ linkType: hard
+
"google-auth-library@npm:^9.0.0, google-auth-library@npm:^9.12.0, google-auth-library@npm:^9.3.0":
version: 9.15.1
resolution: "google-auth-library@npm:9.15.1"
@@ -10248,6 +12103,25 @@ __metadata:
languageName: node
linkType: hard
+"google-gax@npm:^5.0.0":
+ version: 5.0.1
+ resolution: "google-gax@npm:5.0.1"
+ dependencies:
+ "@grpc/grpc-js": ^1.12.6
+ "@grpc/proto-loader": ^0.7.13
+ abort-controller: ^3.0.0
+ duplexify: ^4.1.3
+ google-auth-library: ^10.1.0
+ google-logging-utils: ^1.1.1
+ node-fetch: ^3.3.2
+ object-hash: ^3.0.0
+ proto3-json-serializer: ^3.0.0
+ protobufjs: ^7.5.3
+ retry-request: ^8.0.0
+ checksum: 0e876061b67ef79c4e7a2dd4d9bddd36ce7dff2017801951a939cc5d0191d2f2f2ea31569df6af02ac84795e5a19b875c72b37c596178b6b629f546696ef357d
+ languageName: node
+ linkType: hard
+
"google-logging-utils@npm:^0.0.2":
version: 0.0.2
resolution: "google-logging-utils@npm:0.0.2"
@@ -10255,6 +12129,13 @@ __metadata:
languageName: node
linkType: hard
+"google-logging-utils@npm:^1.0.0, google-logging-utils@npm:^1.1.1":
+ version: 1.1.1
+ resolution: "google-logging-utils@npm:1.1.1"
+ checksum: a1739b445963e82f5894d98fe0b0c3ef393670c6ae8b47810dee69d1d10697cad61b05cd94faf4d963c8207edc0694dc2b3b168c9cca984764801ca47b68333f
+ languageName: node
+ linkType: hard
+
"gopd@npm:^1.0.1, gopd@npm:^1.2.0":
version: 1.2.0
resolution: "gopd@npm:1.2.0"
@@ -10304,6 +12185,16 @@ __metadata:
languageName: node
linkType: hard
+"gtoken@npm:^8.0.0":
+ version: 8.0.0
+ resolution: "gtoken@npm:8.0.0"
+ dependencies:
+ gaxios: ^7.0.0
+ jws: ^4.0.0
+ checksum: 6825476d404fc6d1577799e222f44824787da96865a5929ec44d18ef5fbe22f3053433c79dfef3c9d944c8a87e78b85b48c31cae7fe7e3cc02f1aed35d160b10
+ languageName: node
+ linkType: hard
+
"handlebars@npm:^4.7.7":
version: 4.7.8
resolution: "handlebars@npm:4.7.8"
@@ -10554,7 +12445,7 @@ __metadata:
languageName: node
linkType: hard
-"https-proxy-agent@npm:^7.0.1, https-proxy-agent@npm:^7.0.5, https-proxy-agent@npm:^7.0.6":
+"https-proxy-agent@npm:^7.0.0, https-proxy-agent@npm:^7.0.1, https-proxy-agent@npm:^7.0.5, https-proxy-agent@npm:^7.0.6":
version: 7.0.6
resolution: "https-proxy-agent@npm:7.0.6"
dependencies:
@@ -10647,7 +12538,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:
@@ -10948,7 +12839,16 @@ __metadata:
resolution: "is-docker@npm:2.2.1"
bin:
is-docker: cli.js
- checksum: 3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56
+ checksum: 3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56
+ languageName: node
+ linkType: hard
+
+"is-docker@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "is-docker@npm:3.0.0"
+ bin:
+ is-docker: cli.js
+ checksum: b698118f04feb7eaf3338922bd79cba064ea54a1c3db6ec8c0c8d8ee7613e7e5854d802d3ef646812a8a3ace81182a085dfa0a71cc68b06f3fa794b9783b3c90
languageName: node
linkType: hard
@@ -11030,6 +12930,17 @@ __metadata:
languageName: node
linkType: hard
+"is-inside-container@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "is-inside-container@npm:1.0.0"
+ dependencies:
+ is-docker: ^3.0.0
+ bin:
+ is-inside-container: cli.js
+ checksum: c50b75a2ab66ab3e8b92b3bc534e1ea72ca25766832c0623ac22d134116a98bcf012197d1caabe1d1c4bd5f84363d4aa5c36bb4b585fbcaf57be172cd10a1a03
+ languageName: node
+ linkType: hard
+
"is-interactive@npm:^1.0.0":
version: 1.0.0
resolution: "is-interactive@npm:1.0.0"
@@ -11126,6 +13037,13 @@ __metadata:
languageName: node
linkType: hard
+"is-primitive@npm:^3.0.1":
+ version: 3.0.1
+ resolution: "is-primitive@npm:3.0.1"
+ checksum: c4da6a6e6d487f31d85b9259b67695fffcc75dca6c9612b0a002e3050c734227b9911be09b877539ec6309710229c19f4edd0f9e26ed2a67924ee0916baf0bed
+ languageName: node
+ linkType: hard
+
"is-regex@npm:^1.2.1":
version: 1.2.1
resolution: "is-regex@npm:1.2.1"
@@ -11290,6 +13208,15 @@ __metadata:
languageName: node
linkType: hard
+"is-wsl@npm:^3.1.0":
+ version: 3.1.0
+ resolution: "is-wsl@npm:3.1.0"
+ dependencies:
+ is-inside-container: ^1.0.0
+ checksum: f9734c81f2f9cf9877c5db8356bfe1ff61680f1f4c1011e91278a9c0564b395ae796addb4bf33956871041476ec82c3e5260ed57b22ac91794d4ae70a1d2f0a9
+ languageName: node
+ linkType: hard
+
"isarray@npm:^2.0.5":
version: 2.0.5
resolution: "isarray@npm:2.0.5"
@@ -11470,7 +13397,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:
@@ -11851,6 +13778,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"
@@ -11984,6 +13930,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"
@@ -12153,6 +14132,24 @@ __metadata:
languageName: node
linkType: hard
+"jsonwebtoken@npm:^9.0.0":
+ version: 9.0.2
+ resolution: "jsonwebtoken@npm:9.0.2"
+ dependencies:
+ jws: ^3.2.2
+ lodash.includes: ^4.3.0
+ lodash.isboolean: ^3.0.3
+ lodash.isinteger: ^4.0.4
+ lodash.isnumber: ^3.0.3
+ lodash.isplainobject: ^4.0.6
+ lodash.isstring: ^4.0.1
+ lodash.once: ^4.0.0
+ ms: ^2.1.1
+ semver: ^7.5.4
+ checksum: fc739a6a8b33f1974f9772dca7f8493ca8df4cc31c5a09dcfdb7cff77447dcf22f4236fb2774ef3fe50df0abeb8e1c6f4c41eba82f500a804ab101e2fbc9d61a
+ languageName: node
+ linkType: hard
+
"jsx-ast-utils@npm:^2.4.1 || ^3.0.0":
version: 3.3.5
resolution: "jsx-ast-utils@npm:3.3.5"
@@ -12191,6 +14188,17 @@ __metadata:
languageName: node
linkType: hard
+"jwa@npm:^1.4.1":
+ version: 1.4.2
+ resolution: "jwa@npm:1.4.2"
+ dependencies:
+ buffer-equal-constant-time: ^1.0.1
+ ecdsa-sig-formatter: 1.0.11
+ safe-buffer: ^5.0.1
+ checksum: fd1a6de6c649a4b16f0775439ac9173e4bc9aa0162c7f3836699af47736ae000fafe89f232a2345170de6c14021029cb94b488f7882c6caf61e6afef5fce6494
+ languageName: node
+ linkType: hard
+
"jwa@npm:^2.0.0":
version: 2.0.1
resolution: "jwa@npm:2.0.1"
@@ -12202,6 +14210,16 @@ __metadata:
languageName: node
linkType: hard
+"jws@npm:^3.2.2":
+ version: 3.2.2
+ resolution: "jws@npm:3.2.2"
+ dependencies:
+ jwa: ^1.4.1
+ safe-buffer: ^5.0.1
+ checksum: f0213fe5b79344c56cd443428d8f65c16bf842dc8cb8f5aed693e1e91d79c20741663ad6eff07a6d2c433d1831acc9814e8d7bada6a0471fbb91d09ceb2bf5c2
+ languageName: node
+ linkType: hard
+
"jws@npm:^4.0.0":
version: 4.0.0
resolution: "jws@npm:4.0.0"
@@ -12525,6 +14543,20 @@ __metadata:
languageName: node
linkType: hard
+"lodash.includes@npm:^4.3.0":
+ version: 4.3.0
+ resolution: "lodash.includes@npm:4.3.0"
+ checksum: 71092c130515a67ab3bd928f57f6018434797c94def7f46aafa417771e455ce3a4834889f4267b17887d7f75297dfabd96231bf704fd2b8c5096dc4a913568b6
+ languageName: node
+ linkType: hard
+
+"lodash.isboolean@npm:^3.0.3":
+ version: 3.0.3
+ resolution: "lodash.isboolean@npm:3.0.3"
+ checksum: b70068b4a8b8837912b54052557b21fc4774174e3512ed3c5b94621e5aff5eb6c68089d0a386b7e801d679cd105d2e35417978a5e99071750aa2ed90bffd0250
+ languageName: node
+ linkType: hard
+
"lodash.isequal@npm:^4.5.0":
version: 4.5.0
resolution: "lodash.isequal@npm:4.5.0"
@@ -12539,6 +14571,13 @@ __metadata:
languageName: node
linkType: hard
+"lodash.isinteger@npm:^4.0.4":
+ version: 4.0.4
+ resolution: "lodash.isinteger@npm:4.0.4"
+ checksum: 6034821b3fc61a2ffc34e7d5644bb50c5fd8f1c0121c554c21ac271911ee0c0502274852845005f8651d51e199ee2e0cfebfe40aaa49c7fe617f603a8a0b1691
+ languageName: node
+ linkType: hard
+
"lodash.ismatch@npm:^4.4.0":
version: 4.4.0
resolution: "lodash.ismatch@npm:4.4.0"
@@ -12546,6 +14585,13 @@ __metadata:
languageName: node
linkType: hard
+"lodash.isnumber@npm:^3.0.3":
+ version: 3.0.3
+ resolution: "lodash.isnumber@npm:3.0.3"
+ checksum: 913784275b565346255e6ae6a6e30b760a0da70abc29f3e1f409081585875105138cda4a429ff02577e1bc0a7ae2a90e0a3079a37f3a04c3d6c5aaa532f4cab2
+ languageName: node
+ linkType: hard
+
"lodash.isobjectlike@npm:^4.0.0":
version: 4.0.0
resolution: "lodash.isobjectlike@npm:4.0.0"
@@ -12553,6 +14599,20 @@ __metadata:
languageName: node
linkType: hard
+"lodash.isplainobject@npm:^4.0.6":
+ version: 4.0.6
+ resolution: "lodash.isplainobject@npm:4.0.6"
+ checksum: 29c6351f281e0d9a1d58f1a4c8f4400924b4c79f18dfc4613624d7d54784df07efaff97c1ff2659f3e085ecf4fff493300adc4837553104cef2634110b0d5337
+ languageName: node
+ linkType: hard
+
+"lodash.isstring@npm:^4.0.1":
+ version: 4.0.1
+ resolution: "lodash.isstring@npm:4.0.1"
+ checksum: eaac87ae9636848af08021083d796e2eea3d02e80082ab8a9955309569cb3a463ce97fd281d7dc119e402b2e7d8c54a23914b15d2fc7fff56461511dc8937ba0
+ languageName: node
+ linkType: hard
+
"lodash.merge@npm:^4.6.2":
version: 4.6.2
resolution: "lodash.merge@npm:4.6.2"
@@ -12560,6 +14620,13 @@ __metadata:
languageName: node
linkType: hard
+"lodash.once@npm:^4.0.0":
+ version: 4.1.1
+ resolution: "lodash.once@npm:4.1.1"
+ checksum: d768fa9f9b4e1dc6453be99b753906f58990e0c45e7b2ca5a3b40a33111e5d17f6edf2f768786e2716af90a8e78f8f91431ab8435f761fef00f9b0c256f6d245
+ languageName: node
+ linkType: hard
+
"lodash.sortby@npm:^4.7.0":
version: 4.7.0
resolution: "lodash.sortby@npm:4.7.0"
@@ -12879,7 +14946,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:
@@ -12911,7 +14978,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:
@@ -13005,7 +15072,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:
@@ -13025,7 +15092,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:
@@ -13163,7 +15230,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:
@@ -13263,7 +15330,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:
@@ -13720,6 +15787,13 @@ __metadata:
languageName: node
linkType: hard
+"node-domexception@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "node-domexception@npm:1.0.0"
+ checksum: ee1d37dd2a4eb26a8a92cd6b64dfc29caec72bff5e1ed9aba80c294f57a31ba4895a60fd48347cf17dd6e766da0ae87d75657dfd1f384ebfa60462c2283f5c7f
+ languageName: node
+ linkType: hard
+
"node-fetch@npm:2.6.7":
version: 2.6.7
resolution: "node-fetch@npm:2.6.7"
@@ -13748,6 +15822,17 @@ __metadata:
languageName: node
linkType: hard
+"node-fetch@npm:^3.3.2":
+ version: 3.3.2
+ resolution: "node-fetch@npm:3.3.2"
+ dependencies:
+ data-uri-to-buffer: ^4.0.0
+ fetch-blob: ^3.1.4
+ formdata-polyfill: ^4.0.10
+ checksum: 06a04095a2ddf05b0830a0d5302699704d59bda3102894ea64c7b9d4c865ecdff2d90fd042df7f5bc40337266961cb6183dcc808ea4f3000d024f422b462da92
+ languageName: node
+ linkType: hard
+
"node-forge@npm:^1":
version: 1.3.1
resolution: "node-forge@npm:1.3.1"
@@ -14245,6 +16330,18 @@ __metadata:
languageName: node
linkType: hard
+"open@npm:^10.1.0":
+ version: 10.1.2
+ resolution: "open@npm:10.1.2"
+ dependencies:
+ default-browser: ^5.2.1
+ define-lazy-prop: ^3.0.0
+ is-inside-container: ^1.0.0
+ is-wsl: ^3.1.0
+ checksum: cb40d9786e8c679a1c647c62ad3642bbf1a8cc986c3ec970e99ed13d279c93328ea46bf756db64ea465d2d707815d4e792e7ba906830c3439cc8577cdefb8610
+ languageName: node
+ linkType: hard
+
"open@npm:^6.2.0":
version: 6.4.0
resolution: "open@npm:6.4.0"
@@ -14294,7 +16391,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:
@@ -14758,7 +16855,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
@@ -14917,7 +17014,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:
@@ -15065,7 +17162,16 @@ __metadata:
languageName: node
linkType: hard
-"protobufjs@npm:^7.2.5, protobufjs@npm:^7.3.2, protobufjs@npm:^7.5.3":
+"proto3-json-serializer@npm:^3.0.0":
+ version: 3.0.1
+ resolution: "proto3-json-serializer@npm:3.0.1"
+ dependencies:
+ protobufjs: ^7.4.0
+ checksum: fa91b1a65ce58bb688ed26b2f881a3d0a46e0da09cdb377e4a69934ff2b769827944ee8beb332ea3086537b1bfe5be13c24eb00e65750ecb649083731a7acce1
+ languageName: node
+ linkType: hard
+
+"protobufjs@npm:^7.2.5, protobufjs@npm:^7.3.2, protobufjs@npm:^7.4.0, protobufjs@npm:^7.5.3":
version: 7.5.3
resolution: "protobufjs@npm:7.5.3"
dependencies:
@@ -15159,6 +17265,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"
@@ -15251,6 +17368,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"
@@ -15281,6 +17408,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"
@@ -15339,6 +17473,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"
@@ -15456,6 +17602,29 @@ __metadata:
languageName: node
linkType: hard
+"react-native-safe-area-context@npm:5.4.0":
+ version: 5.4.0
+ resolution: "react-native-safe-area-context@npm:5.4.0"
+ peerDependencies:
+ react: "*"
+ react-native: "*"
+ checksum: 7d7f9a8278048650fd207d436798bd062d6f78d771cb0665b92aef69dba870251339e6812e1d669fd1958345288bd0f9ac98fbfe353c13958d18b58dc946c341
+ languageName: node
+ linkType: hard
+
+"react-native-screens@npm:4.10.0":
+ version: 4.10.0
+ resolution: "react-native-screens@npm:4.10.0"
+ dependencies:
+ react-freeze: ^1.0.0
+ warn-once: ^0.1.0
+ peerDependencies:
+ react: "*"
+ react-native: "*"
+ checksum: 291f3024eabbb02b3299d4afafba6812f7a1dcd95f762b9be80fa9a69b20650d66a72e64f339776eb4b72e759a1b2201bb80a8501d90f9b4f4d42f19d6c09d5a
+ languageName: node
+ linkType: hard
+
"react-native-screens@npm:4.5.0":
version: 4.5.0
resolution: "react-native-screens@npm:4.5.0"
@@ -15495,7 +17664,7 @@ __metadata:
languageName: node
linkType: hard
-"react-native-webview@npm:^13.12.2":
+"react-native-webview@npm:13.15.0, react-native-webview@npm:^13.12.2":
version: 13.15.0
resolution: "react-native-webview@npm:13.15.0"
dependencies:
@@ -15562,6 +17731,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"
@@ -15594,6 +17815,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"
@@ -15603,6 +17836,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"
@@ -15718,6 +17958,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"
@@ -15777,6 +18030,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"
@@ -15791,6 +18051,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"
@@ -15999,6 +18266,17 @@ __metadata:
languageName: node
linkType: hard
+"retry-request@npm:^8.0.0":
+ version: 8.0.0
+ resolution: "retry-request@npm:8.0.0"
+ dependencies:
+ "@types/request": ^2.48.12
+ extend: ^3.0.2
+ teeny-request: ^10.0.0
+ checksum: 29cf787917802a80d1f8ce802520927106e084413c63f6bc133620c9380fda17ac4bd3c4365d119f176ca9d1defe373f3353c2e3dd8aab6056b9c05b4ba78bdf
+ languageName: node
+ linkType: hard
+
"retry@npm:0.12.0, retry@npm:^0.12.0":
version: 0.12.0
resolution: "retry@npm:0.12.0"
@@ -16087,8 +18365,15 @@ __metadata:
"rum-events-format@DataDog/rum-events-format#workspace=rum-events-format":
version: 1.0.0
- resolution: "rum-events-format@https://github.com/DataDog/rum-events-format.git#workspace=rum-events-format&commit=ee481e7c74290762219cbf507d61c75785349d88"
- checksum: 43c9d903164179ae6ed7a869af7834a18bb1e4b0f30c48f5be146f6f80c2d8a4bb306ee7b8e3147a51c188c810db963f9b49beb7b437d503e7abd6419e35858d
+ resolution: "rum-events-format@https://github.com/DataDog/rum-events-format.git#workspace=rum-events-format&commit=fc1a8bd02785f5a108f5afa64c0e7a61aa89c203"
+ checksum: ac9b7c21b78a534b11e4c9741d635ff1cffe2354801cfe12483035534fc7139abd0b59c95b9be5bf4fe43a9e19508e31c61ab2cf24f528f4fb34dbd2c62c98c7
+ languageName: node
+ linkType: hard
+
+"run-applescript@npm:^7.0.0":
+ version: 7.0.0
+ resolution: "run-applescript@npm:7.0.0"
+ checksum: b02462454d8b182ad4117e5d4626e9e6782eb2072925c9fac582170b0627ae3c1ea92ee9b2df7daf84b5e9ffe14eb1cf5fb70bc44b15c8a0bfcdb47987e2410c
languageName: node
linkType: hard
@@ -16197,6 +18482,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"
@@ -16350,6 +18642,16 @@ __metadata:
languageName: node
linkType: hard
+"set-value@npm:^4.1.0":
+ version: 4.1.0
+ resolution: "set-value@npm:4.1.0"
+ dependencies:
+ is-plain-object: ^2.0.4
+ is-primitive: ^3.0.1
+ checksum: 2b4f0f222538ae4c1f4171a5014c113649631c86ed81d1ac0c2df406d0a974d8006412ce1d7844c531268f1c66eb912f7eae7245ab3114e34357f1ff9d6dc697
+ languageName: node
+ linkType: hard
+
"setimmediate@npm:^1.0.5":
version: 1.0.5
resolution: "setimmediate@npm:1.0.5"
@@ -16666,6 +18968,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"
@@ -17034,7 +19343,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
@@ -17055,6 +19364,13 @@ __metadata:
languageName: node
linkType: hard
+"strnum@npm:^2.1.0":
+ version: 2.1.1
+ resolution: "strnum@npm:2.1.1"
+ checksum: 566139b218ef13bdde2a69c744852ac41ea167588f624d46c3b3bebb5d1d1775c55bca4702a0ad2a6a66eb4b3b7de4cbbc83e8d40c5835feabebf6f9cc468993
+ languageName: node
+ linkType: hard
+
"strong-log-transformer@npm:2.1.0, strong-log-transformer@npm:^2.1.0":
version: 2.1.0
resolution: "strong-log-transformer@npm:2.1.0"
@@ -17209,6 +19525,18 @@ __metadata:
languageName: node
linkType: hard
+"teeny-request@npm:^10.0.0":
+ version: 10.1.0
+ resolution: "teeny-request@npm:10.1.0"
+ dependencies:
+ http-proxy-agent: ^5.0.0
+ https-proxy-agent: ^5.0.0
+ node-fetch: ^3.3.2
+ stream-events: ^1.0.5
+ checksum: d966f1bd8b3a348d391d981533cf3aa54ac733b02905103a570f66108b86b99fed4d1bb8d4ec6ac20fc13335ea750611826ff4da61d53e676d1d4d35d2c5266a
+ languageName: node
+ linkType: hard
+
"teeny-request@npm:^9.0.0":
version: 9.0.0
resolution: "teeny-request@npm:9.0.0"
@@ -17249,8 +19577,8 @@ __metadata:
linkType: hard
"terser@npm:^5.15.0":
- version: 5.42.0
- resolution: "terser@npm:5.42.0"
+ version: 5.43.1
+ resolution: "terser@npm:5.43.1"
dependencies:
"@jridgewell/source-map": ^0.3.3
acorn: ^8.14.0
@@ -17258,7 +19586,7 @@ __metadata:
source-map-support: ~0.5.20
bin:
terser: bin/terser
- checksum: 1fde6c60d490a58ba92551f524b81a541fd75c41f97aef3e6a12262447b3da66c7d71cf475e0990f82b4decc1a30c3ba3663dc5e940bcbd0db1d263932d2cace
+ checksum: 1d51747f4540a0842139c2f2617e88d68a26da42d7571cda8955e1bd8febac6e60bc514c258781334e1724aeeccfbd511473eb9d8d831435e4e5fad1ce7f6e8b
languageName: node
linkType: hard
@@ -17318,6 +19646,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"
@@ -17344,7 +19679,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
@@ -17450,7 +19785,7 @@ __metadata:
languageName: node
linkType: hard
-"tslib@npm:^2.0.1, tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.4.0, tslib@npm:^2.6.2":
+"tslib@npm:^2.0.1, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.0, tslib@npm:^2.4.0, tslib@npm:^2.6.2, tslib@npm:^2.8.1":
version: 2.8.1
resolution: "tslib@npm:2.8.1"
checksum: e4aba30e632b8c8902b47587fd13345e2827fa639e7c3121074d5ee0880723282411a8838f830b55100cbe4517672f84a2472667d355b81e8af165a55dc6203a
@@ -17813,7 +20148,7 @@ __metadata:
languageName: node
linkType: hard
-"upath@npm:2.0.1":
+"upath@npm:2.0.1, upath@npm:^2.0.1":
version: 2.0.1
resolution: "upath@npm:2.0.1"
checksum: 2db04f24a03ef72204c7b969d6991abec9e2cb06fb4c13a1fd1c59bc33b46526b16c3325e55930a11ff86a77a8cbbcda8f6399bf914087028c5beae21ecdb33c
@@ -17853,7 +20188,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, use-latest-callback@npm:^0.2.4":
version: 0.2.4
resolution: "use-latest-callback@npm:0.2.4"
peerDependencies:
@@ -17862,6 +20197,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"
@@ -17894,7 +20238,7 @@ __metadata:
languageName: node
linkType: hard
-"uuid@npm:^8.0.0":
+"uuid@npm:^8.0.0, uuid@npm:^8.3.0":
version: 8.3.2
resolution: "uuid@npm:8.3.2"
bin:
@@ -17912,6 +20256,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"
@@ -17970,7 +20321,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
@@ -17986,6 +20337,13 @@ __metadata:
languageName: node
linkType: hard
+"web-streams-polyfill@npm:^3.0.3":
+ version: 3.3.3
+ resolution: "web-streams-polyfill@npm:3.3.3"
+ checksum: 21ab5ea08a730a2ef8023736afe16713b4f2023ec1c7085c16c8e293ee17ed085dff63a0ad8722da30c99c4ccbd4ccd1b2e79c861829f7ef2963d7de7004c2cb
+ languageName: node
+ linkType: hard
+
"webidl-conversions@npm:^3.0.0":
version: 3.0.1
resolution: "webidl-conversions@npm:3.0.1"
@@ -18174,7 +20532,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: