@react-native-firebase/app 26.4.0 → 27.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +62 -0
- package/README.md +10 -27
- package/RNFBApp.podspec +13 -5
- package/android/build.gradle +3 -0
- package/android/src/main/java/io/invertase/firebase/common/RNFBHandleCollisionException.kt +29 -0
- package/android/src/main/java/io/invertase/firebase/common/RNFBHandleMap.kt +146 -0
- package/android/src/main/java/io/invertase/firebase/common/TaskExecutorService.kt +156 -0
- package/android/src/main/java/io/invertase/firebase/common/UniversalFirebaseModule.kt +44 -0
- package/android/src/main/java/io/invertase/firebase/common/UniversalFirebasePreferences.kt +100 -0
- package/android/src/reactnative/java/io/invertase/firebase/app/NativeRNFBTurboApp.kt +250 -0
- package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseApp.kt +64 -0
- package/android/src/reactnative/java/io/invertase/firebase/app/{ReactNativeFirebaseAppInitProvider.java → ReactNativeFirebaseAppInitProvider.kt} +3 -4
- package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseAppPackage.kt +47 -0
- package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseAppRegistrar.kt +33 -0
- package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseVersion.java +1 -1
- package/android/src/reactnative/java/io/invertase/firebase/common/RCTConvertFirebase.kt +185 -0
- package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseEvent.kt +35 -0
- package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseEventEmitter.kt +662 -0
- package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseJSON.kt +103 -0
- package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseMeta.kt +96 -0
- package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseModule.kt +140 -0
- package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebasePreferences.kt +109 -0
- package/android/src/reactnative/java/io/invertase/firebase/common/SharedUtils.kt +451 -0
- package/android/src/reactnative/java/io/invertase/firebase/interfaces/{ContextProvider.java → ContextProvider.kt} +8 -8
- package/android/src/reactnative/java/io/invertase/firebase/interfaces/{NativeError.java → NativeError.kt} +8 -8
- package/android/src/reactnative/java/io/invertase/firebase/interfaces/{NativeEvent.java → NativeEvent.kt} +6 -6
- package/android/src/reactnative/java/io/invertase/firebase/utils/NativeRNFBTurboUtils.kt +219 -0
- package/android/src/test/java/expo/core/ModuleRegistry.java +9 -0
- package/android/src/test/java/io/invertase/firebase/app/NativeRNFBTurboAppTest.java +182 -59
- package/android/src/test/java/io/invertase/firebase/app/ReactNativeFirebaseAppComponentsJavaCompatibilityTest.java +70 -0
- package/android/src/test/java/io/invertase/firebase/app/ReactNativeFirebaseAppJavaCompatibilityTest.java +60 -0
- package/android/src/test/java/io/invertase/firebase/app/ReactNativeFirebaseAppPackageTest.java +165 -0
- package/android/src/test/java/io/invertase/firebase/app/ReactNativeFirebaseAppTest.kt +167 -0
- package/android/src/test/java/io/invertase/firebase/common/RCTConvertFirebaseJavaCompatibilityTest.java +112 -0
- package/android/src/test/java/io/invertase/firebase/common/RCTConvertFirebaseTest.kt +317 -0
- package/android/src/test/java/io/invertase/firebase/common/RNFBHandleMapTest.kt +309 -0
- package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseEventEmitterJavaCompatibilityTest.java +176 -0
- package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseEventEmitterTest.java +143 -12
- package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseEventTest.kt +61 -0
- package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseJSONJavaCompatibilityTest.java +85 -0
- package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseJSONTest.kt +296 -0
- package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseMetaJavaCompatibilityTest.java +67 -0
- package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseMetaTest.kt +246 -0
- package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseModuleTest.kt +254 -0
- package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebasePreferencesJavaCompatibilityTest.java +87 -0
- package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebasePreferencesTest.kt +260 -0
- package/android/src/test/java/io/invertase/firebase/common/SharedUtilsJavaCompatibilityTest.java +255 -0
- package/android/src/test/java/io/invertase/firebase/common/SharedUtilsTest.kt +674 -0
- package/android/src/test/java/io/invertase/firebase/common/TaskExecutorServiceTest.kt +290 -0
- package/android/src/test/java/io/invertase/firebase/common/UniversalFirebaseModuleJavaCompatibilityTest.java +178 -0
- package/android/src/test/java/io/invertase/firebase/common/UniversalFirebasePreferencesJavaCompatibilityTest.java +99 -0
- package/android/src/test/java/io/invertase/firebase/common/UniversalFirebasePreferencesTest.kt +217 -0
- package/android/src/test/java/io/invertase/firebase/commoncompat/ReactNativeFirebaseModuleJavaCompatibilityTest.java +176 -0
- package/android/src/test/java/io/invertase/firebase/commoncompat/ReactNativeFirebaseModuleKotlinCompatibilityTest.kt +52 -0
- package/android/src/test/java/io/invertase/firebase/interfaces/InterfacesJavaCompatibilityTest.java +144 -0
- package/android/src/test/java/io/invertase/firebase/interfaces/NativeEventTest.kt +56 -0
- package/android/src/test/java/io/invertase/firebase/utils/NativeRNFBTurboUtilsTest.java +517 -21
- package/dist/module/FirebaseApp.js +10 -0
- package/dist/module/FirebaseApp.js.map +1 -1
- package/dist/module/common/deeps.js +3 -0
- package/dist/module/common/deeps.js.map +1 -1
- package/dist/module/internal/FirebaseModule.js.map +1 -1
- package/dist/module/internal/RNFBNativeEventEmitter.js +12 -1
- package/dist/module/internal/RNFBNativeEventEmitter.js.map +1 -1
- package/dist/module/internal/SharedEventEmitter.js +3 -1
- package/dist/module/internal/SharedEventEmitter.js.map +1 -1
- package/dist/module/internal/index.js +1 -0
- package/dist/module/internal/index.js.map +1 -1
- package/dist/module/internal/registry/app.js +7 -1
- package/dist/module/internal/registry/app.js.map +1 -1
- package/dist/module/types/app.js.map +1 -1
- package/dist/module/types/internal.js +2 -0
- package/dist/module/version.js +1 -1
- package/dist/typescript/lib/FirebaseApp.d.ts +7 -0
- package/dist/typescript/lib/FirebaseApp.d.ts.map +1 -1
- package/dist/typescript/lib/common/deeps.d.ts.map +1 -1
- package/dist/typescript/lib/internal/FirebaseModule.d.ts +2 -3
- package/dist/typescript/lib/internal/FirebaseModule.d.ts.map +1 -1
- package/dist/typescript/lib/internal/NativeModules.d.ts +4 -1
- package/dist/typescript/lib/internal/NativeModules.d.ts.map +1 -1
- package/dist/typescript/lib/internal/RNFBNativeEventEmitter.d.ts +2 -2
- package/dist/typescript/lib/internal/RNFBNativeEventEmitter.d.ts.map +1 -1
- package/dist/typescript/lib/internal/SharedEventEmitter.d.ts +3 -3
- package/dist/typescript/lib/internal/SharedEventEmitter.d.ts.map +1 -1
- package/dist/typescript/lib/internal/index.d.ts +1 -0
- package/dist/typescript/lib/internal/index.d.ts.map +1 -1
- package/dist/typescript/lib/internal/registry/app.d.ts.map +1 -1
- package/dist/typescript/lib/types/app.d.ts +10 -3
- package/dist/typescript/lib/types/app.d.ts.map +1 -1
- package/dist/typescript/lib/types/internal.d.ts +12 -0
- package/dist/typescript/lib/types/internal.d.ts.map +1 -1
- package/dist/typescript/lib/version.d.ts +1 -1
- package/firebase-schema.json +4 -0
- package/firebase_spm.rb +552 -96
- package/ios/RNFBApp/RCTConvert+FIRApp.h +2 -5
- package/ios/RNFBApp/RCTConvert+FIRApp.m +11 -6
- package/ios/RNFBApp/RCTConvert+FIROptions.h +2 -5
- package/ios/RNFBApp/RCTConvert+FIROptions.m +11 -10
- package/ios/RNFBApp/RCTConvertFIRApp.swift +86 -0
- package/ios/RNFBApp/RCTConvertFIROptions.swift +259 -0
- package/ios/RNFBApp/RNFBAppCustomAuthDomains.swift +63 -0
- package/ios/RNFBApp/RNFBAppInitializeOptionsMapper.swift +113 -0
- package/ios/RNFBApp/RNFBAppLogLevelMapper.swift +53 -0
- package/ios/RNFBApp/RNFBAppModule+CustomAuthDomain.m +35 -0
- package/ios/RNFBApp/RNFBAppModule.h +6 -2
- package/ios/RNFBApp/RNFBAppModule.mm +65 -228
- package/ios/RNFBApp/RNFBAppModuleFirebase.swift +439 -0
- package/ios/RNFBApp/RNFBAppModuleImplementation.h +68 -0
- package/ios/RNFBApp/RNFBAppModuleImplementation.m +195 -0
- package/ios/RNFBApp/RNFBHandleMap.m +27 -56
- package/ios/RNFBApp/RNFBHandleMapStorage.swift +90 -0
- package/ios/RNFBApp/RNFBInitializeAppArguments.swift +82 -0
- package/ios/RNFBApp/RNFBJSON.m +22 -38
- package/ios/RNFBApp/RNFBJSONImplementation.swift +71 -0
- package/ios/RNFBApp/RNFBMeta.m +24 -26
- package/ios/RNFBApp/RNFBMetaStorage.swift +76 -0
- package/ios/RNFBApp/RNFBNullSentinelDecoding.swift +135 -0
- package/ios/RNFBApp/RNFBNullSentinelInterceptor.h +30 -3
- package/ios/RNFBApp/RNFBNullSentinelInterceptor.m +28 -5
- package/ios/RNFBApp/RNFBPreferences.m +22 -20
- package/ios/RNFBApp/RNFBPreferencesStorage.swift +101 -0
- package/ios/RNFBApp/RNFBRCTEventEmitter.m +36 -93
- package/ios/RNFBApp/RNFBRCTEventEmitterCore.swift +161 -0
- package/ios/RNFBApp/RNFBSharedUtils.h +2 -5
- package/ios/RNFBApp/RNFBSharedUtils.m +109 -198
- package/ios/RNFBApp/RNFBSharedUtilsConfig.swift +72 -0
- package/ios/RNFBApp/RNFBSharedUtilsFIRApp.swift +271 -0
- package/ios/RNFBApp/RNFBSharedUtilsFormatting.swift +59 -0
- package/ios/RNFBApp/RNFBSharedUtilsPromiseRejection.swift +88 -0
- package/ios/RNFBApp/RNFBUtilsHelpers.swift +116 -0
- package/ios/RNFBApp/RNFBUtilsModule+Foundation.m +44 -0
- package/ios/RNFBApp/RNFBUtilsModule+PhotoAssets.m +47 -0
- package/ios/RNFBApp/RNFBUtilsModule.h +11 -1
- package/ios/RNFBApp/RNFBUtilsModule.mm +10 -85
- package/ios/RNFBApp/RNFBUtilsModuleImplementation.h +32 -0
- package/ios/RNFBApp/RNFBUtilsModuleImplementation.m +56 -0
- package/ios/RNFBApp/RNFBVersion.m +1 -1
- package/ios/RNFBApp.xcodeproj/project.pbxproj +100 -0
- package/ios/RNFBAppUnitTests/HostStubs/FirebaseCore/FIRApp.m +171 -0
- package/ios/RNFBAppUnitTests/HostStubs/FirebaseCore/FirebaseCore.h +78 -0
- package/ios/RNFBAppUnitTests/HostStubs/FirebaseInstallations/FIRInstallations.m +7 -0
- package/ios/RNFBAppUnitTests/HostStubs/FirebaseInstallations/FirebaseInstallations.h +8 -0
- package/ios/RNFBAppUnitTests/HostStubs/RNFBAppModuleHostStub.m +55 -0
- package/ios/RNFBAppUnitTests/HostStubs/RNFBAppTurboModules.h +89 -0
- package/ios/RNFBAppUnitTests/HostStubs/RNFBAppTurboModules.mm +30 -0
- package/ios/RNFBAppUnitTests/HostStubs/React/RCTBridge.h +19 -0
- package/ios/RNFBAppUnitTests/HostStubs/React/RCTBridge.m +32 -0
- package/ios/RNFBAppUnitTests/HostStubs/React/RCTBridgeModule.h +19 -0
- package/ios/RNFBAppUnitTests/HostStubs/React/RCTConvert.h +28 -0
- package/ios/RNFBAppUnitTests/HostStubs/React/RCTConvert.m +23 -0
- package/ios/RNFBAppUnitTests/HostStubs/React/RCTEventEmitter.h +9 -0
- package/ios/RNFBAppUnitTests/HostStubs/React/RCTInvalidating.h +24 -0
- package/ios/RNFBAppUnitTests/HostStubs/React/RCTUtils.h +9 -0
- package/ios/RNFBAppUnitTests/HostStubs/module.modulemap +13 -0
- package/ios/RNFBAppUnitTests/RCTConvertFIRAppFacadeTests.m +61 -0
- package/ios/RNFBAppUnitTests/RCTConvertFIRAppTests.swift +73 -0
- package/ios/RNFBAppUnitTests/RCTConvertFIROptionsFacadeTests.m +57 -0
- package/ios/RNFBAppUnitTests/RCTConvertFIROptionsTests.swift +243 -0
- package/ios/RNFBAppUnitTests/RNFBAppCustomAuthDomainsFacadeTests.m +73 -0
- package/ios/RNFBAppUnitTests/RNFBAppCustomAuthDomainsTests.swift +70 -0
- package/ios/RNFBAppUnitTests/RNFBAppInitializeOptionsMapperTests.swift +190 -0
- package/ios/RNFBAppUnitTests/RNFBAppLogLevelFacadeTests.m +76 -0
- package/ios/RNFBAppUnitTests/RNFBAppLogLevelMapperTests.swift +59 -0
- package/ios/RNFBAppUnitTests/RNFBAppModuleFirebaseFacadeTests.m +215 -0
- package/ios/RNFBAppUnitTests/RNFBAppModuleFirebaseTests.swift +430 -0
- package/ios/RNFBAppUnitTests/RNFBAppModuleLifecycleTests.m +206 -0
- package/ios/RNFBAppUnitTests/RNFBAppModuleShellTests.mm +367 -0
- package/ios/RNFBAppUnitTests/RNFBAppUnitTests.xcodeproj/project.pbxproj +355 -2
- package/ios/RNFBAppUnitTests/RNFBFirebaseAppClientTests.swift +165 -0
- package/ios/RNFBAppUnitTests/RNFBHandleMapStorageTests.swift +121 -0
- package/ios/RNFBAppUnitTests/RNFBInitializeAppArgumentsTests.swift +256 -0
- package/ios/RNFBAppUnitTests/RNFBJSONImplementationTests.swift +126 -0
- package/ios/RNFBAppUnitTests/RNFBJSONTests.m +172 -0
- package/ios/RNFBAppUnitTests/RNFBMetaStorageTests.swift +106 -0
- package/ios/RNFBAppUnitTests/RNFBMetaTests.m +65 -0
- package/ios/RNFBAppUnitTests/RNFBNullSentinelDecodingTests.swift +286 -0
- package/ios/RNFBAppUnitTests/RNFBNullSentinelInterceptorTests.m +312 -0
- package/ios/RNFBAppUnitTests/RNFBPreferencesStorageTests.swift +105 -0
- package/ios/RNFBAppUnitTests/RNFBPreferencesTests.m +110 -0
- package/ios/RNFBAppUnitTests/RNFBRCTEventEmitterCoreTests.swift +163 -0
- package/ios/RNFBAppUnitTests/RNFBRCTEventEmitterFacadeTests.m +141 -0
- package/ios/RNFBAppUnitTests/RNFBSharedUtilsConfigFacadeTests.m +100 -0
- package/ios/RNFBAppUnitTests/RNFBSharedUtilsConfigTests.swift +234 -0
- package/ios/RNFBAppUnitTests/RNFBSharedUtilsFIRAppFacadeTests.m +145 -0
- package/ios/RNFBAppUnitTests/RNFBSharedUtilsFIRAppTests.swift +173 -0
- package/ios/RNFBAppUnitTests/RNFBSharedUtilsFormattingFacadeTests.m +38 -0
- package/ios/RNFBAppUnitTests/RNFBSharedUtilsFormattingTests.swift +82 -0
- package/ios/RNFBAppUnitTests/RNFBSharedUtilsNullSentinelTests.m +35 -0
- package/ios/RNFBAppUnitTests/RNFBSharedUtilsPromiseRejectionFacadeTests.m +107 -0
- package/ios/RNFBAppUnitTests/RNFBSharedUtilsPromiseRejectionTests.swift +133 -0
- package/ios/RNFBAppUnitTests/RNFBUtilsHelpersTests.swift +144 -0
- package/ios/RNFBAppUnitTests/RNFBUtilsModuleFacadeTests.m +72 -0
- package/ios/RNFBAppUnitTests/RNFBUtilsModuleShellTests.mm +282 -0
- package/ios/RNFBFirebase/Package.swift +53 -0
- package/ios/RNFBFirebase/Sources/RNFBFirebase/RNFBFirebase.swift +285 -0
- package/ios/RNFBFirebase/Sources/RNFBFirebaseBridge/Public/.gitkeep +0 -0
- package/ios/RNFBFirebase/Sources/RNFBFirebaseBridge/RNFBFirebaseBridge.m +169 -0
- package/ios/RNFBFirebase/Sources/RNFBFirebaseBridge/include/RNFBFirebaseBridge.h +52 -0
- package/ios/RNFBFirebaseUnitTests/RNFBAppDynamicFacadeTests.swift +240 -0
- package/{android/src/main/java/io/invertase/firebase/common/RNFBHandleCollisionException.java → ios/RNFBFirebaseUnitTests/RNFBFirebaseClientImport.swift} +23 -14
- package/ios/RNFBFirebaseUnitTests/RNFBFirebaseUnitTests.xcodeproj/project.pbxproj +588 -0
- package/ios/RNFBFirebaseUnitTests/RNFBFirebaseUnitTests.xcodeproj/xcshareddata/xcschemes/RNFBFirebaseUnitTests.xcscheme +83 -0
- package/ios_config.sh +50 -22
- package/lib/FirebaseApp.ts +10 -0
- package/lib/common/deeps.ts +3 -0
- package/lib/internal/FirebaseModule.ts +6 -3
- package/lib/internal/NativeModules.ts +4 -1
- package/lib/internal/RNFBNativeEventEmitter.ts +14 -5
- package/lib/internal/SharedEventEmitter.ts +5 -1
- package/lib/internal/index.ts +1 -0
- package/lib/internal/react-native-vendor-emitter.d.ts +11 -0
- package/lib/internal/registry/app.ts +7 -1
- package/lib/types/app.ts +10 -3
- package/lib/types/internal.ts +19 -0
- package/lib/version.ts +1 -1
- package/package.json +8 -8
- package/plugin/build/ios/appDelegate.js +2 -2
- package/plugin/build/ios/podfile.js +16 -16
- package/plugin/build/pluginConfig.d.ts +4 -2
- package/plugin/src/ios/appDelegate.ts +2 -2
- package/plugin/src/ios/podfile.ts +20 -23
- package/plugin/src/pluginConfig.ts +4 -2
- package/android/src/main/java/io/invertase/firebase/common/RNFBHandleMap.java +0 -150
- package/android/src/main/java/io/invertase/firebase/common/TaskExecutorService.java +0 -148
- package/android/src/main/java/io/invertase/firebase/common/UniversalFirebaseModule.java +0 -62
- package/android/src/main/java/io/invertase/firebase/common/UniversalFirebasePreferences.java +0 -91
- package/android/src/reactnative/java/io/invertase/firebase/app/NativeRNFBTurboApp.java +0 -224
- package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseApp.java +0 -46
- package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseAppPackage.java +0 -49
- package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseAppRegistrar.java +0 -35
- package/android/src/reactnative/java/io/invertase/firebase/common/RCTConvertFirebase.java +0 -192
- package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseEvent.java +0 -53
- package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseEventEmitter.java +0 -606
- package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseJSON.java +0 -109
- package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseMeta.java +0 -101
- package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseModule.java +0 -146
- package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebasePreferences.java +0 -96
- package/android/src/reactnative/java/io/invertase/firebase/common/SharedUtils.java +0 -441
- package/android/src/reactnative/java/io/invertase/firebase/utils/NativeRNFBTurboUtils.java +0 -223
- package/android/src/test/java/io/invertase/firebase/common/RNFBHandleMapTest.java +0 -275
- package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseJSONTest.java +0 -108
- package/android/src/test/java/io/invertase/firebase/common/TaskExecutorServiceTest.java +0 -97
package/ios_config.sh
CHANGED
|
@@ -32,7 +32,7 @@ _MAX_LOOKUPS=2;
|
|
|
32
32
|
_SEARCH_RESULT=''
|
|
33
33
|
_RN_ROOT_EXISTS=''
|
|
34
34
|
_CURRENT_LOOKUPS=1
|
|
35
|
-
_JSON_ROOT=
|
|
35
|
+
_JSON_ROOT='react-native'
|
|
36
36
|
_JSON_FILE_NAME='firebase.json'
|
|
37
37
|
_JSON_OUTPUT_BASE64='e30=' # { }
|
|
38
38
|
_CURRENT_SEARCH_DIR=${PROJECT_DIR}
|
|
@@ -47,12 +47,33 @@ _PLIST_ENTRY_VALUES=()
|
|
|
47
47
|
|
|
48
48
|
function setPlistValue {
|
|
49
49
|
echo "note: setting plist entry '$1' of type '$2' in file '$4'"
|
|
50
|
-
|
|
50
|
+
# PlistBuddy is macOS-only (Xcode builds). Fall back to python3 plistlib so
|
|
51
|
+
# unit tests can exercise this script on Linux CI (ubuntu-latest).
|
|
52
|
+
if [[ -x "${_PLIST_BUDDY}" ]]; then
|
|
53
|
+
${_PLIST_BUDDY} -c "Add :$1 $2 '$3'" $4 || echo "note: '$1' already exists"
|
|
54
|
+
else
|
|
55
|
+
python3 - "$1" "$2" "$3" "$4" <<'PY' || echo "note: failed to set '$1'"
|
|
56
|
+
import plistlib
|
|
57
|
+
import sys
|
|
58
|
+
|
|
59
|
+
key, typ, value, path = sys.argv[1:5]
|
|
60
|
+
with open(path, "rb") as handle:
|
|
61
|
+
data = plistlib.load(handle)
|
|
62
|
+
if key in data:
|
|
63
|
+
sys.exit(0)
|
|
64
|
+
if typ == "bool":
|
|
65
|
+
data[key] = value in ("YES", "true", "1")
|
|
66
|
+
else:
|
|
67
|
+
data[key] = value
|
|
68
|
+
with open(path, "wb") as handle:
|
|
69
|
+
plistlib.dump(data, handle)
|
|
70
|
+
PY
|
|
71
|
+
fi
|
|
51
72
|
}
|
|
52
73
|
|
|
53
74
|
function getFirebaseJsonKeyValue () {
|
|
54
75
|
if [[ ${_RN_ROOT_EXISTS} ]]; then
|
|
55
|
-
ruby -
|
|
76
|
+
ruby -rjson -e 'output=JSON.parse(File.read(ARGV.fetch(0))); puts output[ARGV.fetch(1)][ARGV.fetch(2)]' "$_SEARCH_RESULT" "$_JSON_ROOT" "$1"
|
|
56
77
|
else
|
|
57
78
|
echo ""
|
|
58
79
|
fi;
|
|
@@ -87,15 +108,14 @@ while true; do
|
|
|
87
108
|
done
|
|
88
109
|
|
|
89
110
|
if [[ ${_SEARCH_RESULT} ]]; then
|
|
90
|
-
|
|
91
|
-
if ! _RN_ROOT_EXISTS=$(ruby -Ku -e "require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]"); then
|
|
111
|
+
if ! _RN_ROOT_EXISTS=$(ruby -rjson -e 'output=JSON.parse(File.read(ARGV.fetch(0))); puts output[ARGV.fetch(1)]' "$_SEARCH_RESULT" "$_JSON_ROOT"); then
|
|
92
112
|
echo "error: Failed to parse firebase.json, check for syntax errors."
|
|
93
113
|
exit 1
|
|
94
114
|
fi
|
|
95
115
|
|
|
96
116
|
if [[ ${_RN_ROOT_EXISTS} ]]; then
|
|
97
117
|
if ! python3 --version >/dev/null 2>&1; then echo "error: python3 not found, firebase.json file processing error." && exit 1; fi
|
|
98
|
-
_JSON_OUTPUT_BASE64=$(python3 -c 'import json,sys
|
|
118
|
+
_JSON_OUTPUT_BASE64=$(python3 -c 'import base64,json,sys; print(base64.b64encode(json.dumps(json.load(open(sys.argv[1], "rb"))["react-native"]).encode()).decode())' "$_SEARCH_RESULT" || echo "e30=")
|
|
99
119
|
fi
|
|
100
120
|
|
|
101
121
|
_PLIST_ENTRY_KEYS+=("firebase_json_raw")
|
|
@@ -103,7 +123,7 @@ if [[ ${_SEARCH_RESULT} ]]; then
|
|
|
103
123
|
_PLIST_ENTRY_VALUES+=("$_JSON_OUTPUT_BASE64")
|
|
104
124
|
|
|
105
125
|
# config.app_data_collection_default_enabled
|
|
106
|
-
_APP_DATA_COLLECTION_ENABLED=$(getFirebaseJsonKeyValue "
|
|
126
|
+
_APP_DATA_COLLECTION_ENABLED=$(getFirebaseJsonKeyValue "app_data_collection_default_enabled")
|
|
107
127
|
if [[ $_APP_DATA_COLLECTION_ENABLED ]]; then
|
|
108
128
|
_PLIST_ENTRY_KEYS+=("FirebaseDataCollectionDefaultEnabled")
|
|
109
129
|
_PLIST_ENTRY_TYPES+=("bool")
|
|
@@ -111,7 +131,7 @@ if [[ ${_SEARCH_RESULT} ]]; then
|
|
|
111
131
|
fi
|
|
112
132
|
|
|
113
133
|
# config.analytics_auto_collection_enabled
|
|
114
|
-
_ANALYTICS_AUTO_COLLECTION=$(getFirebaseJsonKeyValue "
|
|
134
|
+
_ANALYTICS_AUTO_COLLECTION=$(getFirebaseJsonKeyValue "analytics_auto_collection_enabled")
|
|
115
135
|
if [[ $_ANALYTICS_AUTO_COLLECTION ]]; then
|
|
116
136
|
_PLIST_ENTRY_KEYS+=("FIREBASE_ANALYTICS_COLLECTION_ENABLED")
|
|
117
137
|
_PLIST_ENTRY_TYPES+=("bool")
|
|
@@ -119,7 +139,7 @@ if [[ ${_SEARCH_RESULT} ]]; then
|
|
|
119
139
|
fi
|
|
120
140
|
|
|
121
141
|
# config.analytics_collection_deactivated
|
|
122
|
-
_ANALYTICS_DEACTIVATED=$(getFirebaseJsonKeyValue "
|
|
142
|
+
_ANALYTICS_DEACTIVATED=$(getFirebaseJsonKeyValue "analytics_collection_deactivated")
|
|
123
143
|
if [[ $_ANALYTICS_DEACTIVATED ]]; then
|
|
124
144
|
_PLIST_ENTRY_KEYS+=("FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED")
|
|
125
145
|
_PLIST_ENTRY_TYPES+=("bool")
|
|
@@ -127,7 +147,7 @@ if [[ ${_SEARCH_RESULT} ]]; then
|
|
|
127
147
|
fi
|
|
128
148
|
|
|
129
149
|
# config.analytics_idfv_collection_enabled
|
|
130
|
-
_ANALYTICS_IDFV_COLLECTION=$(getFirebaseJsonKeyValue "
|
|
150
|
+
_ANALYTICS_IDFV_COLLECTION=$(getFirebaseJsonKeyValue "analytics_idfv_collection_enabled")
|
|
131
151
|
if [[ $_ANALYTICS_IDFV_COLLECTION ]]; then
|
|
132
152
|
_PLIST_ENTRY_KEYS+=("GOOGLE_ANALYTICS_IDFV_COLLECTION_ENABLED")
|
|
133
153
|
_PLIST_ENTRY_TYPES+=("bool")
|
|
@@ -135,7 +155,7 @@ if [[ ${_SEARCH_RESULT} ]]; then
|
|
|
135
155
|
fi
|
|
136
156
|
|
|
137
157
|
# config.analytics_default_allow_analytics_storage
|
|
138
|
-
_ANALYTICS_STORAGE=$(getFirebaseJsonKeyValue "
|
|
158
|
+
_ANALYTICS_STORAGE=$(getFirebaseJsonKeyValue "analytics_default_allow_analytics_storage")
|
|
139
159
|
if [[ $_ANALYTICS_STORAGE ]]; then
|
|
140
160
|
_PLIST_ENTRY_KEYS+=("GOOGLE_ANALYTICS_DEFAULT_ALLOW_ANALYTICS_STORAGE")
|
|
141
161
|
_PLIST_ENTRY_TYPES+=("bool")
|
|
@@ -143,7 +163,7 @@ if [[ ${_SEARCH_RESULT} ]]; then
|
|
|
143
163
|
fi
|
|
144
164
|
|
|
145
165
|
# config.analytics_default_allow_ad_storage
|
|
146
|
-
_ANALYTICS_AD_STORAGE=$(getFirebaseJsonKeyValue "
|
|
166
|
+
_ANALYTICS_AD_STORAGE=$(getFirebaseJsonKeyValue "analytics_default_allow_ad_storage")
|
|
147
167
|
if [[ $_ANALYTICS_AD_STORAGE ]]; then
|
|
148
168
|
_PLIST_ENTRY_KEYS+=("GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_STORAGE")
|
|
149
169
|
_PLIST_ENTRY_TYPES+=("bool")
|
|
@@ -151,7 +171,7 @@ if [[ ${_SEARCH_RESULT} ]]; then
|
|
|
151
171
|
fi
|
|
152
172
|
|
|
153
173
|
# config.analytics_default_allow_ad_user_data
|
|
154
|
-
_ANALYTICS_AD_USER_DATA=$(getFirebaseJsonKeyValue "
|
|
174
|
+
_ANALYTICS_AD_USER_DATA=$(getFirebaseJsonKeyValue "analytics_default_allow_ad_user_data")
|
|
155
175
|
if [[ $_ANALYTICS_AD_USER_DATA ]]; then
|
|
156
176
|
_PLIST_ENTRY_KEYS+=("GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_USER_DATA")
|
|
157
177
|
_PLIST_ENTRY_TYPES+=("bool")
|
|
@@ -159,7 +179,7 @@ if [[ ${_SEARCH_RESULT} ]]; then
|
|
|
159
179
|
fi
|
|
160
180
|
|
|
161
181
|
# config.analytics_default_allow_ad_personalization_signals
|
|
162
|
-
_ANALYTICS_PERSONALIZATION=$(getFirebaseJsonKeyValue "
|
|
182
|
+
_ANALYTICS_PERSONALIZATION=$(getFirebaseJsonKeyValue "analytics_default_allow_ad_personalization_signals")
|
|
163
183
|
if [[ $_ANALYTICS_PERSONALIZATION ]]; then
|
|
164
184
|
_PLIST_ENTRY_KEYS+=("GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS")
|
|
165
185
|
_PLIST_ENTRY_TYPES+=("bool")
|
|
@@ -167,7 +187,7 @@ if [[ ${_SEARCH_RESULT} ]]; then
|
|
|
167
187
|
fi
|
|
168
188
|
|
|
169
189
|
# config.analytics_registration_with_ad_network_enabled
|
|
170
|
-
_ANALYTICS_REGISTRATION_WITH_AD_NETWORK=$(getFirebaseJsonKeyValue "
|
|
190
|
+
_ANALYTICS_REGISTRATION_WITH_AD_NETWORK=$(getFirebaseJsonKeyValue "google_analytics_registration_with_ad_network_enabled")
|
|
171
191
|
if [[ $_ANALYTICS_REGISTRATION_WITH_AD_NETWORK ]]; then
|
|
172
192
|
_PLIST_ENTRY_KEYS+=("GOOGLE_ANALYTICS_REGISTRATION_WITH_AD_NETWORK_ENABLED")
|
|
173
193
|
_PLIST_ENTRY_TYPES+=("bool")
|
|
@@ -175,7 +195,7 @@ if [[ ${_SEARCH_RESULT} ]]; then
|
|
|
175
195
|
fi
|
|
176
196
|
|
|
177
197
|
# config.google_analytics_automatic_screen_reporting_enabled
|
|
178
|
-
_ANALYTICS_AUTO_SCREEN_REPORTING=$(getFirebaseJsonKeyValue "
|
|
198
|
+
_ANALYTICS_AUTO_SCREEN_REPORTING=$(getFirebaseJsonKeyValue "google_analytics_automatic_screen_reporting_enabled")
|
|
179
199
|
if [[ $_ANALYTICS_AUTO_SCREEN_REPORTING ]]; then
|
|
180
200
|
_PLIST_ENTRY_KEYS+=("FirebaseAutomaticScreenReportingEnabled")
|
|
181
201
|
_PLIST_ENTRY_TYPES+=("bool")
|
|
@@ -183,7 +203,7 @@ if [[ ${_SEARCH_RESULT} ]]; then
|
|
|
183
203
|
fi
|
|
184
204
|
|
|
185
205
|
# config.perf_auto_collection_enabled
|
|
186
|
-
_PERF_AUTO_COLLECTION=$(getFirebaseJsonKeyValue "
|
|
206
|
+
_PERF_AUTO_COLLECTION=$(getFirebaseJsonKeyValue "perf_auto_collection_enabled")
|
|
187
207
|
if [[ $_PERF_AUTO_COLLECTION ]]; then
|
|
188
208
|
_PLIST_ENTRY_KEYS+=("firebase_performance_collection_enabled")
|
|
189
209
|
_PLIST_ENTRY_TYPES+=("bool")
|
|
@@ -191,7 +211,7 @@ if [[ ${_SEARCH_RESULT} ]]; then
|
|
|
191
211
|
fi
|
|
192
212
|
|
|
193
213
|
# config.perf_collection_deactivated
|
|
194
|
-
_PERF_DEACTIVATED=$(getFirebaseJsonKeyValue "
|
|
214
|
+
_PERF_DEACTIVATED=$(getFirebaseJsonKeyValue "perf_collection_deactivated")
|
|
195
215
|
if [[ $_PERF_DEACTIVATED ]]; then
|
|
196
216
|
_PLIST_ENTRY_KEYS+=("firebase_performance_collection_deactivated")
|
|
197
217
|
_PLIST_ENTRY_TYPES+=("bool")
|
|
@@ -199,15 +219,23 @@ if [[ ${_SEARCH_RESULT} ]]; then
|
|
|
199
219
|
fi
|
|
200
220
|
|
|
201
221
|
# config.messaging_auto_init_enabled
|
|
202
|
-
_MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue "
|
|
222
|
+
_MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue "messaging_auto_init_enabled")
|
|
203
223
|
if [[ $_MESSAGING_AUTO_INIT ]]; then
|
|
204
224
|
_PLIST_ENTRY_KEYS+=("FirebaseMessagingAutoInitEnabled")
|
|
205
225
|
_PLIST_ENTRY_TYPES+=("bool")
|
|
206
226
|
_PLIST_ENTRY_VALUES+=("$(jsonBoolToYesNo "$_MESSAGING_AUTO_INIT")")
|
|
207
227
|
fi
|
|
208
228
|
|
|
229
|
+
# config.messaging_installation_id_enabled
|
|
230
|
+
_MESSAGING_INSTALLATION_ID=$(getFirebaseJsonKeyValue "messaging_installation_id_enabled")
|
|
231
|
+
if [[ $_MESSAGING_INSTALLATION_ID ]]; then
|
|
232
|
+
_PLIST_ENTRY_KEYS+=("FirebaseMessagingInstallationIdEnabled")
|
|
233
|
+
_PLIST_ENTRY_TYPES+=("bool")
|
|
234
|
+
_PLIST_ENTRY_VALUES+=("$(jsonBoolToYesNo "$_MESSAGING_INSTALLATION_ID")")
|
|
235
|
+
fi
|
|
236
|
+
|
|
209
237
|
# config.in_app_messaging_auto_colllection_enabled
|
|
210
|
-
_FIAM_AUTO_INIT=$(getFirebaseJsonKeyValue "
|
|
238
|
+
_FIAM_AUTO_INIT=$(getFirebaseJsonKeyValue "in_app_messaging_auto_collection_enabled")
|
|
211
239
|
if [[ $_FIAM_AUTO_INIT ]]; then
|
|
212
240
|
_PLIST_ENTRY_KEYS+=("FirebaseInAppMessagingAutomaticDataCollectionEnabled")
|
|
213
241
|
_PLIST_ENTRY_TYPES+=("bool")
|
|
@@ -215,7 +243,7 @@ if [[ ${_SEARCH_RESULT} ]]; then
|
|
|
215
243
|
fi
|
|
216
244
|
|
|
217
245
|
# config.app_check_token_auto_refresh
|
|
218
|
-
_APP_CHECK_TOKEN_AUTO_REFRESH=$(getFirebaseJsonKeyValue "
|
|
246
|
+
_APP_CHECK_TOKEN_AUTO_REFRESH=$(getFirebaseJsonKeyValue "app_check_token_auto_refresh")
|
|
219
247
|
if [[ $_APP_CHECK_TOKEN_AUTO_REFRESH ]]; then
|
|
220
248
|
_PLIST_ENTRY_KEYS+=("FirebaseAppCheckTokenAutoRefreshEnabled")
|
|
221
249
|
_PLIST_ENTRY_TYPES+=("bool")
|
|
@@ -223,7 +251,7 @@ if [[ ${_SEARCH_RESULT} ]]; then
|
|
|
223
251
|
fi
|
|
224
252
|
|
|
225
253
|
# config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes useful
|
|
226
|
-
_CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue "
|
|
254
|
+
_CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue "crashlytics_disable_auto_disabler")
|
|
227
255
|
if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == "true" ]]; then
|
|
228
256
|
echo "Disabled Crashlytics auto disabler." # do nothing
|
|
229
257
|
else
|
package/lib/FirebaseApp.ts
CHANGED
|
@@ -67,6 +67,16 @@ export default class FirebaseApp implements ReactNativeFirebase.FirebaseAppBase
|
|
|
67
67
|
this._automaticDataCollectionEnabled = enabled;
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
+
/**
|
|
71
|
+
* Package-internal: seeds the cached flag from the value the native SDK resolved at
|
|
72
|
+
* initialization, without calling back into native (unlike the public setter).
|
|
73
|
+
*
|
|
74
|
+
* @internal
|
|
75
|
+
*/
|
|
76
|
+
_setAutomaticDataCollectionEnabledFromNative(enabled: boolean): void {
|
|
77
|
+
this._automaticDataCollectionEnabled = enabled;
|
|
78
|
+
}
|
|
79
|
+
|
|
70
80
|
private _checkDestroyed(): void {
|
|
71
81
|
if (this._deleted) {
|
|
72
82
|
throw new Error(`Firebase App named '${this._name}' already deleted`);
|
package/lib/common/deeps.ts
CHANGED
|
@@ -18,9 +18,12 @@
|
|
|
18
18
|
import { getAppModule, getNativeModule } from './registry/nativeModule';
|
|
19
19
|
import SharedEventEmitter from './SharedEventEmitter';
|
|
20
20
|
import type { ReactNativeFirebase } from '../types/app';
|
|
21
|
-
import type {
|
|
21
|
+
import type {
|
|
22
|
+
FirebaseJsonConfig,
|
|
23
|
+
ModuleConfig,
|
|
24
|
+
ReactNativeFirebaseEventEmitter,
|
|
25
|
+
} from '../types/internal';
|
|
22
26
|
import type { ReactNativeFirebaseNativeModules } from './NativeModules';
|
|
23
|
-
import type EventEmitter from 'react-native/Libraries/vendor/emitter/EventEmitter';
|
|
24
27
|
|
|
25
28
|
let firebaseJson: FirebaseJsonConfig | null = null;
|
|
26
29
|
|
|
@@ -55,7 +58,7 @@ export default class FirebaseModule<
|
|
|
55
58
|
return firebaseJson as FirebaseJsonConfig;
|
|
56
59
|
}
|
|
57
60
|
|
|
58
|
-
get emitter():
|
|
61
|
+
get emitter(): ReactNativeFirebaseEventEmitter {
|
|
59
62
|
return SharedEventEmitter;
|
|
60
63
|
}
|
|
61
64
|
|
|
@@ -48,7 +48,10 @@ export interface RNFBAppModuleInterface {
|
|
|
48
48
|
initializeApp(
|
|
49
49
|
options: ReactNativeFirebase.FirebaseAppOptions,
|
|
50
50
|
appConfig: ReactNativeFirebase.FirebaseAppConfig,
|
|
51
|
-
): Promise<
|
|
51
|
+
): Promise<{
|
|
52
|
+
options?: ReactNativeFirebase.FirebaseAppOptions;
|
|
53
|
+
appConfig?: ReactNativeFirebase.FirebaseAppConfig;
|
|
54
|
+
} | void>;
|
|
52
55
|
deleteApp(name: string): Promise<void>;
|
|
53
56
|
setLogLevel(logLevel: string): void;
|
|
54
57
|
metaGetAll(): Promise<{ [key: string]: string | boolean }>;
|
|
@@ -53,8 +53,10 @@ class RNFBNativeEventEmitter extends NativeEventEmitter {
|
|
|
53
53
|
|
|
54
54
|
addListener(
|
|
55
55
|
eventType: string,
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
// RN 0.88 NativeEventEmitter types the payload as `Object`, not `object`.
|
|
57
|
+
// eslint-disable-next-line @typescript-eslint/no-wrapper-object-types
|
|
58
|
+
listener: (...args: readonly Object[]) => unknown,
|
|
59
|
+
context?: unknown,
|
|
58
60
|
): EmitterSubscription {
|
|
59
61
|
// NewArch-AD-18 E1: event bridge identity requires raw app-module host for listener registration.
|
|
60
62
|
const RNFBAppModule = getReactNativeModule(
|
|
@@ -69,7 +71,8 @@ class RNFBNativeEventEmitter extends NativeEventEmitter {
|
|
|
69
71
|
// eslint-disable-next-line no-console
|
|
70
72
|
console.debug(`[RNFB-->Event][👂] ${eventType} -> listening`);
|
|
71
73
|
}
|
|
72
|
-
|
|
74
|
+
// eslint-disable-next-line @typescript-eslint/no-wrapper-object-types
|
|
75
|
+
const listenerDebugger = (...args: readonly Object[]) => {
|
|
73
76
|
if (globalThis.RNFBDebug) {
|
|
74
77
|
// eslint-disable-next-line no-console
|
|
75
78
|
console.debug(`[RNFB<--Event][📣] ${eventType} <-`, JSON.stringify(args[0]));
|
|
@@ -89,7 +92,8 @@ class RNFBNativeEventEmitter extends NativeEventEmitter {
|
|
|
89
92
|
return listener(...args);
|
|
90
93
|
};
|
|
91
94
|
|
|
92
|
-
|
|
95
|
+
// Installed RN types disagree across 0.86 (`Object`) and 0.88 (wider emitter args).
|
|
96
|
+
let subscription = super.addListener(`rnfb_${eventType}`, listenerDebugger, context as any);
|
|
93
97
|
|
|
94
98
|
// React Native 0.65+ altered EventEmitter:
|
|
95
99
|
// - removeSubscription is gone
|
|
@@ -118,7 +122,12 @@ class RNFBNativeEventEmitter extends NativeEventEmitter {
|
|
|
118
122
|
return subscription;
|
|
119
123
|
}
|
|
120
124
|
|
|
121
|
-
removeAllListeners(eventType
|
|
125
|
+
removeAllListeners(eventType?: string | null): void {
|
|
126
|
+
if (eventType == null) {
|
|
127
|
+
// 0.86 types require `string`; 0.88 accepts a missing event type. The value is unchanged.
|
|
128
|
+
super.removeAllListeners(eventType as any);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
122
131
|
// NewArch-AD-18 E1: raw host for eventsRemoveListener.
|
|
123
132
|
const RNFBAppModule = getReactNativeModule(
|
|
124
133
|
APP_NATIVE_MODULE,
|
|
@@ -15,6 +15,10 @@
|
|
|
15
15
|
*
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
+
// RN macOS 0.78 does not export EventEmitter from the public API; vendor path works on 0.78–0.88.
|
|
18
19
|
import EventEmitter from 'react-native/Libraries/vendor/emitter/EventEmitter';
|
|
20
|
+
import type { ReactNativeFirebaseEventEmitter } from '../types/internal';
|
|
19
21
|
|
|
20
|
-
|
|
22
|
+
const emitter = new EventEmitter() as ReactNativeFirebaseEventEmitter;
|
|
23
|
+
|
|
24
|
+
export default emitter;
|
package/lib/internal/index.ts
CHANGED
|
@@ -23,6 +23,7 @@ export * from './NativeModules';
|
|
|
23
23
|
export * from './registry/app';
|
|
24
24
|
export * from './registry/modular';
|
|
25
25
|
export * from './registry/nativeModule';
|
|
26
|
+
export { getReactNativeModule, setReactNativeModule } from './nativeModule';
|
|
26
27
|
export { default as SharedEventEmitter } from './SharedEventEmitter';
|
|
27
28
|
export { Logger } from './logger';
|
|
28
29
|
export type { ModuleConfig } from '../types/internal';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
declare module 'react-native/Libraries/vendor/emitter/EventEmitter' {
|
|
2
|
+
export default class EventEmitter {
|
|
3
|
+
addListener(
|
|
4
|
+
eventType: string,
|
|
5
|
+
listener: (...args: Array<unknown>) => unknown,
|
|
6
|
+
context?: unknown,
|
|
7
|
+
): { remove(): void };
|
|
8
|
+
removeAllListeners(eventType?: string): void;
|
|
9
|
+
emit(eventType: string, ...args: Array<unknown>): void;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -191,7 +191,13 @@ export function initializeApp(
|
|
|
191
191
|
|
|
192
192
|
return getAppModule()
|
|
193
193
|
.initializeApp(options as FirebaseAppOptions, appConfig)
|
|
194
|
-
.then(
|
|
194
|
+
.then(nativeResult => {
|
|
195
|
+
// Native resolves the real SDK flag, which differs from the input when the key was omitted
|
|
196
|
+
// (SDK / Info.plist default). Web echoes the input and Jest mocks resolve void; both keep `!!input`.
|
|
197
|
+
const nativeEnabled = nativeResult?.appConfig?.automaticDataCollectionEnabled;
|
|
198
|
+
if (typeof nativeEnabled === 'boolean') {
|
|
199
|
+
app._setAutomaticDataCollectionEnabledFromNative(nativeEnabled);
|
|
200
|
+
}
|
|
195
201
|
app._initialized = true;
|
|
196
202
|
return app as unknown as ReactNativeFirebase.FirebaseApp;
|
|
197
203
|
})
|
package/lib/types/app.ts
CHANGED
|
@@ -119,9 +119,13 @@ export namespace ReactNativeFirebase {
|
|
|
119
119
|
|
|
120
120
|
/**
|
|
121
121
|
* Default setting for data collection on startup that affects all Firebase module startup data collection settings,
|
|
122
|
-
* in the absence of module-specific overrides.
|
|
123
|
-
* to false in firebase.json and may be used in opt-in flows, for example a GDPR-compliant app.
|
|
122
|
+
* in the absence of module-specific overrides. It may be used in opt-in flows, for example a GDPR-compliant app.
|
|
124
123
|
* If configured false initially, set to true after obtaining consent, then enable module-specific settings as needed afterwards.
|
|
124
|
+
*
|
|
125
|
+
* On iOS this starts as false if you set "app_data_collection_default_enabled" to false in firebase.json
|
|
126
|
+
* (written to Info.plist "FirebaseDataCollectionDefaultEnabled"). On Android that firebase.json key does not change
|
|
127
|
+
* this flag, which defaults to true unless the host app sets the manifest meta-data "firebase_data_collection_default_enabled".
|
|
128
|
+
* When omitted from the config passed to `initializeApp`, the native default is left unchanged on both platforms.
|
|
125
129
|
*/
|
|
126
130
|
automaticDataCollectionEnabled?: boolean;
|
|
127
131
|
|
|
@@ -148,7 +152,10 @@ export namespace ReactNativeFirebase {
|
|
|
148
152
|
readonly options: FirebaseAppOptions;
|
|
149
153
|
|
|
150
154
|
/**
|
|
151
|
-
* The settable config flag for GDPR opt-in/opt-out
|
|
155
|
+
* The settable config flag for GDPR opt-in/opt-out.
|
|
156
|
+
*
|
|
157
|
+
* After `initializeApp` resolves, this reflects the flag the native SDK is using, which can
|
|
158
|
+
* differ from the value passed in when the key was omitted.
|
|
152
159
|
*/
|
|
153
160
|
automaticDataCollectionEnabled: boolean;
|
|
154
161
|
|
package/lib/types/internal.ts
CHANGED
|
@@ -20,6 +20,25 @@
|
|
|
20
20
|
* These types are used internally across multiple files and should not be exported to consumers
|
|
21
21
|
*/
|
|
22
22
|
|
|
23
|
+
import type { EventSubscription } from 'react-native';
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* RN 0.88's generated `EventEmitter` class types require a `context` argument
|
|
27
|
+
* and `Object` payloads. The runtime still accepts the historical 2-argument
|
|
28
|
+
* `addListener` and nullable `emit` values used across modules.
|
|
29
|
+
*/
|
|
30
|
+
export interface ReactNativeFirebaseEventEmitter {
|
|
31
|
+
addListener(
|
|
32
|
+
eventType: string,
|
|
33
|
+
// RN 0.88 listener params are invariant; `any` keeps module-specific callbacks assignable.
|
|
34
|
+
listener: (...args: any[]) => any,
|
|
35
|
+
context?: unknown,
|
|
36
|
+
): EventSubscription;
|
|
37
|
+
emit(eventType: string, ...args: any[]): void;
|
|
38
|
+
removeAllListeners(eventType?: string | null): void;
|
|
39
|
+
listenerCount(eventType: string): number;
|
|
40
|
+
}
|
|
41
|
+
|
|
23
42
|
/**
|
|
24
43
|
* Firebase JSON configuration from firebase.json file
|
|
25
44
|
* Structure: { "react-native": { [key: string]: boolean | string }, ... }
|
package/lib/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Generated by genversion.
|
|
2
|
-
export const version = '
|
|
2
|
+
export const version = '27.1.0';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-native-firebase/app",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "27.1.0",
|
|
4
4
|
"author": "Invertase <oss@invertase.io> (http://invertase.io)",
|
|
5
5
|
"description": "A well tested, feature rich Firebase implementation for React Native, supporting iOS & Android. Individual module support for Admob, Analytics, Auth, Crash Reporting, Cloud Firestore, Database, Dynamic Links, Functions, Messaging (FCM), Remote Config, Storage and more.",
|
|
6
6
|
"main": "./dist/module/index.js",
|
|
@@ -111,10 +111,10 @@
|
|
|
111
111
|
"peerDependencies": {
|
|
112
112
|
"expo": ">=47.0.0",
|
|
113
113
|
"react": "*",
|
|
114
|
-
"react-native": "
|
|
114
|
+
"react-native": ">=0.60.0-0"
|
|
115
115
|
},
|
|
116
116
|
"dependencies": {
|
|
117
|
-
"firebase": "
|
|
117
|
+
"firebase": "13.1.0"
|
|
118
118
|
},
|
|
119
119
|
"devDependencies": {
|
|
120
120
|
"expo": "^55.0.18",
|
|
@@ -131,17 +131,17 @@
|
|
|
131
131
|
},
|
|
132
132
|
"sdkVersions": {
|
|
133
133
|
"ios": {
|
|
134
|
-
"firebase": "
|
|
134
|
+
"firebase": "13.1.1",
|
|
135
135
|
"firebaseSpmUrl": "https://github.com/firebase/firebase-ios-sdk.git",
|
|
136
136
|
"iosTarget": "15.0",
|
|
137
|
-
"macosTarget": "
|
|
137
|
+
"macosTarget": "11.0",
|
|
138
138
|
"tvosTarget": "15.0"
|
|
139
139
|
},
|
|
140
140
|
"android": {
|
|
141
|
-
"minSdk":
|
|
141
|
+
"minSdk": 24,
|
|
142
142
|
"targetSdk": 34,
|
|
143
143
|
"compileSdk": 34,
|
|
144
|
-
"firebase": "
|
|
144
|
+
"firebase": "35.0.2",
|
|
145
145
|
"firebaseCrashlyticsGradle": "3.0.8",
|
|
146
146
|
"firebasePerfGradle": "2.0.2",
|
|
147
147
|
"gmsGoogleServicesGradle": "4.5.0",
|
|
@@ -185,5 +185,5 @@
|
|
|
185
185
|
}
|
|
186
186
|
}
|
|
187
187
|
},
|
|
188
|
-
"gitHead": "
|
|
188
|
+
"gitHead": "c65e1ee3b78bcd0c5b66996100d7d1e579ca1614"
|
|
189
189
|
}
|
|
@@ -74,9 +74,9 @@ function modifyObjcAppDelegate(contents) {
|
|
|
74
74
|
}
|
|
75
75
|
function modifySwiftAppDelegate(contents) {
|
|
76
76
|
const methodInvocationBlock = `FirebaseApp.configure()`;
|
|
77
|
-
const methodInvocationLineMatcher = /(?:self\.moduleName\s*=\s*"([^"]*)")|(?:factory\.startReactNative\()/;
|
|
77
|
+
const methodInvocationLineMatcher = /(?:self\.moduleName\s*=\s*"([^"]*)")|(?:factory\.startReactNative\()|(?:return\s+super\.application\(\s*application\s*,\s*didFinishLaunchingWithOptions:\s*launchOptions\s*\))/;
|
|
78
78
|
// Add import
|
|
79
|
-
contents = addImport(contents, 'import FirebaseCore', /^[ \t]*import\s+FirebaseCore[ \t]*$/m, /^[ \t]*import\s+Expo[ \t]*$/m, /^[ \t]*import\b[^\r\n]*$/m);
|
|
79
|
+
contents = addImport(contents, 'import FirebaseCore', /^[ \t]*import\s+FirebaseCore[ \t]*$/m, /^[ \t]*(?:internal\s+)?import\s+Expo[ \t]*$/m, /^[ \t]*import\b[^\r\n]*$/m);
|
|
80
80
|
// To avoid potential issues with existing changes from older plugin versions
|
|
81
81
|
if (contents.includes(methodInvocationBlock)) {
|
|
82
82
|
return contents;
|
|
@@ -5,27 +5,27 @@ exports.setAppPodfileDisableSPM = setAppPodfileDisableSPM;
|
|
|
5
5
|
const config_plugins_1 = require("@expo/config-plugins");
|
|
6
6
|
const generateCode_1 = require("@expo/config-plugins/build/utils/generateCode");
|
|
7
7
|
const TAG = '@react-native-firebase/app-disableSPM';
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
const DISABLE_SPM_UNSUPPORTED = '[react-native-firebase] ios.disableSPM is no longer supported. ' +
|
|
9
|
+
'Firebase Apple SDK 13+ is distributed only through Swift Package Manager. ' +
|
|
10
|
+
'Remove `disableSPM` from the `@react-native-firebase/app` config plugin and ' +
|
|
11
|
+
'use dynamic frameworks (`expo-build-properties` ios.useFrameworks: "dynamic"). ' +
|
|
12
|
+
'See https://rnfirebase.io/ios-spm';
|
|
13
|
+
// Historically injected `$RNFirebaseDisableSPM = true` before target blocks.
|
|
14
|
+
// Firebase 13+ is SPM-only: enabling this option must fail loudly, and any
|
|
15
|
+
// leftover generated flag is stripped on prebuild.
|
|
13
16
|
function setAppPodfileDisableSPM(src, enabled = false) {
|
|
14
|
-
if (
|
|
15
|
-
|
|
17
|
+
if (enabled) {
|
|
18
|
+
throw new Error(DISABLE_SPM_UNSUPPORTED);
|
|
16
19
|
}
|
|
17
|
-
return (0, generateCode_1.
|
|
18
|
-
src,
|
|
19
|
-
newSrc: FLAG,
|
|
20
|
-
tag: TAG,
|
|
21
|
-
anchor: ANCHOR,
|
|
22
|
-
offset: 1,
|
|
23
|
-
comment: '#',
|
|
24
|
-
}).contents;
|
|
20
|
+
return (0, generateCode_1.removeGeneratedContents)(src, TAG) ?? src;
|
|
25
21
|
}
|
|
26
22
|
const withIosDisableSPM = (config, props) => {
|
|
23
|
+
if (props?.ios?.disableSPM === true) {
|
|
24
|
+
throw new Error(DISABLE_SPM_UNSUPPORTED);
|
|
25
|
+
}
|
|
27
26
|
return (0, config_plugins_1.withPodfile)(config, config => {
|
|
28
|
-
|
|
27
|
+
// Strip a leftover DisableSPM flag from older prebuilds; never re-add it.
|
|
28
|
+
config.modResults.contents = setAppPodfileDisableSPM(config.modResults.contents, false);
|
|
29
29
|
return config;
|
|
30
30
|
});
|
|
31
31
|
};
|
|
@@ -3,8 +3,10 @@ export interface PluginConfigType {
|
|
|
3
3
|
}
|
|
4
4
|
export interface PluginConfigTypeIos {
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
* @deprecated Firebase Apple SDK 13+ is SPM-only. Setting this to `true`
|
|
7
|
+
* fails Expo prebuild / `pod install` — CocoaPods no longer distributes Firebase.
|
|
8
|
+
* Remove this option and use `use_frameworks! :linkage => :dynamic` (via
|
|
9
|
+
* `expo-build-properties` `ios.useFrameworks: "dynamic"`).
|
|
8
10
|
*
|
|
9
11
|
* @platform ios iOS
|
|
10
12
|
*/
|
|
@@ -101,14 +101,14 @@ export function modifyObjcAppDelegate(contents: string): string {
|
|
|
101
101
|
export function modifySwiftAppDelegate(contents: string): string {
|
|
102
102
|
const methodInvocationBlock = `FirebaseApp.configure()`;
|
|
103
103
|
const methodInvocationLineMatcher =
|
|
104
|
-
/(?:self\.moduleName\s*=\s*"([^"]*)")|(?:factory\.startReactNative\()/;
|
|
104
|
+
/(?:self\.moduleName\s*=\s*"([^"]*)")|(?:factory\.startReactNative\()|(?:return\s+super\.application\(\s*application\s*,\s*didFinishLaunchingWithOptions:\s*launchOptions\s*\))/;
|
|
105
105
|
|
|
106
106
|
// Add import
|
|
107
107
|
contents = addImport(
|
|
108
108
|
contents,
|
|
109
109
|
'import FirebaseCore',
|
|
110
110
|
/^[ \t]*import\s+FirebaseCore[ \t]*$/m,
|
|
111
|
-
/^[ \t]*import\s+Expo[ \t]*$/m,
|
|
111
|
+
/^[ \t]*(?:internal\s+)?import\s+Expo[ \t]*$/m,
|
|
112
112
|
/^[ \t]*import\b[^\r\n]*$/m,
|
|
113
113
|
);
|
|
114
114
|
|
|
@@ -1,39 +1,36 @@
|
|
|
1
1
|
import { ConfigPlugin, withPodfile } from '@expo/config-plugins';
|
|
2
|
-
import {
|
|
3
|
-
mergeContents,
|
|
4
|
-
removeGeneratedContents,
|
|
5
|
-
} from '@expo/config-plugins/build/utils/generateCode';
|
|
2
|
+
import { removeGeneratedContents } from '@expo/config-plugins/build/utils/generateCode';
|
|
6
3
|
|
|
7
4
|
import { PluginConfigType } from '../pluginConfig';
|
|
8
5
|
|
|
9
6
|
const TAG = '@react-native-firebase/app-disableSPM';
|
|
10
|
-
const ANCHOR = /prepare_react_native_project!/;
|
|
11
|
-
const FLAG = '$RNFirebaseDisableSPM = true';
|
|
12
7
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
8
|
+
const DISABLE_SPM_UNSUPPORTED =
|
|
9
|
+
'[react-native-firebase] ios.disableSPM is no longer supported. ' +
|
|
10
|
+
'Firebase Apple SDK 13+ is distributed only through Swift Package Manager. ' +
|
|
11
|
+
'Remove `disableSPM` from the `@react-native-firebase/app` config plugin and ' +
|
|
12
|
+
'use dynamic frameworks (`expo-build-properties` ios.useFrameworks: "dynamic"). ' +
|
|
13
|
+
'See https://rnfirebase.io/ios-spm';
|
|
14
|
+
|
|
15
|
+
// Historically injected `$RNFirebaseDisableSPM = true` before target blocks.
|
|
16
|
+
// Firebase 13+ is SPM-only: enabling this option must fail loudly, and any
|
|
17
|
+
// leftover generated flag is stripped on prebuild.
|
|
16
18
|
export function setAppPodfileDisableSPM(src: string, enabled: boolean = false): string {
|
|
17
|
-
if (
|
|
18
|
-
|
|
19
|
+
if (enabled) {
|
|
20
|
+
throw new Error(DISABLE_SPM_UNSUPPORTED);
|
|
19
21
|
}
|
|
20
22
|
|
|
21
|
-
return
|
|
22
|
-
src,
|
|
23
|
-
newSrc: FLAG,
|
|
24
|
-
tag: TAG,
|
|
25
|
-
anchor: ANCHOR,
|
|
26
|
-
offset: 1,
|
|
27
|
-
comment: '#',
|
|
28
|
-
}).contents;
|
|
23
|
+
return removeGeneratedContents(src, TAG) ?? src;
|
|
29
24
|
}
|
|
30
25
|
|
|
31
26
|
export const withIosDisableSPM: ConfigPlugin<PluginConfigType> = (config, props) => {
|
|
27
|
+
if (props?.ios?.disableSPM === true) {
|
|
28
|
+
throw new Error(DISABLE_SPM_UNSUPPORTED);
|
|
29
|
+
}
|
|
30
|
+
|
|
32
31
|
return withPodfile(config, config => {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
props?.ios?.disableSPM === true,
|
|
36
|
-
);
|
|
32
|
+
// Strip a leftover DisableSPM flag from older prebuilds; never re-add it.
|
|
33
|
+
config.modResults.contents = setAppPodfileDisableSPM(config.modResults.contents, false);
|
|
37
34
|
|
|
38
35
|
return config;
|
|
39
36
|
});
|