diff --git a/.github/workflows/build_harnesses.yml b/.github/workflows/build_harnesses.yml new file mode 100644 index 0000000000..13c07e5758 --- /dev/null +++ b/.github/workflows/build_harnesses.yml @@ -0,0 +1,213 @@ +name: 'Build Harnesses' + +on: + workflow_dispatch: + pull_request: + branches: + - '**' + paths-ignore: + - 'docs/**' + - 'website/**' + - '.spellcheck.dict.txt' + - '**/*.md' + push: + branches: + - main + paths-ignore: + - 'docs/**' + - 'website/**' + - '.spellcheck.dict.txt' + - '**/*.md' + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + ios: + name: iOS (${{ matrix.harness }}) + runs-on: macos-15 + timeout-minutes: 80 + strategy: + fail-fast: false + matrix: + harness: + - bare + - expo + env: + # Keep in sync with the existing iOS E2E workflow, which tracks latest-stable + # because Firebase iOS SDK updates can require newer Xcode versions. + XCODE_VERSION: latest-stable + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 50 + + # `runner` is not valid in job-level `env`; set paths in a step so + # `${{ runner.temp }}` is evaluated in a context that supports it. + - name: Set CI Firebase config paths + run: | + echo "IOS_GOOGLE_SERVICES_PATH=${{ runner.temp }}/GoogleService-Info.plist" >> "$GITHUB_ENV" + echo "ANDROID_GOOGLE_SERVICES_PATH=${{ runner.temp }}/google-services.json" >> "$GITHUB_ENV" + + - uses: actions/setup-node@v4 + with: + node-version: 22 + + - uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: ${{ env.XCODE_VERSION }} + + - name: Setup Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: 3 + + - name: Create CI Firebase config files + run: bash ./scripts/write-ci-firebase-configs.sh "${IOS_GOOGLE_SERVICES_PATH}" "${ANDROID_GOOGLE_SERVICES_PATH}" + + - name: Cache CocoaPods and specs + uses: actions/cache@v4 + with: + path: | + ~/Library/Caches/CocoaPods + ~/.cocoapods/repos + apps/build-harness/ios/Pods + key: ${{ runner.os }}-harness-pods-v1-${{ hashFiles('yarn.lock', 'apps/build-harness/ios/Podfile.lock', 'apps/build-harness-expo/package.json', 'apps/build-harness-expo/app.config.js') }} + restore-keys: | + ${{ runner.os }}-harness-pods-v1- + + - name: Yarn install + run: yarn + + - name: Sync bare harness + if: matrix.harness == 'bare' + run: | + bash ./scripts/sync-build-harness.sh sync \ + --ios-google-services "${IOS_GOOGLE_SERVICES_PATH}" \ + --android-google-services "${ANDROID_GOOGLE_SERVICES_PATH}" \ + --no-yarn-install \ + --pod-install + + - name: Build bare iOS harness + if: matrix.harness == 'bare' + working-directory: apps/build-harness/ios + run: | + xcodebuild \ + -workspace BuildHarness.xcworkspace \ + -scheme BuildHarness \ + -configuration Debug \ + -sdk iphonesimulator \ + -destination 'generic/platform=iOS Simulator' \ + CODE_SIGNING_ALLOWED=NO \ + build + + - name: Sync Expo harness + if: matrix.harness == 'expo' + run: | + bash ./scripts/sync-build-harness-expo.sh sync \ + --ios-google-services "${IOS_GOOGLE_SERVICES_PATH}" \ + --android-google-services "${ANDROID_GOOGLE_SERVICES_PATH}" \ + --no-yarn-install + + - name: Prebuild Expo iOS harness + if: matrix.harness == 'expo' + working-directory: apps/build-harness-expo + run: | + export NODE_PATH="$PWD/node_modules" + CI=1 yarn expo prebuild --clean --platform ios + + - name: Build Expo iOS harness + if: matrix.harness == 'expo' + working-directory: apps/build-harness-expo/ios + run: | + WORKSPACE="RNFBExpoHarness.xcworkspace" + SCHEME="RNFBExpoHarness" + xcodebuild \ + -workspace "${WORKSPACE}" \ + -scheme "${SCHEME}" \ + -configuration Debug \ + -sdk iphonesimulator \ + -destination 'generic/platform=iOS Simulator' \ + CODE_SIGNING_ALLOWED=NO \ + build + + android: + name: Android (${{ matrix.harness }}) + runs-on: ubuntu-latest + timeout-minutes: 60 + strategy: + fail-fast: false + matrix: + harness: + - bare + - expo + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 50 + + - name: Set CI Firebase config paths + run: | + echo "IOS_GOOGLE_SERVICES_PATH=${{ runner.temp }}/GoogleService-Info.plist" >> "$GITHUB_ENV" + echo "ANDROID_GOOGLE_SERVICES_PATH=${{ runner.temp }}/google-services.json" >> "$GITHUB_ENV" + + - uses: actions/setup-node@v4 + with: + node-version: 22 + + - name: Configure JDK + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '21' + + - name: Create CI Firebase config files + run: bash ./scripts/write-ci-firebase-configs.sh "${IOS_GOOGLE_SERVICES_PATH}" "${ANDROID_GOOGLE_SERVICES_PATH}" + + - name: Cache Gradle + uses: actions/cache@v4 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-harness-gradle-v1-${{ hashFiles('yarn.lock', 'apps/build-harness/android/**/*.gradle', 'apps/build-harness/android/gradle.properties', 'apps/build-harness-expo/package.json', 'apps/build-harness-expo/app.config.js') }} + restore-keys: | + ${{ runner.os }}-harness-gradle-v1- + + - name: Yarn install + run: yarn + + - name: Sync bare harness + if: matrix.harness == 'bare' + run: | + bash ./scripts/sync-build-harness.sh sync \ + --ios-google-services "${IOS_GOOGLE_SERVICES_PATH}" \ + --android-google-services "${ANDROID_GOOGLE_SERVICES_PATH}" \ + --no-yarn-install \ + --no-pod-install + + - name: Build bare Android harness + if: matrix.harness == 'bare' + working-directory: apps/build-harness/android + run: ./gradlew :app:assembleDebug + + - name: Sync Expo harness + if: matrix.harness == 'expo' + run: | + bash ./scripts/sync-build-harness-expo.sh sync \ + --ios-google-services "${IOS_GOOGLE_SERVICES_PATH}" \ + --android-google-services "${ANDROID_GOOGLE_SERVICES_PATH}" \ + --no-yarn-install + + - name: Prebuild Expo Android harness + if: matrix.harness == 'expo' + working-directory: apps/build-harness-expo + run: | + export NODE_PATH="$PWD/node_modules" + CI=1 yarn expo prebuild --clean --platform android + + - name: Build Expo Android harness + if: matrix.harness == 'expo' + working-directory: apps/build-harness-expo/android + run: ./gradlew :app:assembleDebug diff --git a/.gitignore b/.gitignore index 802ffc379e..602ac5a236 100644 --- a/.gitignore +++ b/.gitignore @@ -546,6 +546,10 @@ tests/ios/resetXcode.sh google-services.json GoogleService-Info.plist +apps/build-harness/android/app/google-services.json +apps/build-harness/ios/BuildHarness/GoogleService-Info.plist +apps/build-harness/.build-harness.local.json +apps/build-harness/.bundle/ # generated files RNFBVersion.m diff --git a/apps/README.md b/apps/README.md new file mode 100644 index 0000000000..d737e9f922 --- /dev/null +++ b/apps/README.md @@ -0,0 +1,394 @@ +# RNFB Build Harnesses + +This directory is the main setup guide for the local RNFB harness apps: + +- `apps/build-harness/` for bare React Native CLI validation +- `apps/build-harness-expo/` for Expo development-build validation + +Use the bare harness when you need to validate checked-in native projects, Podfile changes, Gradle changes, or direct `react-native run-*` behavior. + +Use the Expo harness when you need to validate RNFB Expo config plugins, `expo prebuild`, and `expo run:*` behavior. + +## What these harnesses are for + +- validating local workspace `@react-native-firebase/*` packages without touching `tests/` +- comparing workspace packages with published RNFB packages +- swapping Firebase iOS and Android native SDK versions through supported override hooks +- reusing local `GoogleService-Info.plist` and `google-services.json` files without committing them +- smoke-testing that the JavaScript layer loads before doing deeper native validation + +## Environment setup + +Set up these local prerequisites before running either harness: + +- `node` and `yarn` +- `ruby` via a user-managed install such as `rbenv`, `asdf`, or Homebrew Ruby +- `pod` on macOS for iOS builds and Expo iOS prebuilds +- Xcode and iOS simulator support for iOS +- Android SDK, platform tools, emulator/device access, and a valid `ANDROID_HOME` or `ANDROID_SDK_ROOT` for Android + +Avoid using the macOS system Ruby for the harnesses. The bare harness uses Bundler for CocoaPods and Ruby helpers, and `apps/build-harness/Gemfile.lock` pins the Bundler version that must be available in your active Ruby environment. + +For example with `rbenv`: + +```bash +rbenv install 3.3.3 +rbenv global 3.3.3 +``` + +Then reload your shell and run `yarn app:doctor`. The doctor command reports the active Ruby path plus any Bundler mismatch against `apps/build-harness/Gemfile.lock`. + +Only install Bundler manually if `yarn app:doctor` reports that Bundler is missing or mismatched: + +```bash +gem install bundler -v "$(awk '/^BUNDLED WITH$/{getline; gsub(/^[[:space:]]+/, "", $0); print $0}' apps/build-harness/Gemfile.lock)" +``` + +Place your local Firebase config files at the default locations: + +- `~/Downloads/GoogleService-Info.plist` +- `~/Downloads/google-services.json` + +Or pass explicit paths with script flags. + +The sync scripts persist your last local choices in ignored files: + +- `apps/build-harness/.build-harness.local.json` +- `apps/build-harness-expo/.build-harness.local.json` + +Those files store local overrides such as: + +- Firebase config file source paths +- `workspace` vs published RNFB source selection +- published RNFB version override +- React / React Native overrides +- bundle identifier and Android application ID overrides +- Firebase native SDK and Gradle plugin version overrides + +### Script-managed environment variables + +If you use the root commands or sync scripts, you do not need to export these manually. The scripts set them for the native toolchain as needed: + +- `RNFB_FIREBASE_IOS_SDK` +- `FIREBASE_SDK_VERSION` +- `RNFB_FIREBASE_ANDROID_BOM` +- `RNFB_GOOGLE_SERVICES_GRADLE` +- `RNFB_CRASHLYTICS_GRADLE` +- `RNFB_PERF_GRADLE` +- `RNFB_APP_DISTRIBUTION_GRADLE` +- `RNFB_BUILD_HARNESS_ANDROID_APPLICATION_ID` +- `RNFB_BUILD_HARNESS_IOS_BUNDLE_ID` +- `NODE_PATH` for the Expo harness CLI so RNFB workspace config plugins resolve correctly + +## Repo root commands + +### Bare harness commands + +- `yarn app:doctor` + Prints the effective bare harness config, detected defaults, and prerequisite status. +- `yarn app:sync` + Rewrites the bare harness dependencies, copies Firebase config files, patches iOS metadata, and installs dependencies. +- `yarn app:clean` + Removes bare harness build products, Pods, and derived data. +- `yarn app:pod:install` + Re-runs the bare harness iOS pod install using the current effective config. +- `yarn app:start` + Starts Metro for the bare harness with `--reset-cache`. +- `yarn app:ios` + Syncs and runs the bare harness on iOS. +- `yarn app:android` + Syncs and runs the bare harness on Android. + +Examples: + +```bash +yarn app:doctor +yarn app:sync +yarn app:start +yarn app:ios +yarn app:android +yarn app:clean +yarn app:pod:install +``` + +### Expo harness commands + +- `yarn app:expo:doctor` + Prints the effective Expo harness config and prerequisite status. +- `yarn app:expo:sync` + Rewrites the Expo harness dependencies, copies Firebase config files, and validates Expo config. +- `yarn app:expo:clean` + Removes generated Expo native folders and local build artifacts. +- `yarn app:expo:start` + Starts the Expo bundler with the required workspace plugin resolution environment. +- `yarn app:ios:expo` + Syncs the Expo harness, runs `expo prebuild --clean --platform ios`, then runs `expo run:ios`. +- `yarn app:android:expo` + Syncs the Expo harness, runs `expo prebuild --clean --platform android`, then runs `expo run:android`. + +Examples: + +```bash +yarn app:expo:doctor +yarn app:expo:sync +yarn app:expo:start +yarn app:ios:expo +yarn app:android:expo +yarn app:expo:clean +``` + +## Direct script usage + +Use the scripts directly when you need overrides or extra platform-specific arguments. + +### Bare harness script + +```bash +bash ./scripts/sync-build-harness.sh [options] [-- extra react-native args] +``` + +Commands: + +- `doctor` +- `clean` +- `sync` +- `pod-install` +- `build-ios` +- `build-android` + +Examples: + +```bash +bash ./scripts/sync-build-harness.sh doctor +bash ./scripts/sync-build-harness.sh sync +bash ./scripts/sync-build-harness.sh pod-install +bash ./scripts/sync-build-harness.sh build-ios -- --simulator "iPhone 16" +bash ./scripts/sync-build-harness.sh build-android -- --deviceId emulator-5554 +``` + +### Expo harness script + +```bash +bash ./scripts/sync-build-harness-expo.sh [options] [-- extra expo args] +``` + +Commands: + +- `doctor` +- `clean` +- `sync` +- `start` +- `build-ios` +- `build-android` + +Examples: + +```bash +bash ./scripts/sync-build-harness-expo.sh doctor +bash ./scripts/sync-build-harness-expo.sh sync +bash ./scripts/sync-build-harness-expo.sh start -- --tunnel +bash ./scripts/sync-build-harness-expo.sh build-ios -- --device "iPhone 16" +bash ./scripts/sync-build-harness-expo.sh build-android -- --variant debug +``` + +## Flags and examples + +The two sync scripts share the same versioning and Firebase-config override flags except for bare-only `--pod-install` controls. + +### RNFB source selection + +- `--rnfb-source ` + Choose local workspace packages or published RNFB packages. + +```bash +bash ./scripts/sync-build-harness.sh sync --rnfb-source workspace +bash ./scripts/sync-build-harness-expo.sh sync --rnfb-source published --rnfb-version 24.0.0 +``` + +- `--rnfb-version ` + Required when `--rnfb-source published` is used. + +```bash +bash ./scripts/sync-build-harness.sh sync \ + --rnfb-source published \ + --rnfb-version 24.0.0 +``` + +### React and Firebase dependency overrides + +- `--react-native ` +- `--react ` +- `--firebase-js ` + +```bash +bash ./scripts/sync-build-harness.sh sync \ + --react-native 0.78.3 \ + --react 19.0.0 \ + --firebase-js 12.12.0 +``` + +### Native Firebase SDK overrides + +- `--firebase-ios ` +- `--firebase-android-bom ` +- `--google-services-gradle ` +- `--crashlytics-gradle ` +- `--perf-gradle ` +- `--app-distribution-gradle ` + +```bash +bash ./scripts/sync-build-harness.sh sync \ + --firebase-ios 12.13.0 \ + --firebase-android-bom 34.13.0 \ + --google-services-gradle 4.4.4 \ + --crashlytics-gradle 3.0.7 \ + --perf-gradle 2.0.2 \ + --app-distribution-gradle 5.2.1 +``` + +### Firebase config file path overrides + +- `--ios-google-services ` +- `--android-google-services ` + +```bash +bash ./scripts/sync-build-harness.sh sync \ + --ios-google-services "$HOME/Downloads/GoogleService-Info.plist" \ + --android-google-services "$HOME/Downloads/google-services.json" + +bash ./scripts/sync-build-harness-expo.sh sync \ + --ios-google-services "$HOME/Downloads/GoogleService-Info.plist" \ + --android-google-services "$HOME/Downloads/google-services.json" +``` + +### App identifier overrides + +Bare harness: + +- `--ios-bundle-id ` +- `--android-application-id ` + +```bash +bash ./scripts/sync-build-harness.sh sync \ + --ios-bundle-id io.invertase.react-native-demo \ + --android-application-id com.invertase.testing +``` + +Expo harness: + +- `--ios-bundle-id ` +- `--android-application-id ` + +```bash +bash ./scripts/sync-build-harness-expo.sh sync \ + --ios-bundle-id io.invertase.react-native-demo \ + --android-application-id com.invertase.testing +``` + +### Clean and install controls + +- `--clean` + Removes generated build outputs before syncing or building. + +```bash +bash ./scripts/sync-build-harness.sh sync --clean +bash ./scripts/sync-build-harness-expo.sh build-ios --clean +``` + +- `--yarn-install` +- `--no-yarn-install` + Force or skip the root `yarn` install step. + +```bash +bash ./scripts/sync-build-harness.sh sync --no-yarn-install +bash ./scripts/sync-build-harness-expo.sh sync --yarn-install +``` + +Bare harness only: + +- `--pod-install` +- `--no-pod-install` + Force or skip CocoaPods for bare sync and iOS build flows. + +```bash +bash ./scripts/sync-build-harness.sh sync --no-pod-install +bash ./scripts/sync-build-harness.sh build-ios --pod-install +``` + +### Extra CLI arguments after `--` + +Anything after `--` is passed through to the underlying CLI. + +Bare harness examples: + +```bash +bash ./scripts/sync-build-harness.sh build-ios -- --scheme BuildHarness +bash ./scripts/sync-build-harness.sh build-android -- --active-arch-only +``` + +Expo harness examples: + +```bash +bash ./scripts/sync-build-harness-expo.sh start -- --localhost +bash ./scripts/sync-build-harness-expo.sh build-ios -- --configuration Release +bash ./scripts/sync-build-harness-expo.sh build-android -- --variant debug +``` + +## Recommended workflows + +### Bare React Native CLI validation + +```bash +yarn app:doctor +yarn app:sync +yarn app:start +yarn app:ios +``` + +Or: + +```bash +yarn app:doctor +yarn app:sync +yarn app:start +yarn app:android +``` + +### Expo development-build validation + +```bash +yarn app:expo:doctor +yarn app:expo:sync +yarn app:expo:start +yarn app:ios:expo +``` + +Or: + +```bash +yarn app:expo:doctor +yarn app:expo:sync +yarn app:expo:start +yarn app:android:expo +``` + +### Compare workspace packages with a published RNFB release + +```bash +bash ./scripts/sync-build-harness.sh sync \ + --rnfb-source published \ + --rnfb-version 24.0.0 + +bash ./scripts/sync-build-harness-expo.sh sync \ + --rnfb-source published \ + --rnfb-version 24.0.0 +``` + +## Notes + +- Defaults come from `packages/app/package.json` for Firebase JS, Firebase iOS SDK, Android BOM, and Gradle plugin versions. +- The bare harness patches the iOS Xcode project and keeps the Android namespace fixed at `com.invertase.testing`, while only overriding `applicationId`. +- The Expo harness targets development builds, not Expo Go. +- The Expo harness generates native folders via `expo prebuild --clean`; those generated folders stay ignored. +- The module list in each app confirms the JavaScript layer loads, but real validation still requires native builds and runtime checks. +- These harnesses are intentionally separate from `tests/`, which remains the CI and Detox harness. diff --git a/apps/build-harness-expo/.gitignore b/apps/build-harness-expo/.gitignore new file mode 100644 index 0000000000..467047b72c --- /dev/null +++ b/apps/build-harness-expo/.gitignore @@ -0,0 +1,44 @@ +# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files + +# dependencies +node_modules/ + +# Expo +.expo/ +dist/ +web-build/ +expo-env.d.ts + +# Native +.kotlin/ +*.orig.* +*.jks +*.p8 +*.p12 +*.key +*.mobileprovision + +# Metro +.metro-health-check* + +# debug +npm-debug.* +yarn-debug.* +yarn-error.* + +# macOS +.DS_Store +*.pem + +# local env files +.env*.local + +# typescript +*.tsbuildinfo + +# generated native folders +/ios +/android +GoogleService-Info.plist +google-services.json +.build-harness.local.json diff --git a/apps/build-harness-expo/App.tsx b/apps/build-harness-expo/App.tsx new file mode 100644 index 0000000000..8036a5751b --- /dev/null +++ b/apps/build-harness-expo/App.tsx @@ -0,0 +1,217 @@ +import React from 'react'; +import { + SafeAreaView, + ScrollView, + StatusBar, + StyleSheet, + Text, + useColorScheme, + View, +} from 'react-native'; +import ai from '@react-native-firebase/ai'; +import analytics from '@react-native-firebase/analytics'; +import firebaseAppRoot, {getApp} from '@react-native-firebase/app'; +import appCheck from '@react-native-firebase/app-check'; +import appDistribution from '@react-native-firebase/app-distribution'; +import auth from '@react-native-firebase/auth'; +import crashlytics from '@react-native-firebase/crashlytics'; +import database from '@react-native-firebase/database'; +import firestore from '@react-native-firebase/firestore'; +import functions from '@react-native-firebase/functions'; +import inAppMessaging from '@react-native-firebase/in-app-messaging'; +import installations from '@react-native-firebase/installations'; +import messaging from '@react-native-firebase/messaging'; +import ml from '@react-native-firebase/ml'; +import perf from '@react-native-firebase/perf'; +import remoteConfig from '@react-native-firebase/remote-config'; +import storage from '@react-native-firebase/storage'; + +type ModuleCheck = { + name: string; + loaded: boolean; +}; + +const moduleChecks: ModuleCheck[] = [ + {name: 'app', loaded: typeof firebaseAppRoot.app === 'function'}, + {name: 'ai', loaded: typeof ai === 'function'}, + {name: 'analytics', loaded: typeof analytics === 'function'}, + {name: 'app-check', loaded: typeof appCheck === 'function'}, + {name: 'app-distribution', loaded: typeof appDistribution === 'function'}, + {name: 'auth', loaded: typeof auth === 'function'}, + {name: 'crashlytics', loaded: typeof crashlytics === 'function'}, + {name: 'database', loaded: typeof database === 'function'}, + {name: 'firestore', loaded: typeof firestore === 'function'}, + {name: 'functions', loaded: typeof functions === 'function'}, + {name: 'in-app-messaging', loaded: typeof inAppMessaging === 'function'}, + {name: 'installations', loaded: typeof installations === 'function'}, + {name: 'messaging', loaded: typeof messaging === 'function'}, + {name: 'ml', loaded: typeof ml === 'function'}, + {name: 'perf', loaded: typeof perf === 'function'}, + {name: 'remote-config', loaded: typeof remoteConfig === 'function'}, + {name: 'storage', loaded: typeof storage === 'function'}, +]; + +function App(): React.JSX.Element { + const isDarkMode = useColorScheme() === 'dark'; + const backgroundColor = isDarkMode ? '#0f172a' : '#f8fafc'; + const cardColor = isDarkMode ? '#111827' : '#ffffff'; + const primaryText = isDarkMode ? '#f8fafc' : '#0f172a'; + const secondaryText = isDarkMode ? '#cbd5e1' : '#475569'; + let appName = 'Unavailable'; + let projectId = 'Missing'; + let appId = 'Missing'; + let firebaseAppError: string | undefined; + + try { + const firebaseApp = getApp(); + appName = firebaseApp.name; + projectId = firebaseApp.options.projectId ?? 'Missing'; + appId = firebaseApp.options.appId ?? 'Missing'; + } catch (error) { + firebaseAppError = error instanceof Error ? error.message : String(error); + } + + return ( + + + + + + RNFB EXPO HARNESS + + + Expo development-build smoke app + + + Run `yarn app:expo:sync` before `yarn app:ios:expo` or + `yarn app:android:expo` after changing Firebase files or dependency + overrides. + + + + + + Firebase app state + + + App name + + {appName} + + Project ID + + + {projectId} + + App ID + {appId} + {firebaseAppError ? ( + <> + + Initialization error + + + {firebaseAppError} + + + ) : null} + + + + + Module imports + + + These checks confirm the Expo JavaScript layer resolves RNFB + packages. Use the generated native projects to verify config plugin + output and runtime behavior. + + {moduleChecks.map(moduleCheck => ( + + + {moduleCheck.name} + + + {moduleCheck.loaded ? 'ready' : 'missing'} + + + ))} + + + + ); +} + +const styles = StyleSheet.create({ + safeArea: { + flex: 1, + }, + content: { + gap: 16, + padding: 16, + }, + card: { + borderRadius: 16, + elevation: 2, + padding: 16, + shadowColor: '#000000', + shadowOffset: {width: 0, height: 6}, + shadowOpacity: 0.08, + shadowRadius: 12, + }, + eyebrow: { + fontSize: 12, + fontWeight: '700', + letterSpacing: 1, + marginBottom: 8, + }, + title: { + fontSize: 28, + fontWeight: '700', + marginBottom: 12, + }, + body: { + fontSize: 16, + lineHeight: 22, + }, + sectionTitle: { + fontSize: 20, + fontWeight: '700', + marginBottom: 12, + }, + rowLabel: { + fontSize: 12, + fontWeight: '700', + letterSpacing: 0.5, + marginTop: 8, + }, + rowValue: { + fontSize: 16, + marginTop: 2, + }, + errorText: { + fontSize: 14, + lineHeight: 20, + marginTop: 6, + }, + moduleRow: { + alignItems: 'center', + flexDirection: 'row', + justifyContent: 'space-between', + paddingVertical: 6, + }, + moduleName: { + fontSize: 16, + }, + moduleStatus: { + fontSize: 14, + fontWeight: '700', + textTransform: 'uppercase', + }, +}); + +export default App; diff --git a/apps/build-harness-expo/README.md b/apps/build-harness-expo/README.md new file mode 100644 index 0000000000..3af3d78516 --- /dev/null +++ b/apps/build-harness-expo/README.md @@ -0,0 +1,35 @@ +# RNFB Expo Harness + +This app is the Expo development-build harness under `apps/build-harness-expo/`. + +For the full shared guide covering both the bare and Expo harnesses, see [`../README.md`](../README.md). + +## Use this harness for + +- Expo config plugin validation +- `expo prebuild --clean` validation +- `expo run:ios` and `expo run:android` flows + +## Common commands + +From the repo root: + +```bash +yarn app:expo:doctor +yarn app:expo:sync +yarn app:expo:start +yarn app:ios:expo +# or +yarn app:android:expo +``` + +For direct script usage and all supported flags, see: + +- [`../README.md`](../README.md) +- `scripts/sync-build-harness-expo.sh --help` + +## Notes + +- This harness targets Expo development builds, not Expo Go. +- Native iOS and Android folders are generated by `expo prebuild --clean` and remain ignored. +- The Expo config uses RNFB config plugins plus `expo-build-properties` with `useFrameworks: "static"` on iOS. diff --git a/apps/build-harness-expo/app.config.js b/apps/build-harness-expo/app.config.js new file mode 100644 index 0000000000..a1e44d8144 --- /dev/null +++ b/apps/build-harness-expo/app.config.js @@ -0,0 +1,111 @@ +const fs = require('fs'); +const path = require('path'); + +const appDir = __dirname; +const localConfigPath = path.join(appDir, '.build-harness.local.json'); +const defaultIosBundleId = 'io.invertase.react-native-demo'; +const defaultAndroidApplicationId = 'com.invertase.testing'; + +function readLocalConfig() { + if (!fs.existsSync(localConfigPath)) { + return {}; + } + + try { + return JSON.parse(fs.readFileSync(localConfigPath, 'utf8')); + } catch (_error) { + return {}; + } +} + +module.exports = ({config}) => { + const localConfig = readLocalConfig(); + const iosBundleIdentifier = + process.env.RNFB_BUILD_HARNESS_IOS_BUNDLE_ID || + localConfig.iosBundleId || + defaultIosBundleId; + const androidPackage = + process.env.RNFB_BUILD_HARNESS_ANDROID_APPLICATION_ID || + localConfig.androidApplicationId || + defaultAndroidApplicationId; + + return { + ...config, + name: 'RNFB Expo Harness', + slug: 'rnfb-build-harness-expo', + scheme: 'rnfirebase-build-harness-expo', + version: '0.0.1', + orientation: 'portrait', + icon: './assets/icon.png', + userInterfaceStyle: 'automatic', + splash: { + image: './assets/splash-icon.png', + resizeMode: 'contain', + backgroundColor: '#ffffff', + }, + ios: { + bundleIdentifier: iosBundleIdentifier, + googleServicesFile: './GoogleService-Info.plist', + supportsTablet: true, + }, + android: { + package: androidPackage, + googleServicesFile: './google-services.json', + adaptiveIcon: { + foregroundImage: './assets/android-icon-foreground.png', + backgroundImage: './assets/android-icon-background.png', + monochromeImage: './assets/android-icon-monochrome.png', + backgroundColor: '#E6F4FE', + }, + predictiveBackGestureEnabled: false, + }, + web: { + favicon: './assets/favicon.png', + }, + plugins: [ + [ + 'expo-build-properties', + // force static linking to avoid expo build issues + // See: https://github.com/invertase/react-native-firebase/issues/8657 + { + ios: { + "forceStaticLinking": [ + "RNFBApp", + "RNFBAnalytics", + "RNFBAppCheck", + "RNFBAppDistribution", + "RNFBAuth", + "RNFBCrashlytics", + "RNFBDatabase", + "RNFBFirestore", + "RNFBFunctions", + "RNFBInAppMessaging", + "RNFBInstallations", + "RNFBMessaging", + "RNFBML", + "RNFBPerf", + "RNFBRemoteConfig", + "RNFBStorage" + ], + "useFrameworks": "static", + "ccacheEnabled": true + } + }, + ], + '@react-native-firebase/app', + '@react-native-firebase/analytics', + '@react-native-firebase/app-check', + '@react-native-firebase/app-distribution', + '@react-native-firebase/auth', + '@react-native-firebase/crashlytics', + '@react-native-firebase/messaging', + '@react-native-firebase/perf', + ], + extra: { + ...config.extra, + buildHarness: { + flavor: 'expo', + }, + }, + }; +}; diff --git a/apps/build-harness-expo/assets/android-icon-background.png b/apps/build-harness-expo/assets/android-icon-background.png new file mode 100644 index 0000000000..5ffefc5bb5 Binary files /dev/null and b/apps/build-harness-expo/assets/android-icon-background.png differ diff --git a/apps/build-harness-expo/assets/android-icon-foreground.png b/apps/build-harness-expo/assets/android-icon-foreground.png new file mode 100644 index 0000000000..3a9e5016dc Binary files /dev/null and b/apps/build-harness-expo/assets/android-icon-foreground.png differ diff --git a/apps/build-harness-expo/assets/android-icon-monochrome.png b/apps/build-harness-expo/assets/android-icon-monochrome.png new file mode 100644 index 0000000000..77484ebdbc Binary files /dev/null and b/apps/build-harness-expo/assets/android-icon-monochrome.png differ diff --git a/apps/build-harness-expo/assets/favicon.png b/apps/build-harness-expo/assets/favicon.png new file mode 100644 index 0000000000..408bd74661 Binary files /dev/null and b/apps/build-harness-expo/assets/favicon.png differ diff --git a/apps/build-harness-expo/assets/icon.png b/apps/build-harness-expo/assets/icon.png new file mode 100644 index 0000000000..7165a53c74 Binary files /dev/null and b/apps/build-harness-expo/assets/icon.png differ diff --git a/apps/build-harness-expo/assets/splash-icon.png b/apps/build-harness-expo/assets/splash-icon.png new file mode 100644 index 0000000000..03d6f6b6c6 Binary files /dev/null and b/apps/build-harness-expo/assets/splash-icon.png differ diff --git a/apps/build-harness-expo/firebase.json b/apps/build-harness-expo/firebase.json new file mode 100644 index 0000000000..8afc510351 --- /dev/null +++ b/apps/build-harness-expo/firebase.json @@ -0,0 +1,9 @@ +{ + "react-native": { + "app_data_collection_default_enabled": false, + "crashlytics_debug_enabled": true, + "crashlytics_disable_auto_disabler": true, + "messaging_auto_init_enabled": false, + "perf_auto_collection_enabled": false + } +} diff --git a/apps/build-harness-expo/index.ts b/apps/build-harness-expo/index.ts new file mode 100644 index 0000000000..1d6e981ef6 --- /dev/null +++ b/apps/build-harness-expo/index.ts @@ -0,0 +1,8 @@ +import { registerRootComponent } from 'expo'; + +import App from './App'; + +// registerRootComponent calls AppRegistry.registerComponent('main', () => App); +// It also ensures that whether you load the app in Expo Go or in a native build, +// the environment is set up appropriately +registerRootComponent(App); diff --git a/apps/build-harness-expo/metro.config.js b/apps/build-harness-expo/metro.config.js new file mode 100644 index 0000000000..f694d7eb6f --- /dev/null +++ b/apps/build-harness-expo/metro.config.js @@ -0,0 +1,76 @@ +const {existsSync, readFileSync, readdirSync, statSync} = require('fs'); +const {join, resolve} = require('path'); +const {getDefaultConfig} = require('expo/metro-config'); + +const rootDir = resolve(__dirname, '../..'); +const packagesDir = resolve(rootDir, 'packages'); +const localConfigPath = resolve(__dirname, '.build-harness.local.json'); + +let rnfbSource = 'workspace'; +if (existsSync(localConfigPath)) { + try { + const localConfig = JSON.parse(readFileSync(localConfigPath, 'utf8')); + if (localConfig.rnfbSource === 'published') { + rnfbSource = 'published'; + } + } catch (_error) { + // Fall back to workspace mode when the local config is missing or invalid. + } +} + +const firebasePackages = readdirSync(packagesDir) + .map(name => join(packagesDir, name)) + .filter(source => statSync(source).isDirectory()); + +const config = getDefaultConfig(__dirname); + +config.resolver = { + ...config.resolver, + extraNodeModules: new Proxy( + {}, + { + get: (_, name) => { + if ( + rnfbSource === 'workspace' && + typeof name === 'string' && + name.startsWith('@react-native-firebase/') + ) { + return join( + rootDir, + 'packages', + name.replace('@react-native-firebase/', ''), + ); + } + + return join(__dirname, 'node_modules', name); + }, + }, + ), + resolveRequest(context, moduleName, platform) { + if ( + rnfbSource === 'workspace' && + moduleName === '@react-native-firebase/firestore/pipelines' + ) { + return { + type: 'sourceFile', + filePath: join( + rootDir, + 'packages', + 'firestore', + 'lib', + 'pipelines', + 'index.ts', + ), + }; + } + + return context.resolveRequest(context, moduleName, platform); + }, +}; + +config.watchFolders = + rnfbSource === 'workspace' + ? [resolve(__dirname, '.'), ...firebasePackages] + : [resolve(__dirname, '.')]; + +module.exports = config; diff --git a/apps/build-harness-expo/package.json b/apps/build-harness-expo/package.json new file mode 100644 index 0000000000..cc4f550f3d --- /dev/null +++ b/apps/build-harness-expo/package.json @@ -0,0 +1,43 @@ +{ + "name": "@rnfirebase/build-harness-expo", + "version": "0.0.1", + "main": "index.ts", + "scripts": { + "android": "expo run:android", + "ios": "expo run:ios", + "prebuild": "expo prebuild --clean", + "start": "expo start --clear", + "typecheck": "tsc --noEmit", + "web": "expo start --web" + }, + "dependencies": { + "@react-native-firebase/ai": "workspace:*", + "@react-native-firebase/analytics": "workspace:*", + "@react-native-firebase/app": "workspace:*", + "@react-native-firebase/app-check": "workspace:*", + "@react-native-firebase/app-distribution": "workspace:*", + "@react-native-firebase/auth": "workspace:*", + "@react-native-firebase/crashlytics": "workspace:*", + "@react-native-firebase/database": "workspace:*", + "@react-native-firebase/firestore": "workspace:*", + "@react-native-firebase/functions": "workspace:*", + "@react-native-firebase/in-app-messaging": "workspace:*", + "@react-native-firebase/installations": "workspace:*", + "@react-native-firebase/messaging": "workspace:*", + "@react-native-firebase/ml": "workspace:*", + "@react-native-firebase/perf": "workspace:*", + "@react-native-firebase/remote-config": "workspace:*", + "@react-native-firebase/storage": "workspace:*", + "expo": "~55.0.17", + "expo-build-properties": "^55.0.13", + "expo-status-bar": "~55.0.5", + "firebase": "12.12.0", + "react": "19.2.0", + "react-native": "0.83.6" + }, + "devDependencies": { + "@types/react": "~19.2.2", + "typescript": "~5.9.2" + }, + "private": true +} diff --git a/apps/build-harness-expo/tsconfig.json b/apps/build-harness-expo/tsconfig.json new file mode 100644 index 0000000000..b9567f6052 --- /dev/null +++ b/apps/build-harness-expo/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "expo/tsconfig.base", + "compilerOptions": { + "strict": true + } +} diff --git a/apps/build-harness/.eslintrc.js b/apps/build-harness/.eslintrc.js new file mode 100644 index 0000000000..187894b6af --- /dev/null +++ b/apps/build-harness/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: '@react-native', +}; diff --git a/apps/build-harness/.gitignore b/apps/build-harness/.gitignore new file mode 100644 index 0000000000..023f30c3c2 --- /dev/null +++ b/apps/build-harness/.gitignore @@ -0,0 +1,79 @@ +.bundle/ +android/app/google-services.json +ios/BuildHarness/GoogleService-Info.plist +.build-harness.local.json +# 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/apps/build-harness/.prettierrc.js b/apps/build-harness/.prettierrc.js new file mode 100644 index 0000000000..2b540746a7 --- /dev/null +++ b/apps/build-harness/.prettierrc.js @@ -0,0 +1,7 @@ +module.exports = { + arrowParens: 'avoid', + bracketSameLine: true, + bracketSpacing: false, + singleQuote: true, + trailingComma: 'all', +}; diff --git a/apps/build-harness/.watchmanconfig b/apps/build-harness/.watchmanconfig new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/apps/build-harness/.watchmanconfig @@ -0,0 +1 @@ +{} diff --git a/apps/build-harness/App.tsx b/apps/build-harness/App.tsx new file mode 100644 index 0000000000..0a01eed20f --- /dev/null +++ b/apps/build-harness/App.tsx @@ -0,0 +1,215 @@ +import React from 'react'; +import { + SafeAreaView, + ScrollView, + StatusBar, + StyleSheet, + Text, + useColorScheme, + View, +} from 'react-native'; +import ai from '@react-native-firebase/ai'; +import analytics from '@react-native-firebase/analytics'; +import firebaseAppRoot, {getApp} from '@react-native-firebase/app'; +import appCheck from '@react-native-firebase/app-check'; +import appDistribution from '@react-native-firebase/app-distribution'; +import auth from '@react-native-firebase/auth'; +import crashlytics from '@react-native-firebase/crashlytics'; +import database from '@react-native-firebase/database'; +import firestore from '@react-native-firebase/firestore'; +import functions from '@react-native-firebase/functions'; +import inAppMessaging from '@react-native-firebase/in-app-messaging'; +import installations from '@react-native-firebase/installations'; +import messaging from '@react-native-firebase/messaging'; +import ml from '@react-native-firebase/ml'; +import perf from '@react-native-firebase/perf'; +import remoteConfig from '@react-native-firebase/remote-config'; +import storage from '@react-native-firebase/storage'; + +type ModuleCheck = { + name: string; + loaded: boolean; +}; + +const moduleChecks: ModuleCheck[] = [ + {name: 'app', loaded: typeof firebaseAppRoot.app === 'function'}, + {name: 'ai', loaded: typeof ai === 'function'}, + {name: 'analytics', loaded: typeof analytics === 'function'}, + {name: 'app-check', loaded: typeof appCheck === 'function'}, + {name: 'app-distribution', loaded: typeof appDistribution === 'function'}, + {name: 'auth', loaded: typeof auth === 'function'}, + {name: 'crashlytics', loaded: typeof crashlytics === 'function'}, + {name: 'database', loaded: typeof database === 'function'}, + {name: 'firestore', loaded: typeof firestore === 'function'}, + {name: 'functions', loaded: typeof functions === 'function'}, + {name: 'in-app-messaging', loaded: typeof inAppMessaging === 'function'}, + {name: 'installations', loaded: typeof installations === 'function'}, + {name: 'messaging', loaded: typeof messaging === 'function'}, + {name: 'ml', loaded: typeof ml === 'function'}, + {name: 'perf', loaded: typeof perf === 'function'}, + {name: 'remote-config', loaded: typeof remoteConfig === 'function'}, + {name: 'storage', loaded: typeof storage === 'function'}, +]; + +function App(): React.JSX.Element { + const isDarkMode = useColorScheme() === 'dark'; + const backgroundColor = isDarkMode ? '#0f172a' : '#f8fafc'; + const cardColor = isDarkMode ? '#111827' : '#ffffff'; + const primaryText = isDarkMode ? '#f8fafc' : '#0f172a'; + const secondaryText = isDarkMode ? '#cbd5e1' : '#475569'; + let appName = 'Unavailable'; + let projectId = 'Missing'; + let appId = 'Missing'; + let firebaseAppError: string | undefined; + + try { + const firebaseApp = getApp(); + appName = firebaseApp.name; + projectId = firebaseApp.options.projectId ?? 'Missing'; + appId = firebaseApp.options.appId ?? 'Missing'; + } catch (error) { + firebaseAppError = error instanceof Error ? error.message : String(error); + } + + return ( + + + + + + RNFB BUILD HARNESS + + + Manual build and Firebase sync app + + + Run `yarn app:sync` from the repo root after changing dependency + overrides or local Google Services files. + + + + + + Firebase app state + + + App name + + {appName} + + Project ID + + + {projectId} + + App ID + {appId} + {firebaseAppError ? ( + <> + + Initialization error + + + {firebaseAppError} + + + ) : null} + + + + + Module imports + + + These checks confirm the JavaScript modules load. Use a native build + to verify bridge wiring and runtime behavior. + + {moduleChecks.map(moduleCheck => ( + + + {moduleCheck.name} + + + {moduleCheck.loaded ? 'ready' : 'missing'} + + + ))} + + + + ); +} + +const styles = StyleSheet.create({ + safeArea: { + flex: 1, + }, + content: { + padding: 16, + gap: 16, + }, + card: { + borderRadius: 16, + padding: 16, + shadowColor: '#000000', + shadowOpacity: 0.08, + shadowRadius: 12, + shadowOffset: {width: 0, height: 6}, + elevation: 2, + }, + eyebrow: { + fontSize: 12, + fontWeight: '700', + letterSpacing: 1, + marginBottom: 8, + }, + title: { + fontSize: 28, + fontWeight: '700', + marginBottom: 12, + }, + body: { + fontSize: 16, + lineHeight: 22, + }, + sectionTitle: { + fontSize: 20, + fontWeight: '700', + marginBottom: 12, + }, + rowLabel: { + fontSize: 12, + fontWeight: '700', + letterSpacing: 0.5, + marginTop: 8, + }, + rowValue: { + fontSize: 16, + marginTop: 2, + }, + errorText: { + fontSize: 14, + lineHeight: 20, + marginTop: 6, + }, + moduleRow: { + alignItems: 'center', + flexDirection: 'row', + justifyContent: 'space-between', + paddingVertical: 6, + }, + moduleName: { + fontSize: 16, + }, + moduleStatus: { + fontSize: 14, + fontWeight: '700', + textTransform: 'uppercase', + }, +}); + +export default App; diff --git a/apps/build-harness/Gemfile b/apps/build-harness/Gemfile new file mode 100644 index 0000000000..03278dd5eb --- /dev/null +++ b/apps/build-harness/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/apps/build-harness/Gemfile.lock b/apps/build-harness/Gemfile.lock new file mode 100644 index 0000000000..99d2509e33 --- /dev/null +++ b/apps/build-harness/Gemfile.lock @@ -0,0 +1,106 @@ +GEM + remote: https://rubygems.org/ + specs: + CFPropertyList (3.0.8) + activesupport (6.1.7.10) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 1.6, < 2) + minitest (>= 5.1) + tzinfo (~> 2.0) + zeitwerk (~> 2.3) + addressable (2.9.0) + public_suffix (>= 2.0.2, < 8.0) + algoliasearch (1.27.5) + httpclient (~> 2.8, >= 2.8.3) + json (>= 1.5.1) + atomos (0.1.3) + claide (1.1.0) + cocoapods (1.15.2) + addressable (~> 2.8) + claide (>= 1.0.2, < 2.0) + cocoapods-core (= 1.15.2) + cocoapods-deintegrate (>= 1.0.3, < 2.0) + cocoapods-downloader (>= 2.1, < 3.0) + cocoapods-plugins (>= 1.0.0, < 2.0) + cocoapods-search (>= 1.0.0, < 2.0) + cocoapods-trunk (>= 1.6.0, < 2.0) + cocoapods-try (>= 1.1.0, < 2.0) + colored2 (~> 3.1) + escape (~> 0.0.4) + fourflusher (>= 2.3.0, < 3.0) + gh_inspector (~> 1.0) + molinillo (~> 0.8.0) + nap (~> 1.0) + ruby-macho (>= 2.3.0, < 3.0) + xcodeproj (>= 1.23.0, < 2.0) + cocoapods-core (1.15.2) + activesupport (>= 5.0, < 8) + addressable (~> 2.8) + algoliasearch (~> 1.0) + concurrent-ruby (~> 1.1) + fuzzy_match (~> 2.0.4) + nap (~> 1.0) + netrc (~> 0.11) + public_suffix (~> 4.0) + typhoeus (~> 1.0) + cocoapods-deintegrate (1.0.5) + cocoapods-downloader (2.1) + cocoapods-plugins (1.0.0) + nap + cocoapods-search (1.0.1) + cocoapods-trunk (1.6.0) + nap (>= 0.8, < 2.0) + netrc (~> 0.11) + cocoapods-try (1.2.0) + colored2 (3.1.2) + concurrent-ruby (1.3.3) + escape (0.0.4) + ethon (0.18.0) + ffi (>= 1.15.0) + logger + ffi (1.17.4) + fourflusher (2.3.1) + fuzzy_match (2.0.4) + gh_inspector (1.1.3) + httpclient (2.9.0) + mutex_m + i18n (1.14.8) + concurrent-ruby (~> 1.0) + json (2.7.6) + logger (1.7.0) + minitest (5.25.4) + molinillo (0.8.0) + mutex_m (0.3.0) + nanaimo (0.3.0) + nap (1.1.0) + netrc (0.11.0) + public_suffix (4.0.7) + rexml (3.4.4) + ruby-macho (2.5.1) + typhoeus (1.6.0) + ethon (>= 0.18.0) + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) + xcodeproj (1.25.1) + CFPropertyList (>= 2.3.3, < 4.0) + atomos (~> 0.1.3) + claide (>= 1.0.2, < 2.0) + colored2 (~> 3.1) + nanaimo (~> 0.3.0) + rexml (>= 3.3.6, < 4.0) + zeitwerk (2.6.18) + +PLATFORMS + ruby + +DEPENDENCIES + activesupport (>= 6.1.7.5, != 7.1.0) + cocoapods (>= 1.13, != 1.15.1, != 1.15.0) + concurrent-ruby (< 1.3.4) + xcodeproj (< 1.26.0) + +RUBY VERSION + ruby 2.6.10p210 + +BUNDLED WITH + 2.4.22 diff --git a/apps/build-harness/README.md b/apps/build-harness/README.md new file mode 100644 index 0000000000..df4545db8b --- /dev/null +++ b/apps/build-harness/README.md @@ -0,0 +1,35 @@ +# RNFB Bare Build Harness + +This app is the bare React Native CLI harness under `apps/build-harness/`. + +For the full shared guide covering both the bare and Expo harnesses, see [`../README.md`](../README.md). + +## Use this harness for + +- checked-in native project validation +- Podfile and Gradle override validation +- direct `react-native run-ios` and `react-native run-android` flows + +## Common commands + +From the repo root: + +```bash +yarn app:doctor +yarn app:sync +yarn app:start +yarn app:ios +# or +yarn app:android +``` + +For direct script usage and all supported flags, see: + +- [`../README.md`](../README.md) +- `scripts/sync-build-harness.sh --help` + +## Notes + +- The bare harness patches the iOS Xcode project directly and keeps the Android namespace fixed at `com.invertase.testing`. +- Local Firebase config files copied into this app remain ignored and should stay local. +- This app is intentionally separate from `tests/`, which remains the CI and Detox harness. diff --git a/apps/build-harness/android/app/build.gradle b/apps/build-harness/android/app/build.gradle new file mode 100644 index 0000000000..553b1432df --- /dev/null +++ b/apps/build-harness/android/app/build.gradle @@ -0,0 +1,126 @@ +apply plugin: "com.android.application" +apply plugin: "org.jetbrains.kotlin.android" +apply plugin: "com.facebook.react" +apply plugin: "com.google.gms.google-services" +apply plugin: "com.google.firebase.crashlytics" +apply plugin: "com.google.firebase.firebase-perf" +apply plugin: "com.google.firebase.appdistribution" + +def applicationIdValue = + System.getenv("RNFB_BUILD_HARNESS_ANDROID_APPLICATION_ID") ?: "com.invertase.testing" + +/** + * 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.invertase.testing" + defaultConfig { + applicationId applicationIdValue + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + versionCode 1 + versionName "1.0" + } + 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" + } + } +} + +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 + } +} diff --git a/apps/build-harness/android/app/debug.keystore b/apps/build-harness/android/app/debug.keystore new file mode 100644 index 0000000000..364e105ed3 Binary files /dev/null and b/apps/build-harness/android/app/debug.keystore differ diff --git a/apps/build-harness/android/app/proguard-rules.pro b/apps/build-harness/android/app/proguard-rules.pro new file mode 100644 index 0000000000..11b025724a --- /dev/null +++ b/apps/build-harness/android/app/proguard-rules.pro @@ -0,0 +1,10 @@ +# 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: diff --git a/apps/build-harness/android/app/src/debug/AndroidManifest.xml b/apps/build-harness/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000000..eb98c01afd --- /dev/null +++ b/apps/build-harness/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/apps/build-harness/android/app/src/main/AndroidManifest.xml b/apps/build-harness/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..e1892528b8 --- /dev/null +++ b/apps/build-harness/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + diff --git a/apps/build-harness/android/app/src/main/java/com/invertase/testing/MainActivity.kt b/apps/build-harness/android/app/src/main/java/com/invertase/testing/MainActivity.kt new file mode 100644 index 0000000000..376b9a7741 --- /dev/null +++ b/apps/build-harness/android/app/src/main/java/com/invertase/testing/MainActivity.kt @@ -0,0 +1,22 @@ +package com.invertase.testing + +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 = "BuildHarness" + + /** + * 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/apps/build-harness/android/app/src/main/java/com/invertase/testing/MainApplication.kt b/apps/build-harness/android/app/src/main/java/com/invertase/testing/MainApplication.kt new file mode 100644 index 0000000000..e12600d0d8 --- /dev/null +++ b/apps/build-harness/android/app/src/main/java/com/invertase/testing/MainApplication.kt @@ -0,0 +1,44 @@ +package com.invertase.testing + +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 + +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()) + } + + 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/apps/build-harness/android/app/src/main/res/drawable/rn_edit_text_material.xml b/apps/build-harness/android/app/src/main/res/drawable/rn_edit_text_material.xml new file mode 100644 index 0000000000..5c25e728ea --- /dev/null +++ b/apps/build-harness/android/app/src/main/res/drawable/rn_edit_text_material.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + diff --git a/apps/build-harness/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/apps/build-harness/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000..a2f5908281 Binary files /dev/null and b/apps/build-harness/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/apps/build-harness/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/apps/build-harness/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000..1b52399808 Binary files /dev/null and b/apps/build-harness/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/apps/build-harness/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/apps/build-harness/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000..ff10afd6e1 Binary files /dev/null and b/apps/build-harness/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/apps/build-harness/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/apps/build-harness/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000000..115a4c768a Binary files /dev/null and b/apps/build-harness/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/apps/build-harness/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/apps/build-harness/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000..dcd3cd8083 Binary files /dev/null and b/apps/build-harness/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/apps/build-harness/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/apps/build-harness/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000..459ca609d3 Binary files /dev/null and b/apps/build-harness/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/apps/build-harness/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/apps/build-harness/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000..8ca12fe024 Binary files /dev/null and b/apps/build-harness/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/apps/build-harness/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/apps/build-harness/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000..8e19b410a1 Binary files /dev/null and b/apps/build-harness/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/apps/build-harness/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/apps/build-harness/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000..b824ebdd48 Binary files /dev/null and b/apps/build-harness/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/apps/build-harness/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/apps/build-harness/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000..4c19a13c23 Binary files /dev/null and b/apps/build-harness/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/apps/build-harness/android/app/src/main/res/values/strings.xml b/apps/build-harness/android/app/src/main/res/values/strings.xml new file mode 100644 index 0000000000..4a71620416 --- /dev/null +++ b/apps/build-harness/android/app/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + BuildHarness + diff --git a/apps/build-harness/android/app/src/main/res/values/styles.xml b/apps/build-harness/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000000..7ba83a2ad5 --- /dev/null +++ b/apps/build-harness/android/app/src/main/res/values/styles.xml @@ -0,0 +1,9 @@ + + + + + + diff --git a/apps/build-harness/android/build.gradle b/apps/build-harness/android/build.gradle new file mode 100644 index 0000000000..8e3155a871 --- /dev/null +++ b/apps/build-harness/android/build.gradle @@ -0,0 +1,50 @@ +import groovy.json.JsonSlurper + +def appPackageJson = new JsonSlurper().parseText( + new File(rootDir, "../node_modules/@react-native-firebase/app/package.json").text +) +def sdkVersions = appPackageJson.sdkVersions.android +def firebaseBomVersion = System.getenv("RNFB_FIREBASE_ANDROID_BOM") ?: sdkVersions.firebase + +buildscript { + def appPackageJson = new JsonSlurper().parseText( + new File(rootDir, "../node_modules/@react-native-firebase/app/package.json").text + ) + def sdkVersions = appPackageJson.sdkVersions.android + def googleServicesGradleVersion = System.getenv("RNFB_GOOGLE_SERVICES_GRADLE") ?: sdkVersions.gmsGoogleServicesGradle + def crashlyticsGradleVersion = System.getenv("RNFB_CRASHLYTICS_GRADLE") ?: sdkVersions.firebaseCrashlyticsGradle + def perfGradleVersion = System.getenv("RNFB_PERF_GRADLE") ?: sdkVersions.firebasePerfGradle + def appDistributionGradleVersion = + System.getenv("RNFB_APP_DISTRIBUTION_GRADLE") ?: sdkVersions.firebaseAppDistributionGradle + 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") + classpath("com.google.gms:google-services:${googleServicesGradleVersion}") + classpath("com.google.firebase:firebase-crashlytics-gradle:${crashlyticsGradleVersion}") + classpath("com.google.firebase:perf-plugin:${perfGradleVersion}") + classpath("com.google.firebase:firebase-appdistribution-gradle:${appDistributionGradleVersion}") + } +} + +project.ext.set('react-native', [ + versions: [ + firebase: [ + bom: firebaseBomVersion, + ], + ], +]) + +apply plugin: "com.facebook.react.rootproject" diff --git a/apps/build-harness/android/gradle.properties b/apps/build-harness/android/gradle.properties new file mode 100644 index 0000000000..5e24e3aa8d --- /dev/null +++ b/apps/build-harness/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=true + +# 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/apps/build-harness/android/gradle/wrapper/gradle-wrapper.jar b/apps/build-harness/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000..a4b76b9530 Binary files /dev/null and b/apps/build-harness/android/gradle/wrapper/gradle-wrapper.jar differ diff --git a/apps/build-harness/android/gradle/wrapper/gradle-wrapper.properties b/apps/build-harness/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000..e0fd02028b --- /dev/null +++ b/apps/build-harness/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/apps/build-harness/android/gradlew b/apps/build-harness/android/gradlew new file mode 100755 index 0000000000..f3b75f3b0d --- /dev/null +++ b/apps/build-harness/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/apps/build-harness/android/gradlew.bat b/apps/build-harness/android/gradlew.bat new file mode 100644 index 0000000000..9d21a21834 --- /dev/null +++ b/apps/build-harness/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/apps/build-harness/android/settings.gradle b/apps/build-harness/android/settings.gradle new file mode 100644 index 0000000000..54b93b87a1 --- /dev/null +++ b/apps/build-harness/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 = 'com.invertase.testing' +include ':app' +includeBuild('../node_modules/@react-native/gradle-plugin') diff --git a/apps/build-harness/app.json b/apps/build-harness/app.json new file mode 100644 index 0000000000..99fc20379f --- /dev/null +++ b/apps/build-harness/app.json @@ -0,0 +1,4 @@ +{ + "name": "BuildHarness", + "displayName": "RNFB Build Harness" +} diff --git a/apps/build-harness/babel.config.js b/apps/build-harness/babel.config.js new file mode 100644 index 0000000000..f7b3da3b33 --- /dev/null +++ b/apps/build-harness/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: ['module:@react-native/babel-preset'], +}; diff --git a/apps/build-harness/firebase.json b/apps/build-harness/firebase.json new file mode 100644 index 0000000000..8afc510351 --- /dev/null +++ b/apps/build-harness/firebase.json @@ -0,0 +1,9 @@ +{ + "react-native": { + "app_data_collection_default_enabled": false, + "crashlytics_debug_enabled": true, + "crashlytics_disable_auto_disabler": true, + "messaging_auto_init_enabled": false, + "perf_auto_collection_enabled": false + } +} diff --git a/apps/build-harness/index.js b/apps/build-harness/index.js new file mode 100644 index 0000000000..a850d031de --- /dev/null +++ b/apps/build-harness/index.js @@ -0,0 +1,9 @@ +/** + * @format + */ + +import {AppRegistry} from 'react-native'; +import App from './App'; +import {name as appName} from './app.json'; + +AppRegistry.registerComponent(appName, () => App); diff --git a/apps/build-harness/ios/.xcode.env b/apps/build-harness/ios/.xcode.env new file mode 100644 index 0000000000..3d5782c715 --- /dev/null +++ b/apps/build-harness/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/apps/build-harness/ios/BuildHarness.xcodeproj/project.pbxproj b/apps/build-harness/ios/BuildHarness.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..eb786fbc86 --- /dev/null +++ b/apps/build-harness/ios/BuildHarness.xcodeproj/project.pbxproj @@ -0,0 +1,541 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; + 761780ED2CA45674006654EE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761780EC2CA45674006654EE /* AppDelegate.swift */; }; + 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; + A049602ACEC440C320F3679C /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 9423F24D4F79ED7423D19F3D /* GoogleService-Info.plist */; }; + B8735D8798A01E8CEBCA83AB /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */; }; + EE2879BE8EA1C504AFA6AB8E /* Pods_BuildHarness.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2CC1AE7EA3D6C63F075E36FD /* Pods_BuildHarness.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 13B07F961A680F5B00A75B9A /* BuildHarness.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BuildHarness.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = BuildHarness/Images.xcassets; sourceTree = ""; }; + 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = BuildHarness/Info.plist; sourceTree = ""; }; + 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = PrivacyInfo.xcprivacy; path = BuildHarness/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 2CC1AE7EA3D6C63F075E36FD /* Pods_BuildHarness.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_BuildHarness.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B4392A12AC88292D35C810B /* Pods-BuildHarness.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BuildHarness.debug.xcconfig"; path = "Target Support Files/Pods-BuildHarness/Pods-BuildHarness.debug.xcconfig"; sourceTree = ""; }; + 5709B34CF0A7D63546082F79 /* Pods-BuildHarness.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BuildHarness.release.xcconfig"; path = "Target Support Files/Pods-BuildHarness/Pods-BuildHarness.release.xcconfig"; sourceTree = ""; }; + 761780EC2CA45674006654EE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = BuildHarness/AppDelegate.swift; sourceTree = ""; }; + 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = BuildHarness/LaunchScreen.storyboard; sourceTree = ""; }; + 9423F24D4F79ED7423D19F3D /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "BuildHarness/GoogleService-Info.plist"; 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 = ( + EE2879BE8EA1C504AFA6AB8E /* Pods_BuildHarness.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 13B07FAE1A68108700A75B9A /* BuildHarness */ = { + isa = PBXGroup; + children = ( + 13B07FB51A68108700A75B9A /* Images.xcassets */, + 761780EC2CA45674006654EE /* AppDelegate.swift */, + 13B07FB61A68108700A75B9A /* Info.plist */, + 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */, + 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */, + 9423F24D4F79ED7423D19F3D /* GoogleService-Info.plist */, + ); + name = BuildHarness; + sourceTree = ""; + }; + 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { + isa = PBXGroup; + children = ( + ED297162215061F000B7C4FE /* JavaScriptCore.framework */, + 2CC1AE7EA3D6C63F075E36FD /* Pods_BuildHarness.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 832341AE1AAA6A7D00B99B32 /* Libraries */ = { + isa = PBXGroup; + children = ( + ); + name = Libraries; + sourceTree = ""; + }; + 83CBB9F61A601CBA00E9B192 = { + isa = PBXGroup; + children = ( + 13B07FAE1A68108700A75B9A /* BuildHarness */, + 832341AE1AAA6A7D00B99B32 /* Libraries */, + 83CBBA001A601CBA00E9B192 /* Products */, + 2D16E6871FA4F8E400B85C8A /* Frameworks */, + BBD78D7AC51CEA395F1C20DB /* Pods */, + ); + indentWidth = 2; + sourceTree = ""; + tabWidth = 2; + usesTabs = 0; + }; + 83CBBA001A601CBA00E9B192 /* Products */ = { + isa = PBXGroup; + children = ( + 13B07F961A680F5B00A75B9A /* BuildHarness.app */, + ); + name = Products; + sourceTree = ""; + }; + BBD78D7AC51CEA395F1C20DB /* Pods */ = { + isa = PBXGroup; + children = ( + 3B4392A12AC88292D35C810B /* Pods-BuildHarness.debug.xcconfig */, + 5709B34CF0A7D63546082F79 /* Pods-BuildHarness.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 13B07F861A680F5B00A75B9A /* BuildHarness */ = { + isa = PBXNativeTarget; + buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "BuildHarness" */; + 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 */, + 22E4282F07B074B5B186CD61 /* [CP-User] [RNFB] Core Configuration */, + 856B42D9835A28587171B12F /* [CP-User] [RNFB] Crashlytics Configuration */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = BuildHarness; + productName = BuildHarness; + productReference = 13B07F961A680F5B00A75B9A /* BuildHarness.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 83CBB9F71A601CBA00E9B192 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1210; + TargetAttributes = { + 13B07F861A680F5B00A75B9A = { + LastSwiftMigration = 1120; + }; + }; + }; + buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "BuildHarness" */; + compatibilityVersion = "Xcode 12.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 83CBB9F61A601CBA00E9B192; + productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 13B07F861A680F5B00A75B9A /* BuildHarness */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 13B07F8E1A680F5B00A75B9A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */, + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, + A049602ACEC440C320F3679C /* GoogleService-Info.plist in Resources */, + B8735D8798A01E8CEBCA83AB /* 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-BuildHarness/Pods-BuildHarness-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-BuildHarness/Pods-BuildHarness-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-BuildHarness/Pods-BuildHarness-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 22E4282F07B074B5B186CD61 /* [CP-User] [RNFB] Core Configuration */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)", + ); + name = "[CP-User] [RNFB] Core Configuration"; + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##########################################################################\n##########################################################################\n#\n# NOTE THAT IF YOU CHANGE THIS FILE YOU MUST RUN pod install AFTERWARDS\n#\n# This file is installed as an Xcode build script in the project file\n# by cocoapods, and you will not see your changes until you pod install\n#\n##########################################################################\n##########################################################################\n\nset -e\n\n_MAX_LOOKUPS=2;\n_SEARCH_RESULT=''\n_RN_ROOT_EXISTS=''\n_CURRENT_LOOKUPS=1\n_JSON_ROOT=\"'react-native'\"\n_JSON_FILE_NAME='firebase.json'\n_JSON_OUTPUT_BASE64='e30=' # { }\n_CURRENT_SEARCH_DIR=${PROJECT_DIR}\n_PLIST_BUDDY=/usr/libexec/PlistBuddy\n_TARGET_PLIST=\"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n_DSYM_PLIST=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n# plist arrays\n_PLIST_ENTRY_KEYS=()\n_PLIST_ENTRY_TYPES=()\n_PLIST_ENTRY_VALUES=()\n\nfunction setPlistValue {\n echo \"note: setting plist entry '$1' of type '$2' in file '$4'\"\n ${_PLIST_BUDDY} -c \"Add :$1 $2 '$3'\" $4 || echo \"note: '$1' already exists\"\n}\n\nfunction getFirebaseJsonKeyValue () {\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n ruby -Ku -e \"require 'rubygems';require 'json'; output=JSON.parse('$1'); puts output[$_JSON_ROOT]['$2']\"\n else\n echo \"\"\n fi;\n}\n\nfunction jsonBoolToYesNo () {\n if [[ $1 == \"false\" ]]; then\n echo \"NO\"\n elif [[ $1 == \"true\" ]]; then\n echo \"YES\"\n else echo \"NO\"\n fi\n}\n\necho \"note: -> RNFB build script started\"\necho \"note: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"note: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | /usr/bin/head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"note: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n if ! _RN_ROOT_EXISTS=$(ruby -Ku -e \"require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\"); then\n echo \"error: Failed to parse firebase.json, check for syntax errors.\"\n exit 1\n fi\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n if ! python3 --version >/dev/null 2>&1; then echo \"error: python3 not found, firebase.json file processing error.\" && exit 1; fi\n _JSON_OUTPUT_BASE64=$(python3 -c 'import json,sys,base64;print(base64.b64encode(bytes(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"', '\"'rb'\"').read())['${_JSON_ROOT}']), '\"'utf-8'\"')).decode())' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.app_data_collection_default_enabled\n _APP_DATA_COLLECTION_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_data_collection_default_enabled\")\n if [[ $_APP_DATA_COLLECTION_ENABLED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseDataCollectionDefaultEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_DATA_COLLECTION_ENABLED\")\")\n fi\n\n # config.analytics_auto_collection_enabled\n _ANALYTICS_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_auto_collection_enabled\")\n if [[ $_ANALYTICS_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_COLLECTION\")\")\n fi\n\n # config.analytics_collection_deactivated\n _ANALYTICS_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_collection_deactivated\")\n if [[ $_ANALYTICS_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_DEACTIVATED\")\")\n fi\n\n # config.analytics_idfv_collection_enabled\n _ANALYTICS_IDFV_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_idfv_collection_enabled\")\n if [[ $_ANALYTICS_IDFV_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_IDFV_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_IDFV_COLLECTION\")\")\n fi\n\n # config.analytics_default_allow_analytics_storage\n _ANALYTICS_STORAGE=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_analytics_storage\")\n if [[ $_ANALYTICS_STORAGE ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_ANALYTICS_STORAGE\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_STORAGE\")\")\n fi\n\n # config.analytics_default_allow_ad_storage\n _ANALYTICS_AD_STORAGE=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_storage\")\n if [[ $_ANALYTICS_AD_STORAGE ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_STORAGE\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AD_STORAGE\")\")\n fi\n\n # config.analytics_default_allow_ad_user_data\n _ANALYTICS_AD_USER_DATA=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_user_data\")\n if [[ $_ANALYTICS_AD_USER_DATA ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_USER_DATA\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AD_USER_DATA\")\")\n fi\n\n # config.analytics_default_allow_ad_personalization_signals\n _ANALYTICS_PERSONALIZATION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_personalization_signals\")\n if [[ $_ANALYTICS_PERSONALIZATION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_PERSONALIZATION\")\")\n fi\n\n # config.analytics_registration_with_ad_network_enabled\n _ANALYTICS_REGISTRATION_WITH_AD_NETWORK=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_registration_with_ad_network_enabled\")\n if [[ $_ANALYTICS_REGISTRATION_WITH_AD_NETWORK ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_REGISTRATION_WITH_AD_NETWORK_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_REGISTRATION_WITH_AD_NETWORK\")\")\n fi\n\n # config.google_analytics_automatic_screen_reporting_enabled\n _ANALYTICS_AUTO_SCREEN_REPORTING=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_automatic_screen_reporting_enabled\")\n if [[ $_ANALYTICS_AUTO_SCREEN_REPORTING ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAutomaticScreenReportingEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_SCREEN_REPORTING\")\")\n fi\n\n # config.perf_auto_collection_enabled\n _PERF_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_auto_collection_enabled\")\n if [[ $_PERF_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_enabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_AUTO_COLLECTION\")\")\n fi\n\n # config.perf_collection_deactivated\n _PERF_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_collection_deactivated\")\n if [[ $_PERF_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_deactivated\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_DEACTIVATED\")\")\n fi\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.in_app_messaging_auto_colllection_enabled\n _FIAM_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"in_app_messaging_auto_collection_enabled\")\n if [[ $_FIAM_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseInAppMessagingAutomaticDataCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_FIAM_AUTO_INIT\")\")\n fi\n\n # config.app_check_token_auto_refresh\n _APP_CHECK_TOKEN_AUTO_REFRESH=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_check_token_auto_refresh\")\n if [[ $_APP_CHECK_TOKEN_AUTO_REFRESH ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAppCheckTokenAutoRefreshEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_CHECK_TOKEN_AUTO_REFRESH\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes useful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"FirebaseCrashlyticsCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"note: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in \"${_TARGET_PLIST}\" \"${_DSYM_PLIST}\" ; do\n if [[ -f \"${plist}\" ]]; then\n\n # paths with spaces break the call to setPlistValue. temporarily modify\n # the shell internal field separator variable (IFS), which normally\n # includes spaces, to consist only of line breaks\n oldifs=$IFS\n IFS=\"\n\"\n\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n\n # restore the original internal field separator value\n IFS=$oldifs\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"note: <- RNFB build script finished\"\n"; + }; + 856B42D9835A28587171B12F /* [CP-User] [RNFB] Crashlytics Configuration */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}", + "$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)", + ); + name = "[CP-User] [RNFB] Crashlytics Configuration"; + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\nif [[ ${PODS_ROOT} ]]; then\n echo \"info: Exec FirebaseCrashlytics Run from Pods\"\n \"${PODS_ROOT}/FirebaseCrashlytics/run\"\nelse\n echo \"info: Exec FirebaseCrashlytics Run from framework\"\n \"${PROJECT_DIR}/FirebaseCrashlytics.framework/run\"\nfi\n"; + }; + 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-BuildHarness-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-BuildHarness/Pods-BuildHarness-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-BuildHarness/Pods-BuildHarness-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-BuildHarness/Pods-BuildHarness-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 13B07F871A680F5B00A75B9A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 761780ED2CA45674006654EE /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 13B07F941A680F5B00A75B9A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-BuildHarness.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = 1; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = BuildHarness/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 = "io.invertase.react-native-demo"; + PRODUCT_NAME = BuildHarness; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 13B07F951A680F5B00A75B9A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-BuildHarness.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = 1; + INFOPLIST_FILE = BuildHarness/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 = "io.invertase.react-native-demo"; + PRODUCT_NAME = BuildHarness; + 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; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core", + "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers/platform/ios", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", + "${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios", + ); + 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; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core", + "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers/platform/ios", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", + "${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios", + ); + 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 "BuildHarness" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 13B07F941A680F5B00A75B9A /* Debug */, + 13B07F951A680F5B00A75B9A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "BuildHarness" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 83CBBA201A601CBA00E9B192 /* Debug */, + 83CBBA211A601CBA00E9B192 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; +} diff --git a/apps/build-harness/ios/BuildHarness.xcodeproj/xcshareddata/xcschemes/BuildHarness.xcscheme b/apps/build-harness/ios/BuildHarness.xcodeproj/xcshareddata/xcschemes/BuildHarness.xcscheme new file mode 100644 index 0000000000..3c976a0ac4 --- /dev/null +++ b/apps/build-harness/ios/BuildHarness.xcodeproj/xcshareddata/xcschemes/BuildHarness.xcscheme @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/build-harness/ios/BuildHarness.xcworkspace/contents.xcworkspacedata b/apps/build-harness/ios/BuildHarness.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..e20fa46695 --- /dev/null +++ b/apps/build-harness/ios/BuildHarness.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/apps/build-harness/ios/BuildHarness/AppDelegate.swift b/apps/build-harness/ios/BuildHarness/AppDelegate.swift new file mode 100644 index 0000000000..5814c077ff --- /dev/null +++ b/apps/build-harness/ios/BuildHarness/AppDelegate.swift @@ -0,0 +1,32 @@ +import UIKit +import FirebaseCore +import React +import React_RCTAppDelegate +import ReactAppDependencyProvider + +@main +class AppDelegate: RCTAppDelegate { + override func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { + self.moduleName = "BuildHarness" + self.dependencyProvider = RCTAppDependencyProvider() + FirebaseApp.configure() + + // 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 + } +} diff --git a/apps/build-harness/ios/BuildHarness/Images.xcassets/AppIcon.appiconset/Contents.json b/apps/build-harness/ios/BuildHarness/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000000..81213230de --- /dev/null +++ b/apps/build-harness/ios/BuildHarness/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/apps/build-harness/ios/BuildHarness/Images.xcassets/Contents.json b/apps/build-harness/ios/BuildHarness/Images.xcassets/Contents.json new file mode 100644 index 0000000000..2d92bd53fd --- /dev/null +++ b/apps/build-harness/ios/BuildHarness/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/apps/build-harness/ios/BuildHarness/Info.plist b/apps/build-harness/ios/BuildHarness/Info.plist new file mode 100644 index 0000000000..d534d9b3b8 --- /dev/null +++ b/apps/build-harness/ios/BuildHarness/Info.plist @@ -0,0 +1,52 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + BuildHarness + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(MARKETING_VERSION) + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + LSRequiresIPhoneOS + + NSAppTransportSecurity + + + NSAllowsArbitraryLoads + + NSAllowsLocalNetworking + + + NSLocationWhenInUseUsageDescription + + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + arm64 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + + diff --git a/apps/build-harness/ios/BuildHarness/LaunchScreen.storyboard b/apps/build-harness/ios/BuildHarness/LaunchScreen.storyboard new file mode 100644 index 0000000000..1da5449f22 --- /dev/null +++ b/apps/build-harness/ios/BuildHarness/LaunchScreen.storyboard @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/build-harness/ios/BuildHarness/PrivacyInfo.xcprivacy b/apps/build-harness/ios/BuildHarness/PrivacyInfo.xcprivacy new file mode 100644 index 0000000000..cfeff523a1 --- /dev/null +++ b/apps/build-harness/ios/BuildHarness/PrivacyInfo.xcprivacy @@ -0,0 +1,39 @@ + + + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryFileTimestamp + NSPrivacyAccessedAPITypeReasons + + C617.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPITypeReasons + + CA92.1 + 1C8F.1 + C56D.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategorySystemBootTime + NSPrivacyAccessedAPITypeReasons + + 35F9.1 + + + + NSPrivacyCollectedDataTypes + + NSPrivacyTracking + + + diff --git a/apps/build-harness/ios/Podfile b/apps/build-harness/ios/Podfile new file mode 100644 index 0000000000..1e04f81176 --- /dev/null +++ b/apps/build-harness/ios/Podfile @@ -0,0 +1,44 @@ +require 'json' + +# 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 + +app_package_path = File.join('..', 'node_modules', '@react-native-firebase', 'app', 'package.json') +app_package = JSON.parse(File.read(app_package_path)) +firebase_sdk_version = app_package['sdkVersions']['ios']['firebase'] + +if ENV['RNFB_FIREBASE_IOS_SDK'] + $FirebaseSDKVersion = ENV['RNFB_FIREBASE_IOS_SDK'] +elsif ENV['FIREBASE_SDK_VERSION'] + $FirebaseSDKVersion = ENV['FIREBASE_SDK_VERSION'] +else + $FirebaseSDKVersion = firebase_sdk_version +end + +$RNFirebaseAsStaticFramework = true +Pod::UI.puts "build-harness: Using Firebase SDK version '#{$FirebaseSDKVersion}'" + +platform :ios, min_ios_version_supported +prepare_react_native_project! +use_frameworks! :linkage => :static + +target 'BuildHarness' do + config = use_native_modules! + + use_react_native!( + :path => config[:reactNativePath], + :app_path => "#{Pod::Config.instance.installation_root}/.." + ) + + post_install do |installer| + react_native_post_install( + installer, + config[:reactNativePath], + :mac_catalyst_enabled => false, + ) + end +end diff --git a/apps/build-harness/ios/Podfile.lock b/apps/build-harness/ios/Podfile.lock new file mode 100644 index 0000000000..7a556bd284 --- /dev/null +++ b/apps/build-harness/ios/Podfile.lock @@ -0,0 +1,3861 @@ +PODS: + - abseil/algorithm (1.20240722.0): + - abseil/algorithm/algorithm (= 1.20240722.0) + - abseil/algorithm/container (= 1.20240722.0) + - abseil/algorithm/algorithm (1.20240722.0): + - abseil/base/config + - abseil/xcprivacy + - abseil/algorithm/container (1.20240722.0): + - abseil/algorithm/algorithm + - abseil/base/config + - abseil/base/core_headers + - abseil/base/nullability + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/base (1.20240722.0): + - abseil/base/atomic_hook (= 1.20240722.0) + - abseil/base/base (= 1.20240722.0) + - abseil/base/base_internal (= 1.20240722.0) + - abseil/base/config (= 1.20240722.0) + - abseil/base/core_headers (= 1.20240722.0) + - abseil/base/cycleclock_internal (= 1.20240722.0) + - abseil/base/dynamic_annotations (= 1.20240722.0) + - abseil/base/endian (= 1.20240722.0) + - abseil/base/errno_saver (= 1.20240722.0) + - abseil/base/fast_type_id (= 1.20240722.0) + - abseil/base/log_severity (= 1.20240722.0) + - abseil/base/malloc_internal (= 1.20240722.0) + - abseil/base/no_destructor (= 1.20240722.0) + - abseil/base/nullability (= 1.20240722.0) + - abseil/base/poison (= 1.20240722.0) + - abseil/base/prefetch (= 1.20240722.0) + - abseil/base/pretty_function (= 1.20240722.0) + - abseil/base/raw_logging_internal (= 1.20240722.0) + - abseil/base/spinlock_wait (= 1.20240722.0) + - abseil/base/strerror (= 1.20240722.0) + - abseil/base/throw_delegate (= 1.20240722.0) + - abseil/base/atomic_hook (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/xcprivacy + - abseil/base/base (1.20240722.0): + - abseil/base/atomic_hook + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/base/cycleclock_internal + - abseil/base/dynamic_annotations + - abseil/base/log_severity + - abseil/base/nullability + - abseil/base/raw_logging_internal + - abseil/base/spinlock_wait + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/base/base_internal (1.20240722.0): + - abseil/base/config + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/base/config (1.20240722.0): + - abseil/xcprivacy + - abseil/base/core_headers (1.20240722.0): + - abseil/base/config + - abseil/xcprivacy + - abseil/base/cycleclock_internal (1.20240722.0): + - abseil/base/base_internal + - abseil/base/config + - abseil/xcprivacy + - abseil/base/dynamic_annotations (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/xcprivacy + - abseil/base/endian (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/nullability + - abseil/xcprivacy + - abseil/base/errno_saver (1.20240722.0): + - abseil/base/config + - abseil/xcprivacy + - abseil/base/fast_type_id (1.20240722.0): + - abseil/base/config + - abseil/xcprivacy + - abseil/base/log_severity (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/xcprivacy + - abseil/base/malloc_internal (1.20240722.0): + - abseil/base/base + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/base/dynamic_annotations + - abseil/base/raw_logging_internal + - abseil/xcprivacy + - abseil/base/no_destructor (1.20240722.0): + - abseil/base/config + - abseil/base/nullability + - abseil/xcprivacy + - abseil/base/nullability (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/base/poison (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/malloc_internal + - abseil/xcprivacy + - abseil/base/prefetch (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/xcprivacy + - abseil/base/pretty_function (1.20240722.0): + - abseil/xcprivacy + - abseil/base/raw_logging_internal (1.20240722.0): + - abseil/base/atomic_hook + - abseil/base/config + - abseil/base/core_headers + - abseil/base/errno_saver + - abseil/base/log_severity + - abseil/xcprivacy + - abseil/base/spinlock_wait (1.20240722.0): + - abseil/base/base_internal + - abseil/base/core_headers + - abseil/base/errno_saver + - abseil/xcprivacy + - abseil/base/strerror (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/errno_saver + - abseil/xcprivacy + - abseil/base/throw_delegate (1.20240722.0): + - abseil/base/config + - abseil/base/raw_logging_internal + - abseil/xcprivacy + - abseil/cleanup/cleanup (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/cleanup/cleanup_internal + - abseil/xcprivacy + - abseil/cleanup/cleanup_internal (1.20240722.0): + - abseil/base/base_internal + - abseil/base/core_headers + - abseil/utility/utility + - abseil/xcprivacy + - abseil/container/common (1.20240722.0): + - abseil/meta/type_traits + - abseil/types/optional + - abseil/xcprivacy + - abseil/container/common_policy_traits (1.20240722.0): + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/container/compressed_tuple (1.20240722.0): + - abseil/utility/utility + - abseil/xcprivacy + - abseil/container/container_memory (1.20240722.0): + - abseil/base/config + - abseil/memory/memory + - abseil/meta/type_traits + - abseil/utility/utility + - abseil/xcprivacy + - abseil/container/fixed_array (1.20240722.0): + - abseil/algorithm/algorithm + - abseil/base/config + - abseil/base/core_headers + - abseil/base/dynamic_annotations + - abseil/base/throw_delegate + - abseil/container/compressed_tuple + - abseil/memory/memory + - abseil/xcprivacy + - abseil/container/flat_hash_map (1.20240722.0): + - abseil/algorithm/container + - abseil/base/core_headers + - abseil/container/container_memory + - abseil/container/hash_container_defaults + - abseil/container/raw_hash_map + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/container/flat_hash_set (1.20240722.0): + - abseil/algorithm/container + - abseil/base/core_headers + - abseil/container/container_memory + - abseil/container/hash_container_defaults + - abseil/container/raw_hash_set + - abseil/memory/memory + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/container/hash_container_defaults (1.20240722.0): + - abseil/base/config + - abseil/container/hash_function_defaults + - abseil/xcprivacy + - abseil/container/hash_function_defaults (1.20240722.0): + - abseil/base/config + - abseil/container/common + - abseil/hash/hash + - abseil/meta/type_traits + - abseil/strings/cord + - abseil/strings/strings + - abseil/xcprivacy + - abseil/container/hash_policy_traits (1.20240722.0): + - abseil/container/common_policy_traits + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/container/hashtable_debug_hooks (1.20240722.0): + - abseil/base/config + - abseil/xcprivacy + - abseil/container/hashtablez_sampler (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/no_destructor + - abseil/base/raw_logging_internal + - abseil/debugging/stacktrace + - abseil/memory/memory + - abseil/profiling/exponential_biased + - abseil/profiling/sample_recorder + - abseil/synchronization/synchronization + - abseil/time/time + - abseil/utility/utility + - abseil/xcprivacy + - abseil/container/inlined_vector (1.20240722.0): + - abseil/algorithm/algorithm + - abseil/base/core_headers + - abseil/base/throw_delegate + - abseil/container/inlined_vector_internal + - abseil/memory/memory + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/container/inlined_vector_internal (1.20240722.0): + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/container/compressed_tuple + - abseil/memory/memory + - abseil/meta/type_traits + - abseil/types/span + - abseil/xcprivacy + - abseil/container/layout (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/debugging/demangle_internal + - abseil/meta/type_traits + - abseil/strings/strings + - abseil/types/span + - abseil/utility/utility + - abseil/xcprivacy + - abseil/container/raw_hash_map (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/throw_delegate + - abseil/container/container_memory + - abseil/container/raw_hash_set + - abseil/xcprivacy + - abseil/container/raw_hash_set (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/dynamic_annotations + - abseil/base/endian + - abseil/base/prefetch + - abseil/base/raw_logging_internal + - abseil/container/common + - abseil/container/compressed_tuple + - abseil/container/container_memory + - abseil/container/hash_policy_traits + - abseil/container/hashtable_debug_hooks + - abseil/container/hashtablez_sampler + - abseil/hash/hash + - abseil/memory/memory + - abseil/meta/type_traits + - abseil/numeric/bits + - abseil/utility/utility + - abseil/xcprivacy + - abseil/crc/cpu_detect (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/xcprivacy + - abseil/crc/crc32c (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/base/prefetch + - abseil/crc/cpu_detect + - abseil/crc/crc_internal + - abseil/crc/non_temporal_memcpy + - abseil/strings/str_format + - abseil/strings/strings + - abseil/xcprivacy + - abseil/crc/crc_cord_state (1.20240722.0): + - abseil/base/config + - abseil/base/no_destructor + - abseil/crc/crc32c + - abseil/numeric/bits + - abseil/xcprivacy + - abseil/crc/crc_internal (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/base/prefetch + - abseil/base/raw_logging_internal + - abseil/crc/cpu_detect + - abseil/memory/memory + - abseil/numeric/bits + - abseil/xcprivacy + - abseil/crc/non_temporal_arm_intrinsics (1.20240722.0): + - abseil/base/config + - abseil/xcprivacy + - abseil/crc/non_temporal_memcpy (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/crc/non_temporal_arm_intrinsics + - abseil/xcprivacy + - abseil/debugging/bounded_utf8_length_sequence (1.20240722.0): + - abseil/base/config + - abseil/numeric/bits + - abseil/xcprivacy + - abseil/debugging/debugging_internal (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/dynamic_annotations + - abseil/base/errno_saver + - abseil/base/raw_logging_internal + - abseil/xcprivacy + - abseil/debugging/decode_rust_punycode (1.20240722.0): + - abseil/base/config + - abseil/base/nullability + - abseil/debugging/bounded_utf8_length_sequence + - abseil/debugging/utf8_for_code_point + - abseil/xcprivacy + - abseil/debugging/demangle_internal (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/nullability + - abseil/debugging/demangle_rust + - abseil/numeric/bits + - abseil/xcprivacy + - abseil/debugging/demangle_rust (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/debugging/decode_rust_punycode + - abseil/xcprivacy + - abseil/debugging/examine_stack (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/raw_logging_internal + - abseil/debugging/stacktrace + - abseil/debugging/symbolize + - abseil/xcprivacy + - abseil/debugging/stacktrace (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/dynamic_annotations + - abseil/base/raw_logging_internal + - abseil/debugging/debugging_internal + - abseil/xcprivacy + - abseil/debugging/symbolize (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/dynamic_annotations + - abseil/base/malloc_internal + - abseil/base/raw_logging_internal + - abseil/debugging/debugging_internal + - abseil/debugging/demangle_internal + - abseil/strings/strings + - abseil/xcprivacy + - abseil/debugging/utf8_for_code_point (1.20240722.0): + - abseil/base/config + - abseil/xcprivacy + - abseil/flags/commandlineflag (1.20240722.0): + - abseil/base/config + - abseil/base/fast_type_id + - abseil/flags/commandlineflag_internal + - abseil/strings/strings + - abseil/types/optional + - abseil/xcprivacy + - abseil/flags/commandlineflag_internal (1.20240722.0): + - abseil/base/config + - abseil/base/fast_type_id + - abseil/xcprivacy + - abseil/flags/config (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/flags/path_util + - abseil/flags/program_name + - abseil/strings/strings + - abseil/synchronization/synchronization + - abseil/xcprivacy + - abseil/flags/flag (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/flags/commandlineflag + - abseil/flags/config + - abseil/flags/flag_internal + - abseil/flags/reflection + - abseil/strings/strings + - abseil/xcprivacy + - abseil/flags/flag_internal (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/dynamic_annotations + - abseil/flags/commandlineflag + - abseil/flags/commandlineflag_internal + - abseil/flags/config + - abseil/flags/marshalling + - abseil/flags/reflection + - abseil/memory/memory + - abseil/meta/type_traits + - abseil/strings/strings + - abseil/synchronization/synchronization + - abseil/utility/utility + - abseil/xcprivacy + - abseil/flags/marshalling (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/log_severity + - abseil/numeric/int128 + - abseil/strings/str_format + - abseil/strings/strings + - abseil/types/optional + - abseil/xcprivacy + - abseil/flags/path_util (1.20240722.0): + - abseil/base/config + - abseil/strings/strings + - abseil/xcprivacy + - abseil/flags/private_handle_accessor (1.20240722.0): + - abseil/base/config + - abseil/flags/commandlineflag + - abseil/flags/commandlineflag_internal + - abseil/strings/strings + - abseil/xcprivacy + - abseil/flags/program_name (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/flags/path_util + - abseil/strings/strings + - abseil/synchronization/synchronization + - abseil/xcprivacy + - abseil/flags/reflection (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/no_destructor + - abseil/container/flat_hash_map + - abseil/flags/commandlineflag + - abseil/flags/commandlineflag_internal + - abseil/flags/config + - abseil/flags/private_handle_accessor + - abseil/strings/strings + - abseil/synchronization/synchronization + - abseil/xcprivacy + - abseil/functional/any_invocable (1.20240722.0): + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/meta/type_traits + - abseil/utility/utility + - abseil/xcprivacy + - abseil/functional/bind_front (1.20240722.0): + - abseil/base/base_internal + - abseil/container/compressed_tuple + - abseil/meta/type_traits + - abseil/utility/utility + - abseil/xcprivacy + - abseil/functional/function_ref (1.20240722.0): + - abseil/base/base_internal + - abseil/base/core_headers + - abseil/functional/any_invocable + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/hash/city (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/xcprivacy + - abseil/hash/hash (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/container/fixed_array + - abseil/functional/function_ref + - abseil/hash/city + - abseil/hash/low_level_hash + - abseil/meta/type_traits + - abseil/numeric/bits + - abseil/numeric/int128 + - abseil/strings/strings + - abseil/types/optional + - abseil/types/variant + - abseil/utility/utility + - abseil/xcprivacy + - abseil/hash/low_level_hash (1.20240722.0): + - abseil/base/config + - abseil/base/endian + - abseil/base/prefetch + - abseil/numeric/int128 + - abseil/xcprivacy + - abseil/log/absl_check (1.20240722.0): + - abseil/log/internal/check_impl + - abseil/xcprivacy + - abseil/log/absl_log (1.20240722.0): + - abseil/log/internal/log_impl + - abseil/xcprivacy + - abseil/log/absl_vlog_is_on (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/log/internal/vlog_config + - abseil/strings/strings + - abseil/xcprivacy + - abseil/log/check (1.20240722.0): + - abseil/log/internal/check_impl + - abseil/log/internal/check_op + - abseil/log/internal/conditions + - abseil/log/internal/log_message + - abseil/log/internal/strip + - abseil/xcprivacy + - abseil/log/globals (1.20240722.0): + - abseil/base/atomic_hook + - abseil/base/config + - abseil/base/core_headers + - abseil/base/log_severity + - abseil/base/raw_logging_internal + - abseil/hash/hash + - abseil/log/internal/vlog_config + - abseil/strings/strings + - abseil/xcprivacy + - abseil/log/internal/append_truncated (1.20240722.0): + - abseil/base/config + - abseil/strings/strings + - abseil/types/span + - abseil/xcprivacy + - abseil/log/internal/check_impl (1.20240722.0): + - abseil/base/core_headers + - abseil/log/internal/check_op + - abseil/log/internal/conditions + - abseil/log/internal/log_message + - abseil/log/internal/strip + - abseil/xcprivacy + - abseil/log/internal/check_op (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/log/internal/nullguard + - abseil/log/internal/nullstream + - abseil/log/internal/strip + - abseil/strings/strings + - abseil/xcprivacy + - abseil/log/internal/conditions (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/log/internal/voidify + - abseil/xcprivacy + - abseil/log/internal/config (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/xcprivacy + - abseil/log/internal/fnmatch (1.20240722.0): + - abseil/base/config + - abseil/strings/strings + - abseil/xcprivacy + - abseil/log/internal/format (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/log_severity + - abseil/log/internal/append_truncated + - abseil/log/internal/config + - abseil/log/internal/globals + - abseil/strings/str_format + - abseil/strings/strings + - abseil/time/time + - abseil/types/span + - abseil/xcprivacy + - abseil/log/internal/globals (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/log_severity + - abseil/base/raw_logging_internal + - abseil/strings/strings + - abseil/time/time + - abseil/xcprivacy + - abseil/log/internal/log_impl (1.20240722.0): + - abseil/log/absl_vlog_is_on + - abseil/log/internal/conditions + - abseil/log/internal/log_message + - abseil/log/internal/strip + - abseil/xcprivacy + - abseil/log/internal/log_message (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/errno_saver + - abseil/base/log_severity + - abseil/base/raw_logging_internal + - abseil/base/strerror + - abseil/container/inlined_vector + - abseil/debugging/examine_stack + - abseil/log/globals + - abseil/log/internal/append_truncated + - abseil/log/internal/format + - abseil/log/internal/globals + - abseil/log/internal/log_sink_set + - abseil/log/internal/nullguard + - abseil/log/internal/proto + - abseil/log/log_entry + - abseil/log/log_sink + - abseil/log/log_sink_registry + - abseil/memory/memory + - abseil/strings/strings + - abseil/time/time + - abseil/types/span + - abseil/xcprivacy + - abseil/log/internal/log_sink_set (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/log_severity + - abseil/base/no_destructor + - abseil/base/raw_logging_internal + - abseil/cleanup/cleanup + - abseil/log/globals + - abseil/log/internal/config + - abseil/log/internal/globals + - abseil/log/log_entry + - abseil/log/log_sink + - abseil/strings/strings + - abseil/synchronization/synchronization + - abseil/types/span + - abseil/xcprivacy + - abseil/log/internal/nullguard (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/xcprivacy + - abseil/log/internal/nullstream (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/log_severity + - abseil/strings/strings + - abseil/xcprivacy + - abseil/log/internal/proto (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/strings/strings + - abseil/types/span + - abseil/xcprivacy + - abseil/log/internal/strip (1.20240722.0): + - abseil/base/core_headers + - abseil/base/log_severity + - abseil/log/internal/log_message + - abseil/log/internal/nullstream + - abseil/xcprivacy + - abseil/log/internal/vlog_config (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/no_destructor + - abseil/log/internal/fnmatch + - abseil/memory/memory + - abseil/strings/strings + - abseil/synchronization/synchronization + - abseil/types/optional + - abseil/xcprivacy + - abseil/log/internal/voidify (1.20240722.0): + - abseil/base/config + - abseil/xcprivacy + - abseil/log/log (1.20240722.0): + - abseil/log/internal/log_impl + - abseil/log/vlog_is_on + - abseil/xcprivacy + - abseil/log/log_entry (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/log_severity + - abseil/log/internal/config + - abseil/strings/strings + - abseil/time/time + - abseil/types/span + - abseil/xcprivacy + - abseil/log/log_sink (1.20240722.0): + - abseil/base/config + - abseil/log/log_entry + - abseil/xcprivacy + - abseil/log/log_sink_registry (1.20240722.0): + - abseil/base/config + - abseil/log/internal/log_sink_set + - abseil/log/log_sink + - abseil/xcprivacy + - abseil/log/vlog_is_on (1.20240722.0): + - abseil/log/absl_vlog_is_on + - abseil/xcprivacy + - abseil/memory (1.20240722.0): + - abseil/memory/memory (= 1.20240722.0) + - abseil/memory/memory (1.20240722.0): + - abseil/base/core_headers + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/meta (1.20240722.0): + - abseil/meta/type_traits (= 1.20240722.0) + - abseil/meta/type_traits (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/xcprivacy + - abseil/numeric/bits (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/xcprivacy + - abseil/numeric/int128 (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/numeric/bits + - abseil/types/compare + - abseil/xcprivacy + - abseil/numeric/representation (1.20240722.0): + - abseil/base/config + - abseil/xcprivacy + - abseil/profiling/exponential_biased (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/xcprivacy + - abseil/profiling/sample_recorder (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/synchronization/synchronization + - abseil/time/time + - abseil/xcprivacy + - abseil/random/bit_gen_ref (1.20240722.0): + - abseil/base/core_headers + - abseil/base/fast_type_id + - abseil/meta/type_traits + - abseil/random/internal/distribution_caller + - abseil/random/internal/fast_uniform_bits + - abseil/random/random + - abseil/xcprivacy + - abseil/random/distributions (1.20240722.0): + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/meta/type_traits + - abseil/numeric/bits + - abseil/random/internal/distribution_caller + - abseil/random/internal/fast_uniform_bits + - abseil/random/internal/fastmath + - abseil/random/internal/generate_real + - abseil/random/internal/iostream_state_saver + - abseil/random/internal/traits + - abseil/random/internal/uniform_helper + - abseil/random/internal/wide_multiply + - abseil/strings/strings + - abseil/xcprivacy + - abseil/random/internal/distribution_caller (1.20240722.0): + - abseil/base/config + - abseil/base/fast_type_id + - abseil/utility/utility + - abseil/xcprivacy + - abseil/random/internal/fast_uniform_bits (1.20240722.0): + - abseil/base/config + - abseil/meta/type_traits + - abseil/random/internal/traits + - abseil/xcprivacy + - abseil/random/internal/fastmath (1.20240722.0): + - abseil/numeric/bits + - abseil/xcprivacy + - abseil/random/internal/generate_real (1.20240722.0): + - abseil/meta/type_traits + - abseil/numeric/bits + - abseil/random/internal/fastmath + - abseil/random/internal/traits + - abseil/xcprivacy + - abseil/random/internal/iostream_state_saver (1.20240722.0): + - abseil/meta/type_traits + - abseil/numeric/int128 + - abseil/xcprivacy + - abseil/random/internal/nonsecure_base (1.20240722.0): + - abseil/base/core_headers + - abseil/container/inlined_vector + - abseil/meta/type_traits + - abseil/random/internal/pool_urbg + - abseil/random/internal/salted_seed_seq + - abseil/random/internal/seed_material + - abseil/types/span + - abseil/xcprivacy + - abseil/random/internal/pcg_engine (1.20240722.0): + - abseil/base/config + - abseil/meta/type_traits + - abseil/numeric/bits + - abseil/numeric/int128 + - abseil/random/internal/fastmath + - abseil/random/internal/iostream_state_saver + - abseil/xcprivacy + - abseil/random/internal/platform (1.20240722.0): + - abseil/base/config + - abseil/xcprivacy + - abseil/random/internal/pool_urbg (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/base/raw_logging_internal + - abseil/random/internal/randen + - abseil/random/internal/seed_material + - abseil/random/internal/traits + - abseil/random/seed_gen_exception + - abseil/types/span + - abseil/xcprivacy + - abseil/random/internal/randen (1.20240722.0): + - abseil/base/raw_logging_internal + - abseil/random/internal/platform + - abseil/random/internal/randen_hwaes + - abseil/random/internal/randen_slow + - abseil/xcprivacy + - abseil/random/internal/randen_engine (1.20240722.0): + - abseil/base/endian + - abseil/meta/type_traits + - abseil/random/internal/iostream_state_saver + - abseil/random/internal/randen + - abseil/xcprivacy + - abseil/random/internal/randen_hwaes (1.20240722.0): + - abseil/base/config + - abseil/random/internal/platform + - abseil/random/internal/randen_hwaes_impl + - abseil/xcprivacy + - abseil/random/internal/randen_hwaes_impl (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/numeric/int128 + - abseil/random/internal/platform + - abseil/xcprivacy + - abseil/random/internal/randen_slow (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/numeric/int128 + - abseil/random/internal/platform + - abseil/xcprivacy + - abseil/random/internal/salted_seed_seq (1.20240722.0): + - abseil/container/inlined_vector + - abseil/meta/type_traits + - abseil/random/internal/seed_material + - abseil/types/optional + - abseil/types/span + - abseil/xcprivacy + - abseil/random/internal/seed_material (1.20240722.0): + - abseil/base/core_headers + - abseil/base/dynamic_annotations + - abseil/base/raw_logging_internal + - abseil/random/internal/fast_uniform_bits + - abseil/strings/strings + - abseil/types/optional + - abseil/types/span + - abseil/xcprivacy + - abseil/random/internal/traits (1.20240722.0): + - abseil/base/config + - abseil/numeric/bits + - abseil/numeric/int128 + - abseil/xcprivacy + - abseil/random/internal/uniform_helper (1.20240722.0): + - abseil/base/config + - abseil/meta/type_traits + - abseil/random/internal/traits + - abseil/xcprivacy + - abseil/random/internal/wide_multiply (1.20240722.0): + - abseil/base/config + - abseil/numeric/bits + - abseil/numeric/int128 + - abseil/random/internal/traits + - abseil/xcprivacy + - abseil/random/random (1.20240722.0): + - abseil/random/distributions + - abseil/random/internal/nonsecure_base + - abseil/random/internal/pcg_engine + - abseil/random/internal/pool_urbg + - abseil/random/internal/randen_engine + - abseil/random/seed_sequences + - abseil/xcprivacy + - abseil/random/seed_gen_exception (1.20240722.0): + - abseil/base/config + - abseil/xcprivacy + - abseil/random/seed_sequences (1.20240722.0): + - abseil/base/config + - abseil/base/nullability + - abseil/random/internal/pool_urbg + - abseil/random/internal/salted_seed_seq + - abseil/random/internal/seed_material + - abseil/random/seed_gen_exception + - abseil/strings/string_view + - abseil/types/span + - abseil/xcprivacy + - abseil/status/status (1.20240722.0): + - abseil/base/atomic_hook + - abseil/base/config + - abseil/base/core_headers + - abseil/base/no_destructor + - abseil/base/nullability + - abseil/base/raw_logging_internal + - abseil/base/strerror + - abseil/container/inlined_vector + - abseil/debugging/stacktrace + - abseil/debugging/symbolize + - abseil/functional/function_ref + - abseil/memory/memory + - abseil/strings/cord + - abseil/strings/str_format + - abseil/strings/strings + - abseil/types/optional + - abseil/types/span + - abseil/xcprivacy + - abseil/status/statusor (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/nullability + - abseil/base/raw_logging_internal + - abseil/meta/type_traits + - abseil/status/status + - abseil/strings/has_ostream_operator + - abseil/strings/str_format + - abseil/strings/strings + - abseil/types/variant + - abseil/utility/utility + - abseil/xcprivacy + - abseil/strings/charset (1.20240722.0): + - abseil/base/core_headers + - abseil/strings/string_view + - abseil/xcprivacy + - abseil/strings/cord (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/base/nullability + - abseil/base/raw_logging_internal + - abseil/container/inlined_vector + - abseil/crc/crc32c + - abseil/crc/crc_cord_state + - abseil/functional/function_ref + - abseil/meta/type_traits + - abseil/numeric/bits + - abseil/strings/cord_internal + - abseil/strings/cordz_functions + - abseil/strings/cordz_info + - abseil/strings/cordz_statistics + - abseil/strings/cordz_update_scope + - abseil/strings/cordz_update_tracker + - abseil/strings/internal + - abseil/strings/strings + - abseil/types/compare + - abseil/types/optional + - abseil/types/span + - abseil/xcprivacy + - abseil/strings/cord_internal (1.20240722.0): + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/base/raw_logging_internal + - abseil/base/throw_delegate + - abseil/container/compressed_tuple + - abseil/container/container_memory + - abseil/container/inlined_vector + - abseil/container/layout + - abseil/crc/crc_cord_state + - abseil/functional/function_ref + - abseil/meta/type_traits + - abseil/strings/strings + - abseil/types/span + - abseil/xcprivacy + - abseil/strings/cordz_functions (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/raw_logging_internal + - abseil/profiling/exponential_biased + - abseil/xcprivacy + - abseil/strings/cordz_handle (1.20240722.0): + - abseil/base/config + - abseil/base/no_destructor + - abseil/base/raw_logging_internal + - abseil/synchronization/synchronization + - abseil/xcprivacy + - abseil/strings/cordz_info (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/raw_logging_internal + - abseil/container/inlined_vector + - abseil/debugging/stacktrace + - abseil/strings/cord_internal + - abseil/strings/cordz_functions + - abseil/strings/cordz_handle + - abseil/strings/cordz_statistics + - abseil/strings/cordz_update_tracker + - abseil/synchronization/synchronization + - abseil/time/time + - abseil/types/span + - abseil/xcprivacy + - abseil/strings/cordz_statistics (1.20240722.0): + - abseil/base/config + - abseil/strings/cordz_update_tracker + - abseil/xcprivacy + - abseil/strings/cordz_update_scope (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/strings/cord_internal + - abseil/strings/cordz_info + - abseil/strings/cordz_update_tracker + - abseil/xcprivacy + - abseil/strings/cordz_update_tracker (1.20240722.0): + - abseil/base/config + - abseil/xcprivacy + - abseil/strings/has_ostream_operator (1.20240722.0): + - abseil/base/config + - abseil/xcprivacy + - abseil/strings/internal (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/base/raw_logging_internal + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/strings/str_format (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/nullability + - abseil/strings/str_format_internal + - abseil/strings/string_view + - abseil/types/span + - abseil/xcprivacy + - abseil/strings/str_format_internal (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/container/fixed_array + - abseil/container/inlined_vector + - abseil/functional/function_ref + - abseil/meta/type_traits + - abseil/numeric/bits + - abseil/numeric/int128 + - abseil/numeric/representation + - abseil/strings/strings + - abseil/types/optional + - abseil/types/span + - abseil/utility/utility + - abseil/xcprivacy + - abseil/strings/string_view (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/nullability + - abseil/base/throw_delegate + - abseil/xcprivacy + - abseil/strings/strings (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/base/nullability + - abseil/base/raw_logging_internal + - abseil/base/throw_delegate + - abseil/memory/memory + - abseil/meta/type_traits + - abseil/numeric/bits + - abseil/numeric/int128 + - abseil/strings/charset + - abseil/strings/internal + - abseil/strings/string_view + - abseil/xcprivacy + - abseil/synchronization/graphcycles_internal (1.20240722.0): + - abseil/base/base + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/base/malloc_internal + - abseil/base/raw_logging_internal + - abseil/xcprivacy + - abseil/synchronization/kernel_timeout_internal (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/raw_logging_internal + - abseil/time/time + - abseil/xcprivacy + - abseil/synchronization/synchronization (1.20240722.0): + - abseil/base/atomic_hook + - abseil/base/base + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/base/dynamic_annotations + - abseil/base/malloc_internal + - abseil/base/raw_logging_internal + - abseil/debugging/stacktrace + - abseil/debugging/symbolize + - abseil/synchronization/graphcycles_internal + - abseil/synchronization/kernel_timeout_internal + - abseil/time/time + - abseil/xcprivacy + - abseil/time (1.20240722.0): + - abseil/time/internal (= 1.20240722.0) + - abseil/time/time (= 1.20240722.0) + - abseil/time/internal (1.20240722.0): + - abseil/time/internal/cctz (= 1.20240722.0) + - abseil/time/internal/cctz (1.20240722.0): + - abseil/time/internal/cctz/civil_time (= 1.20240722.0) + - abseil/time/internal/cctz/time_zone (= 1.20240722.0) + - abseil/time/internal/cctz/civil_time (1.20240722.0): + - abseil/base/config + - abseil/xcprivacy + - abseil/time/internal/cctz/time_zone (1.20240722.0): + - abseil/base/config + - abseil/time/internal/cctz/civil_time + - abseil/xcprivacy + - abseil/time/time (1.20240722.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/raw_logging_internal + - abseil/numeric/int128 + - abseil/strings/strings + - abseil/time/internal/cctz/civil_time + - abseil/time/internal/cctz/time_zone + - abseil/types/optional + - abseil/xcprivacy + - abseil/types (1.20240722.0): + - abseil/types/any (= 1.20240722.0) + - abseil/types/bad_any_cast (= 1.20240722.0) + - abseil/types/bad_any_cast_impl (= 1.20240722.0) + - abseil/types/bad_optional_access (= 1.20240722.0) + - abseil/types/bad_variant_access (= 1.20240722.0) + - abseil/types/compare (= 1.20240722.0) + - abseil/types/optional (= 1.20240722.0) + - abseil/types/span (= 1.20240722.0) + - abseil/types/variant (= 1.20240722.0) + - abseil/types/any (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/fast_type_id + - abseil/meta/type_traits + - abseil/types/bad_any_cast + - abseil/utility/utility + - abseil/xcprivacy + - abseil/types/bad_any_cast (1.20240722.0): + - abseil/base/config + - abseil/types/bad_any_cast_impl + - abseil/xcprivacy + - abseil/types/bad_any_cast_impl (1.20240722.0): + - abseil/base/config + - abseil/base/raw_logging_internal + - abseil/xcprivacy + - abseil/types/bad_optional_access (1.20240722.0): + - abseil/base/config + - abseil/base/raw_logging_internal + - abseil/xcprivacy + - abseil/types/bad_variant_access (1.20240722.0): + - abseil/base/config + - abseil/base/raw_logging_internal + - abseil/xcprivacy + - abseil/types/compare (1.20240722.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/types/optional (1.20240722.0): + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/base/nullability + - abseil/memory/memory + - abseil/meta/type_traits + - abseil/types/bad_optional_access + - abseil/utility/utility + - abseil/xcprivacy + - abseil/types/span (1.20240722.0): + - abseil/algorithm/algorithm + - abseil/base/core_headers + - abseil/base/nullability + - abseil/base/throw_delegate + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/types/variant (1.20240722.0): + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/meta/type_traits + - abseil/types/bad_variant_access + - abseil/utility/utility + - abseil/xcprivacy + - abseil/utility/utility (1.20240722.0): + - abseil/base/base_internal + - abseil/base/config + - abseil/meta/type_traits + - abseil/xcprivacy + - abseil/xcprivacy (1.20240722.0) + - AppCheckCore (11.2.0): + - GoogleUtilities/Environment (~> 8.0) + - GoogleUtilities/UserDefaults (~> 8.0) + - PromisesObjC (~> 2.4) + - boost (1.84.0) + - BoringSSL-GRPC (0.0.37): + - BoringSSL-GRPC/Implementation (= 0.0.37) + - BoringSSL-GRPC/Interface (= 0.0.37) + - BoringSSL-GRPC/Implementation (0.0.37): + - BoringSSL-GRPC/Interface (= 0.0.37) + - BoringSSL-GRPC/Interface (0.0.37) + - DoubleConversion (1.1.6) + - fast_float (6.1.4) + - FBLazyVector (0.78.3) + - Firebase/AppCheck (12.12.0): + - Firebase/CoreOnly + - FirebaseAppCheck (~> 12.12.0) + - Firebase/AppDistribution (12.12.0): + - Firebase/CoreOnly + - FirebaseAppDistribution (~> 12.12.0-beta) + - Firebase/Auth (12.12.0): + - Firebase/CoreOnly + - FirebaseAuth (~> 12.12.0) + - Firebase/CoreOnly (12.12.0): + - FirebaseCore (~> 12.12.0) + - Firebase/Crashlytics (12.12.0): + - Firebase/CoreOnly + - FirebaseCrashlytics (~> 12.12.0) + - Firebase/Database (12.12.0): + - Firebase/CoreOnly + - FirebaseDatabase (~> 12.12.0) + - Firebase/Firestore (12.12.0): + - Firebase/CoreOnly + - FirebaseFirestore (~> 12.12.0) + - Firebase/Functions (12.12.0): + - Firebase/CoreOnly + - FirebaseFunctions (~> 12.12.0) + - Firebase/InAppMessaging (12.12.0): + - Firebase/CoreOnly + - FirebaseInAppMessaging (~> 12.12.0-beta) + - Firebase/Installations (12.12.0): + - Firebase/CoreOnly + - FirebaseInstallations (~> 12.12.0) + - Firebase/Messaging (12.12.0): + - Firebase/CoreOnly + - FirebaseMessaging (~> 12.12.0) + - Firebase/Performance (12.12.0): + - Firebase/CoreOnly + - FirebasePerformance (~> 12.12.0) + - Firebase/RemoteConfig (12.12.0): + - Firebase/CoreOnly + - FirebaseRemoteConfig (~> 12.12.0) + - Firebase/Storage (12.12.0): + - Firebase/CoreOnly + - FirebaseStorage (~> 12.12.0) + - FirebaseABTesting (12.12.0): + - FirebaseCore (~> 12.12.0) + - FirebaseAnalytics/Core (12.12.0): + - FirebaseCore (~> 12.12.0) + - FirebaseInstallations (~> 12.12.0) + - GoogleAppMeasurement/Core (= 12.12.0) + - GoogleUtilities/AppDelegateSwizzler (~> 8.1) + - GoogleUtilities/MethodSwizzler (~> 8.1) + - GoogleUtilities/Network (~> 8.1) + - "GoogleUtilities/NSData+zlib (~> 8.1)" + - nanopb (~> 3.30910.0) + - FirebaseAnalytics/IdentitySupport (12.12.0): + - FirebaseCore (~> 12.12.0) + - FirebaseInstallations (~> 12.12.0) + - GoogleAppMeasurement/IdentitySupport (= 12.12.0) + - GoogleUtilities/AppDelegateSwizzler (~> 8.1) + - GoogleUtilities/MethodSwizzler (~> 8.1) + - GoogleUtilities/Network (~> 8.1) + - "GoogleUtilities/NSData+zlib (~> 8.1)" + - nanopb (~> 3.30910.0) + - FirebaseAppCheck (12.12.0): + - AppCheckCore (~> 11.0) + - FirebaseAppCheckInterop (~> 12.12.0) + - FirebaseCore (~> 12.12.0) + - GoogleUtilities/Environment (~> 8.1) + - GoogleUtilities/UserDefaults (~> 8.1) + - FirebaseAppCheckInterop (12.12.0) + - FirebaseAppDistribution (12.12.0-beta): + - FirebaseCore (~> 12.12.0) + - FirebaseInstallations (~> 12.12.0) + - GoogleUtilities/AppDelegateSwizzler (~> 8.1) + - GoogleUtilities/UserDefaults (~> 8.1) + - FirebaseAuth (12.12.0): + - FirebaseAppCheckInterop (~> 12.12.0) + - FirebaseAuthInterop (~> 12.12.0) + - FirebaseCore (~> 12.12.0) + - FirebaseCoreExtension (~> 12.12.0) + - GoogleUtilities/AppDelegateSwizzler (~> 8.1) + - GoogleUtilities/Environment (~> 8.1) + - GTMSessionFetcher/Core (< 6.0, >= 3.4) + - RecaptchaInterop (~> 101.0) + - FirebaseAuthInterop (12.12.0) + - FirebaseCore (12.12.1): + - FirebaseCoreInternal (~> 12.12.0) + - GoogleUtilities/Environment (~> 8.1) + - GoogleUtilities/Logger (~> 8.1) + - FirebaseCoreExtension (12.12.0): + - FirebaseCore (~> 12.12.0) + - FirebaseCoreInternal (12.12.0): + - "GoogleUtilities/NSData+zlib (~> 8.1)" + - FirebaseCrashlytics (12.12.1): + - FirebaseCore (~> 12.12.0) + - FirebaseInstallations (~> 12.12.0) + - FirebaseRemoteConfigInterop (~> 12.12.0) + - FirebaseSessions (~> 12.12.0) + - GoogleDataTransport (~> 10.1) + - GoogleUtilities/Environment (~> 8.1) + - nanopb (~> 3.30910.0) + - PromisesObjC (~> 2.4) + - FirebaseDatabase (12.12.0): + - FirebaseAppCheckInterop (~> 12.12.0) + - FirebaseCore (~> 12.12.0) + - FirebaseSharedSwift (~> 12.12.0) + - GoogleUtilities/UserDefaults (~> 8.1) + - leveldb-library (~> 1.22) + - FirebaseFirestore (12.12.0): + - FirebaseCore (~> 12.12.0) + - FirebaseCoreExtension (~> 12.12.0) + - FirebaseFirestoreInternal (~> 12.12.0) + - FirebaseSharedSwift (~> 12.12.0) + - FirebaseFirestoreInternal (12.12.0): + - abseil/algorithm (~> 1.20240722.0) + - abseil/base (~> 1.20240722.0) + - abseil/container/flat_hash_map (~> 1.20240722.0) + - abseil/memory (~> 1.20240722.0) + - abseil/meta (~> 1.20240722.0) + - abseil/strings/strings (~> 1.20240722.0) + - abseil/time (~> 1.20240722.0) + - abseil/types (~> 1.20240722.0) + - FirebaseAppCheckInterop (~> 12.12.0) + - FirebaseCore (~> 12.12.0) + - "gRPC-C++ (~> 1.69.0)" + - gRPC-Core (~> 1.69.0) + - leveldb-library (~> 1.22) + - nanopb (~> 3.30910.0) + - FirebaseFunctions (12.12.0): + - FirebaseAppCheckInterop (~> 12.12.0) + - FirebaseAuthInterop (~> 12.12.0) + - FirebaseCore (~> 12.12.0) + - FirebaseCoreExtension (~> 12.12.0) + - FirebaseMessagingInterop (~> 12.12.0) + - FirebaseSharedSwift (~> 12.12.0) + - GTMSessionFetcher/Core (< 6.0, >= 3.4) + - FirebaseInAppMessaging (12.12.0-beta): + - FirebaseABTesting (~> 12.12.0) + - FirebaseCore (~> 12.12.0) + - FirebaseInstallations (~> 12.12.0) + - GoogleUtilities/Environment (~> 8.1) + - GoogleUtilities/UserDefaults (~> 8.1) + - nanopb (~> 3.30910.0) + - FirebaseInstallations (12.12.0): + - FirebaseCore (~> 12.12.0) + - GoogleUtilities/Environment (~> 8.1) + - GoogleUtilities/UserDefaults (~> 8.1) + - PromisesObjC (~> 2.4) + - FirebaseMessaging (12.12.0): + - FirebaseCore (~> 12.12.0) + - FirebaseInstallations (~> 12.12.0) + - GoogleDataTransport (~> 10.1) + - GoogleUtilities/AppDelegateSwizzler (~> 8.1) + - GoogleUtilities/Environment (~> 8.1) + - GoogleUtilities/Reachability (~> 8.1) + - GoogleUtilities/UserDefaults (~> 8.1) + - nanopb (~> 3.30910.0) + - FirebaseMessagingInterop (12.12.0) + - FirebasePerformance (12.12.0): + - FirebaseCore (~> 12.12.0) + - FirebaseInstallations (~> 12.12.0) + - FirebaseRemoteConfig (~> 12.12.0) + - FirebaseSessions (~> 12.12.0) + - GoogleDataTransport (~> 10.1) + - GoogleUtilities/Environment (~> 8.1) + - GoogleUtilities/MethodSwizzler (~> 8.1) + - GoogleUtilities/UserDefaults (~> 8.1) + - nanopb (~> 3.30910.0) + - FirebaseRemoteConfig (12.12.0): + - FirebaseABTesting (~> 12.12.0) + - FirebaseCore (~> 12.12.0) + - FirebaseInstallations (~> 12.12.0) + - FirebaseRemoteConfigInterop (~> 12.12.0) + - FirebaseSharedSwift (~> 12.12.0) + - GoogleUtilities/Environment (~> 8.1) + - "GoogleUtilities/NSData+zlib (~> 8.1)" + - FirebaseRemoteConfigInterop (12.12.0) + - FirebaseSessions (12.12.0): + - FirebaseCore (~> 12.12.0) + - FirebaseCoreExtension (~> 12.12.0) + - FirebaseInstallations (~> 12.12.0) + - GoogleDataTransport (~> 10.1) + - GoogleUtilities/Environment (~> 8.1) + - GoogleUtilities/UserDefaults (~> 8.1) + - nanopb (~> 3.30910.0) + - PromisesSwift (~> 2.1) + - FirebaseSharedSwift (12.12.0) + - FirebaseStorage (12.12.1): + - FirebaseAppCheckInterop (~> 12.12.0) + - FirebaseAuthInterop (~> 12.12.0) + - FirebaseCore (~> 12.12.0) + - FirebaseCoreExtension (~> 12.12.0) + - GoogleUtilities/Environment (~> 8.1) + - GTMSessionFetcher/Core (< 6.0, >= 3.4) + - fmt (12.1.0) + - glog (0.3.5) + - GoogleAppMeasurement/Core (12.12.0): + - GoogleUtilities/AppDelegateSwizzler (~> 8.1) + - GoogleUtilities/MethodSwizzler (~> 8.1) + - GoogleUtilities/Network (~> 8.1) + - "GoogleUtilities/NSData+zlib (~> 8.1)" + - nanopb (~> 3.30910.0) + - GoogleAppMeasurement/IdentitySupport (12.12.0): + - GoogleAppMeasurement/Core (= 12.12.0) + - GoogleUtilities/AppDelegateSwizzler (~> 8.1) + - GoogleUtilities/MethodSwizzler (~> 8.1) + - GoogleUtilities/Network (~> 8.1) + - "GoogleUtilities/NSData+zlib (~> 8.1)" + - nanopb (~> 3.30910.0) + - GoogleDataTransport (10.1.0): + - nanopb (~> 3.30910.0) + - PromisesObjC (~> 2.4) + - GoogleUtilities/AppDelegateSwizzler (8.1.0): + - GoogleUtilities/Environment + - GoogleUtilities/Logger + - GoogleUtilities/Network + - GoogleUtilities/Privacy + - GoogleUtilities/Environment (8.1.0): + - GoogleUtilities/Privacy + - GoogleUtilities/Logger (8.1.0): + - GoogleUtilities/Environment + - GoogleUtilities/Privacy + - GoogleUtilities/MethodSwizzler (8.1.0): + - GoogleUtilities/Logger + - GoogleUtilities/Privacy + - GoogleUtilities/Network (8.1.0): + - GoogleUtilities/Logger + - "GoogleUtilities/NSData+zlib" + - GoogleUtilities/Privacy + - GoogleUtilities/Reachability + - "GoogleUtilities/NSData+zlib (8.1.0)": + - GoogleUtilities/Privacy + - GoogleUtilities/Privacy (8.1.0) + - GoogleUtilities/Reachability (8.1.0): + - GoogleUtilities/Logger + - GoogleUtilities/Privacy + - GoogleUtilities/UserDefaults (8.1.0): + - GoogleUtilities/Logger + - GoogleUtilities/Privacy + - "gRPC-C++ (1.69.0)": + - "gRPC-C++/Implementation (= 1.69.0)" + - "gRPC-C++/Interface (= 1.69.0)" + - "gRPC-C++/Implementation (1.69.0)": + - abseil/algorithm/container (~> 1.20240722.0) + - abseil/base/base (~> 1.20240722.0) + - abseil/base/config (~> 1.20240722.0) + - abseil/base/core_headers (~> 1.20240722.0) + - abseil/base/log_severity (~> 1.20240722.0) + - abseil/base/no_destructor (~> 1.20240722.0) + - abseil/cleanup/cleanup (~> 1.20240722.0) + - abseil/container/flat_hash_map (~> 1.20240722.0) + - abseil/container/flat_hash_set (~> 1.20240722.0) + - abseil/container/inlined_vector (~> 1.20240722.0) + - abseil/flags/flag (~> 1.20240722.0) + - abseil/flags/marshalling (~> 1.20240722.0) + - abseil/functional/any_invocable (~> 1.20240722.0) + - abseil/functional/bind_front (~> 1.20240722.0) + - abseil/functional/function_ref (~> 1.20240722.0) + - abseil/hash/hash (~> 1.20240722.0) + - abseil/log/absl_check (~> 1.20240722.0) + - abseil/log/absl_log (~> 1.20240722.0) + - abseil/log/check (~> 1.20240722.0) + - abseil/log/globals (~> 1.20240722.0) + - abseil/log/log (~> 1.20240722.0) + - abseil/memory/memory (~> 1.20240722.0) + - abseil/meta/type_traits (~> 1.20240722.0) + - abseil/numeric/bits (~> 1.20240722.0) + - abseil/random/bit_gen_ref (~> 1.20240722.0) + - abseil/random/distributions (~> 1.20240722.0) + - abseil/random/random (~> 1.20240722.0) + - abseil/status/status (~> 1.20240722.0) + - abseil/status/statusor (~> 1.20240722.0) + - abseil/strings/cord (~> 1.20240722.0) + - abseil/strings/str_format (~> 1.20240722.0) + - abseil/strings/strings (~> 1.20240722.0) + - abseil/synchronization/synchronization (~> 1.20240722.0) + - abseil/time/time (~> 1.20240722.0) + - abseil/types/optional (~> 1.20240722.0) + - abseil/types/span (~> 1.20240722.0) + - abseil/types/variant (~> 1.20240722.0) + - abseil/utility/utility (~> 1.20240722.0) + - "gRPC-C++/Interface (= 1.69.0)" + - "gRPC-C++/Privacy (= 1.69.0)" + - gRPC-Core (= 1.69.0) + - "gRPC-C++/Interface (1.69.0)" + - "gRPC-C++/Privacy (1.69.0)" + - gRPC-Core (1.69.0): + - gRPC-Core/Implementation (= 1.69.0) + - gRPC-Core/Interface (= 1.69.0) + - gRPC-Core/Implementation (1.69.0): + - abseil/algorithm/container (~> 1.20240722.0) + - abseil/base/base (~> 1.20240722.0) + - abseil/base/config (~> 1.20240722.0) + - abseil/base/core_headers (~> 1.20240722.0) + - abseil/base/log_severity (~> 1.20240722.0) + - abseil/base/no_destructor (~> 1.20240722.0) + - abseil/cleanup/cleanup (~> 1.20240722.0) + - abseil/container/flat_hash_map (~> 1.20240722.0) + - abseil/container/flat_hash_set (~> 1.20240722.0) + - abseil/container/inlined_vector (~> 1.20240722.0) + - abseil/flags/flag (~> 1.20240722.0) + - abseil/flags/marshalling (~> 1.20240722.0) + - abseil/functional/any_invocable (~> 1.20240722.0) + - abseil/functional/bind_front (~> 1.20240722.0) + - abseil/functional/function_ref (~> 1.20240722.0) + - abseil/hash/hash (~> 1.20240722.0) + - abseil/log/check (~> 1.20240722.0) + - abseil/log/globals (~> 1.20240722.0) + - abseil/log/log (~> 1.20240722.0) + - abseil/memory/memory (~> 1.20240722.0) + - abseil/meta/type_traits (~> 1.20240722.0) + - abseil/numeric/bits (~> 1.20240722.0) + - abseil/random/bit_gen_ref (~> 1.20240722.0) + - abseil/random/distributions (~> 1.20240722.0) + - abseil/random/random (~> 1.20240722.0) + - abseil/status/status (~> 1.20240722.0) + - abseil/status/statusor (~> 1.20240722.0) + - abseil/strings/cord (~> 1.20240722.0) + - abseil/strings/str_format (~> 1.20240722.0) + - abseil/strings/strings (~> 1.20240722.0) + - abseil/synchronization/synchronization (~> 1.20240722.0) + - abseil/time/time (~> 1.20240722.0) + - abseil/types/optional (~> 1.20240722.0) + - abseil/types/span (~> 1.20240722.0) + - abseil/types/variant (~> 1.20240722.0) + - abseil/utility/utility (~> 1.20240722.0) + - BoringSSL-GRPC (= 0.0.37) + - gRPC-Core/Interface (= 1.69.0) + - gRPC-Core/Privacy (= 1.69.0) + - gRPC-Core/Interface (1.69.0) + - gRPC-Core/Privacy (1.69.0) + - GTMSessionFetcher/Core (5.2.0) + - hermes-engine (0.78.3): + - hermes-engine/Pre-built (= 0.78.3) + - hermes-engine/Pre-built (0.78.3) + - leveldb-library (1.22.6) + - nanopb (3.30910.0): + - nanopb/decode (= 3.30910.0) + - nanopb/encode (= 3.30910.0) + - nanopb/decode (3.30910.0) + - nanopb/encode (3.30910.0) + - PromisesObjC (2.4.0) + - PromisesSwift (2.4.0): + - PromisesObjC (= 2.4.0) + - RCT-Folly (2024.11.18.00): + - boost + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - glog + - RCT-Folly/Default (= 2024.11.18.00) + - RCT-Folly/Default (2024.11.18.00): + - boost + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - glog + - RCT-Folly/Fabric (2024.11.18.00): + - boost + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - glog + - RCTDeprecation (0.78.3) + - RCTRequired (0.78.3) + - RCTTypeSafety (0.78.3): + - FBLazyVector (= 0.78.3) + - RCTRequired (= 0.78.3) + - React-Core (= 0.78.3) + - React (0.78.3): + - React-Core (= 0.78.3) + - React-Core/DevSupport (= 0.78.3) + - React-Core/RCTWebSocket (= 0.78.3) + - React-RCTActionSheet (= 0.78.3) + - React-RCTAnimation (= 0.78.3) + - React-RCTBlob (= 0.78.3) + - React-RCTImage (= 0.78.3) + - React-RCTLinking (= 0.78.3) + - React-RCTNetwork (= 0.78.3) + - React-RCTSettings (= 0.78.3) + - React-RCTText (= 0.78.3) + - React-RCTVibration (= 0.78.3) + - React-callinvoker (0.78.3) + - React-Core (0.78.3): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation + - React-Core/Default (= 0.78.3) + - 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.3): + - 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.3): + - 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.3): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation + - React-Core/Default (= 0.78.3) + - React-Core/RCTWebSocket (= 0.78.3) + - 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.3): + - 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.3): + - 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.3): + - 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.3): + - 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.3): + - 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.3): + - 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.3): + - 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.3): + - 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.3): + - 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.3): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTDeprecation + - React-Core/Default (= 0.78.3) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - RCT-Folly (= 2024.11.18.00) + - RCTTypeSafety (= 0.78.3) + - React-Core/CoreModulesHeaders (= 0.78.3) + - React-jsi (= 0.78.3) + - React-jsinspector + - React-NativeModulesApple + - React-RCTBlob + - React-RCTFBReactNativeSpec + - React-RCTImage (= 0.78.3) + - ReactCommon + - SocketRocket (= 0.7.1) + - React-cxxreact (0.78.3): + - boost + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-callinvoker (= 0.78.3) + - React-debug (= 0.78.3) + - React-jsi (= 0.78.3) + - React-jsinspector + - React-logger (= 0.78.3) + - React-perflogger (= 0.78.3) + - React-runtimeexecutor (= 0.78.3) + - React-timing (= 0.78.3) + - React-debug (0.78.3) + - React-defaultsnativemodule (0.78.3): + - hermes-engine + - RCT-Folly + - React-domnativemodule + - React-featureflagsnativemodule + - React-idlecallbacksnativemodule + - React-jsi + - React-jsiexecutor + - React-microtasksnativemodule + - React-RCTFBReactNativeSpec + - React-domnativemodule (0.78.3): + - hermes-engine + - RCT-Folly + - React-Fabric + - React-FabricComponents + - React-graphics + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - ReactCommon/turbomodule/core + - Yoga + - React-Fabric (0.78.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/animations (= 0.78.3) + - React-Fabric/attributedstring (= 0.78.3) + - React-Fabric/componentregistry (= 0.78.3) + - React-Fabric/componentregistrynative (= 0.78.3) + - React-Fabric/components (= 0.78.3) + - React-Fabric/consistency (= 0.78.3) + - React-Fabric/core (= 0.78.3) + - React-Fabric/dom (= 0.78.3) + - React-Fabric/imagemanager (= 0.78.3) + - React-Fabric/leakchecker (= 0.78.3) + - React-Fabric/mounting (= 0.78.3) + - React-Fabric/observers (= 0.78.3) + - React-Fabric/scheduler (= 0.78.3) + - React-Fabric/telemetry (= 0.78.3) + - React-Fabric/templateprocessor (= 0.78.3) + - React-Fabric/uimanager (= 0.78.3) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/animations (0.78.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/components/legacyviewmanagerinterop (= 0.78.3) + - React-Fabric/components/root (= 0.78.3) + - React-Fabric/components/view (= 0.78.3) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/observers/events (= 0.78.3) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/uimanager/consistency (= 0.78.3) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3) + - React-FabricComponents/textlayoutmanager (= 0.78.3) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3) + - React-FabricComponents/components/iostextinput (= 0.78.3) + - React-FabricComponents/components/modal (= 0.78.3) + - React-FabricComponents/components/rncore (= 0.78.3) + - React-FabricComponents/components/safeareaview (= 0.78.3) + - React-FabricComponents/components/scrollview (= 0.78.3) + - React-FabricComponents/components/text (= 0.78.3) + - React-FabricComponents/components/textinput (= 0.78.3) + - React-FabricComponents/components/unimplementedview (= 0.78.3) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired (= 0.78.3) + - RCTTypeSafety (= 0.78.3) + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-jsiexecutor (= 0.78.3) + - React-logger + - React-rendererdebug + - React-utils + - ReactCommon + - Yoga + - React-featureflags (0.78.3): + - RCT-Folly (= 2024.11.18.00) + - React-featureflagsnativemodule (0.78.3): + - hermes-engine + - RCT-Folly + - React-featureflags + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - ReactCommon/turbomodule/core + - React-graphics (0.78.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.11.18.00) + - React-jsi + - React-jsiexecutor + - React-utils + - React-hermes (0.78.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-cxxreact (= 0.78.3) + - React-jsi + - React-jsiexecutor (= 0.78.3) + - React-jsinspector + - React-perflogger (= 0.78.3) + - React-runtimeexecutor + - React-idlecallbacksnativemodule (0.78.3): + - glog + - hermes-engine + - RCT-Folly + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - React-runtimescheduler + - ReactCommon/turbomodule/core + - React-ImageManager (0.78.3): + - glog + - RCT-Folly/Fabric + - React-Core/Default + - React-debug + - React-Fabric + - React-graphics + - React-rendererdebug + - React-utils + - React-jserrorhandler (0.78.3): + - 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.3): + - boost + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-jsiexecutor (0.78.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-cxxreact (= 0.78.3) + - React-jsi (= 0.78.3) + - React-jsinspector + - React-perflogger (= 0.78.3) + - React-jsinspector (0.78.3): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly + - React-featureflags + - React-jsi + - React-jsinspectortracing + - React-perflogger (= 0.78.3) + - React-runtimeexecutor (= 0.78.3) + - React-jsinspectortracing (0.78.3): + - RCT-Folly + - React-jsitracing (0.78.3): + - React-jsi + - React-logger (0.78.3): + - glog + - React-Mapbuffer (0.78.3): + - glog + - React-debug + - React-microtasksnativemodule (0.78.3): + - hermes-engine + - RCT-Folly + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - ReactCommon/turbomodule/core + - React-NativeModulesApple (0.78.3): + - 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.3): + - DoubleConversion + - RCT-Folly (= 2024.11.18.00) + - React-performancetimeline (0.78.3): + - RCT-Folly (= 2024.11.18.00) + - React-cxxreact + - React-featureflags + - React-jsinspectortracing + - React-timing + - React-RCTActionSheet (0.78.3): + - React-Core/RCTActionSheetHeaders (= 0.78.3) + - React-RCTAnimation (0.78.3): + - RCT-Folly (= 2024.11.18.00) + - RCTTypeSafety + - React-Core/RCTAnimationHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - React-RCTAppDelegate (0.78.3): + - 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.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - 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.3): + - 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.3): + - hermes-engine + - RCT-Folly + - RCTRequired + - RCTTypeSafety + - React-Core + - React-jsi + - React-jsiexecutor + - React-NativeModulesApple + - ReactCommon + - React-RCTImage (0.78.3): + - RCT-Folly (= 2024.11.18.00) + - RCTTypeSafety + - React-Core/RCTImageHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - React-RCTNetwork + - ReactCommon + - React-RCTLinking (0.78.3): + - React-Core/RCTLinkingHeaders (= 0.78.3) + - React-jsi (= 0.78.3) + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - ReactCommon/turbomodule/core (= 0.78.3) + - React-RCTNetwork (0.78.3): + - RCT-Folly (= 2024.11.18.00) + - RCTTypeSafety + - React-Core/RCTNetworkHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - React-RCTSettings (0.78.3): + - RCT-Folly (= 2024.11.18.00) + - RCTTypeSafety + - React-Core/RCTSettingsHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - React-RCTText (0.78.3): + - React-Core/RCTTextHeaders (= 0.78.3) + - Yoga + - React-RCTVibration (0.78.3): + - RCT-Folly (= 2024.11.18.00) + - React-Core/RCTVibrationHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - React-rendererconsistency (0.78.3) + - React-rendererdebug (0.78.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - RCT-Folly (= 2024.11.18.00) + - React-debug + - React-rncore (0.78.3) + - React-RuntimeApple (0.78.3): + - 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.3): + - 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.3): + - React-jsi (= 0.78.3) + - React-RuntimeHermes (0.78.3): + - 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.3): + - 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.3) + - React-utils (0.78.3): + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-debug + - React-jsi (= 0.78.3) + - ReactAppDependencyProvider (0.78.3): + - ReactCodegen + - ReactCodegen (0.78.3): + - 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.3): + - ReactCommon/turbomodule (= 0.78.3) + - ReactCommon/turbomodule (0.78.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-callinvoker (= 0.78.3) + - React-cxxreact (= 0.78.3) + - React-jsi (= 0.78.3) + - React-logger (= 0.78.3) + - React-perflogger (= 0.78.3) + - ReactCommon/turbomodule/bridging (= 0.78.3) + - ReactCommon/turbomodule/core (= 0.78.3) + - ReactCommon/turbomodule/bridging (0.78.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-callinvoker (= 0.78.3) + - React-cxxreact (= 0.78.3) + - React-jsi (= 0.78.3) + - React-logger (= 0.78.3) + - React-perflogger (= 0.78.3) + - ReactCommon/turbomodule/core (0.78.3): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 12.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-callinvoker (= 0.78.3) + - React-cxxreact (= 0.78.3) + - React-debug (= 0.78.3) + - React-featureflags (= 0.78.3) + - React-jsi (= 0.78.3) + - React-logger (= 0.78.3) + - React-perflogger (= 0.78.3) + - React-utils (= 0.78.3) + - RecaptchaInterop (101.0.0) + - RNFBAnalytics (24.0.0): + - DoubleConversion + - FirebaseAnalytics/Core (= 12.12.0) + - FirebaseAnalytics/IdentitySupport (= 12.12.0) + - 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 + - RNFBApp + - Yoga + - RNFBApp (24.0.0): + - DoubleConversion + - Firebase/CoreOnly (= 12.12.0) + - 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 + - RNFBAppCheck (24.0.0): + - DoubleConversion + - Firebase/AppCheck (= 12.12.0) + - 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 + - RNFBApp + - Yoga + - RNFBAppDistribution (24.0.0): + - DoubleConversion + - Firebase/AppDistribution (= 12.12.0) + - 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 + - RNFBApp + - Yoga + - RNFBAuth (24.0.0): + - DoubleConversion + - Firebase/Auth (= 12.12.0) + - 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 + - RNFBApp + - Yoga + - RNFBCrashlytics (24.0.0): + - DoubleConversion + - Firebase/Crashlytics (= 12.12.0) + - FirebaseCoreExtension + - 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 + - RNFBApp + - Yoga + - RNFBDatabase (24.0.0): + - DoubleConversion + - Firebase/Database (= 12.12.0) + - 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 + - RNFBApp + - Yoga + - RNFBFirestore (24.0.0): + - DoubleConversion + - Firebase/Firestore (= 12.12.0) + - 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 + - RNFBApp + - Yoga + - RNFBFunctions (24.0.0): + - DoubleConversion + - Firebase/Functions (= 12.12.0) + - 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 + - RNFBApp + - Yoga + - RNFBInAppMessaging (24.0.0): + - DoubleConversion + - Firebase/InAppMessaging (= 12.12.0) + - 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 + - RNFBApp + - Yoga + - RNFBInstallations (24.0.0): + - DoubleConversion + - Firebase/Installations (= 12.12.0) + - 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 + - RNFBApp + - Yoga + - RNFBMessaging (24.0.0): + - DoubleConversion + - Firebase/Messaging (= 12.12.0) + - FirebaseCoreExtension + - 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 + - RNFBApp + - Yoga + - RNFBML (24.0.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 + - RNFBApp + - Yoga + - RNFBPerf (24.0.0): + - DoubleConversion + - Firebase/Performance (= 12.12.0) + - 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 + - RNFBApp + - Yoga + - RNFBRemoteConfig (24.0.0): + - DoubleConversion + - Firebase/RemoteConfig (= 12.12.0) + - 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 + - RNFBApp + - Yoga + - RNFBStorage (24.0.0): + - DoubleConversion + - Firebase/Storage (= 12.12.0) + - 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 + - RNFBApp + - Yoga + - SocketRocket (0.7.1) + - Yoga (0.0.0) + +DEPENDENCIES: + - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) + - 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-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`) + - "RNFBAnalytics (from `../node_modules/@react-native-firebase/analytics`)" + - "RNFBApp (from `../node_modules/@react-native-firebase/app`)" + - "RNFBAppCheck (from `../node_modules/@react-native-firebase/app-check`)" + - "RNFBAppDistribution (from `../node_modules/@react-native-firebase/app-distribution`)" + - "RNFBAuth (from `../node_modules/@react-native-firebase/auth`)" + - "RNFBCrashlytics (from `../node_modules/@react-native-firebase/crashlytics`)" + - "RNFBDatabase (from `../node_modules/@react-native-firebase/database`)" + - "RNFBFirestore (from `../node_modules/@react-native-firebase/firestore`)" + - "RNFBFunctions (from `../node_modules/@react-native-firebase/functions`)" + - "RNFBInAppMessaging (from `../node_modules/@react-native-firebase/in-app-messaging`)" + - "RNFBInstallations (from `../node_modules/@react-native-firebase/installations`)" + - "RNFBMessaging (from `../node_modules/@react-native-firebase/messaging`)" + - "RNFBML (from `../node_modules/@react-native-firebase/ml`)" + - "RNFBPerf (from `../node_modules/@react-native-firebase/perf`)" + - "RNFBRemoteConfig (from `../node_modules/@react-native-firebase/remote-config`)" + - "RNFBStorage (from `../node_modules/@react-native-firebase/storage`)" + - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) + +SPEC REPOS: + trunk: + - abseil + - AppCheckCore + - BoringSSL-GRPC + - Firebase + - FirebaseABTesting + - FirebaseAnalytics + - FirebaseAppCheck + - FirebaseAppCheckInterop + - FirebaseAppDistribution + - FirebaseAuth + - FirebaseAuthInterop + - FirebaseCore + - FirebaseCoreExtension + - FirebaseCoreInternal + - FirebaseCrashlytics + - FirebaseDatabase + - FirebaseFirestore + - FirebaseFirestoreInternal + - FirebaseFunctions + - FirebaseInAppMessaging + - FirebaseInstallations + - FirebaseMessaging + - FirebaseMessagingInterop + - FirebasePerformance + - FirebaseRemoteConfig + - FirebaseRemoteConfigInterop + - FirebaseSessions + - FirebaseSharedSwift + - FirebaseStorage + - GoogleAppMeasurement + - GoogleDataTransport + - GoogleUtilities + - "gRPC-C++" + - gRPC-Core + - GTMSessionFetcher + - leveldb-library + - nanopb + - PromisesObjC + - PromisesSwift + - RecaptchaInterop + - SocketRocket + +EXTERNAL SOURCES: + boost: + :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" + 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-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" + RNFBAnalytics: + :path: "../node_modules/@react-native-firebase/analytics" + RNFBApp: + :path: "../node_modules/@react-native-firebase/app" + RNFBAppCheck: + :path: "../node_modules/@react-native-firebase/app-check" + RNFBAppDistribution: + :path: "../node_modules/@react-native-firebase/app-distribution" + RNFBAuth: + :path: "../node_modules/@react-native-firebase/auth" + RNFBCrashlytics: + :path: "../node_modules/@react-native-firebase/crashlytics" + RNFBDatabase: + :path: "../node_modules/@react-native-firebase/database" + RNFBFirestore: + :path: "../node_modules/@react-native-firebase/firestore" + RNFBFunctions: + :path: "../node_modules/@react-native-firebase/functions" + RNFBInAppMessaging: + :path: "../node_modules/@react-native-firebase/in-app-messaging" + RNFBInstallations: + :path: "../node_modules/@react-native-firebase/installations" + RNFBMessaging: + :path: "../node_modules/@react-native-firebase/messaging" + RNFBML: + :path: "../node_modules/@react-native-firebase/ml" + RNFBPerf: + :path: "../node_modules/@react-native-firebase/perf" + RNFBRemoteConfig: + :path: "../node_modules/@react-native-firebase/remote-config" + RNFBStorage: + :path: "../node_modules/@react-native-firebase/storage" + Yoga: + :path: "../node_modules/react-native/ReactCommon/yoga" + +SPEC CHECKSUMS: + abseil: a05cc83bf02079535e17169a73c5be5ba47f714b + AppCheckCore: cc8fd0a3a230ddd401f326489c99990b013f0c4f + boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 + BoringSSL-GRPC: dded2a44897e45f28f08ae87a55ee4bcd19bc508 + DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb + fast_float: 06eeec4fe712a76acc9376682e4808b05ce978b6 + FBLazyVector: e053802577a711add20e45bbbf5dd1180b6ca62e + Firebase: aa154fee4e9b8eac17aa42344988865b3e857d33 + FirebaseABTesting: c21a401a23c2eaa6f520d19febcd4911312b545f + FirebaseAnalytics: db0dca7e35a503ddf6869e457f4926dc35afe216 + FirebaseAppCheck: 0194af00329809d8ce918b5244edc18edbd5b4e0 + FirebaseAppCheckInterop: c63ae0d003274f145174849c545ab861593beaf9 + FirebaseAppDistribution: bde0843fa08f318d678db932b1b05c9254259a3f + FirebaseAuth: bcfebbc0ca055a6335f2252a90e57363d7ea5e65 + FirebaseAuthInterop: 917aa3a17ecf144d5f1823b51ef372da06909a4b + FirebaseCore: 86241206e656f5c80c995e370e6c975913b9b284 + FirebaseCoreExtension: ff6fd42eb5287e71d3e160450de6509733d9ead7 + FirebaseCoreInternal: 7c12fc3011d889085e765e317d7b9fd1cef97af9 + FirebaseCrashlytics: 03f4e20d0c9b7fd6338cb9066f4bfb69d3f42fd0 + FirebaseDatabase: 00d7d9fc5347273620a40807fa2d7bd5001a6b77 + FirebaseFirestore: 01e964d312cf17e56925c955b19798848775a7fd + FirebaseFirestoreInternal: 9d9fd7eadbe0f19310fd7df06470a04baeaf3f36 + FirebaseFunctions: 63768746c276d799807347fdb8f0b057898a5792 + FirebaseInAppMessaging: 218067ce6a1a76f5a5d97a25aaf6ccc44c385d6c + FirebaseInstallations: 4e6e162aa4abaaeeeb01dd00179dfc5ad9c2194e + FirebaseMessaging: 341004946fa7ffc741344b20f1b667514fc93e31 + FirebaseMessagingInterop: bcf56f6a07054150163621d62676e34edab5d5eb + FirebasePerformance: e2c141a45116f71edfd178c944b0062477f8cbfe + FirebaseRemoteConfig: 6ab95b4ee5fd4a94d09a704d88f5341db5713250 + FirebaseRemoteConfigInterop: 23996ab7397494722df4fdd1fd398024389d5da8 + FirebaseSessions: 804bd321f2d2f2ddafe74ef7856062aa19f179c2 + FirebaseSharedSwift: bccaff90721d14bafc14be34f28b77fdd7c91dc9 + FirebaseStorage: b3682c96ae7016420c1f6eb43d45057a0e909c9f + fmt: 530618a01105dae0fa3a2f27c81ae11fa8f67eac + glog: eb93e2f488219332457c3c4eafd2738ddc7e80b8 + GoogleAppMeasurement: 3b4687de50ab25ee2d4d541849f10ca8df862a12 + GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 + GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 + "gRPC-C++": cc207623316fb041a7a3e774c252cf68a058b9e8 + gRPC-Core: 860978b7db482de8b4f5e10677216309b5ff6330 + GTMSessionFetcher: 904bdd2a82c635bcd6f44edf94cc8775c5d1d6e6 + hermes-engine: b5c9cfbe6415f1b0b24759f2942c8f33e9af6347 + leveldb-library: cc8b8f8e013647a295ad3f8cd2ddf49a6f19be19 + nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 + PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 + PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851 + RCT-Folly: d533c1d21249a85e67a4be97f4d793665de0222e + RCTDeprecation: cf39863b43871c2031050605fb884019b6193910 + RCTRequired: 8fdd66f4a97f352b66f38cfef13fc11b12d2c884 + RCTTypeSafety: c9c9e64389bc545fc137030615b387ef1654dcee + React: 14a80ea4f13387cfdaa4250b46fbfe19754c220c + React-callinvoker: fed1dad5d6cf992c7b4b5fdbf1bf67fe2e8fb6c5 + React-Core: f703e7a56fcedc3e959b8b7899995e57fd58539a + React-CoreModules: 945ed8a2827720af6852b97c8ddd2ac2ceb04157 + React-cxxreact: 26c744a099a29f2f995f9bb4b755d8ecbf7c5392 + React-debug: a665bbe67eb786b7a7a815ce1b7212b3f9fa962c + React-defaultsnativemodule: 7e4a2c2b13ec2943f2f3b8adec32130443909de6 + React-domnativemodule: dffaa482180243bd1e2b7fba329fd4adc12a2445 + React-Fabric: 37160a25edcb01c72b66562a2ad200667609412d + React-FabricComponents: 8c69a05e36b7f73341e95011a5e9571e92c67cf2 + React-FabricImage: c8870f298331e4c2cf9c3114265aef27d9bb3ba2 + React-featureflags: 55800b546a28b63a8a0f419e1a45871d43523d32 + React-featureflagsnativemodule: a0ea334fdd3342a2e4dc05085c3e7653e16839d3 + React-graphics: 705f31502711f1214ef58274162a6d61ec8c1191 + React-hermes: 1ee5a6b835bc939b7aba500cb716a1095b3e0959 + React-idlecallbacksnativemodule: 74d091304aad1ceb0c5b86e5dec14372fcdc0f34 + React-ImageManager: 6b2a95469d9a126f14410bbe10fb7378d37ed0e0 + React-jserrorhandler: 2643140639cbf047bf45f5c1a3ea95b04d748582 + React-jsi: 0810ff01e7f73a1cfba83d176e21c29302f6f3aa + React-jsiexecutor: 70f6865d195eba534f39ac9504a9aa178e5389f7 + React-jsinspector: 6d768dfb189027f7ff2161be31ccd69215426ded + React-jsinspectortracing: a6a70eb5c9d767d99391d0373330a7239fb6f9d0 + React-jsitracing: 69280997c7a80ac0af62b95f01a241d68581fb52 + React-logger: e6c3c1b55c18cc1b945b647ff9ada53e0e710b50 + React-Mapbuffer: 57bea44149376ecf1241dd9f02a6222adab43e57 + React-microtasksnativemodule: 2739fc8a8cb99486820c933ce560791c93be5337 + React-NativeModulesApple: 4849912ee050e6ae346f5789bd631570580d8b84 + React-perflogger: 069d41f741187be92ed46c6ac67add03b99f3166 + React-performancetimeline: eda794c5007eb6834e13bc6026a879b5f6d49c74 + React-RCTActionSheet: a078d5008632fed31b0024c420ee02e612b317d5 + React-RCTAnimation: 82e31d191af4175e0c2df5bdac2c8569a5f3ab54 + React-RCTAppDelegate: a5c1ff79f5987462b4f62b27387459ba84012439 + React-RCTBlob: 605c283c68fee9e095206fefbfe69d0d23df1a00 + React-RCTFabric: 56b946204edb5d563885b3b045bdacbb387b27e7 + React-RCTFBReactNativeSpec: 8392ef66ad156cfa848546859bbff3b5e8a09458 + React-RCTImage: 10fad63f1bb8adbd519c4c2ef6bec3c0d95fdd32 + React-RCTLinking: 3843288a44dc33ec083c843f3ff31dd7d96ece41 + React-RCTNetwork: f237299bda8bbd56c4d01d2825110e40b75c438a + React-RCTSettings: c24ce1ee96c9b001ff5059ddd53412a20b7d5e71 + React-RCTText: d97cfb9c89b06de9530577dd43f178c47ea07853 + React-RCTVibration: 2fcefee071a4f0d416e4368416bb073ea6893451 + React-rendererconsistency: c9f31b6d55877c5d49d25d69270b89f9cb208e26 + React-rendererdebug: 1de2a6279dbd8a149522ec8ac683f80a2b144995 + React-rncore: 90e637179a4ce46643d445a9ef16f53af02a8d25 + React-RuntimeApple: 713b7c24b3abed07fa39766b35deaabd679ba48e + React-RuntimeCore: 236d704919077fd3393a26fd0ecbaecc081ec94f + React-runtimeexecutor: 2de0d537fc6d5b4a7074587b4459ea331c7e5715 + React-RuntimeHermes: 3e87ad8c5160c976addacd679774a5e4fdb3c4b4 + React-runtimescheduler: bafaf0af0f68bd761d63ff4de3bf13e391820f79 + React-timing: 7ad7dc61dfc93ceb4ec2b3e6d1a6ad9ad3652fe0 + React-utils: cf358d29b6802cca3d1bec20a939f2f5d50d40ba + ReactAppDependencyProvider: ad88c80e06f29900f2e6f9ccf1d4cb0bfc3e1bbc + ReactCodegen: 69c7aec61821e1860aaaf959189218ecca40e811 + ReactCommon: 0df51c56138bd6f6bfd027e91eda0e3a4e3233eb + RecaptchaInterop: 11e0b637842dfb48308d242afc3f448062325aba + RNFBAnalytics: 1cc08671bb08fdb729dc75599bb8a5513720aff0 + RNFBApp: 818f158459a87d8471a72a9c8b91cad623d48a71 + RNFBAppCheck: c7d2734141c5142a2907495d757ae88271990e52 + RNFBAppDistribution: 74522ad34578b891673d0500f91b7c8b8726092f + RNFBAuth: 6949c3d014848e0029814239b5e68f7a0413e501 + RNFBCrashlytics: 03ff45cfddbffe6a2e8470ad22f11b0465beff20 + RNFBDatabase: 123c18f30c110ac819afac86f0803f6a235dac22 + RNFBFirestore: b200dd831c238f2532c59f35f3a154862e2a6be7 + RNFBFunctions: 2aaf1786b20fd65c20bedcc641da81d6fe4aae53 + RNFBInAppMessaging: 4781bb73ae20d6a60819abc38034744f11b9d02c + RNFBInstallations: 89b6c37501c721ab80fad99b59e3a2331f46df08 + RNFBMessaging: feaac3e04367c184b358ad972b457a92dfae20db + RNFBML: 59dca5be9205221748755eb27bff6e6a4819f0e7 + RNFBPerf: e7080d7dcb90721ec7b55c0f67e188a5eb9cb718 + RNFBRemoteConfig: a9ffda5845d4386b97216b9fd8ce8725c59bcdf6 + RNFBStorage: b838e33e6d52c0eda6117ff3ded40d518fd3e13e + SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 + Yoga: 3bb1ee33b5133befbd33872601fa46efdd48e841 + +PODFILE CHECKSUM: 0974127853eb761d6d6d2a1c3641171a36676e74 + +COCOAPODS: 1.15.2 diff --git a/apps/build-harness/jest.config.js b/apps/build-harness/jest.config.js new file mode 100644 index 0000000000..8eb675e9bc --- /dev/null +++ b/apps/build-harness/jest.config.js @@ -0,0 +1,3 @@ +module.exports = { + preset: 'react-native', +}; diff --git a/apps/build-harness/metro.config.js b/apps/build-harness/metro.config.js new file mode 100644 index 0000000000..fe6c903669 --- /dev/null +++ b/apps/build-harness/metro.config.js @@ -0,0 +1,74 @@ +const {getDefaultConfig, mergeConfig} = require('@react-native/metro-config'); +const {existsSync, readFileSync, readdirSync, statSync} = require('fs'); +const {join, resolve} = require('path'); + +const rootDir = resolve(__dirname, '../..'); +const packagesDir = resolve(rootDir, 'packages'); +const localConfigPath = resolve(__dirname, '.build-harness.local.json'); + +let rnfbSource = 'workspace'; +if (existsSync(localConfigPath)) { + try { + const localConfig = JSON.parse(readFileSync(localConfigPath, 'utf8')); + if (localConfig.rnfbSource === 'published') { + rnfbSource = 'published'; + } + } catch (_error) { + // Fall back to workspace mode when the local config is missing or invalid. + } +} + +const firebasePackages = readdirSync(packagesDir) + .map(name => join(packagesDir, name)) + .filter(source => statSync(source).isDirectory()); + +const config = { + projectRoot: __dirname, + resolver: { + extraNodeModules: new Proxy( + {}, + { + get: (_, name) => { + if ( + rnfbSource === 'workspace' && + typeof name === 'string' && + name.startsWith('@react-native-firebase/') + ) { + return join( + rootDir, + 'packages', + name.replace('@react-native-firebase/', ''), + ); + } + return join(__dirname, 'node_modules', String(name)); + }, + }, + ), + resolveRequest(context, moduleName, platform) { + if ( + rnfbSource === 'workspace' && + moduleName === '@react-native-firebase/firestore/pipelines' + ) { + return { + type: 'sourceFile', + filePath: join( + rootDir, + 'packages', + 'firestore', + 'lib', + 'pipelines', + 'index.ts', + ), + }; + } + + return context.resolveRequest(context, moduleName, platform); + }, + }, + watchFolders: + rnfbSource === 'workspace' + ? [resolve(__dirname, '.'), ...firebasePackages] + : [resolve(__dirname, '.')], +}; + +module.exports = mergeConfig(getDefaultConfig(__dirname), config); diff --git a/apps/build-harness/package.json b/apps/build-harness/package.json new file mode 100644 index 0000000000..857c6f8548 --- /dev/null +++ b/apps/build-harness/package.json @@ -0,0 +1,59 @@ +{ + "name": "@rnfirebase/build-harness", + "version": "0.0.1", + "private": true, + "scripts": { + "android": "react-native run-android", + "ios": "react-native run-ios", + "lint": "eslint .", + "pod-install": "cd ios && bundle exec pod install", + "start": "react-native start", + "start:reset": "react-native start --reset-cache", + "test": "jest" + }, + "dependencies": { + "@react-native-firebase/ai": "workspace:*", + "@react-native-firebase/analytics": "workspace:*", + "@react-native-firebase/app": "workspace:*", + "@react-native-firebase/app-check": "workspace:*", + "@react-native-firebase/app-distribution": "workspace:*", + "@react-native-firebase/auth": "workspace:*", + "@react-native-firebase/crashlytics": "workspace:*", + "@react-native-firebase/database": "workspace:*", + "@react-native-firebase/firestore": "workspace:*", + "@react-native-firebase/functions": "workspace:*", + "@react-native-firebase/in-app-messaging": "workspace:*", + "@react-native-firebase/installations": "workspace:*", + "@react-native-firebase/messaging": "workspace:*", + "@react-native-firebase/ml": "workspace:*", + "@react-native-firebase/perf": "workspace:*", + "@react-native-firebase/remote-config": "workspace:*", + "@react-native-firebase/storage": "workspace:*", + "firebase": "12.12.0", + "react": "19.0.0", + "react-native": "0.78.3" + }, + "devDependencies": { + "@babel/core": "^7.25.2", + "@babel/preset-env": "^7.25.3", + "@babel/runtime": "^7.25.0", + "@react-native-community/cli": "15.0.1", + "@react-native-community/cli-platform-android": "15.0.1", + "@react-native-community/cli-platform-ios": "15.0.1", + "@react-native/babel-preset": "0.78.3", + "@react-native/eslint-config": "0.78.3", + "@react-native/metro-config": "0.78.3", + "@react-native/typescript-config": "0.78.3", + "@types/jest": "^29.5.13", + "@types/react": "^19.0.0", + "@types/react-test-renderer": "^19.0.0", + "eslint": "^8.19.0", + "jest": "^29.6.3", + "prettier": "2.8.8", + "react-test-renderer": "19.0.0", + "typescript": "5.0.4" + }, + "engines": { + "node": ">=18" + } +} diff --git a/apps/build-harness/react-native.config.js b/apps/build-harness/react-native.config.js new file mode 100644 index 0000000000..b5edc32527 --- /dev/null +++ b/apps/build-harness/react-native.config.js @@ -0,0 +1,11 @@ +module.exports = { + reactNativePath: './node_modules/react-native', + project: { + android: { + sourceDir: './android', + }, + ios: { + sourceDir: './ios', + }, + }, +}; diff --git a/apps/build-harness/tsconfig.json b/apps/build-harness/tsconfig.json new file mode 100644 index 0000000000..304ab4e2d8 --- /dev/null +++ b/apps/build-harness/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "@react-native/typescript-config/tsconfig.json" +} diff --git a/package.json b/package.json index 7b0bb8851c..3216f6a854 100644 --- a/package.json +++ b/package.json @@ -64,6 +64,19 @@ "tests:macos:manual": "cd tests && yarn react-native run-macos", "tests:macos:test": "cd tests && npx jet --target=macos --coverage", "tests:macos:test-cover": "cd tests && npx jet --target=macos --coverage", + "app:doctor": "bash ./scripts/sync-build-harness.sh doctor", + "app:sync": "bash ./scripts/sync-build-harness.sh sync", + "app:clean": "bash ./scripts/sync-build-harness.sh clean", + "app:pod:install": "bash ./scripts/sync-build-harness.sh pod-install", + "app:start": "cd apps/build-harness && yarn react-native start --reset-cache", + "app:ios": "bash ./scripts/sync-build-harness.sh build-ios", + "app:android": "bash ./scripts/sync-build-harness.sh build-android", + "app:expo:doctor": "bash ./scripts/sync-build-harness-expo.sh doctor", + "app:expo:sync": "bash ./scripts/sync-build-harness-expo.sh sync", + "app:expo:clean": "bash ./scripts/sync-build-harness-expo.sh clean", + "app:expo:start": "bash ./scripts/sync-build-harness-expo.sh start", + "app:ios:expo": "bash ./scripts/sync-build-harness-expo.sh build-ios", + "app:android:expo": "bash ./scripts/sync-build-harness-expo.sh build-android", "format:js": "prettier --write \"packages/**/*.{js,ts,tsx}\"", "format:markdown": "prettier --write \"docs/**/*.md[x]\"" }, @@ -120,7 +133,8 @@ "workspaces": { "packages": [ "packages/*", - "tests" + "tests", + "apps/*" ] }, "packageManager": "yarn@4.12.0" diff --git a/scripts/build-harness-common.sh b/scripts/build-harness-common.sh new file mode 100644 index 0000000000..f332ef6783 --- /dev/null +++ b/scripts/build-harness-common.sh @@ -0,0 +1,379 @@ +#!/usr/bin/env bash + +HARNESS_DEFAULT_IOS_GOOGLE_SERVICES_PATH="${HOME}/Downloads/GoogleService-Info.plist" +HARNESS_DEFAULT_ANDROID_GOOGLE_SERVICES_PATH="${HOME}/Downloads/google-services.json" +HARNESS_DEFAULT_IOS_BUNDLE_ID="io.invertase.react-native-demo" +HARNESS_DEFAULT_ANDROID_APPLICATION_ID="com.invertase.testing" + +HARNESS_RNFB_PACKAGE_NAMES=( + ai + analytics + app + app-check + app-distribution + auth + crashlytics + database + firestore + functions + in-app-messaging + installations + messaging + ml + perf + remote-config + storage +) + +harness_die() { + echo "build-harness: $*" >&2 + exit 1 +} + +harness_read_repo_defaults() { + local repo_root="$1" + + while IFS='=' read -r key value; do + case "${key}" in + firebaseJs) REPO_FIREBASE_JS_VERSION="${value}" ;; + firebaseIos) REPO_FIREBASE_IOS_VERSION="${value}" ;; + firebaseAndroidBom) REPO_FIREBASE_ANDROID_BOM="${value}" ;; + googleServicesGradle) REPO_GOOGLE_SERVICES_GRADLE_VERSION="${value}" ;; + crashlyticsGradle) REPO_CRASHLYTICS_GRADLE_VERSION="${value}" ;; + perfGradle) REPO_PERF_GRADLE_VERSION="${value}" ;; + appDistributionGradle) REPO_APP_DISTRIBUTION_GRADLE_VERSION="${value}" ;; + esac + done < <( + node - "${repo_root}" <<'NODE' +const fs = require('fs'); +const path = require('path'); +const repoRoot = process.argv[2]; +const pkg = JSON.parse( + fs.readFileSync(path.join(repoRoot, 'packages', 'app', 'package.json'), 'utf8'), +); +const android = pkg.sdkVersions.android; +console.log(`firebaseJs=${pkg.dependencies.firebase}`); +console.log(`firebaseIos=${pkg.sdkVersions.ios.firebase}`); +console.log(`firebaseAndroidBom=${android.firebase}`); +console.log(`googleServicesGradle=${android.gmsGoogleServicesGradle}`); +console.log(`crashlyticsGradle=${android.firebaseCrashlyticsGradle}`); +console.log(`perfGradle=${android.firebasePerfGradle}`); +console.log(`appDistributionGradle=${android.firebaseAppDistributionGradle}`); +NODE + ) + + [[ -n "${REPO_FIREBASE_JS_VERSION:-}" ]] || harness_die "failed to read firebase JS version from packages/app/package.json" + [[ -n "${REPO_FIREBASE_IOS_VERSION:-}" ]] || harness_die "failed to read firebase iOS version from packages/app/package.json" + [[ -n "${REPO_FIREBASE_ANDROID_BOM:-}" ]] || harness_die "failed to read firebase Android BOM from packages/app/package.json" + [[ -n "${REPO_GOOGLE_SERVICES_GRADLE_VERSION:-}" ]] || harness_die "failed to read Google Services Gradle version from packages/app/package.json" + [[ -n "${REPO_CRASHLYTICS_GRADLE_VERSION:-}" ]] || harness_die "failed to read Crashlytics Gradle version from packages/app/package.json" + [[ -n "${REPO_PERF_GRADLE_VERSION:-}" ]] || harness_die "failed to read Perf Gradle version from packages/app/package.json" + [[ -n "${REPO_APP_DISTRIBUTION_GRADLE_VERSION:-}" ]] || harness_die "failed to read App Distribution Gradle version from packages/app/package.json" +} + +harness_load_local_config() { + local local_config_path="$1" + + if [[ ! -f "${local_config_path}" ]]; then + return + fi + + while IFS=$'\t' read -r key value; do + case "${key}" in + rnfbSource) LOCAL_RNFB_SOURCE="${value}" ;; + rnfbVersion) LOCAL_RNFB_VERSION="${value}" ;; + reactNativeVersion) LOCAL_REACT_NATIVE_VERSION="${value}" ;; + reactVersion) LOCAL_REACT_VERSION="${value}" ;; + firebaseJsVersion) LOCAL_FIREBASE_JS_VERSION="${value}" ;; + firebaseIosVersion) LOCAL_FIREBASE_IOS_VERSION="${value}" ;; + firebaseAndroidBom) LOCAL_FIREBASE_ANDROID_BOM="${value}" ;; + googleServicesGradleVersion) LOCAL_GOOGLE_SERVICES_GRADLE_VERSION="${value}" ;; + crashlyticsGradleVersion) LOCAL_CRASHLYTICS_GRADLE_VERSION="${value}" ;; + perfGradleVersion) LOCAL_PERF_GRADLE_VERSION="${value}" ;; + appDistributionGradleVersion) LOCAL_APP_DISTRIBUTION_GRADLE_VERSION="${value}" ;; + iosGoogleServicesPath) LOCAL_IOS_GOOGLE_SERVICES_PATH="${value}" ;; + androidGoogleServicesPath) LOCAL_ANDROID_GOOGLE_SERVICES_PATH="${value}" ;; + iosBundleId) LOCAL_IOS_BUNDLE_ID="${value}" ;; + androidApplicationId) LOCAL_ANDROID_APPLICATION_ID="${value}" ;; + esac + done < <( + node - "${local_config_path}" <<'NODE' +const fs = require('fs'); +const configPath = process.argv[2]; +const config = JSON.parse(fs.readFileSync(configPath, 'utf8')); +for (const [key, value] of Object.entries(config)) { + if (value !== undefined && value !== null && value !== '') { + console.log(`${key}\t${value}`); + } +} +NODE + ) +} + +harness_detect_ios_bundle_id() { + local plist_path="$1" + if [[ -f "${plist_path}" && "$(uname)" == "Darwin" ]]; then + /usr/libexec/PlistBuddy -c "Print BUNDLE_ID" "${plist_path}" 2>/dev/null || true + fi +} + +harness_detect_android_application_id() { + local json_path="$1" + if [[ ! -f "${json_path}" ]]; then + return + fi + + node - "${json_path}" <<'NODE' +const fs = require('fs'); +const configPath = process.argv[2]; +try { + const json = JSON.parse(fs.readFileSync(configPath, 'utf8')); + const packages = (json.client || []) + .map(client => client.client_info?.android_client_info?.package_name) + .filter(Boolean); + + const preferred = packages.find(name => name === 'com.invertase.testing'); + process.stdout.write(preferred || packages[0] || ''); +} catch (error) { + console.error(`Invalid google-services.json at ${configPath}: ${error.message}`); + process.exit(1); +} +NODE +} + +harness_print_ruby_prereq_status() { + local app_dir="$1" + local gemfile_lock_path="${app_dir}/Gemfile.lock" + local ruby_path="" + local ruby_version="" + local bundle_path="" + local bundle_version="" + local required_bundler_version="" + + if command -v ruby >/dev/null 2>&1; then + ruby_path="$(command -v ruby)" + ruby_version="$(ruby --version 2>/dev/null | awk '{print $2}')" + if [[ "${ruby_path}" == "${HOME}"/.rbenv/shims/* ]]; then + echo " ruby: ok (${ruby_version} via rbenv)" + elif [[ "${ruby_path}" == "/usr/bin/ruby" || "${ruby_path}" == /System/* ]]; then + echo " ruby: ok (${ruby_version} via system Ruby; user-managed Ruby like rbenv recommended)" + else + echo " ruby: ok (${ruby_version} at ${ruby_path})" + fi + else + echo " ruby: missing" + return + fi + + if command -v bundle >/dev/null 2>&1; then + bundle_path="$(command -v bundle)" + bundle_version="$(bundle --version 2>/dev/null | awk '{print $3}')" + fi + + if [[ -f "${gemfile_lock_path}" ]]; then + required_bundler_version="$( + awk ' + /^BUNDLED WITH$/ { + getline + gsub(/^[[:space:]]+/, "", $0) + print $0 + } + ' "${gemfile_lock_path}" + )" + fi + + if [[ -z "${bundle_path}" || -z "${bundle_version}" ]]; then + if [[ -n "${required_bundler_version}" ]]; then + echo " bundle: missing (need ${required_bundler_version} from ${gemfile_lock_path})" + else + echo " bundle: missing" + fi + return + fi + + if [[ -n "${required_bundler_version}" && "${bundle_version}" != "${required_bundler_version}" ]]; then + echo " bundle: mismatch (have ${bundle_version}, need ${required_bundler_version} from ${gemfile_lock_path})" + else + if [[ "${bundle_path}" == "${HOME}"/.rbenv/shims/* ]]; then + echo " bundle: ok (${bundle_version} via rbenv)" + else + echo " bundle: ok (${bundle_version})" + fi + fi +} + +harness_write_local_config() { + local local_config_path="$1" + + node - "${local_config_path}" <<'NODE' +const fs = require('fs'); +const outputPath = process.argv[2]; +const env = process.env; +const config = {}; +const assignIfDifferent = (key, value, baseline) => { + if (value && value !== baseline) { + config[key] = value; + } +}; + +if (env.RNFB_SOURCE === 'published') { + config.rnfbSource = env.RNFB_SOURCE; +} +if (env.RNFB_VERSION) { + config.rnfbVersion = env.RNFB_VERSION; +} +if (env.REACT_NATIVE_VERSION) { + config.reactNativeVersion = env.REACT_NATIVE_VERSION; +} +if (env.REACT_VERSION) { + config.reactVersion = env.REACT_VERSION; +} + +assignIfDifferent('firebaseJsVersion', env.FIREBASE_JS_VERSION, env.REPO_FIREBASE_JS_VERSION); +assignIfDifferent('firebaseIosVersion', env.FIREBASE_IOS_VERSION, env.REPO_FIREBASE_IOS_VERSION); +assignIfDifferent('firebaseAndroidBom', env.FIREBASE_ANDROID_BOM, env.REPO_FIREBASE_ANDROID_BOM); +assignIfDifferent( + 'googleServicesGradleVersion', + env.GOOGLE_SERVICES_GRADLE_VERSION, + env.REPO_GOOGLE_SERVICES_GRADLE_VERSION, +); +assignIfDifferent( + 'crashlyticsGradleVersion', + env.CRASHLYTICS_GRADLE_VERSION, + env.REPO_CRASHLYTICS_GRADLE_VERSION, +); +assignIfDifferent('perfGradleVersion', env.PERF_GRADLE_VERSION, env.REPO_PERF_GRADLE_VERSION); +assignIfDifferent( + 'appDistributionGradleVersion', + env.APP_DISTRIBUTION_GRADLE_VERSION, + env.REPO_APP_DISTRIBUTION_GRADLE_VERSION, +); +assignIfDifferent( + 'iosGoogleServicesPath', + env.IOS_GOOGLE_SERVICES_PATH, + env.DEFAULT_IOS_GOOGLE_SERVICES_PATH, +); +assignIfDifferent( + 'androidGoogleServicesPath', + env.ANDROID_GOOGLE_SERVICES_PATH, + env.DEFAULT_ANDROID_GOOGLE_SERVICES_PATH, +); +assignIfDifferent( + 'iosBundleId', + env.IOS_BUNDLE_ID, + env.INFERRED_IOS_BUNDLE_ID || env.DEFAULT_IOS_BUNDLE_ID, +); +assignIfDifferent( + 'androidApplicationId', + env.ANDROID_APPLICATION_ID, + env.INFERRED_ANDROID_APPLICATION_ID || env.DEFAULT_ANDROID_APPLICATION_ID, +); + +fs.writeFileSync(outputPath, JSON.stringify(config, null, 2) + '\n'); +NODE +} + +harness_copy_google_services_files() { + local ios_source="$1" + local ios_dest="$2" + local android_source="$3" + local android_dest="$4" + + [[ -f "${ios_source}" ]] || harness_die "missing iOS GoogleService file at ${ios_source}" + [[ -f "${android_source}" ]] || harness_die "missing Android google-services.json at ${android_source}" + + cp "${ios_source}" "${ios_dest}" + cp "${android_source}" "${android_dest}" +} + +harness_update_package_json() { + local package_json_path="$1" + + export BUILD_HARNESS_APP_PACKAGE_JSON="${package_json_path}" + export BUILD_HARNESS_RNFB_SOURCE="${RNFB_SOURCE}" + export BUILD_HARNESS_RNFB_VERSION="${RNFB_VERSION}" + export BUILD_HARNESS_REACT_NATIVE_VERSION="${REACT_NATIVE_VERSION}" + export BUILD_HARNESS_REACT_VERSION="${REACT_VERSION}" + export BUILD_HARNESS_FIREBASE_JS_VERSION="${FIREBASE_JS_VERSION}" + export BUILD_HARNESS_RNFB_PACKAGES="$(IFS=,; echo "${HARNESS_RNFB_PACKAGE_NAMES[*]}")" + + node <<'NODE' +const fs = require('fs'); + +const packageJsonPath = process.env.BUILD_HARNESS_APP_PACKAGE_JSON; +const source = process.env.BUILD_HARNESS_RNFB_SOURCE; +const rnfbVersion = process.env.BUILD_HARNESS_RNFB_VERSION; +const reactNativeVersion = process.env.BUILD_HARNESS_REACT_NATIVE_VERSION; +const reactVersion = process.env.BUILD_HARNESS_REACT_VERSION; +const firebaseJsVersion = process.env.BUILD_HARNESS_FIREBASE_JS_VERSION; +const rnfbPackages = (process.env.BUILD_HARNESS_RNFB_PACKAGES || '') + .split(',') + .filter(Boolean); + +const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')); + +const rnfbSpec = source === 'workspace' ? 'workspace:*' : rnfbVersion; +if (!rnfbSpec) { + throw new Error('Published RNFB mode requires an explicit version.'); +} + +for (const packageName of rnfbPackages) { + pkg.dependencies[`@react-native-firebase/${packageName}`] = rnfbSpec; +} + +if (firebaseJsVersion) { + pkg.dependencies.firebase = firebaseJsVersion; +} + +if (reactNativeVersion) { + pkg.dependencies['react-native'] = reactNativeVersion; + if (pkg.devDependencies?.['@react-native/babel-preset']) { + pkg.devDependencies['@react-native/babel-preset'] = reactNativeVersion; + } + if (pkg.devDependencies?.['@react-native/eslint-config']) { + pkg.devDependencies['@react-native/eslint-config'] = reactNativeVersion; + } + if (pkg.devDependencies?.['@react-native/metro-config']) { + pkg.devDependencies['@react-native/metro-config'] = reactNativeVersion; + } + if (pkg.devDependencies?.['@react-native/typescript-config']) { + pkg.devDependencies['@react-native/typescript-config'] = reactNativeVersion; + } +} + +if (reactVersion) { + pkg.dependencies.react = reactVersion; + if (pkg.devDependencies?.['react-test-renderer']) { + pkg.devDependencies['react-test-renderer'] = reactVersion; + } +} + +fs.writeFileSync(packageJsonPath, JSON.stringify(pkg, null, 2) + '\n'); +NODE +} + +harness_run_root_yarn_install() { + local repo_root="$1" + local install_log + + install_log="$(mktemp)" + + set +e + ( + cd "${repo_root}" + yarn 2>&1 | tee "${install_log}" + ) + local yarn_exit_code=${PIPESTATUS[0]} + set -e + + if [[ "${yarn_exit_code}" -ne 0 ]]; then + if grep -qE "patches/@firebase\\+rules-unit-testing\\+|patches/react-native-macos\\+" "${install_log}"; then + echo "build-harness: continuing after known tests workspace patch-package failures during yarn install" >&2 + else + rm -f "${install_log}" + harness_die "yarn install failed" + fi + fi + + rm -f "${install_log}" +} diff --git a/scripts/sync-build-harness-expo.sh b/scripts/sync-build-harness-expo.sh new file mode 100644 index 0000000000..e054926ac1 --- /dev/null +++ b/scripts/sync-build-harness-expo.sh @@ -0,0 +1,524 @@ +#!/usr/bin/env bash + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)" +source "${SCRIPT_DIR}/build-harness-common.sh" + +APP_DIR="${REPO_ROOT}/apps/build-harness-expo" +LOCAL_CONFIG_PATH="${APP_DIR}/.build-harness.local.json" +IOS_GOOGLE_SERVICES_DEST="${APP_DIR}/GoogleService-Info.plist" +ANDROID_GOOGLE_SERVICES_DEST="${APP_DIR}/google-services.json" +DEFAULT_IOS_GOOGLE_SERVICES_PATH="${HARNESS_DEFAULT_IOS_GOOGLE_SERVICES_PATH}" +DEFAULT_ANDROID_GOOGLE_SERVICES_PATH="${HARNESS_DEFAULT_ANDROID_GOOGLE_SERVICES_PATH}" +DEFAULT_IOS_BUNDLE_ID="${HARNESS_DEFAULT_IOS_BUNDLE_ID}" +DEFAULT_ANDROID_APPLICATION_ID="${HARNESS_DEFAULT_ANDROID_APPLICATION_ID}" + +COMMAND="${1:-sync}" +if [[ $# -gt 0 ]]; then + shift +fi + +RUN_YARN_INSTALL="" +RUN_CLEAN=0 +RNFB_SOURCE="" +RNFB_VERSION="" +REACT_NATIVE_VERSION="" +REACT_VERSION="" +FIREBASE_JS_VERSION="" +FIREBASE_IOS_VERSION="" +FIREBASE_ANDROID_BOM="" +GOOGLE_SERVICES_GRADLE_VERSION="" +CRASHLYTICS_GRADLE_VERSION="" +PERF_GRADLE_VERSION="" +APP_DISTRIBUTION_GRADLE_VERSION="" +IOS_GOOGLE_SERVICES_PATH="" +ANDROID_GOOGLE_SERVICES_PATH="" +IOS_BUNDLE_ID="" +ANDROID_APPLICATION_ID="" +EXTRA_ARGS=() + +REPO_FIREBASE_JS_VERSION="" +REPO_FIREBASE_IOS_VERSION="" +REPO_FIREBASE_ANDROID_BOM="" +REPO_GOOGLE_SERVICES_GRADLE_VERSION="" +REPO_CRASHLYTICS_GRADLE_VERSION="" +REPO_PERF_GRADLE_VERSION="" +REPO_APP_DISTRIBUTION_GRADLE_VERSION="" + +LOCAL_RNFB_SOURCE="" +LOCAL_RNFB_VERSION="" +LOCAL_REACT_NATIVE_VERSION="" +LOCAL_REACT_VERSION="" +LOCAL_FIREBASE_JS_VERSION="" +LOCAL_FIREBASE_IOS_VERSION="" +LOCAL_FIREBASE_ANDROID_BOM="" +LOCAL_GOOGLE_SERVICES_GRADLE_VERSION="" +LOCAL_CRASHLYTICS_GRADLE_VERSION="" +LOCAL_PERF_GRADLE_VERSION="" +LOCAL_APP_DISTRIBUTION_GRADLE_VERSION="" +LOCAL_IOS_GOOGLE_SERVICES_PATH="" +LOCAL_ANDROID_GOOGLE_SERVICES_PATH="" +LOCAL_IOS_BUNDLE_ID="" +LOCAL_ANDROID_APPLICATION_ID="" +INFERRED_IOS_BUNDLE_ID="" +INFERRED_ANDROID_APPLICATION_ID="" + +usage() { + cat <<'EOF' +Usage: sync-build-harness-expo.sh [options] [-- extra expo args] + +Commands: + doctor Show effective defaults, local overrides, and prerequisite status. + clean Remove generated native projects and local build artifacts for the Expo harness. + sync Update harness dependencies, copy Firebase config, and validate Expo config. + start Start the Expo bundler with the workspace plugin resolution path configured. + build-ios Sync the harness, run expo prebuild for iOS, then build with expo run:ios. + build-android Sync the harness, run expo prebuild for Android, then build with expo run:android. + +Options: + --rnfb-source + --rnfb-version Published RNFB version to install when using published source. + --react-native Override app react-native version. + --react Override app react version. + --firebase-js Override app firebase JS dependency. + --firebase-ios Override iOS Firebase SDK version. + --firebase-android-bom Override Android Firebase BOM version. + --google-services-gradle Override Google Services Gradle plugin version. + --crashlytics-gradle Override Crashlytics Gradle plugin version. + --perf-gradle Override Performance Gradle plugin version. + --app-distribution-gradle Override App Distribution Gradle plugin version. + --ios-google-services Path to GoogleService-Info.plist. + --android-google-services Path to google-services.json. + --ios-bundle-id Override Expo iOS bundle identifier. + --android-application-id Override Expo Android package/applicationId. + --clean Clean generated native projects before syncing or building. + --yarn-install / --no-yarn-install Control root dependency installation. + -h, --help Show this help text. + +Examples: + yarn app:expo:sync + bash ./scripts/sync-build-harness-expo.sh sync --firebase-ios 12.13.0 --firebase-android-bom 34.13.0 + bash ./scripts/sync-build-harness-expo.sh build-ios --ios-google-services "$HOME/Downloads/GoogleService-Info.plist" + bash ./scripts/sync-build-harness-expo.sh build-android --rnfb-source published --rnfb-version 24.0.0 +EOF +} + +die() { + harness_die "$@" +} + +while [[ $# -gt 0 ]]; do + case "$1" in + --) + shift + EXTRA_ARGS=("$@") + break + ;; + --rnfb-source) + RNFB_SOURCE="${2:?}" + shift 2 + ;; + --rnfb-version) + RNFB_VERSION="${2:?}" + shift 2 + ;; + --react-native) + REACT_NATIVE_VERSION="${2:?}" + shift 2 + ;; + --react) + REACT_VERSION="${2:?}" + shift 2 + ;; + --firebase-js) + FIREBASE_JS_VERSION="${2:?}" + shift 2 + ;; + --firebase-ios) + FIREBASE_IOS_VERSION="${2:?}" + shift 2 + ;; + --firebase-android-bom) + FIREBASE_ANDROID_BOM="${2:?}" + shift 2 + ;; + --google-services-gradle) + GOOGLE_SERVICES_GRADLE_VERSION="${2:?}" + shift 2 + ;; + --crashlytics-gradle) + CRASHLYTICS_GRADLE_VERSION="${2:?}" + shift 2 + ;; + --perf-gradle) + PERF_GRADLE_VERSION="${2:?}" + shift 2 + ;; + --app-distribution-gradle) + APP_DISTRIBUTION_GRADLE_VERSION="${2:?}" + shift 2 + ;; + --ios-google-services) + IOS_GOOGLE_SERVICES_PATH="${2:?}" + shift 2 + ;; + --android-google-services) + ANDROID_GOOGLE_SERVICES_PATH="${2:?}" + shift 2 + ;; + --ios-bundle-id) + IOS_BUNDLE_ID="${2:?}" + shift 2 + ;; + --android-application-id) + ANDROID_APPLICATION_ID="${2:?}" + shift 2 + ;; + --clean) + RUN_CLEAN=1 + shift + ;; + --yarn-install) + RUN_YARN_INSTALL=1 + shift + ;; + --no-yarn-install) + RUN_YARN_INSTALL=0 + shift + ;; + -h | --help) + usage + exit 0 + ;; + *) + die "unknown option: $1" + ;; + esac +done + +if [[ ! -d "${APP_DIR}" ]]; then + die "app directory not found at ${APP_DIR}" +fi + +read_repo_defaults() { + harness_read_repo_defaults "${REPO_ROOT}" +} + +load_local_config() { + harness_load_local_config "${LOCAL_CONFIG_PATH}" +} + +detect_ios_bundle_id() { + harness_detect_ios_bundle_id "$1" +} + +detect_android_application_id() { + harness_detect_android_application_id "$1" +} + +resolve_effective_config() { + read_repo_defaults + load_local_config + + if [[ -z "${RNFB_SOURCE}" ]]; then + RNFB_SOURCE="${LOCAL_RNFB_SOURCE:-workspace}" + fi + if [[ -n "${RNFB_VERSION}" && "${RNFB_SOURCE}" == "workspace" ]]; then + RNFB_SOURCE="published" + fi + if [[ -z "${RNFB_VERSION}" ]]; then + RNFB_VERSION="${LOCAL_RNFB_VERSION}" + fi + + if [[ -z "${REACT_NATIVE_VERSION}" ]]; then + REACT_NATIVE_VERSION="${LOCAL_REACT_NATIVE_VERSION}" + fi + if [[ -z "${REACT_VERSION}" ]]; then + REACT_VERSION="${LOCAL_REACT_VERSION}" + fi + + if [[ -z "${FIREBASE_JS_VERSION}" ]]; then + FIREBASE_JS_VERSION="${LOCAL_FIREBASE_JS_VERSION:-${REPO_FIREBASE_JS_VERSION}}" + fi + if [[ -z "${FIREBASE_IOS_VERSION}" ]]; then + FIREBASE_IOS_VERSION="${LOCAL_FIREBASE_IOS_VERSION:-${REPO_FIREBASE_IOS_VERSION}}" + fi + if [[ -z "${FIREBASE_ANDROID_BOM}" ]]; then + FIREBASE_ANDROID_BOM="${LOCAL_FIREBASE_ANDROID_BOM:-${REPO_FIREBASE_ANDROID_BOM}}" + fi + if [[ -z "${GOOGLE_SERVICES_GRADLE_VERSION}" ]]; then + GOOGLE_SERVICES_GRADLE_VERSION="${LOCAL_GOOGLE_SERVICES_GRADLE_VERSION:-${REPO_GOOGLE_SERVICES_GRADLE_VERSION}}" + fi + if [[ -z "${CRASHLYTICS_GRADLE_VERSION}" ]]; then + CRASHLYTICS_GRADLE_VERSION="${LOCAL_CRASHLYTICS_GRADLE_VERSION:-${REPO_CRASHLYTICS_GRADLE_VERSION}}" + fi + if [[ -z "${PERF_GRADLE_VERSION}" ]]; then + PERF_GRADLE_VERSION="${LOCAL_PERF_GRADLE_VERSION:-${REPO_PERF_GRADLE_VERSION}}" + fi + if [[ -z "${APP_DISTRIBUTION_GRADLE_VERSION}" ]]; then + APP_DISTRIBUTION_GRADLE_VERSION="${LOCAL_APP_DISTRIBUTION_GRADLE_VERSION:-${REPO_APP_DISTRIBUTION_GRADLE_VERSION}}" + fi + + if [[ -z "${IOS_GOOGLE_SERVICES_PATH}" ]]; then + IOS_GOOGLE_SERVICES_PATH="${LOCAL_IOS_GOOGLE_SERVICES_PATH:-${DEFAULT_IOS_GOOGLE_SERVICES_PATH}}" + fi + if [[ -z "${ANDROID_GOOGLE_SERVICES_PATH}" ]]; then + ANDROID_GOOGLE_SERVICES_PATH="${LOCAL_ANDROID_GOOGLE_SERVICES_PATH:-${DEFAULT_ANDROID_GOOGLE_SERVICES_PATH}}" + fi + + if [[ -z "${IOS_BUNDLE_ID}" ]]; then + INFERRED_IOS_BUNDLE_ID="$(detect_ios_bundle_id "${IOS_GOOGLE_SERVICES_PATH}")" + IOS_BUNDLE_ID="${LOCAL_IOS_BUNDLE_ID:-${INFERRED_IOS_BUNDLE_ID}}" + fi + if [[ -z "${IOS_BUNDLE_ID}" ]]; then + IOS_BUNDLE_ID="${DEFAULT_IOS_BUNDLE_ID}" + fi + + if [[ -z "${ANDROID_APPLICATION_ID}" ]]; then + if ! INFERRED_ANDROID_APPLICATION_ID="$(detect_android_application_id "${ANDROID_GOOGLE_SERVICES_PATH}")"; then + die "unable to parse Android applicationId from ${ANDROID_GOOGLE_SERVICES_PATH}" + fi + ANDROID_APPLICATION_ID="${LOCAL_ANDROID_APPLICATION_ID:-${INFERRED_ANDROID_APPLICATION_ID}}" + fi + if [[ -z "${ANDROID_APPLICATION_ID}" ]]; then + ANDROID_APPLICATION_ID="${DEFAULT_ANDROID_APPLICATION_ID}" + fi + + if [[ -z "${RUN_YARN_INSTALL}" ]]; then + RUN_YARN_INSTALL=1 + fi + + if [[ "${RNFB_SOURCE}" != "workspace" && "${RNFB_SOURCE}" != "published" ]]; then + die "--rnfb-source must be 'workspace' or 'published'" + fi + if [[ "${RNFB_SOURCE}" == "published" && -z "${RNFB_VERSION}" ]]; then + die "--rnfb-version is required when --rnfb-source published is used" + fi +} + +write_local_config() { + harness_write_local_config "${LOCAL_CONFIG_PATH}" +} + +ensure_google_services_files() { + harness_copy_google_services_files \ + "${IOS_GOOGLE_SERVICES_PATH}" \ + "${IOS_GOOGLE_SERVICES_DEST}" \ + "${ANDROID_GOOGLE_SERVICES_PATH}" \ + "${ANDROID_GOOGLE_SERVICES_DEST}" +} + +update_harness_package_json() { + harness_update_package_json "${APP_DIR}/package.json" +} + +install_dependencies() { + if [[ "${RUN_YARN_INSTALL}" != "1" ]]; then + return + fi + + ( + harness_run_root_yarn_install "${REPO_ROOT}" + ) +} + +export_build_env() { + export RNFB_FIREBASE_IOS_SDK="${FIREBASE_IOS_VERSION}" + export FIREBASE_SDK_VERSION="${FIREBASE_IOS_VERSION}" + export RNFB_FIREBASE_ANDROID_BOM="${FIREBASE_ANDROID_BOM}" + export RNFB_GOOGLE_SERVICES_GRADLE="${GOOGLE_SERVICES_GRADLE_VERSION}" + export RNFB_CRASHLYTICS_GRADLE="${CRASHLYTICS_GRADLE_VERSION}" + export RNFB_PERF_GRADLE="${PERF_GRADLE_VERSION}" + export RNFB_APP_DISTRIBUTION_GRADLE="${APP_DISTRIBUTION_GRADLE_VERSION}" + export RNFB_BUILD_HARNESS_IOS_BUNDLE_ID="${IOS_BUNDLE_ID}" + export RNFB_BUILD_HARNESS_ANDROID_APPLICATION_ID="${ANDROID_APPLICATION_ID}" +} + +export_expo_cli_env() { + export NODE_PATH="${APP_DIR}/node_modules${NODE_PATH:+:${NODE_PATH}}" +} + +run_with_extra_args() { + if [[ ${#EXTRA_ARGS[@]} -gt 0 ]]; then + "$@" "${EXTRA_ARGS[@]}" + else + "$@" + fi +} + +validate_expo_config() { + export_expo_cli_env + ( + cd "${APP_DIR}" + yarn expo config --json >/dev/null + ) +} + +clean_harness() { + rm -rf \ + "${APP_DIR}/.expo" \ + "${APP_DIR}/android" \ + "${APP_DIR}/ios" \ + "${APP_DIR}/dist" \ + "${APP_DIR}/web-build" +} + +prepare_harness() { + resolve_effective_config + export RNFB_SOURCE + export RNFB_VERSION + export REACT_NATIVE_VERSION + export REACT_VERSION + export FIREBASE_JS_VERSION + export FIREBASE_IOS_VERSION + export FIREBASE_ANDROID_BOM + export GOOGLE_SERVICES_GRADLE_VERSION + export CRASHLYTICS_GRADLE_VERSION + export PERF_GRADLE_VERSION + export APP_DISTRIBUTION_GRADLE_VERSION + export IOS_GOOGLE_SERVICES_PATH + export ANDROID_GOOGLE_SERVICES_PATH + export IOS_BUNDLE_ID + export ANDROID_APPLICATION_ID + export REPO_FIREBASE_JS_VERSION + export REPO_FIREBASE_IOS_VERSION + export REPO_FIREBASE_ANDROID_BOM + export REPO_GOOGLE_SERVICES_GRADLE_VERSION + export REPO_CRASHLYTICS_GRADLE_VERSION + export REPO_PERF_GRADLE_VERSION + export REPO_APP_DISTRIBUTION_GRADLE_VERSION + export DEFAULT_IOS_GOOGLE_SERVICES_PATH + export DEFAULT_ANDROID_GOOGLE_SERVICES_PATH + export DEFAULT_IOS_BUNDLE_ID + export DEFAULT_ANDROID_APPLICATION_ID + export INFERRED_IOS_BUNDLE_ID + export INFERRED_ANDROID_APPLICATION_ID + + if [[ "${RUN_CLEAN}" == "1" ]]; then + clean_harness + fi + + update_harness_package_json + write_local_config + install_dependencies + ensure_google_services_files + export_build_env + validate_expo_config +} + +doctor() { + resolve_effective_config + + echo "Repo root: ${REPO_ROOT}" + echo "Harness app: ${APP_DIR}" + echo "Local config: ${LOCAL_CONFIG_PATH}" + echo + echo "Source defaults:" + echo " RNFB source: ${RNFB_SOURCE}" + echo " RNFB version override: ${RNFB_VERSION:-workspace packages}" + echo " Firebase JS: ${FIREBASE_JS_VERSION}" + echo " Firebase iOS SDK: ${FIREBASE_IOS_VERSION}" + echo " Firebase Android BOM: ${FIREBASE_ANDROID_BOM}" + echo " Google Services Gradle: ${GOOGLE_SERVICES_GRADLE_VERSION}" + echo " Crashlytics Gradle: ${CRASHLYTICS_GRADLE_VERSION}" + echo " Perf Gradle: ${PERF_GRADLE_VERSION}" + echo " App Distribution Gradle: ${APP_DISTRIBUTION_GRADLE_VERSION}" + echo " iOS bundle ID: ${IOS_BUNDLE_ID}" + echo " Android applicationId: ${ANDROID_APPLICATION_ID}" + echo " iOS GoogleService path: ${IOS_GOOGLE_SERVICES_PATH}" + echo " Android GoogleService path: ${ANDROID_GOOGLE_SERVICES_PATH}" + echo + echo "Prerequisites:" + for command_name in node yarn; do + if command -v "${command_name}" >/dev/null 2>&1; then + echo " ${command_name}: ok" + else + echo " ${command_name}: missing" + fi + done + if [[ "$(uname)" == "Darwin" ]]; then + harness_print_ruby_prereq_status "${REPO_ROOT}/apps/build-harness" + fi + if [[ "$(uname)" == "Darwin" ]]; then + if command -v pod >/dev/null 2>&1; then + echo " pod: ok" + else + echo " pod: missing" + fi + fi + echo + echo "Config files:" + [[ -f "${IOS_GOOGLE_SERVICES_PATH}" ]] && echo " iOS plist: present" || echo " iOS plist: missing" + [[ -f "${ANDROID_GOOGLE_SERVICES_PATH}" ]] && echo " Android json: present" || echo " Android json: missing" +} + +prebuild_ios() { + export_expo_cli_env + ( + cd "${APP_DIR}" + run_with_extra_args yarn expo prebuild --clean --platform ios + ) +} + +prebuild_android() { + export_expo_cli_env + ( + cd "${APP_DIR}" + run_with_extra_args yarn expo prebuild --clean --platform android + ) +} + +start_expo() { + resolve_effective_config + export_build_env + export_expo_cli_env + ( + cd "${APP_DIR}" + run_with_extra_args yarn expo start --clear + ) +} + +build_ios() { + prepare_harness + prebuild_ios + ( + cd "${APP_DIR}" + run_with_extra_args yarn expo run:ios + ) +} + +build_android() { + prepare_harness + prebuild_android + ( + cd "${APP_DIR}" + run_with_extra_args yarn expo run:android + ) +} + +case "${COMMAND}" in + doctor) + doctor + ;; + clean) + clean_harness + ;; + sync) + prepare_harness + ;; + start) + start_expo + ;; + build-ios) + build_ios + ;; + build-android) + build_android + ;; + *) + usage + die "unknown command: ${COMMAND}" + ;; +esac diff --git a/scripts/sync-build-harness.sh b/scripts/sync-build-harness.sh new file mode 100755 index 0000000000..ca5119acfe --- /dev/null +++ b/scripts/sync-build-harness.sh @@ -0,0 +1,568 @@ +#!/usr/bin/env bash + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)" +source "${SCRIPT_DIR}/build-harness-common.sh" + +APP_DIR="${REPO_ROOT}/apps/build-harness" +LOCAL_CONFIG_PATH="${APP_DIR}/.build-harness.local.json" +IOS_PROJECT_PATH="${APP_DIR}/ios/BuildHarness.xcodeproj" +IOS_GOOGLE_SERVICES_DEST="${APP_DIR}/ios/BuildHarness/GoogleService-Info.plist" +ANDROID_GOOGLE_SERVICES_DEST="${APP_DIR}/android/app/google-services.json" +DEFAULT_IOS_SIMULATOR="iPhone 16" +DEFAULT_IOS_GOOGLE_SERVICES_PATH="${HARNESS_DEFAULT_IOS_GOOGLE_SERVICES_PATH}" +DEFAULT_ANDROID_GOOGLE_SERVICES_PATH="${HARNESS_DEFAULT_ANDROID_GOOGLE_SERVICES_PATH}" +DEFAULT_IOS_BUNDLE_ID="${HARNESS_DEFAULT_IOS_BUNDLE_ID}" +DEFAULT_ANDROID_APPLICATION_ID="${HARNESS_DEFAULT_ANDROID_APPLICATION_ID}" + +COMMAND="${1:-sync}" +if [[ $# -gt 0 ]]; then + shift +fi + +RUN_YARN_INSTALL="" +RUN_POD_INSTALL="" +RUN_CLEAN=0 +RNFB_SOURCE="" +RNFB_VERSION="" +REACT_NATIVE_VERSION="" +REACT_VERSION="" +FIREBASE_JS_VERSION="" +FIREBASE_IOS_VERSION="" +FIREBASE_ANDROID_BOM="" +GOOGLE_SERVICES_GRADLE_VERSION="" +CRASHLYTICS_GRADLE_VERSION="" +PERF_GRADLE_VERSION="" +APP_DISTRIBUTION_GRADLE_VERSION="" +IOS_GOOGLE_SERVICES_PATH="" +ANDROID_GOOGLE_SERVICES_PATH="" +IOS_BUNDLE_ID="" +ANDROID_APPLICATION_ID="" +EXTRA_ARGS=() + +REPO_FIREBASE_JS_VERSION="" +REPO_FIREBASE_IOS_VERSION="" +REPO_FIREBASE_ANDROID_BOM="" +REPO_GOOGLE_SERVICES_GRADLE_VERSION="" +REPO_CRASHLYTICS_GRADLE_VERSION="" +REPO_PERF_GRADLE_VERSION="" +REPO_APP_DISTRIBUTION_GRADLE_VERSION="" + +LOCAL_RNFB_SOURCE="" +LOCAL_RNFB_VERSION="" +LOCAL_REACT_NATIVE_VERSION="" +LOCAL_REACT_VERSION="" +LOCAL_FIREBASE_JS_VERSION="" +LOCAL_FIREBASE_IOS_VERSION="" +LOCAL_FIREBASE_ANDROID_BOM="" +LOCAL_GOOGLE_SERVICES_GRADLE_VERSION="" +LOCAL_CRASHLYTICS_GRADLE_VERSION="" +LOCAL_PERF_GRADLE_VERSION="" +LOCAL_APP_DISTRIBUTION_GRADLE_VERSION="" +LOCAL_IOS_GOOGLE_SERVICES_PATH="" +LOCAL_ANDROID_GOOGLE_SERVICES_PATH="" +LOCAL_IOS_BUNDLE_ID="" +LOCAL_ANDROID_APPLICATION_ID="" +INFERRED_IOS_BUNDLE_ID="" +INFERRED_ANDROID_APPLICATION_ID="" + +usage() { + cat <<'EOF' +Usage: sync-build-harness.sh [options] [-- extra react-native args] + +Commands: + doctor Show effective defaults, local overrides, and prerequisite status. + clean Remove build products, Pods, and derived data for the harness app. + sync Update harness dependencies, copy Firebase config, patch iOS metadata, install deps. + pod-install Install iOS pods using the current or supplied overrides. + build-ios Sync the harness and run the iOS app (defaults to simulator "iPhone 16"). + build-android Sync the harness and run the Android app. + +Options: + --rnfb-source + --rnfb-version Published RNFB version to install when using published source. + --react-native Override app react-native version. + --react Override app react version. + --firebase-js Override app firebase JS dependency. + --firebase-ios Override iOS Firebase SDK version. + --firebase-android-bom Override Android Firebase BOM version. + --google-services-gradle Override Google Services Gradle plugin version. + --crashlytics-gradle Override Crashlytics Gradle plugin version. + --perf-gradle Override Performance Gradle plugin version. + --app-distribution-gradle Override App Distribution Gradle plugin version. + --ios-google-services Path to GoogleService-Info.plist. + --android-google-services Path to google-services.json. + --ios-bundle-id Override iOS bundle identifier. + --android-application-id Override Android applicationId (namespace remains fixed). + --clean Clean build artifacts before syncing or building. + --yarn-install / --no-yarn-install Control root dependency installation. + --pod-install / --no-pod-install Control pod install for sync / build-ios. + -h, --help Show this help text. + +Examples: + yarn app:sync + bash ./scripts/sync-build-harness.sh sync --firebase-ios 12.13.0 --firebase-android-bom 34.13.0 + bash ./scripts/sync-build-harness.sh build-ios --ios-google-services "$HOME/Downloads/GoogleService-Info.plist" + bash ./scripts/sync-build-harness.sh build-android --rnfb-source published --rnfb-version 24.0.0 +EOF +} + +die() { + echo "sync-build-harness: $*" >&2 + exit 1 +} + +while [[ $# -gt 0 ]]; do + case "$1" in + --) + shift + EXTRA_ARGS=("$@") + break + ;; + --rnfb-source) + RNFB_SOURCE="${2:?}" + shift 2 + ;; + --rnfb-version) + RNFB_VERSION="${2:?}" + shift 2 + ;; + --react-native) + REACT_NATIVE_VERSION="${2:?}" + shift 2 + ;; + --react) + REACT_VERSION="${2:?}" + shift 2 + ;; + --firebase-js) + FIREBASE_JS_VERSION="${2:?}" + shift 2 + ;; + --firebase-ios) + FIREBASE_IOS_VERSION="${2:?}" + shift 2 + ;; + --firebase-android-bom) + FIREBASE_ANDROID_BOM="${2:?}" + shift 2 + ;; + --google-services-gradle) + GOOGLE_SERVICES_GRADLE_VERSION="${2:?}" + shift 2 + ;; + --crashlytics-gradle) + CRASHLYTICS_GRADLE_VERSION="${2:?}" + shift 2 + ;; + --perf-gradle) + PERF_GRADLE_VERSION="${2:?}" + shift 2 + ;; + --app-distribution-gradle) + APP_DISTRIBUTION_GRADLE_VERSION="${2:?}" + shift 2 + ;; + --ios-google-services) + IOS_GOOGLE_SERVICES_PATH="${2:?}" + shift 2 + ;; + --android-google-services) + ANDROID_GOOGLE_SERVICES_PATH="${2:?}" + shift 2 + ;; + --ios-bundle-id) + IOS_BUNDLE_ID="${2:?}" + shift 2 + ;; + --android-application-id) + ANDROID_APPLICATION_ID="${2:?}" + shift 2 + ;; + --clean) + RUN_CLEAN=1 + shift + ;; + --yarn-install) + RUN_YARN_INSTALL=1 + shift + ;; + --no-yarn-install) + RUN_YARN_INSTALL=0 + shift + ;; + --pod-install) + RUN_POD_INSTALL=1 + shift + ;; + --no-pod-install) + RUN_POD_INSTALL=0 + shift + ;; + -h | --help) + usage + exit 0 + ;; + *) + die "unknown option: $1" + ;; + esac +done + +if [[ ! -d "${APP_DIR}" ]]; then + die "app directory not found at ${APP_DIR}" +fi + +read_repo_defaults() { + harness_read_repo_defaults "${REPO_ROOT}" +} + +load_local_config() { + harness_load_local_config "${LOCAL_CONFIG_PATH}" +} + +detect_ios_bundle_id() { + harness_detect_ios_bundle_id "$1" +} + +detect_android_application_id() { + harness_detect_android_application_id "$1" +} + +resolve_effective_config() { + read_repo_defaults + load_local_config + + if [[ -z "${RNFB_SOURCE}" ]]; then + RNFB_SOURCE="${LOCAL_RNFB_SOURCE:-workspace}" + fi + if [[ -n "${RNFB_VERSION}" && "${RNFB_SOURCE}" == "workspace" ]]; then + RNFB_SOURCE="published" + fi + if [[ -z "${RNFB_VERSION}" ]]; then + RNFB_VERSION="${LOCAL_RNFB_VERSION}" + fi + + if [[ -z "${REACT_NATIVE_VERSION}" ]]; then + REACT_NATIVE_VERSION="${LOCAL_REACT_NATIVE_VERSION}" + fi + if [[ -z "${REACT_VERSION}" ]]; then + REACT_VERSION="${LOCAL_REACT_VERSION}" + fi + + if [[ -z "${FIREBASE_JS_VERSION}" ]]; then + FIREBASE_JS_VERSION="${LOCAL_FIREBASE_JS_VERSION:-${REPO_FIREBASE_JS_VERSION}}" + fi + if [[ -z "${FIREBASE_IOS_VERSION}" ]]; then + FIREBASE_IOS_VERSION="${LOCAL_FIREBASE_IOS_VERSION:-${REPO_FIREBASE_IOS_VERSION}}" + fi + if [[ -z "${FIREBASE_ANDROID_BOM}" ]]; then + FIREBASE_ANDROID_BOM="${LOCAL_FIREBASE_ANDROID_BOM:-${REPO_FIREBASE_ANDROID_BOM}}" + fi + if [[ -z "${GOOGLE_SERVICES_GRADLE_VERSION}" ]]; then + GOOGLE_SERVICES_GRADLE_VERSION="${LOCAL_GOOGLE_SERVICES_GRADLE_VERSION:-${REPO_GOOGLE_SERVICES_GRADLE_VERSION}}" + fi + if [[ -z "${CRASHLYTICS_GRADLE_VERSION}" ]]; then + CRASHLYTICS_GRADLE_VERSION="${LOCAL_CRASHLYTICS_GRADLE_VERSION:-${REPO_CRASHLYTICS_GRADLE_VERSION}}" + fi + if [[ -z "${PERF_GRADLE_VERSION}" ]]; then + PERF_GRADLE_VERSION="${LOCAL_PERF_GRADLE_VERSION:-${REPO_PERF_GRADLE_VERSION}}" + fi + if [[ -z "${APP_DISTRIBUTION_GRADLE_VERSION}" ]]; then + APP_DISTRIBUTION_GRADLE_VERSION="${LOCAL_APP_DISTRIBUTION_GRADLE_VERSION:-${REPO_APP_DISTRIBUTION_GRADLE_VERSION}}" + fi + + if [[ -z "${IOS_GOOGLE_SERVICES_PATH}" ]]; then + IOS_GOOGLE_SERVICES_PATH="${LOCAL_IOS_GOOGLE_SERVICES_PATH:-${DEFAULT_IOS_GOOGLE_SERVICES_PATH}}" + fi + if [[ -z "${ANDROID_GOOGLE_SERVICES_PATH}" ]]; then + ANDROID_GOOGLE_SERVICES_PATH="${LOCAL_ANDROID_GOOGLE_SERVICES_PATH:-${DEFAULT_ANDROID_GOOGLE_SERVICES_PATH}}" + fi + + if [[ -z "${IOS_BUNDLE_ID}" ]]; then + INFERRED_IOS_BUNDLE_ID="$(detect_ios_bundle_id "${IOS_GOOGLE_SERVICES_PATH}")" + IOS_BUNDLE_ID="${LOCAL_IOS_BUNDLE_ID:-${INFERRED_IOS_BUNDLE_ID}}" + fi + if [[ -z "${IOS_BUNDLE_ID}" ]]; then + IOS_BUNDLE_ID="${DEFAULT_IOS_BUNDLE_ID}" + fi + + if [[ -z "${ANDROID_APPLICATION_ID}" ]]; then + if ! INFERRED_ANDROID_APPLICATION_ID="$(detect_android_application_id "${ANDROID_GOOGLE_SERVICES_PATH}")"; then + die "unable to parse Android applicationId from ${ANDROID_GOOGLE_SERVICES_PATH}" + fi + ANDROID_APPLICATION_ID="${LOCAL_ANDROID_APPLICATION_ID:-${INFERRED_ANDROID_APPLICATION_ID}}" + fi + if [[ -z "${ANDROID_APPLICATION_ID}" ]]; then + ANDROID_APPLICATION_ID="${DEFAULT_ANDROID_APPLICATION_ID}" + fi + + if [[ -z "${RUN_YARN_INSTALL}" ]]; then + RUN_YARN_INSTALL=1 + fi + if [[ -z "${RUN_POD_INSTALL}" ]]; then + case "${COMMAND}" in + sync | pod-install | build-ios) + RUN_POD_INSTALL=1 + ;; + *) + RUN_POD_INSTALL=0 + ;; + esac + fi + + if [[ "${RNFB_SOURCE}" != "workspace" && "${RNFB_SOURCE}" != "published" ]]; then + die "--rnfb-source must be 'workspace' or 'published'" + fi + if [[ "${RNFB_SOURCE}" == "published" && -z "${RNFB_VERSION}" ]]; then + die "--rnfb-version is required when --rnfb-source published is used" + fi +} + +write_local_config() { + harness_write_local_config "${LOCAL_CONFIG_PATH}" +} + +ensure_google_services_files() { + harness_copy_google_services_files \ + "${IOS_GOOGLE_SERVICES_PATH}" \ + "${IOS_GOOGLE_SERVICES_DEST}" \ + "${ANDROID_GOOGLE_SERVICES_PATH}" \ + "${ANDROID_GOOGLE_SERVICES_DEST}" +} + +apply_ios_project_config() { + ( + cd "${APP_DIR}" + bundle check >/dev/null 2>&1 || bundle install + bundle exec ruby - "${IOS_PROJECT_PATH}" "${IOS_BUNDLE_ID}" <<'RUBY' +require 'xcodeproj' + +project_path = ARGV.fetch(0) +bundle_id = ARGV.fetch(1) +google_service_relative_path = 'BuildHarness/GoogleService-Info.plist' +project = Xcodeproj::Project.open(project_path) +target = project.targets.find { |item| item.name == 'BuildHarness' } +abort('Unable to locate BuildHarness target') unless target + +group = project.main_group.find_subpath('BuildHarness', true) +file_ref = + group.files.find do |file| + file.path == 'GoogleService-Info.plist' || file.path == google_service_relative_path + end || group.new_file(google_service_relative_path) + +unless target.resources_build_phase.files_references.any? do |reference| + reference.path == 'GoogleService-Info.plist' || reference.path == google_service_relative_path +end + target.resources_build_phase.add_file_reference(file_ref, true) +end + +target.build_configurations.each do |config| + config.build_settings['PRODUCT_BUNDLE_IDENTIFIER'] = bundle_id +end + +project.save +RUBY + ) +} + +update_harness_package_json() { + harness_update_package_json "${APP_DIR}/package.json" +} + +install_dependencies() { + if [[ "${RUN_YARN_INSTALL}" != "1" ]]; then + return + fi + + ( + harness_run_root_yarn_install "${REPO_ROOT}" + ) +} + +pod_install() { + export_build_env + ( + cd "${APP_DIR}" + bundle check >/dev/null 2>&1 || bundle install + cd ios + bundle exec pod install + ) +} + +export_build_env() { + export RNFB_FIREBASE_IOS_SDK="${FIREBASE_IOS_VERSION}" + export FIREBASE_SDK_VERSION="${FIREBASE_IOS_VERSION}" + export RNFB_FIREBASE_ANDROID_BOM="${FIREBASE_ANDROID_BOM}" + export RNFB_GOOGLE_SERVICES_GRADLE="${GOOGLE_SERVICES_GRADLE_VERSION}" + export RNFB_CRASHLYTICS_GRADLE="${CRASHLYTICS_GRADLE_VERSION}" + export RNFB_PERF_GRADLE="${PERF_GRADLE_VERSION}" + export RNFB_APP_DISTRIBUTION_GRADLE="${APP_DISTRIBUTION_GRADLE_VERSION}" + export RNFB_BUILD_HARNESS_ANDROID_APPLICATION_ID="${ANDROID_APPLICATION_ID}" +} + +clean_harness() { + rm -rf \ + "${APP_DIR}/android/.gradle" \ + "${APP_DIR}/android/app/build" \ + "${APP_DIR}/android/build" \ + "${APP_DIR}/ios/Pods" \ + "${APP_DIR}/ios/build" \ + "${APP_DIR}/ios/Podfile.lock" + + if [[ "$(uname)" == "Darwin" ]]; then + if command -v xcodebuild >/dev/null 2>&1; then + xcodebuild \ + -project "${IOS_PROJECT_PATH}" \ + -scheme BuildHarness \ + -configuration Debug \ + -sdk iphonesimulator \ + clean >/dev/null 2>&1 || true + fi + fi +} + +prepare_harness() { + resolve_effective_config + export RNFB_SOURCE + export RNFB_VERSION + export REACT_NATIVE_VERSION + export REACT_VERSION + export FIREBASE_JS_VERSION + export FIREBASE_IOS_VERSION + export FIREBASE_ANDROID_BOM + export GOOGLE_SERVICES_GRADLE_VERSION + export CRASHLYTICS_GRADLE_VERSION + export PERF_GRADLE_VERSION + export APP_DISTRIBUTION_GRADLE_VERSION + export IOS_GOOGLE_SERVICES_PATH + export ANDROID_GOOGLE_SERVICES_PATH + export IOS_BUNDLE_ID + export ANDROID_APPLICATION_ID + export REPO_FIREBASE_JS_VERSION + export REPO_FIREBASE_IOS_VERSION + export REPO_FIREBASE_ANDROID_BOM + export REPO_GOOGLE_SERVICES_GRADLE_VERSION + export REPO_CRASHLYTICS_GRADLE_VERSION + export REPO_PERF_GRADLE_VERSION + export REPO_APP_DISTRIBUTION_GRADLE_VERSION + export DEFAULT_IOS_GOOGLE_SERVICES_PATH + export DEFAULT_ANDROID_GOOGLE_SERVICES_PATH + export DEFAULT_IOS_BUNDLE_ID + export DEFAULT_ANDROID_APPLICATION_ID + export INFERRED_IOS_BUNDLE_ID + export INFERRED_ANDROID_APPLICATION_ID + + if [[ "${RUN_CLEAN}" == "1" ]]; then + clean_harness + fi + + update_harness_package_json + write_local_config + install_dependencies + ensure_google_services_files + if [[ "$(uname)" == "Darwin" ]]; then + apply_ios_project_config + fi + + if [[ "${RUN_POD_INSTALL}" == "1" ]]; then + pod_install + fi +} + +doctor() { + resolve_effective_config + + echo "Repo root: ${REPO_ROOT}" + echo "Harness app: ${APP_DIR}" + echo "Local config: ${LOCAL_CONFIG_PATH}" + echo + echo "Source defaults:" + echo " RNFB source: ${RNFB_SOURCE}" + echo " RNFB version override: ${RNFB_VERSION:-workspace packages}" + echo " Firebase JS: ${FIREBASE_JS_VERSION}" + echo " Firebase iOS SDK: ${FIREBASE_IOS_VERSION}" + echo " Firebase Android BOM: ${FIREBASE_ANDROID_BOM}" + echo " Google Services Gradle: ${GOOGLE_SERVICES_GRADLE_VERSION}" + echo " Crashlytics Gradle: ${CRASHLYTICS_GRADLE_VERSION}" + echo " Perf Gradle: ${PERF_GRADLE_VERSION}" + echo " App Distribution Gradle: ${APP_DISTRIBUTION_GRADLE_VERSION}" + echo " iOS bundle ID: ${IOS_BUNDLE_ID}" + echo " Android applicationId: ${ANDROID_APPLICATION_ID}" + echo " iOS GoogleService path: ${IOS_GOOGLE_SERVICES_PATH}" + echo " Android GoogleService path: ${ANDROID_GOOGLE_SERVICES_PATH}" + echo + echo "Prerequisites:" + for command_name in node yarn; do + if command -v "${command_name}" >/dev/null 2>&1; then + echo " ${command_name}: ok" + else + echo " ${command_name}: missing" + fi + done + if [[ "$(uname)" == "Darwin" ]]; then + harness_print_ruby_prereq_status "${APP_DIR}" + if command -v pod >/dev/null 2>&1; then + echo " pod: ok" + else + echo " pod: missing" + fi + fi + echo + echo "Config files:" + [[ -f "${IOS_GOOGLE_SERVICES_PATH}" ]] && echo " iOS plist: present" || echo " iOS plist: missing" + [[ -f "${ANDROID_GOOGLE_SERVICES_PATH}" ]] && echo " Android json: present" || echo " Android json: missing" +} + +build_ios() { + prepare_harness + export_build_env + ( + cd "${APP_DIR}" + if [[ ${#EXTRA_ARGS[@]} -gt 0 ]]; then + yarn react-native run-ios "${EXTRA_ARGS[@]}" + else + yarn react-native run-ios --simulator "${DEFAULT_IOS_SIMULATOR}" + fi + ) +} + +build_android() { + prepare_harness + export_build_env + ( + cd "${APP_DIR}" + if [[ ${#EXTRA_ARGS[@]} -gt 0 ]]; then + yarn react-native run-android "${EXTRA_ARGS[@]}" + else + yarn react-native run-android + fi + ) +} + +case "${COMMAND}" in + doctor) + doctor + ;; + clean) + clean_harness + ;; + sync) + prepare_harness + ;; + pod-install) + prepare_harness + ;; + build-ios) + build_ios + ;; + build-android) + build_android + ;; + *) + usage + die "unknown command: ${COMMAND}" + ;; +esac diff --git a/scripts/write-ci-firebase-configs.sh b/scripts/write-ci-firebase-configs.sh new file mode 100644 index 0000000000..acff2b4f52 --- /dev/null +++ b/scripts/write-ci-firebase-configs.sh @@ -0,0 +1,65 @@ +#!/usr/bin/env bash + +set -euo pipefail + +IOS_OUTPUT_PATH="${1:?missing iOS output path}" +ANDROID_OUTPUT_PATH="${2:?missing Android output path}" + +cat > "${IOS_OUTPUT_PATH}" <<'EOF' + + + + + API_KEY + ci-api-key + BUNDLE_ID + io.invertase.react-native-demo + GCM_SENDER_ID + 1234567890 + GOOGLE_APP_ID + 1:1234567890:ios:abcdef123456 + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + PLIST_VERSION + 1 + PROJECT_ID + rnfb-build-harness-ci + STORAGE_BUCKET + rnfb-build-harness-ci.appspot.com + + +EOF + +cat > "${ANDROID_OUTPUT_PATH}" <<'EOF' +{ + "project_info": { + "project_number": "1234567890", + "project_id": "rnfb-build-harness-ci", + "storage_bucket": "rnfb-build-harness-ci.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:1234567890:android:abcdef123456", + "android_client_info": { + "package_name": "com.invertase.testing" + } + }, + "api_key": [ + { + "current_key": "ci-api-key" + } + ] + } + ], + "configuration_version": "1" +} +EOF diff --git a/yarn.lock b/yarn.lock index 31c6df1049..f07d8c1962 100644 --- a/yarn.lock +++ b/yarn.lock @@ -85,6 +85,17 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/code-frame@npm:7.29.0" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.28.5" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.1.1" + checksum: 10/199e15ff89007dd30675655eec52481cb245c9fdf4f81e4dc1f866603b0217b57aff25f5ffa0a95bbc8e31eb861695330cd7869ad52cc211aa63016320ef72c5 + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.27.2, @babel/compat-data@npm:^7.27.7, @babel/compat-data@npm:^7.28.5": version: 7.28.5 resolution: "@babel/compat-data@npm:7.28.5" @@ -99,6 +110,13 @@ __metadata: languageName: node linkType: hard +"@babel/compat-data@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/compat-data@npm:7.29.0" + checksum: 10/7f21beedb930ed8fbf7eabafc60e6e6521c1d905646bf1317a61b2163339157fe797efeb85962bf55136e166b01fd1a6b526a15974b92a8b877d564dcb6c9580 + languageName: node + linkType: hard + "@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.20.0, @babel/core@npm:^7.23.9, @babel/core@npm:^7.24.7, @babel/core@npm:^7.25.2, @babel/core@npm:^7.27.4": version: 7.28.5 resolution: "@babel/core@npm:7.28.5" @@ -145,6 +163,20 @@ __metadata: languageName: node linkType: hard +"@babel/eslint-parser@npm:^7.25.1": + version: 7.28.6 + resolution: "@babel/eslint-parser@npm:7.28.6" + dependencies: + "@nicolo-ribaudo/eslint-scope-5-internals": "npm:5.1.1-v1" + eslint-visitor-keys: "npm:^2.1.0" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.11.0 + eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 + checksum: 10/15c0c9c78abcc5f267a34bab95437c37dfc468e3ac5e11094ed26bebd63c7a5b056fa47c005ba74eb9fbed6c79e37f90cbe2a24ed09425921275391fe9a5bbe7 + languageName: node + linkType: hard + "@babel/generator@npm:^7.20.5, @babel/generator@npm:^7.25.0, @babel/generator@npm:^7.27.5, @babel/generator@npm:^7.28.5": version: 7.28.5 resolution: "@babel/generator@npm:7.28.5" @@ -171,6 +203,19 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.29.0, @babel/generator@npm:^7.29.1, @babel/generator@npm:^7.7.2": + version: 7.29.1 + resolution: "@babel/generator@npm:7.29.1" + dependencies: + "@babel/parser": "npm:^7.29.0" + "@babel/types": "npm:^7.29.0" + "@jridgewell/gen-mapping": "npm:^0.3.12" + "@jridgewell/trace-mapping": "npm:^0.3.28" + jsesc: "npm:^3.0.2" + checksum: 10/61fe4ddd6e817aa312a14963ccdbb5c9a8c57e8b97b98d19a8a99ccab2215fda1a5f52bc8dd8d2e3c064497ddeb3ab8ceb55c76fa0f58f8169c34679d2256fe0 + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.18.6, @babel/helper-annotate-as-pure@npm:^7.27.1, @babel/helper-annotate-as-pure@npm:^7.27.3": version: 7.27.3 resolution: "@babel/helper-annotate-as-pure@npm:7.27.3" @@ -268,6 +313,21 @@ __metadata: languageName: node linkType: hard +"@babel/helper-define-polyfill-provider@npm:^0.6.8": + version: 0.6.8 + resolution: "@babel/helper-define-polyfill-provider@npm:0.6.8" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + debug: "npm:^4.4.3" + lodash.debounce: "npm:^4.0.8" + resolve: "npm:^1.22.11" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10/a6f9fbb82578464da35eec88c7f3e70bdd95237bfc1d3ebb9cf4536a86a577b7c6e587f9a6797b01ee08629599ee2bc6fdab39e99de505751a30d9b4877202ab + languageName: node + linkType: hard + "@babel/helper-globals@npm:^7.28.0": version: 7.28.0 resolution: "@babel/helper-globals@npm:7.28.0" @@ -477,6 +537,17 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.29.0": + version: 7.29.2 + resolution: "@babel/parser@npm:7.29.2" + dependencies: + "@babel/types": "npm:^7.29.0" + bin: + parser: ./bin/babel-parser.js + checksum: 10/45d050bf75aa5194b3255f156173e8553d615ff5a2434674cc4a10cdc7c261931befb8618c996a1c449b87f0ef32a3407879af2ac967d95dc7b4fdbae7037efa + languageName: node + linkType: hard + "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.28.5": version: 7.28.5 resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.28.5" @@ -784,6 +855,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-jsx@npm:^7.7.2": + version: 7.28.6 + resolution: "@babel/plugin-syntax-jsx@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/572e38f5c1bb4b8124300e7e3dd13e82ae84a21f90d3f0786c98cd05e63c78ca1f32d1cfe462dfbaf5e7d5102fa7cd8fd741dfe4f3afc2e01a3b2877dcc8c866 + languageName: node + linkType: hard + "@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" @@ -883,6 +965,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.28.6 + resolution: "@babel/plugin-syntax-typescript@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/5c55f9c63bd36cf3d7e8db892294c8f85000f9c1526c3a1cc310d47d1e174f5c6f6605e5cc902c4636d885faba7a9f3d5e5edc6b35e4f3b1fd4c2d58d0304fa5 + languageName: node + linkType: hard + "@babel/plugin-syntax-unicode-sets-regex@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-syntax-unicode-sets-regex@npm:7.18.6" @@ -932,6 +1025,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-async-generator-functions@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.29.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/helper-remap-async-to-generator": "npm:^7.27.1" + "@babel/traverse": "npm:^7.29.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/e2c064a5eb212cbdf14f7c0113e069b845ca0f0ba431c1cc04607d3fc4f3bf1ed70f5c375fe7c61338a45db88bc1a79d270c8d633ce12256e1fce3666c1e6b93 + languageName: node + linkType: hard + "@babel/plugin-transform-async-to-generator@npm:^7.24.7, @babel/plugin-transform-async-to-generator@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-async-to-generator@npm:7.27.1" @@ -1166,6 +1272,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.29.0" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.28.5" + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10/7fa7b773259a578c9e01c80946f75ecc074520064aa7a87a65db06c7df70766e2fa6be78cda55fa9418a14e30b2b9d595484a46db48074d495d9f877a4276065 + languageName: node + linkType: hard + "@babel/plugin-transform-dynamic-import@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-dynamic-import@npm:7.27.1" @@ -1387,6 +1505,20 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-modules-systemjs@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.29.0" + dependencies: + "@babel/helper-module-transforms": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/helper-validator-identifier": "npm:^7.28.5" + "@babel/traverse": "npm:^7.29.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/b3e64728eef02d829510778226da4c06be740fe52e0d45d4aa68b24083096d8ad7df67f2e9e67198b2e85f3237d42bd66f5771f85846f7a746105d05ca2e0cae + languageName: node + linkType: hard + "@babel/plugin-transform-modules-umd@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-modules-umd@npm:7.27.1" @@ -1411,6 +1543,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.29.0" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.28.5" + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10/ed8c27699ca82a6c01cbfd39f3de16b90cfea4f8146a358057f76df290d308a66a8bd2e6734e6a87f68c18576e15d2d70548a84cd474d26fdf256c3f5ae44d8c + languageName: node + linkType: hard + "@babel/plugin-transform-new-target@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-new-target@npm:7.27.1" @@ -1719,6 +1863,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-regenerator@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/plugin-transform-regenerator@npm:7.29.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/c8fa9da74371568c5d34fd7d53de018752550cb10334040ca59e41f34b27f127974bdc5b4d1a1a8e8f3ebcf3cb7f650aa3f2df3b7bf1b7edf67c04493b9e3cb8 + languageName: node + linkType: hard + "@babel/plugin-transform-regexp-modifiers@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-regexp-modifiers@npm:7.27.1" @@ -2015,6 +2170,86 @@ __metadata: languageName: node linkType: hard +"@babel/preset-env@npm:^7.25.3": + version: 7.29.2 + resolution: "@babel/preset-env@npm:7.29.2" + dependencies: + "@babel/compat-data": "npm:^7.29.0" + "@babel/helper-compilation-targets": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/helper-validator-option": "npm:^7.27.1" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.28.5" + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.27.1" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.27.1" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.27.1" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.28.6" + "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-import-assertions": "npm:^7.28.6" + "@babel/plugin-syntax-import-attributes": "npm:^7.28.6" + "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" + "@babel/plugin-transform-arrow-functions": "npm:^7.27.1" + "@babel/plugin-transform-async-generator-functions": "npm:^7.29.0" + "@babel/plugin-transform-async-to-generator": "npm:^7.28.6" + "@babel/plugin-transform-block-scoped-functions": "npm:^7.27.1" + "@babel/plugin-transform-block-scoping": "npm:^7.28.6" + "@babel/plugin-transform-class-properties": "npm:^7.28.6" + "@babel/plugin-transform-class-static-block": "npm:^7.28.6" + "@babel/plugin-transform-classes": "npm:^7.28.6" + "@babel/plugin-transform-computed-properties": "npm:^7.28.6" + "@babel/plugin-transform-destructuring": "npm:^7.28.5" + "@babel/plugin-transform-dotall-regex": "npm:^7.28.6" + "@babel/plugin-transform-duplicate-keys": "npm:^7.27.1" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.29.0" + "@babel/plugin-transform-dynamic-import": "npm:^7.27.1" + "@babel/plugin-transform-explicit-resource-management": "npm:^7.28.6" + "@babel/plugin-transform-exponentiation-operator": "npm:^7.28.6" + "@babel/plugin-transform-export-namespace-from": "npm:^7.27.1" + "@babel/plugin-transform-for-of": "npm:^7.27.1" + "@babel/plugin-transform-function-name": "npm:^7.27.1" + "@babel/plugin-transform-json-strings": "npm:^7.28.6" + "@babel/plugin-transform-literals": "npm:^7.27.1" + "@babel/plugin-transform-logical-assignment-operators": "npm:^7.28.6" + "@babel/plugin-transform-member-expression-literals": "npm:^7.27.1" + "@babel/plugin-transform-modules-amd": "npm:^7.27.1" + "@babel/plugin-transform-modules-commonjs": "npm:^7.28.6" + "@babel/plugin-transform-modules-systemjs": "npm:^7.29.0" + "@babel/plugin-transform-modules-umd": "npm:^7.27.1" + "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.29.0" + "@babel/plugin-transform-new-target": "npm:^7.27.1" + "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.28.6" + "@babel/plugin-transform-numeric-separator": "npm:^7.28.6" + "@babel/plugin-transform-object-rest-spread": "npm:^7.28.6" + "@babel/plugin-transform-object-super": "npm:^7.27.1" + "@babel/plugin-transform-optional-catch-binding": "npm:^7.28.6" + "@babel/plugin-transform-optional-chaining": "npm:^7.28.6" + "@babel/plugin-transform-parameters": "npm:^7.27.7" + "@babel/plugin-transform-private-methods": "npm:^7.28.6" + "@babel/plugin-transform-private-property-in-object": "npm:^7.28.6" + "@babel/plugin-transform-property-literals": "npm:^7.27.1" + "@babel/plugin-transform-regenerator": "npm:^7.29.0" + "@babel/plugin-transform-regexp-modifiers": "npm:^7.28.6" + "@babel/plugin-transform-reserved-words": "npm:^7.27.1" + "@babel/plugin-transform-shorthand-properties": "npm:^7.27.1" + "@babel/plugin-transform-spread": "npm:^7.28.6" + "@babel/plugin-transform-sticky-regex": "npm:^7.27.1" + "@babel/plugin-transform-template-literals": "npm:^7.27.1" + "@babel/plugin-transform-typeof-symbol": "npm:^7.27.1" + "@babel/plugin-transform-unicode-escapes": "npm:^7.27.1" + "@babel/plugin-transform-unicode-property-regex": "npm:^7.28.6" + "@babel/plugin-transform-unicode-regex": "npm:^7.27.1" + "@babel/plugin-transform-unicode-sets-regex": "npm:^7.28.6" + "@babel/preset-modules": "npm:0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2: "npm:^0.4.15" + babel-plugin-polyfill-corejs3: "npm:^0.14.0" + babel-plugin-polyfill-regenerator: "npm:^0.6.6" + core-js-compat: "npm:^3.48.0" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/25a2dd82483d0f5bc781a939cebf502b80415d057806c87073f00f9a943c440b9862a265ca445ea1cba1fa79ee6361d05485465cdfc7797a0ec6d6493cf5d95b + languageName: node + linkType: hard + "@babel/preset-env@npm:^7.28.6": version: 7.28.6 resolution: "@babel/preset-env@npm:7.28.6" @@ -2226,6 +2461,21 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/traverse@npm:7.29.0" + dependencies: + "@babel/code-frame": "npm:^7.29.0" + "@babel/generator": "npm:^7.29.0" + "@babel/helper-globals": "npm:^7.28.0" + "@babel/parser": "npm:^7.29.0" + "@babel/template": "npm:^7.28.6" + "@babel/types": "npm:^7.29.0" + debug: "npm:^4.3.1" + checksum: 10/3a0d0438f1ba9fed4fbe1706ea598a865f9af655a16ca9517ab57bda526e224569ca1b980b473fb68feea5e08deafbbf2cf9febb941f92f2d2533310c3fc4abc + languageName: node + linkType: hard + "@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.2, @babel/types@npm:^7.26.0, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.28.2, @babel/types@npm:^7.28.4, @babel/types@npm:^7.28.5, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": version: 7.28.5 resolution: "@babel/types@npm:7.28.5" @@ -2246,6 +2496,16 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/types@npm:7.29.0" + dependencies: + "@babel/helper-string-parser": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.28.5" + checksum: 10/bfc2b211210f3894dcd7e6a33b2d1c32c93495dc1e36b547376aa33441abe551ab4bc1640d4154ee2acd8e46d3bbc925c7224caae02fcaf0e6a771e97fccc661 + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" @@ -2338,29 +2598,29 @@ __metadata: languageName: node linkType: hard -"@eslint-community/eslint-utils@npm:^4.4.1, @eslint-community/eslint-utils@npm:^4.8.0": - version: 4.9.0 - resolution: "@eslint-community/eslint-utils@npm:4.9.0" +"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0, @eslint-community/eslint-utils@npm:^4.9.1": + version: 4.9.1 + resolution: "@eslint-community/eslint-utils@npm:4.9.1" dependencies: eslint-visitor-keys: "npm:^3.4.3" peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - checksum: 10/89b1eb3137e14c379865e60573f524fcc0ee5c4b0c7cd21090673e75e5a720f14b92f05ab2d02704c2314b67e67b6f96f3bb209ded6b890ced7b667aa4bf1fa2 + checksum: 10/863b5467868551c9ae34d03eefe634633d08f623fc7b19d860f8f26eb6f303c1a5934253124163bee96181e45ed22bf27473dccc295937c3078493a4a8c9eddd languageName: node linkType: hard -"@eslint-community/eslint-utils@npm:^4.9.1": - version: 4.9.1 - resolution: "@eslint-community/eslint-utils@npm:4.9.1" +"@eslint-community/eslint-utils@npm:^4.4.1, @eslint-community/eslint-utils@npm:^4.8.0": + version: 4.9.0 + resolution: "@eslint-community/eslint-utils@npm:4.9.0" dependencies: eslint-visitor-keys: "npm:^3.4.3" peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - checksum: 10/863b5467868551c9ae34d03eefe634633d08f623fc7b19d860f8f26eb6f303c1a5934253124163bee96181e45ed22bf27473dccc295937c3078493a4a8c9eddd + checksum: 10/89b1eb3137e14c379865e60573f524fcc0ee5c4b0c7cd21090673e75e5a720f14b92f05ab2d02704c2314b67e67b6f96f3bb209ded6b890ced7b667aa4bf1fa2 languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.12.2": +"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.12.2, @eslint-community/regexpp@npm:^4.6.1": version: 4.12.2 resolution: "@eslint-community/regexpp@npm:4.12.2" checksum: 10/049b280fddf71dd325514e0a520024969431dc3a8b02fa77476e6820e9122f28ab4c9168c11821f91a27982d2453bcd7a66193356ea84e84fb7c8d793be1ba0c @@ -2396,6 +2656,23 @@ __metadata: languageName: node linkType: hard +"@eslint/eslintrc@npm:^2.1.4": + version: 2.1.4 + resolution: "@eslint/eslintrc@npm:2.1.4" + dependencies: + ajv: "npm:^6.12.4" + debug: "npm:^4.3.2" + espree: "npm:^9.6.0" + globals: "npm:^13.19.0" + ignore: "npm:^5.2.0" + import-fresh: "npm:^3.2.1" + js-yaml: "npm:^4.1.0" + minimatch: "npm:^3.1.2" + strip-json-comments: "npm:^3.1.1" + checksum: 10/7a3b14f4b40fc1a22624c3f84d9f467a3d9ea1ca6e9a372116cb92507e485260359465b58e25bcb6c9981b155416b98c9973ad9b796053fd7b3f776a6946bce8 + languageName: node + linkType: hard + "@eslint/eslintrc@npm:^3.3.5": version: 3.3.5 resolution: "@eslint/eslintrc@npm:3.3.5" @@ -2413,6 +2690,13 @@ __metadata: languageName: node linkType: hard +"@eslint/js@npm:8.57.1": + version: 8.57.1 + resolution: "@eslint/js@npm:8.57.1" + checksum: 10/7562b21be10c2adbfa4aa5bb2eccec2cb9ac649a3569560742202c8d1cb6c931ce634937a2f0f551e078403a1c1285d6c2c0aa345dafc986149665cd69fe8b59 + languageName: node + linkType: hard + "@eslint/js@npm:^10.0.1": version: 10.0.1 resolution: "@eslint/js@npm:10.0.1" @@ -2518,43 +2802,158 @@ __metadata: languageName: node linkType: hard -"@expo/code-signing-certificates@npm:^0.0.6": - version: 0.0.6 - resolution: "@expo/code-signing-certificates@npm:0.0.6" - dependencies: - node-forge: "npm:^1.3.3" - checksum: 10/4446cca45e8b48b90ba728e39aab6b1195ede730d7aba7d9830f635aa16a52634e6eba9dc510f83cc6ff6fb6b0e3077bc6021098f0157f6dba96f8494685c388 - languageName: node - linkType: hard - -"@expo/config-plugins@npm:~55.0.6": - version: 55.0.6 - resolution: "@expo/config-plugins@npm:55.0.6" +"@expo/cli@npm:55.0.26": + version: 55.0.26 + resolution: "@expo/cli@npm:55.0.26" dependencies: - "@expo/config-types": "npm:^55.0.5" - "@expo/json-file": "npm:~10.0.12" + "@expo/code-signing-certificates": "npm:^0.0.6" + "@expo/config": "npm:~55.0.15" + "@expo/config-plugins": "npm:~55.0.8" + "@expo/devcert": "npm:^1.2.1" + "@expo/env": "npm:~2.1.1" + "@expo/image-utils": "npm:^0.8.13" + "@expo/json-file": "npm:^10.0.13" + "@expo/log-box": "npm:55.0.11" + "@expo/metro": "npm:~55.1.0" + "@expo/metro-config": "npm:~55.0.17" + "@expo/osascript": "npm:^2.4.2" + "@expo/package-manager": "npm:^1.10.4" "@expo/plist": "npm:^0.5.2" - "@expo/sdk-runtime-versions": "npm:^1.0.0" - chalk: "npm:^4.1.2" - debug: "npm:^4.3.5" + "@expo/prebuild-config": "npm:^55.0.16" + "@expo/require-utils": "npm:^55.0.4" + "@expo/router-server": "npm:^55.0.15" + "@expo/schema-utils": "npm:^55.0.3" + "@expo/spawn-async": "npm:^1.7.2" + "@expo/ws-tunnel": "npm:^1.0.1" + "@expo/xcpretty": "npm:^4.4.0" + "@react-native/dev-middleware": "npm:0.83.6" + accepts: "npm:^1.3.8" + arg: "npm:^5.0.2" + better-opn: "npm:~3.0.2" + bplist-creator: "npm:0.1.0" + bplist-parser: "npm:^0.3.1" + chalk: "npm:^4.0.0" + ci-info: "npm:^3.3.0" + compression: "npm:^1.7.4" + connect: "npm:^3.7.0" + debug: "npm:^4.3.4" + dnssd-advertise: "npm:^1.1.4" + expo-server: "npm:^55.0.8" + fetch-nodeshim: "npm:^0.4.10" getenv: "npm:^2.0.0" glob: "npm:^13.0.0" + lan-network: "npm:^0.2.1" + multitars: "npm:^1.0.0" + node-forge: "npm:^1.3.3" + npm-package-arg: "npm:^11.0.0" + ora: "npm:^3.4.0" + picomatch: "npm:^4.0.3" + pretty-format: "npm:^29.7.0" + progress: "npm:^2.0.3" + prompts: "npm:^2.3.2" resolve-from: "npm:^5.0.0" - semver: "npm:^7.5.4" - slugify: "npm:^1.6.6" - xcode: "npm:^3.0.1" - xml2js: "npm:0.6.0" - checksum: 10/2805380b694f9e21c7e2bfaba0ad6a8266af6093f7fc4ba413b5a7099329620eaecbbaa070c506f8e5eb06c8cb605f48e7491adba6ddf989e36bff14a396c48a - languageName: node - linkType: hard - -"@expo/config-types@npm:^55.0.5": - version: 55.0.5 - resolution: "@expo/config-types@npm:55.0.5" + semver: "npm:^7.6.0" + send: "npm:^0.19.0" + slugify: "npm:^1.3.4" + source-map-support: "npm:~0.5.21" + stacktrace-parser: "npm:^0.1.10" + structured-headers: "npm:^0.4.1" + terminal-link: "npm:^2.1.1" + toqr: "npm:^0.1.1" + wrap-ansi: "npm:^7.0.0" + ws: "npm:^8.12.1" + zod: "npm:^3.25.76" + peerDependencies: + expo: "*" + expo-router: "*" + react-native: "*" + peerDependenciesMeta: + expo-router: + optional: true + react-native: + optional: true + bin: + expo-internal: build/bin/cli + checksum: 10/7038f77ae092ec0514e0c5f8a32917a1cf0a6e6088e6f4c26dbef56996a765bbc7b7688258a55b100942eb511fad0c05695342605857bd8ce4d3809a55d62197 + languageName: node + linkType: hard + +"@expo/code-signing-certificates@npm:^0.0.6": + version: 0.0.6 + resolution: "@expo/code-signing-certificates@npm:0.0.6" + dependencies: + node-forge: "npm:^1.3.3" + checksum: 10/4446cca45e8b48b90ba728e39aab6b1195ede730d7aba7d9830f635aa16a52634e6eba9dc510f83cc6ff6fb6b0e3077bc6021098f0157f6dba96f8494685c388 + languageName: node + linkType: hard + +"@expo/config-plugins@npm:~55.0.6": + version: 55.0.6 + resolution: "@expo/config-plugins@npm:55.0.6" + dependencies: + "@expo/config-types": "npm:^55.0.5" + "@expo/json-file": "npm:~10.0.12" + "@expo/plist": "npm:^0.5.2" + "@expo/sdk-runtime-versions": "npm:^1.0.0" + chalk: "npm:^4.1.2" + debug: "npm:^4.3.5" + getenv: "npm:^2.0.0" + glob: "npm:^13.0.0" + resolve-from: "npm:^5.0.0" + semver: "npm:^7.5.4" + slugify: "npm:^1.6.6" + xcode: "npm:^3.0.1" + xml2js: "npm:0.6.0" + checksum: 10/2805380b694f9e21c7e2bfaba0ad6a8266af6093f7fc4ba413b5a7099329620eaecbbaa070c506f8e5eb06c8cb605f48e7491adba6ddf989e36bff14a396c48a + languageName: node + linkType: hard + +"@expo/config-plugins@npm:~55.0.8": + version: 55.0.8 + resolution: "@expo/config-plugins@npm:55.0.8" + dependencies: + "@expo/config-types": "npm:^55.0.5" + "@expo/json-file": "npm:~10.0.13" + "@expo/plist": "npm:^0.5.2" + "@expo/sdk-runtime-versions": "npm:^1.0.0" + chalk: "npm:^4.1.2" + debug: "npm:^4.3.5" + getenv: "npm:^2.0.0" + glob: "npm:^13.0.0" + resolve-from: "npm:^5.0.0" + semver: "npm:^7.5.4" + slugify: "npm:^1.6.6" + xcode: "npm:^3.0.1" + xml2js: "npm:0.6.0" + checksum: 10/41ad533f83a01ffec8ca580fcf282a5aa61cd0494a8e29ce68ba11d929091c96dfeac49521e03144e2eb8551525096065e8c2e36bebd2bb2d1fddf89380312c4 + languageName: node + linkType: hard + +"@expo/config-types@npm:^55.0.5": + version: 55.0.5 + resolution: "@expo/config-types@npm:55.0.5" checksum: 10/9a7b5a025218618b6810d720663ef973b5497baedb194ed29ed60f4aa3d4b012676e57c71807a96aa78f099d562030b3246ae403776b46e0db56db68c6f3ac82 languageName: node linkType: hard +"@expo/config@npm:~55.0.15": + version: 55.0.15 + resolution: "@expo/config@npm:55.0.15" + dependencies: + "@expo/config-plugins": "npm:~55.0.8" + "@expo/config-types": "npm:^55.0.5" + "@expo/json-file": "npm:^10.0.13" + "@expo/require-utils": "npm:^55.0.4" + deepmerge: "npm:^4.3.1" + getenv: "npm:^2.0.0" + glob: "npm:^13.0.0" + resolve-workspace-root: "npm:^2.0.0" + semver: "npm:^7.6.0" + slugify: "npm:^1.3.4" + checksum: 10/34958a61e25746fc8baf242e682dc6c12148f624469256852dbaaf72c0a27262e2a2d9f383db5b76eb0a1cf47ecf30328df8eca9b707470753526af89a56af1b + languageName: node + linkType: hard + "@expo/config@npm:~55.0.8": version: 55.0.8 resolution: "@expo/config@npm:55.0.8" @@ -2612,6 +3011,17 @@ __metadata: languageName: node linkType: hard +"@expo/dom-webview@npm:^55.0.5": + version: 55.0.5 + resolution: "@expo/dom-webview@npm:55.0.5" + peerDependencies: + expo: "*" + react: "*" + react-native: "*" + checksum: 10/ccce1491f2ade58bcaf79158a99a978748f9666d5cb2af946fd33a686e005fc250ee27456f4d7ec63098049d034eb15a538172eb53ec3dfc07673555b77a8517 + languageName: node + linkType: hard + "@expo/env@npm:^2.0.11, @expo/env@npm:~2.1.1": version: 2.1.1 resolution: "@expo/env@npm:2.1.1" @@ -2644,6 +3054,27 @@ __metadata: languageName: node linkType: hard +"@expo/fingerprint@npm:0.16.6": + version: 0.16.6 + resolution: "@expo/fingerprint@npm:0.16.6" + dependencies: + "@expo/env": "npm:^2.0.11" + "@expo/spawn-async": "npm:^1.7.2" + arg: "npm:^5.0.2" + chalk: "npm:^4.1.2" + debug: "npm:^4.3.4" + getenv: "npm:^2.0.0" + glob: "npm:^13.0.0" + ignore: "npm:^5.3.1" + minimatch: "npm:^10.2.2" + resolve-from: "npm:^5.0.0" + semver: "npm:^7.6.0" + bin: + fingerprint: bin/cli.js + checksum: 10/2bf59bd6964c17c7bbcf66f963684909345f7b0b5da459be5cc34f27eae4860cd18e8644db30a2cec1553f67b81dce26983d00e34dbafa59f2e0bfa5783fc787 + languageName: node + linkType: hard + "@expo/image-utils@npm:^0.8.12": version: 0.8.12 resolution: "@expo/image-utils@npm:0.8.12" @@ -2659,6 +3090,21 @@ __metadata: languageName: node linkType: hard +"@expo/image-utils@npm:^0.8.13": + version: 0.8.13 + resolution: "@expo/image-utils@npm:0.8.13" + dependencies: + "@expo/require-utils": "npm:^55.0.4" + "@expo/spawn-async": "npm:^1.7.2" + chalk: "npm:^4.0.0" + getenv: "npm:^2.0.0" + jimp-compact: "npm:0.16.1" + parse-png: "npm:^2.1.0" + semver: "npm:^7.6.0" + checksum: 10/4204905938152de0a35fe6796e967b577e7a62785cd3df5c6710ad7669bc95a1314b96276c4da880230a4a182b35c88dea946b4a9edcb31f12ddc26bfbc965e7 + languageName: node + linkType: hard + "@expo/json-file@npm:^10.0.12, @expo/json-file@npm:~10.0.12": version: 10.0.12 resolution: "@expo/json-file@npm:10.0.12" @@ -2669,6 +3115,26 @@ __metadata: languageName: node linkType: hard +"@expo/json-file@npm:^10.0.13, @expo/json-file@npm:~10.0.13": + version: 10.0.13 + resolution: "@expo/json-file@npm:10.0.13" + dependencies: + "@babel/code-frame": "npm:^7.20.0" + json5: "npm:^2.2.3" + checksum: 10/9df812a1fb2e095f53a3ca83c8fcc800245918e195e3d879efc5ff360ac32f649756dabc6b44e351a4526815b98e6c3ff82accf46afa09eab8f09e1582fb9fa0 + languageName: node + linkType: hard + +"@expo/local-build-cache-provider@npm:55.0.11": + version: 55.0.11 + resolution: "@expo/local-build-cache-provider@npm:55.0.11" + dependencies: + "@expo/config": "npm:~55.0.15" + chalk: "npm:^4.1.2" + checksum: 10/83ed17f776329ce6a0ac5cbec457e5bc0736793c2468054afe2420d183e10acec9e10d4915853586f6242c22d662f8bd6c73561b0a1b562014da108a4cd2ef02 + languageName: node + linkType: hard + "@expo/local-build-cache-provider@npm:55.0.6": version: 55.0.6 resolution: "@expo/local-build-cache-provider@npm:55.0.6" @@ -2679,6 +3145,22 @@ __metadata: languageName: node linkType: hard +"@expo/log-box@npm:55.0.11": + version: 55.0.11 + resolution: "@expo/log-box@npm:55.0.11" + dependencies: + "@expo/dom-webview": "npm:^55.0.5" + anser: "npm:^1.4.9" + stacktrace-parser: "npm:^0.1.10" + peerDependencies: + "@expo/dom-webview": ^55.0.5 + expo: "*" + react: "*" + react-native: "*" + checksum: 10/8a14f3afe4fddbc0fe36d4682b6e8d2165304370ba3acc26be131ba1db00dedf438d13d2ce4ca9630fabf747d1d5725997012815a1548380be0e9eb3ee2cac52 + languageName: node + linkType: hard + "@expo/log-box@npm:55.0.7": version: 55.0.7 resolution: "@expo/log-box@npm:55.0.7" @@ -2695,6 +3177,38 @@ __metadata: languageName: node linkType: hard +"@expo/metro-config@npm:55.0.17, @expo/metro-config@npm:~55.0.17": + version: 55.0.17 + resolution: "@expo/metro-config@npm:55.0.17" + dependencies: + "@babel/code-frame": "npm:^7.20.0" + "@babel/core": "npm:^7.20.0" + "@babel/generator": "npm:^7.20.5" + "@expo/config": "npm:~55.0.15" + "@expo/env": "npm:~2.1.1" + "@expo/json-file": "npm:~10.0.13" + "@expo/metro": "npm:~55.1.0" + "@expo/spawn-async": "npm:^1.7.2" + browserslist: "npm:^4.25.0" + chalk: "npm:^4.1.0" + debug: "npm:^4.3.2" + getenv: "npm:^2.0.0" + glob: "npm:^13.0.0" + hermes-parser: "npm:^0.32.0" + jsc-safe-url: "npm:^0.2.4" + lightningcss: "npm:^1.30.1" + picomatch: "npm:^4.0.3" + postcss: "npm:~8.4.32" + resolve-from: "npm:^5.0.0" + peerDependencies: + expo: "*" + peerDependenciesMeta: + expo: + optional: true + checksum: 10/8df08e2d5fef6d3355952b2a9427bb0db000c9df8260663f3774f0dc6b21947e44cf350005312f83e1a624dec40fab7e4a8423ebcfda899c13ac832a9e66e1a8 + languageName: node + linkType: hard + "@expo/metro-config@npm:55.0.9, @expo/metro-config@npm:~55.0.9": version: 55.0.9 resolution: "@expo/metro-config@npm:55.0.9" @@ -2749,6 +3263,28 @@ __metadata: languageName: node linkType: hard +"@expo/metro@npm:~55.1.0": + version: 55.1.0 + resolution: "@expo/metro@npm:55.1.0" + dependencies: + metro: "npm:0.83.6" + metro-babel-transformer: "npm:0.83.6" + metro-cache: "npm:0.83.6" + metro-cache-key: "npm:0.83.6" + metro-config: "npm:0.83.6" + metro-core: "npm:0.83.6" + metro-file-map: "npm:0.83.6" + metro-minify-terser: "npm:0.83.6" + metro-resolver: "npm:0.83.6" + metro-runtime: "npm:0.83.6" + metro-source-map: "npm:0.83.6" + metro-symbolicate: "npm:0.83.6" + metro-transform-plugins: "npm:0.83.6" + metro-transform-worker: "npm:0.83.6" + checksum: 10/90ad336876b29ca9e249f606f0e358f962ef5da66d7093210cb655466812a0041622e64394a5ac50e02163758bd6e3b265a1eb5a143eb0272c18c18e4d6a3515 + languageName: node + linkType: hard + "@expo/osascript@npm:^2.4.2": version: 2.4.2 resolution: "@expo/osascript@npm:2.4.2" @@ -2772,6 +3308,20 @@ __metadata: languageName: node linkType: hard +"@expo/package-manager@npm:^1.10.4": + version: 1.10.4 + resolution: "@expo/package-manager@npm:1.10.4" + dependencies: + "@expo/json-file": "npm:^10.0.13" + "@expo/spawn-async": "npm:^1.7.2" + chalk: "npm:^4.0.0" + npm-package-arg: "npm:^11.0.0" + ora: "npm:^3.4.0" + resolve-workspace-root: "npm:^2.0.0" + checksum: 10/936c24a20586fee647326bce96367bf1ca6a2e37395bf210ca0538f83c6899ea949bb3db8fb06eb2acfabc9b5da7dda56f131a025c4d6c5ba036e3910bbb5a61 + languageName: node + linkType: hard + "@expo/plist@npm:^0.5.2": version: 0.5.2 resolution: "@expo/plist@npm:0.5.2" @@ -2783,6 +3333,26 @@ __metadata: languageName: node linkType: hard +"@expo/prebuild-config@npm:^55.0.16": + version: 55.0.16 + resolution: "@expo/prebuild-config@npm:55.0.16" + dependencies: + "@expo/config": "npm:~55.0.15" + "@expo/config-plugins": "npm:~55.0.8" + "@expo/config-types": "npm:^55.0.5" + "@expo/image-utils": "npm:^0.8.13" + "@expo/json-file": "npm:^10.0.13" + "@react-native/normalize-colors": "npm:0.83.6" + debug: "npm:^4.3.1" + resolve-from: "npm:^5.0.0" + semver: "npm:^7.6.0" + xml2js: "npm:0.6.0" + peerDependencies: + expo: "*" + checksum: 10/9d437f9f6fe8cf3a1408e250ae69c3e0f87d745f01a895a1b07affd264819e01ee1a5c934f02dcfca386d68e0d71b85a78a4f0c242030f9edfdbac0bd8941363 + languageName: node + linkType: hard + "@expo/prebuild-config@npm:^55.0.8": version: 55.0.8 resolution: "@expo/prebuild-config@npm:55.0.8" @@ -2819,6 +3389,50 @@ __metadata: languageName: node linkType: hard +"@expo/require-utils@npm:^55.0.4": + version: 55.0.4 + resolution: "@expo/require-utils@npm:55.0.4" + dependencies: + "@babel/code-frame": "npm:^7.20.0" + "@babel/core": "npm:^7.25.2" + "@babel/plugin-transform-modules-commonjs": "npm:^7.24.8" + peerDependencies: + typescript: ^5.0.0 || ^5.0.0-0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10/37afedd82c09775590e9974e9813526f521845a04808fa0e439f0377fc00fab134e9a3a088fcf0567b5cb7c6467be67d705995952e736bfc9a2da0fcba451220 + languageName: node + linkType: hard + +"@expo/router-server@npm:^55.0.15": + version: 55.0.15 + resolution: "@expo/router-server@npm:55.0.15" + dependencies: + debug: "npm:^4.3.4" + peerDependencies: + "@expo/metro-runtime": ^55.0.10 + expo: "*" + expo-constants: ^55.0.15 + expo-font: ^55.0.6 + expo-router: "*" + expo-server: ^55.0.8 + react: "*" + react-dom: "*" + react-server-dom-webpack: ~19.0.1 || ~19.1.2 || ~19.2.1 + peerDependenciesMeta: + "@expo/metro-runtime": + optional: true + expo-router: + optional: true + react-dom: + optional: true + react-server-dom-webpack: + optional: true + checksum: 10/ecb299d9c0b02bc5976728fc075af9d56cf94a4fac227fc909388f97a9b397fc58b13310ab07a0e385cb6cf966c5344fbfafacc00fb3313c270cafdb8b14077d + languageName: node + linkType: hard + "@expo/router-server@npm:^55.0.9": version: 55.0.9 resolution: "@expo/router-server@npm:55.0.9" @@ -2854,6 +3468,13 @@ __metadata: languageName: node linkType: hard +"@expo/schema-utils@npm:^55.0.3": + version: 55.0.3 + resolution: "@expo/schema-utils@npm:55.0.3" + checksum: 10/dfbed418a68ff59b725b5bdaddccdc2e71b83ccc7f982db5a6de3020a7ce7179103db669195f2a4165e8de1da0415d4012c7a444ff576c9c8ed8f6b81dff772b + languageName: node + linkType: hard + "@expo/sdk-runtime-versions@npm:^1.0.0": version: 1.0.0 resolution: "@expo/sdk-runtime-versions@npm:1.0.0" @@ -4061,6 +4682,17 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/config-array@npm:^0.13.0": + version: 0.13.0 + resolution: "@humanwhocodes/config-array@npm:0.13.0" + dependencies: + "@humanwhocodes/object-schema": "npm:^2.0.3" + debug: "npm:^4.3.1" + minimatch: "npm:^3.0.5" + checksum: 10/524df31e61a85392a2433bf5d03164e03da26c03d009f27852e7dcfdafbc4a23f17f021dacf88e0a7a9fe04ca032017945d19b57a16e2676d9114c22a53a9d11 + languageName: node + linkType: hard + "@humanwhocodes/module-importer@npm:^1.0.1": version: 1.0.1 resolution: "@humanwhocodes/module-importer@npm:1.0.1" @@ -4068,6 +4700,13 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/object-schema@npm:^2.0.3": + version: 2.0.3 + resolution: "@humanwhocodes/object-schema@npm:2.0.3" + checksum: 10/05bb99ed06c16408a45a833f03a732f59bf6184795d4efadd33238ff8699190a8c871ad1121241bb6501589a9598dc83bf25b99dcbcf41e155cdf36e35e937a3 + languageName: node + linkType: hard + "@humanwhocodes/retry@npm:^0.4.0, @humanwhocodes/retry@npm:^0.4.2": version: 0.4.3 resolution: "@humanwhocodes/retry@npm:0.4.3" @@ -4423,6 +5062,20 @@ __metadata: languageName: node linkType: hard +"@jest/console@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/console@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + jest-message-util: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + slash: "npm:^3.0.0" + checksum: 10/4a80c750e8a31f344233cb9951dee9b77bf6b89377cb131f8b3cde07ff218f504370133a5963f6a786af4d2ce7f85642db206ff7a15f99fe58df4c38ac04899e + languageName: node + linkType: hard + "@jest/core@npm:30.2.0": version: 30.2.0 resolution: "@jest/core@npm:30.2.0" @@ -4464,6 +5117,47 @@ __metadata: languageName: node linkType: hard +"@jest/core@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/core@npm:29.7.0" + dependencies: + "@jest/console": "npm:^29.7.0" + "@jest/reporters": "npm:^29.7.0" + "@jest/test-result": "npm:^29.7.0" + "@jest/transform": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + ansi-escapes: "npm:^4.2.1" + chalk: "npm:^4.0.0" + ci-info: "npm:^3.2.0" + exit: "npm:^0.1.2" + graceful-fs: "npm:^4.2.9" + jest-changed-files: "npm:^29.7.0" + jest-config: "npm:^29.7.0" + jest-haste-map: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-regex-util: "npm:^29.6.3" + jest-resolve: "npm:^29.7.0" + jest-resolve-dependencies: "npm:^29.7.0" + jest-runner: "npm:^29.7.0" + jest-runtime: "npm:^29.7.0" + jest-snapshot: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + jest-validate: "npm:^29.7.0" + jest-watcher: "npm:^29.7.0" + micromatch: "npm:^4.0.4" + pretty-format: "npm:^29.7.0" + slash: "npm:^3.0.0" + strip-ansi: "npm:^6.0.0" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: 10/ab6ac2e562d083faac7d8152ec1cc4eccc80f62e9579b69ed40aedf7211a6b2d57024a6cd53c4e35fd051c39a236e86257d1d99ebdb122291969a0a04563b51e + languageName: node + linkType: hard + "@jest/create-cache-key-function@npm:^29.6.3, @jest/create-cache-key-function@npm:^29.7.0": version: 29.7.0 resolution: "@jest/create-cache-key-function@npm:29.7.0" @@ -4513,6 +5207,15 @@ __metadata: languageName: node linkType: hard +"@jest/expect-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect-utils@npm:29.7.0" + dependencies: + jest-get-type: "npm:^29.6.3" + checksum: 10/ef8d379778ef574a17bde2801a6f4469f8022a46a5f9e385191dc73bb1fc318996beaed4513fbd7055c2847227a1bed2469977821866534593a6e52a281499ee + languageName: node + linkType: hard + "@jest/expect@npm:30.2.0": version: 30.2.0 resolution: "@jest/expect@npm:30.2.0" @@ -4523,6 +5226,16 @@ __metadata: languageName: node linkType: hard +"@jest/expect@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect@npm:29.7.0" + dependencies: + expect: "npm:^29.7.0" + jest-snapshot: "npm:^29.7.0" + checksum: 10/fea6c3317a8da5c840429d90bfe49d928e89c9e89fceee2149b93a11b7e9c73d2f6e4d7cdf647163da938fc4e2169e4490be6bae64952902bc7a701033fd4880 + languageName: node + linkType: hard + "@jest/fake-timers@npm:30.2.0": version: 30.2.0 resolution: "@jest/fake-timers@npm:30.2.0" @@ -4570,6 +5283,18 @@ __metadata: languageName: node linkType: hard +"@jest/globals@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/globals@npm:29.7.0" + dependencies: + "@jest/environment": "npm:^29.7.0" + "@jest/expect": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + jest-mock: "npm:^29.7.0" + checksum: 10/97dbb9459135693ad3a422e65ca1c250f03d82b2a77f6207e7fa0edd2c9d2015fbe4346f3dc9ebff1678b9d8da74754d4d440b7837497f8927059c0642a22123 + languageName: node + linkType: hard + "@jest/pattern@npm:30.0.1": version: 30.0.1 resolution: "@jest/pattern@npm:30.0.1" @@ -4591,28 +5316,65 @@ __metadata: "@jest/types": "npm:30.2.0" "@jridgewell/trace-mapping": "npm:^0.3.25" "@types/node": "npm:*" - chalk: "npm:^4.1.2" - collect-v8-coverage: "npm:^1.0.2" - exit-x: "npm:^0.2.2" - glob: "npm:^10.3.10" - graceful-fs: "npm:^4.2.11" + chalk: "npm:^4.1.2" + collect-v8-coverage: "npm:^1.0.2" + exit-x: "npm:^0.2.2" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.11" + istanbul-lib-coverage: "npm:^3.0.0" + istanbul-lib-instrument: "npm:^6.0.0" + istanbul-lib-report: "npm:^3.0.0" + istanbul-lib-source-maps: "npm:^5.0.0" + istanbul-reports: "npm:^3.1.3" + jest-message-util: "npm:30.2.0" + jest-util: "npm:30.2.0" + jest-worker: "npm:30.2.0" + slash: "npm:^3.0.0" + string-length: "npm:^4.0.2" + v8-to-istanbul: "npm:^9.0.1" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: 10/3848b59bf740c10c4e5c234dcc41c54adbd74932bf05d1d1582d09d86e9baa86ddaf3c43903505fd042ba1203c2889a732137d08058ce9dc0069ba33b5d5373d + languageName: node + linkType: hard + +"@jest/reporters@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/reporters@npm:29.7.0" + dependencies: + "@bcoe/v8-coverage": "npm:^0.2.3" + "@jest/console": "npm:^29.7.0" + "@jest/test-result": "npm:^29.7.0" + "@jest/transform": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@jridgewell/trace-mapping": "npm:^0.3.18" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + collect-v8-coverage: "npm:^1.0.0" + exit: "npm:^0.1.2" + glob: "npm:^7.1.3" + graceful-fs: "npm:^4.2.9" istanbul-lib-coverage: "npm:^3.0.0" istanbul-lib-instrument: "npm:^6.0.0" istanbul-lib-report: "npm:^3.0.0" - istanbul-lib-source-maps: "npm:^5.0.0" + istanbul-lib-source-maps: "npm:^4.0.0" istanbul-reports: "npm:^3.1.3" - jest-message-util: "npm:30.2.0" - jest-util: "npm:30.2.0" - jest-worker: "npm:30.2.0" + jest-message-util: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + jest-worker: "npm:^29.7.0" slash: "npm:^3.0.0" - string-length: "npm:^4.0.2" + string-length: "npm:^4.0.1" + strip-ansi: "npm:^6.0.0" v8-to-istanbul: "npm:^9.0.1" peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: node-notifier: optional: true - checksum: 10/3848b59bf740c10c4e5c234dcc41c54adbd74932bf05d1d1582d09d86e9baa86ddaf3c43903505fd042ba1203c2889a732137d08058ce9dc0069ba33b5d5373d + checksum: 10/a17d1644b26dea14445cedd45567f4ba7834f980be2ef74447204e14238f121b50d8b858fde648083d2cd8f305f81ba434ba49e37a5f4237a6f2a61180cc73dc languageName: node linkType: hard @@ -4657,6 +5419,17 @@ __metadata: languageName: node linkType: hard +"@jest/source-map@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/source-map@npm:29.6.3" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.18" + callsites: "npm:^3.0.0" + graceful-fs: "npm:^4.2.9" + checksum: 10/bcc5a8697d471396c0003b0bfa09722c3cd879ad697eb9c431e6164e2ea7008238a01a07193dfe3cbb48b1d258eb7251f6efcea36f64e1ebc464ea3c03ae2deb + languageName: node + linkType: hard + "@jest/test-result@npm:30.2.0": version: 30.2.0 resolution: "@jest/test-result@npm:30.2.0" @@ -4669,6 +5442,18 @@ __metadata: languageName: node linkType: hard +"@jest/test-result@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-result@npm:29.7.0" + dependencies: + "@jest/console": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/istanbul-lib-coverage": "npm:^2.0.0" + collect-v8-coverage: "npm:^1.0.0" + checksum: 10/c073ab7dfe3c562bff2b8fee6cc724ccc20aa96bcd8ab48ccb2aa309b4c0c1923a9e703cea386bd6ae9b71133e92810475bb9c7c22328fc63f797ad3324ed189 + languageName: node + linkType: hard + "@jest/test-sequencer@npm:30.2.0": version: 30.2.0 resolution: "@jest/test-sequencer@npm:30.2.0" @@ -4681,6 +5466,18 @@ __metadata: languageName: node linkType: hard +"@jest/test-sequencer@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-sequencer@npm:29.7.0" + dependencies: + "@jest/test-result": "npm:^29.7.0" + graceful-fs: "npm:^4.2.9" + jest-haste-map: "npm:^29.7.0" + slash: "npm:^3.0.0" + checksum: 10/4420c26a0baa7035c5419b0892ff8ffe9a41b1583ec54a10db3037cd46a7e29dd3d7202f8aa9d376e9e53be5f8b1bc0d16e1de6880a6d319b033b01dc4c8f639 + languageName: node + linkType: hard + "@jest/transform@npm:30.2.0": version: 30.2.0 resolution: "@jest/transform@npm:30.2.0" @@ -4974,6 +5771,15 @@ __metadata: languageName: node linkType: hard +"@nicolo-ribaudo/eslint-scope-5-internals@npm:5.1.1-v1": + version: 5.1.1-v1 + resolution: "@nicolo-ribaudo/eslint-scope-5-internals@npm:5.1.1-v1" + dependencies: + eslint-scope: "npm:5.1.1" + checksum: 10/f2e3b2d6a6e2d9f163ca22105910c9f850dc4897af0aea3ef0a5886b63d8e1ba6505b71c99cb78a3bba24a09557d601eb21c8dede3f3213753fcfef364eb0e57 + languageName: node + linkType: hard + "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -4991,7 +5797,7 @@ __metadata: languageName: node linkType: hard -"@nodelib/fs.walk@npm:^1.2.3": +"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": version: 1.2.8 resolution: "@nodelib/fs.walk@npm:1.2.8" dependencies: @@ -5838,6 +6644,18 @@ __metadata: languageName: node linkType: hard +"@react-native-community/cli-clean@npm:15.0.1": + version: 15.0.1 + resolution: "@react-native-community/cli-clean@npm:15.0.1" + dependencies: + "@react-native-community/cli-tools": "npm:15.0.1" + chalk: "npm:^4.1.2" + execa: "npm:^5.0.0" + fast-glob: "npm:^3.3.2" + checksum: 10/a1ff1824a4c1290271aaef48af0bc30ed50503ac062341fb051bb07895890414f4e208eb949b05bce79f90d1a51dd2fb133f9fbcf6c019bb7fec8c03ec4e4419 + languageName: node + linkType: hard + "@react-native-community/cli-clean@npm:15.1.3": version: 15.1.3 resolution: "@react-native-community/cli-clean@npm:15.1.3" @@ -5886,6 +6704,18 @@ __metadata: languageName: node linkType: hard +"@react-native-community/cli-config-apple@npm:15.0.1": + version: 15.0.1 + resolution: "@react-native-community/cli-config-apple@npm:15.0.1" + dependencies: + "@react-native-community/cli-tools": "npm:15.0.1" + chalk: "npm:^4.1.2" + execa: "npm:^5.0.0" + fast-glob: "npm:^3.3.2" + checksum: 10/3766bb155962d3ad4908b77db6d68e6edb6c8b4130e78c30e8cea3b1e6535e9730dc0bdc7b995b86d145621f4e992e4a2dcaf2be34b045de13d0c68692fd78ed + languageName: node + linkType: hard + "@react-native-community/cli-config-apple@npm:15.1.3": version: 15.1.3 resolution: "@react-native-community/cli-config-apple@npm:15.1.3" @@ -5910,6 +6740,20 @@ __metadata: languageName: node linkType: hard +"@react-native-community/cli-config@npm:15.0.1": + version: 15.0.1 + resolution: "@react-native-community/cli-config@npm:15.0.1" + dependencies: + "@react-native-community/cli-tools": "npm:15.0.1" + chalk: "npm:^4.1.2" + cosmiconfig: "npm:^9.0.0" + deepmerge: "npm:^4.3.0" + fast-glob: "npm:^3.3.2" + joi: "npm:^17.2.1" + checksum: 10/7fc4d4f3554ddc6d76534f3063baf8f3631c333a2445038a617c1c5630718bc775ca35fe59a7ceafd40bc1f316d1c4fae00693ea22feb367fdaf91104ead3efe + languageName: node + linkType: hard + "@react-native-community/cli-config@npm:15.1.3": version: 15.1.3 resolution: "@react-native-community/cli-config@npm:15.1.3" @@ -5938,6 +6782,15 @@ __metadata: languageName: node linkType: hard +"@react-native-community/cli-debugger-ui@npm:15.0.1": + version: 15.0.1 + resolution: "@react-native-community/cli-debugger-ui@npm:15.0.1" + dependencies: + serve-static: "npm:^1.13.1" + checksum: 10/366b87f67c72455a61de4beb05d3b24c5e8f6a4ea4d0d11a7bb660e738f43a26daa9721527a36f8e9596586240875c1a35d5b87a8cdddc2d84b38b6b56a83902 + languageName: node + linkType: hard + "@react-native-community/cli-debugger-ui@npm:15.1.3": version: 15.1.3 resolution: "@react-native-community/cli-debugger-ui@npm:15.1.3" @@ -5947,6 +6800,30 @@ __metadata: languageName: node linkType: hard +"@react-native-community/cli-doctor@npm:15.0.1": + version: 15.0.1 + resolution: "@react-native-community/cli-doctor@npm:15.0.1" + dependencies: + "@react-native-community/cli-config": "npm:15.0.1" + "@react-native-community/cli-platform-android": "npm:15.0.1" + "@react-native-community/cli-platform-apple": "npm:15.0.1" + "@react-native-community/cli-platform-ios": "npm:15.0.1" + "@react-native-community/cli-tools": "npm:15.0.1" + chalk: "npm:^4.1.2" + command-exists: "npm:^1.2.8" + deepmerge: "npm:^4.3.0" + envinfo: "npm:^7.13.0" + execa: "npm:^5.0.0" + node-stream-zip: "npm:^1.9.1" + ora: "npm:^5.4.1" + semver: "npm:^7.5.2" + strip-ansi: "npm:^5.2.0" + wcwidth: "npm:^1.0.1" + yaml: "npm:^2.2.1" + checksum: 10/89cb3d2c6610c2316e388adf5efe7f85600d56e2fdc68b3f9fa8842ced44bf7ae89a7d4b733e21bb99f5d31c86112208a12f9a6668f6c99385be4ab415f730ca + languageName: node + linkType: hard + "@react-native-community/cli-doctor@npm:15.1.3": version: 15.1.3 resolution: "@react-native-community/cli-doctor@npm:15.1.3" @@ -5994,6 +6871,20 @@ __metadata: languageName: node linkType: hard +"@react-native-community/cli-platform-android@npm:15.0.1": + version: 15.0.1 + resolution: "@react-native-community/cli-platform-android@npm:15.0.1" + dependencies: + "@react-native-community/cli-tools": "npm:15.0.1" + chalk: "npm:^4.1.2" + execa: "npm:^5.0.0" + fast-glob: "npm:^3.3.2" + fast-xml-parser: "npm:^4.4.1" + logkitty: "npm:^0.7.1" + checksum: 10/f537ac01ccce117b29020094165e123e84e5baea1bb4d88c1c1db7a5723060871dafab3b7d12f51aa14f94d13d30b59fff052244b14b8a4927b7e16f7e6f0308 + languageName: node + linkType: hard + "@react-native-community/cli-platform-android@npm:15.1.3": version: 15.1.3 resolution: "@react-native-community/cli-platform-android@npm:15.1.3" @@ -6020,6 +6911,19 @@ __metadata: languageName: node linkType: hard +"@react-native-community/cli-platform-apple@npm:15.0.1": + version: 15.0.1 + resolution: "@react-native-community/cli-platform-apple@npm:15.0.1" + dependencies: + "@react-native-community/cli-config-apple": "npm:15.0.1" + "@react-native-community/cli-tools": "npm:15.0.1" + chalk: "npm:^4.1.2" + execa: "npm:^5.0.0" + fast-xml-parser: "npm:^4.4.1" + checksum: 10/85a6d39eba5cd474a063d59a12e893ffe77656b522a7adcac9c092f35565fddcf16c2b50c09b63a8d5c7d71f5fbad33069f1a61f23ca3b8f5dd5e4cb284d9bf9 + languageName: node + linkType: hard + "@react-native-community/cli-platform-apple@npm:15.1.3": version: 15.1.3 resolution: "@react-native-community/cli-platform-apple@npm:15.1.3" @@ -6046,6 +6950,15 @@ __metadata: languageName: node linkType: hard +"@react-native-community/cli-platform-ios@npm:15.0.1": + version: 15.0.1 + resolution: "@react-native-community/cli-platform-ios@npm:15.0.1" + dependencies: + "@react-native-community/cli-platform-apple": "npm:15.0.1" + checksum: 10/17844caec8ed5e4101e35fa42fa12028a99c545f0d86a028b5ed12c19072cd8eeeacf11598a271fef5eea028072dd0521545376f3c50522ac6ca606d841f359d + languageName: node + linkType: hard + "@react-native-community/cli-platform-ios@npm:15.1.3": version: 15.1.3 resolution: "@react-native-community/cli-platform-ios@npm:15.1.3" @@ -6064,6 +6977,23 @@ __metadata: languageName: node linkType: hard +"@react-native-community/cli-server-api@npm:15.0.1": + version: 15.0.1 + resolution: "@react-native-community/cli-server-api@npm:15.0.1" + dependencies: + "@react-native-community/cli-debugger-ui": "npm:15.0.1" + "@react-native-community/cli-tools": "npm:15.0.1" + compression: "npm:^1.7.1" + connect: "npm:^3.6.5" + errorhandler: "npm:^1.5.1" + nocache: "npm:^3.0.1" + pretty-format: "npm:^26.6.2" + serve-static: "npm:^1.13.1" + ws: "npm:^6.2.3" + checksum: 10/22341610387537e5603cb7b6f1d8b761b5439174bbac650081cf5b40377c0108262320e282329f977bef826e6c4569fbaa3e85f2a697631e755a020216a5515a + languageName: node + linkType: hard + "@react-native-community/cli-server-api@npm:15.1.3": version: 15.1.3 resolution: "@react-native-community/cli-server-api@npm:15.1.3" @@ -6099,6 +7029,25 @@ __metadata: languageName: node linkType: hard +"@react-native-community/cli-tools@npm:15.0.1": + version: 15.0.1 + resolution: "@react-native-community/cli-tools@npm:15.0.1" + dependencies: + appdirsjs: "npm:^1.2.4" + chalk: "npm:^4.1.2" + execa: "npm:^5.0.0" + find-up: "npm:^5.0.0" + mime: "npm:^2.4.1" + open: "npm:^6.2.0" + ora: "npm:^5.4.1" + prompts: "npm:^2.4.2" + semver: "npm:^7.5.2" + shell-quote: "npm:^1.7.3" + sudo-prompt: "npm:^9.0.0" + checksum: 10/3447257d1650104466b7d59846ddcd45d8432b18d18df71c0606ecfed7892014fa959b917ab435c822b305a9a890bd51e762e941137e29f7824e215beacb42a5 + languageName: node + linkType: hard + "@react-native-community/cli-tools@npm:15.1.3": version: 15.1.3 resolution: "@react-native-community/cli-tools@npm:15.1.3" @@ -6136,6 +7085,15 @@ __metadata: languageName: node linkType: hard +"@react-native-community/cli-types@npm:15.0.1": + version: 15.0.1 + resolution: "@react-native-community/cli-types@npm:15.0.1" + dependencies: + joi: "npm:^17.2.1" + checksum: 10/77452486158afcf1f03a3596135b6dba16dba5dd10209dacd5a6a4b176df36d37b8e49af61590d5a64df4907cf0575b6f37e0a3893335f961a9380edaee32152 + languageName: node + linkType: hard + "@react-native-community/cli-types@npm:15.1.3": version: 15.1.3 resolution: "@react-native-community/cli-types@npm:15.1.3" @@ -6154,6 +7112,32 @@ __metadata: languageName: node linkType: hard +"@react-native-community/cli@npm:15.0.1": + version: 15.0.1 + resolution: "@react-native-community/cli@npm:15.0.1" + dependencies: + "@react-native-community/cli-clean": "npm:15.0.1" + "@react-native-community/cli-config": "npm:15.0.1" + "@react-native-community/cli-debugger-ui": "npm:15.0.1" + "@react-native-community/cli-doctor": "npm:15.0.1" + "@react-native-community/cli-server-api": "npm:15.0.1" + "@react-native-community/cli-tools": "npm:15.0.1" + "@react-native-community/cli-types": "npm:15.0.1" + chalk: "npm:^4.1.2" + commander: "npm:^9.4.1" + deepmerge: "npm:^4.3.0" + execa: "npm:^5.0.0" + find-up: "npm:^5.0.0" + fs-extra: "npm:^8.1.0" + graceful-fs: "npm:^4.1.3" + prompts: "npm:^2.4.2" + semver: "npm:^7.5.2" + bin: + rnc-cli: build/bin.js + checksum: 10/7673d01bded6e9a368b238031ce237cebcfba230d860804a8f19aa6b4d5adcf4432e0a3b71ea285650c69b6427310f7db152cee6c2152d3303adb8dee6f60923 + languageName: node + linkType: hard + "@react-native-community/cli@npm:15.1.3": version: 15.1.3 resolution: "@react-native-community/cli@npm:15.1.3" @@ -6205,7 +7189,7 @@ __metadata: languageName: node linkType: hard -"@react-native-firebase/ai@npm:24.0.0, @react-native-firebase/ai@workspace:packages/ai": +"@react-native-firebase/ai@npm:24.0.0, @react-native-firebase/ai@workspace:*, @react-native-firebase/ai@workspace:packages/ai": version: 0.0.0-use.local resolution: "@react-native-firebase/ai@workspace:packages/ai" dependencies: @@ -6222,7 +7206,7 @@ __metadata: languageName: unknown linkType: soft -"@react-native-firebase/analytics@npm:24.0.0, @react-native-firebase/analytics@workspace:packages/analytics": +"@react-native-firebase/analytics@npm:24.0.0, @react-native-firebase/analytics@workspace:*, @react-native-firebase/analytics@workspace:packages/analytics": version: 0.0.0-use.local resolution: "@react-native-firebase/analytics@workspace:packages/analytics" dependencies: @@ -6239,7 +7223,7 @@ __metadata: languageName: unknown linkType: soft -"@react-native-firebase/app-check@npm:24.0.0, @react-native-firebase/app-check@workspace:packages/app-check": +"@react-native-firebase/app-check@npm:24.0.0, @react-native-firebase/app-check@workspace:*, @react-native-firebase/app-check@workspace:packages/app-check": version: 0.0.0-use.local resolution: "@react-native-firebase/app-check@workspace:packages/app-check" dependencies: @@ -6255,7 +7239,7 @@ __metadata: languageName: unknown linkType: soft -"@react-native-firebase/app-distribution@npm:24.0.0, @react-native-firebase/app-distribution@workspace:packages/app-distribution": +"@react-native-firebase/app-distribution@npm:24.0.0, @react-native-firebase/app-distribution@workspace:*, @react-native-firebase/app-distribution@workspace:packages/app-distribution": version: 0.0.0-use.local resolution: "@react-native-firebase/app-distribution@workspace:packages/app-distribution" dependencies: @@ -6277,7 +7261,7 @@ __metadata: languageName: node linkType: hard -"@react-native-firebase/app@npm:24.0.0, @react-native-firebase/app@workspace:packages/app": +"@react-native-firebase/app@npm:24.0.0, @react-native-firebase/app@workspace:*, @react-native-firebase/app@workspace:packages/app": version: 0.0.0-use.local resolution: "@react-native-firebase/app@workspace:packages/app" dependencies: @@ -6295,7 +7279,7 @@ __metadata: languageName: unknown linkType: soft -"@react-native-firebase/auth@npm:24.0.0, @react-native-firebase/auth@workspace:packages/auth": +"@react-native-firebase/auth@npm:24.0.0, @react-native-firebase/auth@workspace:*, @react-native-firebase/auth@workspace:packages/auth": version: 0.0.0-use.local resolution: "@react-native-firebase/auth@workspace:packages/auth" dependencies: @@ -6311,7 +7295,7 @@ __metadata: languageName: unknown linkType: soft -"@react-native-firebase/crashlytics@npm:24.0.0, @react-native-firebase/crashlytics@workspace:packages/crashlytics": +"@react-native-firebase/crashlytics@npm:24.0.0, @react-native-firebase/crashlytics@workspace:*, @react-native-firebase/crashlytics@workspace:packages/crashlytics": version: 0.0.0-use.local resolution: "@react-native-firebase/crashlytics@workspace:packages/crashlytics" dependencies: @@ -6328,7 +7312,7 @@ __metadata: languageName: unknown linkType: soft -"@react-native-firebase/database@npm:24.0.0, @react-native-firebase/database@workspace:packages/database": +"@react-native-firebase/database@npm:24.0.0, @react-native-firebase/database@workspace:*, @react-native-firebase/database@workspace:packages/database": version: 0.0.0-use.local resolution: "@react-native-firebase/database@workspace:packages/database" peerDependencies: @@ -6336,7 +7320,7 @@ __metadata: languageName: unknown linkType: soft -"@react-native-firebase/firestore@npm:24.0.0, @react-native-firebase/firestore@workspace:packages/firestore": +"@react-native-firebase/firestore@npm:24.0.0, @react-native-firebase/firestore@workspace:*, @react-native-firebase/firestore@workspace:packages/firestore": version: 0.0.0-use.local resolution: "@react-native-firebase/firestore@workspace:packages/firestore" dependencies: @@ -6347,7 +7331,7 @@ __metadata: languageName: unknown linkType: soft -"@react-native-firebase/functions@npm:24.0.0, @react-native-firebase/functions@workspace:packages/functions": +"@react-native-firebase/functions@npm:24.0.0, @react-native-firebase/functions@workspace:*, @react-native-firebase/functions@workspace:packages/functions": version: 0.0.0-use.local resolution: "@react-native-firebase/functions@workspace:packages/functions" dependencies: @@ -6360,7 +7344,7 @@ __metadata: languageName: unknown linkType: soft -"@react-native-firebase/in-app-messaging@npm:24.0.0, @react-native-firebase/in-app-messaging@workspace:packages/in-app-messaging": +"@react-native-firebase/in-app-messaging@npm:24.0.0, @react-native-firebase/in-app-messaging@workspace:*, @react-native-firebase/in-app-messaging@workspace:packages/in-app-messaging": version: 0.0.0-use.local resolution: "@react-native-firebase/in-app-messaging@workspace:packages/in-app-messaging" peerDependencies: @@ -6369,7 +7353,7 @@ __metadata: languageName: unknown linkType: soft -"@react-native-firebase/installations@npm:24.0.0, @react-native-firebase/installations@workspace:packages/installations": +"@react-native-firebase/installations@npm:24.0.0, @react-native-firebase/installations@workspace:*, @react-native-firebase/installations@workspace:packages/installations": version: 0.0.0-use.local resolution: "@react-native-firebase/installations@workspace:packages/installations" peerDependencies: @@ -6377,7 +7361,7 @@ __metadata: languageName: unknown linkType: soft -"@react-native-firebase/messaging@npm:24.0.0, @react-native-firebase/messaging@workspace:packages/messaging": +"@react-native-firebase/messaging@npm:24.0.0, @react-native-firebase/messaging@workspace:*, @react-native-firebase/messaging@workspace:packages/messaging": version: 0.0.0-use.local resolution: "@react-native-firebase/messaging@workspace:packages/messaging" dependencies: @@ -6393,7 +7377,7 @@ __metadata: languageName: unknown linkType: soft -"@react-native-firebase/ml@npm:24.0.0, @react-native-firebase/ml@workspace:packages/ml": +"@react-native-firebase/ml@npm:24.0.0, @react-native-firebase/ml@workspace:*, @react-native-firebase/ml@workspace:packages/ml": version: 0.0.0-use.local resolution: "@react-native-firebase/ml@workspace:packages/ml" peerDependencies: @@ -6401,7 +7385,7 @@ __metadata: languageName: unknown linkType: soft -"@react-native-firebase/perf@npm:24.0.0, @react-native-firebase/perf@workspace:packages/perf": +"@react-native-firebase/perf@npm:24.0.0, @react-native-firebase/perf@workspace:*, @react-native-firebase/perf@workspace:packages/perf": version: 0.0.0-use.local resolution: "@react-native-firebase/perf@workspace:packages/perf" dependencies: @@ -6422,7 +7406,7 @@ __metadata: languageName: node linkType: hard -"@react-native-firebase/remote-config@npm:24.0.0, @react-native-firebase/remote-config@workspace:packages/remote-config": +"@react-native-firebase/remote-config@npm:24.0.0, @react-native-firebase/remote-config@workspace:*, @react-native-firebase/remote-config@workspace:packages/remote-config": version: 0.0.0-use.local resolution: "@react-native-firebase/remote-config@workspace:packages/remote-config" dependencies: @@ -6436,7 +7420,7 @@ __metadata: languageName: unknown linkType: soft -"@react-native-firebase/storage@npm:24.0.0, @react-native-firebase/storage@workspace:packages/storage": +"@react-native-firebase/storage@npm:24.0.0, @react-native-firebase/storage@workspace:*, @react-native-firebase/storage@workspace:packages/storage": version: 0.0.0-use.local resolution: "@react-native-firebase/storage@workspace:packages/storage" dependencies: @@ -6500,6 +7484,13 @@ __metadata: languageName: node linkType: hard +"@react-native/assets-registry@npm:0.83.6": + version: 0.83.6 + resolution: "@react-native/assets-registry@npm:0.83.6" + checksum: 10/9ae3c3a4d8831149ec1c96aff7a93392505c22b3bbbddc55d9fa9ae6ff3ea7a8d824fbb923b07f4bd185c74afbd1c9dbc53f7c3a1a161f902a9df91430595c4c + languageName: node + linkType: hard + "@react-native/babel-plugin-codegen@npm:0.78.3": version: 0.78.3 resolution: "@react-native/babel-plugin-codegen@npm:0.78.3" @@ -6520,6 +7511,16 @@ __metadata: languageName: node linkType: hard +"@react-native/babel-plugin-codegen@npm:0.83.6": + version: 0.83.6 + resolution: "@react-native/babel-plugin-codegen@npm:0.83.6" + dependencies: + "@babel/traverse": "npm:^7.25.3" + "@react-native/codegen": "npm:0.83.6" + checksum: 10/eef3f3fec061c51a7dc042da93fc6e1d9712256ea8d76fb1f1b9ad3813a3a4a3385d33f184cedf2a0adc76112024922510787067678ee52828c053ea8947a08a + languageName: node + linkType: hard + "@react-native/babel-preset@npm:0.78.3, @react-native/babel-preset@npm:^0.78.3": version: 0.78.3 resolution: "@react-native/babel-preset@npm:0.78.3" @@ -6630,6 +7631,61 @@ __metadata: languageName: node linkType: hard +"@react-native/babel-preset@npm:0.83.6": + version: 0.83.6 + resolution: "@react-native/babel-preset@npm:0.83.6" + dependencies: + "@babel/core": "npm:^7.25.2" + "@babel/plugin-proposal-export-default-from": "npm:^7.24.7" + "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" + "@babel/plugin-syntax-export-default-from": "npm:^7.24.7" + "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" + "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" + "@babel/plugin-transform-arrow-functions": "npm:^7.24.7" + "@babel/plugin-transform-async-generator-functions": "npm:^7.25.4" + "@babel/plugin-transform-async-to-generator": "npm:^7.24.7" + "@babel/plugin-transform-block-scoping": "npm:^7.25.0" + "@babel/plugin-transform-class-properties": "npm:^7.25.4" + "@babel/plugin-transform-classes": "npm:^7.25.4" + "@babel/plugin-transform-computed-properties": "npm:^7.24.7" + "@babel/plugin-transform-destructuring": "npm:^7.24.8" + "@babel/plugin-transform-flow-strip-types": "npm:^7.25.2" + "@babel/plugin-transform-for-of": "npm:^7.24.7" + "@babel/plugin-transform-function-name": "npm:^7.25.1" + "@babel/plugin-transform-literals": "npm:^7.25.2" + "@babel/plugin-transform-logical-assignment-operators": "npm:^7.24.7" + "@babel/plugin-transform-modules-commonjs": "npm:^7.24.8" + "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.24.7" + "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.24.7" + "@babel/plugin-transform-numeric-separator": "npm:^7.24.7" + "@babel/plugin-transform-object-rest-spread": "npm:^7.24.7" + "@babel/plugin-transform-optional-catch-binding": "npm:^7.24.7" + "@babel/plugin-transform-optional-chaining": "npm:^7.24.8" + "@babel/plugin-transform-parameters": "npm:^7.24.7" + "@babel/plugin-transform-private-methods": "npm:^7.24.7" + "@babel/plugin-transform-private-property-in-object": "npm:^7.24.7" + "@babel/plugin-transform-react-display-name": "npm:^7.24.7" + "@babel/plugin-transform-react-jsx": "npm:^7.25.2" + "@babel/plugin-transform-react-jsx-self": "npm:^7.24.7" + "@babel/plugin-transform-react-jsx-source": "npm:^7.24.7" + "@babel/plugin-transform-regenerator": "npm:^7.24.7" + "@babel/plugin-transform-runtime": "npm:^7.24.7" + "@babel/plugin-transform-shorthand-properties": "npm:^7.24.7" + "@babel/plugin-transform-spread": "npm:^7.24.7" + "@babel/plugin-transform-sticky-regex": "npm:^7.24.7" + "@babel/plugin-transform-typescript": "npm:^7.25.2" + "@babel/plugin-transform-unicode-regex": "npm:^7.24.7" + "@babel/template": "npm:^7.25.0" + "@react-native/babel-plugin-codegen": "npm:0.83.6" + babel-plugin-syntax-hermes-parser: "npm:0.32.0" + babel-plugin-transform-flow-enums: "npm:^0.0.2" + react-refresh: "npm:^0.14.0" + peerDependencies: + "@babel/core": "*" + checksum: 10/204cf777078649203c18b5ed5765577641312ab47dbaa4415bb3805ec928c0ef36177e3036984d4d44dc986477e3bf68a0b59642e67b2a121831acf25b286a30 + languageName: node + linkType: hard + "@react-native/codegen@npm:0.78.3": version: 0.78.3 resolution: "@react-native/codegen@npm:0.78.3" @@ -6696,6 +7752,23 @@ __metadata: languageName: node linkType: hard +"@react-native/codegen@npm:0.83.6": + version: 0.83.6 + resolution: "@react-native/codegen@npm:0.83.6" + dependencies: + "@babel/core": "npm:^7.25.2" + "@babel/parser": "npm:^7.25.3" + glob: "npm:^7.1.1" + hermes-parser: "npm:0.32.0" + invariant: "npm:^2.2.4" + nullthrows: "npm:^1.1.1" + yargs: "npm:^17.6.2" + peerDependencies: + "@babel/core": "*" + checksum: 10/5f819725e455953b387ae098ab05da0950f790ab5337f1131c779895f0de576c4b491f1017b7ce10c3530e55566859d398386e0e65baaa19089c5c5edb430e37 + languageName: node + linkType: hard + "@react-native/community-cli-plugin@npm:0.78.3": version: 0.78.3 resolution: "@react-native/community-cli-plugin@npm:0.78.3" @@ -6763,6 +7836,29 @@ __metadata: languageName: node linkType: hard +"@react-native/community-cli-plugin@npm:0.83.6": + version: 0.83.6 + resolution: "@react-native/community-cli-plugin@npm:0.83.6" + dependencies: + "@react-native/dev-middleware": "npm:0.83.6" + debug: "npm:^4.4.0" + invariant: "npm:^2.2.4" + metro: "npm:^0.83.6" + metro-config: "npm:^0.83.6" + metro-core: "npm:^0.83.6" + semver: "npm:^7.1.3" + peerDependencies: + "@react-native-community/cli": "*" + "@react-native/metro-config": "*" + peerDependenciesMeta: + "@react-native-community/cli": + optional: true + "@react-native/metro-config": + optional: true + checksum: 10/48ef4b15aa34d3b39217d8ce1b4508259f88da5526a08107cc92a38a07876c41cad09de1d8eb12955ac5e992b44492a071fd73b5a4315da8b1e9c276a349f479 + languageName: node + linkType: hard + "@react-native/debugger-frontend@npm:0.78.3": version: 0.78.3 resolution: "@react-native/debugger-frontend@npm:0.78.3" @@ -6791,6 +7887,13 @@ __metadata: languageName: node linkType: hard +"@react-native/debugger-frontend@npm:0.83.6": + version: 0.83.6 + resolution: "@react-native/debugger-frontend@npm:0.83.6" + checksum: 10/d9f40d58e88f80fefca26cccd7e44637fe61a7f8bd68727b1b3a6f8070ef030c54f805fdc34dd67e6e214a1def8c835bed7e7b2d2e1b0d19c342fb733e0f9460 + languageName: node + linkType: hard + "@react-native/debugger-shell@npm:0.82.1": version: 0.82.1 resolution: "@react-native/debugger-shell@npm:0.82.1" @@ -6811,6 +7914,16 @@ __metadata: languageName: node linkType: hard +"@react-native/debugger-shell@npm:0.83.6": + version: 0.83.6 + resolution: "@react-native/debugger-shell@npm:0.83.6" + dependencies: + cross-spawn: "npm:^7.0.6" + fb-dotslash: "npm:0.5.8" + checksum: 10/d4f2c3096b7a976f1881db60a6a8e66d7951662f311cb4b9cc368bc753cb3e15c29cfdb1d6bf0f975a102eba78c94994d62dea5fdb37ef1d04f50f865af57a0a + languageName: node + linkType: hard + "@react-native/dev-middleware@npm:0.78.3": version: 0.78.3 resolution: "@react-native/dev-middleware@npm:0.78.3" @@ -6890,6 +8003,56 @@ __metadata: languageName: node linkType: hard +"@react-native/dev-middleware@npm:0.83.6": + version: 0.83.6 + resolution: "@react-native/dev-middleware@npm:0.83.6" + dependencies: + "@isaacs/ttlcache": "npm:^1.4.1" + "@react-native/debugger-frontend": "npm:0.83.6" + "@react-native/debugger-shell": "npm:0.83.6" + chrome-launcher: "npm:^0.15.2" + chromium-edge-launcher: "npm:^0.2.0" + connect: "npm:^3.6.5" + debug: "npm:^4.4.0" + invariant: "npm:^2.2.4" + nullthrows: "npm:^1.1.1" + open: "npm:^7.0.3" + serve-static: "npm:^1.16.2" + ws: "npm:^7.5.10" + checksum: 10/16b9bd3f6219ca9584408d436a6d837ee81496ee2919a39b112820a145d237e143123a2ed0b810aa3004d62fdf9aad291ece7a31f282a95098ad5a0a76df4af2 + languageName: node + linkType: hard + +"@react-native/eslint-config@npm:0.78.3": + version: 0.78.3 + resolution: "@react-native/eslint-config@npm:0.78.3" + dependencies: + "@babel/core": "npm:^7.25.2" + "@babel/eslint-parser": "npm:^7.25.1" + "@react-native/eslint-plugin": "npm:0.78.3" + "@typescript-eslint/eslint-plugin": "npm:^7.1.1" + "@typescript-eslint/parser": "npm:^7.1.1" + eslint-config-prettier: "npm:^8.5.0" + eslint-plugin-eslint-comments: "npm:^3.2.0" + eslint-plugin-ft-flow: "npm:^2.0.1" + eslint-plugin-jest: "npm:^27.9.0" + eslint-plugin-react: "npm:^7.30.1" + eslint-plugin-react-hooks: "npm:^4.6.0" + eslint-plugin-react-native: "npm:^4.0.0" + peerDependencies: + eslint: ">=8" + prettier: ">=2" + checksum: 10/2799781e0dbbb5c94618cdfd94c386ab2847cbd0de9a1b13fba36684926a9e47a6b9ffe453d1b503aedcdbf4cf32a0007a4f6da6c7617829661b63c405e03d13 + languageName: node + linkType: hard + +"@react-native/eslint-plugin@npm:0.78.3": + version: 0.78.3 + resolution: "@react-native/eslint-plugin@npm:0.78.3" + checksum: 10/814da8ad605dba64f38ba93cb12e7085227a7d2d918296e9c46c2c320b69d60a61c31929a61b6d6c21b9cf85898ef51c658314ca54c1569adfaa7c20cb910779 + languageName: node + linkType: hard + "@react-native/gradle-plugin@npm:0.78.3": version: 0.78.3 resolution: "@react-native/gradle-plugin@npm:0.78.3" @@ -6911,6 +8074,13 @@ __metadata: languageName: node linkType: hard +"@react-native/gradle-plugin@npm:0.83.6": + version: 0.83.6 + resolution: "@react-native/gradle-plugin@npm:0.83.6" + checksum: 10/b2d83f8277edd931e0ff228698e1ec6aefffcd71fa93cf23b9564b5a72788e8fbccc13543eb89f9510781ae86e5041e517d5f8f3e04a5a48925580edb0ab12a0 + languageName: node + linkType: hard + "@react-native/js-polyfills@npm:0.78.3": version: 0.78.3 resolution: "@react-native/js-polyfills@npm:0.78.3" @@ -6932,6 +8102,13 @@ __metadata: languageName: node linkType: hard +"@react-native/js-polyfills@npm:0.83.6": + version: 0.83.6 + resolution: "@react-native/js-polyfills@npm:0.83.6" + checksum: 10/455dd7f69ec7b187790c3a2db1bc128199cf340ea36702ebaaee87d37c20dbbcbf75c69c0c91e82f4b320af9bb7a70fe537b0842454f2add2040902edfdaf164 + languageName: node + linkType: hard + "@react-native/metro-babel-transformer@npm:0.78.3": version: 0.78.3 resolution: "@react-native/metro-babel-transformer@npm:0.78.3" @@ -6946,7 +8123,7 @@ __metadata: languageName: node linkType: hard -"@react-native/metro-config@npm:^0.78.3": +"@react-native/metro-config@npm:0.78.3, @react-native/metro-config@npm:^0.78.3": version: 0.78.3 resolution: "@react-native/metro-config@npm:0.78.3" dependencies: @@ -6986,6 +8163,20 @@ __metadata: languageName: node linkType: hard +"@react-native/normalize-colors@npm:0.83.6": + version: 0.83.6 + resolution: "@react-native/normalize-colors@npm:0.83.6" + checksum: 10/b59b27a7889293f1dce5fcfb12151e0927099c3446f0f603e1f2d5e90cb91634cbf5d0d4dc6d67ee7ada4680f3533e96845ec64084cc97944280faf94caa209c + languageName: node + linkType: hard + +"@react-native/typescript-config@npm:0.78.3": + version: 0.78.3 + resolution: "@react-native/typescript-config@npm:0.78.3" + checksum: 10/d1a2080e75d050abb2b6adebb2897313f853eaf9ea2a9ae5cf13fecc005c0905a755ba7f2c89cea4455632324593fec55fd0997102b9f8a9bfd1f8c417cd1b4d + languageName: node + linkType: hard + "@react-native/virtualized-lists@npm:0.78.3": version: 0.78.3 resolution: "@react-native/virtualized-lists@npm:0.78.3" @@ -7037,6 +8228,100 @@ __metadata: languageName: node linkType: hard +"@react-native/virtualized-lists@npm:0.83.6": + version: 0.83.6 + resolution: "@react-native/virtualized-lists@npm:0.83.6" + dependencies: + invariant: "npm:^2.2.4" + nullthrows: "npm:^1.1.1" + peerDependencies: + "@types/react": ^19.2.0 + react: "*" + react-native: "*" + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10/1f888e09f09a16071978fc7e2c7aa69a2a212fbaf82fae69e74ecd181d8aa0e878a3942e42557bf3dc73e8c93e0f98b7c52fe30836228b33803e3053e39fb1dc + languageName: node + linkType: hard + +"@rnfirebase/build-harness-expo@workspace:apps/build-harness-expo": + version: 0.0.0-use.local + resolution: "@rnfirebase/build-harness-expo@workspace:apps/build-harness-expo" + dependencies: + "@react-native-firebase/ai": "workspace:*" + "@react-native-firebase/analytics": "workspace:*" + "@react-native-firebase/app": "workspace:*" + "@react-native-firebase/app-check": "workspace:*" + "@react-native-firebase/app-distribution": "workspace:*" + "@react-native-firebase/auth": "workspace:*" + "@react-native-firebase/crashlytics": "workspace:*" + "@react-native-firebase/database": "workspace:*" + "@react-native-firebase/firestore": "workspace:*" + "@react-native-firebase/functions": "workspace:*" + "@react-native-firebase/in-app-messaging": "workspace:*" + "@react-native-firebase/installations": "workspace:*" + "@react-native-firebase/messaging": "workspace:*" + "@react-native-firebase/ml": "workspace:*" + "@react-native-firebase/perf": "workspace:*" + "@react-native-firebase/remote-config": "workspace:*" + "@react-native-firebase/storage": "workspace:*" + "@types/react": "npm:~19.2.2" + expo: "npm:~55.0.17" + expo-build-properties: "npm:^55.0.13" + expo-status-bar: "npm:~55.0.5" + firebase: "npm:12.12.0" + react: "npm:19.2.0" + react-native: "npm:0.83.6" + typescript: "npm:~5.9.2" + languageName: unknown + linkType: soft + +"@rnfirebase/build-harness@workspace:apps/build-harness": + version: 0.0.0-use.local + resolution: "@rnfirebase/build-harness@workspace:apps/build-harness" + dependencies: + "@babel/core": "npm:^7.25.2" + "@babel/preset-env": "npm:^7.25.3" + "@babel/runtime": "npm:^7.25.0" + "@react-native-community/cli": "npm:15.0.1" + "@react-native-community/cli-platform-android": "npm:15.0.1" + "@react-native-community/cli-platform-ios": "npm:15.0.1" + "@react-native-firebase/ai": "workspace:*" + "@react-native-firebase/analytics": "workspace:*" + "@react-native-firebase/app": "workspace:*" + "@react-native-firebase/app-check": "workspace:*" + "@react-native-firebase/app-distribution": "workspace:*" + "@react-native-firebase/auth": "workspace:*" + "@react-native-firebase/crashlytics": "workspace:*" + "@react-native-firebase/database": "workspace:*" + "@react-native-firebase/firestore": "workspace:*" + "@react-native-firebase/functions": "workspace:*" + "@react-native-firebase/in-app-messaging": "workspace:*" + "@react-native-firebase/installations": "workspace:*" + "@react-native-firebase/messaging": "workspace:*" + "@react-native-firebase/ml": "workspace:*" + "@react-native-firebase/perf": "workspace:*" + "@react-native-firebase/remote-config": "workspace:*" + "@react-native-firebase/storage": "workspace:*" + "@react-native/babel-preset": "npm:0.78.3" + "@react-native/eslint-config": "npm:0.78.3" + "@react-native/metro-config": "npm:0.78.3" + "@react-native/typescript-config": "npm:0.78.3" + "@types/jest": "npm:^29.5.13" + "@types/react": "npm:^19.0.0" + "@types/react-test-renderer": "npm:^19.0.0" + eslint: "npm:^8.19.0" + firebase: "npm:12.12.0" + jest: "npm:^29.6.3" + prettier: "npm:2.8.8" + react: "npm:19.0.0" + react-native: "npm:0.78.3" + react-test-renderer: "npm:19.0.0" + typescript: "npm:5.0.4" + languageName: unknown + linkType: soft + "@shikijs/engine-oniguruma@npm:^3.23.0": version: 3.23.0 resolution: "@shikijs/engine-oniguruma@npm:3.23.0" @@ -7463,7 +8748,17 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.6": +"@types/jest@npm:^29.5.13": + version: 29.5.14 + resolution: "@types/jest@npm:29.5.14" + dependencies: + expect: "npm:^29.0.0" + pretty-format: "npm:^29.0.0" + checksum: 10/59ec7a9c4688aae8ee529316c43853468b6034f453d08a2e1064b281af9c81234cec986be796288f1bbb29efe943bc950e70c8fa8faae1e460d50e3cf9760f9b + languageName: node + linkType: hard + +"@types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.6, @types/json-schema@npm:^7.0.9": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 10/1a3c3e06236e4c4aab89499c428d585527ce50c24fe8259e8b3926d3df4cfbbbcf306cfc73ddfb66cbafc973116efd15967020b0f738f63e09e64c7d260519e7 @@ -7587,6 +8882,15 @@ __metadata: languageName: node linkType: hard +"@types/react-test-renderer@npm:^19.0.0": + version: 19.1.0 + resolution: "@types/react-test-renderer@npm:19.1.0" + dependencies: + "@types/react": "npm:*" + checksum: 10/2ef3aec0f2fd638902cda606d70c8531d66f8e8944334427986b99dcac9755ee60b700c5c3a19ac354680f9c45669e98077b84f79cac60e950bdb7d38aebffde + languageName: node + linkType: hard + "@types/react@npm:~19.0.0": version: 19.0.14 resolution: "@types/react@npm:19.0.14" @@ -7596,6 +8900,13 @@ __metadata: languageName: node linkType: hard +"@types/semver@npm:^7.3.12": + version: 7.7.1 + resolution: "@types/semver@npm:7.7.1" + checksum: 10/8f09e7e6ca3ded67d78ba7a8f7535c8d9cf8ced83c52e7f3ac3c281fe8c689c3fe475d199d94390dc04fc681d51f2358b430bb7b2e21c62de24f2bee2c719068 + languageName: node + linkType: hard + "@types/stack-utils@npm:^2.0.0, @types/stack-utils@npm:^2.0.3": version: 2.0.3 resolution: "@types/stack-utils@npm:2.0.3" @@ -7683,6 +8994,29 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/eslint-plugin@npm:^7.1.1": + version: 7.18.0 + resolution: "@typescript-eslint/eslint-plugin@npm:7.18.0" + dependencies: + "@eslint-community/regexpp": "npm:^4.10.0" + "@typescript-eslint/scope-manager": "npm:7.18.0" + "@typescript-eslint/type-utils": "npm:7.18.0" + "@typescript-eslint/utils": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" + graphemer: "npm:^1.4.0" + ignore: "npm:^5.3.1" + natural-compare: "npm:^1.4.0" + ts-api-utils: "npm:^1.3.0" + peerDependencies: + "@typescript-eslint/parser": ^7.0.0 + eslint: ^8.56.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10/6ee4c61f145dc05f0a567b8ac01b5399ef9c75f58bc6e9a3ffca8927b15e2be2d4c3fd32a2c1a7041cc0848fdeadac30d9cb0d3bcd3835d301847a88ffd19c4d + languageName: node + linkType: hard + "@typescript-eslint/parser@npm:8.58.2, @typescript-eslint/parser@npm:^8.58.2": version: 8.58.2 resolution: "@typescript-eslint/parser@npm:8.58.2" @@ -7699,6 +9033,24 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/parser@npm:^7.1.1": + version: 7.18.0 + resolution: "@typescript-eslint/parser@npm:7.18.0" + dependencies: + "@typescript-eslint/scope-manager": "npm:7.18.0" + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/typescript-estree": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" + debug: "npm:^4.3.4" + peerDependencies: + eslint: ^8.56.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10/36b00e192a96180220ba100fcce3c777fc3e61a6edbdead4e6e75a744d9f0cbe3fabb5f1c94a31cce6b28a4e4d5de148098eec01296026c3c8e16f7f0067cb1e + languageName: node + linkType: hard + "@typescript-eslint/project-service@npm:8.58.2": version: 8.58.2 resolution: "@typescript-eslint/project-service@npm:8.58.2" @@ -7712,6 +9064,26 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/scope-manager@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/scope-manager@npm:5.62.0" + dependencies: + "@typescript-eslint/types": "npm:5.62.0" + "@typescript-eslint/visitor-keys": "npm:5.62.0" + checksum: 10/e827770baa202223bc0387e2fd24f630690809e460435b7dc9af336c77322290a770d62bd5284260fa881c86074d6a9fd6c97b07382520b115f6786b8ed499da + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/scope-manager@npm:7.18.0" + dependencies: + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" + checksum: 10/9eb2ae5d69d9f723e706c16b2b97744fc016996a5473bed596035ac4d12429b3d24e7340a8235d704efa57f8f52e1b3b37925ff7c2e3384859d28b23a99b8bcc + languageName: node + linkType: hard + "@typescript-eslint/scope-manager@npm:8.58.2": version: 8.58.2 resolution: "@typescript-eslint/scope-manager@npm:8.58.2" @@ -7731,6 +9103,23 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/type-utils@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/type-utils@npm:7.18.0" + dependencies: + "@typescript-eslint/typescript-estree": "npm:7.18.0" + "@typescript-eslint/utils": "npm:7.18.0" + debug: "npm:^4.3.4" + ts-api-utils: "npm:^1.3.0" + peerDependencies: + eslint: ^8.56.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10/bcc7958a4ecdddad8c92e17265175773e7dddf416a654c1a391e69cb16e43960b39d37b6ffa349941bf3635e050f0ca7cd8f56ec9dd774168f2bbe7afedc9676 + languageName: node + linkType: hard + "@typescript-eslint/type-utils@npm:8.58.2": version: 8.58.2 resolution: "@typescript-eslint/type-utils@npm:8.58.2" @@ -7747,6 +9136,20 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/types@npm:5.62.0" + checksum: 10/24e8443177be84823242d6729d56af2c4b47bfc664dd411a1d730506abf2150d6c31bdefbbc6d97c8f91043e3a50e0c698239dcb145b79bb6b0c34469aaf6c45 + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/types@npm:7.18.0" + checksum: 10/0e30c73a3cc3c67dd06360a5a12fd12cee831e4092750eec3d6c031bdc4feafcb0ab1d882910a73e66b451a4f6e1dd015e9e2c4d45bf6bf716a474e5d123ddf0 + languageName: node + linkType: hard + "@typescript-eslint/types@npm:8.58.2, @typescript-eslint/types@npm:^8.58.2": version: 8.58.2 resolution: "@typescript-eslint/types@npm:8.58.2" @@ -7754,6 +9157,43 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/typescript-estree@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" + dependencies: + "@typescript-eslint/types": "npm:5.62.0" + "@typescript-eslint/visitor-keys": "npm:5.62.0" + debug: "npm:^4.3.4" + globby: "npm:^11.1.0" + is-glob: "npm:^4.0.3" + semver: "npm:^7.3.7" + tsutils: "npm:^3.21.0" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10/06c975eb5f44b43bd19fadc2e1023c50cf87038fe4c0dd989d4331c67b3ff509b17fa60a3251896668ab4d7322bdc56162a9926971218d2e1a1874d2bef9a52e + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/typescript-estree@npm:7.18.0" + dependencies: + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" + debug: "npm:^4.3.4" + globby: "npm:^11.1.0" + is-glob: "npm:^4.0.3" + minimatch: "npm:^9.0.4" + semver: "npm:^7.6.0" + ts-api-utils: "npm:^1.3.0" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10/b01e66235a91aa4439d02081d4a5f8b4a7cf9cb24f26b334812f657e3c603493e5f41e5c1e89cf4efae7d64509fa1f73affc16afc5e15cb7f83f724577c82036 + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:8.58.2": version: 8.58.2 resolution: "@typescript-eslint/typescript-estree@npm:8.58.2" @@ -7773,6 +9213,20 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/utils@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/utils@npm:7.18.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.4.0" + "@typescript-eslint/scope-manager": "npm:7.18.0" + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/typescript-estree": "npm:7.18.0" + peerDependencies: + eslint: ^8.56.0 + checksum: 10/f43fedb4f4d2e3836bdf137889449063a55c0ece74fdb283929cd376197b992313be8ef4df920c1c801b5c3076b92964c84c6c3b9b749d263b648d0011f5926e + languageName: node + linkType: hard + "@typescript-eslint/utils@npm:8.58.2, @typescript-eslint/utils@npm:^8.0.0": version: 8.58.2 resolution: "@typescript-eslint/utils@npm:8.58.2" @@ -7788,6 +9242,44 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/utils@npm:^5.10.0": + version: 5.62.0 + resolution: "@typescript-eslint/utils@npm:5.62.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.2.0" + "@types/json-schema": "npm:^7.0.9" + "@types/semver": "npm:^7.3.12" + "@typescript-eslint/scope-manager": "npm:5.62.0" + "@typescript-eslint/types": "npm:5.62.0" + "@typescript-eslint/typescript-estree": "npm:5.62.0" + eslint-scope: "npm:^5.1.1" + semver: "npm:^7.3.7" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 10/15ef13e43998a082b15f85db979f8d3ceb1f9ce4467b8016c267b1738d5e7cdb12aa90faf4b4e6dd6486c236cf9d33c463200465cf25ff997dbc0f12358550a1 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.62.0" + dependencies: + "@typescript-eslint/types": "npm:5.62.0" + eslint-visitor-keys: "npm:^3.3.0" + checksum: 10/dc613ab7569df9bbe0b2ca677635eb91839dfb2ca2c6fa47870a5da4f160db0b436f7ec0764362e756d4164e9445d49d5eb1ff0b87f4c058946ae9d8c92eb388 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/visitor-keys@npm:7.18.0" + dependencies: + "@typescript-eslint/types": "npm:7.18.0" + eslint-visitor-keys: "npm:^3.4.3" + checksum: 10/b7cfe6fdeae86c507357ac6b2357813c64fb2fbf1aaf844393ba82f73a16e2599b41981b34200d9fc7765d70bc3a8181d76b503051e53f04bcb7c9afef637eab + languageName: node + linkType: hard + "@typescript-eslint/visitor-keys@npm:8.58.2": version: 8.58.2 resolution: "@typescript-eslint/visitor-keys@npm:8.58.2" @@ -7798,7 +9290,7 @@ __metadata: languageName: node linkType: hard -"@ungap/structured-clone@npm:^1.0.0, @ungap/structured-clone@npm:^1.3.0": +"@ungap/structured-clone@npm:^1.0.0, @ungap/structured-clone@npm:^1.2.0, @ungap/structured-clone@npm:^1.3.0": version: 1.3.0 resolution: "@ungap/structured-clone@npm:1.3.0" checksum: 10/80d6910946f2b1552a2406650051c91bbd1f24a6bf854354203d84fe2714b3e8ce4618f49cc3410494173a1c1e8e9777372fe68dce74bd45faf0a7a1a6ccf448 @@ -8089,7 +9581,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.0.0, acorn@npm:^8.16.0": +"acorn@npm:^8.0.0, acorn@npm:^8.16.0, acorn@npm:^8.9.0": version: 8.16.0 resolution: "acorn@npm:8.16.0" bin: @@ -8168,7 +9660,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.14.0": +"ajv@npm:^6.12.4, ajv@npm:^6.14.0": version: 6.14.0 resolution: "ajv@npm:6.14.0" dependencies: @@ -8801,6 +10293,19 @@ __metadata: languageName: node linkType: hard +"babel-plugin-polyfill-corejs2@npm:^0.4.15": + version: 0.4.17 + resolution: "babel-plugin-polyfill-corejs2@npm:0.4.17" + dependencies: + "@babel/compat-data": "npm:^7.28.6" + "@babel/helper-define-polyfill-provider": "npm:^0.6.8" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10/35796b7f960d2e90ae78e9eb60491550976b839bbb4ce4c060df822cce191e4b5d93f13f0e64c2ba3ffc6ab3d32d3ced3f84ec567cc141088a11fa5a1628265d + languageName: node + linkType: hard + "babel-plugin-polyfill-corejs3@npm:^0.13.0": version: 0.13.0 resolution: "babel-plugin-polyfill-corejs3@npm:0.13.0" @@ -8813,6 +10318,18 @@ __metadata: languageName: node linkType: hard +"babel-plugin-polyfill-corejs3@npm:^0.14.0": + version: 0.14.2 + resolution: "babel-plugin-polyfill-corejs3@npm:0.14.2" + dependencies: + "@babel/helper-define-polyfill-provider": "npm:^0.6.8" + core-js-compat: "npm:^3.48.0" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10/bb500bfec712eb5e8c9058dc299677a5325af7e09ebd725c89719f2f555eca3f2b1a8644137c8e67d7fc83d7be48a7189a1a385b61ed2cf63dbb64e79461b9ee + languageName: node + linkType: hard + "babel-plugin-polyfill-regenerator@npm:^0.6.5": version: 0.6.5 resolution: "babel-plugin-polyfill-regenerator@npm:0.6.5" @@ -8824,6 +10341,17 @@ __metadata: languageName: node linkType: hard +"babel-plugin-polyfill-regenerator@npm:^0.6.6": + version: 0.6.8 + resolution: "babel-plugin-polyfill-regenerator@npm:0.6.8" + dependencies: + "@babel/helper-define-polyfill-provider": "npm:^0.6.8" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10/974464353d6f974e97673385aff616a913c0b76039eab8c5317a2d07c661e080f3dcc213e86f3eae40010172a27ab793cda7a290a8a899716f9a22df9b1d92d2 + languageName: node + linkType: hard + "babel-plugin-react-compiler@npm:^1.0.0": version: 1.0.0 resolution: "babel-plugin-react-compiler@npm:1.0.0" @@ -8953,6 +10481,49 @@ __metadata: languageName: node linkType: hard +"babel-preset-expo@npm:~55.0.18": + version: 55.0.18 + resolution: "babel-preset-expo@npm:55.0.18" + dependencies: + "@babel/generator": "npm:^7.20.5" + "@babel/helper-module-imports": "npm:^7.25.9" + "@babel/plugin-proposal-decorators": "npm:^7.12.9" + "@babel/plugin-proposal-export-default-from": "npm:^7.24.7" + "@babel/plugin-syntax-export-default-from": "npm:^7.24.7" + "@babel/plugin-transform-class-static-block": "npm:^7.27.1" + "@babel/plugin-transform-export-namespace-from": "npm:^7.25.9" + "@babel/plugin-transform-flow-strip-types": "npm:^7.25.2" + "@babel/plugin-transform-modules-commonjs": "npm:^7.24.8" + "@babel/plugin-transform-object-rest-spread": "npm:^7.24.7" + "@babel/plugin-transform-parameters": "npm:^7.24.7" + "@babel/plugin-transform-private-methods": "npm:^7.24.7" + "@babel/plugin-transform-private-property-in-object": "npm:^7.24.7" + "@babel/plugin-transform-runtime": "npm:^7.24.7" + "@babel/preset-react": "npm:^7.22.15" + "@babel/preset-typescript": "npm:^7.23.0" + "@react-native/babel-preset": "npm:0.83.6" + babel-plugin-react-compiler: "npm:^1.0.0" + babel-plugin-react-native-web: "npm:~0.21.0" + babel-plugin-syntax-hermes-parser: "npm:^0.32.0" + babel-plugin-transform-flow-enums: "npm:^0.0.2" + debug: "npm:^4.3.4" + resolve-from: "npm:^5.0.0" + peerDependencies: + "@babel/runtime": ^7.20.0 + expo: "*" + expo-widgets: ^55.0.14 + react-refresh: ">=0.14.0 <1.0.0" + peerDependenciesMeta: + "@babel/runtime": + optional: true + expo: + optional: true + expo-widgets: + optional: true + checksum: 10/c490e19bbda57cd2364de25162a456f5d4940b5613ce7b3e67c233aec73b6a4a49a3adf8371ed256959360727900763b15a294e96fe447d9e886a95c09938843 + languageName: node + linkType: hard + "babel-preset-jest@npm:30.2.0": version: 30.2.0 resolution: "babel-preset-jest@npm:30.2.0" @@ -9017,6 +10588,15 @@ __metadata: languageName: node linkType: hard +"baseline-browser-mapping@npm:^2.10.12": + version: 2.10.21 + resolution: "baseline-browser-mapping@npm:2.10.21" + bin: + baseline-browser-mapping: dist/cli.cjs + checksum: 10/3bbf95e713eef02e2585843fea2792371cbcb6a2395ca2099c1818c10cfb5bce1b7a8aa84050306981748209791cb4442d1e5f3697fda88c36bb106f3d23043c + languageName: node + linkType: hard + "baseline-browser-mapping@npm:^2.9.0": version: 2.9.4 resolution: "baseline-browser-mapping@npm:2.9.4" @@ -9290,6 +10870,21 @@ __metadata: languageName: node linkType: hard +"browserslist@npm:^4.28.1": + version: 4.28.2 + resolution: "browserslist@npm:4.28.2" + dependencies: + baseline-browser-mapping: "npm:^2.10.12" + caniuse-lite: "npm:^1.0.30001782" + electron-to-chromium: "npm:^1.5.328" + node-releases: "npm:^2.0.36" + update-browserslist-db: "npm:^1.2.3" + bin: + browserslist: cli.js + checksum: 10/cff88386e5b5ba5614c9063bd32ef94865bba22b6a381844c7d09ea1eea62a2247e7106e516abdbfda6b75b9986044c991dfe45f92f10add5ad63dccc07589ec + languageName: node + linkType: hard + "bs-logger@npm:^0.2.6": version: 0.2.6 resolution: "bs-logger@npm:0.2.6" @@ -9605,6 +11200,13 @@ __metadata: languageName: node linkType: hard +"caniuse-lite@npm:^1.0.30001782": + version: 1.0.30001790 + resolution: "caniuse-lite@npm:1.0.30001790" + checksum: 10/2625ba0b9c2648d14b4b02daf2fe7013d4efe087a45b034f40849c97077d435dbc610b47a34d3d6360cd62b7972864ae16978955205b7b8f7397303ba793e0ed + languageName: node + linkType: hard + "ccount@npm:^2.0.0": version: 2.0.1 resolution: "ccount@npm:2.0.1" @@ -9783,6 +11385,13 @@ __metadata: languageName: node linkType: hard +"cjs-module-lexer@npm:^1.0.0": + version: 1.4.3 + resolution: "cjs-module-lexer@npm:1.4.3" + checksum: 10/d2b92f919a2dedbfd61d016964fce8da0035f827182ed6839c97cac56e8a8077cfa6a59388adfe2bc588a19cef9bbe830d683a76a6e93c51f65852062cfe2591 + languageName: node + linkType: hard + "cjs-module-lexer@npm:^2.1.0": version: 2.1.1 resolution: "cjs-module-lexer@npm:2.1.1" @@ -9968,7 +11577,7 @@ __metadata: languageName: node linkType: hard -"collect-v8-coverage@npm:^1.0.2": +"collect-v8-coverage@npm:^1.0.0, collect-v8-coverage@npm:^1.0.2": version: 1.0.3 resolution: "collect-v8-coverage@npm:1.0.3" checksum: 10/656443261fb7b79cf79e89cba4b55622b07c1d4976c630829d7c5c585c73cda1c2ff101f316bfb19bb9e2c58d724c7db1f70a21e213dcd14099227c5e6019860 @@ -10619,6 +12228,15 @@ __metadata: languageName: node linkType: hard +"core-js-compat@npm:^3.48.0": + version: 3.49.0 + resolution: "core-js-compat@npm:3.49.0" + dependencies: + browserslist: "npm:^4.28.1" + checksum: 10/eb35ad9b31a613092d32e5eb0c9fecb695e680bb29509fe04ae297ef790cea47d06864ef8939c8f5f189cce0bd2807fef8b2d6450f7eeb917ffaaf38a775dece + languageName: node + linkType: hard + "core-util-is@npm:~1.0.0": version: 1.0.3 resolution: "core-util-is@npm:1.0.3" @@ -10710,6 +12328,23 @@ __metadata: languageName: node linkType: hard +"create-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "create-jest@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + chalk: "npm:^4.0.0" + exit: "npm:^0.1.2" + graceful-fs: "npm:^4.2.9" + jest-config: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + prompts: "npm:^2.0.1" + bin: + create-jest: bin/create-jest.js + checksum: 10/847b4764451672b4174be4d5c6d7d63442ec3aa5f3de52af924e4d996d87d7801c18e125504f25232fc75840f6625b3ac85860fac6ce799b5efae7bdcaf4a2b7 + languageName: node + linkType: hard + "create-require@npm:^1.1.0": version: 1.1.1 resolution: "create-require@npm:1.1.1" @@ -10742,7 +12377,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.5, cross-spawn@npm:^7.0.6": +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.5, cross-spawn@npm:^7.0.6": version: 7.0.6 resolution: "cross-spawn@npm:7.0.6" dependencies: @@ -10959,6 +12594,18 @@ __metadata: languageName: node linkType: hard +"dedent@npm:^1.0.0": + version: 1.7.2 + resolution: "dedent@npm:1.7.2" + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + checksum: 10/30b9062290dca72b0f5a6cd3667633448cef8cd0dec602eab61015741269ad49df90cabf0521f9a32d134ceab4e21aa7f097258c55cc3baadef94874686d6480 + languageName: node + linkType: hard + "dedent@npm:^1.6.0": version: 1.7.0 resolution: "dedent@npm:1.7.0" @@ -11002,7 +12649,7 @@ __metadata: languageName: node linkType: hard -"deepmerge@npm:^4.3.0, deepmerge@npm:^4.3.1": +"deepmerge@npm:^4.2.2, deepmerge@npm:^4.3.0, deepmerge@npm:^4.3.1": version: 4.3.1 resolution: "deepmerge@npm:4.3.1" checksum: 10/058d9e1b0ff1a154468bf3837aea436abcfea1ba1d165ddaaf48ca93765fdd01a30d33c36173da8fbbed951dd0a267602bc782fe288b0fc4b7e1e7091afc4529 @@ -11132,7 +12779,7 @@ __metadata: languageName: node linkType: hard -"detect-newline@npm:^3.1.0": +"detect-newline@npm:^3.0.0, detect-newline@npm:^3.1.0": version: 3.1.0 resolution: "detect-newline@npm:3.1.0" checksum: 10/ae6cd429c41ad01b164c59ea36f264a2c479598e61cba7c99da24175a7ab80ddf066420f2bec9a1c57a6bead411b4655ff15ad7d281c000a89791f48cbe939e7 @@ -11242,6 +12889,13 @@ __metadata: languageName: node linkType: hard +"diff-sequences@npm:^29.6.3": + version: 29.6.3 + resolution: "diff-sequences@npm:29.6.3" + checksum: 10/179daf9d2f9af5c57ad66d97cb902a538bcf8ed64963fa7aa0c329b3de3665ce2eb6ffdc2f69f29d445fa4af2517e5e55e5b6e00c00a9ae4f43645f97f7078cb + languageName: node + linkType: hard + "diff@npm:^4.0.1": version: 4.0.2 resolution: "diff@npm:4.0.2" @@ -11286,6 +12940,13 @@ __metadata: languageName: node linkType: hard +"dnssd-advertise@npm:^1.1.4": + version: 1.1.4 + resolution: "dnssd-advertise@npm:1.1.4" + checksum: 10/b8a50bac99bc96d79a42bec68fe7ffcf233d5d6accf2be762dfdb2e11ce2cc1be462ab56e7162b60a34a9b90d7222c5e97d2e5d0f44983ab00956328e999d55f + languageName: node + linkType: hard + "doctrine@npm:^2.1.0": version: 2.1.0 resolution: "doctrine@npm:2.1.0" @@ -11295,6 +12956,15 @@ __metadata: languageName: node linkType: hard +"doctrine@npm:^3.0.0": + version: 3.0.0 + resolution: "doctrine@npm:3.0.0" + dependencies: + esutils: "npm:^2.0.2" + checksum: 10/b4b28f1df5c563f7d876e7461254a4597b8cabe915abe94d7c5d1633fed263fcf9a85e8d3836591fc2d040108e822b0d32758e5ec1fe31c590dc7e08086e3e48 + languageName: node + linkType: hard + "dot-prop@npm:^5.1.0, dot-prop@npm:^5.2.0": version: 5.3.0 resolution: "dot-prop@npm:5.3.0" @@ -11417,6 +13087,13 @@ __metadata: languageName: node linkType: hard +"electron-to-chromium@npm:^1.5.328": + version: 1.5.344 + resolution: "electron-to-chromium@npm:1.5.344" + checksum: 10/0c75ba1c7f95a226c4a8422e79c1ffe25a0b173c3f478b0a883f25e284cdbcb1b7ca897621048c8a4ff76b120ff3bb443728187558099aaa35e8a43e10a6a1c1 + languageName: node + linkType: hard + "emittery@npm:^0.13.1": version: 0.13.1 resolution: "emittery@npm:0.13.1" @@ -11814,6 +13491,17 @@ __metadata: languageName: node linkType: hard +"eslint-config-prettier@npm:^8.5.0": + version: 8.10.2 + resolution: "eslint-config-prettier@npm:8.10.2" + peerDependencies: + eslint: ">=7.0.0" + bin: + eslint-config-prettier: bin/cli.js + checksum: 10/9818f26eebf32c5698bcc68d9b05e985ccaa6862488a32305681f9f025248c4b9192e587969594b3e79a814f965f808f513f63921dbb14639501fa61d6e6560d + languageName: node + linkType: hard + "eslint-mdx@npm:^3.7.0": version: 3.7.0 resolution: "eslint-mdx@npm:3.7.0" @@ -11840,6 +13528,49 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-eslint-comments@npm:^3.2.0": + version: 3.2.0 + resolution: "eslint-plugin-eslint-comments@npm:3.2.0" + dependencies: + escape-string-regexp: "npm:^1.0.5" + ignore: "npm:^5.0.5" + peerDependencies: + eslint: ">=4.19.1" + checksum: 10/4aa0d31a78ac7746002e37ca0cb436f3e5b481a97d28be07bad831e161a2ffcc4dedff44820edef9a1e80f6a0ab1ef44ed9a46e3a4c4a050350438451908972b + languageName: node + linkType: hard + +"eslint-plugin-ft-flow@npm:^2.0.1": + version: 2.0.3 + resolution: "eslint-plugin-ft-flow@npm:2.0.3" + dependencies: + lodash: "npm:^4.17.21" + string-natural-compare: "npm:^3.0.1" + peerDependencies: + "@babel/eslint-parser": ^7.12.0 + eslint: ^8.1.0 + checksum: 10/ea03496d247b9de915f0c5cee3724d4cbec8c0ab22029e4c06301c524bd8a7cbc20598971bed792304c5b3a17c1a1004a1bf7c7f59b55d3887aa7581e00ad0e1 + languageName: node + linkType: hard + +"eslint-plugin-jest@npm:^27.9.0": + version: 27.9.0 + resolution: "eslint-plugin-jest@npm:27.9.0" + dependencies: + "@typescript-eslint/utils": "npm:^5.10.0" + peerDependencies: + "@typescript-eslint/eslint-plugin": ^5.0.0 || ^6.0.0 || ^7.0.0 + eslint: ^7.0.0 || ^8.0.0 + jest: "*" + peerDependenciesMeta: + "@typescript-eslint/eslint-plugin": + optional: true + jest: + optional: true + checksum: 10/bca54347280c06c56516faea76042134dd74355c2de6c23361ba0e8736ecc01c62b144eea7eda7570ea4f4ee511c583bb8dab00d7153a1bd1740eb77b0038fd4 + languageName: node + linkType: hard + "eslint-plugin-jest@npm:^29.15.2": version: 29.15.2 resolution: "eslint-plugin-jest@npm:29.15.2" @@ -11913,7 +13644,34 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react@npm:^7.37.5": +"eslint-plugin-react-hooks@npm:^4.6.0": + version: 4.6.2 + resolution: "eslint-plugin-react-hooks@npm:4.6.2" + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + checksum: 10/5a0680941f34e70cf505bcb6082df31a3e445d193ee95a88ff3483041eb944f4cefdaf7e81b0eb1feb4eeceee8c7c6ddb8a2a6e8c4c0388514a42e16ac7b7a69 + languageName: node + linkType: hard + +"eslint-plugin-react-native-globals@npm:^0.1.1": + version: 0.1.2 + resolution: "eslint-plugin-react-native-globals@npm:0.1.2" + checksum: 10/ab91e8ecbb51718fb0763f29226b1c2d402251ab2c4730a8bf85f38b805e32d4243da46d07ccdb12cb9dcce9e7514364a1706142cf970f58dcc9a820bcf4b732 + languageName: node + linkType: hard + +"eslint-plugin-react-native@npm:^4.0.0": + version: 4.1.0 + resolution: "eslint-plugin-react-native@npm:4.1.0" + dependencies: + eslint-plugin-react-native-globals: "npm:^0.1.1" + peerDependencies: + eslint: ^3.17.0 || ^4 || ^5 || ^6 || ^7 || ^8 + checksum: 10/fb2d65a3faca9bf775a0fa430eb7e86b7c27d0b256916d4f79a94def9ad353c8a10605f1f0dc9a5fb10e446b003341d53af9d8cbca4dd7ba394350355efa30c6 + languageName: node + linkType: hard + +"eslint-plugin-react@npm:^7.30.1, eslint-plugin-react@npm:^7.37.5": version: 7.37.5 resolution: "eslint-plugin-react@npm:7.37.5" dependencies: @@ -11941,6 +13699,26 @@ __metadata: languageName: node linkType: hard +"eslint-scope@npm:5.1.1, eslint-scope@npm:^5.1.1": + version: 5.1.1 + resolution: "eslint-scope@npm:5.1.1" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^4.1.1" + checksum: 10/c541ef384c92eb5c999b7d3443d80195fcafb3da335500946f6db76539b87d5826c8f2e1d23bf6afc3154ba8cd7c8e566f8dc00f1eea25fdf3afc8fb9c87b238 + languageName: node + linkType: hard + +"eslint-scope@npm:^7.2.2": + version: 7.2.2 + resolution: "eslint-scope@npm:7.2.2" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^5.2.0" + checksum: 10/5c660fb905d5883ad018a6fea2b49f3cb5b1cbf2cd4bd08e98646e9864f9bc2c74c0839bed2d292e90a4a328833accc197c8f0baed89cbe8d605d6f918465491 + languageName: node + linkType: hard + "eslint-scope@npm:^9.1.2": version: 9.1.2 resolution: "eslint-scope@npm:9.1.2" @@ -11953,7 +13731,14 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^3.4.3": +"eslint-visitor-keys@npm:^2.1.0": + version: 2.1.0 + resolution: "eslint-visitor-keys@npm:2.1.0" + checksum: 10/db4547eef5039122d518fa307e938ceb8589da5f6e8f5222efaf14dd62f748ce82e2d2becd3ff9412a50350b726bda95dbea8515a471074547daefa58aee8735 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": version: 3.4.3 resolution: "eslint-visitor-keys@npm:3.4.3" checksum: 10/3f357c554a9ea794b094a09bd4187e5eacd1bc0d0653c3adeb87962c548e6a1ab8f982b86963ae1337f5d976004146536dcee5d0e2806665b193fbfbf1a9231b @@ -12019,6 +13804,54 @@ __metadata: languageName: node linkType: hard +"eslint@npm:^8.19.0": + version: 8.57.1 + resolution: "eslint@npm:8.57.1" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.2.0" + "@eslint-community/regexpp": "npm:^4.6.1" + "@eslint/eslintrc": "npm:^2.1.4" + "@eslint/js": "npm:8.57.1" + "@humanwhocodes/config-array": "npm:^0.13.0" + "@humanwhocodes/module-importer": "npm:^1.0.1" + "@nodelib/fs.walk": "npm:^1.2.8" + "@ungap/structured-clone": "npm:^1.2.0" + ajv: "npm:^6.12.4" + chalk: "npm:^4.0.0" + cross-spawn: "npm:^7.0.2" + debug: "npm:^4.3.2" + doctrine: "npm:^3.0.0" + escape-string-regexp: "npm:^4.0.0" + eslint-scope: "npm:^7.2.2" + eslint-visitor-keys: "npm:^3.4.3" + espree: "npm:^9.6.1" + esquery: "npm:^1.4.2" + esutils: "npm:^2.0.2" + fast-deep-equal: "npm:^3.1.3" + file-entry-cache: "npm:^6.0.1" + find-up: "npm:^5.0.0" + glob-parent: "npm:^6.0.2" + globals: "npm:^13.19.0" + graphemer: "npm:^1.4.0" + ignore: "npm:^5.2.0" + imurmurhash: "npm:^0.1.4" + is-glob: "npm:^4.0.0" + is-path-inside: "npm:^3.0.3" + js-yaml: "npm:^4.1.0" + json-stable-stringify-without-jsonify: "npm:^1.0.1" + levn: "npm:^0.4.1" + lodash.merge: "npm:^4.6.2" + minimatch: "npm:^3.1.2" + natural-compare: "npm:^1.4.0" + optionator: "npm:^0.9.3" + strip-ansi: "npm:^6.0.1" + text-table: "npm:^0.2.0" + bin: + eslint: bin/eslint.js + checksum: 10/5504fa24879afdd9f9929b2fbfc2ee9b9441a3d464efd9790fbda5f05738858530182029f13323add68d19fec749d3ab4a70320ded091ca4432b1e9cc4ed104c + languageName: node + linkType: hard + "espree@npm:^10.0.1, espree@npm:^9.6.1 || ^10.4.0": version: 10.4.0 resolution: "espree@npm:10.4.0" @@ -12041,6 +13874,17 @@ __metadata: languageName: node linkType: hard +"espree@npm:^9.6.0, espree@npm:^9.6.1": + version: 9.6.1 + resolution: "espree@npm:9.6.1" + dependencies: + acorn: "npm:^8.9.0" + acorn-jsx: "npm:^5.3.2" + eslint-visitor-keys: "npm:^3.4.1" + checksum: 10/255ab260f0d711a54096bdeda93adff0eadf02a6f9b92f02b323e83a2b7fc258797919437ad331efec3930475feb0142c5ecaaf3cdab4befebd336d47d3f3134 + languageName: node + linkType: hard + "esprima@npm:^4.0.0, esprima@npm:^4.0.1, esprima@npm:~4.0.0": version: 4.0.1 resolution: "esprima@npm:4.0.1" @@ -12051,7 +13895,7 @@ __metadata: languageName: node linkType: hard -"esquery@npm:^1.7.0": +"esquery@npm:^1.4.2, esquery@npm:^1.7.0": version: 1.7.0 resolution: "esquery@npm:1.7.0" dependencies: @@ -12069,6 +13913,13 @@ __metadata: languageName: node linkType: hard +"estraverse@npm:^4.1.1": + version: 4.3.0 + resolution: "estraverse@npm:4.3.0" + checksum: 10/3f67ad02b6dbfaddd9ea459cf2b6ef4ecff9a6082a7af9d22e445b9abc082ad9ca47e1825557b293fcdae477f4714e561123e30bb6a5b2f184fb2bad4a9497eb + languageName: node + linkType: hard + "estraverse@npm:^5.1.0, estraverse@npm:^5.2.0, estraverse@npm:^5.3.0": version: 5.3.0 resolution: "estraverse@npm:5.3.0" @@ -12265,6 +14116,13 @@ __metadata: languageName: node linkType: hard +"exit@npm:^0.1.2": + version: 0.1.2 + resolution: "exit@npm:0.1.2" + checksum: 10/387555050c5b3c10e7a9e8df5f43194e95d7737c74532c409910e585d5554eaff34960c166643f5e23d042196529daad059c292dcf1fb61b8ca878d3677f4b87 + languageName: node + linkType: hard + "expect@npm:30.2.0": version: 30.2.0 resolution: "expect@npm:30.2.0" @@ -12279,6 +14137,33 @@ __metadata: languageName: node linkType: hard +"expect@npm:^29.0.0, expect@npm:^29.7.0": + version: 29.7.0 + resolution: "expect@npm:29.7.0" + dependencies: + "@jest/expect-utils": "npm:^29.7.0" + jest-get-type: "npm:^29.6.3" + jest-matcher-utils: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + checksum: 10/63f97bc51f56a491950fb525f9ad94f1916e8a014947f8d8445d3847a665b5471b768522d659f5e865db20b6c2033d2ac10f35fcbd881a4d26407a4f6f18451a + languageName: node + linkType: hard + +"expo-asset@npm:~55.0.16": + version: 55.0.16 + resolution: "expo-asset@npm:55.0.16" + dependencies: + "@expo/image-utils": "npm:^0.8.13" + expo-constants: "npm:~55.0.15" + peerDependencies: + expo: "*" + react: "*" + react-native: "*" + checksum: 10/c23f4970806df2d758e9092b85682ced0a302edb45614dfa136dbba767aa6480075849fae6781c412b9b005cc216e026046f6af383485a2a3ad816ab16cba791 + languageName: node + linkType: hard + "expo-asset@npm:~55.0.8": version: 55.0.8 resolution: "expo-asset@npm:55.0.8" @@ -12293,6 +14178,31 @@ __metadata: languageName: node linkType: hard +"expo-build-properties@npm:^55.0.13": + version: 55.0.13 + resolution: "expo-build-properties@npm:55.0.13" + dependencies: + "@expo/schema-utils": "npm:^55.0.3" + resolve-from: "npm:^5.0.0" + semver: "npm:^7.6.0" + peerDependencies: + expo: "*" + checksum: 10/b3de6f308c61d1b24f085d2e5e246cfcadd253791dd802aa5440a0894f775801a6ca1dbb8b0b2f64f42c037d5811d930a32bef693a2f61e336f830734140b2bf + languageName: node + linkType: hard + +"expo-constants@npm:~55.0.15": + version: 55.0.15 + resolution: "expo-constants@npm:55.0.15" + dependencies: + "@expo/env": "npm:~2.1.1" + peerDependencies: + expo: "*" + react-native: "*" + checksum: 10/b0992b543ef9258168932deeddf48754ba007b2950bbf2564c9407119fee6e644fa0e63ad5979e739e7e86cdc40f72fa9b785786ebbf2e39c0aa020d085cb027 + languageName: node + linkType: hard + "expo-constants@npm:~55.0.7": version: 55.0.7 resolution: "expo-constants@npm:55.0.7" @@ -12316,6 +14226,16 @@ __metadata: languageName: node linkType: hard +"expo-file-system@npm:~55.0.17": + version: 55.0.17 + resolution: "expo-file-system@npm:55.0.17" + peerDependencies: + expo: "*" + react-native: "*" + checksum: 10/0569b4fe65666ececd41ac7d3c8d3fd2c0bda2ce73125be7ee784c686807c6604fe16292614f3f654104922566ecb79cce48bf4cda4980af170fb2572ae57dd3 + languageName: node + linkType: hard + "expo-font@npm:~55.0.4": version: 55.0.4 resolution: "expo-font@npm:55.0.4" @@ -12329,6 +14249,19 @@ __metadata: languageName: node linkType: hard +"expo-font@npm:~55.0.6": + version: 55.0.6 + resolution: "expo-font@npm:55.0.6" + dependencies: + fontfaceobserver: "npm:^2.1.0" + peerDependencies: + expo: "*" + react: "*" + react-native: "*" + checksum: 10/8063423abd4d2c06a6b7e06507d1dd119c98b37903cb494a2e5cb84fb9f83dbc5b4b9dd8dbe9f2b7c76b0554b97c2106e28fa9f277bcbfd50b70132643ed4de6 + languageName: node + linkType: hard + "expo-keep-awake@npm:~55.0.4": version: 55.0.4 resolution: "expo-keep-awake@npm:55.0.4" @@ -12339,6 +14272,30 @@ __metadata: languageName: node linkType: hard +"expo-keep-awake@npm:~55.0.6": + version: 55.0.6 + resolution: "expo-keep-awake@npm:55.0.6" + peerDependencies: + expo: "*" + react: "*" + checksum: 10/f4d52bf8c5499c7c8df4398b0ebe78c835361d15b488350340b410c57ac9794c2781cda605ce6cce968e37adab126fec455ceb3b5b97128186cc7e18571c414c + languageName: node + linkType: hard + +"expo-modules-autolinking@npm:55.0.18": + version: 55.0.18 + resolution: "expo-modules-autolinking@npm:55.0.18" + dependencies: + "@expo/require-utils": "npm:^55.0.4" + "@expo/spawn-async": "npm:^1.7.2" + chalk: "npm:^4.1.0" + commander: "npm:^7.2.0" + bin: + expo-modules-autolinking: bin/expo-modules-autolinking.js + checksum: 10/d4976bf99b49c8f1e5d4885b11f47d8852f878da19e88c3a4e879e42498ed4d22185ed4ee56496583ee83bb6ba15fbdc1d82788b7403a12392d0640e1c56f914 + languageName: node + linkType: hard + "expo-modules-autolinking@npm:55.0.8": version: 55.0.8 resolution: "expo-modules-autolinking@npm:55.0.8" @@ -12365,6 +14322,22 @@ __metadata: languageName: node linkType: hard +"expo-modules-core@npm:55.0.23": + version: 55.0.23 + resolution: "expo-modules-core@npm:55.0.23" + dependencies: + invariant: "npm:^2.2.4" + peerDependencies: + react: "*" + react-native: "*" + react-native-worklets: ^0.7.4 || ^0.8.0 + peerDependenciesMeta: + react-native-worklets: + optional: true + checksum: 10/b442000958f95b250d1d5b9ccc5fd4b3064e4a4261ff5e45e1d73833ec8ab3df0e7d6f36c6a0f487b85f90ca4c124bab61da4a45e074fbda5e93c77bd5c36995 + languageName: node + linkType: hard + "expo-server@npm:^55.0.6": version: 55.0.6 resolution: "expo-server@npm:55.0.6" @@ -12372,6 +14345,25 @@ __metadata: languageName: node linkType: hard +"expo-server@npm:^55.0.8": + version: 55.0.8 + resolution: "expo-server@npm:55.0.8" + checksum: 10/aa8c1b8ba5d67c6565736c06cca06fe38592817eb27aaf015c6f24a831d399d8d231070f5724db8c25d9ebd987086551f6a11fae1ffa8c520f647019c470e02f + languageName: node + linkType: hard + +"expo-status-bar@npm:~55.0.5": + version: 55.0.5 + resolution: "expo-status-bar@npm:55.0.5" + dependencies: + react-native-is-edge-to-edge: "npm:^1.2.1" + peerDependencies: + react: "*" + react-native: "*" + checksum: 10/04b0ac4f9908174c4ecdf40b9a2eddcd33dc7567238fe0c21036a1536db855b431a90be6a7e03bd4f0c2c0917644f2f33269fe701ff363a8f62137737d649d53 + languageName: node + linkType: hard + "expo@npm:^55.0.5": version: 55.0.5 resolution: "expo@npm:55.0.5" @@ -12420,6 +14412,54 @@ __metadata: languageName: node linkType: hard +"expo@npm:~55.0.17": + version: 55.0.17 + resolution: "expo@npm:55.0.17" + dependencies: + "@babel/runtime": "npm:^7.20.0" + "@expo/cli": "npm:55.0.26" + "@expo/config": "npm:~55.0.15" + "@expo/config-plugins": "npm:~55.0.8" + "@expo/devtools": "npm:55.0.2" + "@expo/fingerprint": "npm:0.16.6" + "@expo/local-build-cache-provider": "npm:55.0.11" + "@expo/log-box": "npm:55.0.11" + "@expo/metro": "npm:~55.1.0" + "@expo/metro-config": "npm:55.0.17" + "@expo/vector-icons": "npm:^15.0.2" + "@ungap/structured-clone": "npm:^1.3.0" + babel-preset-expo: "npm:~55.0.18" + expo-asset: "npm:~55.0.16" + expo-constants: "npm:~55.0.15" + expo-file-system: "npm:~55.0.17" + expo-font: "npm:~55.0.6" + expo-keep-awake: "npm:~55.0.6" + expo-modules-autolinking: "npm:55.0.18" + expo-modules-core: "npm:55.0.23" + pretty-format: "npm:^29.7.0" + react-refresh: "npm:^0.14.2" + whatwg-url-minimum: "npm:^0.1.1" + peerDependencies: + "@expo/dom-webview": "*" + "@expo/metro-runtime": "*" + react: "*" + react-native: "*" + react-native-webview: "*" + peerDependenciesMeta: + "@expo/dom-webview": + optional: true + "@expo/metro-runtime": + optional: true + react-native-webview: + optional: true + bin: + expo: bin/cli + expo-modules-autolinking: bin/autolinking + fingerprint: bin/fingerprint + checksum: 10/1633ed03547fcddf6ddb077b098049cb959f83f40b7529344a3b8b407e011708ba85f043198a2d1ebf42c9c8fbdf4a44b5bee65686c28375a9545e674001c6af + languageName: node + linkType: hard + "exponential-backoff@npm:^3.1.1": version: 3.1.3 resolution: "exponential-backoff@npm:3.1.3" @@ -12692,6 +14732,13 @@ __metadata: languageName: node linkType: hard +"fetch-nodeshim@npm:^0.4.10": + version: 0.4.10 + resolution: "fetch-nodeshim@npm:0.4.10" + checksum: 10/4abc48fe6bb2c44493f4d781a8d746e99133b18e456f44626fde36852e9f63fe7a3f71c1b0316e49725398c19b46d503389b4622e6e62b81f70add6da4b43cd7 + languageName: node + linkType: hard + "fetch-nodeshim@npm:^0.4.6": version: 0.4.9 resolution: "fetch-nodeshim@npm:0.4.9" @@ -12708,6 +14755,15 @@ __metadata: languageName: node linkType: hard +"file-entry-cache@npm:^6.0.1": + version: 6.0.1 + resolution: "file-entry-cache@npm:6.0.1" + dependencies: + flat-cache: "npm:^3.0.4" + checksum: 10/099bb9d4ab332cb93c48b14807a6918a1da87c45dce91d4b61fd40e6505d56d0697da060cb901c729c90487067d93c9243f5da3dc9c41f0358483bfdebca736b + languageName: node + linkType: hard + "file-entry-cache@npm:^8.0.0": version: 8.0.0 resolution: "file-entry-cache@npm:8.0.0" @@ -13041,6 +15097,17 @@ __metadata: languageName: node linkType: hard +"flat-cache@npm:^3.0.4": + version: 3.2.0 + resolution: "flat-cache@npm:3.2.0" + dependencies: + flatted: "npm:^3.2.9" + keyv: "npm:^4.5.3" + rimraf: "npm:^3.0.2" + checksum: 10/02381c6ece5e9fa5b826c9bbea481d7fd77645d96e4b0b1395238124d581d10e56f17f723d897b6d133970f7a57f0fab9148cbbb67237a0a0ffe794ba60c0c70 + languageName: node + linkType: hard + "flat-cache@npm:^4.0.0": version: 4.0.1 resolution: "flat-cache@npm:4.0.1" @@ -13771,6 +15838,15 @@ __metadata: languageName: node linkType: hard +"globals@npm:^13.19.0": + version: 13.24.0 + resolution: "globals@npm:13.24.0" + dependencies: + type-fest: "npm:^0.20.2" + checksum: 10/62c5b1997d06674fc7191d3e01e324d3eda4d65ac9cc4e78329fa3b5c4fd42a0e1c8722822497a6964eee075255ce21ccf1eec2d83f92ef3f06653af4d0ee28e + languageName: node + linkType: hard + "globals@npm:^14.0.0": version: 14.0.0 resolution: "globals@npm:14.0.0" @@ -13795,7 +15871,7 @@ __metadata: languageName: node linkType: hard -"globby@npm:^11.0.0, globby@npm:^11.0.1": +"globby@npm:^11.0.0, globby@npm:^11.0.1, globby@npm:^11.1.0": version: 11.1.0 resolution: "globby@npm:11.1.0" dependencies: @@ -13932,6 +16008,13 @@ __metadata: languageName: node linkType: hard +"graphemer@npm:^1.4.0": + version: 1.4.0 + resolution: "graphemer@npm:1.4.0" + checksum: 10/6dd60dba97007b21e3a829fab3f771803cc1292977fe610e240ea72afd67e5690ac9eeaafc4a99710e78962e5936ab5a460787c2a1180f1cb0ccfac37d29f897 + languageName: node + linkType: hard + "gtoken@npm:^7.0.0": version: 7.1.0 resolution: "gtoken@npm:7.1.0" @@ -14247,6 +16330,13 @@ __metadata: languageName: node linkType: hard +"hermes-compiler@npm:0.14.1": + version: 0.14.1 + resolution: "hermes-compiler@npm:0.14.1" + checksum: 10/dbb0f4886532b26262721fa34de5947502b265cea8574f6094915abf59d31c757da6a41730cb6f6d088ec7607d659e8b4036782d227dcf072e9a49152bbef756 + languageName: node + linkType: hard + "hermes-estree@npm:0.25.1": version: 0.25.1 resolution: "hermes-estree@npm:0.25.1" @@ -14282,6 +16372,13 @@ __metadata: languageName: node linkType: hard +"hermes-estree@npm:0.35.0": + version: 0.35.0 + resolution: "hermes-estree@npm:0.35.0" + checksum: 10/d10283d0189ab2270ecae08632ed4f15eb79f206add4960d198aa6efd5686e1c92ed37c17a020c730281e46ff2f56661f3d787bdfb1692218c1495b329049747 + languageName: node + linkType: hard + "hermes-parser@npm:0.25.1": version: 0.25.1 resolution: "hermes-parser@npm:0.25.1" @@ -14327,6 +16424,15 @@ __metadata: languageName: node linkType: hard +"hermes-parser@npm:0.35.0": + version: 0.35.0 + resolution: "hermes-parser@npm:0.35.0" + dependencies: + hermes-estree: "npm:0.35.0" + checksum: 10/62be25fa41b708db21c4db9153b0d60cfbf9bd4645f1712eb559b3be8c191266b5b381df60fbbc45416799f73c2361eb69a81eead21dc5159fe2ea72f946d5f7 + languageName: node + linkType: hard + "highlight.js@npm:^10.7.1": version: 10.7.3 resolution: "highlight.js@npm:10.7.3" @@ -14536,7 +16642,7 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.2.0, ignore@npm:^5.3.1": +"ignore@npm:^5.0.5, ignore@npm:^5.2.0, ignore@npm:^5.3.1": version: 5.3.2 resolution: "ignore@npm:5.3.2" checksum: 10/cceb6a457000f8f6a50e1196429750d782afce5680dd878aa4221bd79972d68b3a55b4b1458fc682be978f4d3c6a249046aa0880637367216444ab7b014cfc98 @@ -14607,7 +16713,7 @@ __metadata: languageName: node linkType: hard -"import-local@npm:^3.2.0": +"import-local@npm:^3.0.2, import-local@npm:^3.2.0": version: 3.2.0 resolution: "import-local@npm:3.2.0" dependencies: @@ -15014,7 +17120,7 @@ __metadata: languageName: node linkType: hard -"is-generator-fn@npm:^2.1.0": +"is-generator-fn@npm:^2.0.0, is-generator-fn@npm:^2.1.0": version: 2.1.0 resolution: "is-generator-fn@npm:2.1.0" checksum: 10/a6ad5492cf9d1746f73b6744e0c43c0020510b59d56ddcb78a91cbc173f09b5e6beff53d75c9c5a29feb618bfef2bf458e025ecf3a57ad2268e2fb2569f56215 @@ -15625,6 +17731,17 @@ __metadata: languageName: node linkType: hard +"jest-changed-files@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-changed-files@npm:29.7.0" + dependencies: + execa: "npm:^5.0.0" + jest-util: "npm:^29.7.0" + p-limit: "npm:^3.1.0" + checksum: 10/3d93742e56b1a73a145d55b66e96711fbf87ef89b96c2fab7cfdfba8ec06612591a982111ca2b712bb853dbc16831ec8b43585a2a96b83862d6767de59cbf83d + languageName: node + linkType: hard + "jest-circus@npm:30.2.0, jest-circus@npm:^30.2.0": version: 30.2.0 resolution: "jest-circus@npm:30.2.0" @@ -15653,6 +17770,34 @@ __metadata: languageName: node linkType: hard +"jest-circus@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-circus@npm:29.7.0" + dependencies: + "@jest/environment": "npm:^29.7.0" + "@jest/expect": "npm:^29.7.0" + "@jest/test-result": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + co: "npm:^4.6.0" + dedent: "npm:^1.0.0" + is-generator-fn: "npm:^2.0.0" + jest-each: "npm:^29.7.0" + jest-matcher-utils: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-runtime: "npm:^29.7.0" + jest-snapshot: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + p-limit: "npm:^3.1.0" + pretty-format: "npm:^29.7.0" + pure-rand: "npm:^6.0.0" + slash: "npm:^3.0.0" + stack-utils: "npm:^2.0.3" + checksum: 10/716a8e3f40572fd0213bcfc1da90274bf30d856e5133af58089a6ce45089b63f4d679bd44e6be9d320e8390483ebc3ae9921981993986d21639d9019b523123d + languageName: node + linkType: hard + "jest-cli@npm:30.2.0": version: 30.2.0 resolution: "jest-cli@npm:30.2.0" @@ -15678,6 +17823,32 @@ __metadata: languageName: node linkType: hard +"jest-cli@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-cli@npm:29.7.0" + dependencies: + "@jest/core": "npm:^29.7.0" + "@jest/test-result": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + chalk: "npm:^4.0.0" + create-jest: "npm:^29.7.0" + exit: "npm:^0.1.2" + import-local: "npm:^3.0.2" + jest-config: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + jest-validate: "npm:^29.7.0" + yargs: "npm:^17.3.1" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: 10/6cc62b34d002c034203065a31e5e9a19e7c76d9e8ef447a6f70f759c0714cb212c6245f75e270ba458620f9c7b26063cd8cf6cd1f7e3afd659a7cc08add17307 + languageName: node + linkType: hard + "jest-config@npm:30.2.0": version: 30.2.0 resolution: "jest-config@npm:30.2.0" @@ -15721,6 +17892,44 @@ __metadata: languageName: node linkType: hard +"jest-config@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-config@npm:29.7.0" + dependencies: + "@babel/core": "npm:^7.11.6" + "@jest/test-sequencer": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + babel-jest: "npm:^29.7.0" + chalk: "npm:^4.0.0" + ci-info: "npm:^3.2.0" + deepmerge: "npm:^4.2.2" + glob: "npm:^7.1.3" + graceful-fs: "npm:^4.2.9" + jest-circus: "npm:^29.7.0" + jest-environment-node: "npm:^29.7.0" + jest-get-type: "npm:^29.6.3" + jest-regex-util: "npm:^29.6.3" + jest-resolve: "npm:^29.7.0" + jest-runner: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + jest-validate: "npm:^29.7.0" + micromatch: "npm:^4.0.4" + parse-json: "npm:^5.2.0" + pretty-format: "npm:^29.7.0" + slash: "npm:^3.0.0" + strip-json-comments: "npm:^3.1.1" + peerDependencies: + "@types/node": "*" + ts-node: ">=9.0.0" + peerDependenciesMeta: + "@types/node": + optional: true + ts-node: + optional: true + checksum: 10/6bdf570e9592e7d7dd5124fc0e21f5fe92bd15033513632431b211797e3ab57eaa312f83cc6481b3094b72324e369e876f163579d60016677c117ec4853cf02b + languageName: node + linkType: hard + "jest-diff@npm:30.2.0, jest-diff@npm:>=30.0.0 < 31, jest-diff@npm:^30.0.2": version: 30.2.0 resolution: "jest-diff@npm:30.2.0" @@ -15733,6 +17942,18 @@ __metadata: languageName: node linkType: hard +"jest-diff@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-diff@npm:29.7.0" + dependencies: + chalk: "npm:^4.0.0" + diff-sequences: "npm:^29.6.3" + jest-get-type: "npm:^29.6.3" + pretty-format: "npm:^29.7.0" + checksum: 10/6f3a7eb9cd9de5ea9e5aa94aed535631fa6f80221832952839b3cb59dd419b91c20b73887deb0b62230d06d02d6b6cf34ebb810b88d904bb4fe1e2e4f0905c98 + languageName: node + linkType: hard + "jest-docblock@npm:30.2.0": version: 30.2.0 resolution: "jest-docblock@npm:30.2.0" @@ -15742,6 +17963,15 @@ __metadata: languageName: node linkType: hard +"jest-docblock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-docblock@npm:29.7.0" + dependencies: + detect-newline: "npm:^3.0.0" + checksum: 10/8d48818055bc96c9e4ec2e217a5a375623c0d0bfae8d22c26e011074940c202aa2534a3362294c81d981046885c05d304376afba9f2874143025981148f3e96d + languageName: node + linkType: hard + "jest-each@npm:30.2.0": version: 30.2.0 resolution: "jest-each@npm:30.2.0" @@ -15755,6 +17985,19 @@ __metadata: languageName: node linkType: hard +"jest-each@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-each@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + chalk: "npm:^4.0.0" + jest-get-type: "npm:^29.6.3" + jest-util: "npm:^29.7.0" + pretty-format: "npm:^29.7.0" + checksum: 10/bd1a077654bdaa013b590deb5f7e7ade68f2e3289180a8c8f53bc8a49f3b40740c0ec2d3a3c1aee906f682775be2bebbac37491d80b634d15276b0aa0f2e3fda + languageName: node + linkType: hard + "jest-environment-emit@npm:^1.2.0": version: 1.2.0 resolution: "jest-environment-emit@npm:1.2.0" @@ -15879,6 +18122,16 @@ __metadata: languageName: node linkType: hard +"jest-leak-detector@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-leak-detector@npm:29.7.0" + dependencies: + jest-get-type: "npm:^29.6.3" + pretty-format: "npm:^29.7.0" + checksum: 10/e3950e3ddd71e1d0c22924c51a300a1c2db6cf69ec1e51f95ccf424bcc070f78664813bef7aed4b16b96dfbdeea53fe358f8aeaaea84346ae15c3735758f1605 + languageName: node + linkType: hard + "jest-matcher-utils@npm:30.2.0": version: 30.2.0 resolution: "jest-matcher-utils@npm:30.2.0" @@ -15891,6 +18144,18 @@ __metadata: languageName: node linkType: hard +"jest-matcher-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-matcher-utils@npm:29.7.0" + dependencies: + chalk: "npm:^4.0.0" + jest-diff: "npm:^29.7.0" + jest-get-type: "npm:^29.6.3" + pretty-format: "npm:^29.7.0" + checksum: 10/981904a494299cf1e3baed352f8a3bd8b50a8c13a662c509b6a53c31461f94ea3bfeffa9d5efcfeb248e384e318c87de7e3baa6af0f79674e987482aa189af40 + languageName: node + linkType: hard + "jest-message-util@npm:30.2.0": version: 30.2.0 resolution: "jest-message-util@npm:30.2.0" @@ -15947,7 +18212,7 @@ __metadata: languageName: node linkType: hard -"jest-pnp-resolver@npm:^1.2.3": +"jest-pnp-resolver@npm:^1.2.2, jest-pnp-resolver@npm:^1.2.3": version: 1.2.3 resolution: "jest-pnp-resolver@npm:1.2.3" peerDependencies: @@ -15983,6 +18248,16 @@ __metadata: languageName: node linkType: hard +"jest-resolve-dependencies@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-resolve-dependencies@npm:29.7.0" + dependencies: + jest-regex-util: "npm:^29.6.3" + jest-snapshot: "npm:^29.7.0" + checksum: 10/1e206f94a660d81e977bcfb1baae6450cb4a81c92e06fad376cc5ea16b8e8c6ea78c383f39e95591a9eb7f925b6a1021086c38941aa7c1b8a6a813c2f6e93675 + languageName: node + linkType: hard + "jest-resolve@npm:30.2.0": version: 30.2.0 resolution: "jest-resolve@npm:30.2.0" @@ -15999,6 +18274,23 @@ __metadata: languageName: node linkType: hard +"jest-resolve@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-resolve@npm:29.7.0" + dependencies: + chalk: "npm:^4.0.0" + graceful-fs: "npm:^4.2.9" + jest-haste-map: "npm:^29.7.0" + jest-pnp-resolver: "npm:^1.2.2" + jest-util: "npm:^29.7.0" + jest-validate: "npm:^29.7.0" + resolve: "npm:^1.20.0" + resolve.exports: "npm:^2.0.0" + slash: "npm:^3.0.0" + checksum: 10/faa466fd9bc69ea6c37a545a7c6e808e073c66f46ab7d3d8a6ef084f8708f201b85d5fe1799789578b8b47fa1de47b9ee47b414d1863bc117a49e032ba77b7c7 + languageName: node + linkType: hard + "jest-runner@npm:30.2.0": version: 30.2.0 resolution: "jest-runner@npm:30.2.0" @@ -16029,6 +18321,35 @@ __metadata: languageName: node linkType: hard +"jest-runner@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-runner@npm:29.7.0" + dependencies: + "@jest/console": "npm:^29.7.0" + "@jest/environment": "npm:^29.7.0" + "@jest/test-result": "npm:^29.7.0" + "@jest/transform": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + emittery: "npm:^0.13.1" + graceful-fs: "npm:^4.2.9" + jest-docblock: "npm:^29.7.0" + jest-environment-node: "npm:^29.7.0" + jest-haste-map: "npm:^29.7.0" + jest-leak-detector: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-resolve: "npm:^29.7.0" + jest-runtime: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + jest-watcher: "npm:^29.7.0" + jest-worker: "npm:^29.7.0" + p-limit: "npm:^3.1.0" + source-map-support: "npm:0.5.13" + checksum: 10/9d8748a494bd90f5c82acea99be9e99f21358263ce6feae44d3f1b0cd90991b5df5d18d607e73c07be95861ee86d1cbab2a3fc6ca4b21805f07ac29d47c1da1e + languageName: node + linkType: hard + "jest-runtime@npm:30.2.0": version: 30.2.0 resolution: "jest-runtime@npm:30.2.0" @@ -16059,6 +18380,36 @@ __metadata: languageName: node linkType: hard +"jest-runtime@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-runtime@npm:29.7.0" + dependencies: + "@jest/environment": "npm:^29.7.0" + "@jest/fake-timers": "npm:^29.7.0" + "@jest/globals": "npm:^29.7.0" + "@jest/source-map": "npm:^29.6.3" + "@jest/test-result": "npm:^29.7.0" + "@jest/transform": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + cjs-module-lexer: "npm:^1.0.0" + collect-v8-coverage: "npm:^1.0.0" + glob: "npm:^7.1.3" + graceful-fs: "npm:^4.2.9" + jest-haste-map: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-mock: "npm:^29.7.0" + jest-regex-util: "npm:^29.6.3" + jest-resolve: "npm:^29.7.0" + jest-snapshot: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + slash: "npm:^3.0.0" + strip-bom: "npm:^4.0.0" + checksum: 10/59eb58eb7e150e0834a2d0c0d94f2a0b963ae7182cfa6c63f2b49b9c6ef794e5193ef1634e01db41420c36a94cefc512cdd67a055cd3e6fa2f41eaf0f82f5a20 + languageName: node + linkType: hard + "jest-snapshot@npm:30.2.0": version: 30.2.0 resolution: "jest-snapshot@npm:30.2.0" @@ -16088,6 +18439,34 @@ __metadata: languageName: node linkType: hard +"jest-snapshot@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-snapshot@npm:29.7.0" + dependencies: + "@babel/core": "npm:^7.11.6" + "@babel/generator": "npm:^7.7.2" + "@babel/plugin-syntax-jsx": "npm:^7.7.2" + "@babel/plugin-syntax-typescript": "npm:^7.7.2" + "@babel/types": "npm:^7.3.3" + "@jest/expect-utils": "npm:^29.7.0" + "@jest/transform": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + babel-preset-current-node-syntax: "npm:^1.0.0" + chalk: "npm:^4.0.0" + expect: "npm:^29.7.0" + graceful-fs: "npm:^4.2.9" + jest-diff: "npm:^29.7.0" + jest-get-type: "npm:^29.6.3" + jest-matcher-utils: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + natural-compare: "npm:^1.4.0" + pretty-format: "npm:^29.7.0" + semver: "npm:^7.5.3" + checksum: 10/cb19a3948256de5f922d52f251821f99657339969bf86843bd26cf3332eae94883e8260e3d2fba46129a27c3971c1aa522490e460e16c7fad516e82d10bbf9f8 + languageName: node + linkType: hard + "jest-util@npm:30.2.0": version: 30.2.0 resolution: "jest-util@npm:30.2.0" @@ -16160,6 +18539,22 @@ __metadata: languageName: node linkType: hard +"jest-watcher@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-watcher@npm:29.7.0" + dependencies: + "@jest/test-result": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + ansi-escapes: "npm:^4.2.1" + chalk: "npm:^4.0.0" + emittery: "npm:^0.13.1" + jest-util: "npm:^29.7.0" + string-length: "npm:^4.0.1" + checksum: 10/4f616e0345676631a7034b1d94971aaa719f0cd4a6041be2aa299be437ea047afd4fe05c48873b7963f5687a2f6c7cbf51244be8b14e313b97bfe32b1e127e55 + languageName: node + linkType: hard + "jest-worker@npm:30.2.0": version: 30.2.0 resolution: "jest-worker@npm:30.2.0" @@ -16185,6 +18580,25 @@ __metadata: languageName: node linkType: hard +"jest@npm:^29.6.3": + version: 29.7.0 + resolution: "jest@npm:29.7.0" + dependencies: + "@jest/core": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + import-local: "npm:^3.0.2" + jest-cli: "npm:^29.7.0" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: 10/97023d78446098c586faaa467fbf2c6b07ff06e2c85a19e3926adb5b0effe9ac60c4913ae03e2719f9c01ae8ffd8d92f6b262cedb9555ceeb5d19263d8c6362a + languageName: node + linkType: hard + "jest@npm:^30.2.0": version: 30.2.0 resolution: "jest@npm:30.2.0" @@ -16642,7 +19056,7 @@ __metadata: languageName: node linkType: hard -"keyv@npm:^4.5.4": +"keyv@npm:^4.5.3, keyv@npm:^4.5.4": version: 4.5.4 resolution: "keyv@npm:4.5.4" dependencies: @@ -16706,6 +19120,15 @@ __metadata: languageName: node linkType: hard +"lan-network@npm:^0.2.1": + version: 0.2.1 + resolution: "lan-network@npm:0.2.1" + bin: + lan-network: dist/lan-network-cli.js + checksum: 10/6c39acaaa915c2cd89950c3347352b8743b50710ead1686652791bf93359fabc712affc423b340bb5eb4c2ff20a60120e5d8ddb2b4dced42fc3d8aad126cf525 + languageName: node + linkType: hard + "launch-editor@npm:^2.9.1": version: 2.12.0 resolution: "launch-editor@npm:2.12.0" @@ -17908,6 +20331,19 @@ __metadata: languageName: node linkType: hard +"metro-babel-transformer@npm:0.83.6": + version: 0.83.6 + resolution: "metro-babel-transformer@npm:0.83.6" + dependencies: + "@babel/core": "npm:^7.25.2" + flow-enums-runtime: "npm:^0.0.6" + hermes-parser: "npm:0.35.0" + metro-cache-key: "npm:0.83.6" + nullthrows: "npm:^1.1.1" + checksum: 10/6aa5f0edf481f4f6029f294c39383a9e0ce4d54038a92f4491cc3be2a01cb0b8e42f1c184d777b3dce47d68136c640f184b76eb1644d0fe428c1461a47db6448 + languageName: node + linkType: hard + "metro-cache-key@npm:0.81.5": version: 0.81.5 resolution: "metro-cache-key@npm:0.81.5" @@ -17935,6 +20371,15 @@ __metadata: languageName: node linkType: hard +"metro-cache-key@npm:0.83.6": + version: 0.83.6 + resolution: "metro-cache-key@npm:0.83.6" + dependencies: + flow-enums-runtime: "npm:^0.0.6" + checksum: 10/8d1f285d6987b4e57b708272c06d30ba12bc74137c7bf8c0fbcfb61ed7855e8cd3fe7a0c4890fa6c50e63719b28bc03c1c2098a33ac8d4817687feed1521133d + languageName: node + linkType: hard + "metro-cache@npm:0.81.5": version: 0.81.5 resolution: "metro-cache@npm:0.81.5" @@ -17958,15 +20403,27 @@ __metadata: languageName: node linkType: hard -"metro-cache@npm:0.83.3": - version: 0.83.3 - resolution: "metro-cache@npm:0.83.3" +"metro-cache@npm:0.83.3": + version: 0.83.3 + resolution: "metro-cache@npm:0.83.3" + dependencies: + exponential-backoff: "npm:^3.1.1" + flow-enums-runtime: "npm:^0.0.6" + https-proxy-agent: "npm:^7.0.5" + metro-core: "npm:0.83.3" + checksum: 10/4bc263ac92f176451710ebd330d156675e40f028be02eb9659a9b024db9897f3ad8510809d699969cb6f06dc0f06d85c38ca7162fb9a70be44510fa03270e089 + languageName: node + linkType: hard + +"metro-cache@npm:0.83.6": + version: 0.83.6 + resolution: "metro-cache@npm:0.83.6" dependencies: exponential-backoff: "npm:^3.1.1" flow-enums-runtime: "npm:^0.0.6" https-proxy-agent: "npm:^7.0.5" - metro-core: "npm:0.83.3" - checksum: 10/4bc263ac92f176451710ebd330d156675e40f028be02eb9659a9b024db9897f3ad8510809d699969cb6f06dc0f06d85c38ca7162fb9a70be44510fa03270e089 + metro-core: "npm:0.83.6" + checksum: 10/1e2ea06528a841d478419e780fbd5eca46f1633e7b04dba59f72afa706ad74160da97d665273d6c2365eb73f3b95049b4cd1068a5594e26728941490ac13e9cf languageName: node linkType: hard @@ -18018,6 +20475,22 @@ __metadata: languageName: node linkType: hard +"metro-config@npm:0.83.6, metro-config@npm:^0.83.6": + version: 0.83.6 + resolution: "metro-config@npm:0.83.6" + dependencies: + connect: "npm:^3.6.5" + flow-enums-runtime: "npm:^0.0.6" + jest-validate: "npm:^29.7.0" + metro: "npm:0.83.6" + metro-cache: "npm:0.83.6" + metro-core: "npm:0.83.6" + metro-runtime: "npm:0.83.6" + yaml: "npm:^2.6.1" + checksum: 10/507b68531cf14f62827263252b10a100ab7296e13bb7dddb60a8d9d221f4d003fe704d95b59f5f0fd1701d11de453fcdf7cbf7108a1c3c0abb8ea6d1563a4533 + languageName: node + linkType: hard + "metro-core@npm:0.81.5, metro-core@npm:^0.81.3": version: 0.81.5 resolution: "metro-core@npm:0.81.5" @@ -18051,6 +20524,17 @@ __metadata: languageName: node linkType: hard +"metro-core@npm:0.83.6, metro-core@npm:^0.83.6": + version: 0.83.6 + resolution: "metro-core@npm:0.83.6" + dependencies: + flow-enums-runtime: "npm:^0.0.6" + lodash.throttle: "npm:^4.1.1" + metro-resolver: "npm:0.83.6" + checksum: 10/6ea03c09f7f894dab0f316c2238e3aa6022c2b88b84c8e6f96c66713ebf1ff02f75c2468db08bb39a7e68701e71a2c2fbd1a74600009be48d6e826202a710820 + languageName: node + linkType: hard + "metro-file-map@npm:0.81.5": version: 0.81.5 resolution: "metro-file-map@npm:0.81.5" @@ -18102,6 +20586,23 @@ __metadata: languageName: node linkType: hard +"metro-file-map@npm:0.83.6": + version: 0.83.6 + resolution: "metro-file-map@npm:0.83.6" + dependencies: + debug: "npm:^4.4.0" + fb-watchman: "npm:^2.0.0" + flow-enums-runtime: "npm:^0.0.6" + graceful-fs: "npm:^4.2.4" + invariant: "npm:^2.2.4" + jest-worker: "npm:^29.7.0" + micromatch: "npm:^4.0.4" + nullthrows: "npm:^1.1.1" + walker: "npm:^1.0.7" + checksum: 10/5f6d74dd44f22126dd586c0f01e3e7d01f2c338bdf53d1ac984767e42c502ae3dbdfb52d550985aa58776a80dafed2e1fa5b144196dd9af27e0cdc08cf912646 + languageName: node + linkType: hard + "metro-minify-terser@npm:0.81.5": version: 0.81.5 resolution: "metro-minify-terser@npm:0.81.5" @@ -18132,6 +20633,16 @@ __metadata: languageName: node linkType: hard +"metro-minify-terser@npm:0.83.6": + version: 0.83.6 + resolution: "metro-minify-terser@npm:0.83.6" + dependencies: + flow-enums-runtime: "npm:^0.0.6" + terser: "npm:^5.15.0" + checksum: 10/36773b9127e2e99b70f7d04d03b3f50d3fec2af938088521b36ece4134d9acf23a25c95c90b9c64025d2519eeef7eb93061ff0c9e00ee2bdd25f756c67561138 + languageName: node + linkType: hard + "metro-resolver@npm:0.81.5": version: 0.81.5 resolution: "metro-resolver@npm:0.81.5" @@ -18159,6 +20670,15 @@ __metadata: languageName: node linkType: hard +"metro-resolver@npm:0.83.6": + version: 0.83.6 + resolution: "metro-resolver@npm:0.83.6" + dependencies: + flow-enums-runtime: "npm:^0.0.6" + checksum: 10/fad9c8d851d529dd6520727278283e725e4ad35570beb98679481d1b1ede6d10a48c1f79aa403690f321ff8ba12399e7b1b2ebe7862d07d159e5204375a62aa0 + languageName: node + linkType: hard + "metro-runtime@npm:0.81.5, metro-runtime@npm:^0.81.3": version: 0.81.5 resolution: "metro-runtime@npm:0.81.5" @@ -18189,6 +20709,16 @@ __metadata: languageName: node linkType: hard +"metro-runtime@npm:0.83.6, metro-runtime@npm:^0.83.6": + version: 0.83.6 + resolution: "metro-runtime@npm:0.83.6" + dependencies: + "@babel/runtime": "npm:^7.25.0" + flow-enums-runtime: "npm:^0.0.6" + checksum: 10/1a9fde73df3d8d52e7c015011a9c74fbf27aa67ebca44cce1bf12fb56b9af2d29fc8b6d5030de6a58bbb1a2797fbe1c7c8426020ac6787a273aef56ce55d6ff2 + languageName: node + linkType: hard + "metro-source-map@npm:0.81.5, metro-source-map@npm:^0.81.3": version: 0.81.5 resolution: "metro-source-map@npm:0.81.5" @@ -18243,6 +20773,23 @@ __metadata: languageName: node linkType: hard +"metro-source-map@npm:0.83.6, metro-source-map@npm:^0.83.6": + version: 0.83.6 + resolution: "metro-source-map@npm:0.83.6" + dependencies: + "@babel/traverse": "npm:^7.29.0" + "@babel/types": "npm:^7.29.0" + flow-enums-runtime: "npm:^0.0.6" + invariant: "npm:^2.2.4" + metro-symbolicate: "npm:0.83.6" + nullthrows: "npm:^1.1.1" + ob1: "npm:0.83.6" + source-map: "npm:^0.5.6" + vlq: "npm:^1.0.0" + checksum: 10/983219848f04083f10a4374400d76a124aa364056f7b7e428ffae4ebda8c3867614c9866309d633ef67e1fba92f52f866de1cfe86b8e9cc29873f92186a4f58f + languageName: node + linkType: hard + "metro-symbolicate@npm:0.81.5": version: 0.81.5 resolution: "metro-symbolicate@npm:0.81.5" @@ -18291,6 +20838,22 @@ __metadata: languageName: node linkType: hard +"metro-symbolicate@npm:0.83.6": + version: 0.83.6 + resolution: "metro-symbolicate@npm:0.83.6" + dependencies: + flow-enums-runtime: "npm:^0.0.6" + invariant: "npm:^2.2.4" + metro-source-map: "npm:0.83.6" + nullthrows: "npm:^1.1.1" + source-map: "npm:^0.5.6" + vlq: "npm:^1.0.0" + bin: + metro-symbolicate: src/index.js + checksum: 10/a94325c1893312671091eac90ea4419d4b555d0a5f163524c8a7f7eabf4219508944dee5107ae4c519ef8266525632a54e9557c0142d94b2097378c7580a9108 + languageName: node + linkType: hard + "metro-transform-plugins@npm:0.81.5": version: 0.81.5 resolution: "metro-transform-plugins@npm:0.81.5" @@ -18333,6 +20896,20 @@ __metadata: languageName: node linkType: hard +"metro-transform-plugins@npm:0.83.6": + version: 0.83.6 + resolution: "metro-transform-plugins@npm:0.83.6" + dependencies: + "@babel/core": "npm:^7.25.2" + "@babel/generator": "npm:^7.29.1" + "@babel/template": "npm:^7.28.6" + "@babel/traverse": "npm:^7.29.0" + flow-enums-runtime: "npm:^0.0.6" + nullthrows: "npm:^1.1.1" + checksum: 10/257f6fffa63e2d436033fb4d0f17e7200b43bad1dcc8da7ff7a5fed6cd00a60a14e5687a6330522773ffbc5c90f81c038e57105ee80313100fbcd6945275a687 + languageName: node + linkType: hard + "metro-transform-worker@npm:0.81.5": version: 0.81.5 resolution: "metro-transform-worker@npm:0.81.5" @@ -18396,6 +20973,27 @@ __metadata: languageName: node linkType: hard +"metro-transform-worker@npm:0.83.6": + version: 0.83.6 + resolution: "metro-transform-worker@npm:0.83.6" + dependencies: + "@babel/core": "npm:^7.25.2" + "@babel/generator": "npm:^7.29.1" + "@babel/parser": "npm:^7.29.0" + "@babel/types": "npm:^7.29.0" + flow-enums-runtime: "npm:^0.0.6" + metro: "npm:0.83.6" + metro-babel-transformer: "npm:0.83.6" + metro-cache: "npm:0.83.6" + metro-cache-key: "npm:0.83.6" + metro-minify-terser: "npm:0.83.6" + metro-source-map: "npm:0.83.6" + metro-transform-plugins: "npm:0.83.6" + nullthrows: "npm:^1.1.1" + checksum: 10/0d8c59fef2a880f060b59fbda0568214bc3290c5e1795a759404e53e97b1ec7b71e55b89a2e25e44337ee49a4e7f0ed1a7c7d788a203ecad48b77fabd8023331 + languageName: node + linkType: hard + "metro@npm:0.81.5, metro@npm:^0.81.3": version: 0.81.5 resolution: "metro@npm:0.81.5" @@ -18546,6 +21144,56 @@ __metadata: languageName: node linkType: hard +"metro@npm:0.83.6, metro@npm:^0.83.6": + version: 0.83.6 + resolution: "metro@npm:0.83.6" + dependencies: + "@babel/code-frame": "npm:^7.29.0" + "@babel/core": "npm:^7.25.2" + "@babel/generator": "npm:^7.29.1" + "@babel/parser": "npm:^7.29.0" + "@babel/template": "npm:^7.28.6" + "@babel/traverse": "npm:^7.29.0" + "@babel/types": "npm:^7.29.0" + accepts: "npm:^2.0.0" + chalk: "npm:^4.0.0" + ci-info: "npm:^2.0.0" + connect: "npm:^3.6.5" + debug: "npm:^4.4.0" + error-stack-parser: "npm:^2.0.6" + flow-enums-runtime: "npm:^0.0.6" + graceful-fs: "npm:^4.2.4" + hermes-parser: "npm:0.35.0" + image-size: "npm:^1.0.2" + invariant: "npm:^2.2.4" + jest-worker: "npm:^29.7.0" + jsc-safe-url: "npm:^0.2.2" + lodash.throttle: "npm:^4.1.1" + metro-babel-transformer: "npm:0.83.6" + metro-cache: "npm:0.83.6" + metro-cache-key: "npm:0.83.6" + metro-config: "npm:0.83.6" + metro-core: "npm:0.83.6" + metro-file-map: "npm:0.83.6" + metro-resolver: "npm:0.83.6" + metro-runtime: "npm:0.83.6" + metro-source-map: "npm:0.83.6" + metro-symbolicate: "npm:0.83.6" + metro-transform-plugins: "npm:0.83.6" + metro-transform-worker: "npm:0.83.6" + mime-types: "npm:^3.0.1" + nullthrows: "npm:^1.1.1" + serialize-error: "npm:^2.1.0" + source-map: "npm:^0.5.6" + throat: "npm:^5.0.0" + ws: "npm:^7.5.10" + yargs: "npm:^17.6.2" + bin: + metro: src/cli.js + checksum: 10/37b97fb2b99fbb2c9d347664d663f64a54219650c0e59e1c12a95e938c33557795c6de26a95ea890239e3d70efd287b815727ce1616aba317d17ec8450c650a4 + languageName: node + linkType: hard + "micromark-core-commonmark@npm:^1.0.1": version: 1.1.0 resolution: "micromark-core-commonmark@npm:1.1.0" @@ -19273,7 +21921,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.1.5": +"minimatch@npm:^3.0.5, minimatch@npm:^3.1.5": version: 3.1.5 resolution: "minimatch@npm:3.1.5" dependencies: @@ -19644,6 +22292,13 @@ __metadata: languageName: node linkType: hard +"multitars@npm:^1.0.0": + version: 1.0.0 + resolution: "multitars@npm:1.0.0" + checksum: 10/acb10b29e81f2eba51f98c2296277c5b8be58fbfb0fdd833b5497c09f000b1d7d27504c00a96ba603d0a1d3bf3f34b8aa55bb70c45bfd923b6eb223bfb65b21d + languageName: node + linkType: hard + "mute-stream@npm:^2.0.0": version: 2.0.0 resolution: "mute-stream@npm:2.0.0" @@ -19977,6 +22632,13 @@ __metadata: languageName: node linkType: hard +"node-releases@npm:^2.0.36": + version: 2.0.38 + resolution: "node-releases@npm:2.0.38" + checksum: 10/0e6bba9d7e75dddf7d45c099f202ac7cb0eaeb363c36a34880c219e1697cf7369b6548e48f538490b706501ff9aa017e102adf3362184b9b64786de8377e0501 + languageName: node + linkType: hard + "node-stream-zip@npm:^1.9.1": version: 1.15.0 resolution: "node-stream-zip@npm:1.15.0" @@ -20432,6 +23094,15 @@ __metadata: languageName: node linkType: hard +"ob1@npm:0.83.6": + version: 0.83.6 + resolution: "ob1@npm:0.83.6" + dependencies: + flow-enums-runtime: "npm:^0.0.6" + checksum: 10/817cc83247508f6a17641924af5ccd793535e9376442ab8f9e59f7070cfb4830269540cacf79d036cdf087585810ced7dae3ea213c7f2dad73c2f198f1b676f9 + languageName: node + linkType: hard + "object-assign@npm:^4, object-assign@npm:^4.0.1, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" @@ -21616,6 +24287,15 @@ __metadata: languageName: node linkType: hard +"prettier@npm:2.8.8": + version: 2.8.8 + resolution: "prettier@npm:2.8.8" + bin: + prettier: bin-prettier.js + checksum: 10/00cdb6ab0281f98306cd1847425c24cbaaa48a5ff03633945ab4c701901b8e96ad558eb0777364ffc312f437af9b5a07d0f45346266e8245beaf6247b9c62b24 + languageName: node + linkType: hard + "prettier@npm:^3.8.3": version: 3.8.3 resolution: "prettier@npm:3.8.3" @@ -21648,7 +24328,7 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^29.7.0": +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0": version: 29.7.0 resolution: "pretty-format@npm:29.7.0" dependencies: @@ -21771,7 +24451,7 @@ __metadata: languageName: node linkType: hard -"prompts@npm:^2.3.2, prompts@npm:^2.4.2": +"prompts@npm:^2.0.1, prompts@npm:^2.3.2, prompts@npm:^2.4.2": version: 2.4.2 resolution: "prompts@npm:2.4.2" dependencies: @@ -21928,6 +24608,13 @@ __metadata: languageName: node linkType: hard +"pure-rand@npm:^6.0.0": + version: 6.1.0 + resolution: "pure-rand@npm:6.1.0" + checksum: 10/256aa4bcaf9297256f552914e03cbdb0039c8fe1db11fa1e6d3f80790e16e563eb0a859a1e61082a95e224fc0c608661839439f8ecc6a3db4e48d46d99216ee4 + languageName: node + linkType: hard + "pure-rand@npm:^7.0.0": version: 7.0.1 resolution: "pure-rand@npm:7.0.1" @@ -22094,6 +24781,13 @@ __metadata: languageName: node linkType: hard +"react-is@npm:^19.0.0": + version: 19.2.5 + resolution: "react-is@npm:19.2.5" + checksum: 10/b2e18d4efd39496474956684a3757c43b9102af56add174abf2a46a6c1441dbdfe5fa7d9e7d7ebb42f543ffc9c7941fc74eb1e2bfdbf08979ea9e2ccc36da600 + languageName: node + linkType: hard + "react-native-builder-bob@npm:^0.40.13": version: 0.40.18 resolution: "react-native-builder-bob@npm:0.40.18" @@ -22282,6 +24976,16 @@ __metadata: languageName: unknown linkType: soft +"react-native-is-edge-to-edge@npm:^1.2.1": + version: 1.3.1 + resolution: "react-native-is-edge-to-edge@npm:1.3.1" + peerDependencies: + react: "*" + react-native: "*" + checksum: 10/dc82d54e0bf8f89208a538bb0d14e4891af6efae27ed5b7b21be683a72c38c5219ab9be1ea9bd40aa1c905d481174e649d0b71aeceaa9946e6c707f251568282 + languageName: node + linkType: hard + "react-native-macos@npm:0.78.6": version: 0.78.6 resolution: "react-native-macos@npm:0.78.6" @@ -22469,6 +25173,57 @@ __metadata: languageName: node linkType: hard +"react-native@npm:0.83.6": + version: 0.83.6 + resolution: "react-native@npm:0.83.6" + dependencies: + "@jest/create-cache-key-function": "npm:^29.7.0" + "@react-native/assets-registry": "npm:0.83.6" + "@react-native/codegen": "npm:0.83.6" + "@react-native/community-cli-plugin": "npm:0.83.6" + "@react-native/gradle-plugin": "npm:0.83.6" + "@react-native/js-polyfills": "npm:0.83.6" + "@react-native/normalize-colors": "npm:0.83.6" + "@react-native/virtualized-lists": "npm:0.83.6" + abort-controller: "npm:^3.0.0" + anser: "npm:^1.4.9" + ansi-regex: "npm:^5.0.0" + babel-jest: "npm:^29.7.0" + babel-plugin-syntax-hermes-parser: "npm:0.32.0" + base64-js: "npm:^1.5.1" + commander: "npm:^12.0.0" + flow-enums-runtime: "npm:^0.0.6" + glob: "npm:^7.1.1" + hermes-compiler: "npm:0.14.1" + invariant: "npm:^2.2.4" + jest-environment-node: "npm:^29.7.0" + memoize-one: "npm:^5.0.0" + metro-runtime: "npm:^0.83.6" + metro-source-map: "npm:^0.83.6" + nullthrows: "npm:^1.1.1" + pretty-format: "npm:^29.7.0" + promise: "npm:^8.3.0" + react-devtools-core: "npm:^6.1.5" + react-refresh: "npm:^0.14.0" + regenerator-runtime: "npm:^0.13.2" + scheduler: "npm:0.27.0" + semver: "npm:^7.1.3" + stacktrace-parser: "npm:^0.1.10" + whatwg-fetch: "npm:^3.0.0" + ws: "npm:^7.5.10" + yargs: "npm:^17.6.2" + peerDependencies: + "@types/react": ^19.1.1 + react: ^19.2.0 + peerDependenciesMeta: + "@types/react": + optional: true + bin: + react-native: cli.js + checksum: 10/d57fc43d7a7c9e0e55efac941ebe6d5781f91d28db8f78eba822e74fe5decdc1f5a8f024b18d79dc08928e8dbc374469df1a910aa58f2241e2e7c637f1366f20 + languageName: node + linkType: hard + "react-native@npm:^0.80.1": version: 0.80.2 resolution: "react-native@npm:0.80.2" @@ -22527,6 +25282,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: "npm:^19.0.0" + scheduler: "npm:^0.25.0" + peerDependencies: + react: ^19.0.0 + checksum: 10/b95a90331e1dedeff2bbdcdc57b9cd1cd8d7cd620f9b29a4efd31a961c8e5b660fe55129ffc72f2bbf0c21fec34e6a498b9f07b6c65c22bf10ae87b68e124f91 + languageName: node + linkType: hard + "react@npm:19.0.0": version: 19.0.0 resolution: "react@npm:19.0.0" @@ -22534,6 +25301,13 @@ __metadata: languageName: node linkType: hard +"react@npm:19.2.0": + version: 19.2.0 + resolution: "react@npm:19.2.0" + checksum: 10/e13bcdb8e994c3cfa922743cb75ca8deb60531bf02f584d2d8dab940a8132ce8a2e6ef16f8ed7f372b4072e7a7eeff589b2812dabbedfa73e6e46201dac8a9d0 + languageName: node + linkType: hard + "read-cmd-shim@npm:4.0.0": version: 4.0.0 resolution: "read-cmd-shim@npm:4.0.0" @@ -23067,7 +25841,7 @@ __metadata: languageName: node linkType: hard -"resolve.exports@npm:2.0.3": +"resolve.exports@npm:2.0.3, resolve.exports@npm:^2.0.0": version: 2.0.3 resolution: "resolve.exports@npm:2.0.3" checksum: 10/536efee0f30a10fac8604e6cdc7844dbc3f4313568d09f06db4f7ed8a5b8aeb8585966fe975083d1f2dfbc87cf5f8bc7ab65a5c23385c14acbb535ca79f8398a @@ -23087,6 +25861,20 @@ __metadata: languageName: node linkType: hard +"resolve@npm:^1.20.0": + version: 1.22.12 + resolution: "resolve@npm:1.22.12" + dependencies: + es-errors: "npm:^1.3.0" + is-core-module: "npm:^2.16.1" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10/1d2a081e4b7198e2a70abd7bbbf8aea5380c2d074b6c870035aab50ebfb7312b6492b3588e752faef83a75147862a3d3e09b222bc9afd536804181fd3a515ef9 + languageName: node + linkType: hard + "resolve@npm:^2.0.0-next.5": version: 2.0.0-next.5 resolution: "resolve@npm:2.0.0-next.5" @@ -23113,6 +25901,20 @@ __metadata: languageName: node linkType: hard +"resolve@patch:resolve@npm%3A^1.20.0#optional!builtin": + version: 1.22.12 + resolution: "resolve@patch:resolve@npm%3A1.22.12#optional!builtin::version=1.22.12&hash=c3c19d" + dependencies: + es-errors: "npm:^1.3.0" + is-core-module: "npm:^2.16.1" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10/f80ad2c2b6820331cbe079198a184ffce322cfeca140065118066276bc08b03d5fa2c1ce652aeb584ec74050d1f656f46f034cc0dd9300452c5ab7866907f8c0 + languageName: node + linkType: hard + "resolve@patch:resolve@npm%3A^2.0.0-next.5#optional!builtin": version: 2.0.0-next.5 resolution: "resolve@patch:resolve@npm%3A2.0.0-next.5#optional!builtin::version=2.0.0-next.5&hash=c3c19d" @@ -23504,7 +26306,7 @@ __metadata: languageName: node linkType: hard -"scheduler@npm:0.25.0": +"scheduler@npm:0.25.0, scheduler@npm:^0.25.0": version: 0.25.0 resolution: "scheduler@npm:0.25.0" checksum: 10/e661e38503ab29a153429a99203fefa764f28b35c079719eb5efdd2c1c1086522f6653d8ffce388209682c23891a6d1d32fa6badf53c35fb5b9cd0c55ace42de @@ -23518,6 +26320,13 @@ __metadata: languageName: node linkType: hard +"scheduler@npm:0.27.0": + version: 0.27.0 + resolution: "scheduler@npm:0.27.0" + checksum: 10/eab3c3a8373195173e59c147224fc30dabe6dd453f248f5e610e8458512a5a2ee3a06465dc400ebfe6d35c9f5b7f3bb6b2e41c88c86fd177c25a73e7286a1e06 + languageName: node + linkType: hard + "selfsigned@npm:^2.4.1": version: 2.4.1 resolution: "selfsigned@npm:2.4.1" @@ -24392,7 +27201,7 @@ __metadata: languageName: node linkType: hard -"string-length@npm:^4.0.2": +"string-length@npm:^4.0.1, string-length@npm:^4.0.2": version: 4.0.2 resolution: "string-length@npm:4.0.2" dependencies: @@ -24402,6 +27211,13 @@ __metadata: languageName: node linkType: hard +"string-natural-compare@npm:^3.0.1": + version: 3.0.1 + resolution: "string-natural-compare@npm:3.0.1" + checksum: 10/bc1fd0ee196466489e121bbe11844094ddcdee5a687dca9dbb18ba2ace73b1f6c96c9b448df2dfed0879b781b6b12e329ca1c1fc0a86d70b00c7823b76109b1e + languageName: node + linkType: hard + "string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.0.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.2, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" @@ -24947,6 +27763,13 @@ __metadata: languageName: node linkType: hard +"text-table@npm:^0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: 10/4383b5baaeffa9bb4cda2ac33a4aa2e6d1f8aaf811848bf73513a9b88fd76372dc461f6fd6d2e9cb5100f48b473be32c6f95bd983509b7d92bb4d92c10747452 + languageName: node + linkType: hard + "thenify-all@npm:^1.0.0": version: 1.6.0 resolution: "thenify-all@npm:1.6.0" @@ -25138,6 +27961,15 @@ __metadata: languageName: node linkType: hard +"ts-api-utils@npm:^1.3.0": + version: 1.4.3 + resolution: "ts-api-utils@npm:1.4.3" + peerDependencies: + typescript: ">=4.2.0" + checksum: 10/713c51e7392323305bd4867422ba130fbf70873ef6edbf80ea6d7e9c8f41eeeb13e40e8e7fe7cd321d74e4864777329797077268c9f570464303a1723f1eed39 + languageName: node + linkType: hard + "ts-api-utils@npm:^2.5.0": version: 2.5.0 resolution: "ts-api-utils@npm:2.5.0" @@ -25236,6 +28068,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:^1.8.1": + version: 1.14.1 + resolution: "tslib@npm:1.14.1" + checksum: 10/7dbf34e6f55c6492637adb81b555af5e3b4f9cc6b998fb440dac82d3b42bdc91560a35a5fb75e20e24a076c651438234da6743d139e4feabf0783f3cdfe1dddb + 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.5.3": version: 2.8.1 resolution: "tslib@npm:2.8.1" @@ -25250,6 +28089,17 @@ __metadata: languageName: node linkType: hard +"tsutils@npm:^3.21.0": + version: 3.21.0 + resolution: "tsutils@npm:3.21.0" + dependencies: + tslib: "npm:^1.8.1" + peerDependencies: + typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + checksum: 10/ea036bec1dd024e309939ffd49fda7a351c0e87a1b8eb049570dd119d447250e2c56e0e6c00554e8205760e7417793fdebff752a46e573fbe07d4f375502a5b2 + languageName: node + linkType: hard + "tuf-js@npm:^4.0.0": version: 4.0.0 resolution: "tuf-js@npm:4.0.0" @@ -25469,7 +28319,17 @@ __metadata: languageName: node linkType: hard -"typescript@npm:>=3 < 6, typescript@npm:^5.9.3": +"typescript@npm:5.0.4": + version: 5.0.4 + resolution: "typescript@npm:5.0.4" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10/e5c3adff09a138c0e27d13b5bb2b106ca17a162ffa945d66161669c265c65436309c5817358a2af1abb69d07440d358f8c1ed7cbb63a2c8680e19b9c268fe4ef + languageName: node + linkType: hard + +"typescript@npm:>=3 < 6, typescript@npm:^5.9.3, typescript@npm:~5.9.2": version: 5.9.3 resolution: "typescript@npm:5.9.3" bin: @@ -25479,7 +28339,17 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@npm%3A>=3 < 6#optional!builtin, typescript@patch:typescript@npm%3A^5.9.3#optional!builtin": +"typescript@patch:typescript@npm%3A5.0.4#optional!builtin": + version: 5.0.4 + resolution: "typescript@patch:typescript@npm%3A5.0.4#optional!builtin::version=5.0.4&hash=b5f058" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10/b1b62606c7ec75efe9edc61e195d9e69f0440cac1bcd111dfa864f839255f0d9a7b79869f2823559c608826fc0c9894d2917ae4063e0aa06f5d0784a35170497 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A>=3 < 6#optional!builtin, typescript@patch:typescript@npm%3A^5.9.3#optional!builtin, typescript@patch:typescript@npm%3A~5.9.2#optional!builtin": version: 5.9.3 resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" bin: @@ -26041,6 +28911,20 @@ __metadata: languageName: node linkType: hard +"update-browserslist-db@npm:^1.2.3": + version: 1.2.3 + resolution: "update-browserslist-db@npm:1.2.3" + dependencies: + escalade: "npm:^3.2.0" + picocolors: "npm:^1.1.1" + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 10/059f774300efb4b084a49293143c511f3ae946d40397b5c30914e900cd5691a12b8e61b41dd54ed73d3b56c8204165a0333107dd784ccf8f8c81790bcc423175 + languageName: node + linkType: hard + "update-notifier-cjs@npm:^5.1.6": version: 5.1.7 resolution: "update-notifier-cjs@npm:5.1.7" @@ -27012,7 +29896,7 @@ __metadata: languageName: node linkType: hard -"yargs@npm:17.7.2, yargs@npm:^17.0.0, yargs@npm:^17.5.1, yargs@npm:^17.6.2, yargs@npm:^17.7.2": +"yargs@npm:17.7.2, yargs@npm:^17.0.0, yargs@npm:^17.3.1, yargs@npm:^17.5.1, yargs@npm:^17.6.2, yargs@npm:^17.7.2": version: 17.7.2 resolution: "yargs@npm:17.7.2" dependencies: