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
@@ -32,10 +32,23 @@ public:
32
32
 
33
33
  std::vector<jsi::PropNameID> getPropertyNames(jsi::Runtime &rt) override;
34
34
 
35
+ /**
36
+ If the given object is a host object of type `LazyObject`, it returns its backed object.
37
+ Otherwise, the given object is returned back.
38
+ */
39
+ static const jsi::Object &unwrapObjectIfNecessary(jsi::Runtime &runtime, const jsi::Object &object);
40
+
35
41
  private:
36
42
  const LazyObjectInitializer initializer;
37
43
  std::shared_ptr<jsi::Object> backedObject;
38
44
 
45
+ /**
46
+ Initializes the backed object. It shouldn't be invoked more than once, so first make sure that `backedObject` is a null pointer.
47
+ */
48
+ inline void initializeBackedObject(jsi::Runtime &runtime) {
49
+ backedObject = initializer(runtime);
50
+ }
51
+
39
52
  }; // class LazyObject
40
53
 
41
54
  } // namespace expo
@@ -0,0 +1,16 @@
1
+ // Copyright 2024-present 650 Industries. All rights reserved.
2
+
3
+ #include "JSIUtils.h"
4
+ #include "EventEmitter.h"
5
+ #include "NativeModule.h"
6
+
7
+ namespace expo::NativeModule {
8
+
9
+ void installClass(jsi::Runtime &runtime) {
10
+ jsi::Function eventEmitterClass = EventEmitter::getClass(runtime);
11
+ jsi::Function nativeModuleClass = common::createInheritingClass(runtime, "NativeModule", eventEmitterClass);
12
+
13
+ common::getCoreObject(runtime).setProperty(runtime, "NativeModule", nativeModuleClass);
14
+ }
15
+
16
+ } // namespace expo::NativeModule
@@ -0,0 +1,34 @@
1
+ // Copyright 2024-present 650 Industries. All rights reserved.
2
+
3
+ #pragma once
4
+
5
+ #ifdef __cplusplus
6
+
7
+ #include <jsi/jsi.h>
8
+
9
+ namespace jsi = facebook::jsi;
10
+
11
+ namespace expo::NativeModule {
12
+
13
+ /**
14
+ Gets `expo.NativeModule` class in the given runtime.
15
+ */
16
+ inline jsi::Function getClass(jsi::Runtime &runtime) {
17
+ return common::getCoreObject(runtime).getPropertyAsFunction(runtime, "NativeModule");
18
+ }
19
+
20
+ /**
21
+ Installs `expo.NativeModule` class in the given runtime.
22
+ */
23
+ void installClass(jsi::Runtime &runtime);
24
+
25
+ /**
26
+ Creates a new instance of the native module.
27
+ */
28
+ inline jsi::Object createInstance(jsi::Runtime &runtime) {
29
+ return getClass(runtime).callAsConstructor(runtime).getObject(runtime);
30
+ }
31
+
32
+ } // namespace expo::NativeModule
33
+
34
+ #endif // __cplusplus
@@ -8,14 +8,12 @@ namespace expo::common {
8
8
  void setDeallocator(
9
9
  jsi::Runtime &runtime,
10
10
  const std::shared_ptr<jsi::Object> &jsThis,
11
- ObjectDeallocator::Block deallocatorBlock,
12
- const std::string &key
11
+ ObjectDeallocator::Block deallocatorBlock
13
12
  ) {
14
- std::shared_ptr<ObjectDeallocator> hostObjectPtr = std::make_shared<ObjectDeallocator>(
13
+ std::shared_ptr<ObjectDeallocator> objectDeallocator = std::make_shared<ObjectDeallocator>(
15
14
  deallocatorBlock
16
15
  );
17
- jsi::Object jsDeallocator = jsi::Object::createFromHostObject(runtime, hostObjectPtr);
18
- jsThis->setProperty(runtime, key.c_str(), jsi::Value(runtime, jsDeallocator));
16
+ jsThis->setNativeState(runtime, objectDeallocator);
19
17
  }
20
18
 
21
19
  } // namespace expo::common
@@ -8,7 +8,7 @@ namespace jsi = facebook::jsi;
8
8
 
9
9
  namespace expo::common {
10
10
 
11
- class JSI_EXPORT ObjectDeallocator : public jsi::HostObject {
11
+ class JSI_EXPORT ObjectDeallocator : public jsi::NativeState {
12
12
  public:
13
13
  typedef std::function<void()> Block;
14
14
 
@@ -28,8 +28,7 @@ public:
28
28
  void setDeallocator(
29
29
  jsi::Runtime &runtime,
30
30
  const std::shared_ptr<jsi::Object> &jsThis,
31
- ObjectDeallocator::Block deallocatorBlock,
32
- const std::string &key = "__expo_object_deallocator__"
31
+ ObjectDeallocator::Block deallocatorBlock
33
32
  );
34
33
 
35
34
  } // namespace expo::common
@@ -0,0 +1,69 @@
1
+ // Copyright 2024-present 650 Industries. All rights reserved.
2
+
3
+ #include "SharedObject.h"
4
+ #include "JSIUtils.h"
5
+
6
+ namespace expo::SharedObject {
7
+
8
+ #pragma mark - NativeState
9
+
10
+ NativeState::NativeState(const ObjectId objectId, const ObjectReleaser releaser)
11
+ : EventEmitter::NativeState(), objectId(objectId), releaser(releaser) {}
12
+
13
+ NativeState::~NativeState() {
14
+ releaser(objectId);
15
+ }
16
+
17
+ #pragma mark - Utils
18
+
19
+ void installBaseClass(jsi::Runtime &runtime, const ObjectReleaser releaser) {
20
+ jsi::Function baseClass = EventEmitter::getClass(runtime);
21
+ jsi::Function klass = expo::common::createInheritingClass(runtime, "SharedObject", baseClass);
22
+ jsi::Object prototype = klass.getPropertyAsObject(runtime, "prototype");
23
+
24
+ jsi::Function releaseFunction = jsi::Function::createFromHostFunction(
25
+ runtime,
26
+ jsi::PropNameID::forAscii(runtime, "release"),
27
+ 1,
28
+ [releaser](jsi::Runtime &runtime, const jsi::Value &thisValue, const jsi::Value *args, size_t count) -> jsi::Value {
29
+ jsi::Object thisObject = thisValue.getObject(runtime);
30
+
31
+ if (thisObject.hasNativeState<NativeState>(runtime)) {
32
+ auto nativeState = thisObject.getNativeState<NativeState>(runtime);
33
+
34
+ releaser(nativeState->objectId);
35
+
36
+ // Should we reset the native state?
37
+ thisObject.setNativeState(runtime, nullptr);
38
+ }
39
+ return jsi::Value::undefined();
40
+ });
41
+
42
+ prototype.setProperty(runtime, "release", releaseFunction);
43
+
44
+ // This property should be deprecated, but it's still used when passing as a view prop.
45
+ defineProperty(runtime, &prototype, "__expo_shared_object_id__", common::PropertyDescriptor {
46
+ .get = [](jsi::Runtime &runtime, jsi::Object thisObject) {
47
+ if (thisObject.hasNativeState<NativeState>(runtime)) {
48
+ auto nativeState = thisObject.getNativeState<NativeState>(runtime);
49
+ return jsi::Value((int)nativeState->objectId);
50
+ }
51
+ return jsi::Value(0);
52
+ }
53
+ });
54
+
55
+ common::getCoreObject(runtime)
56
+ .setProperty(runtime, "SharedObject", klass);
57
+ }
58
+
59
+ jsi::Function getBaseClass(jsi::Runtime &runtime) {
60
+ return common::getCoreObject(runtime)
61
+ .getPropertyAsFunction(runtime, "SharedObject");
62
+ }
63
+
64
+ jsi::Function createClass(jsi::Runtime &runtime, const char *className, common::ClassConstructor constructor) {
65
+ jsi::Function baseSharedObjectClass = getBaseClass(runtime);
66
+ return common::createInheritingClass(runtime, className, baseSharedObjectClass, constructor);
67
+ }
68
+
69
+ } // namespace expo::SharedObject
@@ -0,0 +1,59 @@
1
+ // Copyright 2024-present 650 Industries. All rights reserved.
2
+
3
+ #pragma once
4
+
5
+ #ifdef __cplusplus
6
+
7
+ #include <jsi/jsi.h>
8
+ #include "JSIUtils.h"
9
+ #include "ObjectDeallocator.h"
10
+ #include "EventEmitter.h"
11
+
12
+ namespace jsi = facebook::jsi;
13
+
14
+ namespace expo::SharedObject {
15
+
16
+ /**
17
+ Type of the shared object IDs.
18
+ */
19
+ typedef long ObjectId;
20
+
21
+ /**
22
+ Defines an object releaser block of the shared object.
23
+ */
24
+ typedef std::function<void(const ObjectId)> ObjectReleaser;
25
+
26
+ /**
27
+ Installs a base JavaScript class for all shared object with a shared release block.
28
+ */
29
+ void installBaseClass(jsi::Runtime &runtime, const ObjectReleaser releaser);
30
+
31
+ /**
32
+ Returns the base JavaScript class for all shared objects, i.e. `global.expo.SharedObject`.
33
+ */
34
+ jsi::Function getBaseClass(jsi::Runtime &runtime);
35
+
36
+ /**
37
+ Creates a concrete shared object class with the given name and constructor.
38
+ */
39
+ jsi::Function createClass(jsi::Runtime &runtime, const char *className, common::ClassConstructor constructor);
40
+
41
+ /**
42
+ Class representing a native state of the shared object.
43
+ */
44
+ class JSI_EXPORT NativeState : public EventEmitter::NativeState {
45
+ public:
46
+ const ObjectId objectId = 0;
47
+ const ObjectReleaser releaser;
48
+
49
+ /**
50
+ The default constructor that initializes a native state for the shared object with given ID.
51
+ */
52
+ NativeState(const ObjectId objectId, const ObjectReleaser releaser);
53
+
54
+ virtual ~NativeState();
55
+ }; // class NativeState
56
+
57
+ } // namespace expo::SharedObject
58
+
59
+ #endif // __cplusplus
@@ -0,0 +1,44 @@
1
+ // Copyright 2015-present 650 Industries. All rights reserved.
2
+
3
+ #pragma once
4
+
5
+ #ifdef __cplusplus
6
+
7
+ #include <ReactCommon/CallInvoker.h>
8
+
9
+ namespace expo {
10
+
11
+ /**
12
+ * Dummy CallInvoker that invokes everything immediately.
13
+ * Used in the test environment to check the async flow.
14
+ */
15
+ class TestingSyncJSCallInvoker : public facebook::react::CallInvoker {
16
+ public:
17
+ TestingSyncJSCallInvoker(std::shared_ptr<jsi::Runtime> runtime) : runtime(runtime) {}
18
+
19
+ #if REACT_NATIVE_TARGET_VERSION >= 75
20
+ void invokeAsync(react::CallFunc &&func) noexcept override {
21
+ func(*runtime);
22
+ }
23
+
24
+ void invokeSync(react::CallFunc &&func) override {
25
+ func(*runtime);
26
+ }
27
+ #else
28
+ void invokeAsync(std::function<void()> &&func) noexcept override {
29
+ func();
30
+ }
31
+
32
+ void invokeSync(std::function<void()> &&func) override {
33
+ func();
34
+ }
35
+ #endif
36
+
37
+ ~TestingSyncJSCallInvoker() override = default;
38
+
39
+ std::shared_ptr<jsi::Runtime> runtime;
40
+ };
41
+
42
+ } // namespace expo
43
+
44
+ #endif // __cplusplus
@@ -0,0 +1,34 @@
1
+ // Copyright 2022-present 650 Industries. All rights reserved.
2
+
3
+ /**
4
+ A result builder that captures the ``ClassDefinition`` elements such as functions, constants and properties.
5
+ */
6
+ @resultBuilder
7
+ public struct ClassDefinitionBuilder<OwnerType> {
8
+ public static func buildBlock(_ elements: AnyClassDefinitionElement...) -> [AnyClassDefinitionElement] {
9
+ return elements
10
+ }
11
+
12
+ /**
13
+ Default implementation without any constraints that just returns type-erased element.
14
+ */
15
+ public static func buildExpression<ElementType: AnyClassDefinitionElement>(
16
+ _ element: ElementType
17
+ ) -> AnyClassDefinitionElement {
18
+ return element
19
+ }
20
+
21
+ /**
22
+ In case the element's owner type matches builder's generic type,
23
+ we need to instruct the function to pass `this` to the closure
24
+ as the first argument and deduct it from `argumentsCount`.
25
+ */
26
+ public static func buildExpression<ElementType: ClassDefinitionElement>(
27
+ _ element: ElementType
28
+ ) -> AnyClassDefinitionElement where ElementType.OwnerType == OwnerType {
29
+ if var function = element as? AnyFunctionDefinition {
30
+ function.takesOwner = true
31
+ }
32
+ return element
33
+ }
34
+ }
@@ -16,10 +16,10 @@ public struct ObjectDefinitionBuilder {
16
16
  }
17
17
  }
18
18
 
19
- extension SyncFunctionComponent: AnyObjectDefinitionElement {}
19
+ extension SyncFunctionDefinition: AnyObjectDefinitionElement {}
20
20
 
21
- extension AsyncFunctionComponent: AnyObjectDefinitionElement {}
21
+ extension AsyncFunctionDefinition: AnyObjectDefinitionElement {}
22
22
 
23
- extension PropertyComponent: AnyObjectDefinitionElement {}
23
+ extension PropertyDefinition: AnyObjectDefinitionElement {}
24
24
 
25
25
  extension ConstantsDefinition: AnyObjectDefinitionElement {}
@@ -0,0 +1,53 @@
1
+ /**
2
+ A result builder for the view elements such as prop setters or view events.
3
+ */
4
+ @resultBuilder
5
+ public struct ViewDefinitionBuilder<ViewType: UIView> {
6
+ public static func buildBlock(_ elements: AnyViewDefinitionElement...) -> [AnyViewDefinitionElement] {
7
+ return elements
8
+ }
9
+
10
+ /**
11
+ Accepts `Events` definition element of `View`.
12
+ */
13
+ public static func buildExpression(_ element: EventsDefinition) -> AnyViewDefinitionElement {
14
+ return element
15
+ }
16
+
17
+ /**
18
+ Accepts `Prop` definition element and lets to skip defining the view type — it's inferred from the `View` definition.
19
+ */
20
+ public static func buildExpression<PropType: AnyArgument>(_ element: ConcreteViewProp<ViewType, PropType>) -> AnyViewDefinitionElement {
21
+ return element
22
+ }
23
+
24
+ /**
25
+ Accepts lifecycle methods (such as `OnViewDidUpdateProps`) as a definition element.
26
+ */
27
+ public static func buildExpression(_ element: ViewLifecycleMethod<ViewType>) -> AnyViewDefinitionElement {
28
+ return element
29
+ }
30
+
31
+ /**
32
+ Accepts functions as a view definition elements.
33
+ */
34
+ public static func buildExpression<ElementType: ViewDefinitionFunctionElement>(
35
+ _ element: ElementType
36
+ ) -> AnyViewDefinitionElement {
37
+ return element
38
+ }
39
+
40
+ /**
41
+ Accepts functions that take the owner as a view definition elements.
42
+ */
43
+ public static func buildExpression<ElementType: ViewDefinitionFunctionElement>(
44
+ _ element: ElementType
45
+ ) -> AnyViewDefinitionElement where ElementType.ViewType == ViewType {
46
+ // Enforce async functions to run on the main queue
47
+ if var function = element as? AnyAsyncFunctionDefinition {
48
+ function.runOnQueue(.main)
49
+ function.takesOwner = true
50
+ }
51
+ return element
52
+ }
53
+ }
@@ -0,0 +1,173 @@
1
+ /**
2
+ Asynchronous function without arguments.
3
+ */
4
+ public func AsyncFunction<R>(
5
+ _ name: String,
6
+ @_implicitSelfCapture _ closure: @escaping () throws -> R
7
+ ) -> AsyncFunctionDefinition<(), Void, R> {
8
+ return AsyncFunctionDefinition(
9
+ name,
10
+ firstArgType: Void.self,
11
+ dynamicArgumentTypes: [],
12
+ closure
13
+ )
14
+ }
15
+
16
+ /**
17
+ Asynchronous function with one argument.
18
+ */
19
+ public func AsyncFunction<R, A0: AnyArgument>(
20
+ _ name: String,
21
+ @_implicitSelfCapture _ closure: @escaping (A0) throws -> R
22
+ ) -> AsyncFunctionDefinition<(A0), A0, R> {
23
+ return AsyncFunctionDefinition(
24
+ name,
25
+ firstArgType: A0.self,
26
+ dynamicArgumentTypes: [~A0.self],
27
+ closure
28
+ )
29
+ }
30
+
31
+ /**
32
+ Asynchronous function with two arguments.
33
+ */
34
+ public func AsyncFunction<R, A0: AnyArgument, A1: AnyArgument>(
35
+ _ name: String,
36
+ @_implicitSelfCapture _ closure: @escaping (A0, A1) throws -> R
37
+ ) -> AsyncFunctionDefinition<(A0, A1), A0, R> {
38
+ return AsyncFunctionDefinition(
39
+ name,
40
+ firstArgType: A0.self,
41
+ dynamicArgumentTypes: [~A0.self, ~A1.self],
42
+ closure
43
+ )
44
+ }
45
+
46
+ /**
47
+ Asynchronous function with three arguments.
48
+ */
49
+ public func AsyncFunction<R, A0: AnyArgument, A1: AnyArgument, A2: AnyArgument>(
50
+ _ name: String,
51
+ @_implicitSelfCapture _ closure: @escaping (A0, A1, A2) throws -> R
52
+ ) -> AsyncFunctionDefinition<(A0, A1, A2), A0, R> {
53
+ return AsyncFunctionDefinition(
54
+ name,
55
+ firstArgType: A0.self,
56
+ dynamicArgumentTypes: [
57
+ ~A0.self,
58
+ ~A1.self,
59
+ ~A2.self
60
+ ],
61
+ closure
62
+ )
63
+ }
64
+
65
+ /**
66
+ Asynchronous function with four arguments.
67
+ */
68
+ public func AsyncFunction<R, A0: AnyArgument, A1: AnyArgument, A2: AnyArgument, A3: AnyArgument>(
69
+ _ name: String,
70
+ @_implicitSelfCapture _ closure: @escaping (A0, A1, A2, A3) throws -> R
71
+ ) -> AsyncFunctionDefinition<(A0, A1, A2, A3), A0, R> {
72
+ return AsyncFunctionDefinition(
73
+ name,
74
+ firstArgType: A0.self,
75
+ dynamicArgumentTypes: [
76
+ ~A0.self,
77
+ ~A1.self,
78
+ ~A2.self,
79
+ ~A3.self
80
+ ],
81
+ closure
82
+ )
83
+ }
84
+
85
+ /**
86
+ Asynchronous function with five arguments.
87
+ */
88
+ public func AsyncFunction<R, A0: AnyArgument, A1: AnyArgument, A2: AnyArgument, A3: AnyArgument, A4: AnyArgument>(
89
+ _ name: String,
90
+ @_implicitSelfCapture _ closure: @escaping (A0, A1, A2, A3, A4) throws -> R
91
+ ) -> AsyncFunctionDefinition<(A0, A1, A2, A3, A4), A0, R> {
92
+ return AsyncFunctionDefinition(
93
+ name,
94
+ firstArgType: A0.self,
95
+ dynamicArgumentTypes: [
96
+ ~A0.self,
97
+ ~A1.self,
98
+ ~A2.self,
99
+ ~A3.self,
100
+ ~A4.self
101
+ ],
102
+ closure
103
+ )
104
+ }
105
+
106
+ /**
107
+ Asynchronous function with six arguments.
108
+ */
109
+ public func AsyncFunction<R, A0: AnyArgument, A1: AnyArgument, A2: AnyArgument, A3: AnyArgument, A4: AnyArgument, A5: AnyArgument>(
110
+ _ name: String,
111
+ @_implicitSelfCapture _ closure: @escaping (A0, A1, A2, A3, A4, A5) throws -> R
112
+ ) -> AsyncFunctionDefinition<(A0, A1, A2, A3, A4, A5), A0, R> {
113
+ return AsyncFunctionDefinition(
114
+ name,
115
+ firstArgType: A0.self,
116
+ dynamicArgumentTypes: [
117
+ ~A0.self,
118
+ ~A1.self,
119
+ ~A2.self,
120
+ ~A3.self,
121
+ ~A4.self,
122
+ ~A5.self
123
+ ],
124
+ closure
125
+ )
126
+ }
127
+
128
+ /**
129
+ Asynchronous function with seven arguments.
130
+ */
131
+ public func AsyncFunction<R, A0: AnyArgument, A1: AnyArgument, A2: AnyArgument, A3: AnyArgument, A4: AnyArgument, A5: AnyArgument, A6: AnyArgument>(
132
+ _ name: String,
133
+ @_implicitSelfCapture _ closure: @escaping (A0, A1, A2, A3, A4, A5, A6) throws -> R
134
+ ) -> AsyncFunctionDefinition<(A0, A1, A2, A3, A4, A5, A6), A0, R> {
135
+ return AsyncFunctionDefinition(
136
+ name,
137
+ firstArgType: A0.self,
138
+ dynamicArgumentTypes: [
139
+ ~A0.self,
140
+ ~A1.self,
141
+ ~A2.self,
142
+ ~A3.self,
143
+ ~A4.self,
144
+ ~A5.self,
145
+ ~A6.self
146
+ ],
147
+ closure
148
+ )
149
+ }
150
+
151
+ /**
152
+ Asynchronous function with eight arguments.
153
+ */
154
+ public func AsyncFunction<R, A0: AnyArgument, A1: AnyArgument, A2: AnyArgument, A3: AnyArgument, A4: AnyArgument, A5: AnyArgument, A6: AnyArgument, A7: AnyArgument>(
155
+ _ name: String,
156
+ @_implicitSelfCapture _ closure: @escaping (A0, A1, A2, A3, A4, A5, A6, A7) throws -> R
157
+ ) -> AsyncFunctionDefinition<(A0, A1, A2, A3, A4, A5, A6, A7), A0, R> {
158
+ return AsyncFunctionDefinition(
159
+ name,
160
+ firstArgType: A0.self,
161
+ dynamicArgumentTypes: [
162
+ ~A0.self,
163
+ ~A1.self,
164
+ ~A2.self,
165
+ ~A3.self,
166
+ ~A4.self,
167
+ ~A5.self,
168
+ ~A6.self,
169
+ ~A7.self
170
+ ],
171
+ closure
172
+ )
173
+ }
@@ -5,7 +5,7 @@
5
5
  */
6
6
  public func Constructor<R>(
7
7
  @_implicitSelfCapture _ body: @escaping () throws -> R
8
- ) -> SyncFunctionComponent<(), Void, R> {
8
+ ) -> SyncFunctionDefinition<(), Void, R> {
9
9
  return Function("constructor", body)
10
10
  }
11
11
 
@@ -14,7 +14,7 @@ public func Constructor<R>(
14
14
  */
15
15
  public func Constructor<R, A0: AnyArgument>(
16
16
  @_implicitSelfCapture _ body: @escaping (A0) throws -> R
17
- ) -> SyncFunctionComponent<(A0), A0, R> {
17
+ ) -> SyncFunctionDefinition<(A0), A0, R> {
18
18
  return Function("constructor", body)
19
19
  }
20
20
 
@@ -23,7 +23,7 @@ public func Constructor<R, A0: AnyArgument>(
23
23
  */
24
24
  public func Constructor<R, A0: AnyArgument, A1: AnyArgument>(
25
25
  @_implicitSelfCapture _ body: @escaping (A0, A1) throws -> R
26
- ) -> SyncFunctionComponent<(A0, A1), A0, R> {
26
+ ) -> SyncFunctionDefinition<(A0, A1), A0, R> {
27
27
  return Function("constructor", body)
28
28
  }
29
29
 
@@ -32,7 +32,7 @@ public func Constructor<R, A0: AnyArgument, A1: AnyArgument>(
32
32
  */
33
33
  public func Constructor<R, A0: AnyArgument, A1: AnyArgument, A2: AnyArgument>(
34
34
  @_implicitSelfCapture _ body: @escaping (A0, A1, A2) throws -> R
35
- ) -> SyncFunctionComponent<(A0, A1, A2), A0, R> {
35
+ ) -> SyncFunctionDefinition<(A0, A1, A2), A0, R> {
36
36
  return Function("constructor", body)
37
37
  }
38
38
 
@@ -41,7 +41,7 @@ public func Constructor<R, A0: AnyArgument, A1: AnyArgument, A2: AnyArgument>(
41
41
  */
42
42
  public func Constructor<R, A0: AnyArgument, A1: AnyArgument, A2: AnyArgument, A3: AnyArgument>(
43
43
  @_implicitSelfCapture _ body: @escaping (A0, A1, A2, A3) throws -> R
44
- ) -> SyncFunctionComponent<(A0, A1, A2, A3), A0, R> {
44
+ ) -> SyncFunctionDefinition<(A0, A1, A2, A3), A0, R> {
45
45
  return Function("constructor", body)
46
46
  }
47
47
 
@@ -50,7 +50,7 @@ public func Constructor<R, A0: AnyArgument, A1: AnyArgument, A2: AnyArgument, A3
50
50
  */
51
51
  public func Constructor<R, A0: AnyArgument, A1: AnyArgument, A2: AnyArgument, A3: AnyArgument, A4: AnyArgument>(
52
52
  @_implicitSelfCapture _ body: @escaping (A0, A1, A2, A3, A4) throws -> R
53
- ) -> SyncFunctionComponent<(A0, A1, A2, A3, A4), A0, R> {
53
+ ) -> SyncFunctionDefinition<(A0, A1, A2, A3, A4), A0, R> {
54
54
  return Function("constructor", body)
55
55
  }
56
56
 
@@ -59,38 +59,38 @@ public func Constructor<R, A0: AnyArgument, A1: AnyArgument, A2: AnyArgument, A3
59
59
  */
60
60
  public func Constructor<R, A0: AnyArgument, A1: AnyArgument, A2: AnyArgument, A3: AnyArgument, A4: AnyArgument, A5: AnyArgument>(
61
61
  @_implicitSelfCapture _ body: @escaping (A0, A1, A2, A3, A4, A5) throws -> R
62
- ) -> SyncFunctionComponent<(A0, A1, A2, A3, A4, A5), A0, R> {
62
+ ) -> SyncFunctionDefinition<(A0, A1, A2, A3, A4, A5), A0, R> {
63
63
  return Function("constructor", body)
64
64
  }
65
65
 
66
66
  /**
67
- Creates the component describing a JavaScript class.
67
+ Creates the definition describing a JavaScript class.
68
68
  */
69
69
  public func Class(
70
70
  _ name: String,
71
- @ClassComponentElementsBuilder<JavaScriptObject> @_implicitSelfCapture _ elements: () -> [AnyClassComponentElement]
72
- ) -> ClassComponent {
73
- return ClassComponent(name: name, associatedType: JavaScriptObject.self, elements: elements())
71
+ @ClassDefinitionBuilder<JavaScriptObject> @_implicitSelfCapture _ elements: () -> [AnyClassDefinitionElement]
72
+ ) -> ClassDefinition {
73
+ return ClassDefinition(name: name, associatedType: JavaScriptObject.self, elements: elements())
74
74
  }
75
75
 
76
76
  /**
77
- Creates the component describing a JavaScript class with an associated native shared object class.
77
+ Creates the definition describing a JavaScript class with an associated native shared object class.
78
78
  */
79
79
  public func Class<SharedObjectType: SharedObject>(
80
80
  _ name: String = String(describing: SharedObjectType.self),
81
81
  _ sharedObjectType: SharedObjectType.Type,
82
- @ClassComponentElementsBuilder<SharedObjectType> @_implicitSelfCapture _ elements: () -> [AnyClassComponentElement]
83
- ) -> ClassComponent {
84
- return ClassComponent(name: name, associatedType: SharedObjectType.self, elements: elements())
82
+ @ClassDefinitionBuilder<SharedObjectType> @_implicitSelfCapture _ elements: () -> [AnyClassDefinitionElement]
83
+ ) -> ClassDefinition {
84
+ return ClassDefinition(name: name, associatedType: SharedObjectType.self, elements: elements())
85
85
  }
86
86
 
87
87
  /**
88
- Creates the component describing a JavaScript class with an associated native shared object class
88
+ Creates the definition describing a JavaScript class with an associated native shared object class
89
89
  and with the name that is inferred from the shared object type.
90
90
  */
91
91
  public func Class<SharedObjectType: SharedObject>(
92
92
  _ sharedObjectType: SharedObjectType.Type,
93
- @ClassComponentElementsBuilder<SharedObjectType> @_implicitSelfCapture _ elements: () -> [AnyClassComponentElement]
94
- ) -> ClassComponent {
95
- return ClassComponent(name: String(describing: SharedObjectType.self), associatedType: SharedObjectType.self, elements: elements())
93
+ @ClassDefinitionBuilder<SharedObjectType> @_implicitSelfCapture _ elements: () -> [AnyClassDefinitionElement]
94
+ ) -> ClassDefinition {
95
+ return ClassDefinition(name: String(describing: SharedObjectType.self), associatedType: SharedObjectType.self, elements: elements())
96
96
  }