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
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Base type of the events map, whose keys represent supported event names
3
+ * and values are the signatures of the listener for that specific event.
4
+ */
5
+ export type EventsMap = Record<string, (...args: any[]) => void>;
6
+
7
+ /**
8
+ * A subscription object that allows to conveniently remove an event listener from the emitter.
9
+ */
10
+ export type EventSubscription = {
11
+ /**
12
+ * Removes an event listener for which the subscription has been created.
13
+ * After calling this function, the listener will no longer receive any events from the emitter.
14
+ */
15
+ remove(): void;
16
+ };
17
+
18
+ /**
19
+ * A class that provides a consistent API for emitting and listening to events.
20
+ * It shares many concepts with other emitter APIs, such as Node's EventEmitter and `fbemitter`.
21
+ * When the event is emitted, all of the functions attached to that specific event are called *synchronously*.
22
+ * Any values returned by the called listeners are *ignored* and discarded.
23
+ * Its implementation is written in C++ and common for all the platforms.
24
+ */
25
+ export declare class EventEmitter<TEventsMap extends EventsMap = Record<never, never>> {
26
+ /**
27
+ * Creates a new event emitter instance.
28
+ */
29
+ constructor();
30
+
31
+ /**
32
+ * Adds a listener for the given event name.
33
+ */
34
+ addListener<EventName extends keyof TEventsMap>(
35
+ eventName: EventName,
36
+ listener: TEventsMap[EventName]
37
+ ): EventSubscription;
38
+
39
+ /**
40
+ * Removes a listener for the given event name.
41
+ */
42
+ removeListener<EventName extends keyof TEventsMap>(
43
+ eventName: EventName,
44
+ listener: TEventsMap[EventName]
45
+ ): void;
46
+
47
+ /**
48
+ * Removes all listeners for the given event name.
49
+ */
50
+ removeAllListeners(eventName: keyof TEventsMap): void;
51
+
52
+ /**
53
+ * Synchronously calls all of the listeners attached to that specific event.
54
+ * The event can include any number of arguments that will be passed to the listeners.
55
+ */
56
+ emit<EventName extends keyof TEventsMap>(
57
+ eventName: EventName,
58
+ ...args: Parameters<TEventsMap[EventName]>
59
+ ): void;
60
+
61
+ /**
62
+ * Returns a number of listeners added to the given event.
63
+ */
64
+ listenerCount<EventName extends keyof TEventsMap>(eventName: EventName): number;
65
+ }
@@ -2,9 +2,4 @@ import { CodedError } from '../errors/CodedError';
2
2
 
3
3
  declare let global: {
4
4
  ExpoModulesCore_CodedError: typeof CodedError;
5
- ExpoModules:
6
- | undefined
7
- | {
8
- [key: string]: any;
9
- };
10
5
  };
@@ -0,0 +1,18 @@
1
+ import type { EventEmitter, EventsMap } from './EventEmitter';
2
+
3
+ /**
4
+ * A class for all native modules. Extends the {@link EventEmitter} class.
5
+ */
6
+ export declare class NativeModule<
7
+ TEventsMap extends EventsMap = Record<never, never>,
8
+ > extends EventEmitter<TEventsMap> {
9
+ /**
10
+ * A prototype of the native component exported by the module.
11
+ * @deprecated It will be removed in favor of another API that supports multiple components per module.
12
+ * @private
13
+ */
14
+ ViewPrototype?: object;
15
+
16
+ // Ideally if we don't have it, but not all modules have concrete types in `requireNativeModule`.
17
+ [key: string]: any;
18
+ }
@@ -0,0 +1,16 @@
1
+ import type { EventEmitter, EventsMap } from './EventEmitter';
2
+
3
+ /**
4
+ * Base class for all shared objects that extends the EventEmitter class.
5
+ * The implementation is written in C++, installed through JSI and common for mobile platforms.
6
+ */
7
+ export declare class SharedObject<
8
+ TEventsMap extends EventsMap = Record<never, never>,
9
+ > extends EventEmitter<TEventsMap> {
10
+ /**
11
+ * A function that detaches the JS and native objects to let the native object deallocate
12
+ * before the JS object gets deallocated by the JS garbagge collector. Any subsequent calls to native
13
+ * functions of the object will throw an error as it is no longer associated with its native counterpart.
14
+ */
15
+ release(): void;
16
+ }
@@ -0,0 +1,60 @@
1
+ import type { EventEmitter } from './EventEmitter';
2
+ import type { NativeModule } from './NativeModule';
3
+ import type { SharedObject } from './SharedObject';
4
+
5
+ export interface ExpoGlobal {
6
+ /**
7
+ * Host object that is used to access native Expo modules.
8
+ */
9
+ modules: Record<string, any>;
10
+
11
+ // Natively defined JS classes
12
+
13
+ /**
14
+ * @see EventEmitter
15
+ */
16
+ EventEmitter: typeof EventEmitter;
17
+
18
+ /**
19
+ * @see SharedObject
20
+ */
21
+ SharedObject: typeof SharedObject;
22
+
23
+ /**
24
+ * @see NativeModule
25
+ */
26
+ NativeModule: typeof NativeModule;
27
+
28
+ // Utils
29
+
30
+ /**
31
+ * Generates a random UUID v4 string.
32
+ */
33
+ uuidv4(): string;
34
+
35
+ /**
36
+ * Generates a UUID v5 string representation of the value in the specified namespace.
37
+ */
38
+ uuidv5(name: string, namespace: string): string;
39
+
40
+ /**
41
+ * Returns a static view config of the native view with the given name
42
+ * or `null` if the view has not been registered.
43
+ */
44
+ getViewConfig(viewName: string): ViewConfig | null;
45
+ }
46
+
47
+ type ViewConfig = {
48
+ validAttributes: Record<string, any>;
49
+ directEventTypes: Record<string, { registrationName: string }>;
50
+ };
51
+
52
+ /* eslint-disable no-var */
53
+
54
+ declare global {
55
+ /**
56
+ * Global object containing all the native bindings installed by Expo.
57
+ * This object is not available in projects without the `expo` package installed.
58
+ */
59
+ var expo: ExpoGlobal;
60
+ }
@@ -0,0 +1,83 @@
1
+ import type {
2
+ EventEmitter as EventEmitterType,
3
+ EventSubscription,
4
+ EventsMap,
5
+ } from '../ts-declarations/EventEmitter';
6
+ import type { NativeModule as NativeModuleType } from '../ts-declarations/NativeModule';
7
+ import type { SharedObject as SharedObjectType } from '../ts-declarations/SharedObject';
8
+ import uuid from '../uuid';
9
+
10
+ class EventEmitter<TEventsMap extends EventsMap> implements EventEmitterType {
11
+ private listeners?: Map<keyof TEventsMap, Set<Function>>;
12
+
13
+ addListener<EventName extends keyof TEventsMap>(
14
+ eventName: EventName,
15
+ listener: TEventsMap[EventName]
16
+ ): EventSubscription {
17
+ if (!this.listeners) {
18
+ this.listeners = new Map();
19
+ }
20
+ if (!this.listeners?.has(eventName)) {
21
+ this.listeners?.set(eventName, new Set());
22
+ }
23
+ this.listeners?.get(eventName)?.add(listener);
24
+
25
+ return {
26
+ remove: () => {
27
+ this.removeListener(eventName, listener);
28
+ },
29
+ };
30
+ }
31
+
32
+ removeListener<EventName extends keyof TEventsMap>(
33
+ eventName: EventName,
34
+ listener: TEventsMap[EventName]
35
+ ): void {
36
+ this.listeners?.get(eventName)?.delete(listener);
37
+ }
38
+
39
+ removeAllListeners<EventName extends keyof TEventsMap>(eventName: EventName): void {
40
+ this.listeners?.get(eventName)?.clear();
41
+ }
42
+
43
+ emit<EventName extends keyof TEventsMap>(
44
+ eventName: EventName,
45
+ ...args: Parameters<TEventsMap[EventName]>
46
+ ): void {
47
+ this.listeners?.get(eventName)?.forEach((listener) => listener(...args));
48
+ }
49
+
50
+ listenerCount<EventName extends keyof TEventsMap>(eventName: EventName): number {
51
+ return this.listeners?.get(eventName)?.size ?? 0;
52
+ }
53
+ }
54
+
55
+ export class NativeModule<TEventsMap extends Record<never, never>>
56
+ extends EventEmitter<TEventsMap>
57
+ implements NativeModuleType
58
+ {
59
+ [key: string]: any;
60
+ ViewPrototype?: object | undefined;
61
+ __expo_module_name__?: string;
62
+ }
63
+
64
+ class SharedObject<TEventsMap extends Record<never, never>>
65
+ extends EventEmitter<TEventsMap>
66
+ implements SharedObjectType
67
+ {
68
+ release(): void {
69
+ throw new Error('Method not implemented.');
70
+ }
71
+ }
72
+
73
+ globalThis.expo = {
74
+ EventEmitter,
75
+ NativeModule,
76
+ SharedObject,
77
+ modules: {},
78
+ uuidv4: uuid.v4,
79
+ uuidv5: uuid.v5,
80
+ getViewConfig: () => {
81
+ throw new Error('Method not implemented.');
82
+ },
83
+ };
File without changes
@@ -0,0 +1 @@
1
+ import './CoreModule';
@@ -1,196 +0,0 @@
1
- // Copyright © 2021-present 650 Industries, Inc. (aka Expo)
2
-
3
- #include "JSIInteropModuleRegistry.h"
4
- #include "ExpoModulesHostObject.h"
5
- #include "JavaReferencesCache.h"
6
- #include "JSReferencesCache.h"
7
-
8
- #include <fbjni/detail/Meta.h>
9
- #include <fbjni/fbjni.h>
10
-
11
- #include <memory>
12
-
13
- namespace jni = facebook::jni;
14
- namespace jsi = facebook::jsi;
15
-
16
- namespace expo {
17
-
18
- jni::local_ref<JSIInteropModuleRegistry::jhybriddata>
19
- JSIInteropModuleRegistry::initHybrid(jni::alias_ref<jhybridobject> jThis) {
20
- return makeCxxInstance(jThis);
21
- }
22
-
23
- void JSIInteropModuleRegistry::registerNatives() {
24
- registerHybrid({
25
- makeNativeMethod("initHybrid", JSIInteropModuleRegistry::initHybrid),
26
- makeNativeMethod("installJSI", JSIInteropModuleRegistry::installJSI),
27
- makeNativeMethod("installJSIForTests",
28
- JSIInteropModuleRegistry::installJSIForTests),
29
- makeNativeMethod("evaluateScript", JSIInteropModuleRegistry::evaluateScript),
30
- makeNativeMethod("global", JSIInteropModuleRegistry::global),
31
- makeNativeMethod("createObject", JSIInteropModuleRegistry::createObject),
32
- makeNativeMethod("drainJSEventLoop", JSIInteropModuleRegistry::drainJSEventLoop),
33
- makeNativeMethod("wasDeallocated", JSIInteropModuleRegistry::jniWasDeallocated),
34
- });
35
- }
36
-
37
- JSIInteropModuleRegistry::JSIInteropModuleRegistry(jni::alias_ref<jhybridobject> jThis)
38
- : javaPart_(jni::make_global(jThis)) {}
39
-
40
- void JSIInteropModuleRegistry::installJSI(
41
- jlong jsRuntimePointer,
42
- jni::alias_ref<JNIDeallocator::javaobject> jniDeallocator,
43
- jni::alias_ref<react::CallInvokerHolder::javaobject> jsInvokerHolder
44
- ) {
45
- this->jniDeallocator = jni::make_global(jniDeallocator);
46
-
47
- auto runtime = reinterpret_cast<jsi::Runtime *>(jsRuntimePointer);
48
-
49
- jsRegistry = std::make_unique<JSReferencesCache>(*runtime);
50
-
51
- runtimeHolder = std::make_shared<JavaScriptRuntime>(
52
- this,
53
- runtime,
54
- jsInvokerHolder->cthis()->getCallInvoker()
55
- );
56
-
57
- runtimeHolder->installMainObject();
58
-
59
- auto expoModules = std::make_shared<ExpoModulesHostObject>(this);
60
- auto expoModulesObject = jsi::Object::createFromHostObject(*runtime, expoModules);
61
-
62
- // Define the `global.expo.modules` object.
63
- runtimeHolder
64
- ->getMainObject()
65
- ->setProperty(
66
- *runtime,
67
- "modules",
68
- expoModulesObject
69
- );
70
-
71
- // Also define `global.ExpoModules` for backwards compatibility (used before SDK47, can be removed in SDK48).
72
- runtime
73
- ->global()
74
- .setProperty(
75
- *runtime,
76
- "ExpoModules",
77
- expoModulesObject
78
- );
79
- }
80
-
81
- void JSIInteropModuleRegistry::installJSIForTests(
82
- jni::alias_ref<JNIDeallocator::javaobject> jniDeallocator
83
- ) {
84
- #if !UNIT_TEST
85
- throw std::logic_error("The function is only available when UNIT_TEST is defined.");
86
- #else
87
- this->jniDeallocator = jni::make_global(jniDeallocator);
88
-
89
- runtimeHolder = std::make_shared<JavaScriptRuntime>(this);
90
- jsi::Runtime &jsiRuntime = runtimeHolder->get();
91
-
92
- jsRegistry = std::make_unique<JSReferencesCache>(jsiRuntime);
93
-
94
- runtimeHolder->installMainObject();
95
-
96
- auto expoModules = std::make_shared<ExpoModulesHostObject>(this);
97
- auto expoModulesObject = jsi::Object::createFromHostObject(jsiRuntime, expoModules);
98
-
99
- runtimeHolder
100
- ->getMainObject()
101
- ->setProperty(
102
- jsiRuntime,
103
- "modules",
104
- std::move(expoModulesObject)
105
- );
106
- #endif // !UNIT_TEST
107
- }
108
-
109
- jni::local_ref<JavaScriptModuleObject::javaobject>
110
- JSIInteropModuleRegistry::callGetJavaScriptModuleObjectMethod(const std::string &moduleName) const {
111
- const static auto method = expo::JSIInteropModuleRegistry::javaClassLocal()
112
- ->getMethod<jni::local_ref<JavaScriptModuleObject::javaobject>(
113
- std::string)>(
114
- "getJavaScriptModuleObject"
115
- );
116
-
117
- return method(javaPart_, moduleName);
118
- }
119
-
120
- jni::local_ref<JavaScriptModuleObject::javaobject>
121
- JSIInteropModuleRegistry::callGetCoreModuleObject() const {
122
- const static auto method = expo::JSIInteropModuleRegistry::javaClassLocal()
123
- ->getMethod<jni::local_ref<JavaScriptModuleObject::javaobject>()>(
124
- "getCoreModuleObject"
125
- );
126
-
127
- return method(javaPart_);
128
- }
129
-
130
- jni::local_ref<jni::JArrayClass<jni::JString>>
131
- JSIInteropModuleRegistry::callGetJavaScriptModulesNames() const {
132
- const static auto method = expo::JSIInteropModuleRegistry::javaClassLocal()
133
- ->getMethod<jni::local_ref<jni::JArrayClass<jni::JString>>()>(
134
- "getJavaScriptModulesName"
135
- );
136
- return method(javaPart_);
137
- }
138
-
139
- bool JSIInteropModuleRegistry::callHasModule(const std::string &moduleName) const {
140
- const static auto method = expo::JSIInteropModuleRegistry::javaClassLocal()
141
- ->getMethod<jboolean(std::string)>(
142
- "hasModule"
143
- );
144
- return (bool) method(javaPart_, moduleName);
145
- }
146
-
147
- jni::local_ref<JavaScriptModuleObject::javaobject>
148
- JSIInteropModuleRegistry::getModule(const std::string &moduleName) const {
149
- return callGetJavaScriptModuleObjectMethod(moduleName);
150
- }
151
-
152
- jni::local_ref<JavaScriptModuleObject::javaobject> JSIInteropModuleRegistry::getCoreModule() const {
153
- return callGetCoreModuleObject();
154
- }
155
-
156
- bool JSIInteropModuleRegistry::hasModule(const std::string &moduleName) const {
157
- return callHasModule(moduleName);
158
- }
159
-
160
- jni::local_ref<jni::JArrayClass<jni::JString>> JSIInteropModuleRegistry::getModulesName() const {
161
- return callGetJavaScriptModulesNames();
162
- }
163
-
164
- jni::local_ref<JavaScriptValue::javaobject> JSIInteropModuleRegistry::evaluateScript(
165
- jni::JString script
166
- ) {
167
- return runtimeHolder->evaluateScript(script.toStdString());
168
- }
169
-
170
- jni::local_ref<JavaScriptObject::javaobject> JSIInteropModuleRegistry::global() {
171
- return runtimeHolder->global();
172
- }
173
-
174
- jni::local_ref<JavaScriptObject::javaobject> JSIInteropModuleRegistry::createObject() {
175
- return runtimeHolder->createObject();
176
- }
177
-
178
- void JSIInteropModuleRegistry::drainJSEventLoop() {
179
- runtimeHolder->drainJSEventLoop();
180
- }
181
-
182
- void JSIInteropModuleRegistry::registerSharedObject(
183
- jni::local_ref<jobject> native,
184
- jni::local_ref<JavaScriptObject::javaobject> js
185
- ) {
186
- const static auto method = expo::JSIInteropModuleRegistry::javaClassLocal()
187
- ->getMethod<void(jni::local_ref<jobject>, jni::local_ref<JavaScriptObject::javaobject>)>(
188
- "registerSharedObject"
189
- );
190
- method(javaPart_, std::move(native), std::move(js));
191
- }
192
-
193
- void JSIInteropModuleRegistry::jniWasDeallocated() {
194
- wasDeallocated = true;
195
- }
196
- } // namespace expo
@@ -1,48 +0,0 @@
1
- package expo.modules.adapters.react;
2
-
3
- import com.facebook.react.bridge.Dynamic;
4
-
5
- import expo.modules.core.arguments.MapArguments;
6
- import expo.modules.core.arguments.ReadableArguments;
7
-
8
- public class ArgumentsHelper {
9
- public static Object getNativeArgumentForExpectedClass(Dynamic argument, Class<?> expectedArgumentClass) {
10
- switch (argument.getType()) {
11
- case String:
12
- return argument.asString();
13
- case Map:
14
- if (expectedArgumentClass.isAssignableFrom(ReadableArguments.class)) {
15
- return new MapArguments(argument.asMap().toHashMap());
16
- }
17
- return argument.asMap().toHashMap();
18
- case Array:
19
- return argument.asArray().toArrayList();
20
- case Number:
21
- // Argument of type .Number is remembered as Double by default.
22
- Double doubleArgument = argument.asDouble();
23
- // We have to provide ExportedModule with proper Number value
24
- if (expectedArgumentClass == byte.class || expectedArgumentClass == Byte.class) {
25
- return doubleArgument.byteValue();
26
- } else if (expectedArgumentClass == short.class || expectedArgumentClass == Short.class) {
27
- return doubleArgument.shortValue();
28
- } else if (expectedArgumentClass == int.class || expectedArgumentClass == Integer.class) {
29
- return doubleArgument.intValue();
30
- } else if (expectedArgumentClass == float.class || expectedArgumentClass == Float.class) {
31
- return doubleArgument.floatValue();
32
- } else if (expectedArgumentClass == long.class || expectedArgumentClass == Long.class) {
33
- return doubleArgument.longValue();
34
- } else {
35
- return doubleArgument;
36
- }
37
- case Boolean:
38
- return argument.asBoolean();
39
- case Null:
40
- return null;
41
- default:
42
- // JS argument is not null, however we can't recognize the type.
43
- throw new RuntimeException(
44
- "Don't know how to convert React Native argument of type " + argument.getType() + " to native."
45
- );
46
- }
47
- }
48
- }
@@ -1,38 +0,0 @@
1
- package expo.modules.adapters.react;
2
-
3
- import android.os.Bundle;
4
-
5
- import com.facebook.react.bridge.Arguments;
6
-
7
- import expo.modules.core.Promise;
8
-
9
- import java.util.List;
10
-
11
- import javax.annotation.Nullable;
12
-
13
- /**
14
- * Decorator for {@link com.facebook.react.bridge.Promise},
15
- * so we don't have to implement these inline in {@link NativeModulesProxy}.
16
- */
17
- /* package */ class PromiseWrapper implements Promise {
18
- private com.facebook.react.bridge.Promise mPromise;
19
-
20
- /* package */ PromiseWrapper(com.facebook.react.bridge.Promise promise) {
21
- super();
22
- mPromise = promise;
23
- }
24
-
25
- public void resolve(@Nullable Object value) {
26
- if (value instanceof Bundle) {
27
- mPromise.resolve(Arguments.fromBundle((Bundle) value));
28
- } else if (value instanceof List) {
29
- mPromise.resolve(Arguments.fromList((List) value));
30
- } else {
31
- mPromise.resolve(value);
32
- }
33
- }
34
-
35
- public void reject(String code, String message, Throwable e) {
36
- mPromise.reject(code, message, e);
37
- }
38
- }
@@ -1,53 +0,0 @@
1
- package expo.modules.adapters.react.services;
2
-
3
- import com.facebook.react.bridge.NativeModule;
4
- import com.facebook.react.bridge.ReactContext;
5
- import com.facebook.react.modules.network.ForwardingCookieHandler;
6
-
7
- import java.net.CookieHandler;
8
- import java.util.Collections;
9
- import java.util.List;
10
-
11
- import expo.modules.core.interfaces.InternalModule;
12
-
13
- public class CookieManagerModule extends ForwardingCookieHandler implements InternalModule, NativeModule {
14
- private static final String TAG = "CookieManagerModule";
15
-
16
- public CookieManagerModule(ReactContext context) {
17
- super(context);
18
- }
19
-
20
- @Override
21
- public String getName() {
22
- return null;
23
- }
24
-
25
- @Override
26
- public void initialize() {
27
- // do nothing
28
- }
29
-
30
- @Override
31
- public List<Class> getExportedInterfaces() {
32
- return Collections.singletonList((Class) CookieHandler.class);
33
- }
34
-
35
- @Override
36
- public boolean canOverrideExistingModule() {
37
- return false;
38
- }
39
-
40
- // `invalidate` replaces `onCatalystInstanceDestroy` in recent RN versions. We can't use
41
- // @Override here since older versions won't have this method. If one of these methods is
42
- // needed make sure to add the code to both as only one of the methods will be called depending
43
- // on the RN version.
44
- // See https://github.com/facebook/react-native/commit/18c8417290823e67e211bde241ae9dde27b72f17
45
- public void invalidate() {
46
- // do nothing
47
- }
48
-
49
- @Override
50
- public void onCatalystInstanceDestroy() {
51
- // do nothing
52
- }
53
- }
@@ -1,44 +0,0 @@
1
- package expo.modules.core;
2
-
3
- public class ArgumentsHelper {
4
- /* package */ static Object validatedArgumentForClass(Object argument, Class<?> expectedArgumentClass) {
5
- if (Object.class.isAssignableFrom(expectedArgumentClass)) {
6
- // Expected argument class is an Object descendant
7
- if (argument != null) {
8
- // Actual argument is not null, so we can check whether
9
- // its class matches expectation.
10
- Class<?> actualArgumentClass = argument.getClass();
11
-
12
- if (!expectedArgumentClass.isAssignableFrom(actualArgumentClass)) {
13
- // Expected argument class is not assignable from actual argument class
14
- // i. e. eg. Map was provided for a String argument.
15
- throw new IllegalArgumentException(
16
- "Argument of an incompatible class: " + actualArgumentClass
17
- + " cannot be passed as an argument to parameter expecting " + expectedArgumentClass + ".");
18
- }
19
- }
20
- } else {
21
- // Argument is of primitive type, like boolean or int.
22
- if (argument == null) {
23
- throw new IllegalArgumentException(
24
- "Argument null cannot be passed to an argument to parameter expecting " + expectedArgumentClass + ".");
25
- }
26
-
27
- Class<?> actualArgumentClass = argument.getClass();
28
- if (expectedArgumentClass != actualArgumentClass) {
29
- if (!Number.class.isAssignableFrom(actualArgumentClass) && !Boolean.class.isAssignableFrom(actualArgumentClass)) {
30
- throw new IllegalArgumentException("Argument of an incompatible class: "
31
- + actualArgumentClass + " cannot be passed as an argument to parameter expecting " + expectedArgumentClass + ".");
32
- }
33
-
34
- // Otherwise the expected argument is of type int or long or booealn and actual argument class is a descendant of Number or Boolean.
35
- // We believe that platform adapter has coerced the value correctly and when expected argument
36
- // is int, actual argument is Integer; when expected is float, actual is Float, etc.
37
- // If it's not, Java will throw a developer-readable exception.
38
- }
39
- }
40
-
41
- // All checks passed
42
- return argument;
43
- }
44
- }