@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.
Files changed (283) hide show
  1. package/CHANGELOG.md +75 -0
  2. package/README.md +10 -27
  3. package/RNFBApp.podspec +13 -5
  4. package/android/build.gradle +3 -0
  5. package/android/src/main/java/io/invertase/firebase/common/RNFBHandleCollisionException.kt +29 -0
  6. package/android/src/main/java/io/invertase/firebase/common/RNFBHandleMap.kt +146 -0
  7. package/android/src/main/java/io/invertase/firebase/common/TaskExecutorService.kt +156 -0
  8. package/android/src/main/java/io/invertase/firebase/common/UniversalFirebaseModule.kt +44 -0
  9. package/android/src/main/java/io/invertase/firebase/common/UniversalFirebasePreferences.kt +100 -0
  10. package/android/src/reactnative/java/io/invertase/firebase/app/NativeRNFBTurboApp.kt +250 -0
  11. package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseApp.kt +64 -0
  12. package/android/src/reactnative/java/io/invertase/firebase/app/{ReactNativeFirebaseAppInitProvider.java → ReactNativeFirebaseAppInitProvider.kt} +3 -4
  13. package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseAppPackage.kt +47 -0
  14. package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseAppRegistrar.kt +33 -0
  15. package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseVersion.java +1 -1
  16. package/android/src/reactnative/java/io/invertase/firebase/common/RCTConvertFirebase.kt +185 -0
  17. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseEvent.kt +35 -0
  18. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseEventEmitter.kt +662 -0
  19. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseJSON.kt +103 -0
  20. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseMeta.kt +96 -0
  21. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseModule.kt +140 -0
  22. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebasePreferences.kt +109 -0
  23. package/android/src/reactnative/java/io/invertase/firebase/common/SharedUtils.kt +451 -0
  24. package/android/src/reactnative/java/io/invertase/firebase/interfaces/{ContextProvider.java → ContextProvider.kt} +8 -8
  25. package/android/src/reactnative/java/io/invertase/firebase/interfaces/{NativeError.java → NativeError.kt} +8 -8
  26. package/android/src/reactnative/java/io/invertase/firebase/interfaces/{NativeEvent.java → NativeEvent.kt} +6 -6
  27. package/android/src/reactnative/java/io/invertase/firebase/utils/NativeRNFBTurboUtils.kt +219 -0
  28. package/android/src/test/java/expo/core/ModuleRegistry.java +9 -0
  29. package/android/src/test/java/io/invertase/firebase/app/NativeRNFBTurboAppTest.java +208 -60
  30. package/android/src/test/java/io/invertase/firebase/app/ReactNativeFirebaseAppComponentsJavaCompatibilityTest.java +70 -0
  31. package/android/src/test/java/io/invertase/firebase/app/ReactNativeFirebaseAppJavaCompatibilityTest.java +60 -0
  32. package/android/src/test/java/io/invertase/firebase/app/ReactNativeFirebaseAppPackageTest.java +165 -0
  33. package/android/src/test/java/io/invertase/firebase/app/ReactNativeFirebaseAppTest.kt +167 -0
  34. package/android/src/test/java/io/invertase/firebase/common/RCTConvertFirebaseJavaCompatibilityTest.java +112 -0
  35. package/android/src/test/java/io/invertase/firebase/common/RCTConvertFirebaseTest.kt +317 -0
  36. package/android/src/test/java/io/invertase/firebase/common/RNFBHandleMapTest.kt +309 -0
  37. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseEventEmitterJavaCompatibilityTest.java +176 -0
  38. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseEventEmitterTest.java +144 -13
  39. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseEventTest.kt +61 -0
  40. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseJSONJavaCompatibilityTest.java +85 -0
  41. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseJSONTest.kt +296 -0
  42. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseMetaJavaCompatibilityTest.java +67 -0
  43. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseMetaTest.kt +246 -0
  44. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseModuleTest.kt +254 -0
  45. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebasePreferencesJavaCompatibilityTest.java +87 -0
  46. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebasePreferencesTest.kt +260 -0
  47. package/android/src/test/java/io/invertase/firebase/common/SharedUtilsJavaCompatibilityTest.java +255 -0
  48. package/android/src/test/java/io/invertase/firebase/common/SharedUtilsTest.kt +674 -0
  49. package/android/src/test/java/io/invertase/firebase/common/TaskExecutorServiceTest.kt +290 -0
  50. package/android/src/test/java/io/invertase/firebase/common/UniversalFirebaseModuleJavaCompatibilityTest.java +178 -0
  51. package/android/src/test/java/io/invertase/firebase/common/UniversalFirebasePreferencesJavaCompatibilityTest.java +99 -0
  52. package/android/src/test/java/io/invertase/firebase/common/UniversalFirebasePreferencesTest.kt +217 -0
  53. package/android/src/test/java/io/invertase/firebase/commoncompat/ReactNativeFirebaseModuleJavaCompatibilityTest.java +176 -0
  54. package/android/src/test/java/io/invertase/firebase/commoncompat/ReactNativeFirebaseModuleKotlinCompatibilityTest.kt +52 -0
  55. package/android/src/test/java/io/invertase/firebase/interfaces/InterfacesJavaCompatibilityTest.java +144 -0
  56. package/android/src/test/java/io/invertase/firebase/interfaces/NativeEventTest.kt +56 -0
  57. package/android/src/test/java/io/invertase/firebase/utils/NativeRNFBTurboUtilsTest.java +517 -23
  58. package/dist/module/FirebaseApp.js +10 -0
  59. package/dist/module/FirebaseApp.js.map +1 -1
  60. package/dist/module/common/Base64.js +13 -21
  61. package/dist/module/common/Base64.js.map +1 -1
  62. package/dist/module/common/deeps.js +3 -0
  63. package/dist/module/common/deeps.js.map +1 -1
  64. package/dist/module/common/index.js +17 -9
  65. package/dist/module/common/index.js.map +1 -1
  66. package/dist/module/internal/FirebaseModule.js.map +1 -1
  67. package/dist/module/internal/RNFBNativeEventEmitter.js +12 -1
  68. package/dist/module/internal/RNFBNativeEventEmitter.js.map +1 -1
  69. package/dist/module/internal/SharedEventEmitter.js +3 -1
  70. package/dist/module/internal/SharedEventEmitter.js.map +1 -1
  71. package/dist/module/internal/asyncStorage.js +7 -11
  72. package/dist/module/internal/asyncStorage.js.map +1 -1
  73. package/dist/module/internal/index.js +1 -0
  74. package/dist/module/internal/index.js.map +1 -1
  75. package/dist/module/internal/logger.js +44 -40
  76. package/dist/module/internal/logger.js.map +1 -1
  77. package/dist/module/internal/nativeModuleAndroidIos.js +2 -29
  78. package/dist/module/internal/nativeModuleAndroidIos.js.map +1 -1
  79. package/dist/module/internal/nativeModuleDebug.js +74 -0
  80. package/dist/module/internal/nativeModuleDebug.js.map +1 -0
  81. package/dist/module/internal/nativeModuleWeb.js +9 -29
  82. package/dist/module/internal/nativeModuleWeb.js.map +1 -1
  83. package/dist/module/internal/registry/app.js +8 -2
  84. package/dist/module/internal/registry/app.js.map +1 -1
  85. package/dist/module/internal/registry/modular.js +2 -2
  86. package/dist/module/internal/registry/modular.js.map +1 -1
  87. package/dist/module/internal/registry/nativeModule.js +3 -3
  88. package/dist/module/internal/registry/nativeModule.js.map +1 -1
  89. package/dist/module/internal/web/RNFBAppModule.js +16 -15
  90. package/dist/module/internal/web/RNFBAppModule.js.map +1 -1
  91. package/dist/module/internal/web/memidb/lib/FakeEventTarget.js +3 -1
  92. package/dist/module/internal/web/memidb/lib/FakeEventTarget.js.map +1 -1
  93. package/dist/module/types/app.js.map +1 -1
  94. package/dist/module/types/internal.js +2 -0
  95. package/dist/module/version.js +1 -1
  96. package/dist/typescript/lib/FirebaseApp.d.ts +7 -0
  97. package/dist/typescript/lib/FirebaseApp.d.ts.map +1 -1
  98. package/dist/typescript/lib/common/Base64.d.ts.map +1 -1
  99. package/dist/typescript/lib/common/deeps.d.ts.map +1 -1
  100. package/dist/typescript/lib/common/index.d.ts.map +1 -1
  101. package/dist/typescript/lib/internal/FirebaseModule.d.ts +2 -3
  102. package/dist/typescript/lib/internal/FirebaseModule.d.ts.map +1 -1
  103. package/dist/typescript/lib/internal/NativeModules.d.ts +4 -1
  104. package/dist/typescript/lib/internal/NativeModules.d.ts.map +1 -1
  105. package/dist/typescript/lib/internal/RNFBNativeEventEmitter.d.ts +2 -2
  106. package/dist/typescript/lib/internal/RNFBNativeEventEmitter.d.ts.map +1 -1
  107. package/dist/typescript/lib/internal/SharedEventEmitter.d.ts +3 -3
  108. package/dist/typescript/lib/internal/SharedEventEmitter.d.ts.map +1 -1
  109. package/dist/typescript/lib/internal/asyncStorage.d.ts.map +1 -1
  110. package/dist/typescript/lib/internal/index.d.ts +1 -0
  111. package/dist/typescript/lib/internal/index.d.ts.map +1 -1
  112. package/dist/typescript/lib/internal/logger.d.ts.map +1 -1
  113. package/dist/typescript/lib/internal/nativeModuleAndroidIos.d.ts.map +1 -1
  114. package/dist/typescript/lib/internal/nativeModuleDebug.d.ts +2 -0
  115. package/dist/typescript/lib/internal/nativeModuleDebug.d.ts.map +1 -0
  116. package/dist/typescript/lib/internal/nativeModuleWeb.d.ts.map +1 -1
  117. package/dist/typescript/lib/internal/registry/app.d.ts.map +1 -1
  118. package/dist/typescript/lib/internal/web/RNFBAppModule.d.ts +7 -7
  119. package/dist/typescript/lib/internal/web/RNFBAppModule.d.ts.map +1 -1
  120. package/dist/typescript/lib/types/app.d.ts +10 -3
  121. package/dist/typescript/lib/types/app.d.ts.map +1 -1
  122. package/dist/typescript/lib/types/internal.d.ts +12 -0
  123. package/dist/typescript/lib/types/internal.d.ts.map +1 -1
  124. package/dist/typescript/lib/version.d.ts +1 -1
  125. package/firebase-schema.json +5 -1
  126. package/firebase_spm.rb +552 -96
  127. package/ios/RNFBApp/RCTConvert+FIRApp.h +2 -5
  128. package/ios/RNFBApp/RCTConvert+FIRApp.m +11 -6
  129. package/ios/RNFBApp/RCTConvert+FIROptions.h +2 -5
  130. package/ios/RNFBApp/RCTConvert+FIROptions.m +11 -10
  131. package/ios/RNFBApp/RCTConvertFIRApp.swift +86 -0
  132. package/ios/RNFBApp/RCTConvertFIROptions.swift +259 -0
  133. package/ios/RNFBApp/RNFBAppCustomAuthDomains.swift +63 -0
  134. package/ios/RNFBApp/RNFBAppInitializeOptionsMapper.swift +113 -0
  135. package/ios/RNFBApp/RNFBAppLogLevelMapper.swift +53 -0
  136. package/ios/RNFBApp/RNFBAppModule+CustomAuthDomain.m +35 -0
  137. package/ios/RNFBApp/RNFBAppModule.h +6 -2
  138. package/ios/RNFBApp/RNFBAppModule.mm +67 -204
  139. package/ios/RNFBApp/RNFBAppModuleFirebase.swift +439 -0
  140. package/ios/RNFBApp/RNFBAppModuleImplementation.h +68 -0
  141. package/ios/RNFBApp/RNFBAppModuleImplementation.m +195 -0
  142. package/ios/RNFBApp/RNFBHandleMap.h +73 -0
  143. package/ios/RNFBApp/RNFBHandleMap.m +87 -0
  144. package/ios/RNFBApp/RNFBHandleMapStorage.swift +90 -0
  145. package/ios/RNFBApp/RNFBInitializeAppArguments.swift +82 -0
  146. package/ios/RNFBApp/RNFBJSON.m +22 -38
  147. package/ios/RNFBApp/RNFBJSONImplementation.swift +71 -0
  148. package/ios/RNFBApp/RNFBMeta.m +24 -26
  149. package/ios/RNFBApp/RNFBMetaStorage.swift +76 -0
  150. package/ios/RNFBApp/RNFBNullSentinelDecoding.swift +135 -0
  151. package/ios/RNFBApp/RNFBNullSentinelInterceptor.h +30 -3
  152. package/ios/RNFBApp/RNFBNullSentinelInterceptor.m +28 -5
  153. package/ios/RNFBApp/RNFBPreferences.m +22 -20
  154. package/ios/RNFBApp/RNFBPreferencesStorage.swift +101 -0
  155. package/ios/RNFBApp/RNFBRCTEventEmitter.m +36 -93
  156. package/ios/RNFBApp/RNFBRCTEventEmitterCore.swift +161 -0
  157. package/ios/RNFBApp/RNFBSharedUtils.h +2 -5
  158. package/ios/RNFBApp/RNFBSharedUtils.m +109 -197
  159. package/ios/RNFBApp/RNFBSharedUtilsConfig.swift +72 -0
  160. package/ios/RNFBApp/RNFBSharedUtilsFIRApp.swift +271 -0
  161. package/ios/RNFBApp/RNFBSharedUtilsFormatting.swift +59 -0
  162. package/ios/RNFBApp/RNFBSharedUtilsPromiseRejection.swift +88 -0
  163. package/ios/RNFBApp/RNFBUtilsHelpers.swift +116 -0
  164. package/ios/RNFBApp/RNFBUtilsModule+Foundation.m +44 -0
  165. package/ios/RNFBApp/RNFBUtilsModule+PhotoAssets.m +47 -0
  166. package/ios/RNFBApp/RNFBUtilsModule.h +11 -1
  167. package/ios/RNFBApp/RNFBUtilsModule.mm +10 -85
  168. package/ios/RNFBApp/RNFBUtilsModuleImplementation.h +32 -0
  169. package/ios/RNFBApp/RNFBUtilsModuleImplementation.m +56 -0
  170. package/ios/RNFBApp/RNFBVersion.m +1 -1
  171. package/ios/RNFBApp.xcodeproj/project.pbxproj +106 -0
  172. package/ios/RNFBAppUnitTests/HostStubs/FirebaseCore/FIRApp.m +171 -0
  173. package/ios/RNFBAppUnitTests/HostStubs/FirebaseCore/FirebaseCore.h +78 -0
  174. package/ios/RNFBAppUnitTests/HostStubs/FirebaseInstallations/FIRInstallations.m +7 -0
  175. package/ios/RNFBAppUnitTests/HostStubs/FirebaseInstallations/FirebaseInstallations.h +8 -0
  176. package/ios/RNFBAppUnitTests/HostStubs/RNFBAppModuleHostStub.m +55 -0
  177. package/ios/RNFBAppUnitTests/HostStubs/RNFBAppTurboModules.h +89 -0
  178. package/ios/RNFBAppUnitTests/HostStubs/RNFBAppTurboModules.mm +30 -0
  179. package/ios/RNFBAppUnitTests/HostStubs/React/RCTBridge.h +19 -0
  180. package/ios/RNFBAppUnitTests/HostStubs/React/RCTBridge.m +32 -0
  181. package/ios/RNFBAppUnitTests/HostStubs/React/RCTBridgeModule.h +19 -0
  182. package/ios/RNFBAppUnitTests/HostStubs/React/RCTConvert.h +28 -0
  183. package/ios/RNFBAppUnitTests/HostStubs/React/RCTConvert.m +23 -0
  184. package/ios/RNFBAppUnitTests/HostStubs/React/RCTEventEmitter.h +9 -0
  185. package/ios/RNFBAppUnitTests/HostStubs/React/RCTInvalidating.h +24 -0
  186. package/ios/RNFBAppUnitTests/HostStubs/React/RCTUtils.h +9 -0
  187. package/ios/RNFBAppUnitTests/HostStubs/module.modulemap +13 -0
  188. package/ios/RNFBAppUnitTests/RCTConvertFIRAppFacadeTests.m +61 -0
  189. package/ios/RNFBAppUnitTests/RCTConvertFIRAppTests.swift +73 -0
  190. package/ios/RNFBAppUnitTests/RCTConvertFIROptionsFacadeTests.m +57 -0
  191. package/ios/RNFBAppUnitTests/RCTConvertFIROptionsTests.swift +243 -0
  192. package/ios/RNFBAppUnitTests/RNFBAppCustomAuthDomainsFacadeTests.m +73 -0
  193. package/ios/RNFBAppUnitTests/RNFBAppCustomAuthDomainsTests.swift +70 -0
  194. package/ios/RNFBAppUnitTests/RNFBAppInitializeOptionsMapperTests.swift +190 -0
  195. package/ios/RNFBAppUnitTests/RNFBAppLogLevelFacadeTests.m +76 -0
  196. package/ios/RNFBAppUnitTests/RNFBAppLogLevelMapperTests.swift +59 -0
  197. package/ios/RNFBAppUnitTests/RNFBAppModuleFirebaseFacadeTests.m +215 -0
  198. package/ios/RNFBAppUnitTests/RNFBAppModuleFirebaseTests.swift +430 -0
  199. package/ios/RNFBAppUnitTests/RNFBAppModuleLifecycleTests.m +206 -0
  200. package/ios/RNFBAppUnitTests/RNFBAppModuleShellTests.mm +367 -0
  201. package/ios/RNFBAppUnitTests/RNFBAppUnitTests.xcodeproj/project.pbxproj +590 -0
  202. package/ios/RNFBAppUnitTests/RNFBAppUnitTests.xcodeproj/xcshareddata/xcschemes/RNFBAppUnitTests.xcscheme +69 -0
  203. package/ios/RNFBAppUnitTests/RNFBFirebaseAppClientTests.swift +165 -0
  204. package/ios/RNFBAppUnitTests/RNFBHandleMapStorageTests.swift +121 -0
  205. package/ios/RNFBAppUnitTests/RNFBHandleMapTests.m +238 -0
  206. package/ios/RNFBAppUnitTests/RNFBInitializeAppArgumentsTests.swift +256 -0
  207. package/ios/RNFBAppUnitTests/RNFBJSONImplementationTests.swift +126 -0
  208. package/ios/RNFBAppUnitTests/RNFBJSONTests.m +172 -0
  209. package/ios/RNFBAppUnitTests/RNFBMetaStorageTests.swift +106 -0
  210. package/ios/RNFBAppUnitTests/RNFBMetaTests.m +65 -0
  211. package/ios/RNFBAppUnitTests/RNFBNullSentinelDecodingTests.swift +286 -0
  212. package/ios/RNFBAppUnitTests/RNFBNullSentinelInterceptorTests.m +312 -0
  213. package/ios/RNFBAppUnitTests/RNFBPreferencesStorageTests.swift +105 -0
  214. package/ios/RNFBAppUnitTests/RNFBPreferencesTests.m +110 -0
  215. package/ios/RNFBAppUnitTests/RNFBRCTEventEmitterCoreTests.swift +163 -0
  216. package/ios/RNFBAppUnitTests/RNFBRCTEventEmitterFacadeTests.m +141 -0
  217. package/ios/RNFBAppUnitTests/RNFBSharedUtilsConfigFacadeTests.m +100 -0
  218. package/ios/RNFBAppUnitTests/RNFBSharedUtilsConfigTests.swift +234 -0
  219. package/ios/RNFBAppUnitTests/RNFBSharedUtilsFIRAppFacadeTests.m +145 -0
  220. package/ios/RNFBAppUnitTests/RNFBSharedUtilsFIRAppTests.swift +173 -0
  221. package/ios/RNFBAppUnitTests/RNFBSharedUtilsFormattingFacadeTests.m +38 -0
  222. package/ios/RNFBAppUnitTests/RNFBSharedUtilsFormattingTests.swift +82 -0
  223. package/ios/RNFBAppUnitTests/RNFBSharedUtilsNullSentinelTests.m +35 -0
  224. package/ios/RNFBAppUnitTests/RNFBSharedUtilsPromiseRejectionFacadeTests.m +107 -0
  225. package/ios/RNFBAppUnitTests/RNFBSharedUtilsPromiseRejectionTests.swift +133 -0
  226. package/ios/RNFBAppUnitTests/RNFBUtilsHelpersTests.swift +144 -0
  227. package/ios/RNFBAppUnitTests/RNFBUtilsModuleFacadeTests.m +72 -0
  228. package/ios/RNFBAppUnitTests/RNFBUtilsModuleShellTests.mm +282 -0
  229. package/ios/RNFBFirebase/Package.swift +53 -0
  230. package/ios/RNFBFirebase/Sources/RNFBFirebase/RNFBFirebase.swift +285 -0
  231. package/ios/RNFBFirebase/Sources/RNFBFirebaseBridge/Public/.gitkeep +0 -0
  232. package/ios/RNFBFirebase/Sources/RNFBFirebaseBridge/RNFBFirebaseBridge.m +169 -0
  233. package/ios/RNFBFirebase/Sources/RNFBFirebaseBridge/include/RNFBFirebaseBridge.h +52 -0
  234. package/ios/RNFBFirebaseUnitTests/RNFBAppDynamicFacadeTests.swift +240 -0
  235. package/{android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseAppRegistrar.java → ios/RNFBFirebaseUnitTests/RNFBFirebaseClientImport.swift} +22 -17
  236. package/ios/RNFBFirebaseUnitTests/RNFBFirebaseUnitTests.xcodeproj/project.pbxproj +588 -0
  237. package/ios/RNFBFirebaseUnitTests/RNFBFirebaseUnitTests.xcodeproj/xcshareddata/xcschemes/RNFBFirebaseUnitTests.xcscheme +83 -0
  238. package/ios_config.sh +50 -22
  239. package/lib/FirebaseApp.ts +10 -0
  240. package/lib/common/Base64.ts +10 -16
  241. package/lib/common/deeps.ts +3 -0
  242. package/lib/common/index.ts +20 -9
  243. package/lib/internal/FirebaseModule.ts +6 -3
  244. package/lib/internal/NativeModules.ts +4 -1
  245. package/lib/internal/RNFBNativeEventEmitter.ts +14 -5
  246. package/lib/internal/SharedEventEmitter.ts +5 -1
  247. package/lib/internal/asyncStorage.ts +7 -11
  248. package/lib/internal/index.ts +1 -0
  249. package/lib/internal/logger.ts +53 -43
  250. package/lib/internal/nativeModuleAndroidIos.ts +2 -40
  251. package/lib/internal/nativeModuleDebug.ts +97 -0
  252. package/lib/internal/nativeModuleWeb.ts +10 -40
  253. package/lib/internal/react-native-vendor-emitter.d.ts +11 -0
  254. package/lib/internal/registry/app.ts +8 -2
  255. package/lib/internal/registry/modular.ts +2 -2
  256. package/lib/internal/registry/nativeModule.ts +3 -3
  257. package/lib/internal/web/RNFBAppModule.ts +16 -15
  258. package/lib/internal/web/memidb/lib/FakeEventTarget.js +3 -1
  259. package/lib/types/app.ts +10 -3
  260. package/lib/types/internal.ts +19 -0
  261. package/lib/version.ts +1 -1
  262. package/package.json +9 -8
  263. package/plugin/build/ios/appDelegate.js +19 -9
  264. package/plugin/build/ios/podfile.js +16 -16
  265. package/plugin/build/pluginConfig.d.ts +4 -2
  266. package/plugin/src/ios/appDelegate.ts +45 -15
  267. package/plugin/src/ios/podfile.ts +20 -23
  268. package/plugin/src/pluginConfig.ts +4 -2
  269. package/android/src/main/java/io/invertase/firebase/common/TaskExecutorService.java +0 -124
  270. package/android/src/main/java/io/invertase/firebase/common/UniversalFirebaseModule.java +0 -62
  271. package/android/src/main/java/io/invertase/firebase/common/UniversalFirebasePreferences.java +0 -91
  272. package/android/src/reactnative/java/io/invertase/firebase/app/NativeRNFBTurboApp.java +0 -222
  273. package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseApp.java +0 -46
  274. package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseAppPackage.java +0 -49
  275. package/android/src/reactnative/java/io/invertase/firebase/common/RCTConvertFirebase.java +0 -191
  276. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseEvent.java +0 -53
  277. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseEventEmitter.java +0 -606
  278. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseJSON.java +0 -107
  279. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseMeta.java +0 -101
  280. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseModule.java +0 -146
  281. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebasePreferences.java +0 -96
  282. package/android/src/reactnative/java/io/invertase/firebase/common/SharedUtils.java +0 -441
  283. package/android/src/reactnative/java/io/invertase/firebase/utils/NativeRNFBTurboUtils.java +0 -223
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Copyright (c) 2016-present Invertase Limited & Contributors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this library except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ #import <XCTest/XCTest.h>
18
+
19
+ #import "RNFBHandleMapStorage-Swift.inc"
20
+ #import "RNFBSharedUtils.h"
21
+
22
+ @interface RNFBSharedUtilsNullSentinelTests : XCTestCase
23
+ @end
24
+
25
+ @implementation RNFBSharedUtilsNullSentinelTests
26
+
27
+ - (void)testFacadeForwardsSentinelAndNonContainer {
28
+ NSDictionary *sentinel = @{@"__rnfbNull" : @YES};
29
+ XCTAssertTrue([[RNFBSharedUtils decodeNullSentinels:sentinel] isKindOfClass:[NSNull class]]);
30
+
31
+ NSNumber *number = @42;
32
+ XCTAssertTrue([RNFBSharedUtils decodeNullSentinels:number] == number);
33
+ }
34
+
35
+ @end
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Copyright (c) 2016-present Invertase Limited & Contributors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this library except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ #import <XCTest/XCTest.h>
18
+
19
+ #import "RNFBHandleMapStorage-Swift.inc"
20
+ #import "RNFBSharedUtils.h"
21
+
22
+ @interface RNFBSharedUtilsPromiseRejectionFacadeTests : XCTestCase
23
+ @end
24
+
25
+ @implementation RNFBSharedUtilsPromiseRejectionFacadeTests
26
+
27
+ - (void)testFacadeExceptionPath {
28
+ NSException *exception = [NSException exceptionWithName:@"FacadeException"
29
+ reason:@"facade boom"
30
+ userInfo:nil];
31
+
32
+ __block NSString *capturedCode = nil;
33
+ __block NSString *capturedMessage = nil;
34
+ __block NSError *capturedError = nil;
35
+
36
+ [RNFBSharedUtils
37
+ rejectPromiseWithExceptionDict:^(NSString *code, NSString *message, NSError *error) {
38
+ capturedCode = code;
39
+ capturedMessage = message;
40
+ capturedError = error;
41
+ }
42
+ exception:exception];
43
+
44
+ XCTAssertEqualObjects(capturedCode, @"FacadeException");
45
+ XCTAssertEqualObjects(capturedMessage, @"facade boom");
46
+ XCTAssertEqualObjects(capturedError.domain, @"RNFBErrorDomain");
47
+ XCTAssertEqual(capturedError.code, 666);
48
+ XCTAssertEqualObjects(capturedError.userInfo[@"fatal"], @YES);
49
+ XCTAssertEqualObjects(capturedError.userInfo[@"code"], @"unknown");
50
+ XCTAssertEqualObjects(capturedError.userInfo[@"message"], @"facade boom");
51
+ XCTAssertEqualObjects(capturedError.userInfo[@"nativeErrorCode"], @"FacadeException");
52
+ XCTAssertEqualObjects(capturedError.userInfo[@"nativeErrorMessage"], @"facade boom");
53
+ }
54
+
55
+ - (void)testFacadeNSErrorPath {
56
+ NSError *source = [NSError errorWithDomain:@"SourceDomain"
57
+ code:7
58
+ userInfo:@{NSLocalizedDescriptionKey : @"ns fail"}];
59
+
60
+ __block NSString *capturedCode = nil;
61
+ __block NSString *capturedMessage = nil;
62
+ __block NSError *capturedError = nil;
63
+
64
+ [RNFBSharedUtils
65
+ rejectPromiseWithNSError:^(NSString *code, NSString *message, NSError *error) {
66
+ capturedCode = code;
67
+ capturedMessage = message;
68
+ capturedError = error;
69
+ }
70
+ error:source];
71
+
72
+ XCTAssertEqualObjects(capturedCode, @"unknown");
73
+ XCTAssertEqualObjects(capturedMessage, @"ns fail");
74
+ XCTAssertEqualObjects(capturedError.domain, @"RNFBErrorDomain");
75
+ XCTAssertEqual(capturedError.code, 666);
76
+ XCTAssertEqualObjects(capturedError.userInfo[@"fatal"], @NO);
77
+ XCTAssertEqualObjects(capturedError.userInfo[@"nativeErrorCode"], @7);
78
+ XCTAssertEqualObjects(capturedError.userInfo[@"nativeErrorMessage"], @"ns fail");
79
+ }
80
+
81
+ - (void)testFacadeUserInfoPath {
82
+ NSMutableDictionary *userInfo = [@{
83
+ @"code" : @"storage/unknown",
84
+ @"message" : @"user info reject",
85
+ } mutableCopy];
86
+
87
+ __block NSString *capturedCode = nil;
88
+ __block NSString *capturedMessage = nil;
89
+ __block NSError *capturedError = nil;
90
+
91
+ [RNFBSharedUtils
92
+ rejectPromiseWithUserInfo:^(NSString *code, NSString *message, NSError *error) {
93
+ capturedCode = code;
94
+ capturedMessage = message;
95
+ capturedError = error;
96
+ }
97
+ userInfo:userInfo];
98
+
99
+ XCTAssertEqualObjects(capturedCode, @"storage/unknown");
100
+ XCTAssertEqualObjects(capturedMessage, @"user info reject");
101
+ XCTAssertEqualObjects(capturedError.domain, @"RNFBErrorDomain");
102
+ XCTAssertEqual(capturedError.code, 666);
103
+ XCTAssertEqualObjects(capturedError.userInfo[@"code"], @"storage/unknown");
104
+ XCTAssertEqualObjects(capturedError.userInfo[@"message"], @"user info reject");
105
+ }
106
+
107
+ @end
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Copyright (c) 2016-present Invertase Limited & Contributors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this library except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import Foundation
18
+ import XCTest
19
+
20
+ final class RNFBSharedUtilsPromiseRejectionTests: XCTestCase {
21
+ private let expectedDomain = "RNFBErrorDomain"
22
+ private let expectedCode = 666
23
+
24
+ func testExceptionPathRejectArgsAndUserInfo() {
25
+ let exception = NSException(
26
+ name: NSExceptionName("SomeException"),
27
+ reason: "boom reason",
28
+ userInfo: nil
29
+ )
30
+
31
+ var capturedCode: String?
32
+ var capturedMessage: String?
33
+ var capturedError: NSError?
34
+
35
+ RNFBSharedUtilsPromiseRejection.rejectPromise(withException: { code, message, error in
36
+ capturedCode = code
37
+ capturedMessage = message
38
+ capturedError = error as NSError?
39
+ }, exception: exception)
40
+
41
+ XCTAssertEqual(capturedCode, "SomeException")
42
+ XCTAssertEqual(capturedMessage, "boom reason")
43
+ XCTAssertEqual(capturedError?.domain, expectedDomain)
44
+ XCTAssertEqual(capturedError?.code, expectedCode)
45
+
46
+ let userInfo = capturedError?.userInfo ?? [:]
47
+ XCTAssertEqual(userInfo["fatal"] as? Bool, true)
48
+ XCTAssertEqual(userInfo["code"] as? String, "unknown")
49
+ XCTAssertEqual(userInfo["message"] as? String, "boom reason")
50
+ XCTAssertEqual(userInfo["nativeErrorCode"] as? String, "SomeException")
51
+ XCTAssertEqual(userInfo["nativeErrorMessage"] as? String, "boom reason")
52
+ }
53
+
54
+ func testExceptionPathNilReasonOmitsMessageKeys() {
55
+ let exception = NSException(
56
+ name: NSExceptionName("NilReason"),
57
+ reason: nil,
58
+ userInfo: nil
59
+ )
60
+
61
+ var capturedMessage: String?
62
+ var capturedError: NSError?
63
+
64
+ RNFBSharedUtilsPromiseRejection.rejectPromise(withException: { _, message, error in
65
+ capturedMessage = message
66
+ capturedError = error as NSError?
67
+ }, exception: exception)
68
+
69
+ XCTAssertNil(capturedMessage)
70
+ let userInfo = capturedError?.userInfo ?? [:]
71
+ XCTAssertNil(userInfo["message"])
72
+ XCTAssertNil(userInfo["nativeErrorMessage"])
73
+ XCTAssertEqual(userInfo["fatal"] as? Bool, true)
74
+ XCTAssertEqual(userInfo["code"] as? String, "unknown")
75
+ XCTAssertEqual(userInfo["nativeErrorCode"] as? String, "NilReason")
76
+ }
77
+
78
+ func testNSErrorPathRejectArgsAndUserInfo() {
79
+ let source = NSError(
80
+ domain: "SourceDomain",
81
+ code: 42,
82
+ userInfo: [NSLocalizedDescriptionKey: "localized fail"]
83
+ )
84
+
85
+ var capturedCode: String?
86
+ var capturedMessage: String?
87
+ var capturedError: NSError?
88
+
89
+ RNFBSharedUtilsPromiseRejection.rejectPromise(withNSError: { code, message, error in
90
+ capturedCode = code
91
+ capturedMessage = message
92
+ capturedError = error as NSError?
93
+ }, error: source)
94
+
95
+ XCTAssertEqual(capturedCode, "unknown")
96
+ XCTAssertEqual(capturedMessage, "localized fail")
97
+ XCTAssertEqual(capturedError?.domain, expectedDomain)
98
+ XCTAssertEqual(capturedError?.code, expectedCode)
99
+
100
+ let userInfo = capturedError?.userInfo ?? [:]
101
+ XCTAssertEqual(userInfo["fatal"] as? Bool, false)
102
+ XCTAssertEqual(userInfo["code"] as? String, "unknown")
103
+ XCTAssertEqual(userInfo["message"] as? String, "localized fail")
104
+ XCTAssertEqual(userInfo["nativeErrorCode"] as? NSNumber, NSNumber(value: 42))
105
+ XCTAssertEqual(userInfo["nativeErrorMessage"] as? String, "localized fail")
106
+ }
107
+
108
+ func testUserInfoPathRejectArgsAndError() {
109
+ let userInfo: NSMutableDictionary = [
110
+ "code": "auth/invalid",
111
+ "message": "bad creds",
112
+ "extra": "kept",
113
+ ]
114
+
115
+ var capturedCode: String?
116
+ var capturedMessage: String?
117
+ var capturedError: NSError?
118
+
119
+ RNFBSharedUtilsPromiseRejection.rejectPromise(withUserInfo: { code, message, error in
120
+ capturedCode = code
121
+ capturedMessage = message
122
+ capturedError = error as NSError?
123
+ }, userInfo: userInfo)
124
+
125
+ XCTAssertEqual(capturedCode, "auth/invalid")
126
+ XCTAssertEqual(capturedMessage, "bad creds")
127
+ XCTAssertEqual(capturedError?.domain, expectedDomain)
128
+ XCTAssertEqual(capturedError?.code, expectedCode)
129
+ XCTAssertEqual(capturedError?.userInfo["code"] as? String, "auth/invalid")
130
+ XCTAssertEqual(capturedError?.userInfo["message"] as? String, "bad creds")
131
+ XCTAssertEqual(capturedError?.userInfo["extra"] as? String, "kept")
132
+ }
133
+ }
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Copyright (c) 2016-present Invertase Limited & Contributors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this library except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import Foundation
18
+ import XCTest
19
+
20
+ final class RNFBUtilsHelpersTests: XCTestCase {
21
+ func testPathForDirectoryReturnsSearchPathFirstObject() {
22
+ let caches = RNFBUtilsHelpers.path(
23
+ forDirectory: Int32(FileManager.SearchPathDirectory.cachesDirectory.rawValue)
24
+ )
25
+ let expected = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true)
26
+ .first
27
+ XCTAssertEqual(caches, expected)
28
+ XCTAssertNotNil(caches)
29
+ }
30
+
31
+ func testUtilsConstantsDictionaryIncludesRequiredKeys() {
32
+ let constants = RNFBUtilsHelpers.utilsConstantsDictionary(
33
+ bundlePath: "/App.app",
34
+ appVersion: "1.2.3",
35
+ pathProvider: { directory in "path-\(directory)" },
36
+ temporaryDirectory: "/tmp/rnfb"
37
+ )
38
+
39
+ XCTAssertEqual(constants["isRunningInTestLab"] as? Bool, false)
40
+ XCTAssertEqual(constants["MAIN_BUNDLE"] as? String, "/App.app")
41
+ XCTAssertEqual(
42
+ constants["CACHES_DIRECTORY"] as? String,
43
+ "path-\(FileManager.SearchPathDirectory.cachesDirectory.rawValue)"
44
+ )
45
+ XCTAssertEqual(
46
+ constants["DOCUMENT_DIRECTORY"] as? String,
47
+ "path-\(FileManager.SearchPathDirectory.documentDirectory.rawValue)"
48
+ )
49
+ XCTAssertEqual(
50
+ constants["PICTURES_DIRECTORY"] as? String,
51
+ "path-\(FileManager.SearchPathDirectory.picturesDirectory.rawValue)"
52
+ )
53
+ XCTAssertEqual(
54
+ constants["MOVIES_DIRECTORY"] as? String,
55
+ "path-\(FileManager.SearchPathDirectory.moviesDirectory.rawValue)"
56
+ )
57
+ XCTAssertEqual(constants["TEMP_DIRECTORY"] as? String, "/tmp/rnfb")
58
+ XCTAssertEqual(
59
+ constants["LIBRARY_DIRECTORY"] as? String,
60
+ "path-\(FileManager.SearchPathDirectory.libraryDirectory.rawValue)"
61
+ )
62
+ XCTAssertEqual(constants["appVersion"] as? String, "1.2.3")
63
+ }
64
+
65
+ func testUtilsConstantsDictionaryOmitsAppVersionWhenMissingEmptyOrNonString() {
66
+ let pathProvider: RNFBUtilsPathProvider = { _ in "/p" }
67
+
68
+ let missing = RNFBUtilsHelpers.utilsConstantsDictionary(
69
+ bundlePath: "/b",
70
+ appVersion: nil,
71
+ pathProvider: pathProvider,
72
+ temporaryDirectory: "/t"
73
+ )
74
+ XCTAssertNil(missing["appVersion"])
75
+
76
+ let empty = RNFBUtilsHelpers.utilsConstantsDictionary(
77
+ bundlePath: "/b",
78
+ appVersion: "",
79
+ pathProvider: pathProvider,
80
+ temporaryDirectory: "/t"
81
+ )
82
+ XCTAssertNil(empty["appVersion"])
83
+
84
+ let nonString = RNFBUtilsHelpers.utilsConstantsDictionary(
85
+ bundlePath: "/b",
86
+ appVersion: NSNumber(value: 42),
87
+ pathProvider: pathProvider,
88
+ temporaryDirectory: "/t"
89
+ )
90
+ XCTAssertNil(nonString["appVersion"])
91
+ }
92
+
93
+ func testUtilsConstantsDictionaryDefaultUsesMainBundle() {
94
+ let constants = RNFBUtilsHelpers.utilsConstantsDictionary()
95
+ XCTAssertEqual(constants["MAIN_BUNDLE"] as? String, Bundle.main.bundlePath)
96
+ XCTAssertEqual(constants["isRunningInTestLab"] as? Bool, false)
97
+ XCTAssertNotNil(constants["CACHES_DIRECTORY"])
98
+ XCTAssertNotNil(constants["TEMP_DIRECTORY"])
99
+ }
100
+
101
+ func testIsRemoteAssetPrefixChecks() {
102
+ XCTAssertTrue(RNFBUtilsHelpers.isRemoteAsset("assets-library://asset/foo"))
103
+ XCTAssertTrue(RNFBUtilsHelpers.isRemoteAsset("ph://LOCAL-ID"))
104
+ XCTAssertFalse(RNFBUtilsHelpers.isRemoteAsset("file:///tmp/x.jpg"))
105
+ XCTAssertFalse(RNFBUtilsHelpers.isRemoteAsset(""))
106
+ XCTAssertFalse(RNFBUtilsHelpers.isRemoteAsset(nil))
107
+ }
108
+
109
+ func testUnusedIsHeicCaseInsensitiveAndNilMessaging() {
110
+ XCTAssertTrue(RNFBUtilsHelpers.unusedIsHeic("photo.heic"))
111
+ XCTAssertTrue(RNFBUtilsHelpers.unusedIsHeic("photo.HEIC"))
112
+ XCTAssertTrue(RNFBUtilsHelpers.unusedIsHeic("photo.Heic"))
113
+ XCTAssertFalse(RNFBUtilsHelpers.unusedIsHeic("photo.jpg"))
114
+ XCTAssertFalse(RNFBUtilsHelpers.unusedIsHeic("heic"))
115
+ // Pre-port ObjC nil messaging → YES
116
+ XCTAssertTrue(RNFBUtilsHelpers.unusedIsHeic(nil))
117
+ }
118
+
119
+ func testValueForKeyFromQueryItemsUsesNamePredicateAndFirstObject() {
120
+ let items = [
121
+ URLQueryItem(name: "other", value: "a"),
122
+ URLQueryItem(name: "id", value: "first-id"),
123
+ URLQueryItem(name: "id", value: "second-id"),
124
+ ]
125
+
126
+ XCTAssertEqual(
127
+ RNFBUtilsHelpers.value(forKey: "id", fromQueryItems: items),
128
+ "first-id"
129
+ )
130
+ XCTAssertEqual(
131
+ RNFBUtilsHelpers.value(forKey: "other", fromQueryItems: items),
132
+ "a"
133
+ )
134
+ XCTAssertNil(RNFBUtilsHelpers.value(forKey: "missing", fromQueryItems: items))
135
+ XCTAssertNil(RNFBUtilsHelpers.value(forKey: "id", fromQueryItems: nil))
136
+ XCTAssertNil(RNFBUtilsHelpers.value(forKey: "id", fromQueryItems: []))
137
+ XCTAssertNil(
138
+ RNFBUtilsHelpers.value(
139
+ forKey: "id",
140
+ fromQueryItems: [URLQueryItem(name: "id", value: nil)]
141
+ )
142
+ )
143
+ }
144
+ }
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Copyright (c) 2016-present Invertase Limited & Contributors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this library except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ #import <XCTest/XCTest.h>
18
+
19
+ #import "RNFBHandleMapStorage-Swift.inc"
20
+ #import "RNFBUtilsModule.h"
21
+
22
+ @interface RNFBUtilsModuleFacadeTests : XCTestCase
23
+ @end
24
+
25
+ @implementation RNFBUtilsModuleFacadeTests
26
+
27
+ - (void)testFacadePathForDirectoryMatchesSearchPath {
28
+ NSString *path = [RNFBUtilsHelpers pathForDirectory:(int)NSCachesDirectory];
29
+ NSString *expected =
30
+ [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
31
+ XCTAssertEqualObjects(path, expected);
32
+ }
33
+
34
+ - (void)testFacadeUtilsConstantsDictionaryKeys {
35
+ NSDictionary *constants = [RNFBUtilsHelpers
36
+ utilsConstantsDictionaryWithBundlePath:@"/Bundle.app"
37
+ appVersion:@"9.9.9"
38
+ pathProvider:^NSString *(int directory) {
39
+ return [NSString stringWithFormat:@"dir-%d", directory];
40
+ }
41
+ temporaryDirectory:@"/tmp/facade"];
42
+
43
+ XCTAssertEqualObjects(constants[@"isRunningInTestLab"], @NO);
44
+ XCTAssertEqualObjects(constants[@"MAIN_BUNDLE"], @"/Bundle.app");
45
+ XCTAssertEqualObjects(constants[@"TEMP_DIRECTORY"], @"/tmp/facade");
46
+ XCTAssertEqualObjects(constants[@"appVersion"], @"9.9.9");
47
+ XCTAssertEqualObjects(constants[@"CACHES_DIRECTORY"],
48
+ ([NSString stringWithFormat:@"dir-%d", (int)NSCachesDirectory]));
49
+ }
50
+
51
+ - (void)testFacadeIsRemoteAsset {
52
+ XCTAssertTrue([RNFBUtilsModule isRemoteAsset:@"assets-library://x"]);
53
+ XCTAssertTrue([RNFBUtilsModule isRemoteAsset:@"ph://y"]);
54
+ XCTAssertFalse([RNFBUtilsModule isRemoteAsset:@"/local/file.jpg"]);
55
+ }
56
+
57
+ - (void)testFacadeUnusedIsHeic {
58
+ XCTAssertTrue([RNFBUtilsModule unused_isHeic:@"a.HEIC"]);
59
+ XCTAssertFalse([RNFBUtilsModule unused_isHeic:@"a.png"]);
60
+ }
61
+
62
+ - (void)testFacadeValueForKeyFromQueryItems {
63
+ NSArray *items = @[
64
+ [NSURLQueryItem queryItemWithName:@"id" value:@"asset-1"],
65
+ [NSURLQueryItem queryItemWithName:@"w" value:@"100"],
66
+ ];
67
+ XCTAssertEqualObjects([RNFBUtilsModule valueForKey:@"id" fromQueryItems:items], @"asset-1");
68
+ XCTAssertEqualObjects([RNFBUtilsModule valueForKey:@"w" fromQueryItems:items], @"100");
69
+ XCTAssertNil([RNFBUtilsModule valueForKey:@"missing" fromQueryItems:items]);
70
+ }
71
+
72
+ @end