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
@@ -1,65 +1,251 @@
1
1
  // Copyright © 2021-present 650 Industries, Inc. (aka Expo)
2
2
 
3
3
  #include "JavaCallback.h"
4
- #include "JSIInteropModuleRegistry.h"
4
+ #include "JSIContext.h"
5
+ #include "types/JNIToJSIConverter.h"
6
+ #include "Exceptions.h"
5
7
 
6
- namespace expo {
8
+ #include <fbjni/fbjni.h>
9
+ #include <fbjni/fbjni.h>
10
+ #include <folly/dynamic.h>
11
+
12
+ #include <functional>
7
13
 
8
- JavaCallback::JavaCallback(Callback callback)
9
- : callback(std::move(callback)) {}
14
+ namespace expo {
10
15
 
16
+ JavaCallback::JavaCallback(std::shared_ptr<CallbackContext> callbackContext)
17
+ : callbackContext(std::move(callbackContext)) {}
11
18
 
12
19
  void JavaCallback::registerNatives() {
13
20
  registerHybrid({
14
- makeNativeMethod("invoke", JavaCallback::invoke),
15
- makeNativeMethod("invoke", JavaCallback::invokeBool),
16
- makeNativeMethod("invoke", JavaCallback::invokeInt),
17
- makeNativeMethod("invoke", JavaCallback::invokeDouble),
18
- makeNativeMethod("invoke", JavaCallback::invokeFloat),
19
- makeNativeMethod("invoke", JavaCallback::invokeString),
20
- makeNativeMethod("invoke", JavaCallback::invokeArray),
21
- makeNativeMethod("invoke", JavaCallback::invokeMap),
21
+ makeNativeMethod("invokeNative", JavaCallback::invoke),
22
+ makeNativeMethod("invokeNative", JavaCallback::invokeBool),
23
+ makeNativeMethod("invokeNative", JavaCallback::invokeInt),
24
+ makeNativeMethod("invokeNative", JavaCallback::invokeDouble),
25
+ makeNativeMethod("invokeNative", JavaCallback::invokeFloat),
26
+ makeNativeMethod("invokeNative", JavaCallback::invokeString),
27
+ makeNativeMethod("invokeNative", JavaCallback::invokeArray),
28
+ makeNativeMethod("invokeNative", JavaCallback::invokeMap),
29
+ makeNativeMethod("invokeNative", JavaCallback::invokeSharedRef),
22
30
  });
23
31
  }
24
32
 
33
+
25
34
  jni::local_ref<JavaCallback::javaobject> JavaCallback::newInstance(
26
- JSIInteropModuleRegistry *jsiInteropModuleRegistry,
27
- Callback callback
35
+ JSIContext *jsiContext,
36
+ std::shared_ptr<CallbackContext> callbackContext
28
37
  ) {
29
- auto object = JavaCallback::newObjectCxxArgs(std::move(callback));
30
- jsiInteropModuleRegistry->jniDeallocator->addReference(object);
38
+ auto object = JavaCallback::newObjectCxxArgs(std::move(callbackContext));
39
+ jsiContext->jniDeallocator->addReference(object);
31
40
  return object;
32
41
  }
33
42
 
43
+ template<typename T>
44
+ void JavaCallback::invokeJSFunction(
45
+ ArgsConverter<T> argsConverter,
46
+ T arg
47
+ ) {
48
+ const auto jsInvoker = callbackContext->jsCallInvokerHolder;
49
+ jsInvoker->invokeAsync(
50
+ [
51
+ context = std::move(callbackContext),
52
+ argsConverter = std::move(argsConverter),
53
+ arg = std::move(arg)
54
+ ]() -> void {
55
+ if (!context->jsFunctionHolder.has_value()) {
56
+ throw std::runtime_error(
57
+ "JavaCallback was already settled. Cannot invoke it again"
58
+ );
59
+ }
60
+
61
+ jsi::Function &jsFunction = context->jsFunctionHolder.value();
62
+ jsi::Runtime &rt = context->rt;
63
+
64
+ argsConverter(rt, jsFunction, std::move(arg), context->isRejectCallback);
65
+ context->jsFunctionHolder.reset();
66
+ });
67
+ }
68
+
69
+ template<class T>
70
+ void JavaCallback::invokeJSFunction(T arg) {
71
+ invokeJSFunction<T>(
72
+ [](
73
+ jsi::Runtime &rt,
74
+ jsi::Function &jsFunction,
75
+ T arg,
76
+ bool isRejectCallback
77
+ ) {
78
+ jsFunction.call(rt, {jsi::Value(rt, arg)});
79
+ },
80
+ arg
81
+ );
82
+ }
83
+
34
84
  void JavaCallback::invoke() {
35
- callback(nullptr);
85
+ invokeJSFunction<nullptr_t>(
86
+ [](
87
+ jsi::Runtime &rt,
88
+ jsi::Function &jsFunction,
89
+ nullptr_t arg,
90
+ bool isRejectCallback
91
+ ) {
92
+ jsFunction.call(rt, {jsi::Value::null()});
93
+ },
94
+ nullptr
95
+ );
36
96
  }
37
97
 
38
98
  void JavaCallback::invokeBool(bool result) {
39
- callback(result);
99
+ invokeJSFunction(result);
40
100
  }
41
101
 
42
102
  void JavaCallback::invokeInt(int result) {
43
- callback(result);
103
+ invokeJSFunction(result);
44
104
  }
45
105
 
46
106
  void JavaCallback::invokeDouble(double result) {
47
- callback(result);
107
+ invokeJSFunction(result);
48
108
  }
49
109
 
50
110
  void JavaCallback::invokeFloat(float result) {
51
- callback(result);
111
+ invokeJSFunction(result);
52
112
  }
53
113
 
54
114
  void JavaCallback::invokeString(jni::alias_ref<jstring> result) {
55
- callback(result->toStdString());
115
+ invokeJSFunction<std::string>(
116
+ [](
117
+ jsi::Runtime &rt,
118
+ jsi::Function &jsFunction,
119
+ std::string arg,
120
+ bool isRejectCallback
121
+ ) {
122
+ std::optional<jsi::Value> extendedString = convertStringToFollyDynamicIfNeeded(
123
+ rt,
124
+ arg
125
+ );
126
+
127
+ if (extendedString.has_value()) {
128
+ const jsi::Value &jsValue = extendedString.value();
129
+ jsFunction.call(
130
+ rt,
131
+ (const jsi::Value *) &jsValue,
132
+ (size_t) 1
133
+ );
134
+ return;
135
+ }
136
+
137
+ jsFunction.call(rt, {jsi::String::createFromUtf8(rt, arg)});
138
+ },
139
+ result->toStdString()
140
+ );
56
141
  }
57
142
 
58
143
  void JavaCallback::invokeArray(jni::alias_ref<react::WritableNativeArray::javaobject> result) {
59
- callback(result->cthis()->consume());
144
+ invokeJSFunction<folly::dynamic>(
145
+ [](
146
+ jsi::Runtime &rt,
147
+ jsi::Function &jsFunction,
148
+ folly::dynamic arg,
149
+ bool isRejectCallback
150
+ ) {
151
+ jsi::Value convertedArg = jsi::valueFromDynamic(rt, arg);
152
+ auto enhancedArg = decorateValueForDynamicExtension(rt, convertedArg);
153
+ if (enhancedArg) {
154
+ convertedArg = std::move(*enhancedArg);
155
+ }
156
+
157
+ jsFunction.call(
158
+ rt,
159
+ (const jsi::Value *) &convertedArg,
160
+ (size_t) 1
161
+ );
162
+ },
163
+ result->cthis()->consume()
164
+ );
60
165
  }
61
166
 
62
167
  void JavaCallback::invokeMap(jni::alias_ref<react::WritableNativeMap::javaobject> result) {
63
- callback(result->cthis()->consume());
168
+ invokeJSFunction<folly::dynamic>(
169
+ [](
170
+ jsi::Runtime &rt,
171
+ jsi::Function &jsFunction,
172
+ folly::dynamic arg,
173
+ bool isRejectCallback
174
+ ) {
175
+ if (isRejectCallback) {
176
+ auto errorCode = arg.find("code")->second.asString();
177
+ auto message = arg.find("message")->second.asString();
178
+
179
+ auto codedError = makeCodedError(
180
+ rt,
181
+ jsi::String::createFromUtf8(rt, errorCode),
182
+ jsi::String::createFromUtf8(rt, message)
183
+ );
184
+
185
+ jsFunction.call(
186
+ rt,
187
+ (const jsi::Value *) &codedError,
188
+ (size_t) 1
189
+ );
190
+
191
+ return;
192
+ }
193
+
194
+ jsi::Value convertedArg = jsi::valueFromDynamic(rt, arg);
195
+ auto enhancedArg = decorateValueForDynamicExtension(rt, convertedArg);
196
+ if (enhancedArg) {
197
+ convertedArg = std::move(*enhancedArg);
198
+ }
199
+
200
+ jsFunction.call(
201
+ rt,
202
+ (const jsi::Value *) &convertedArg,
203
+ (size_t) 1
204
+ );
205
+ },
206
+ result->cthis()->consume()
207
+ );
208
+ }
209
+
210
+ void JavaCallback::invokeSharedRef(jni::alias_ref<SharedRef::javaobject> result) {
211
+ invokeJSFunction<jni::global_ref<SharedRef::javaobject>>(
212
+ [](
213
+ jsi::Runtime &rt,
214
+ jsi::Function &jsFunction,
215
+ jni::global_ref<SharedRef::javaobject> arg,
216
+ bool isRejectCallback
217
+ ) {
218
+ const auto jsiContext = getJSIContext(rt);
219
+ auto native = jni::make_local(arg);
220
+
221
+ auto jsClass = jsiContext->getJavascriptClass(native->getClass());
222
+ auto jsObject = jsClass
223
+ ->cthis()
224
+ ->get()
225
+ ->asFunction(rt)
226
+ .callAsConstructor(rt)
227
+ .asObject(rt);
228
+
229
+ auto objSharedPtr = std::make_shared<jsi::Object>(std::move(jsObject));
230
+ auto jsObjectInstance = JavaScriptObject::newInstance(
231
+ jsiContext,
232
+ jsiContext->runtimeHolder,
233
+ objSharedPtr
234
+ );
235
+ jni::local_ref<JavaScriptObject::javaobject> jsRef = jni::make_local(
236
+ jsObjectInstance
237
+ );
238
+ jsiContext->registerSharedObject(native, jsRef);
239
+
240
+ auto ret = jsi::Value(rt, *objSharedPtr);
241
+
242
+ jsFunction.call(
243
+ rt,
244
+ (const jsi::Value *) &ret,
245
+ (size_t) 1
246
+ );
247
+ },
248
+ jni::make_global(result)
249
+ );
64
250
  }
65
251
  } // namespace expo
@@ -4,17 +4,29 @@
4
4
 
5
5
  #include "JNIDeallocator.h"
6
6
 
7
+ #include <jsi/jsi.h>
7
8
  #include <fbjni/fbjni.h>
8
9
  #include <folly/dynamic.h>
10
+ #include <variant>
9
11
 
10
12
  #include <react/jni/WritableNativeArray.h>
11
13
  #include <react/jni/WritableNativeMap.h>
14
+ #include <fbjni/detail/CoreClasses.h>
15
+ #include <ReactCommon/CallInvoker.h>
12
16
 
13
17
  namespace jni = facebook::jni;
14
18
  namespace react = facebook::react;
19
+ namespace jsi = facebook::jsi;
15
20
 
16
21
  namespace expo {
17
- class JSIInteropModuleRegistry;
22
+
23
+ struct SharedRef : public jni::JavaClass<SharedRef> {
24
+ static constexpr const char *kJavaDescriptor = "Lexpo/modules/kotlin/sharedobjects/SharedRef;";
25
+ };
26
+
27
+ class JSIContext;
28
+
29
+ typedef std::variant<folly::dynamic, jni::global_ref<SharedRef::javaobject>> CallbackArg;
18
30
 
19
31
  class JavaCallback : public jni::HybridClass<JavaCallback, Destructible> {
20
32
  public:
@@ -22,20 +34,26 @@ public:
22
34
  kJavaDescriptor = "Lexpo/modules/kotlin/jni/JavaCallback;";
23
35
  static auto constexpr TAG = "JavaCallback";
24
36
 
25
- using Callback = std::function<void(folly::dynamic)>;
37
+ struct CallbackContext {
38
+ jsi::Runtime &rt;
39
+ std::shared_ptr<react::CallInvoker> jsCallInvokerHolder;
40
+ std::optional<jsi::Function> jsFunctionHolder;
41
+ bool isRejectCallback;
42
+ };
26
43
 
27
44
  static void registerNatives();
28
45
 
29
46
  static jni::local_ref<JavaCallback::javaobject> newInstance(
30
- JSIInteropModuleRegistry *jsiInteropModuleRegistry,
31
- Callback callback
47
+ JSIContext *jsiContext,
48
+ std::shared_ptr<CallbackContext> callbackContext
32
49
  );
33
50
 
34
51
  private:
35
- friend HybridBase;
52
+ std::shared_ptr<CallbackContext> callbackContext;
36
53
 
54
+ friend HybridBase;
37
55
 
38
- JavaCallback(Callback callback);
56
+ JavaCallback(std::shared_ptr<CallbackContext> callback);
39
57
 
40
58
  void invoke();
41
59
 
@@ -53,6 +71,23 @@ private:
53
71
 
54
72
  void invokeMap(jni::alias_ref<react::WritableNativeMap::javaobject> result);
55
73
 
56
- Callback callback;
74
+ void invokeSharedRef(jni::alias_ref<SharedRef::javaobject> result);
75
+
76
+ template<class T>
77
+ using ArgsConverter = std::function<void(
78
+ jsi::Runtime &rt,
79
+ jsi::Function &jsFunction,
80
+ T arg,
81
+ bool isRejectCallback
82
+ )>;
83
+
84
+ template<class T>
85
+ inline void invokeJSFunction(
86
+ ArgsConverter<T> argsConverter,
87
+ T arg
88
+ );
89
+
90
+ template<class T>
91
+ inline void invokeJSFunction(T arg);
57
92
  };
58
93
  } // namespace expo
@@ -4,6 +4,8 @@
4
4
  #include "types/JNIToJSIConverter.h"
5
5
  #include "types/AnyType.h"
6
6
 
7
+ #include "JavaScriptObject.h"
8
+
7
9
  namespace expo {
8
10
 
9
11
  void JavaScriptFunction::registerNatives() {
@@ -31,11 +33,11 @@ std::shared_ptr<jsi::Function> JavaScriptFunction::get() {
31
33
  }
32
34
 
33
35
  jobject JavaScriptFunction::invoke(
36
+ jni::alias_ref<JavaScriptObject::javaobject> jsThis,
34
37
  jni::alias_ref<jni::JArrayClass<jni::JObject>> args,
35
38
  jni::alias_ref<ExpectedType::javaobject> expectedReturnType
36
39
  ) {
37
40
  auto &rt = runtimeHolder.getJSRuntime();
38
- auto moduleRegistry = runtimeHolder.getModuleRegistry();
39
41
  JNIEnv *env = jni::Environment::current();
40
42
 
41
43
  size_t size = args->size();
@@ -44,18 +46,30 @@ jobject JavaScriptFunction::invoke(
44
46
 
45
47
  for (size_t i = 0; i < size; i++) {
46
48
  jni::local_ref<jni::JObject> arg = args->getElement(i);
47
- convertedArgs.push_back(convert(moduleRegistry, env, rt, std::move(arg)));
49
+ convertedArgs.push_back(convert(env, rt, std::move(arg)));
48
50
  }
49
51
 
50
52
  // TODO(@lukmccall): add better error handling
51
- jsi::Value result = jsFunction->call(rt, (const jsi::Value *) convertedArgs.data(), size);
53
+ jsi::Value result = jsThis == nullptr ?
54
+ jsFunction->call(
55
+ rt,
56
+ (const jsi::Value *) convertedArgs.data(),
57
+ size
58
+ ) :
59
+ jsFunction->callWithThis(
60
+ rt,
61
+ *(jsThis->cthis()->get()),
62
+ (const jsi::Value *) convertedArgs.data(),
63
+ size
64
+ );
65
+
52
66
  auto converter = AnyType(jni::make_local(expectedReturnType)).converter;
53
- auto convertedResult = converter->convert(rt, env, moduleRegistry, result);
67
+ auto convertedResult = converter->convert(rt, env, result);
54
68
  return convertedResult;
55
69
  }
56
70
 
57
71
  jni::local_ref<JavaScriptFunction::javaobject> JavaScriptFunction::newInstance(
58
- JSIInteropModuleRegistry *jsiInteropModuleRegistry,
72
+ JSIContext *jsiContext,
59
73
  std::weak_ptr<JavaScriptRuntime> runtime,
60
74
  std::shared_ptr<jsi::Function> jsFunction
61
75
  ) {
@@ -63,7 +77,7 @@ jni::local_ref<JavaScriptFunction::javaobject> JavaScriptFunction::newInstance(
63
77
  std::move(runtime),
64
78
  std::move(jsFunction)
65
79
  );
66
- jsiInteropModuleRegistry->jniDeallocator->addReference(function);
80
+ jsiContext->jniDeallocator->addReference(function);
67
81
  return function;
68
82
  }
69
83
  } // namespace expo
@@ -15,6 +15,8 @@ namespace jsi = facebook::jsi;
15
15
 
16
16
  namespace expo {
17
17
 
18
+ class JavaScriptObject;
19
+
18
20
  /**
19
21
  * Represents any JavaScript function. Its purpose is to expose the `jsi::Function` API back to Kotlin.
20
22
  */
@@ -27,7 +29,7 @@ public:
27
29
  static void registerNatives();
28
30
 
29
31
  static jni::local_ref<JavaScriptFunction::javaobject> newInstance(
30
- JSIInteropModuleRegistry *jsiInteropModuleRegistry,
32
+ JSIContext *jsiContext,
31
33
  std::weak_ptr<JavaScriptRuntime> runtime,
32
34
  std::shared_ptr<jsi::Function> jsFunction
33
35
  );
@@ -52,6 +54,7 @@ private:
52
54
  std::shared_ptr<jsi::Function> jsFunction;
53
55
 
54
56
  jobject invoke(
57
+ jni::alias_ref<jni::HybridClass<JavaScriptObject, Destructible>::javaobject> jsThis,
55
58
  jni::alias_ref<jni::JArrayClass<jni::JObject>> args,
56
59
  jni::alias_ref<ExpectedType::javaobject> expectedReturnType
57
60
  );