🔥 A well-tested feature-rich modular Firebase implementation for React Native. Supports both iOS & Android platforms for all Firebase services.
This report summarizes scanner evidence for invertase/react-native-firebase, a TypeScript project with 12,315 GitHub stars. SynthScan examined 260,936 lines of code across 1561 source files, recording 586 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 11.8 (Moderate pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 357 finding(s).
Are imports declared and package/API names verified? 229 finding(s).
Are wrappers, guards, and repeated structures necessary? 216 finding(s).
Which changes need focused human review? 586 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 586 distinct pattern matches across 9 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL⚡ | packages/database/e2e/query/query.e2e.js | 23 | queryBefore._modifiers._modifiers.length.should.equal(0); | CODE |
| CRITICAL⚡ | packages/database/e2e/query/query.e2e.js | 26 | queryBefore._modifiers._modifiers.length.should.equal(0); | CODE |
| CRITICAL⚡ | packages/database/e2e/query/query.e2e.js | 27 | queryAfter._modifiers._modifiers.length.should.equal(1); | CODE |
| CRITICAL⚡ | packages/database/e2e/query/query.e2e.js | 30 | queryAfter._modifiers._modifiers.length.should.equal(1); | CODE |
| CRITICAL⚡ | packages/database/e2e/query/query.e2e.js | 31 | queryAfterAfter._modifiers._modifiers.length.should.equal(3); // adds startAt endAt internally | CODE |
| CRITICAL⚡ | packages/app/e2e/utilsStatics.e2e.js | 26 | FilePath.MAIN_BUNDLE.should.be.a.String(); | CODE |
| CRITICAL⚡ | packages/app/e2e/utilsStatics.e2e.js | 31 | FilePath.CACHES_DIRECTORY.should.be.a.String(); | CODE |
| CRITICAL⚡ | packages/app/e2e/utilsStatics.e2e.js | 32 | FilePath.DOCUMENT_DIRECTORY.should.be.a.String(); | CODE |
| CRITICAL⚡ | packages/app/e2e/utilsStatics.e2e.js | 35 | FilePath.EXTERNAL_DIRECTORY.should.be.a.String(); | CODE |
| CRITICAL⚡ | packages/app/e2e/utilsStatics.e2e.js | 41 | FilePath.EXTERNAL_STORAGE_DIRECTORY.should.be.a.String(); | CODE |
| CRITICAL⚡ | packages/app/e2e/utilsStatics.e2e.js | 46 | FilePath.TEMP_DIRECTORY.should.be.a.String(); | CODE |
| CRITICAL⚡ | packages/app/e2e/utilsStatics.e2e.js | 47 | FilePath.LIBRARY_DIRECTORY.should.be.a.String(); | CODE |
| CRITICAL⚡ | packages/app/e2e/utilsStatics.e2e.js | 48 | FilePath.PICTURES_DIRECTORY.should.be.a.String(); | CODE |
| CRITICAL⚡ | packages/app/e2e/utilsStatics.e2e.js | 49 | FilePath.MOVIES_DIRECTORY.should.be.a.String(); | CODE |
| CRITICAL | packages/app/e2e/app.e2e.js | 52 | modular.SDK_VERSION.should.be.a.String(); | CODE |
| CRITICAL | packages/app/e2e/app.e2e.js | 172 | config.authDomain.should.be.a.String(); | CODE |
| CRITICAL⚡ | packages/app/e2e/app.constants.e2e.js | 44 | app.appConfig.should.be.a.Object(); | CODE |
| CRITICAL⚡ | packages/app/e2e/app.constants.e2e.js | 45 | app.appConfig.name.should.be.a.String(); | CODE |
| CRITICAL⚡ | packages/app/e2e/app.constants.e2e.js | 46 | app.options.should.be.a.Object(); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/Pipeline.e2e.js | 183 | data.createdAt.constructor.name.should.equal('Timestamp'); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/Pipeline.e2e.js | 189 | data.nested.updatedAt.constructor.name.should.equal('Timestamp'); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/Pipeline.e2e.js | 190 | data.nested.updatedAt.seconds.should.equal(updatedAt.seconds); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/Pipeline.e2e.js | 191 | data.nested.updatedAt.nanoseconds.should.equal(updatedAt.nanoseconds); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/Pipeline.e2e.js | 192 | data.nested.linkedRef.path.should.equal(linkedRef.path); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/Pipeline.e2e.js | 2649 | data.nextDay.constructor.name.should.equal('Timestamp'); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/Pipeline.e2e.js | 2651 | data.prevHour.constructor.name.should.equal('Timestamp'); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/Pipeline.e2e.js | 2653 | data.dayBucket.constructor.name.should.equal('Timestamp'); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/Pipeline.e2e.js | 2654 | data.fromEpochMs.constructor.name.should.equal('Timestamp'); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/Pipeline.e2e.js | 2694 | data.now.constructor.name.should.equal('Timestamp'); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/Pipeline.e2e.js | 2696 | data.receiverNow.constructor.name.should.equal('Timestamp'); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/Pipeline.e2e.js | 2699 | data.fromSec.constructor.name.should.equal('Timestamp'); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/Pipeline.e2e.js | 2701 | data.fromMicros.constructor.name.should.equal('Timestamp'); | CODE |
| CRITICAL | packages/firestore/e2e/Pipeline.e2e.js | 1676 | data.randomValue.should.be.a.Number(); | CODE |
| CRITICAL | packages/firestore/e2e/Pipeline.e2e.js | 2269 | data.firstScore.should.be.a.Number(); | CODE |
| CRITICAL | packages/firestore/e2e/Pipeline.e2e.js | 2270 | data.lastScore.should.be.a.Number(); | CODE |
| CRITICAL | packages/firestore/e2e/Pipeline.e2e.js | 2338 | eng.firstName.should.be.a.String(); | CODE |
| CRITICAL | packages/firestore/e2e/Pipeline.e2e.js | 2339 | eng.lastName.should.be.a.String(); | CODE |
| CRITICAL | packages/firestore/e2e/Pipeline.e2e.js | 2439 | data.globalDayBucket.constructor.name.should.equal('Timestamp'); | CODE |
| CRITICAL | packages/firestore/e2e/Pipeline.e2e.js | 2440 | data.fluentDayBucket.constructor.name.should.equal('Timestamp'); | CODE |
| CRITICAL | packages/firestore/e2e/Pipeline.e2e.js | 2728 | data.numType.should.be.a.String(); | CODE |
| CRITICAL | packages/firestore/e2e/Pipeline.e2e.js | 2729 | data.collId.should.be.a.String(); | CODE |
| CRITICAL | packages/firestore/e2e/Pipeline.e2e.js | 3124 | snapshot.results.length.should.be.greaterThan(0); | CODE |
| CRITICAL | packages/firestore/e2e/Pipeline.e2e.js | 4132 | snapshot.results.length.should.be.greaterThan(0); | CODE |
| CRITICAL | packages/firestore/e2e/Pipeline.e2e.js | 4133 | snapshot.results.length.should.be.lessThanOrEqual(10); | CODE |
| CRITICAL | packages/firestore/e2e/SnapshotMetadata.e2e.js | 34 | colRef.metadata.fromCache.should.be.Boolean(); | CODE |
| CRITICAL | packages/firestore/e2e/SnapshotMetadata.e2e.js | 35 | docRef.metadata.fromCache.should.be.Boolean(); | CODE |
| CRITICAL | packages/firestore/e2e/SnapshotMetadata.e2e.js | 46 | colRef.metadata.hasPendingWrites.should.be.Boolean(); | CODE |
| CRITICAL | packages/firestore/e2e/SnapshotMetadata.e2e.js | 47 | docRef.metadata.hasPendingWrites.should.be.Boolean(); | CODE |
| CRITICAL | packages/firestore/e2e/FieldValue.e2e.js | 125 | snapshot.data().foo.seconds.should.be.a.Number(); | CODE |
| CRITICAL | packages/firestore/e2e/FieldValue.e2e.js | 137 | snapshot1.data().foo.nanoseconds.should.be.a.Number(); | CODE |
| CRITICAL | packages/firestore/e2e/FieldValue.e2e.js | 142 | snapshot2.data().foo.nanoseconds.should.be.a.Number(); | CODE |
| CRITICAL | packages/firestore/e2e/DocumentChange.e2e.js | 41 | docChange.doc.constructor.name.should.eql('DocumentSnapshot'); | CODE |
| CRITICAL | packages/firestore/e2e/QuerySnapshot.e2e.js | 51 | snapshot.docs.length.should.be.aboveOrEqual(1); | CODE |
| CRITICAL | packages/firestore/e2e/QuerySnapshot.e2e.js | 76 | snapshot.metadata.constructor.name.should.eql('SnapshotMetadata'); | CODE |
| CRITICAL | packages/firestore/e2e/QuerySnapshot.e2e.js | 83 | snapshot.query.constructor.name.should.eql('CollectionReference'); | CODE |
| CRITICAL | packages/firestore/e2e/withConverter.e2e.js | 69 | post.should.not.be.an.instanceof(Post); | CODE |
| CRITICAL | packages/firestore/e2e/withConverter.e2e.js | 384 | data.createdAt.should.be.an.instanceOf(Timestamp); | CODE |
| CRITICAL | packages/firestore/e2e/withConverter.e2e.js | 385 | data.updatedAt.should.be.an.instanceOf(Timestamp); | CODE |
| CRITICAL | …es/firestore/e2e/CollectionReference/properties.e2e.js | 29 | instance.firestore.app.name.should.eql('[DEFAULT]'); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/DocumentSnapshot/data.e2e.js | 93 | data.string.should.be.a.String(); | CODE |
| 158 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/.detoxrc.js | 12 | function androidReversePortsFromEnv() { | CODE |
| LOW | tests/app.js | 272 | after(async function flushNativeCoverageProfile() { | CODE |
| LOW | tests/local-tests/firestore/document-reference.tsx | 6 | export function DocumentReferenceTestComponent() { | CODE |
| LOW | tests/local-tests/firestore/onSnapshotInSync.js | 31 | export function FirestoreOnSnapshotInSyncTest() { | CODE |
| LOW | tests/local-tests/auth/nativeAppleSignIn.ts | 36 | export function isNativeAppleSignInAvailable(): boolean { | CODE |
| LOW | tests/local-tests/auth/nativeAppleSignIn.ts | 40 | export async function performAppleSignInRequest(): Promise<NativeAppleSignInResult> { | CODE |
| LOW | tests/local-tests/auth/apple-full-name.tsx | 70 | export function AppleFullNameTestComponent() { | CODE |
| LOW | tests/local-tests/functions/https-callable.tsx | 14 | export function HttpsCallableTestComponent(): React.JSX.Element { | CODE |
| LOW | tests/local-tests/functions/streaming-callable.tsx | 14 | export function StreamingCallableTestComponent(): React.JSX.Element { | CODE |
| LOW | tests/scripts/capture-native-coverage-baseline.js | 195 | function parseJacocoPackagesMetrics(xmlPath) { | CODE |
| LOW | tests/scripts/pull-native-coverage.js | 53 | function androidCoverageFileExists(deviceId) { | CODE |
| LOW | tests/scripts/pull-native-coverage.js | 94 | async function pullAndroidCoverageWithRetry(deviceId, options = {}) { | CODE |
| LOW | tests/scripts/pull-native-coverage.js | 181 | function deleteProcessedAndroidCoverageEc(ecFilePath) { | CODE |
| LOW | tests/e2e/firebase.test.js | 54 | function logCloudPressureAnalysisPointer(context) { | CODE |
| LOW | tests/e2e/firebase.test.js | 63 | function platformFromDetoxConfigurationName(name) { | CODE |
| LOW | tests/e2e/firebase.test.js | 118 | function staticPrefixedJetControlPort(pk) { | CODE |
| LOW | tests/e2e/firebase.test.js | 234 | function resolveDetoxConfigurationName() { | CODE |
| LOW | tests/e2e/firebase.test.js | 423 | function resolveAndroidEmulatorPort(serial) { | CODE |
| LOW | tests/e2e/firebase.test.js | 586 | function forceStopAndroidTestingApps(label) { | CODE |
| LOW | tests/e2e/firebase.test.js | 604 | async function waitForAndroidInstrumentationStopped(label, timeoutMs = 30000) { | CODE |
| LOW | tests/e2e/firebase.test.js | 634 | function clearStaleMacOsTestingForSharedJetPort(label) { | CODE |
| LOW | tests/e2e/firebase.test.js | 660 | async function ensureAndroidJetHostClear(label = 'android-jet-host-clear') { | CODE |
| LOW | tests/e2e/firebase.test.js | 682 | async function waitForColdBootEmulatorRegistered(serial, avdName, timeoutMs) { | CODE |
| LOW | tests/e2e/firebase.test.js | 762 | async function waitForAndroidEmulatorReady() { | CODE |
| LOW⚡ | tests/e2e/firebase.test.js | 1029 | function hasJetReconnectDesyncSignal(output) { | CODE |
| LOW⚡ | tests/e2e/firebase.test.js | 1039 | function isJetReconnectDesyncFailure(output) { | CODE |
| LOW⚡ | tests/e2e/firebase.test.js | 1043 | function isRetryableJetSessionFailure(output) { | CODE |
| LOW | tests/e2e/firebase.test.js | 1071 | function isRetryableCloudQuotaFailure(jetOutput) { | CODE |
| LOW | tests/e2e/firebase.test.js | 1294 | async function awaitJetExitWithStallGuard(jetSession, stallMs = jetAwaitExitStallTimeoutMs()) { | CODE |
| LOW | tests/e2e/androidReadyPolicy.js | 13 | function shouldSkipAndroidSettleAndLoad(isCI) { | CODE |
| LOW⚡ | tests/e2e/detoxLatencyPolicy.js | 44 | function androidAdbSerialAppearTimeoutMs() { | CODE |
| LOW⚡ | tests/e2e/detoxLatencyPolicy.js | 53 | function androidAdbInstallTimeoutMs() { | CODE |
| LOW⚡ | tests/e2e/detoxLatencyPolicy.js | 58 | function jetAwaitExitStallTimeoutMs() { | CODE |
| LOW⚡ | tests/e2e/androidAdbRange.js | 16 | function isAdbEmulatorConsolePortInRange(port) { | CODE |
| LOW⚡ | tests/e2e/androidAdbRange.js | 24 | function emulatorConsolePortOutOfAdbRange(serial) { | CODE |
| LOW⚡ | tests/e2e/androidAdbRange.js | 30 | function shouldFailFastQemuWithoutAdb(serial, deviceState) { | CODE |
| LOW | tests/e2e/androidAdbRange.js | 75 | function shouldColdBootAndroidOnLaunchRetry(messageOrErr) { | CODE |
| LOW | test-expo/app/phone-number-verification.tsx | 7 | export default function PhoneNumberVerificationScreen() { | CODE |
| LOW | test-expo/app/app-check.tsx | 12 | function getOrInitializeAppCheck(): AppCheck { | CODE |
| LOW | scripts/version.js | 54 | function resolveTestsMacosFmtPodspecPath(candidates = TESTS_MACOS_FMT_PODSPEC_CANDIDATES) { | CODE |
| LOW | scripts/version.js | 65 | function assertTestsMacosFmtAtLeastFloor() { | CODE |
| LOW | scripts/jest-ai-mocks-global-setup.js | 59 | function getArgvTestPathIgnorePatterns() { | CODE |
| LOW | packages/database/lib/index.ts | 291 | export function setPersistenceCacheSizeBytes(db: Database, bytes: number): Promise<void> { | CODE |
| LOW | packages/database/lib/web/RNFBDatabaseModule.ts | 81 | function snapshotWithPreviousChildToObject( | CODE |
| LOW | packages/database/lib/web/RNFBDatabaseModule.ts | 106 | function getCachedDatabaseInstance(appName: string, dbURL: string): WebDatabase { | CODE |
| LOW | packages/database/lib/web/RNFBDatabaseModule.ts | 123 | function getCachedOnDisconnectInstance(refValue: WebDatabaseReference): WebOnDisconnect { | CODE |
| LOW | packages/database/e2e/helpers.js | 114 | exports.waitForNativeDbListenerReady = async function waitForNativeDbListenerReady( | CODE |
| LOW | packages/database/e2e/helpers.js | 131 | exports.waitForNativeDbListenerRegistration = async function waitForNativeDbListenerRegistration( | CODE |
| LOW | packages/crashlytics/lib/index.ts | 186 | export function didCrashOnPreviousExecution(crashlytics: Crashlytics): Promise<boolean> { | CODE |
| LOW | packages/crashlytics/lib/index.ts | 221 | export function setCrashlyticsCollectionEnabled( | CODE |
| LOW | packages/app/firebase_spm.rb | 178 | def rnfirebase_build_setting_list(current) | CODE |
| LOW | packages/app/firebase_spm.rb | 194 | def rnfirebase_spm_package_requirement(version) | CODE |
| LOW | packages/app/firebase_spm.rb | 350 | def rnfirebase_add_spm_embed_phase(installer) | CODE |
| LOW | packages/app/firebase_spm.rb | 601 | def rnfirebase_run_spm_user_project_hooks(installer) | CODE |
| LOW | packages/app/firebase_spm.rb | 873 | def rnfirebase_add_spm_core_to_app_target(installer) | CODE |
| LOW | packages/app/firebase_spm.rb | 1002 | def rnfirebase_remove_spm_core_from_app_target(installer) | CODE |
| LOW | packages/app/firebase_spm.rb | 1088 | def rnfirebase_fix_spm_archive_signature_collision(installer) | CODE |
| LOW | packages/app/firebase_spm.rb | 1177 | def rnfirebase_apply_spm_build_settings(installer) | CODE |
| LOW | packages/app/__tests__/harnessCommittedDefaults.test.ts | 111 | function listTrackedHarnessTestSources(): string[] { | CODE |
| LOW | packages/app/__tests__/expoPluginPackageExports.test.ts | 32 | function discoverPackageNamesWithAppPlugin(): string[] { | CODE |
| 156 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | jest.config.js | 1 | module.exports = { | COMMENT |
| LOW | tests/globals.js | 21 | import shouldMatchers from 'should'; | COMMENT |
| LOW | tests/local-tests/auth/gcloud-enable-totp-in-project.sh | 1 | #!/bin/bash | COMMENT |
| LOW | test-expo/src/keepNativeGraph.ts | 1 | import { getApp } from '@react-native-firebase/app'; | COMMENT |
| LOW | scripts/fetch_ai_mock_responses.ts | 1 | // Copyright (c) 2016-present Invertase Limited & Contributors | COMMENT |
| LOW | scripts/update-firebase-sdk-versions.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/run-full-tests.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/jest-ai-mocks-global-setup.js | 1 | // Copyright (c) 2016-present Invertase Limited & Contributors | COMMENT |
| LOW | scripts/repro-android-build-flake.sh | 1 | #!/bin/bash | COMMENT |
| LOW | scripts/e2e/export-slot-env.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/e2e/check-e2e-resources.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/e2e/start-packager.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/e2e/release-e2e-resources.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/e2e/lib/e2e-slot-env.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/e2e/lib/e2e-startup-failfast.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/e2e/lib/e2e-resource-env.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | …ckages/database/ios/RNFBDatabase/RNFBDatabaseModule.mm | 21 | #import "RNFBDatabaseModule.h" | COMMENT |
| LOW | packages/crashlytics/ios_config.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | …ashlytics/ios/RNFBCrashlytics/RNFBCrashlyticsModule.mm | 21 | #import <React/RCTConvert.h> | COMMENT |
| LOW | …tics/ios/RNFBCrashlytics/RNFBCrashlyticsInitProvider.m | 21 | #elif __has_include(<FirebaseCore/FirebaseCore.h>) | COMMENT |
| LOW | …tics/ios/RNFBCrashlytics/RNFBCrashlyticsInitProvider.h | 21 | // RNFBCrashlyticsModule.mm (Objective-C++), which only ever calls the three | COMMENT |
| LOW | packages/app/firebase_spm.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | packages/app/firebase_spm.rb | 41 | absl | COMMENT |
| LOW | packages/app/firebase_spm.rb | 61 | # source of truth) the first time it's needed, then cached for the rest | COMMENT |
| LOW | packages/app/firebase_spm.rb | 81 | # resolved with. Called once, from `firebase_dependency` itself, the | COMMENT |
| LOW | packages/app/firebase_spm.rb | 141 | # | COMMENT |
| LOW | packages/app/firebase_spm.rb | 161 | # Returns true only when `$RNFirebaseDisableSPM` has been explicitly set to `true`. | COMMENT |
| LOW | packages/app/firebase_spm.rb | 281 | # includes every pod .framework (dynamic Firebase SPM products and static | COMMENT |
| LOW | packages/app/firebase_spm.rb | 321 | changed | COMMENT |
| LOW | packages/app/firebase_spm.rb | 381 | # runs. "Needs it" uses the exact same target-selection criterion | COMMENT |
| LOW | packages/app/firebase_spm.rb | 421 | end | COMMENT |
| LOW | packages/app/firebase_spm.rb | 441 | # `pod install` prints as a plain, readable message with no Ruby backtrace -- | COMMENT |
| LOW | packages/app/firebase_spm.rb | 661 | end | COMMENT |
| LOW | packages/app/firebase_spm.rb | 681 | # skipped every native target, then integrate wrote `[CP] Embed Pods | COMMENT |
| LOW | packages/app/firebase_spm.rb | 861 | # for a secondary app instance, it's a strict requirement for all RNFB apps. | COMMENT |
| LOW | packages/app/firebase_spm.rb | 881 | project_modified = false | COMMENT |
| LOW | packages/app/firebase_spm.rb | 941 | # the healing path) only tells Xcode the target *depends* on it -- it | COMMENT |
| LOW | packages/app/firebase_spm.rb | 981 | # `rnfirebase_hook_cocoapods_post_install!` above -- so you normally never | COMMENT |
| LOW | packages/app/firebase_spm.rb | 1041 | project.root_object.package_references.delete(pkg) | COMMENT |
| LOW | packages/app/firebase_spm.rb | 1061 | # | COMMENT |
| LOW | packages/app/firebase_spm.rb | 1121 | # `rnfirebase_hook_cocoapods_post_install!` above -- so you normally never | COMMENT |
| LOW | packages/app/firebase_spm.rb | 1141 | # `FirebaseSharedSwift`) aren't exposed as public products. Explicit | COMMENT |
| LOW | packages/app/firebase_spm.rb | 1161 | # above already links `FirebaseCore` into the app target as a direct SPM | COMMENT |
| LOW | packages/app/ios_config.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | packages/app/firebase_json.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | packages/app/ios/RNFBApp/RNFBSharedUtils.h | 21 | #if __has_include(<FirebaseCore/FirebaseCore.h>) | COMMENT |
| LOW | packages/app/ios/RNFBApp/RNFBAppModule.mm | 21 | #import <FirebaseCore/FirebaseCore.h> | COMMENT |
| LOW | packages/app/__tests__/firebase_spm_test.rb | 181 | # element type of `AbstractTarget#build_configurations`. Exposes both `name` | COMMENT |
| LOW | …ckages/app/__tests__/firebase_spm_embed_script_test.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | packages/app/__tests__/run_with_coverage.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | packages/app/__tests__/firebase_spm_shape_test.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | packages/app/__tests__/firebase_spm_shape_test.rb | 21 | # | COMMENT |
| LOW | …ests__/iosTurboModuleConstantsReturnTypeParity.test.ts | 1 | import fs from 'fs'; | COMMENT |
| LOW | …e/firebase/common/ReactNativeFirebaseEventEmitter.java | 41 | private static final String TAG = "RNFB_EMITTER"; | COMMENT |
| LOW | …e/firebase/common/ReactNativeFirebaseEventEmitter.java | 61 | // Host identity we moved past while converging onto pending/attached; late attaches of this | COMMENT |
| LOW | …e/firebase/common/ReactNativeFirebaseEventEmitter.java | 81 | return sharedInstance; | COMMENT |
| LOW | packages/app/lib/internal/web/memidb/lib/scheduling.js | 1 | // When running within Node.js (including jsdom), we want to use setImmediate | COMMENT |
| LOW | …estore/ios/RNFBFirestore/RNFBFirestoreDocumentModule.h | 21 | #import <FirebaseCore/FirebaseCore.h> | COMMENT |
| LOW | …ore/ios/RNFBFirestore/RNFBFirestoreTransactionModule.h | 21 | #import <FirebaseCore/FirebaseCore.h> | COMMENT |
| LOW | …tore/ios/RNFBFirestore/RNFBFirestoreCollectionModule.h | 21 | #import <FirebaseCore/FirebaseCore.h> | COMMENT |
| 37 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | scripts/e2e/lib/e2e-slot-env.sh | 302 | # Process-local / orchestration leftovers apply() clears — export if re-set for | COMMENT |
| MEDIUM | .github/workflows/scripts/android-e2e-detox.sh | 2 | # android-emulator-runner executes each script: line via sh -c; keep orchestration here. | COMMENT |
| MEDIUM | okf-bundle/monorepo-tooling/prepare-and-cache.md | 214 | **Bundling premise:** per [running e2e § Rules #3](../testing/running-e2e.md#rules) (canonical owner). The inner loop is | CODE |
| MEDIUM | okf-bundle/monorepo-tooling/prepare-and-cache.md | 230 | ### Tier C — event-driven e2e rerun (spike) | COMMENT |
| MEDIUM | okf-bundle/monorepo-tooling/prepare-and-cache.md | 240 | Chain: `lib` edit → `nx watch` rebuilds `dist` → Metro re-bundles → **`update-done`** → host `POST`s a re-run action to | CODE |
| MEDIUM | okf-bundle/monorepo-tooling/architecture-decisions.md | 156 | ## MonoTool-AD-9 — Dev watch rebuilds prepare; e2e TDD rerun is event-driven off Metro — **Deferred** | COMMENT |
| MEDIUM | okf-bundle/monorepo-tooling/index.md | 15 | In scope: `lerna`/`nx` task orchestration and caching, `react-native-builder-bob` outputs, the `packages/*` build graph, | CODE |
| MEDIUM | okf-bundle/monorepo-tooling/work-queue.md | 32 | | [MonoTool-AD-9](architecture-decisions.md#monotool-ad-9--dev-watch-rebuilds-prepare-e2e-tdd-rerun-is-event-driven-off- | CODE |
| MEDIUM⚡ | okf-bundle/monorepo-tooling/work-queue.md | 358 | - **Status:** Deferred — no incremental dev-watch/hot-reload loop exists today; **off the critical path** for MT1/MT2/MT | CODE |
| MEDIUM⚡ | okf-bundle/monorepo-tooling/work-queue.md | 361 | - Note: the OKF debug/release correction already landed separately as `docs: correct assertion about JS bundles in dev | CODE |
| MEDIUM⚡ | okf-bundle/monorepo-tooling/work-queue.md | 362 | - Analyze the event-driven e2e rerun (Metro `update-done`/`onBundleBuilt` → Jet `POST /rerun` on `8091`; [design Tier | CODE |
| MEDIUM | okf-bundle/testing/e2e-parallel-design.md | 517 | ### Host orchestration | COMMENT |
| MEDIUM | okf-bundle/testing/running-e2e.md | 96 | 6. **One e2e at a time (default)** — never overlap `:test-cover` runs on one host unless each run uses a distinct port/d | CODE |
| MEDIUM | okf-bundle/testing/running-e2e.md | 166 | #### Test-runner host orchestration (log triage only) | COMMENT |
| MEDIUM | okf-bundle/testing/running-e2e.md | 168 | **No commands to run from this section** — for interpreting `:test-cover` logs and CI artifacts only. Patch workflow: [d | CODE |
| MEDIUM | okf-bundle/testing/coverage-design.md | 257 | - **Transfer:** patched test-runner/mocha-remote WS only (`coverage-ready` → `pull-coverage` → `coverage-data` → `covera | CODE |
| MEDIUM | okf-bundle/ci-workflows/android.md | 71 | | Defer `server.run()` until host `POST /launch-ready` on control port **8091** (`RNFB_JET_DEFER_RUN=1`) | Jet patch + ` | CODE |
| MEDIUM | okf-bundle/ci-workflows/detox-patches.md | 31 | Related patches: `jet`, `mocha-remote-client`, `mocha-remote-server` — WS reconnect grace, coverage handshake, client ke | CODE |
| MEDIUM | okf-bundle/ci-workflows/index.md | 15 | * [Test-runner orchestration (log triage)](../testing/running-e2e.md#test-runner-host-orchestration-log-triage-only) — p | COMMENT |
| MEDIUM | okf-bundle/ci-workflows/ios.md | 187 | ### E2E test app orchestration (Detox + Jet) | COMMENT |
| MEDIUM | okf-bundle/ci-workflows/ios.md | 228 | | Defer `server.run()` until host `POST /launch-ready` on control port **8091** (`RNFB_JET_DEFER_RUN=1`) | Jet patch + ` | CODE |
| MEDIUM | okf-bundle/ci-workflows/ios.md | 285 | # Detox orchestration inside the app process | COMMENT |
| MEDIUM | okf-bundle/ci-workflows/ios.md | 380 | # Disconnect resource context (+ orchestrate phase when defer-run enabled) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | CONTRIBUTING.md | 103 | ### Step 1: Clone the repository | COMMENT |
| LOW | CONTRIBUTING.md | 110 | ### Step 2: Install test project dependencies | COMMENT |
| LOW | tests/README.md | 34 | ### Step 1: Install test project dependencies | COMMENT |
| LOW | tests/README.md | 44 | ### Step 2: Start Packager Script | COMMENT |
| LOW | tests/README.md | 60 | ### Step 3: Build Native App | COMMENT |
| LOW | tests/README.md | 81 | ### Step 4: Setting up android emulator and iOS simulator and Firestore emulator | COMMENT |
| LOW | tests/README.md | 97 | ### Step 5: Finally, run the tests | COMMENT |
| LOW | packages/auth/ios/RNFBAuth/RNFBAuthHelper.m | 845 | // NOTE: This variable has NO PURPOSE AT ALL, it is | COMMENT |
| LOW | packages/auth/ios/RNFBAuth/RNFBAuthHelper.m | 1510 | // NOTE: This variable has NO PURPOSE AT ALL, it is | COMMENT |
| LOW | packages/auth/ios/RNFBAuth/RNFBAuthHelper.m | 1642 | // NOTE: This variable has NO PURPOSE AT | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/update-firebase-sdk-versions.sh | 9 | # Usage: | COMMENT |
| LOW | scripts/run-full-tests.sh | 4 | # Usage: | COMMENT |
| LOW | scripts/repro-android-build-flake.sh | 5 | # Usage: | COMMENT |
| LOW | scripts/e2e/export-slot-env.sh | 5 | # Usage: | COMMENT |
| LOW | scripts/e2e/start-emulator-slotted.sh | 5 | # Usage: | COMMENT |
| LOW | scripts/e2e/check-e2e-resources.sh | 17 | # Usage: | COMMENT |
| LOW | scripts/e2e/start-packager.sh | 9 | # Usage: | COMMENT |
| LOW | scripts/e2e/release-e2e-resources.sh | 7 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/firestore/e2e/Pipeline.e2e.js | 1706 | phone: '555-0200', | CODE |
| LOW | packages/firestore/e2e/Pipeline.e2e.js | 1835 | data.fullName.should.equal('John Doe'); | CODE |
| LOW | packages/auth/__tests__/auth.test.ts | 260 | currentUser: { email: 'user@example.com' }, | CODE |
| LOW | packages/auth/__tests__/auth.test.ts | 268 | expect(generateQrCodeUrl).toHaveBeenCalledWith('secret-key', 'user@example.com', '[DEFAULT]'); | CODE |
| LOW | packages/auth/__tests__/auth.test.ts | 279 | currentUser: { email: 'user@example.com' }, | CODE |
| LOW | packages/auth/__tests__/auth.test.ts | 288 | 'user@example.com', | CODE |
| LOW | packages/auth/__tests__/auth.test.ts | 300 | currentUser: { email: 'user@example.com' }, | CODE |
| LOW⚡ | packages/auth/e2e/phone.e2e.js | 1 | // const TEST_EMAIL = 'test@test.com'; | COMMENT |
| LOW | packages/auth/e2e/user.e2e.js | 1 | const TEST_EMAIL = 'test@test.com'; | CODE |
| LOW | packages/analytics/type-test.ts | 150 | initiateOnDeviceConversionMeasurementWithEmailAddress(analytics, 'user@example.com'); | CODE |
| LOW | packages/analytics/lib/index.ts | 1841 | * @param {string} emailAddress - Email address, properly formatted complete with domain name e.g, 'user@example.com'. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | packages/app/firebase_spm.rb | 688 | # This file is `require`d from each RNFB podspec, which CocoaPods evaluates | COMMENT |
| MEDIUM | packages/app/ios_config.sh | 23 | # This file is installed as an Xcode build script in the project file | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ive/java/io/invertase/firebase/common/SharedUtils.java | 116 | * We need to check if app is in foreground otherwise the app will crash. | COMMENT |