expo-modules-core 1.11.13 → 1.12.1

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 (408) hide show
  1. package/CHANGELOG.md +77 -13
  2. package/ExpoModulesCore.podspec +7 -4
  3. package/android/ExpoModulesCorePlugin.gradle +40 -28
  4. package/android/build.gradle +12 -93
  5. package/android/proguard-rules.pro +0 -8
  6. package/android/src/main/cpp/Exceptions.cpp +1 -1
  7. package/android/src/main/cpp/Exceptions.h +1 -1
  8. package/android/src/main/cpp/ExpoModulesHostObject.cpp +7 -6
  9. package/android/src/main/cpp/ExpoModulesHostObject.h +3 -3
  10. package/android/src/main/cpp/JNIInjector.cpp +4 -2
  11. package/android/src/main/cpp/JSIContext.cpp +354 -0
  12. package/android/src/main/cpp/{JSIInteropModuleRegistry.h → JSIContext.h} +90 -9
  13. package/android/src/main/cpp/JavaCallback.cpp +210 -24
  14. package/android/src/main/cpp/JavaCallback.h +42 -7
  15. package/android/src/main/cpp/JavaScriptFunction.cpp +20 -6
  16. package/android/src/main/cpp/JavaScriptFunction.h +4 -1
  17. package/android/src/main/cpp/JavaScriptModuleObject.cpp +118 -82
  18. package/android/src/main/cpp/JavaScriptModuleObject.h +21 -18
  19. package/android/src/main/cpp/JavaScriptObject.cpp +7 -8
  20. package/android/src/main/cpp/JavaScriptObject.h +4 -2
  21. package/android/src/main/cpp/JavaScriptRuntime.cpp +18 -41
  22. package/android/src/main/cpp/JavaScriptRuntime.h +2 -8
  23. package/android/src/main/cpp/JavaScriptTypedArray.cpp +3 -3
  24. package/android/src/main/cpp/JavaScriptTypedArray.h +1 -1
  25. package/android/src/main/cpp/JavaScriptValue.cpp +7 -7
  26. package/android/src/main/cpp/JavaScriptValue.h +1 -1
  27. package/android/src/main/cpp/JavaScriptWeakObject.cpp +4 -4
  28. package/android/src/main/cpp/JavaScriptWeakObject.h +1 -1
  29. package/android/src/main/cpp/MethodMetadata.cpp +44 -120
  30. package/android/src/main/cpp/MethodMetadata.h +5 -11
  31. package/android/src/main/cpp/WeakRuntimeHolder.cpp +3 -3
  32. package/android/src/main/cpp/WeakRuntimeHolder.h +2 -2
  33. package/android/src/main/cpp/types/AnyType.cpp +1 -1
  34. package/android/src/main/cpp/types/AnyType.h +1 -1
  35. package/android/src/main/cpp/types/FrontendConverter.cpp +32 -43
  36. package/android/src/main/cpp/types/FrontendConverter.h +1 -23
  37. package/android/src/main/cpp/types/JNIToJSIConverter.cpp +5 -10
  38. package/android/src/main/cpp/types/JNIToJSIConverter.h +6 -2
  39. package/android/src/main/java/expo/modules/adapters/react/ModuleRegistryAdapter.java +3 -0
  40. package/android/src/main/java/expo/modules/adapters/react/NativeModulesProxy.java +14 -100
  41. package/android/src/main/java/expo/modules/adapters/react/ReactAdapterPackage.java +3 -5
  42. package/android/src/main/java/expo/modules/adapters/react/ReactModuleRegistryProvider.java +6 -22
  43. package/android/src/main/java/expo/modules/adapters/react/apploader/RNHeadlessAppLoader.kt +8 -4
  44. package/android/src/main/java/expo/modules/adapters/react/services/EventEmitterModule.java +0 -1
  45. package/android/src/main/java/expo/modules/adapters/react/services/UIManagerModuleWrapper.java +23 -8
  46. package/android/src/main/java/expo/modules/core/BasePackage.java +0 -10
  47. package/android/src/main/java/expo/modules/core/ModulePriorities.kt +1 -0
  48. package/android/src/main/java/expo/modules/core/ModuleRegistry.java +2 -32
  49. package/android/src/main/java/expo/modules/core/ModuleRegistryProvider.java +0 -18
  50. package/android/src/main/java/expo/modules/core/Promise.java +2 -0
  51. package/android/src/main/java/expo/modules/core/interfaces/Package.java +0 -17
  52. package/android/src/main/java/expo/modules/core/interfaces/ReactActivityHandler.java +0 -9
  53. package/android/src/main/java/expo/modules/core/interfaces/ReactNativeHostHandler.java +24 -31
  54. package/android/src/main/java/expo/modules/core/logging/LogHandler.kt +1 -7
  55. package/android/src/main/java/expo/modules/core/logging/LogHandlers.kt +11 -0
  56. package/android/src/main/java/expo/modules/core/logging/Logger.kt +18 -29
  57. package/android/src/main/java/expo/modules/core/logging/LoggerTimer.kt +11 -0
  58. package/android/src/main/java/expo/modules/core/logging/OSLogHandler.kt +2 -4
  59. package/android/src/main/java/expo/modules/core/logging/PersistentFileLogHandler.kt +1 -3
  60. package/android/src/main/java/expo/modules/interfaces/constants/ConstantsInterface.java +0 -2
  61. package/android/src/main/java/expo/modules/interfaces/permissions/PermissionsStatus.java +1 -1
  62. package/android/src/main/java/expo/modules/kotlin/AppContext.kt +44 -24
  63. package/android/src/main/java/expo/modules/kotlin/ArrayExtenstions.kt +15 -0
  64. package/android/src/main/java/expo/modules/kotlin/CoreLogger.kt +2 -2
  65. package/android/src/main/java/expo/modules/kotlin/DynamicExtenstions.kt +0 -3
  66. package/android/src/main/java/expo/modules/kotlin/ExpoBridgeModule.kt +41 -0
  67. package/android/src/main/java/expo/modules/kotlin/ExpoModulesHelper.kt +1 -2
  68. package/android/src/main/java/expo/modules/kotlin/KPromiseWrapper.kt +1 -2
  69. package/android/src/main/java/expo/modules/kotlin/KotlinInteropModuleRegistry.kt +1 -33
  70. package/android/src/main/java/expo/modules/kotlin/ModuleHolder.kt +7 -6
  71. package/android/src/main/java/expo/modules/kotlin/ModuleRegistry.kt +12 -12
  72. package/android/src/main/java/expo/modules/kotlin/Promise.kt +10 -0
  73. package/android/src/main/java/expo/modules/kotlin/ReactExtensions.kt +14 -0
  74. package/android/src/main/java/expo/modules/kotlin/Utils.kt +4 -1
  75. package/android/src/main/java/expo/modules/kotlin/activityaware/AppCompatActivityAwareHelper.kt +1 -1
  76. package/android/src/main/java/expo/modules/kotlin/activityresult/AppContextActivityResultCaller.kt +1 -1
  77. package/android/src/main/java/expo/modules/kotlin/activityresult/AppContextActivityResultRegistry.kt +6 -6
  78. package/android/src/main/java/expo/modules/kotlin/classcomponent/ClassComponentBuilder.kt +44 -15
  79. package/android/src/main/java/expo/modules/kotlin/defaultmodules/CoreModule.kt +31 -1
  80. package/android/src/main/java/expo/modules/kotlin/defaultmodules/ErrorManagerModule.kt +2 -4
  81. package/android/src/main/java/expo/modules/kotlin/events/KModuleEventEmitterWrapper.kt +11 -4
  82. package/android/src/main/java/expo/modules/kotlin/exception/CodedException.kt +2 -3
  83. package/android/src/main/java/expo/modules/kotlin/functions/AsyncFunctionBuilder.kt +136 -43
  84. package/android/src/main/java/expo/modules/kotlin/functions/AsyncFunctionComponent.kt +71 -2
  85. package/android/src/main/java/expo/modules/kotlin/functions/FunctionBuilder.kt +39 -12
  86. package/android/src/main/java/expo/modules/kotlin/jni/ExpectedType.kt +2 -2
  87. package/android/src/main/java/expo/modules/kotlin/jni/JNIDeallocator.kt +1 -1
  88. package/android/src/main/java/expo/modules/kotlin/jni/{JSIInteropModuleRegistry.kt → JSIContext.kt} +90 -14
  89. package/android/src/main/java/expo/modules/kotlin/jni/JavaCallback.kt +51 -24
  90. package/android/src/main/java/expo/modules/kotlin/jni/JavaScriptFunction.kt +3 -3
  91. package/android/src/main/java/expo/modules/kotlin/jni/JavaScriptModuleObject.kt +4 -1
  92. package/android/src/main/java/expo/modules/kotlin/jni/JavaScriptObject.kt +1 -0
  93. package/android/src/main/java/expo/modules/kotlin/jni/JavaScriptValue.kt +1 -0
  94. package/android/src/main/java/expo/modules/kotlin/jni/PromiseImpl.kt +20 -0
  95. package/android/src/main/java/expo/modules/kotlin/modules/Module.kt +0 -1
  96. package/android/src/main/java/expo/modules/kotlin/modules/ModuleDefinitionBuilder.kt +1 -1
  97. package/android/src/main/java/expo/modules/kotlin/objects/ObjectDefinitionBuilder.kt +164 -65
  98. package/android/src/main/java/expo/modules/kotlin/objects/PropertyComponentBuilder.kt +3 -4
  99. package/android/src/main/java/expo/modules/kotlin/sharedobjects/ClassRegistry.kt +21 -0
  100. package/android/src/main/java/expo/modules/kotlin/sharedobjects/SharedObject.kt +34 -1
  101. package/android/src/main/java/expo/modules/kotlin/sharedobjects/SharedObjectRegistry.kt +23 -8
  102. package/android/src/main/java/expo/modules/kotlin/sharedobjects/SharedRef.kt +7 -1
  103. package/android/src/main/java/expo/modules/kotlin/tracing/ExpoTrace.kt +4 -0
  104. package/android/src/main/java/expo/modules/kotlin/types/AnyType.kt +134 -2
  105. package/android/src/main/java/expo/modules/kotlin/types/EnforceType.kt +60 -0
  106. package/android/src/main/java/expo/modules/kotlin/types/EnumTypeConverter.kt +2 -2
  107. package/android/src/main/java/expo/modules/kotlin/types/TypeConverter.kt +0 -2
  108. package/android/src/main/java/expo/modules/kotlin/types/TypeConverterProvider.kt +3 -27
  109. package/android/src/main/java/expo/modules/kotlin/types/UnitTypeConverter.kt +3 -7
  110. package/android/src/main/java/expo/modules/kotlin/types/io/PathTypeConverter.kt +3 -0
  111. package/android/src/main/java/expo/modules/kotlin/viewevent/ViewEvent.kt +2 -5
  112. package/android/src/main/java/expo/modules/kotlin/views/ViewDefinitionBuilder.kt +137 -48
  113. package/android/src/main/java/expo/modules/kotlin/views/ViewManagerDefinition.kt +2 -5
  114. package/build/EventEmitter.d.ts +2 -2
  115. package/build/EventEmitter.d.ts.map +1 -1
  116. package/build/EventEmitter.js +8 -8
  117. package/build/EventEmitter.js.map +1 -1
  118. package/build/NativeModule.d.ts +4 -0
  119. package/build/NativeModule.d.ts.map +1 -0
  120. package/build/NativeModule.js +4 -0
  121. package/build/NativeModule.js.map +1 -0
  122. package/build/NativeModulesProxy.native.d.ts.map +1 -1
  123. package/build/NativeModulesProxy.native.js +4 -0
  124. package/build/NativeModulesProxy.native.js.map +1 -1
  125. package/build/NativeModulesProxy.types.d.ts +2 -2
  126. package/build/NativeModulesProxy.types.d.ts.map +1 -1
  127. package/build/NativeModulesProxy.types.js.map +1 -1
  128. package/build/NativeViewManagerAdapter.native.d.ts.map +1 -1
  129. package/build/NativeViewManagerAdapter.native.js +20 -1
  130. package/build/NativeViewManagerAdapter.native.js.map +1 -1
  131. package/build/PermissionsHook.d.ts.map +1 -1
  132. package/build/PermissionsHook.js +2 -0
  133. package/build/PermissionsHook.js.map +1 -1
  134. package/build/Refs.d.ts +8 -0
  135. package/build/Refs.d.ts.map +1 -0
  136. package/build/Refs.js +10 -0
  137. package/build/Refs.js.map +1 -0
  138. package/build/SharedObject.d.ts +4 -0
  139. package/build/SharedObject.d.ts.map +1 -0
  140. package/build/SharedObject.js +4 -0
  141. package/build/SharedObject.js.map +1 -0
  142. package/build/createWebModule.d.ts +2 -0
  143. package/build/createWebModule.d.ts.map +1 -0
  144. package/build/createWebModule.js +6 -0
  145. package/build/createWebModule.js.map +1 -0
  146. package/build/createWebModule.web.d.ts +2 -0
  147. package/build/createWebModule.web.d.ts.map +1 -0
  148. package/build/createWebModule.web.js +6 -0
  149. package/build/createWebModule.web.js.map +1 -0
  150. package/build/ensureNativeModulesAreInstalled.d.ts +6 -0
  151. package/build/ensureNativeModulesAreInstalled.d.ts.map +1 -0
  152. package/build/ensureNativeModulesAreInstalled.js +26 -0
  153. package/build/ensureNativeModulesAreInstalled.js.map +1 -0
  154. package/build/hooks/useReleasingSharedObject.d.ts +7 -0
  155. package/build/hooks/useReleasingSharedObject.d.ts.map +1 -0
  156. package/build/hooks/useReleasingSharedObject.js +40 -0
  157. package/build/hooks/useReleasingSharedObject.js.map +1 -0
  158. package/build/index.d.ts +8 -1
  159. package/build/index.d.ts.map +1 -1
  160. package/build/index.js +8 -0
  161. package/build/index.js.map +1 -1
  162. package/build/requireNativeModule.d.ts +0 -17
  163. package/build/requireNativeModule.d.ts.map +1 -1
  164. package/build/requireNativeModule.js +2 -23
  165. package/build/requireNativeModule.js.map +1 -1
  166. package/build/ts-declarations/EventEmitter.d.ts +50 -0
  167. package/build/ts-declarations/EventEmitter.d.ts.map +1 -0
  168. package/build/ts-declarations/EventEmitter.js +2 -0
  169. package/build/ts-declarations/EventEmitter.js.map +1 -0
  170. package/build/ts-declarations/NativeModule.d.ts +14 -0
  171. package/build/ts-declarations/NativeModule.d.ts.map +1 -0
  172. package/build/ts-declarations/NativeModule.js +2 -0
  173. package/build/ts-declarations/NativeModule.js.map +1 -0
  174. package/build/ts-declarations/SharedObject.d.ts +14 -0
  175. package/build/ts-declarations/SharedObject.d.ts.map +1 -0
  176. package/build/ts-declarations/SharedObject.js +2 -0
  177. package/build/ts-declarations/SharedObject.js.map +1 -0
  178. package/build/ts-declarations/global.d.ts +49 -0
  179. package/build/ts-declarations/global.d.ts.map +1 -0
  180. package/build/ts-declarations/global.js +2 -0
  181. package/build/ts-declarations/global.js.map +1 -0
  182. package/build/web/CoreModule.d.ts +17 -0
  183. package/build/web/CoreModule.d.ts.map +1 -0
  184. package/build/web/CoreModule.js +51 -0
  185. package/build/web/CoreModule.js.map +1 -0
  186. package/build/web/index.d.ts +1 -0
  187. package/build/web/index.d.ts.map +1 -0
  188. package/build/web/index.js +1 -0
  189. package/build/web/index.js.map +1 -0
  190. package/build/web/index.web.d.ts +2 -0
  191. package/build/web/index.web.d.ts.map +1 -0
  192. package/build/web/index.web.js +2 -0
  193. package/build/web/index.web.js.map +1 -0
  194. package/common/cpp/BridgelessJSCallInvoker.h +41 -0
  195. package/common/cpp/EventEmitter.cpp +299 -0
  196. package/common/cpp/EventEmitter.h +111 -0
  197. package/common/cpp/JSIUtils.cpp +116 -11
  198. package/common/cpp/JSIUtils.h +54 -7
  199. package/common/cpp/LazyObject.cpp +15 -3
  200. package/common/cpp/LazyObject.h +13 -0
  201. package/common/cpp/NativeModule.cpp +16 -0
  202. package/common/cpp/NativeModule.h +34 -0
  203. package/common/cpp/ObjectDeallocator.cpp +3 -5
  204. package/common/cpp/ObjectDeallocator.h +2 -3
  205. package/common/cpp/SharedObject.cpp +69 -0
  206. package/common/cpp/SharedObject.h +59 -0
  207. package/common/cpp/TestingSyncJSCallInvoker.h +44 -0
  208. package/ios/Api/Builders/ClassComponentBuilder.swift +34 -0
  209. package/ios/{Objects → Api/Builders}/ObjectDefinitionBuilder.swift +3 -3
  210. package/ios/Api/Builders/ViewDefinitionBuilder.swift +53 -0
  211. package/ios/Api/Factories/AsyncFunctionFactories.swift +173 -0
  212. package/ios/{Classes/ClassComponentFactories.swift → Api/Factories/ClassFactories.swift} +19 -19
  213. package/ios/{Functions/ConcurrentFunctionDefinition.swift → Api/Factories/ConcurrentFunctionFactories.swift} +0 -113
  214. package/ios/{Modules/ModuleDefinitionComponents.swift → Api/Factories/EventListenersFactories.swift} +0 -20
  215. package/ios/Api/Factories/ModuleFactories.swift +6 -0
  216. package/ios/{Objects/ObjectDefinitionComponents.swift → Api/Factories/ObjectFactories.swift} +5 -5
  217. package/ios/Api/Factories/PropertyFactories.swift +50 -0
  218. package/ios/Api/Factories/SyncFunctionFactories.swift +173 -0
  219. package/ios/{Views/ViewManagerDefinitionComponents.swift → Api/Factories/ViewFactories.swift} +7 -6
  220. package/ios/AppDelegates/EXAppDelegateWrapper.h +0 -21
  221. package/ios/AppDelegates/EXAppDelegateWrapper.mm +37 -29
  222. package/ios/{AppContext.swift → Core/AppContext.swift} +34 -11
  223. package/ios/Core/Classes/AnyClassDefinitionElement.swift +37 -0
  224. package/ios/{Classes/ClassComponent.swift → Core/Classes/ClassDefinition.swift} +10 -10
  225. package/ios/{Conversions.swift → Core/Conversions.swift} +1 -1
  226. package/ios/{DynamicTypes → Core/DynamicTypes}/DynamicSharedObjectType.swift +3 -3
  227. package/ios/Core/Events/EventObservingDefinition.swift +79 -0
  228. package/ios/Core/Events/LegacyEventEmitterCompat.swift +32 -0
  229. package/ios/Core/ExpoBridgeModule.h +18 -0
  230. package/ios/Core/ExpoBridgeModule.mm +88 -0
  231. package/ios/Core/ExpoRuntime.swift +6 -0
  232. package/ios/{Functions/AnyFunction.swift → Core/Functions/AnyFunctionDefinition.swift} +9 -2
  233. package/ios/Core/Functions/AsyncFunctionDefinition.swift +150 -0
  234. package/ios/Core/Functions/ConcurrentFunctionDefinition.swift +112 -0
  235. package/ios/Core/Functions/SyncFunctionDefinition.swift +108 -0
  236. package/ios/{JavaScriptUtils.swift → Core/JavaScriptUtils.swift} +4 -4
  237. package/ios/{Logging → Core/Logging}/LogHandlers.swift +12 -5
  238. package/ios/{Logging → Core/Logging}/Logger.swift +14 -92
  239. package/ios/Core/Logging/LoggerTimer.swift +22 -0
  240. package/ios/{ModuleHolder.swift → Core/ModuleHolder.swift} +2 -10
  241. package/ios/Core/Modules/CoreModule.swift +43 -0
  242. package/ios/{Modules → Core/Modules}/ModuleDefinition.swift +20 -12
  243. package/ios/{Modules → Core/Modules}/ModuleDefinitionBuilder.swift +1 -3
  244. package/ios/{Objects → Core/Objects}/ObjectDefinition.swift +9 -9
  245. package/ios/{Objects/PropertyComponent.swift → Core/Objects/PropertyDefinition.swift} +11 -64
  246. package/ios/Core/Protocols/AnyDefinition.swift +4 -0
  247. package/ios/Core/Protocols/AnyExpoView.swift +7 -0
  248. package/ios/Core/Protocols/AnyModule.swift +17 -0
  249. package/ios/Core/Protocols/AnyViewDefinition.swift +34 -0
  250. package/ios/Core/SharedObjects/SharedObject.swift +80 -0
  251. package/ios/{SharedObjects → Core/SharedObjects}/SharedObjectRegistry.swift +45 -19
  252. package/ios/{Views → Core/Views}/AnyViewProp.swift +1 -1
  253. package/ios/{Views → Core/Views}/ComponentData.swift +7 -7
  254. package/ios/{Views → Core/Views}/ExpoView.swift +1 -1
  255. package/ios/Core/Views/ViewDefinition.swift +97 -0
  256. package/ios/{Views → Core/Views}/ViewLifecycleMethod.swift +1 -1
  257. package/ios/{Views → Core/Views}/ViewModuleWrapper.swift +1 -1
  258. package/ios/Fabric/ExpoFabricView.swift +5 -6
  259. package/ios/FileSystemUtilities/FileSystemLegacyUtilities.swift +111 -0
  260. package/ios/JSI/EXJSIInstaller.h +28 -0
  261. package/ios/JSI/EXJSIInstaller.mm +54 -10
  262. package/ios/JSI/EXJSIUtils.h +15 -11
  263. package/ios/JSI/EXJSIUtils.mm +21 -49
  264. package/ios/JSI/EXJavaScriptObject.mm +2 -2
  265. package/ios/JSI/EXJavaScriptRuntime.h +15 -0
  266. package/ios/JSI/EXJavaScriptRuntime.mm +53 -26
  267. package/ios/JSI/EXSharedObjectUtils.h +15 -0
  268. package/ios/JSI/EXSharedObjectUtils.mm +18 -0
  269. package/ios/JSI/JavaScriptRuntime.swift +16 -0
  270. package/ios/Legacy/ModuleRegistry/EXModuleRegistry.m +1 -0
  271. package/ios/Legacy/ModuleRegistryProvider/EXModuleRegistryProvider.m +5 -0
  272. package/ios/Legacy/NativeModulesProxy/EXNativeModulesProxy.mm +5 -4
  273. package/ios/Legacy/Services/EXReactNativeAdapter.mm +34 -28
  274. package/ios/ReactDelegates/EXReactDelegateWrapper.h +4 -12
  275. package/ios/ReactDelegates/EXReactDelegateWrapper.mm +41 -0
  276. package/ios/ReactDelegates/EXReactRootViewFactory.h +38 -0
  277. package/ios/ReactDelegates/EXReactRootViewFactory.mm +54 -0
  278. package/ios/ReactDelegates/ExpoReactDelegate.swift +22 -15
  279. package/ios/ReactDelegates/ExpoReactDelegateHandler.swift +10 -21
  280. package/ios/ReactDelegates/RCTAppDelegate+Recreate.h +28 -0
  281. package/ios/ReactDelegates/RCTAppDelegate+Recreate.mm +47 -0
  282. package/ios/Tests/{ClassComponentSpec.swift → ClassDefinitionSpec.swift} +6 -6
  283. package/ios/Tests/ConvertiblesSpec.swift +6 -1
  284. package/ios/Tests/CoreModuleSpec.swift +0 -4
  285. package/ios/Tests/DynamicTypeSpec.swift +1 -1
  286. package/ios/Tests/EventEmitterSpec.swift +274 -0
  287. package/ios/Tests/ExceptionsSpec.swift +114 -54
  288. package/ios/Tests/ExpoModulesSpec.swift +4 -3
  289. package/ios/Tests/LoggerSpec.swift +80 -0
  290. package/ios/Tests/{PropertyComponentSpec.swift → PropertyDefinitionSpec.swift} +1 -1
  291. package/ios/Tests/SharedObjectRegistrySpec.swift +34 -28
  292. package/ios/Tests/SharedObjectSpec.swift +141 -0
  293. package/ios/Tests/ViewDefinitionSpec.swift +1 -1
  294. package/package.json +2 -2
  295. package/src/EventEmitter.ts +15 -18
  296. package/src/NativeModule.ts +6 -0
  297. package/src/NativeModulesProxy.native.ts +5 -0
  298. package/src/NativeModulesProxy.types.ts +2 -2
  299. package/src/NativeViewManagerAdapter.native.tsx +25 -1
  300. package/src/PermissionsHook.ts +4 -0
  301. package/src/Refs.ts +10 -0
  302. package/src/SharedObject.ts +6 -0
  303. package/src/createWebModule.ts +5 -0
  304. package/src/createWebModule.web.ts +6 -0
  305. package/src/ensureNativeModulesAreInstalled.ts +24 -0
  306. package/src/hooks/useReleasingSharedObject.ts +51 -0
  307. package/src/index.ts +13 -0
  308. package/src/requireNativeModule.ts +2 -51
  309. package/src/ts-declarations/EventEmitter.ts +65 -0
  310. package/src/ts-declarations/ExpoModules.d.ts +0 -5
  311. package/src/ts-declarations/NativeModule.ts +18 -0
  312. package/src/ts-declarations/SharedObject.ts +16 -0
  313. package/src/ts-declarations/global.ts +60 -0
  314. package/src/web/CoreModule.ts +83 -0
  315. package/src/web/index.ts +0 -0
  316. package/src/web/index.web.ts +1 -0
  317. package/android/src/main/cpp/JSIInteropModuleRegistry.cpp +0 -196
  318. package/android/src/main/java/expo/modules/adapters/react/ArgumentsHelper.java +0 -48
  319. package/android/src/main/java/expo/modules/adapters/react/PromiseWrapper.java +0 -38
  320. package/android/src/main/java/expo/modules/adapters/react/services/CookieManagerModule.java +0 -53
  321. package/android/src/main/java/expo/modules/core/ArgumentsHelper.java +0 -44
  322. package/android/src/main/java/expo/modules/core/ExportedModule.java +0 -173
  323. package/android/src/main/java/expo/modules/core/ModuleRegistryDelegate.kt +0 -12
  324. package/android/src/main/java/expo/modules/core/ViewManager.java +0 -9
  325. package/android/src/main/java/expo/modules/core/interfaces/ExpoMethod.java +0 -12
  326. package/android/src/main/java/expo/modules/core/interfaces/ExpoProp.java +0 -10
  327. package/android/src/main/java/expo/modules/core/logging/LoggerOptions.kt +0 -29
  328. package/android-annotation/build.gradle +0 -48
  329. package/android-annotation/src/main/java/expo/modules/annotation/Config.kt +0 -7
  330. package/android-annotation/src/main/java/expo/modules/annotation/ConverterBinder.kt +0 -7
  331. package/android-annotation-processor/build.gradle +0 -54
  332. package/android-annotation-processor/src/main/java/expo/modules/annotationprocessor/ExpoSymbolProcessor.kt +0 -175
  333. package/android-annotation-processor/src/main/java/expo/modules/annotationprocessor/ExpoSymbolProcessorProvider.kt +0 -10
  334. package/android-annotation-processor/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider +0 -1
  335. package/ios/Classes/ClassComponentElement.swift +0 -37
  336. package/ios/Classes/ClassComponentElementsBuilder.swift +0 -34
  337. package/ios/ExpoBridgeModule.m +0 -7
  338. package/ios/ExpoBridgeModule.swift +0 -108
  339. package/ios/ExpoRuntime.swift +0 -28
  340. package/ios/Functions/AsyncFunctionComponent.swift +0 -327
  341. package/ios/Functions/SyncFunctionComponent.swift +0 -282
  342. package/ios/Interfaces/Font/EXFontManagerInterface.h +0 -9
  343. package/ios/Interfaces/Font/EXFontProcessorInterface.h +0 -15
  344. package/ios/Interfaces/Font/EXFontScalerInterface.h +0 -9
  345. package/ios/Interfaces/Font/EXFontScalersManagerInterface.h +0 -9
  346. package/ios/Legacy/Services/EXReactFontManager.h +0 -6
  347. package/ios/Legacy/Services/EXReactFontManager.m +0 -130
  348. package/ios/Modules/AnyModule.swift +0 -53
  349. package/ios/Modules/CoreModule.swift +0 -17
  350. package/ios/ReactDelegates/EXRCTBridgeDelegateInterceptor.h +0 -16
  351. package/ios/ReactDelegates/EXRCTBridgeDelegateInterceptor.m +0 -49
  352. package/ios/ReactDelegates/EXReactCompatibleHelpers.h +0 -15
  353. package/ios/ReactDelegates/EXReactCompatibleHelpers.m +0 -25
  354. package/ios/ReactDelegates/EXReactDelegateWrapper.m +0 -53
  355. package/ios/SharedObjects/SharedObject.swift +0 -31
  356. package/ios/Views/ViewDefinition.swift +0 -114
  357. package/ios/Views/ViewFactory.swift +0 -16
  358. package/ios/Views/ViewManagerDefinition.swift +0 -77
  359. package/ios/Views/ViewManagerDefinitionBuilder.swift +0 -11
  360. /package/ios/{AppContextConfig.swift → Core/AppContextConfig.swift} +0 -0
  361. /package/ios/{Arguments → Core/Arguments}/AnyArgument.swift +0 -0
  362. /package/ios/{Arguments → Core/Arguments}/Convertible.swift +0 -0
  363. /package/ios/{Arguments → Core/Arguments}/Convertibles.swift +0 -0
  364. /package/ios/{Arguments → Core/Arguments}/Enumerable.swift +0 -0
  365. /package/ios/{Classes → Core/Classes}/ClassRegistry.swift +0 -0
  366. /package/ios/{Convertibles → Core/Convertibles}/Convertibles+Color.swift +0 -0
  367. /package/ios/{Convertibles → Core/Convertibles}/Either.swift +0 -0
  368. /package/ios/{DynamicTypes → Core/DynamicTypes}/AnyDynamicType.swift +0 -0
  369. /package/ios/{DynamicTypes → Core/DynamicTypes}/DynamicArrayType.swift +0 -0
  370. /package/ios/{DynamicTypes → Core/DynamicTypes}/DynamicConvertibleType.swift +0 -0
  371. /package/ios/{DynamicTypes → Core/DynamicTypes}/DynamicDataType.swift +0 -0
  372. /package/ios/{DynamicTypes → Core/DynamicTypes}/DynamicDictionaryType.swift +0 -0
  373. /package/ios/{DynamicTypes → Core/DynamicTypes}/DynamicEnumType.swift +0 -0
  374. /package/ios/{DynamicTypes → Core/DynamicTypes}/DynamicJavaScriptType.swift +0 -0
  375. /package/ios/{DynamicTypes → Core/DynamicTypes}/DynamicOptionalType.swift +0 -0
  376. /package/ios/{DynamicTypes → Core/DynamicTypes}/DynamicRawType.swift +0 -0
  377. /package/ios/{DynamicTypes → Core/DynamicTypes}/DynamicType.swift +0 -0
  378. /package/ios/{DynamicTypes → Core/DynamicTypes}/DynamicTypedArrayType.swift +0 -0
  379. /package/ios/{DynamicTypes → Core/DynamicTypes}/DynamicViewType.swift +0 -0
  380. /package/ios/{EventListener.swift → Core/EventListener.swift} +0 -0
  381. /package/ios/{Events → Core/Events}/Callback.swift +0 -0
  382. /package/ios/{Events → Core/Events}/EventDispatcher.swift +0 -0
  383. /package/ios/{Exceptions → Core/Exceptions}/ChainableException.swift +0 -0
  384. /package/ios/{Exceptions → Core/Exceptions}/CodedError.swift +0 -0
  385. /package/ios/{Exceptions → Core/Exceptions}/CommonExceptions.swift +0 -0
  386. /package/ios/{Exceptions → Core/Exceptions}/Exception.swift +0 -0
  387. /package/ios/{Exceptions → Core/Exceptions}/ExceptionOrigin.swift +0 -0
  388. /package/ios/{Exceptions → Core/Exceptions}/GenericException.swift +0 -0
  389. /package/ios/{Exceptions → Core/Exceptions}/UnexpectedException.swift +0 -0
  390. /package/ios/{JavaScriptFunction.swift → Core/JavaScriptFunction.swift} +0 -0
  391. /package/ios/{Logging → Core/Logging}/LogType.swift +0 -0
  392. /package/ios/{Logging → Core/Logging}/PersistentFileLog.swift +0 -0
  393. /package/ios/{ModuleRegistry.swift → Core/ModuleRegistry.swift} +0 -0
  394. /package/ios/{Modules → Core/Modules}/Module.swift +0 -0
  395. /package/ios/{ModulesProvider.swift → Core/ModulesProvider.swift} +0 -0
  396. /package/ios/{Objects → Core/Objects}/JavaScriptObjectBuilder.swift +0 -0
  397. /package/ios/{Promise.swift → Core/Promise.swift} +0 -0
  398. /package/ios/{Records → Core/Records}/AnyField.swift +0 -0
  399. /package/ios/{Records → Core/Records}/Field.swift +0 -0
  400. /package/ios/{Records → Core/Records}/FieldExtensions.swift +0 -0
  401. /package/ios/{Records → Core/Records}/FieldOption.swift +0 -0
  402. /package/ios/{Records → Core/Records}/Record.swift +0 -0
  403. /package/ios/{SharedObjects → Core/SharedObjects}/SharedRef.swift +0 -0
  404. /package/ios/{TypedArrays → Core/TypedArrays}/AnyTypedArray.swift +0 -0
  405. /package/ios/{TypedArrays → Core/TypedArrays}/ConcreteTypedArrays.swift +0 -0
  406. /package/ios/{TypedArrays → Core/TypedArrays}/GenericTypedArray.swift +0 -0
  407. /package/ios/{TypedArrays → Core/TypedArrays}/TypedArray.swift +0 -0
  408. /package/ios/{Views → Core/Views}/ConcreteViewProp.swift +0 -0
@@ -2,18 +2,13 @@ package expo.modules.adapters.react;
2
2
 
3
3
  import android.util.SparseArray;
4
4
 
5
- import com.facebook.react.bridge.Dynamic;
6
5
  import com.facebook.react.bridge.Promise;
7
6
  import com.facebook.react.bridge.ReactApplicationContext;
8
7
  import com.facebook.react.bridge.ReactContextBaseJavaModule;
9
8
  import com.facebook.react.bridge.ReactMethod;
10
9
  import com.facebook.react.bridge.ReadableArray;
11
- import com.facebook.react.bridge.ReadableType;
12
10
 
13
11
  import java.lang.ref.WeakReference;
14
- import java.lang.reflect.Method;
15
- import java.util.ArrayList;
16
- import java.util.Collection;
17
12
  import java.util.HashMap;
18
13
  import java.util.List;
19
14
  import java.util.Map;
@@ -21,9 +16,7 @@ import java.util.Objects;
21
16
 
22
17
  import javax.annotation.Nullable;
23
18
 
24
- import expo.modules.core.ExportedModule;
25
19
  import expo.modules.core.ModuleRegistry;
26
- import expo.modules.core.interfaces.ExpoMethod;
27
20
  import expo.modules.kotlin.CoreLoggerKt;
28
21
  import expo.modules.kotlin.ExpoModulesHelper;
29
22
  import expo.modules.kotlin.KPromiseWrapper;
@@ -31,7 +24,7 @@ import expo.modules.kotlin.KotlinInteropModuleRegistry;
31
24
  import expo.modules.kotlin.ModulesProvider;
32
25
 
33
26
  /**
34
- * A wrapper/proxy for all {@link ExportedModule}s, gets exposed as {@link com.facebook.react.bridge.NativeModule},
27
+ * A wrapper/proxy for all {@link expo.modules.kotlin.modules.Module}s, gets exposed as {@link com.facebook.react.bridge.NativeModule},
35
28
  * so that JS code can call methods of the internal modules.
36
29
  */
37
30
  public class NativeModulesProxy extends ReactContextBaseJavaModule {
@@ -42,11 +35,9 @@ public class NativeModulesProxy extends ReactContextBaseJavaModule {
42
35
 
43
36
  private final static String METHOD_INFO_KEY = "key";
44
37
  private final static String METHOD_INFO_NAME = "name";
45
- private final static String METHOD_INFO_ARGUMENTS_COUNT = "argumentsCount";
46
38
 
47
39
  private final static String UNEXPECTED_ERROR = "E_UNEXPECTED_ERROR";
48
40
  private final static String UNDEFINED_METHOD_ERROR = "E_UNDEFINED_METHOD";
49
- private final static String ARGS_TYPES_MISMATCH_ERROR = "E_ARGS_TYPES_MISMATCH";
50
41
 
51
42
  private ModuleRegistry mModuleRegistry;
52
43
  private Map<String, Map<String, Integer>> mExportedMethodsKeys;
@@ -102,30 +93,9 @@ public class NativeModulesProxy extends ReactContextBaseJavaModule {
102
93
  kotlinModuleRegistry.emitOnCreate();
103
94
  kotlinModuleRegistry.installJSIInterop();
104
95
 
105
- Collection<ExportedModule> exportedModules = mModuleRegistry.getAllExportedModules();
106
-
107
- Map<String, Object> modulesConstants = new HashMap<>(exportedModules.size());
108
- Map<String, Object> exportedMethodsMap = new HashMap<>(exportedModules.size());
109
-
110
- for (ExportedModule exportedModule : exportedModules) {
111
- String moduleName = exportedModule.getName();
112
- modulesConstants.put(moduleName, exportedModule.getConstants());
113
-
114
- List<Map<String, Object>> exportedMethods = transformExportedMethodsMap(exportedModule.getExportedMethods());
115
- assignExportedMethodsKeys(moduleName, exportedMethods);
116
-
117
- exportedMethodsMap.put(moduleName, exportedMethods);
118
- }
119
-
120
- modulesConstants.putAll(mKotlinInteropModuleRegistry.exportedModulesConstants());
121
- exportedMethodsMap.putAll(mKotlinInteropModuleRegistry.exportMethods((name, info) -> {
122
- assignExportedMethodsKeys(name, (List<Map<String, Object>>) info);
123
- return null;
124
- }));
125
-
126
96
  Map<String, Object> constants = new HashMap<>(3);
127
- constants.put(MODULES_CONSTANTS_KEY, modulesConstants);
128
- constants.put(EXPORTED_METHODS_KEY, exportedMethodsMap);
97
+ constants.put(MODULES_CONSTANTS_KEY, new HashMap<>());
98
+ constants.put(EXPORTED_METHODS_KEY, new HashMap<>());
129
99
  constants.put(VIEW_MANAGERS_METADATA_KEY, mKotlinInteropModuleRegistry.viewManagersMetadata());
130
100
 
131
101
  CoreLoggerKt.getLogger().info("✅ Constants were exported");
@@ -136,26 +106,16 @@ public class NativeModulesProxy extends ReactContextBaseJavaModule {
136
106
  }
137
107
 
138
108
  /**
139
- * The only exported {@link ReactMethod}.
109
+ * The only exported {@link ReactMethod} for legacy NativeUnimoduleProxy.
110
+ * This is used only when JSI is not available. i.e. the legacy remote debugging.
140
111
  * JavaScript can call native modules' exported methods ({@link ExpoMethod}) using this method as a proxy.
141
112
  * For native {@link ExpoMethod} `void put(String key, int value)` in `NativeDictionary` module
142
- * JavaScript could call `NativeModulesProxy.callMethod("NativeDictionary", "put", ["key", 42])`
143
- * or `NativeModulesProxy.callMethod("NativeDictionary", 2, ["key", 42])`, where the second argument
113
+ * JavaScript could call `NativeModulesProxy.callMethod("NativeDictionary", 2, ["key", 42])`, where the second argument
144
114
  * is a method's constant key.
145
115
  */
146
116
  @ReactMethod
147
- public void callMethod(String moduleName, Dynamic methodKeyOrName, ReadableArray arguments, final Promise promise) {
148
- String methodName;
149
- if (methodKeyOrName.getType() == ReadableType.String) {
150
- methodName = methodKeyOrName.asString();
151
- } else if (methodKeyOrName.getType() == ReadableType.Number) {
152
- methodName = mExportedMethodsReverseKeys.get(moduleName).get(methodKeyOrName.asInt());
153
- } else {
154
- promise.reject(UNEXPECTED_ERROR, "Method key is neither a String nor an Integer -- don't know how to map it to method name.");
155
- return;
156
- }
157
-
158
- callMethod(moduleName, methodName, arguments, promise);
117
+ public void callMethod(String moduleName, int methodKey, ReadableArray arguments, final Promise promise) {
118
+ callMethod(moduleName, mExportedMethodsReverseKeys.get(moduleName).get(methodKey), arguments, promise);
159
119
  }
160
120
 
161
121
  public void callMethod(String moduleName, String methodName, ReadableArray arguments, final Promise promise) {
@@ -164,57 +124,10 @@ public class NativeModulesProxy extends ReactContextBaseJavaModule {
164
124
  return;
165
125
  }
166
126
 
167
- try {
168
- List<Object> nativeArguments = getNativeArgumentsForMethod(arguments, mModuleRegistry.getExportedModule(moduleName).getExportedMethodInfos().get(methodName));
169
- nativeArguments.add(new PromiseWrapper(promise));
170
-
171
- mModuleRegistry.getExportedModule(moduleName).invokeExportedMethod(methodName, nativeArguments);
172
- } catch (IllegalArgumentException e) {
173
- promise.reject(ARGS_TYPES_MISMATCH_ERROR, e.getMessage(), e);
174
- } catch (RuntimeException e) {
175
- promise.reject(UNEXPECTED_ERROR, "Encountered an exception while calling native method: " + e.getMessage(), e);
176
- } catch (NoSuchMethodException e) {
177
- promise.reject(
178
- UNDEFINED_METHOD_ERROR,
179
- "Method " + methodName + " of Java module " + moduleName + " is undefined.",
180
- e
181
- );
182
- }
183
- }
184
-
185
- /**
186
- * Converts {@link ReadableArray} of arguments into a list of Java Objects.
187
- * Throws {@link RuntimeException} if it can't convert some {@link ReadableType} to Object.
188
- * Method is used when converting Double to proper argument.
189
- */
190
- private static List<Object> getNativeArgumentsForMethod(ReadableArray arguments, ExportedModule.MethodInfo methodInfo) {
191
- List<Object> nativeArguments = new ArrayList<>();
192
-
193
- for (int i = 0; i < arguments.size(); i++) {
194
- nativeArguments.add(ArgumentsHelper.getNativeArgumentForExpectedClass(arguments.getDynamic(i), methodInfo.getParameterTypes()[i]));
195
- }
196
- return nativeArguments;
197
- }
198
-
199
- /**
200
- * Transforms exportedMethodsMap to a map of methodInfos
201
- */
202
- private List<Map<String, Object>> transformExportedMethodsMap(Map<String, Method> exportedMethods) {
203
- List<Map<String, Object>> methods = new ArrayList<>(exportedMethods.size());
204
- for (Map.Entry<String, Method> entry : exportedMethods.entrySet()) {
205
- methods.add(getMethodInfo(entry.getKey(), entry.getValue()));
206
- }
207
- return methods;
208
- }
209
-
210
- /**
211
- * Returns methodInfo Map (a Map containing a value for key argumentsCount).
212
- */
213
- private Map<String, Object> getMethodInfo(String name, Method method) {
214
- Map<String, Object> info = new HashMap<>(2);
215
- info.put(METHOD_INFO_NAME, name);
216
- info.put(METHOD_INFO_ARGUMENTS_COUNT, method.getParameterTypes().length - 1); // - 1 is for the Promise
217
- return info;
127
+ promise.reject(
128
+ UNDEFINED_METHOD_ERROR,
129
+ "Method " + methodName + " of Java module " + moduleName + " is undefined."
130
+ );
218
131
  }
219
132
 
220
133
  /**
@@ -252,7 +165,8 @@ public class NativeModulesProxy extends ReactContextBaseJavaModule {
252
165
  }
253
166
 
254
167
  @Override
255
- public void onCatalystInstanceDestroy() {
168
+ public void invalidate() {
169
+ super.invalidate();
256
170
  mModuleRegistry.onDestroy();
257
171
  mKotlinInteropModuleRegistry.onDestroy();
258
172
  }
@@ -4,8 +4,10 @@ import android.content.Context;
4
4
 
5
5
  import com.facebook.react.bridge.ReactContext;
6
6
 
7
+ import java.util.Arrays;
8
+ import java.util.List;
9
+
7
10
  import expo.modules.adapters.react.permissions.PermissionsService;
8
- import expo.modules.adapters.react.services.CookieManagerModule;
9
11
  import expo.modules.adapters.react.services.EventEmitterModule;
10
12
  import expo.modules.adapters.react.services.FontManagerModule;
11
13
  import expo.modules.adapters.react.services.RuntimeEnvironmentModule;
@@ -14,9 +16,6 @@ import expo.modules.core.BasePackage;
14
16
  import expo.modules.core.interfaces.InternalModule;
15
17
  import expo.modules.core.interfaces.Package;
16
18
 
17
- import java.util.Arrays;
18
- import java.util.List;
19
-
20
19
  /**
21
20
  * A {@link Package} creating modules provided with the @unimodules/react-native-adapter package.
22
21
  */
@@ -27,7 +26,6 @@ public class ReactAdapterPackage extends BasePackage {
27
26
  // We can force-cast here, because this package will only be used in React Native context.
28
27
  ReactContext reactContext = (ReactContext) context;
29
28
  return Arrays.asList(
30
- new CookieManagerModule(reactContext),
31
29
  new UIManagerModuleWrapper(reactContext),
32
30
  new EventEmitterModule(reactContext),
33
31
  new FontManagerModule(),
@@ -5,19 +5,17 @@ import android.content.Context;
5
5
  import com.facebook.react.ReactPackage;
6
6
  import com.facebook.react.bridge.ReactApplicationContext;
7
7
 
8
- import expo.modules.core.ExportedModule;
8
+ import java.util.ArrayList;
9
+ import java.util.Collection;
10
+ import java.util.HashSet;
11
+ import java.util.List;
12
+
9
13
  import expo.modules.core.ModuleRegistry;
10
14
  import expo.modules.core.ModuleRegistryProvider;
11
- import expo.modules.core.ViewManager;
12
15
  import expo.modules.core.interfaces.InternalModule;
13
16
  import expo.modules.core.interfaces.Package;
14
17
  import expo.modules.core.interfaces.SingletonModule;
15
18
 
16
- import java.util.ArrayList;
17
- import java.util.Collection;
18
- import java.util.HashSet;
19
- import java.util.List;
20
-
21
19
  /**
22
20
  * Since React Native v0.55, {@link com.facebook.react.ReactPackage#createViewManagers(ReactApplicationContext)}
23
21
  * gets called only once per lifetime of {@link com.facebook.react.ReactInstanceManager}.
@@ -27,7 +25,6 @@ import java.util.List;
27
25
  * only once (and managers returned this one time will persist "forever").
28
26
  */
29
27
  public class ReactModuleRegistryProvider extends ModuleRegistryProvider {
30
- private Collection<ViewManager> mViewManagers;
31
28
  private Collection<com.facebook.react.uimanager.ViewManager> mReactViewManagers;
32
29
  private Collection<SingletonModule> mSingletonModules;
33
30
 
@@ -43,13 +40,11 @@ public class ReactModuleRegistryProvider extends ModuleRegistryProvider {
43
40
  @Override
44
41
  public ModuleRegistry get(Context context) {
45
42
  Collection<InternalModule> internalModules = new ArrayList<>();
46
- Collection<ExportedModule> exportedModules = new ArrayList<>();
47
43
 
48
44
  ReactPackagesProvider reactPackagesProvider = new ReactPackagesProvider();
49
45
 
50
46
  for (Package pkg : getPackages()) {
51
47
  internalModules.addAll(pkg.createInternalModules(context));
52
- exportedModules.addAll(pkg.createExportedModules(context));
53
48
 
54
49
  if (pkg instanceof ReactPackage) {
55
50
  reactPackagesProvider.addPackage((ReactPackage) pkg);
@@ -57,7 +52,7 @@ public class ReactModuleRegistryProvider extends ModuleRegistryProvider {
57
52
  }
58
53
  internalModules.add(reactPackagesProvider);
59
54
 
60
- return new ModuleRegistry(internalModules, exportedModules, getViewManagers(context), getSingletonModules(context));
55
+ return new ModuleRegistry(internalModules, getSingletonModules(context));
61
56
  }
62
57
 
63
58
  private Collection<SingletonModule> getSingletonModules(Context context) {
@@ -74,17 +69,6 @@ public class ReactModuleRegistryProvider extends ModuleRegistryProvider {
74
69
  return singletonModules;
75
70
  }
76
71
 
77
- // TODO: change access to package private when react-native-adapter was removed.
78
- public Collection<ViewManager> getViewManagers(Context context) {
79
- if (mViewManagers != null) {
80
- return mViewManagers;
81
- }
82
-
83
- mViewManagers = new HashSet<>();
84
- mViewManagers.addAll(createViewManagers(context));
85
- return mViewManagers;
86
- }
87
-
88
72
  // TODO: change access to package private when react-native-adapter was removed.
89
73
  public Collection<com.facebook.react.uimanager.ViewManager> getReactViewManagers(ReactApplicationContext context) {
90
74
  if (mReactViewManagers != null) {
@@ -2,7 +2,9 @@ package expo.modules.adapters.react.apploader
2
2
 
3
3
  import android.content.Context
4
4
  import com.facebook.react.ReactApplication
5
+ import com.facebook.react.ReactInstanceEventListener
5
6
  import com.facebook.react.ReactInstanceManager
7
+ import com.facebook.react.bridge.ReactContext
6
8
  import com.facebook.react.common.LifecycleState
7
9
  import expo.modules.apploader.HeadlessAppLoader
8
10
  import expo.modules.core.interfaces.Consumer
@@ -22,10 +24,12 @@ class RNHeadlessAppLoader @DoNotStrip constructor(private val context: Context)
22
24
  if (context.applicationContext is ReactApplication) {
23
25
  val reactInstanceManager = (context.applicationContext as ReactApplication).reactNativeHost.reactInstanceManager
24
26
  if (!appRecords.containsKey(params.appScopeKey)) {
25
- reactInstanceManager.addReactInstanceEventListener {
26
- HeadlessAppLoaderNotifier.notifyAppLoaded(params.appScopeKey)
27
- callback?.apply(true)
28
- }
27
+ reactInstanceManager.addReactInstanceEventListener(object : ReactInstanceEventListener {
28
+ override fun onReactContextInitialized(context: ReactContext) {
29
+ HeadlessAppLoaderNotifier.notifyAppLoaded(params.appScopeKey)
30
+ callback?.apply(true)
31
+ }
32
+ })
29
33
  appRecords[params.appScopeKey] = reactInstanceManager
30
34
  if (reactInstanceManager.hasStartedCreatingInitialContext()) {
31
35
  reactInstanceManager.recreateReactContextInBackground()
@@ -6,7 +6,6 @@ import com.facebook.react.bridge.Arguments;
6
6
  import com.facebook.react.bridge.ReactContext;
7
7
  import com.facebook.react.modules.core.DeviceEventManagerModule;
8
8
  import com.facebook.react.uimanager.UIManagerHelper;
9
- import com.facebook.react.uimanager.UIManagerModule;
10
9
  import com.facebook.react.uimanager.events.EventDispatcher;
11
10
  import com.facebook.react.uimanager.events.RCTEventEmitter;
12
11
 
@@ -15,6 +15,7 @@ import com.facebook.react.uimanager.UIManagerHelper;
15
15
  import com.facebook.react.uimanager.UIManagerModule;
16
16
 
17
17
  import java.lang.ref.WeakReference;
18
+ import java.util.ArrayList;
18
19
  import java.util.Arrays;
19
20
  import java.util.List;
20
21
  import java.util.Map;
@@ -28,10 +29,10 @@ import expo.modules.core.interfaces.LifecycleEventListener;
28
29
  import expo.modules.core.interfaces.services.UIManager;
29
30
 
30
31
  public class UIManagerModuleWrapper implements
31
- ActivityProvider,
32
- InternalModule,
33
- JavaScriptContextProvider,
34
- UIManager {
32
+ ActivityProvider,
33
+ InternalModule,
34
+ JavaScriptContextProvider,
35
+ UIManager {
35
36
  private ReactContext mReactContext;
36
37
  private Map<LifecycleEventListener, com.facebook.react.bridge.LifecycleEventListener> mLifecycleListenersMap = new WeakHashMap<>();
37
38
  private Map<ActivityEventListener, com.facebook.react.bridge.ActivityEventListener> mActivityEventListenersMap = new WeakHashMap<>();
@@ -47,9 +48,9 @@ public class UIManagerModuleWrapper implements
47
48
  @Override
48
49
  public List<Class> getExportedInterfaces() {
49
50
  return Arrays.<Class>asList(
50
- ActivityProvider.class,
51
- JavaScriptContextProvider.class,
52
- UIManager.class
51
+ ActivityProvider.class,
52
+ JavaScriptContextProvider.class,
53
+ UIManager.class
53
54
  );
54
55
  }
55
56
 
@@ -67,7 +68,7 @@ public class UIManagerModuleWrapper implements
67
68
  block.resolve(tClass.cast(view));
68
69
  } else {
69
70
  block.reject(new IllegalStateException(
70
- "Expected view to be of " + tClass + "; found " + view.getClass() + " instead"));
71
+ "Expected view to be of " + tClass + "; found " + view.getClass() + " instead"));
71
72
  }
72
73
  } catch (Exception e) {
73
74
  block.reject(e);
@@ -169,6 +170,20 @@ public class UIManagerModuleWrapper implements
169
170
  mReactContext.addLifecycleEventListener(mLifecycleListenersMap.get(listener));
170
171
  }
171
172
 
173
+ @Override
174
+ public void onDestroy() {
175
+ // We need to create a copy to avoid ConcurrentModificationException
176
+ ArrayList<com.facebook.react.bridge.LifecycleEventListener> tmpList = new ArrayList<>(mLifecycleListenersMap.values());
177
+ for (com.facebook.react.bridge.LifecycleEventListener listener : tmpList) {
178
+ listener.onHostDestroy();
179
+ }
180
+
181
+ for (com.facebook.react.bridge.LifecycleEventListener listener : mLifecycleListenersMap.values()) {
182
+ mReactContext.removeLifecycleEventListener(listener);
183
+ }
184
+ mLifecycleListenersMap.clear();
185
+ }
186
+
172
187
  @Override
173
188
  public void unregisterLifecycleEventListener(LifecycleEventListener listener) {
174
189
  getContext().removeLifecycleEventListener(mLifecycleListenersMap.get(listener));
@@ -21,16 +21,6 @@ public class BasePackage implements Package {
21
21
  return Collections.emptyList();
22
22
  }
23
23
 
24
- @Override
25
- public List<ExportedModule> createExportedModules(Context context) {
26
- return Collections.emptyList();
27
- }
28
-
29
- @Override
30
- public List<ViewManager> createViewManagers(Context context) {
31
- return Collections.emptyList();
32
- }
33
-
34
24
  @Override
35
25
  public List<SingletonModule> createSingletonModules(Context context) {
36
26
  return Collections.emptyList();
@@ -20,6 +20,7 @@ object ModulePriorities {
20
20
  // {key} to {value}
21
21
  // key: full qualified class name
22
22
  // value: priority value, the higher value takes precedence
23
+ "expo.modules.splashscreen.SplashScreenPackage" to 11,
23
24
  "expo.modules.updates.UpdatesPackage" to 10
24
25
  )
25
26
  }
@@ -13,25 +13,17 @@ import java.util.Map;
13
13
 
14
14
  public class ModuleRegistry {
15
15
  private final Map<Class, InternalModule> mInternalModulesMap = new HashMap<>();
16
- private final Map<String, ExportedModule> mExportedModulesMap = new HashMap<>();
17
- private final Map<Class, ExportedModule> mExportedModulesByClassMap = new HashMap<>();
18
16
  private final Map<String, SingletonModule> mSingletonModulesMap = new HashMap<>();
19
17
  private final List<WeakReference<RegistryLifecycleListener>> mExtraRegistryLifecycleListeners = new ArrayList<>();
20
18
  private volatile boolean mIsInitialized = false;
21
19
 
22
20
  public ModuleRegistry(
23
21
  Collection<InternalModule> internalModules,
24
- Collection<ExportedModule> exportedModules,
25
- Collection<ViewManager> viewManagers,
26
22
  Collection<SingletonModule> singletonModules) {
27
23
  for (InternalModule internalModule : internalModules) {
28
24
  registerInternalModule(internalModule);
29
25
  }
30
26
 
31
- for (ExportedModule module : exportedModules) {
32
- registerExportedModule(module);
33
- }
34
-
35
27
  for (SingletonModule singleton : singletonModules) {
36
28
  registerSingletonModule(singleton);
37
29
  }
@@ -48,18 +40,6 @@ public class ModuleRegistry {
48
40
  return (T) mInternalModulesMap.get(interfaceClass);
49
41
  }
50
42
 
51
- public ExportedModule getExportedModule(String name) {
52
- return mExportedModulesMap.get(name);
53
- }
54
-
55
- public ExportedModule getExportedModuleOfClass(Class moduleClass) {
56
- return mExportedModulesByClassMap.get(moduleClass);
57
- }
58
-
59
- public Collection<ExportedModule> getAllExportedModules() {
60
- return mExportedModulesMap.values();
61
- }
62
-
63
43
  public <T> T getSingletonModule(String singletonName, Class<T> singletonClass) {
64
44
  return (T) mSingletonModulesMap.get(singletonName);
65
45
  }
@@ -80,12 +60,6 @@ public class ModuleRegistry {
80
60
  return mInternalModulesMap.remove(exportedInterface);
81
61
  }
82
62
 
83
- public void registerExportedModule(ExportedModule module) {
84
- String moduleName = module.getName();
85
- mExportedModulesMap.put(moduleName, module);
86
- mExportedModulesByClassMap.put(module.getClass(), module);
87
- }
88
-
89
63
  public void registerSingletonModule(SingletonModule singleton) {
90
64
  String singletonName = singleton.getName();
91
65
  mSingletonModulesMap.put(singletonName, singleton);
@@ -120,9 +94,7 @@ public class ModuleRegistry {
120
94
  }
121
95
 
122
96
  public void initialize() {
123
- List<RegistryLifecycleListener> lifecycleListeners = new ArrayList<>();
124
- lifecycleListeners.addAll(mExportedModulesMap.values());
125
- lifecycleListeners.addAll(mInternalModulesMap.values());
97
+ List<RegistryLifecycleListener> lifecycleListeners = new ArrayList<>(mInternalModulesMap.values());
126
98
 
127
99
  for (WeakReference<RegistryLifecycleListener> ref : mExtraRegistryLifecycleListeners) {
128
100
  if (ref.get() != null) {
@@ -136,9 +108,7 @@ public class ModuleRegistry {
136
108
  }
137
109
 
138
110
  public void onDestroy() {
139
- List<RegistryLifecycleListener> lifecycleListeners = new ArrayList<>();
140
- lifecycleListeners.addAll(mExportedModulesMap.values());
141
- lifecycleListeners.addAll(mInternalModulesMap.values());
111
+ List<RegistryLifecycleListener> lifecycleListeners = new ArrayList<>(mInternalModulesMap.values());
142
112
 
143
113
  for (WeakReference<RegistryLifecycleListener> ref : mExtraRegistryLifecycleListeners) {
144
114
  if (ref.get() != null) {
@@ -28,8 +28,6 @@ public class ModuleRegistryProvider {
28
28
  public ModuleRegistry get(Context context) {
29
29
  return new ModuleRegistry(
30
30
  createInternalModules(context),
31
- createExportedModules(context),
32
- createViewManagers(context),
33
31
  createSingletonModules(context)
34
32
  );
35
33
  }
@@ -42,22 +40,6 @@ public class ModuleRegistryProvider {
42
40
  return internalModules;
43
41
  }
44
42
 
45
- public Collection<ExportedModule> createExportedModules(Context context) {
46
- Collection<ExportedModule> exportedModules = new ArrayList<>();
47
- for (Package pkg : getPackages()) {
48
- exportedModules.addAll(pkg.createExportedModules(context));
49
- }
50
- return exportedModules;
51
- }
52
-
53
- public Collection<ViewManager> createViewManagers(Context context) {
54
- Collection<ViewManager> viewManagers = new ArrayList<>();
55
- for (Package pkg : getPackages()) {
56
- viewManagers.addAll(pkg.createViewManagers(context));
57
- }
58
- return viewManagers;
59
- }
60
-
61
43
  public Collection<SingletonModule> createSingletonModules(Context context) {
62
44
  Collection<SingletonModule> singletonModules = new ArrayList<>();
63
45
  for (Package pkg : getPackages()) {
@@ -1,7 +1,9 @@
1
1
  package expo.modules.core;
2
2
 
3
3
  import expo.modules.core.interfaces.CodedThrowable;
4
+ import kotlin.Deprecated;
4
5
 
6
+ @Deprecated(message = "AsyncFunction will crash when called. Use expo.modules.kotlin.Promise instead")
5
7
  public interface Promise {
6
8
  String UNKNOWN_ERROR = "E_UNKNOWN_ERROR";
7
9
 
@@ -2,9 +2,6 @@ package expo.modules.core.interfaces;
2
2
 
3
3
  import android.content.Context;
4
4
 
5
- import expo.modules.core.ExportedModule;
6
- import expo.modules.core.ViewManager;
7
-
8
5
  import java.util.Collections;
9
6
  import java.util.List;
10
7
 
@@ -14,20 +11,6 @@ public interface Package {
14
11
  return Collections.emptyList();
15
12
  }
16
13
 
17
- default List<? extends ExportedModule> createExportedModules(Context context) {
18
- return Collections.emptyList();
19
- }
20
-
21
- /**
22
- * @param context A context which you can use when initializing view managers,
23
- * however remember NOT TO KEEP REFERENCES TO IT. View managers
24
- * are reused between refreshes of the application, so keeping
25
- * reference to the context in view managers makes it leak.
26
- */
27
- default List<? extends ViewManager> createViewManagers(Context context) {
28
- return Collections.emptyList();
29
- }
30
-
31
14
  default List<? extends expo.modules.core.interfaces.SingletonModule> createSingletonModules(Context context) {
32
15
  return Collections.emptyList();
33
16
  }
@@ -16,15 +16,6 @@ import androidx.annotation.Nullable;
16
16
  * Used by {@link ReactActivityDelegateWrapper}
17
17
  */
18
18
  public interface ReactActivityHandler {
19
- /**
20
- * Given modules a chance to override the default {@link ReactRootView}
21
- * @return the override ReactRootView instance or null if not to override
22
- */
23
- @Nullable
24
- default ReactRootView createReactRootView(Activity activity) {
25
- return null;
26
- }
27
-
28
19
  /**
29
20
  * Gives modules a chance to create a ViewGroup that is used as a container for the ReactRootView,
30
21
  * which is added as a child to the container if non-null.