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
@@ -4,11 +4,13 @@
4
4
  #include "JavaScriptValue.h"
5
5
  #include "JavaScriptObject.h"
6
6
  #include "Exceptions.h"
7
- #include "JSIInteropModuleRegistry.h"
7
+ #include "JSIContext.h"
8
8
  #include "JSIUtils.h"
9
9
 
10
10
  #if UNIT_TEST
11
11
 
12
+ #include "TestingSyncJSCallInvoker.h"
13
+
12
14
  #if USE_HERMES
13
15
 
14
16
  #include <hermes/hermes.h>
@@ -27,32 +29,7 @@ namespace jsi = facebook::jsi;
27
29
 
28
30
  namespace expo {
29
31
 
30
- namespace {
31
-
32
- /**
33
- * Dummy CallInvoker that invokes everything immediately.
34
- * Used in the test environment to check the async flow.
35
- */
36
- class SyncCallInvoker : public react::CallInvoker {
37
- public:
38
- void invokeAsync(std::function<void()> &&func) override {
39
- func();
40
- }
41
-
42
- void invokeSync(std::function<void()> &&func) override {
43
- func();
44
- }
45
-
46
- ~SyncCallInvoker() override = default;
47
- };
48
-
49
- } // namespace
50
-
51
- JavaScriptRuntime::JavaScriptRuntime(
52
- JSIInteropModuleRegistry *jsiInteropModuleRegistry
53
- )
54
- : jsInvoker(std::make_shared<SyncCallInvoker>()),
55
- jsiInteropModuleRegistry(jsiInteropModuleRegistry) {
32
+ JavaScriptRuntime::JavaScriptRuntime() {
56
33
  #if !UNIT_TEST
57
34
  throw std::logic_error(
58
35
  "The JavaScriptRuntime constructor is only available when UNIT_TEST is defined.");
@@ -86,6 +63,8 @@ JavaScriptRuntime::JavaScriptRuntime(
86
63
  runtime = facebook::jsc::makeJSCRuntime();
87
64
  #endif
88
65
 
66
+ jsInvoker = std::make_shared<TestingSyncJSCallInvoker>(runtime);
67
+
89
68
  // By default "global" property isn't set.
90
69
  runtime->global().setProperty(
91
70
  *runtime,
@@ -111,11 +90,9 @@ JavaScriptRuntime::JavaScriptRuntime(
111
90
  }
112
91
 
113
92
  JavaScriptRuntime::JavaScriptRuntime(
114
- JSIInteropModuleRegistry *jsiInteropModuleRegistry,
115
93
  jsi::Runtime *runtime,
116
94
  std::shared_ptr<react::CallInvoker> jsInvoker
117
- ) : jsInvoker(std::move(jsInvoker)),
118
- jsiInteropModuleRegistry(jsiInteropModuleRegistry) {
95
+ ) : jsInvoker(std::move(jsInvoker)) {
119
96
  // Creating a shared pointer that points to the runtime but doesn't own it, thus doesn't release it.
120
97
  // In this code flow, the runtime should be owned by something else like the CatalystInstance.
121
98
  // See explanation for constructor (8): https://en.cppreference.com/w/cpp/memory/shared_ptr/shared_ptr
@@ -131,7 +108,7 @@ JavaScriptRuntime::evaluateScript(const std::string &script) {
131
108
  auto scriptBuffer = std::make_shared<jsi::StringBuffer>(script);
132
109
  try {
133
110
  return JavaScriptValue::newInstance(
134
- jsiInteropModuleRegistry,
111
+ getJSIContext(get()),
135
112
  weak_from_this(),
136
113
  std::make_shared<jsi::Value>(runtime->evaluateJavaScript(scriptBuffer, "<<evaluated>>"))
137
114
  );
@@ -154,12 +131,12 @@ JavaScriptRuntime::evaluateScript(const std::string &script) {
154
131
 
155
132
  jni::local_ref<JavaScriptObject::javaobject> JavaScriptRuntime::global() {
156
133
  auto global = std::make_shared<jsi::Object>(runtime->global());
157
- return JavaScriptObject::newInstance(jsiInteropModuleRegistry, weak_from_this(), global);
134
+ return JavaScriptObject::newInstance(getJSIContext(get()), weak_from_this(), global);
158
135
  }
159
136
 
160
137
  jni::local_ref<JavaScriptObject::javaobject> JavaScriptRuntime::createObject() {
161
138
  auto newObject = std::make_shared<jsi::Object>(*runtime);
162
- return JavaScriptObject::newInstance(jsiInteropModuleRegistry, weak_from_this(), newObject);
139
+ return JavaScriptObject::newInstance(getJSIContext(get()), weak_from_this(), newObject);
163
140
  }
164
141
 
165
142
  void JavaScriptRuntime::drainJSEventLoop() {
@@ -167,9 +144,13 @@ void JavaScriptRuntime::drainJSEventLoop() {
167
144
  }
168
145
 
169
146
  void JavaScriptRuntime::installMainObject() {
170
- auto coreModule = jsiInteropModuleRegistry->getCoreModule();
171
- coreModule->cthis()->jsiInteropModuleRegistry = jsiInteropModuleRegistry;
172
- mainObject = coreModule->cthis()->getJSIObject(*runtime);
147
+ auto coreModule = getJSIContext(get())->getCoreModule();
148
+
149
+ // As opposed to other modules, the core module is represented by a raw JS object instead of an instance of NativeModule class.
150
+ mainObject = std::make_shared<jsi::Object>(*runtime);
151
+
152
+ // Decorate the core object based on the module definition.
153
+ coreModule->cthis()->decorate(*runtime, mainObject.get());
173
154
 
174
155
  auto global = runtime->global();
175
156
 
@@ -177,7 +158,7 @@ void JavaScriptRuntime::installMainObject() {
177
158
 
178
159
  descriptor.setProperty(*runtime, "value", jsi::Value(*runtime, *mainObject));
179
160
 
180
- common::definePropertyOnJSIObject(
161
+ common::defineProperty(
181
162
  *runtime,
182
163
  &global,
183
164
  "expo",
@@ -188,8 +169,4 @@ void JavaScriptRuntime::installMainObject() {
188
169
  std::shared_ptr<jsi::Object> JavaScriptRuntime::getMainObject() {
189
170
  return mainObject;
190
171
  }
191
-
192
- JSIInteropModuleRegistry *JavaScriptRuntime::getModuleRegistry() {
193
- return jsiInteropModuleRegistry;
194
- }
195
172
  } // namespace expo
@@ -18,7 +18,7 @@ class JavaScriptValue;
18
18
 
19
19
  class JavaScriptObject;
20
20
 
21
- class JSIInteropModuleRegistry;
21
+ class JSIContext;
22
22
 
23
23
  /**
24
24
  * A wrapper for the jsi::Runtime.
@@ -35,12 +35,9 @@ public:
35
35
  * This flow is mostly intended for tests. The JS call invoker is set to `SyncCallInvoker`.
36
36
  * See **JavaScriptRuntime.cpp** for the `SyncCallInvoker` implementation.
37
37
  */
38
- JavaScriptRuntime(
39
- JSIInteropModuleRegistry *jsiInteropModuleRegistry
40
- );
38
+ JavaScriptRuntime();
41
39
 
42
40
  JavaScriptRuntime(
43
- JSIInteropModuleRegistry *jsiInteropModuleRegistry,
44
41
  jsi::Runtime *runtime,
45
42
  std::shared_ptr<react::CallInvoker> jsInvoker
46
43
  );
@@ -80,11 +77,8 @@ public:
80
77
 
81
78
  std::shared_ptr<jsi::Object> getMainObject();
82
79
 
83
- JSIInteropModuleRegistry *getModuleRegistry();
84
-
85
80
  private:
86
81
  std::shared_ptr<jsi::Runtime> runtime;
87
82
  std::shared_ptr<jsi::Object> mainObject;
88
- JSIInteropModuleRegistry *jsiInteropModuleRegistry;
89
83
  };
90
84
  } // namespace expo
@@ -1,7 +1,7 @@
1
1
  #include "JavaScriptTypedArray.h"
2
2
 
3
3
  #include "JavaScriptRuntime.h"
4
- #include "JSIInteropModuleRegistry.h"
4
+ #include "JSIContext.h"
5
5
 
6
6
  namespace expo {
7
7
 
@@ -91,7 +91,7 @@ void JavaScriptTypedArray::writeBuffer(
91
91
  }
92
92
 
93
93
  jni::local_ref<JavaScriptTypedArray::javaobject> JavaScriptTypedArray::newInstance(
94
- JSIInteropModuleRegistry *jsiInteropModuleRegistry,
94
+ JSIContext *jSIContext,
95
95
  std::weak_ptr<JavaScriptRuntime> runtime,
96
96
  std::shared_ptr<jsi::Object> jsObject
97
97
  ) {
@@ -99,7 +99,7 @@ jni::local_ref<JavaScriptTypedArray::javaobject> JavaScriptTypedArray::newInstan
99
99
  std::move(runtime),
100
100
  std::move(jsObject)
101
101
  );
102
- jsiInteropModuleRegistry->jniDeallocator->addReference(object);
102
+ jSIContext->jniDeallocator->addReference(object);
103
103
  return object;
104
104
  }
105
105
  }
@@ -26,7 +26,7 @@ public:
26
26
  static void registerNatives();
27
27
 
28
28
  static jni::local_ref<JavaScriptTypedArray::javaobject> newInstance(
29
- JSIInteropModuleRegistry *jsiInteropModuleRegistry,
29
+ JSIContext *jSIContext,
30
30
  std::weak_ptr<JavaScriptRuntime> runtime,
31
31
  std::shared_ptr<jsi::Object> jsObject
32
32
  );
@@ -8,7 +8,7 @@
8
8
  #include "JavaScriptFunction.h"
9
9
  #include "TypedArray.h"
10
10
  #include "Exceptions.h"
11
- #include "JSIInteropModuleRegistry.h"
11
+ #include "JSIContext.h"
12
12
 
13
13
  namespace expo {
14
14
  void JavaScriptValue::registerNatives() {
@@ -157,7 +157,7 @@ jni::local_ref<JavaScriptObject::javaobject> JavaScriptValue::getObject() {
157
157
  auto &jsRuntime = runtimeHolder.getJSRuntime();
158
158
  auto jsObject = std::make_shared<jsi::Object>(jsValue->getObject(jsRuntime));
159
159
  return JavaScriptObject::newInstance(
160
- runtimeHolder.getModuleRegistry(),
160
+ runtimeHolder.getJSIContext(),
161
161
  runtimeHolder,
162
162
  jsObject
163
163
  );
@@ -168,7 +168,7 @@ jni::local_ref<JavaScriptFunction::javaobject> JavaScriptValue::jniGetFunction()
168
168
  auto jsFunction = std::make_shared<jsi::Function>(
169
169
  jsValue->getObject(jsRuntime).asFunction(jsRuntime));
170
170
  return JavaScriptFunction::newInstance(
171
- runtimeHolder.getModuleRegistry(),
171
+ runtimeHolder.getJSIContext(),
172
172
  runtimeHolder,
173
173
  jsFunction
174
174
  );
@@ -176,7 +176,7 @@ jni::local_ref<JavaScriptFunction::javaobject> JavaScriptValue::jniGetFunction()
176
176
 
177
177
  jni::local_ref<jni::JArrayClass<JavaScriptValue::javaobject>> JavaScriptValue::getArray() {
178
178
  auto &jsRuntime = runtimeHolder.getJSRuntime();
179
- auto moduleRegistry = runtimeHolder.getModuleRegistry();
179
+ auto moduleRegistry = runtimeHolder.getJSIContext();
180
180
 
181
181
  auto jsArray = jsValue
182
182
  ->getObject(jsRuntime)
@@ -210,14 +210,14 @@ jni::local_ref<JavaScriptTypedArray::javaobject> JavaScriptValue::getTypedArray(
210
210
  auto &jsRuntime = runtimeHolder.getJSRuntime();
211
211
  auto jsObject = std::make_shared<jsi::Object>(jsValue->getObject(jsRuntime));
212
212
  return JavaScriptTypedArray::newInstance(
213
- runtimeHolder.getModuleRegistry(),
213
+ runtimeHolder.getJSIContext(),
214
214
  runtimeHolder,
215
215
  jsObject
216
216
  );
217
217
  }
218
218
 
219
219
  jni::local_ref<JavaScriptValue::javaobject> JavaScriptValue::newInstance(
220
- JSIInteropModuleRegistry *jsiInteropModuleRegistry,
220
+ JSIContext *jsiContext,
221
221
  std::weak_ptr<JavaScriptRuntime> runtime,
222
222
  std::shared_ptr<jsi::Value> jsValue
223
223
  ) {
@@ -225,7 +225,7 @@ jni::local_ref<JavaScriptValue::javaobject> JavaScriptValue::newInstance(
225
225
  std::move(runtime),
226
226
  std::move(jsValue)
227
227
  );
228
- jsiInteropModuleRegistry->jniDeallocator->addReference(value);
228
+ jsiContext->jniDeallocator->addReference(value);
229
229
  return value;
230
230
  }
231
231
  } // namespace expo
@@ -36,7 +36,7 @@ public:
36
36
  static void registerNatives();
37
37
 
38
38
  static jni::local_ref<JavaScriptValue::javaobject> newInstance(
39
- JSIInteropModuleRegistry *jsiInteropModuleRegistry,
39
+ JSIContext *jsiContext,
40
40
  std::weak_ptr<JavaScriptRuntime> runtime,
41
41
  std::shared_ptr<jsi::Value> jsValue
42
42
  );
@@ -1,7 +1,7 @@
1
1
  // Copyright 2015-present 650 Industries. All rights reserved.
2
2
 
3
3
  #include "JavaScriptWeakObject.h"
4
- #include "JSIInteropModuleRegistry.h"
4
+ #include "JSIContext.h"
5
5
 
6
6
  namespace expo {
7
7
 
@@ -23,18 +23,18 @@ jni::local_ref<JavaScriptObject::javaobject> JavaScriptWeakObject::lock() {
23
23
  if (!objectPtr) {
24
24
  return nullptr;
25
25
  }
26
- return JavaScriptObject::newInstance(_runtimeHolder.getModuleRegistry(),
26
+ return JavaScriptObject::newInstance(_runtimeHolder.getJSIContext(),
27
27
  _runtimeHolder, objectPtr);
28
28
  }
29
29
 
30
30
  jni::local_ref<jni::HybridClass<JavaScriptWeakObject, Destructible>::javaobject>
31
31
  JavaScriptWeakObject::newInstance(
32
- JSIInteropModuleRegistry *jsiInteropModuleRegistry,
32
+ JSIContext *jSIContext,
33
33
  std::weak_ptr<JavaScriptRuntime> runtime,
34
34
  std::shared_ptr<jsi::Object> jsObject) {
35
35
  auto weakObject = JavaScriptWeakObject::newObjectCxxArgs(std::move(runtime),
36
36
  std::move(jsObject));
37
- jsiInteropModuleRegistry->jniDeallocator->addReference(weakObject);
37
+ jSIContext->jniDeallocator->addReference(weakObject);
38
38
  return weakObject;
39
39
  }
40
40
 
@@ -32,7 +32,7 @@ public:
32
32
 
33
33
  static jni::local_ref<
34
34
  jni::HybridClass<JavaScriptWeakObject, Destructible>::javaobject>
35
- newInstance(JSIInteropModuleRegistry *jsiInteropModuleRegistry,
35
+ newInstance(JSIContext *jSIContext,
36
36
  std::weak_ptr<JavaScriptRuntime> runtime,
37
37
  std::shared_ptr<jsi::Object> jsObject);
38
38
 
@@ -1,5 +1,5 @@
1
1
  #include "MethodMetadata.h"
2
- #include "JSIInteropModuleRegistry.h"
2
+ #include "JSIContext.h"
3
3
  #include "JavaScriptValue.h"
4
4
  #include "JavaScriptObject.h"
5
5
  #include "JavaScriptTypedArray.h"
@@ -10,6 +10,8 @@
10
10
 
11
11
  #include <utility>
12
12
  #include <functional>
13
+ #include <unistd.h>
14
+ #include <optional>
13
15
 
14
16
  #include "JSReferencesCache.h"
15
17
 
@@ -19,98 +21,25 @@ namespace react = facebook::react;
19
21
 
20
22
  namespace expo {
21
23
 
22
- // Modified version of the RN implementation
23
- // https://github.com/facebook/react-native/blob/7dceb9b63c0bfd5b13bf6d26f9530729506e9097/ReactCommon/react/nativemodule/core/platform/android/ReactCommon/JavaTurboModule.cpp#L57
24
24
  jni::local_ref<JavaCallback::JavaPart> createJavaCallbackFromJSIFunction(
25
25
  jsi::Function &&function,
26
26
  jsi::Runtime &rt,
27
- JSIInteropModuleRegistry *moduleRegistry,
28
27
  bool isRejectCallback = false
29
28
  ) {
30
- std::shared_ptr<react::CallInvoker> jsInvoker = moduleRegistry->runtimeHolder->jsInvoker;
31
- auto weakWrapper = react::CallbackWrapper::createWeak(std::move(function), rt,
32
- std::move(jsInvoker));
33
-
34
- // This needs to be a shared_ptr because:
35
- // 1. It cannot be unique_ptr. std::function is copyable but unique_ptr is
36
- // not.
37
- // 2. It cannot be weak_ptr since we need this object to live on.
38
- // 3. It cannot be a value, because that would be deleted as soon as this
39
- // function returns.
40
- auto callbackWrapperOwner =
41
- std::make_shared<react::RAIICallbackWrapperDestroyer>(weakWrapper);
42
-
43
- std::function<void(folly::dynamic)> fn =
44
- [
45
- weakWrapper,
46
- callbackWrapperOwner = std::move(callbackWrapperOwner),
47
- wrapperWasCalled = false,
48
- isRejectCallback
49
- ](
50
- folly::dynamic responses) mutable {
51
- if (wrapperWasCalled) {
52
- throw std::runtime_error(
53
- "callback 2 arg cannot be called more than once");
54
- }
55
-
56
- auto strongWrapper = weakWrapper.lock();
57
- if (!strongWrapper) {
58
- return;
59
- }
29
+ JSIContext *jsiContext = getJSIContext(rt);
30
+ std::shared_ptr<react::CallInvoker> jsInvoker = jsiContext->runtimeHolder->jsInvoker;
31
+
32
+ std::shared_ptr<JavaCallback::CallbackContext> callbackContext = std::make_shared<JavaCallback::CallbackContext>(
33
+ rt,
34
+ std::move(jsInvoker),
35
+ std::move(function),
36
+ isRejectCallback
37
+ );
60
38
 
61
- strongWrapper->jsInvoker().invokeAsync(
62
- [
63
- weakWrapper,
64
- callbackWrapperOwner = std::move(callbackWrapperOwner),
65
- responses = std::move(responses),
66
- isRejectCallback
67
- ]() mutable {
68
- auto strongWrapper2 = weakWrapper.lock();
69
- if (!strongWrapper2) {
70
- return;
71
- }
72
-
73
- jsi::Value arg = jsi::valueFromDynamic(strongWrapper2->runtime(), responses);
74
- auto enhancedArg = decorateValueForDynamicExtension(strongWrapper2->runtime(), arg);
75
- if (enhancedArg) {
76
- arg = std::move(*enhancedArg);
77
- }
78
- if (!isRejectCallback) {
79
- strongWrapper2->callback().call(
80
- strongWrapper2->runtime(),
81
- (const jsi::Value *) &arg,
82
- (size_t) 1
83
- );
84
- } else {
85
- auto &rt = strongWrapper2->runtime();
86
- auto jsErrorObject = arg.getObject(rt);
87
- auto errorCode = jsErrorObject.getProperty(rt, "code").asString(rt);
88
- auto message = jsErrorObject.getProperty(rt, "message").asString(rt);
89
-
90
- auto codedError = makeCodedError(
91
- rt,
92
- std::move(errorCode),
93
- std::move(message)
94
- );
95
-
96
- strongWrapper2->callback().call(
97
- strongWrapper2->runtime(),
98
- (const jsi::Value *) &codedError,
99
- (size_t) 1
100
- );
101
- }
102
-
103
- callbackWrapperOwner.reset();
104
- });
105
-
106
- wrapperWasCalled = true;
107
- };
108
-
109
- return JavaCallback::newInstance(moduleRegistry, std::move(fn));
39
+ return JavaCallback::newInstance(jsiContext, std::move(callbackContext));
110
40
  }
111
41
 
112
42
  jobjectArray MethodMetadata::convertJSIArgsToJNI(
113
- JSIInteropModuleRegistry *moduleRegistry,
114
43
  JNIEnv *env,
115
44
  jsi::Runtime &rt,
116
45
  const jsi::Value &thisValue,
@@ -157,7 +86,7 @@ jobjectArray MethodMetadata::convertJSIArgsToJNI(
157
86
  auto &type = argTypes[argIndex];
158
87
 
159
88
  if (type->converter->canConvert(rt, arg)) {
160
- auto converterValue = type->converter->convert(rt, env, moduleRegistry, arg);
89
+ auto converterValue = type->converter->convert(rt, env, arg);
161
90
  env->SetObjectArrayElement(argumentArray, argIndex, converterValue);
162
91
  env->DeleteLocalRef(converterValue);
163
92
  } else if (arg.isNull() || arg.isUndefined()) {
@@ -210,14 +139,13 @@ MethodMetadata::MethodMetadata(
210
139
  }
211
140
 
212
141
  std::shared_ptr<jsi::Function> MethodMetadata::toJSFunction(
213
- jsi::Runtime &runtime,
214
- JSIInteropModuleRegistry *moduleRegistry
142
+ jsi::Runtime &runtime
215
143
  ) {
216
144
  if (body == nullptr) {
217
145
  if (isAsync) {
218
- body = std::make_shared<jsi::Function>(toAsyncFunction(runtime, moduleRegistry));
146
+ body = std::make_shared<jsi::Function>(toAsyncFunction(runtime));
219
147
  } else {
220
- body = std::make_shared<jsi::Function>(toSyncFunction(runtime, moduleRegistry));
148
+ body = std::make_shared<jsi::Function>(toSyncFunction(runtime));
221
149
  }
222
150
  }
223
151
 
@@ -225,23 +153,27 @@ std::shared_ptr<jsi::Function> MethodMetadata::toJSFunction(
225
153
  }
226
154
 
227
155
  jsi::Function MethodMetadata::toSyncFunction(
228
- jsi::Runtime &runtime,
229
- JSIInteropModuleRegistry *moduleRegistry
156
+ jsi::Runtime &runtime
230
157
  ) {
158
+ auto weakThis = weak_from_this();
231
159
  return jsi::Function::createFromHostFunction(
232
160
  runtime,
233
- moduleRegistry->jsRegistry->getPropNameID(runtime, name),
161
+ getJSIContext(runtime)->jsRegistry->getPropNameID(runtime, name),
234
162
  argTypes.size(),
235
- [this, moduleRegistry](
163
+ [weakThis = std::move(weakThis)](
236
164
  jsi::Runtime &rt,
237
165
  const jsi::Value &thisValue,
238
166
  const jsi::Value *args,
239
167
  size_t count
240
168
  ) -> jsi::Value {
241
169
  try {
242
- return this->callSync(
170
+ auto thisPtr = weakThis.lock();
171
+ if (thisPtr == nullptr) {
172
+ return jsi::Value::undefined();
173
+ }
174
+
175
+ return thisPtr->callSync(
243
176
  rt,
244
- moduleRegistry,
245
177
  thisValue,
246
178
  args,
247
179
  count
@@ -255,7 +187,6 @@ jsi::Function MethodMetadata::toSyncFunction(
255
187
  jni::local_ref<jobject> MethodMetadata::callJNISync(
256
188
  JNIEnv *env,
257
189
  jsi::Runtime &rt,
258
- JSIInteropModuleRegistry *moduleRegistry,
259
190
  const jsi::Value &thisValue,
260
191
  const jsi::Value *args,
261
192
  size_t count
@@ -264,7 +195,7 @@ jni::local_ref<jobject> MethodMetadata::callJNISync(
264
195
  return nullptr;
265
196
  }
266
197
 
267
- auto convertedArgs = convertJSIArgsToJNI(moduleRegistry, env, rt, thisValue, args, count);
198
+ auto convertedArgs = convertJSIArgsToJNI(env, rt, thisValue, args, count);
268
199
 
269
200
  // Cast in this place is safe, cause we know that this function is promise-less.
270
201
  auto syncFunction = jni::static_ref_cast<JNIFunctionBody>(this->jBodyReference);
@@ -278,7 +209,6 @@ jni::local_ref<jobject> MethodMetadata::callJNISync(
278
209
 
279
210
  jsi::Value MethodMetadata::callSync(
280
211
  jsi::Runtime &rt,
281
- JSIInteropModuleRegistry *moduleRegistry,
282
212
  const jsi::Value &thisValue,
283
213
  const jsi::Value *args,
284
214
  size_t count
@@ -291,33 +221,30 @@ jsi::Value MethodMetadata::callSync(
291
221
  */
292
222
  jni::JniLocalScope scope(env, (int) count);
293
223
 
294
- auto result = this->callJNISync(env, rt, moduleRegistry, thisValue, args, count);
295
- return convert(moduleRegistry, env, rt, std::move(result));
224
+ auto result = this->callJNISync(env, rt, thisValue, args, count);
225
+ return convert(env, rt, std::move(result));
296
226
  }
297
227
 
298
228
  jsi::Function MethodMetadata::toAsyncFunction(
299
- jsi::Runtime &runtime,
300
- JSIInteropModuleRegistry *moduleRegistry
229
+ jsi::Runtime &runtime
301
230
  ) {
231
+ auto weakThis = weak_from_this();
302
232
  return jsi::Function::createFromHostFunction(
303
233
  runtime,
304
- moduleRegistry->jsRegistry->getPropNameID(runtime, name),
234
+ getJSIContext(runtime)->jsRegistry->getPropNameID(runtime, name),
305
235
  argTypes.size(),
306
- [this, moduleRegistry](
236
+ [weakThis = std::move(weakThis)](
307
237
  jsi::Runtime &rt,
308
238
  const jsi::Value &thisValue,
309
239
  const jsi::Value *args,
310
240
  size_t count
311
241
  ) -> jsi::Value {
312
- /**
313
- * Halt execution during cleaning phase as modules and js context will be deallocated soon.
314
- * The output of this method doesn't matter.
315
- * We added that check to prevent the app from crashing when users reload their apps.
316
- */
317
- if (moduleRegistry->wasDeallocated) {
242
+ auto thisPtr = weakThis.lock();
243
+ if (thisPtr == nullptr) {
318
244
  return jsi::Value::undefined();
319
245
  }
320
246
 
247
+ JSIContext *jsiContext = getJSIContext(rt);
321
248
  JNIEnv *env = jni::Environment::current();
322
249
 
323
250
  /**
@@ -327,19 +254,19 @@ jsi::Function MethodMetadata::toAsyncFunction(
327
254
  */
328
255
  jni::JniLocalScope scope(env, (int) count);
329
256
 
330
- auto &Promise = moduleRegistry->jsRegistry->getObject<jsi::Function>(
257
+ auto &Promise = jsiContext->jsRegistry->getObject<jsi::Function>(
331
258
  JSReferencesCache::JSKeys::PROMISE
332
259
  );
333
260
 
334
261
  try {
335
- auto convertedArgs = convertJSIArgsToJNI(moduleRegistry, env, rt, thisValue, args, count);
262
+ auto convertedArgs = thisPtr->convertJSIArgsToJNI(env, rt, thisValue, args, count);
336
263
  auto globalConvertedArgs = (jobjectArray) env->NewGlobalRef(convertedArgs);
337
264
  env->DeleteLocalRef(convertedArgs);
338
265
 
339
266
  // Creates a JSI promise
340
267
  jsi::Value promise = Promise.callAsConstructor(
341
268
  rt,
342
- createPromiseBody(rt, moduleRegistry, globalConvertedArgs)
269
+ thisPtr->createPromiseBody(rt, globalConvertedArgs)
343
270
  );
344
271
  return promise;
345
272
  } catch (jni::JniException &jniException) {
@@ -356,7 +283,7 @@ jsi::Function MethodMetadata::toAsyncFunction(
356
283
  rt,
357
284
  jsi::Function::createFromHostFunction(
358
285
  rt,
359
- moduleRegistry->jsRegistry->getPropNameID(rt, "promiseFn"),
286
+ jsiContext->jsRegistry->getPropNameID(rt, "promiseFn"),
360
287
  2,
361
288
  [code, message](
362
289
  jsi::Runtime &rt,
@@ -390,14 +317,13 @@ jsi::Function MethodMetadata::toAsyncFunction(
390
317
 
391
318
  jsi::Function MethodMetadata::createPromiseBody(
392
319
  jsi::Runtime &runtime,
393
- JSIInteropModuleRegistry *moduleRegistry,
394
320
  jobjectArray globalArgs
395
321
  ) {
396
322
  return jsi::Function::createFromHostFunction(
397
323
  runtime,
398
- moduleRegistry->jsRegistry->getPropNameID(runtime, "promiseFn"),
324
+ getJSIContext(runtime)->jsRegistry->getPropNameID(runtime, "promiseFn"),
399
325
  2,
400
- [this, globalArgs, moduleRegistry](
326
+ [this, globalArgs](
401
327
  jsi::Runtime &rt,
402
328
  const jsi::Value &thisVal,
403
329
  const jsi::Value *promiseConstructorArgs,
@@ -412,14 +338,12 @@ jsi::Function MethodMetadata::createPromiseBody(
412
338
 
413
339
  jobject resolve = createJavaCallbackFromJSIFunction(
414
340
  std::move(resolveJSIFn),
415
- rt,
416
- moduleRegistry
341
+ rt
417
342
  ).release();
418
343
 
419
344
  jobject reject = createJavaCallbackFromJSIFunction(
420
345
  std::move(rejectJSIFn),
421
346
  rt,
422
- moduleRegistry,
423
347
  true
424
348
  ).release();
425
349