@react-native-firebase/app 26.3.3 → 27.0.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 +75 -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 +208 -60
- 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 +144 -13
- 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 -23
- package/dist/module/FirebaseApp.js +10 -0
- package/dist/module/FirebaseApp.js.map +1 -1
- package/dist/module/common/Base64.js +13 -21
- package/dist/module/common/Base64.js.map +1 -1
- package/dist/module/common/deeps.js +3 -0
- package/dist/module/common/deeps.js.map +1 -1
- package/dist/module/common/index.js +17 -9
- package/dist/module/common/index.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/asyncStorage.js +7 -11
- package/dist/module/internal/asyncStorage.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/logger.js +44 -40
- package/dist/module/internal/logger.js.map +1 -1
- package/dist/module/internal/nativeModuleAndroidIos.js +2 -29
- package/dist/module/internal/nativeModuleAndroidIos.js.map +1 -1
- package/dist/module/internal/nativeModuleDebug.js +74 -0
- package/dist/module/internal/nativeModuleDebug.js.map +1 -0
- package/dist/module/internal/nativeModuleWeb.js +9 -29
- package/dist/module/internal/nativeModuleWeb.js.map +1 -1
- package/dist/module/internal/registry/app.js +8 -2
- package/dist/module/internal/registry/app.js.map +1 -1
- package/dist/module/internal/registry/modular.js +2 -2
- package/dist/module/internal/registry/modular.js.map +1 -1
- package/dist/module/internal/registry/nativeModule.js +3 -3
- package/dist/module/internal/registry/nativeModule.js.map +1 -1
- package/dist/module/internal/web/RNFBAppModule.js +16 -15
- package/dist/module/internal/web/RNFBAppModule.js.map +1 -1
- package/dist/module/internal/web/memidb/lib/FakeEventTarget.js +3 -1
- package/dist/module/internal/web/memidb/lib/FakeEventTarget.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/Base64.d.ts.map +1 -1
- package/dist/typescript/lib/common/deeps.d.ts.map +1 -1
- package/dist/typescript/lib/common/index.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/asyncStorage.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/logger.d.ts.map +1 -1
- package/dist/typescript/lib/internal/nativeModuleAndroidIos.d.ts.map +1 -1
- package/dist/typescript/lib/internal/nativeModuleDebug.d.ts +2 -0
- package/dist/typescript/lib/internal/nativeModuleDebug.d.ts.map +1 -0
- package/dist/typescript/lib/internal/nativeModuleWeb.d.ts.map +1 -1
- package/dist/typescript/lib/internal/registry/app.d.ts.map +1 -1
- package/dist/typescript/lib/internal/web/RNFBAppModule.d.ts +7 -7
- package/dist/typescript/lib/internal/web/RNFBAppModule.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 +5 -1
- 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 +67 -204
- 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.h +73 -0
- package/ios/RNFBApp/RNFBHandleMap.m +87 -0
- 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 -197
- 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 +106 -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 +590 -0
- package/ios/RNFBAppUnitTests/RNFBAppUnitTests.xcodeproj/xcshareddata/xcschemes/RNFBAppUnitTests.xcscheme +69 -0
- package/ios/RNFBAppUnitTests/RNFBFirebaseAppClientTests.swift +165 -0
- package/ios/RNFBAppUnitTests/RNFBHandleMapStorageTests.swift +121 -0
- package/ios/RNFBAppUnitTests/RNFBHandleMapTests.m +238 -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/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseAppRegistrar.java → ios/RNFBFirebaseUnitTests/RNFBFirebaseClientImport.swift} +22 -17
- 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/Base64.ts +10 -16
- package/lib/common/deeps.ts +3 -0
- package/lib/common/index.ts +20 -9
- 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/asyncStorage.ts +7 -11
- package/lib/internal/index.ts +1 -0
- package/lib/internal/logger.ts +53 -43
- package/lib/internal/nativeModuleAndroidIos.ts +2 -40
- package/lib/internal/nativeModuleDebug.ts +97 -0
- package/lib/internal/nativeModuleWeb.ts +10 -40
- package/lib/internal/react-native-vendor-emitter.d.ts +11 -0
- package/lib/internal/registry/app.ts +8 -2
- package/lib/internal/registry/modular.ts +2 -2
- package/lib/internal/registry/nativeModule.ts +3 -3
- package/lib/internal/web/RNFBAppModule.ts +16 -15
- package/lib/internal/web/memidb/lib/FakeEventTarget.js +3 -1
- package/lib/types/app.ts +10 -3
- package/lib/types/internal.ts +19 -0
- package/lib/version.ts +1 -1
- package/package.json +9 -8
- package/plugin/build/ios/appDelegate.js +19 -9
- package/plugin/build/ios/podfile.js +16 -16
- package/plugin/build/pluginConfig.d.ts +4 -2
- package/plugin/src/ios/appDelegate.ts +45 -15
- package/plugin/src/ios/podfile.ts +20 -23
- package/plugin/src/pluginConfig.ts +4 -2
- package/android/src/main/java/io/invertase/firebase/common/TaskExecutorService.java +0 -124
- 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 -222
- 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/common/RCTConvertFirebase.java +0 -191
- 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 -107
- 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/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/Base64.ts
CHANGED
|
@@ -17,7 +17,6 @@
|
|
|
17
17
|
|
|
18
18
|
// @ts-expect-error - No type declarations available
|
|
19
19
|
import binaryToBase64 from 'react-native/Libraries/Utilities/binaryToBase64';
|
|
20
|
-
import { promiseDefer } from './promise';
|
|
21
20
|
|
|
22
21
|
const CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
|
|
23
22
|
|
|
@@ -90,23 +89,18 @@ export interface Base64Result {
|
|
|
90
89
|
*/
|
|
91
90
|
function fromData(data: Blob | ArrayBuffer | Uint8Array): Promise<Base64Result> {
|
|
92
91
|
if (data instanceof Blob) {
|
|
93
|
-
|
|
94
|
-
|
|
92
|
+
return new Promise<Base64Result>((resolve, reject) => {
|
|
93
|
+
const fileReader = new FileReader();
|
|
95
94
|
|
|
96
|
-
|
|
95
|
+
fileReader.onloadend = () => {
|
|
96
|
+
if (fileReader.result) {
|
|
97
|
+
resolve({ string: fileReader.result, format: 'data_url' });
|
|
98
|
+
}
|
|
99
|
+
};
|
|
97
100
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
fileReader.onerror = event => {
|
|
105
|
-
fileReader?.abort();
|
|
106
|
-
reject?.(event);
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
return promise;
|
|
101
|
+
fileReader.onerror = event => reject(event);
|
|
102
|
+
fileReader.readAsDataURL(data);
|
|
103
|
+
});
|
|
110
104
|
}
|
|
111
105
|
|
|
112
106
|
if (data instanceof ArrayBuffer || data instanceof Uint8Array) {
|
package/lib/common/deeps.ts
CHANGED
package/lib/common/index.ts
CHANGED
|
@@ -30,18 +30,29 @@ export { default as ReferenceBase } from './ReferenceBase';
|
|
|
30
30
|
export type { DataUrlParts, Observer };
|
|
31
31
|
|
|
32
32
|
export function getDataUrlParts(dataUrlString: string): DataUrlParts {
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
if (!mediaType || !base64String) {
|
|
33
|
+
const match = /^data:([^,]*?)(;base64)?,([\s\S]*)$/.exec(dataUrlString);
|
|
34
|
+
if (!match) {
|
|
36
35
|
return { base64String: undefined, mediaType: undefined };
|
|
37
36
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
base64String
|
|
37
|
+
|
|
38
|
+
const mediaType = match[1] || undefined;
|
|
39
|
+
let base64String = match[3] ?? '';
|
|
40
|
+
|
|
41
|
+
try {
|
|
42
|
+
if (base64String.includes('%')) {
|
|
43
|
+
base64String = decodeURIComponent(base64String);
|
|
44
|
+
}
|
|
45
|
+
if (!match[2]) {
|
|
46
|
+
const binaryString = encodeURIComponent(base64String).replace(
|
|
47
|
+
/%([0-9A-F]{2})/g,
|
|
48
|
+
(_, hex: string) => String.fromCharCode(Number.parseInt(hex, 16)),
|
|
49
|
+
);
|
|
50
|
+
base64String = Base64.btoa(binaryString);
|
|
51
|
+
}
|
|
52
|
+
} catch (_) {
|
|
53
|
+
return { base64String: undefined, mediaType: undefined };
|
|
44
54
|
}
|
|
55
|
+
|
|
45
56
|
return { base64String, mediaType };
|
|
46
57
|
}
|
|
47
58
|
|
|
@@ -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;
|
|
@@ -29,11 +29,7 @@ const asyncStorageMemory: AsyncStorageStatic = {
|
|
|
29
29
|
return Promise.resolve();
|
|
30
30
|
},
|
|
31
31
|
getItem(key: string): Promise<string | null> {
|
|
32
|
-
|
|
33
|
-
if (hasValue) {
|
|
34
|
-
return Promise.resolve(memoryStorage.get(key) || null);
|
|
35
|
-
}
|
|
36
|
-
return Promise.resolve(null);
|
|
32
|
+
return Promise.resolve(memoryStorage.get(key) ?? null);
|
|
37
33
|
},
|
|
38
34
|
removeItem(key: string): Promise<void> {
|
|
39
35
|
memoryStorage.delete(key);
|
|
@@ -61,16 +57,16 @@ export function isMemoryStorage(): boolean {
|
|
|
61
57
|
}
|
|
62
58
|
|
|
63
59
|
// Set an item in storage with the React Native Firebase prefix
|
|
64
|
-
export
|
|
65
|
-
return
|
|
60
|
+
export function setItem(key: string, value: string): Promise<void> {
|
|
61
|
+
return asyncStorage.setItem(prefix + key, value);
|
|
66
62
|
}
|
|
67
63
|
|
|
68
64
|
// Get an item from storage with the React Native Firebase prefix
|
|
69
|
-
export
|
|
70
|
-
return
|
|
65
|
+
export function getItem(key: string): Promise<string | null> {
|
|
66
|
+
return asyncStorage.getItem(prefix + key);
|
|
71
67
|
}
|
|
72
68
|
|
|
73
69
|
// Remove an item from storage with the React Native Firebase prefix
|
|
74
|
-
export
|
|
75
|
-
return
|
|
70
|
+
export function removeItem(key: string): Promise<void> {
|
|
71
|
+
return asyncStorage.removeItem(prefix + key);
|
|
76
72
|
}
|
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';
|
package/lib/internal/logger.ts
CHANGED
|
@@ -108,6 +108,50 @@ const defaultLogHandler: LogHandler = (instance, logType, ...args) => {
|
|
|
108
108
|
|
|
109
109
|
const defaultLogLevel = LogLevel.INFO;
|
|
110
110
|
|
|
111
|
+
let currentLogLevel = defaultLogLevel;
|
|
112
|
+
let currentUserLogHandler: LogHandler | null = null;
|
|
113
|
+
|
|
114
|
+
function createUserLogHandler(
|
|
115
|
+
logCallback: LogCallback | null,
|
|
116
|
+
options?: LogOptions,
|
|
117
|
+
): LogHandler | null {
|
|
118
|
+
if (logCallback === null) {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const customLogLevel = options?.level ? levelStringToEnum[options.level] : null;
|
|
123
|
+
return (instance, level, ...args) => {
|
|
124
|
+
const message = args
|
|
125
|
+
.map(arg => {
|
|
126
|
+
if (arg == null) {
|
|
127
|
+
return null;
|
|
128
|
+
} else if (typeof arg === 'string') {
|
|
129
|
+
return arg;
|
|
130
|
+
} else if (typeof arg === 'number' || typeof arg === 'boolean') {
|
|
131
|
+
return arg.toString();
|
|
132
|
+
} else if (arg instanceof Error) {
|
|
133
|
+
return arg.message;
|
|
134
|
+
} else {
|
|
135
|
+
try {
|
|
136
|
+
return JSON.stringify(arg);
|
|
137
|
+
} catch (_ignored) {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
})
|
|
142
|
+
.filter(arg => arg)
|
|
143
|
+
.join(' ');
|
|
144
|
+
if (level >= (customLogLevel ?? instance.logLevel)) {
|
|
145
|
+
logCallback({
|
|
146
|
+
level: LogLevelReversed[level]!.toLowerCase() as LogLevelString,
|
|
147
|
+
message,
|
|
148
|
+
args,
|
|
149
|
+
type: instance.name,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
|
|
111
155
|
/**
|
|
112
156
|
* A container for all of the Logger instances
|
|
113
157
|
*/
|
|
@@ -118,9 +162,9 @@ export const instances: Logger[] = [];
|
|
|
118
162
|
*/
|
|
119
163
|
export class Logger {
|
|
120
164
|
name: string;
|
|
121
|
-
private _logLevel: LogLevel =
|
|
165
|
+
private _logLevel: LogLevel = currentLogLevel;
|
|
122
166
|
private _logHandler: LogHandler = defaultLogHandler;
|
|
123
|
-
private _userLogHandler: LogHandler | null =
|
|
167
|
+
private _userLogHandler: LogHandler | null = currentUserLogHandler;
|
|
124
168
|
|
|
125
169
|
/**
|
|
126
170
|
* Gives you an instance of a Logger to capture messages according to
|
|
@@ -215,9 +259,11 @@ export class Logger {
|
|
|
215
259
|
* Sets the log level for all Logger instances
|
|
216
260
|
*/
|
|
217
261
|
export function setLogLevel(level: LogLevelString | LogLevel): void {
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
262
|
+
const normalizedLevel = typeof level === 'string' ? levelStringToEnum[level] : level;
|
|
263
|
+
currentLogLevel = normalizedLevel;
|
|
264
|
+
for (const instance of instances) {
|
|
265
|
+
instance.setLogLevel(normalizedLevel);
|
|
266
|
+
}
|
|
221
267
|
}
|
|
222
268
|
|
|
223
269
|
// Alias for compatibility
|
|
@@ -227,44 +273,8 @@ export const setLogLevelInternal = setLogLevel;
|
|
|
227
273
|
* Sets a custom user log handler for all Logger instances
|
|
228
274
|
*/
|
|
229
275
|
export function setUserLogHandler(logCallback: LogCallback | null, options?: LogOptions): void {
|
|
276
|
+
currentUserLogHandler = createUserLogHandler(logCallback, options);
|
|
230
277
|
for (const instance of instances) {
|
|
231
|
-
|
|
232
|
-
if (options?.level) {
|
|
233
|
-
customLogLevel = levelStringToEnum[options.level];
|
|
234
|
-
}
|
|
235
|
-
if (logCallback === null) {
|
|
236
|
-
instance.userLogHandler = null;
|
|
237
|
-
} else {
|
|
238
|
-
instance.userLogHandler = (_instance, level, ...args) => {
|
|
239
|
-
const message = args
|
|
240
|
-
.map(arg => {
|
|
241
|
-
if (arg == null) {
|
|
242
|
-
return null;
|
|
243
|
-
} else if (typeof arg === 'string') {
|
|
244
|
-
return arg;
|
|
245
|
-
} else if (typeof arg === 'number' || typeof arg === 'boolean') {
|
|
246
|
-
return arg.toString();
|
|
247
|
-
} else if (arg instanceof Error) {
|
|
248
|
-
return arg.message;
|
|
249
|
-
} else {
|
|
250
|
-
try {
|
|
251
|
-
return JSON.stringify(arg);
|
|
252
|
-
} catch (_ignored) {
|
|
253
|
-
return null;
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
})
|
|
257
|
-
.filter(arg => arg)
|
|
258
|
-
.join(' ');
|
|
259
|
-
if (level >= (customLogLevel ?? _instance.logLevel)) {
|
|
260
|
-
logCallback({
|
|
261
|
-
level: LogLevelReversed[level]!.toLowerCase() as LogLevelString,
|
|
262
|
-
message,
|
|
263
|
-
args,
|
|
264
|
-
type: _instance.name,
|
|
265
|
-
});
|
|
266
|
-
}
|
|
267
|
-
};
|
|
268
|
-
}
|
|
278
|
+
instance.userLogHandler = currentUserLogHandler;
|
|
269
279
|
}
|
|
270
280
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/* eslint-disable no-console */
|
|
2
1
|
import { TurboModuleRegistry } from 'react-native';
|
|
2
|
+
import { createNativeModuleDebugProxy } from './nativeModuleDebug';
|
|
3
3
|
|
|
4
4
|
const DYNAMIC_CONSTANT_KEYS = new Set(['androidPlayServices']);
|
|
5
5
|
|
|
@@ -64,45 +64,7 @@ export function getReactNativeModule(moduleName: string): Record<string, unknown
|
|
|
64
64
|
return debugProxy;
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
debugProxy =
|
|
68
|
-
ownKeys(target) {
|
|
69
|
-
const keys: string[] = [];
|
|
70
|
-
for (const key in target) {
|
|
71
|
-
keys.push(key);
|
|
72
|
-
}
|
|
73
|
-
return keys;
|
|
74
|
-
},
|
|
75
|
-
get: (_, name) => {
|
|
76
|
-
const prop = (nativeModule as Record<string, unknown>)[name as string];
|
|
77
|
-
if (typeof prop !== 'function') return prop;
|
|
78
|
-
return (...args: unknown[]) => {
|
|
79
|
-
console.debug(
|
|
80
|
-
`[RNFB->Native][🔵] ${moduleName}.${String(name)} -> ${JSON.stringify(args)}`,
|
|
81
|
-
);
|
|
82
|
-
const result: unknown = (prop as (...args: unknown[]) => unknown).apply(nativeModule, args);
|
|
83
|
-
if (result && typeof result === 'object' && 'then' in result) {
|
|
84
|
-
return (result as Promise<unknown>).then(
|
|
85
|
-
(res: unknown) => {
|
|
86
|
-
console.debug(
|
|
87
|
-
`[RNFB<-Native][🟢] ${moduleName}.${String(name)} <- ${JSON.stringify(res)}`,
|
|
88
|
-
);
|
|
89
|
-
return res;
|
|
90
|
-
},
|
|
91
|
-
(err: unknown) => {
|
|
92
|
-
console.debug(
|
|
93
|
-
`[RNFB<-Native][🔴] ${moduleName}.${String(name)} <- ${JSON.stringify(err)}`,
|
|
94
|
-
);
|
|
95
|
-
throw err;
|
|
96
|
-
},
|
|
97
|
-
);
|
|
98
|
-
}
|
|
99
|
-
console.debug(
|
|
100
|
-
`[RNFB<-Native][🟢] ${moduleName}.${String(name)} <- ${JSON.stringify(result)}`,
|
|
101
|
-
);
|
|
102
|
-
return result;
|
|
103
|
-
};
|
|
104
|
-
},
|
|
105
|
-
});
|
|
67
|
+
debugProxy = createNativeModuleDebugProxy(moduleName, nativeModule);
|
|
106
68
|
memoizedDebugProxies.set(moduleName, debugProxy);
|
|
107
69
|
return debugProxy;
|
|
108
70
|
}
|