🔥 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,325 GitHub stars. SynthScan examined 308,539 lines of code across 1871 source files, recording 637 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 10.2 (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.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 407 finding(s).
Are imports declared and package/API names verified? 230 finding(s).
Are wrappers, guards, and repeated structures necessary? 235 finding(s).
Which changes need focused human review? 637 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 637 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 | …/io/invertase/firebase/app/NativeRNFBTurboAppTest.java | 121 | com.facebook.react.bridge.LifecycleEventListener.class.isAssignableFrom( | 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 | 434 | 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 |
| 159 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/.detoxrc.js | 12 | function androidReversePortsFromEnv() { | CODE |
| LOW | tests/app.js | 267 | 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/jetExitIgnoreKill.js | 44 | async function raceCallerErrorAgainstJetExit({ | CODE |
| LOW | tests/e2e/firebase.test.js | 55 | function logCloudPressureAnalysisPointer(context) { | CODE |
| LOW | tests/e2e/firebase.test.js | 64 | function platformFromDetoxConfigurationName(name) { | CODE |
| LOW | tests/e2e/firebase.test.js | 119 | function staticPrefixedJetControlPort(pk) { | CODE |
| LOW | tests/e2e/firebase.test.js | 235 | function resolveDetoxConfigurationName() { | CODE |
| LOW | tests/e2e/firebase.test.js | 424 | function resolveAndroidEmulatorPort(serial) { | CODE |
| LOW | tests/e2e/firebase.test.js | 536 | function androidCoreServicesPresent(serial) { | CODE |
| LOW | tests/e2e/firebase.test.js | 557 | function foldDetoxChildProcessOutputIntoError(err) { | CODE |
| LOW | tests/e2e/firebase.test.js | 579 | function enrichAndroidLaunchFailureWithGuestSignals(err) { | CODE |
| LOW | tests/e2e/firebase.test.js | 670 | function forceStopAndroidTestingApps(label) { | CODE |
| LOW | tests/e2e/firebase.test.js | 688 | async function waitForAndroidInstrumentationStopped(label, timeoutMs = 30000) { | CODE |
| LOW | tests/e2e/firebase.test.js | 718 | function clearStaleMacOsTestingForSharedJetPort(label) { | CODE |
| LOW | tests/e2e/firebase.test.js | 744 | async function ensureAndroidJetHostClear(label = 'android-jet-host-clear') { | CODE |
| LOW | tests/e2e/firebase.test.js | 766 | async function waitForColdBootEmulatorRegistered(serial, avdName, timeoutMs) { | CODE |
| LOW | tests/e2e/firebase.test.js | 846 | async function waitForAndroidEmulatorReady() { | CODE |
| LOW⚡ | tests/e2e/firebase.test.js | 1128 | function hasJetReconnectDesyncSignal(output) { | CODE |
| LOW⚡ | tests/e2e/firebase.test.js | 1138 | function isJetReconnectDesyncFailure(output) { | CODE |
| LOW⚡ | tests/e2e/firebase.test.js | 1142 | function isRetryableJetSessionFailure(output) { | CODE |
| LOW | tests/e2e/firebase.test.js | 1170 | function isRetryableCloudQuotaFailure(jetOutput) { | CODE |
| LOW | tests/e2e/firebase.test.js | 1401 | function dumpAwaitExitStallDiagnostics(err, jetSession) { | CODE |
| LOW | tests/e2e/firebase.test.js | 1428 | 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 | 104 | 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/DatabaseQuery.ts | 58 | function isObserverShapedDatabaseError(error: unknown): boolean { | 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 | 230 | def rnfirebase_build_setting_list(current) | CODE |
| LOW | packages/app/firebase_spm.rb | 263 | def rnfirebase_set_probe_swift_condition(build_settings, enabled) # rubocop:disable Naming/PredicateMethod | CODE |
| LOW | packages/app/firebase_spm.rb | 295 | def rnfirebase_spm_package_requirement(version) | CODE |
| LOW | packages/app/firebase_spm.rb | 305 | def rnfirebase_stable_object_uuid(key) | CODE |
| 175 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 | …tabase/ios/RNFBDatabase/RNFBDatabaseListenerRegistry.m | 21 | #import "RNFBHandleMap.h" | COMMENT |
| LOW | …/database/ios/RNFBDatabase/RNFBDatabaseQueryRegistry.m | 21 | #import "RNFBHandleMap.h" | COMMENT |
| LOW | packages/crashlytics/ios_config.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | …rashlytics/ios/RNFBCrashlytics/RNFBCrashlyticsHelper.m | 21 | #import <FirebaseCore/FirebaseCore.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 | 21 | require 'json' | COMMENT |
| LOW | packages/app/firebase_spm.rb | 61 | absl | COMMENT |
| LOW | packages/app/firebase_spm.rb | 81 | # source of truth) the first time it's needed, then cached for the rest | COMMENT |
| LOW | packages/app/firebase_spm.rb | 121 | # True when this install resolved Firebase through the local dynamic probe | COMMENT |
| LOW | packages/app/firebase_spm.rb | 161 | # production Podfile code paths -- each `pod install` process is | COMMENT |
| LOW | packages/app/firebase_spm.rb | 181 | # | COMMENT |
| LOW | packages/app/firebase_spm.rb | 241 | # condition on one `build_settings` hash. Never duplicates the entry, and keeps | COMMENT |
| LOW | packages/app/firebase_spm.rb | 421 | # ${OBJROOT}/UninstalledProducts/${PLATFORM_NAME} instead -- and that | COMMENT |
| LOW | packages/app/firebase_spm.rb | 461 | phase.input_paths = input_paths if input_paths | COMMENT |
| LOW | packages/app/firebase_spm.rb | 481 | # the dynamic frameworks Xcode's SPM build produces -- so without this, apps | COMMENT |
| LOW | packages/app/firebase_spm.rb | 521 | COMMENT | |
| LOW | packages/app/firebase_spm.rb | 561 | COMMENT | |
| LOW | packages/app/firebase_spm.rb | 581 | # | COMMENT |
| LOW | packages/app/firebase_spm.rb | 641 | end | COMMENT |
| LOW | packages/app/firebase_spm.rb | 721 | COMMENT | |
| LOW | packages/app/firebase_spm.rb | 841 | # validation, but before product/link-input generation), | COMMENT |
| LOW | packages/app/firebase_spm.rb | 861 | # `post_install` and hid this on #9164. | COMMENT |
| LOW | packages/app/firebase_spm.rb | 1021 | "frameworks (#{e.class}: #{e.message}). Add `rnfirebase_add_spm_embed_phase(installer)` " \ | COMMENT |
| LOW | packages/app/firebase_spm.rb | 1161 | end | COMMENT |
| LOW | packages/app/firebase_spm.rb | 1181 | # SPM integration manages (`installer.pods_project`, i.e. `Pods.xcodeproj`). | COMMENT |
| LOW | packages/app/firebase_spm.rb | 1281 | end | COMMENT |
| LOW | packages/app/firebase_spm.rb | 1301 | # (Mapbox: CocoaPods/CocoaPods#12022; MapLibre: maplibre-react-native#1489; | COMMENT |
| LOW | packages/app/firebase_spm.rb | 1361 | # 1. `-ObjC` in `OTHER_LDFLAGS` (app target *and* every RNFB pod target, | COMMENT |
| LOW | packages/app/firebase_spm.rb | 1381 | # their own toggle for it), so both settings have to be disabled on the | COMMENT |
| LOW | packages/app/firebase_spm.rb | 1401 | # `FirebaseCore`) to any target with at least one product dependency on it | COMMENT |
| LOW | packages/app/firebase_spm.rb | 1461 | COMMENT | |
| LOW | packages/app/firebase_spm.rb | 1581 | config.build_settings['CLANG_ENABLE_MODULES'] = 'YES' | COMMENT |
| LOW | packages/app/firebase_spm.rb | 1661 | 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/RNFBAppModuleImplementation.m | 21 | #import "RNFBMeta.h" | COMMENT |
| LOW | packages/app/ios/RNFBApp/RNFBAppModule.mm | 21 | #import "RNFBAppModuleImplementation.h" | COMMENT |
| LOW | packages/app/ios/RNFBApp/RNFBSharedUtils.m | 21 | #import "RNFBMeta.h" | COMMENT |
| LOW | …/app/ios/RNFBAppUnitTests/HostStubs/React/RCTConvert.h | 1 | /** | COMMENT |
| LOW | packages/app/__tests__/firebase_spm_test.rb | 421 | # suite after the first test that touches it. Resetting the value to nil (rather | COMMENT |
| LOW | packages/app/__tests__/firebase_spm_test.rb | 2321 | RNFirebaseSPM.activate!('12.10.0') | COMMENT |
| 68 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | scripts/e2e/lib/e2e-slot-env.sh | 350 | # 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 | 160 | ## MonoTool-AD-9 — Dev watch rebuilds prepare; e2e TDD rerun is event-driven off Metro — **Deferred** | COMMENT |
| MEDIUM | okf-bundle/monorepo-tooling/index.md | 16 | 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 | 104 | 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 | 174 | #### Test-runner host orchestration (log triage only) | COMMENT |
| MEDIUM | okf-bundle/testing/running-e2e.md | 176 | **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 | 258 | - **Transfer:** patched test-runner/mocha-remote WS only (`coverage-ready` → `pull-coverage` → `coverage-data` → `covera | CODE |
| MEDIUM | okf-bundle/ci-workflows/android.md | 77 | | 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 | 33 | Related patches: `jet`, `mocha-remote-client`, `mocha-remote-server` — WS reconnect grace, coverage handshake, client ke | CODE |
| MEDIUM | okf-bundle/ci-workflows/index.md | 18 | * [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 | 195 | ### E2E test app orchestration (Detox + Jet) | COMMENT |
| MEDIUM | okf-bundle/ci-workflows/ios.md | 236 | | 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 | 293 | # Detox orchestration inside the app process | COMMENT |
| MEDIUM | okf-bundle/ci-workflows/ios.md | 388 | # 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 | 797 | // NOTE: This variable has NO PURPOSE AT ALL, it is | COMMENT |
| LOW | packages/auth/ios/RNFBAuth/RNFBAuthHelper.m | 1462 | // NOTE: This variable has NO PURPOSE AT ALL, it is | COMMENT |
| LOW | packages/auth/ios/RNFBAuth/RNFBAuthHelper.m | 1594 | // 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 | 11 | # 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 | 863 | # 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 | …ative/java/io/invertase/firebase/common/SharedUtils.kt | 140 | * We need to check if app is in foreground otherwise the app will crash. | COMMENT |