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.
- package/CHANGELOG.md +77 -13
- package/ExpoModulesCore.podspec +7 -4
- package/android/ExpoModulesCorePlugin.gradle +40 -28
- package/android/build.gradle +12 -93
- package/android/proguard-rules.pro +0 -8
- package/android/src/main/cpp/Exceptions.cpp +1 -1
- package/android/src/main/cpp/Exceptions.h +1 -1
- package/android/src/main/cpp/ExpoModulesHostObject.cpp +7 -6
- package/android/src/main/cpp/ExpoModulesHostObject.h +3 -3
- package/android/src/main/cpp/JNIInjector.cpp +4 -2
- package/android/src/main/cpp/JSIContext.cpp +354 -0
- package/android/src/main/cpp/{JSIInteropModuleRegistry.h → JSIContext.h} +90 -9
- package/android/src/main/cpp/JavaCallback.cpp +210 -24
- package/android/src/main/cpp/JavaCallback.h +42 -7
- package/android/src/main/cpp/JavaScriptFunction.cpp +20 -6
- package/android/src/main/cpp/JavaScriptFunction.h +4 -1
- package/android/src/main/cpp/JavaScriptModuleObject.cpp +118 -82
- package/android/src/main/cpp/JavaScriptModuleObject.h +21 -18
- package/android/src/main/cpp/JavaScriptObject.cpp +7 -8
- package/android/src/main/cpp/JavaScriptObject.h +4 -2
- package/android/src/main/cpp/JavaScriptRuntime.cpp +18 -41
- package/android/src/main/cpp/JavaScriptRuntime.h +2 -8
- package/android/src/main/cpp/JavaScriptTypedArray.cpp +3 -3
- package/android/src/main/cpp/JavaScriptTypedArray.h +1 -1
- package/android/src/main/cpp/JavaScriptValue.cpp +7 -7
- package/android/src/main/cpp/JavaScriptValue.h +1 -1
- package/android/src/main/cpp/JavaScriptWeakObject.cpp +4 -4
- package/android/src/main/cpp/JavaScriptWeakObject.h +1 -1
- package/android/src/main/cpp/MethodMetadata.cpp +44 -120
- package/android/src/main/cpp/MethodMetadata.h +5 -11
- package/android/src/main/cpp/WeakRuntimeHolder.cpp +3 -3
- package/android/src/main/cpp/WeakRuntimeHolder.h +2 -2
- package/android/src/main/cpp/types/AnyType.cpp +1 -1
- package/android/src/main/cpp/types/AnyType.h +1 -1
- package/android/src/main/cpp/types/FrontendConverter.cpp +32 -43
- package/android/src/main/cpp/types/FrontendConverter.h +1 -23
- package/android/src/main/cpp/types/JNIToJSIConverter.cpp +5 -10
- package/android/src/main/cpp/types/JNIToJSIConverter.h +6 -2
- package/android/src/main/java/expo/modules/adapters/react/ModuleRegistryAdapter.java +3 -0
- package/android/src/main/java/expo/modules/adapters/react/NativeModulesProxy.java +14 -100
- package/android/src/main/java/expo/modules/adapters/react/ReactAdapterPackage.java +3 -5
- package/android/src/main/java/expo/modules/adapters/react/ReactModuleRegistryProvider.java +6 -22
- package/android/src/main/java/expo/modules/adapters/react/apploader/RNHeadlessAppLoader.kt +8 -4
- package/android/src/main/java/expo/modules/adapters/react/services/EventEmitterModule.java +0 -1
- package/android/src/main/java/expo/modules/adapters/react/services/UIManagerModuleWrapper.java +23 -8
- package/android/src/main/java/expo/modules/core/BasePackage.java +0 -10
- package/android/src/main/java/expo/modules/core/ModulePriorities.kt +1 -0
- package/android/src/main/java/expo/modules/core/ModuleRegistry.java +2 -32
- package/android/src/main/java/expo/modules/core/ModuleRegistryProvider.java +0 -18
- package/android/src/main/java/expo/modules/core/Promise.java +2 -0
- package/android/src/main/java/expo/modules/core/interfaces/Package.java +0 -17
- package/android/src/main/java/expo/modules/core/interfaces/ReactActivityHandler.java +0 -9
- package/android/src/main/java/expo/modules/core/interfaces/ReactNativeHostHandler.java +24 -31
- package/android/src/main/java/expo/modules/core/logging/LogHandler.kt +1 -7
- package/android/src/main/java/expo/modules/core/logging/LogHandlers.kt +11 -0
- package/android/src/main/java/expo/modules/core/logging/Logger.kt +18 -29
- package/android/src/main/java/expo/modules/core/logging/LoggerTimer.kt +11 -0
- package/android/src/main/java/expo/modules/core/logging/OSLogHandler.kt +2 -4
- package/android/src/main/java/expo/modules/core/logging/PersistentFileLogHandler.kt +1 -3
- package/android/src/main/java/expo/modules/interfaces/constants/ConstantsInterface.java +0 -2
- package/android/src/main/java/expo/modules/interfaces/permissions/PermissionsStatus.java +1 -1
- package/android/src/main/java/expo/modules/kotlin/AppContext.kt +44 -24
- package/android/src/main/java/expo/modules/kotlin/ArrayExtenstions.kt +15 -0
- package/android/src/main/java/expo/modules/kotlin/CoreLogger.kt +2 -2
- package/android/src/main/java/expo/modules/kotlin/DynamicExtenstions.kt +0 -3
- package/android/src/main/java/expo/modules/kotlin/ExpoBridgeModule.kt +41 -0
- package/android/src/main/java/expo/modules/kotlin/ExpoModulesHelper.kt +1 -2
- package/android/src/main/java/expo/modules/kotlin/KPromiseWrapper.kt +1 -2
- package/android/src/main/java/expo/modules/kotlin/KotlinInteropModuleRegistry.kt +1 -33
- package/android/src/main/java/expo/modules/kotlin/ModuleHolder.kt +7 -6
- package/android/src/main/java/expo/modules/kotlin/ModuleRegistry.kt +12 -12
- package/android/src/main/java/expo/modules/kotlin/Promise.kt +10 -0
- package/android/src/main/java/expo/modules/kotlin/ReactExtensions.kt +14 -0
- package/android/src/main/java/expo/modules/kotlin/Utils.kt +4 -1
- package/android/src/main/java/expo/modules/kotlin/activityaware/AppCompatActivityAwareHelper.kt +1 -1
- package/android/src/main/java/expo/modules/kotlin/activityresult/AppContextActivityResultCaller.kt +1 -1
- package/android/src/main/java/expo/modules/kotlin/activityresult/AppContextActivityResultRegistry.kt +6 -6
- package/android/src/main/java/expo/modules/kotlin/classcomponent/ClassComponentBuilder.kt +44 -15
- package/android/src/main/java/expo/modules/kotlin/defaultmodules/CoreModule.kt +31 -1
- package/android/src/main/java/expo/modules/kotlin/defaultmodules/ErrorManagerModule.kt +2 -4
- package/android/src/main/java/expo/modules/kotlin/events/KModuleEventEmitterWrapper.kt +11 -4
- package/android/src/main/java/expo/modules/kotlin/exception/CodedException.kt +2 -3
- package/android/src/main/java/expo/modules/kotlin/functions/AsyncFunctionBuilder.kt +136 -43
- package/android/src/main/java/expo/modules/kotlin/functions/AsyncFunctionComponent.kt +71 -2
- package/android/src/main/java/expo/modules/kotlin/functions/FunctionBuilder.kt +39 -12
- package/android/src/main/java/expo/modules/kotlin/jni/ExpectedType.kt +2 -2
- package/android/src/main/java/expo/modules/kotlin/jni/JNIDeallocator.kt +1 -1
- package/android/src/main/java/expo/modules/kotlin/jni/{JSIInteropModuleRegistry.kt → JSIContext.kt} +90 -14
- package/android/src/main/java/expo/modules/kotlin/jni/JavaCallback.kt +51 -24
- package/android/src/main/java/expo/modules/kotlin/jni/JavaScriptFunction.kt +3 -3
- package/android/src/main/java/expo/modules/kotlin/jni/JavaScriptModuleObject.kt +4 -1
- package/android/src/main/java/expo/modules/kotlin/jni/JavaScriptObject.kt +1 -0
- package/android/src/main/java/expo/modules/kotlin/jni/JavaScriptValue.kt +1 -0
- package/android/src/main/java/expo/modules/kotlin/jni/PromiseImpl.kt +20 -0
- package/android/src/main/java/expo/modules/kotlin/modules/Module.kt +0 -1
- package/android/src/main/java/expo/modules/kotlin/modules/ModuleDefinitionBuilder.kt +1 -1
- package/android/src/main/java/expo/modules/kotlin/objects/ObjectDefinitionBuilder.kt +164 -65
- package/android/src/main/java/expo/modules/kotlin/objects/PropertyComponentBuilder.kt +3 -4
- package/android/src/main/java/expo/modules/kotlin/sharedobjects/ClassRegistry.kt +21 -0
- package/android/src/main/java/expo/modules/kotlin/sharedobjects/SharedObject.kt +34 -1
- package/android/src/main/java/expo/modules/kotlin/sharedobjects/SharedObjectRegistry.kt +23 -8
- package/android/src/main/java/expo/modules/kotlin/sharedobjects/SharedRef.kt +7 -1
- package/android/src/main/java/expo/modules/kotlin/tracing/ExpoTrace.kt +4 -0
- package/android/src/main/java/expo/modules/kotlin/types/AnyType.kt +134 -2
- package/android/src/main/java/expo/modules/kotlin/types/EnforceType.kt +60 -0
- package/android/src/main/java/expo/modules/kotlin/types/EnumTypeConverter.kt +2 -2
- package/android/src/main/java/expo/modules/kotlin/types/TypeConverter.kt +0 -2
- package/android/src/main/java/expo/modules/kotlin/types/TypeConverterProvider.kt +3 -27
- package/android/src/main/java/expo/modules/kotlin/types/UnitTypeConverter.kt +3 -7
- package/android/src/main/java/expo/modules/kotlin/types/io/PathTypeConverter.kt +3 -0
- package/android/src/main/java/expo/modules/kotlin/viewevent/ViewEvent.kt +2 -5
- package/android/src/main/java/expo/modules/kotlin/views/ViewDefinitionBuilder.kt +137 -48
- package/android/src/main/java/expo/modules/kotlin/views/ViewManagerDefinition.kt +2 -5
- package/build/EventEmitter.d.ts +2 -2
- package/build/EventEmitter.d.ts.map +1 -1
- package/build/EventEmitter.js +8 -8
- package/build/EventEmitter.js.map +1 -1
- package/build/NativeModule.d.ts +4 -0
- package/build/NativeModule.d.ts.map +1 -0
- package/build/NativeModule.js +4 -0
- package/build/NativeModule.js.map +1 -0
- package/build/NativeModulesProxy.native.d.ts.map +1 -1
- package/build/NativeModulesProxy.native.js +4 -0
- package/build/NativeModulesProxy.native.js.map +1 -1
- package/build/NativeModulesProxy.types.d.ts +2 -2
- package/build/NativeModulesProxy.types.d.ts.map +1 -1
- package/build/NativeModulesProxy.types.js.map +1 -1
- package/build/NativeViewManagerAdapter.native.d.ts.map +1 -1
- package/build/NativeViewManagerAdapter.native.js +20 -1
- package/build/NativeViewManagerAdapter.native.js.map +1 -1
- package/build/PermissionsHook.d.ts.map +1 -1
- package/build/PermissionsHook.js +2 -0
- package/build/PermissionsHook.js.map +1 -1
- package/build/Refs.d.ts +8 -0
- package/build/Refs.d.ts.map +1 -0
- package/build/Refs.js +10 -0
- package/build/Refs.js.map +1 -0
- package/build/SharedObject.d.ts +4 -0
- package/build/SharedObject.d.ts.map +1 -0
- package/build/SharedObject.js +4 -0
- package/build/SharedObject.js.map +1 -0
- package/build/createWebModule.d.ts +2 -0
- package/build/createWebModule.d.ts.map +1 -0
- package/build/createWebModule.js +6 -0
- package/build/createWebModule.js.map +1 -0
- package/build/createWebModule.web.d.ts +2 -0
- package/build/createWebModule.web.d.ts.map +1 -0
- package/build/createWebModule.web.js +6 -0
- package/build/createWebModule.web.js.map +1 -0
- package/build/ensureNativeModulesAreInstalled.d.ts +6 -0
- package/build/ensureNativeModulesAreInstalled.d.ts.map +1 -0
- package/build/ensureNativeModulesAreInstalled.js +26 -0
- package/build/ensureNativeModulesAreInstalled.js.map +1 -0
- package/build/hooks/useReleasingSharedObject.d.ts +7 -0
- package/build/hooks/useReleasingSharedObject.d.ts.map +1 -0
- package/build/hooks/useReleasingSharedObject.js +40 -0
- package/build/hooks/useReleasingSharedObject.js.map +1 -0
- package/build/index.d.ts +8 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +8 -0
- package/build/index.js.map +1 -1
- package/build/requireNativeModule.d.ts +0 -17
- package/build/requireNativeModule.d.ts.map +1 -1
- package/build/requireNativeModule.js +2 -23
- package/build/requireNativeModule.js.map +1 -1
- package/build/ts-declarations/EventEmitter.d.ts +50 -0
- package/build/ts-declarations/EventEmitter.d.ts.map +1 -0
- package/build/ts-declarations/EventEmitter.js +2 -0
- package/build/ts-declarations/EventEmitter.js.map +1 -0
- package/build/ts-declarations/NativeModule.d.ts +14 -0
- package/build/ts-declarations/NativeModule.d.ts.map +1 -0
- package/build/ts-declarations/NativeModule.js +2 -0
- package/build/ts-declarations/NativeModule.js.map +1 -0
- package/build/ts-declarations/SharedObject.d.ts +14 -0
- package/build/ts-declarations/SharedObject.d.ts.map +1 -0
- package/build/ts-declarations/SharedObject.js +2 -0
- package/build/ts-declarations/SharedObject.js.map +1 -0
- package/build/ts-declarations/global.d.ts +49 -0
- package/build/ts-declarations/global.d.ts.map +1 -0
- package/build/ts-declarations/global.js +2 -0
- package/build/ts-declarations/global.js.map +1 -0
- package/build/web/CoreModule.d.ts +17 -0
- package/build/web/CoreModule.d.ts.map +1 -0
- package/build/web/CoreModule.js +51 -0
- package/build/web/CoreModule.js.map +1 -0
- package/build/web/index.d.ts +1 -0
- package/build/web/index.d.ts.map +1 -0
- package/build/web/index.js +1 -0
- package/build/web/index.js.map +1 -0
- package/build/web/index.web.d.ts +2 -0
- package/build/web/index.web.d.ts.map +1 -0
- package/build/web/index.web.js +2 -0
- package/build/web/index.web.js.map +1 -0
- package/common/cpp/BridgelessJSCallInvoker.h +41 -0
- package/common/cpp/EventEmitter.cpp +299 -0
- package/common/cpp/EventEmitter.h +111 -0
- package/common/cpp/JSIUtils.cpp +116 -11
- package/common/cpp/JSIUtils.h +54 -7
- package/common/cpp/LazyObject.cpp +15 -3
- package/common/cpp/LazyObject.h +13 -0
- package/common/cpp/NativeModule.cpp +16 -0
- package/common/cpp/NativeModule.h +34 -0
- package/common/cpp/ObjectDeallocator.cpp +3 -5
- package/common/cpp/ObjectDeallocator.h +2 -3
- package/common/cpp/SharedObject.cpp +69 -0
- package/common/cpp/SharedObject.h +59 -0
- package/common/cpp/TestingSyncJSCallInvoker.h +44 -0
- package/ios/Api/Builders/ClassComponentBuilder.swift +34 -0
- package/ios/{Objects → Api/Builders}/ObjectDefinitionBuilder.swift +3 -3
- package/ios/Api/Builders/ViewDefinitionBuilder.swift +53 -0
- package/ios/Api/Factories/AsyncFunctionFactories.swift +173 -0
- package/ios/{Classes/ClassComponentFactories.swift → Api/Factories/ClassFactories.swift} +19 -19
- package/ios/{Functions/ConcurrentFunctionDefinition.swift → Api/Factories/ConcurrentFunctionFactories.swift} +0 -113
- package/ios/{Modules/ModuleDefinitionComponents.swift → Api/Factories/EventListenersFactories.swift} +0 -20
- package/ios/Api/Factories/ModuleFactories.swift +6 -0
- package/ios/{Objects/ObjectDefinitionComponents.swift → Api/Factories/ObjectFactories.swift} +5 -5
- package/ios/Api/Factories/PropertyFactories.swift +50 -0
- package/ios/Api/Factories/SyncFunctionFactories.swift +173 -0
- package/ios/{Views/ViewManagerDefinitionComponents.swift → Api/Factories/ViewFactories.swift} +7 -6
- package/ios/AppDelegates/EXAppDelegateWrapper.h +0 -21
- package/ios/AppDelegates/EXAppDelegateWrapper.mm +37 -29
- package/ios/{AppContext.swift → Core/AppContext.swift} +34 -11
- package/ios/Core/Classes/AnyClassDefinitionElement.swift +37 -0
- package/ios/{Classes/ClassComponent.swift → Core/Classes/ClassDefinition.swift} +10 -10
- package/ios/{Conversions.swift → Core/Conversions.swift} +1 -1
- package/ios/{DynamicTypes → Core/DynamicTypes}/DynamicSharedObjectType.swift +3 -3
- package/ios/Core/Events/EventObservingDefinition.swift +79 -0
- package/ios/Core/Events/LegacyEventEmitterCompat.swift +32 -0
- package/ios/Core/ExpoBridgeModule.h +18 -0
- package/ios/Core/ExpoBridgeModule.mm +88 -0
- package/ios/Core/ExpoRuntime.swift +6 -0
- package/ios/{Functions/AnyFunction.swift → Core/Functions/AnyFunctionDefinition.swift} +9 -2
- package/ios/Core/Functions/AsyncFunctionDefinition.swift +150 -0
- package/ios/Core/Functions/ConcurrentFunctionDefinition.swift +112 -0
- package/ios/Core/Functions/SyncFunctionDefinition.swift +108 -0
- package/ios/{JavaScriptUtils.swift → Core/JavaScriptUtils.swift} +4 -4
- package/ios/{Logging → Core/Logging}/LogHandlers.swift +12 -5
- package/ios/{Logging → Core/Logging}/Logger.swift +14 -92
- package/ios/Core/Logging/LoggerTimer.swift +22 -0
- package/ios/{ModuleHolder.swift → Core/ModuleHolder.swift} +2 -10
- package/ios/Core/Modules/CoreModule.swift +43 -0
- package/ios/{Modules → Core/Modules}/ModuleDefinition.swift +20 -12
- package/ios/{Modules → Core/Modules}/ModuleDefinitionBuilder.swift +1 -3
- package/ios/{Objects → Core/Objects}/ObjectDefinition.swift +9 -9
- package/ios/{Objects/PropertyComponent.swift → Core/Objects/PropertyDefinition.swift} +11 -64
- package/ios/Core/Protocols/AnyDefinition.swift +4 -0
- package/ios/Core/Protocols/AnyExpoView.swift +7 -0
- package/ios/Core/Protocols/AnyModule.swift +17 -0
- package/ios/Core/Protocols/AnyViewDefinition.swift +34 -0
- package/ios/Core/SharedObjects/SharedObject.swift +80 -0
- package/ios/{SharedObjects → Core/SharedObjects}/SharedObjectRegistry.swift +45 -19
- package/ios/{Views → Core/Views}/AnyViewProp.swift +1 -1
- package/ios/{Views → Core/Views}/ComponentData.swift +7 -7
- package/ios/{Views → Core/Views}/ExpoView.swift +1 -1
- package/ios/Core/Views/ViewDefinition.swift +97 -0
- package/ios/{Views → Core/Views}/ViewLifecycleMethod.swift +1 -1
- package/ios/{Views → Core/Views}/ViewModuleWrapper.swift +1 -1
- package/ios/Fabric/ExpoFabricView.swift +5 -6
- package/ios/FileSystemUtilities/FileSystemLegacyUtilities.swift +111 -0
- package/ios/JSI/EXJSIInstaller.h +28 -0
- package/ios/JSI/EXJSIInstaller.mm +54 -10
- package/ios/JSI/EXJSIUtils.h +15 -11
- package/ios/JSI/EXJSIUtils.mm +21 -49
- package/ios/JSI/EXJavaScriptObject.mm +2 -2
- package/ios/JSI/EXJavaScriptRuntime.h +15 -0
- package/ios/JSI/EXJavaScriptRuntime.mm +53 -26
- package/ios/JSI/EXSharedObjectUtils.h +15 -0
- package/ios/JSI/EXSharedObjectUtils.mm +18 -0
- package/ios/JSI/JavaScriptRuntime.swift +16 -0
- package/ios/Legacy/ModuleRegistry/EXModuleRegistry.m +1 -0
- package/ios/Legacy/ModuleRegistryProvider/EXModuleRegistryProvider.m +5 -0
- package/ios/Legacy/NativeModulesProxy/EXNativeModulesProxy.mm +5 -4
- package/ios/Legacy/Services/EXReactNativeAdapter.mm +34 -28
- package/ios/ReactDelegates/EXReactDelegateWrapper.h +4 -12
- package/ios/ReactDelegates/EXReactDelegateWrapper.mm +41 -0
- package/ios/ReactDelegates/EXReactRootViewFactory.h +38 -0
- package/ios/ReactDelegates/EXReactRootViewFactory.mm +54 -0
- package/ios/ReactDelegates/ExpoReactDelegate.swift +22 -15
- package/ios/ReactDelegates/ExpoReactDelegateHandler.swift +10 -21
- package/ios/ReactDelegates/RCTAppDelegate+Recreate.h +28 -0
- package/ios/ReactDelegates/RCTAppDelegate+Recreate.mm +47 -0
- package/ios/Tests/{ClassComponentSpec.swift → ClassDefinitionSpec.swift} +6 -6
- package/ios/Tests/ConvertiblesSpec.swift +6 -1
- package/ios/Tests/CoreModuleSpec.swift +0 -4
- package/ios/Tests/DynamicTypeSpec.swift +1 -1
- package/ios/Tests/EventEmitterSpec.swift +274 -0
- package/ios/Tests/ExceptionsSpec.swift +114 -54
- package/ios/Tests/ExpoModulesSpec.swift +4 -3
- package/ios/Tests/LoggerSpec.swift +80 -0
- package/ios/Tests/{PropertyComponentSpec.swift → PropertyDefinitionSpec.swift} +1 -1
- package/ios/Tests/SharedObjectRegistrySpec.swift +34 -28
- package/ios/Tests/SharedObjectSpec.swift +141 -0
- package/ios/Tests/ViewDefinitionSpec.swift +1 -1
- package/package.json +2 -2
- package/src/EventEmitter.ts +15 -18
- package/src/NativeModule.ts +6 -0
- package/src/NativeModulesProxy.native.ts +5 -0
- package/src/NativeModulesProxy.types.ts +2 -2
- package/src/NativeViewManagerAdapter.native.tsx +25 -1
- package/src/PermissionsHook.ts +4 -0
- package/src/Refs.ts +10 -0
- package/src/SharedObject.ts +6 -0
- package/src/createWebModule.ts +5 -0
- package/src/createWebModule.web.ts +6 -0
- package/src/ensureNativeModulesAreInstalled.ts +24 -0
- package/src/hooks/useReleasingSharedObject.ts +51 -0
- package/src/index.ts +13 -0
- package/src/requireNativeModule.ts +2 -51
- package/src/ts-declarations/EventEmitter.ts +65 -0
- package/src/ts-declarations/ExpoModules.d.ts +0 -5
- package/src/ts-declarations/NativeModule.ts +18 -0
- package/src/ts-declarations/SharedObject.ts +16 -0
- package/src/ts-declarations/global.ts +60 -0
- package/src/web/CoreModule.ts +83 -0
- package/src/web/index.ts +0 -0
- package/src/web/index.web.ts +1 -0
- package/android/src/main/cpp/JSIInteropModuleRegistry.cpp +0 -196
- package/android/src/main/java/expo/modules/adapters/react/ArgumentsHelper.java +0 -48
- package/android/src/main/java/expo/modules/adapters/react/PromiseWrapper.java +0 -38
- package/android/src/main/java/expo/modules/adapters/react/services/CookieManagerModule.java +0 -53
- package/android/src/main/java/expo/modules/core/ArgumentsHelper.java +0 -44
- package/android/src/main/java/expo/modules/core/ExportedModule.java +0 -173
- package/android/src/main/java/expo/modules/core/ModuleRegistryDelegate.kt +0 -12
- package/android/src/main/java/expo/modules/core/ViewManager.java +0 -9
- package/android/src/main/java/expo/modules/core/interfaces/ExpoMethod.java +0 -12
- package/android/src/main/java/expo/modules/core/interfaces/ExpoProp.java +0 -10
- package/android/src/main/java/expo/modules/core/logging/LoggerOptions.kt +0 -29
- package/android-annotation/build.gradle +0 -48
- package/android-annotation/src/main/java/expo/modules/annotation/Config.kt +0 -7
- package/android-annotation/src/main/java/expo/modules/annotation/ConverterBinder.kt +0 -7
- package/android-annotation-processor/build.gradle +0 -54
- package/android-annotation-processor/src/main/java/expo/modules/annotationprocessor/ExpoSymbolProcessor.kt +0 -175
- package/android-annotation-processor/src/main/java/expo/modules/annotationprocessor/ExpoSymbolProcessorProvider.kt +0 -10
- package/android-annotation-processor/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider +0 -1
- package/ios/Classes/ClassComponentElement.swift +0 -37
- package/ios/Classes/ClassComponentElementsBuilder.swift +0 -34
- package/ios/ExpoBridgeModule.m +0 -7
- package/ios/ExpoBridgeModule.swift +0 -108
- package/ios/ExpoRuntime.swift +0 -28
- package/ios/Functions/AsyncFunctionComponent.swift +0 -327
- package/ios/Functions/SyncFunctionComponent.swift +0 -282
- package/ios/Interfaces/Font/EXFontManagerInterface.h +0 -9
- package/ios/Interfaces/Font/EXFontProcessorInterface.h +0 -15
- package/ios/Interfaces/Font/EXFontScalerInterface.h +0 -9
- package/ios/Interfaces/Font/EXFontScalersManagerInterface.h +0 -9
- package/ios/Legacy/Services/EXReactFontManager.h +0 -6
- package/ios/Legacy/Services/EXReactFontManager.m +0 -130
- package/ios/Modules/AnyModule.swift +0 -53
- package/ios/Modules/CoreModule.swift +0 -17
- package/ios/ReactDelegates/EXRCTBridgeDelegateInterceptor.h +0 -16
- package/ios/ReactDelegates/EXRCTBridgeDelegateInterceptor.m +0 -49
- package/ios/ReactDelegates/EXReactCompatibleHelpers.h +0 -15
- package/ios/ReactDelegates/EXReactCompatibleHelpers.m +0 -25
- package/ios/ReactDelegates/EXReactDelegateWrapper.m +0 -53
- package/ios/SharedObjects/SharedObject.swift +0 -31
- package/ios/Views/ViewDefinition.swift +0 -114
- package/ios/Views/ViewFactory.swift +0 -16
- package/ios/Views/ViewManagerDefinition.swift +0 -77
- package/ios/Views/ViewManagerDefinitionBuilder.swift +0 -11
- /package/ios/{AppContextConfig.swift → Core/AppContextConfig.swift} +0 -0
- /package/ios/{Arguments → Core/Arguments}/AnyArgument.swift +0 -0
- /package/ios/{Arguments → Core/Arguments}/Convertible.swift +0 -0
- /package/ios/{Arguments → Core/Arguments}/Convertibles.swift +0 -0
- /package/ios/{Arguments → Core/Arguments}/Enumerable.swift +0 -0
- /package/ios/{Classes → Core/Classes}/ClassRegistry.swift +0 -0
- /package/ios/{Convertibles → Core/Convertibles}/Convertibles+Color.swift +0 -0
- /package/ios/{Convertibles → Core/Convertibles}/Either.swift +0 -0
- /package/ios/{DynamicTypes → Core/DynamicTypes}/AnyDynamicType.swift +0 -0
- /package/ios/{DynamicTypes → Core/DynamicTypes}/DynamicArrayType.swift +0 -0
- /package/ios/{DynamicTypes → Core/DynamicTypes}/DynamicConvertibleType.swift +0 -0
- /package/ios/{DynamicTypes → Core/DynamicTypes}/DynamicDataType.swift +0 -0
- /package/ios/{DynamicTypes → Core/DynamicTypes}/DynamicDictionaryType.swift +0 -0
- /package/ios/{DynamicTypes → Core/DynamicTypes}/DynamicEnumType.swift +0 -0
- /package/ios/{DynamicTypes → Core/DynamicTypes}/DynamicJavaScriptType.swift +0 -0
- /package/ios/{DynamicTypes → Core/DynamicTypes}/DynamicOptionalType.swift +0 -0
- /package/ios/{DynamicTypes → Core/DynamicTypes}/DynamicRawType.swift +0 -0
- /package/ios/{DynamicTypes → Core/DynamicTypes}/DynamicType.swift +0 -0
- /package/ios/{DynamicTypes → Core/DynamicTypes}/DynamicTypedArrayType.swift +0 -0
- /package/ios/{DynamicTypes → Core/DynamicTypes}/DynamicViewType.swift +0 -0
- /package/ios/{EventListener.swift → Core/EventListener.swift} +0 -0
- /package/ios/{Events → Core/Events}/Callback.swift +0 -0
- /package/ios/{Events → Core/Events}/EventDispatcher.swift +0 -0
- /package/ios/{Exceptions → Core/Exceptions}/ChainableException.swift +0 -0
- /package/ios/{Exceptions → Core/Exceptions}/CodedError.swift +0 -0
- /package/ios/{Exceptions → Core/Exceptions}/CommonExceptions.swift +0 -0
- /package/ios/{Exceptions → Core/Exceptions}/Exception.swift +0 -0
- /package/ios/{Exceptions → Core/Exceptions}/ExceptionOrigin.swift +0 -0
- /package/ios/{Exceptions → Core/Exceptions}/GenericException.swift +0 -0
- /package/ios/{Exceptions → Core/Exceptions}/UnexpectedException.swift +0 -0
- /package/ios/{JavaScriptFunction.swift → Core/JavaScriptFunction.swift} +0 -0
- /package/ios/{Logging → Core/Logging}/LogType.swift +0 -0
- /package/ios/{Logging → Core/Logging}/PersistentFileLog.swift +0 -0
- /package/ios/{ModuleRegistry.swift → Core/ModuleRegistry.swift} +0 -0
- /package/ios/{Modules → Core/Modules}/Module.swift +0 -0
- /package/ios/{ModulesProvider.swift → Core/ModulesProvider.swift} +0 -0
- /package/ios/{Objects → Core/Objects}/JavaScriptObjectBuilder.swift +0 -0
- /package/ios/{Promise.swift → Core/Promise.swift} +0 -0
- /package/ios/{Records → Core/Records}/AnyField.swift +0 -0
- /package/ios/{Records → Core/Records}/Field.swift +0 -0
- /package/ios/{Records → Core/Records}/FieldExtensions.swift +0 -0
- /package/ios/{Records → Core/Records}/FieldOption.swift +0 -0
- /package/ios/{Records → Core/Records}/Record.swift +0 -0
- /package/ios/{SharedObjects → Core/SharedObjects}/SharedRef.swift +0 -0
- /package/ios/{TypedArrays → Core/TypedArrays}/AnyTypedArray.swift +0 -0
- /package/ios/{TypedArrays → Core/TypedArrays}/ConcreteTypedArrays.swift +0 -0
- /package/ios/{TypedArrays → Core/TypedArrays}/GenericTypedArray.swift +0 -0
- /package/ios/{TypedArrays → Core/TypedArrays}/TypedArray.swift +0 -0
- /package/ios/{Views → Core/Views}/ConcreteViewProp.swift +0 -0
|
@@ -1,65 +1,251 @@
|
|
|
1
1
|
// Copyright © 2021-present 650 Industries, Inc. (aka Expo)
|
|
2
2
|
|
|
3
3
|
#include "JavaCallback.h"
|
|
4
|
-
#include "
|
|
4
|
+
#include "JSIContext.h"
|
|
5
|
+
#include "types/JNIToJSIConverter.h"
|
|
6
|
+
#include "Exceptions.h"
|
|
5
7
|
|
|
6
|
-
|
|
8
|
+
#include <fbjni/fbjni.h>
|
|
9
|
+
#include <fbjni/fbjni.h>
|
|
10
|
+
#include <folly/dynamic.h>
|
|
11
|
+
|
|
12
|
+
#include <functional>
|
|
7
13
|
|
|
8
|
-
|
|
9
|
-
: callback(std::move(callback)) {}
|
|
14
|
+
namespace expo {
|
|
10
15
|
|
|
16
|
+
JavaCallback::JavaCallback(std::shared_ptr<CallbackContext> callbackContext)
|
|
17
|
+
: callbackContext(std::move(callbackContext)) {}
|
|
11
18
|
|
|
12
19
|
void JavaCallback::registerNatives() {
|
|
13
20
|
registerHybrid({
|
|
14
|
-
makeNativeMethod("
|
|
15
|
-
makeNativeMethod("
|
|
16
|
-
makeNativeMethod("
|
|
17
|
-
makeNativeMethod("
|
|
18
|
-
makeNativeMethod("
|
|
19
|
-
makeNativeMethod("
|
|
20
|
-
makeNativeMethod("
|
|
21
|
-
makeNativeMethod("
|
|
21
|
+
makeNativeMethod("invokeNative", JavaCallback::invoke),
|
|
22
|
+
makeNativeMethod("invokeNative", JavaCallback::invokeBool),
|
|
23
|
+
makeNativeMethod("invokeNative", JavaCallback::invokeInt),
|
|
24
|
+
makeNativeMethod("invokeNative", JavaCallback::invokeDouble),
|
|
25
|
+
makeNativeMethod("invokeNative", JavaCallback::invokeFloat),
|
|
26
|
+
makeNativeMethod("invokeNative", JavaCallback::invokeString),
|
|
27
|
+
makeNativeMethod("invokeNative", JavaCallback::invokeArray),
|
|
28
|
+
makeNativeMethod("invokeNative", JavaCallback::invokeMap),
|
|
29
|
+
makeNativeMethod("invokeNative", JavaCallback::invokeSharedRef),
|
|
22
30
|
});
|
|
23
31
|
}
|
|
24
32
|
|
|
33
|
+
|
|
25
34
|
jni::local_ref<JavaCallback::javaobject> JavaCallback::newInstance(
|
|
26
|
-
|
|
27
|
-
|
|
35
|
+
JSIContext *jsiContext,
|
|
36
|
+
std::shared_ptr<CallbackContext> callbackContext
|
|
28
37
|
) {
|
|
29
|
-
auto object = JavaCallback::newObjectCxxArgs(std::move(
|
|
30
|
-
|
|
38
|
+
auto object = JavaCallback::newObjectCxxArgs(std::move(callbackContext));
|
|
39
|
+
jsiContext->jniDeallocator->addReference(object);
|
|
31
40
|
return object;
|
|
32
41
|
}
|
|
33
42
|
|
|
43
|
+
template<typename T>
|
|
44
|
+
void JavaCallback::invokeJSFunction(
|
|
45
|
+
ArgsConverter<T> argsConverter,
|
|
46
|
+
T arg
|
|
47
|
+
) {
|
|
48
|
+
const auto jsInvoker = callbackContext->jsCallInvokerHolder;
|
|
49
|
+
jsInvoker->invokeAsync(
|
|
50
|
+
[
|
|
51
|
+
context = std::move(callbackContext),
|
|
52
|
+
argsConverter = std::move(argsConverter),
|
|
53
|
+
arg = std::move(arg)
|
|
54
|
+
]() -> void {
|
|
55
|
+
if (!context->jsFunctionHolder.has_value()) {
|
|
56
|
+
throw std::runtime_error(
|
|
57
|
+
"JavaCallback was already settled. Cannot invoke it again"
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
jsi::Function &jsFunction = context->jsFunctionHolder.value();
|
|
62
|
+
jsi::Runtime &rt = context->rt;
|
|
63
|
+
|
|
64
|
+
argsConverter(rt, jsFunction, std::move(arg), context->isRejectCallback);
|
|
65
|
+
context->jsFunctionHolder.reset();
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
template<class T>
|
|
70
|
+
void JavaCallback::invokeJSFunction(T arg) {
|
|
71
|
+
invokeJSFunction<T>(
|
|
72
|
+
[](
|
|
73
|
+
jsi::Runtime &rt,
|
|
74
|
+
jsi::Function &jsFunction,
|
|
75
|
+
T arg,
|
|
76
|
+
bool isRejectCallback
|
|
77
|
+
) {
|
|
78
|
+
jsFunction.call(rt, {jsi::Value(rt, arg)});
|
|
79
|
+
},
|
|
80
|
+
arg
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
|
|
34
84
|
void JavaCallback::invoke() {
|
|
35
|
-
|
|
85
|
+
invokeJSFunction<nullptr_t>(
|
|
86
|
+
[](
|
|
87
|
+
jsi::Runtime &rt,
|
|
88
|
+
jsi::Function &jsFunction,
|
|
89
|
+
nullptr_t arg,
|
|
90
|
+
bool isRejectCallback
|
|
91
|
+
) {
|
|
92
|
+
jsFunction.call(rt, {jsi::Value::null()});
|
|
93
|
+
},
|
|
94
|
+
nullptr
|
|
95
|
+
);
|
|
36
96
|
}
|
|
37
97
|
|
|
38
98
|
void JavaCallback::invokeBool(bool result) {
|
|
39
|
-
|
|
99
|
+
invokeJSFunction(result);
|
|
40
100
|
}
|
|
41
101
|
|
|
42
102
|
void JavaCallback::invokeInt(int result) {
|
|
43
|
-
|
|
103
|
+
invokeJSFunction(result);
|
|
44
104
|
}
|
|
45
105
|
|
|
46
106
|
void JavaCallback::invokeDouble(double result) {
|
|
47
|
-
|
|
107
|
+
invokeJSFunction(result);
|
|
48
108
|
}
|
|
49
109
|
|
|
50
110
|
void JavaCallback::invokeFloat(float result) {
|
|
51
|
-
|
|
111
|
+
invokeJSFunction(result);
|
|
52
112
|
}
|
|
53
113
|
|
|
54
114
|
void JavaCallback::invokeString(jni::alias_ref<jstring> result) {
|
|
55
|
-
|
|
115
|
+
invokeJSFunction<std::string>(
|
|
116
|
+
[](
|
|
117
|
+
jsi::Runtime &rt,
|
|
118
|
+
jsi::Function &jsFunction,
|
|
119
|
+
std::string arg,
|
|
120
|
+
bool isRejectCallback
|
|
121
|
+
) {
|
|
122
|
+
std::optional<jsi::Value> extendedString = convertStringToFollyDynamicIfNeeded(
|
|
123
|
+
rt,
|
|
124
|
+
arg
|
|
125
|
+
);
|
|
126
|
+
|
|
127
|
+
if (extendedString.has_value()) {
|
|
128
|
+
const jsi::Value &jsValue = extendedString.value();
|
|
129
|
+
jsFunction.call(
|
|
130
|
+
rt,
|
|
131
|
+
(const jsi::Value *) &jsValue,
|
|
132
|
+
(size_t) 1
|
|
133
|
+
);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
jsFunction.call(rt, {jsi::String::createFromUtf8(rt, arg)});
|
|
138
|
+
},
|
|
139
|
+
result->toStdString()
|
|
140
|
+
);
|
|
56
141
|
}
|
|
57
142
|
|
|
58
143
|
void JavaCallback::invokeArray(jni::alias_ref<react::WritableNativeArray::javaobject> result) {
|
|
59
|
-
|
|
144
|
+
invokeJSFunction<folly::dynamic>(
|
|
145
|
+
[](
|
|
146
|
+
jsi::Runtime &rt,
|
|
147
|
+
jsi::Function &jsFunction,
|
|
148
|
+
folly::dynamic arg,
|
|
149
|
+
bool isRejectCallback
|
|
150
|
+
) {
|
|
151
|
+
jsi::Value convertedArg = jsi::valueFromDynamic(rt, arg);
|
|
152
|
+
auto enhancedArg = decorateValueForDynamicExtension(rt, convertedArg);
|
|
153
|
+
if (enhancedArg) {
|
|
154
|
+
convertedArg = std::move(*enhancedArg);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
jsFunction.call(
|
|
158
|
+
rt,
|
|
159
|
+
(const jsi::Value *) &convertedArg,
|
|
160
|
+
(size_t) 1
|
|
161
|
+
);
|
|
162
|
+
},
|
|
163
|
+
result->cthis()->consume()
|
|
164
|
+
);
|
|
60
165
|
}
|
|
61
166
|
|
|
62
167
|
void JavaCallback::invokeMap(jni::alias_ref<react::WritableNativeMap::javaobject> result) {
|
|
63
|
-
|
|
168
|
+
invokeJSFunction<folly::dynamic>(
|
|
169
|
+
[](
|
|
170
|
+
jsi::Runtime &rt,
|
|
171
|
+
jsi::Function &jsFunction,
|
|
172
|
+
folly::dynamic arg,
|
|
173
|
+
bool isRejectCallback
|
|
174
|
+
) {
|
|
175
|
+
if (isRejectCallback) {
|
|
176
|
+
auto errorCode = arg.find("code")->second.asString();
|
|
177
|
+
auto message = arg.find("message")->second.asString();
|
|
178
|
+
|
|
179
|
+
auto codedError = makeCodedError(
|
|
180
|
+
rt,
|
|
181
|
+
jsi::String::createFromUtf8(rt, errorCode),
|
|
182
|
+
jsi::String::createFromUtf8(rt, message)
|
|
183
|
+
);
|
|
184
|
+
|
|
185
|
+
jsFunction.call(
|
|
186
|
+
rt,
|
|
187
|
+
(const jsi::Value *) &codedError,
|
|
188
|
+
(size_t) 1
|
|
189
|
+
);
|
|
190
|
+
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
jsi::Value convertedArg = jsi::valueFromDynamic(rt, arg);
|
|
195
|
+
auto enhancedArg = decorateValueForDynamicExtension(rt, convertedArg);
|
|
196
|
+
if (enhancedArg) {
|
|
197
|
+
convertedArg = std::move(*enhancedArg);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
jsFunction.call(
|
|
201
|
+
rt,
|
|
202
|
+
(const jsi::Value *) &convertedArg,
|
|
203
|
+
(size_t) 1
|
|
204
|
+
);
|
|
205
|
+
},
|
|
206
|
+
result->cthis()->consume()
|
|
207
|
+
);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
void JavaCallback::invokeSharedRef(jni::alias_ref<SharedRef::javaobject> result) {
|
|
211
|
+
invokeJSFunction<jni::global_ref<SharedRef::javaobject>>(
|
|
212
|
+
[](
|
|
213
|
+
jsi::Runtime &rt,
|
|
214
|
+
jsi::Function &jsFunction,
|
|
215
|
+
jni::global_ref<SharedRef::javaobject> arg,
|
|
216
|
+
bool isRejectCallback
|
|
217
|
+
) {
|
|
218
|
+
const auto jsiContext = getJSIContext(rt);
|
|
219
|
+
auto native = jni::make_local(arg);
|
|
220
|
+
|
|
221
|
+
auto jsClass = jsiContext->getJavascriptClass(native->getClass());
|
|
222
|
+
auto jsObject = jsClass
|
|
223
|
+
->cthis()
|
|
224
|
+
->get()
|
|
225
|
+
->asFunction(rt)
|
|
226
|
+
.callAsConstructor(rt)
|
|
227
|
+
.asObject(rt);
|
|
228
|
+
|
|
229
|
+
auto objSharedPtr = std::make_shared<jsi::Object>(std::move(jsObject));
|
|
230
|
+
auto jsObjectInstance = JavaScriptObject::newInstance(
|
|
231
|
+
jsiContext,
|
|
232
|
+
jsiContext->runtimeHolder,
|
|
233
|
+
objSharedPtr
|
|
234
|
+
);
|
|
235
|
+
jni::local_ref<JavaScriptObject::javaobject> jsRef = jni::make_local(
|
|
236
|
+
jsObjectInstance
|
|
237
|
+
);
|
|
238
|
+
jsiContext->registerSharedObject(native, jsRef);
|
|
239
|
+
|
|
240
|
+
auto ret = jsi::Value(rt, *objSharedPtr);
|
|
241
|
+
|
|
242
|
+
jsFunction.call(
|
|
243
|
+
rt,
|
|
244
|
+
(const jsi::Value *) &ret,
|
|
245
|
+
(size_t) 1
|
|
246
|
+
);
|
|
247
|
+
},
|
|
248
|
+
jni::make_global(result)
|
|
249
|
+
);
|
|
64
250
|
}
|
|
65
251
|
} // namespace expo
|
|
@@ -4,17 +4,29 @@
|
|
|
4
4
|
|
|
5
5
|
#include "JNIDeallocator.h"
|
|
6
6
|
|
|
7
|
+
#include <jsi/jsi.h>
|
|
7
8
|
#include <fbjni/fbjni.h>
|
|
8
9
|
#include <folly/dynamic.h>
|
|
10
|
+
#include <variant>
|
|
9
11
|
|
|
10
12
|
#include <react/jni/WritableNativeArray.h>
|
|
11
13
|
#include <react/jni/WritableNativeMap.h>
|
|
14
|
+
#include <fbjni/detail/CoreClasses.h>
|
|
15
|
+
#include <ReactCommon/CallInvoker.h>
|
|
12
16
|
|
|
13
17
|
namespace jni = facebook::jni;
|
|
14
18
|
namespace react = facebook::react;
|
|
19
|
+
namespace jsi = facebook::jsi;
|
|
15
20
|
|
|
16
21
|
namespace expo {
|
|
17
|
-
|
|
22
|
+
|
|
23
|
+
struct SharedRef : public jni::JavaClass<SharedRef> {
|
|
24
|
+
static constexpr const char *kJavaDescriptor = "Lexpo/modules/kotlin/sharedobjects/SharedRef;";
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
class JSIContext;
|
|
28
|
+
|
|
29
|
+
typedef std::variant<folly::dynamic, jni::global_ref<SharedRef::javaobject>> CallbackArg;
|
|
18
30
|
|
|
19
31
|
class JavaCallback : public jni::HybridClass<JavaCallback, Destructible> {
|
|
20
32
|
public:
|
|
@@ -22,20 +34,26 @@ public:
|
|
|
22
34
|
kJavaDescriptor = "Lexpo/modules/kotlin/jni/JavaCallback;";
|
|
23
35
|
static auto constexpr TAG = "JavaCallback";
|
|
24
36
|
|
|
25
|
-
|
|
37
|
+
struct CallbackContext {
|
|
38
|
+
jsi::Runtime &rt;
|
|
39
|
+
std::shared_ptr<react::CallInvoker> jsCallInvokerHolder;
|
|
40
|
+
std::optional<jsi::Function> jsFunctionHolder;
|
|
41
|
+
bool isRejectCallback;
|
|
42
|
+
};
|
|
26
43
|
|
|
27
44
|
static void registerNatives();
|
|
28
45
|
|
|
29
46
|
static jni::local_ref<JavaCallback::javaobject> newInstance(
|
|
30
|
-
|
|
31
|
-
|
|
47
|
+
JSIContext *jsiContext,
|
|
48
|
+
std::shared_ptr<CallbackContext> callbackContext
|
|
32
49
|
);
|
|
33
50
|
|
|
34
51
|
private:
|
|
35
|
-
|
|
52
|
+
std::shared_ptr<CallbackContext> callbackContext;
|
|
36
53
|
|
|
54
|
+
friend HybridBase;
|
|
37
55
|
|
|
38
|
-
JavaCallback(
|
|
56
|
+
JavaCallback(std::shared_ptr<CallbackContext> callback);
|
|
39
57
|
|
|
40
58
|
void invoke();
|
|
41
59
|
|
|
@@ -53,6 +71,23 @@ private:
|
|
|
53
71
|
|
|
54
72
|
void invokeMap(jni::alias_ref<react::WritableNativeMap::javaobject> result);
|
|
55
73
|
|
|
56
|
-
|
|
74
|
+
void invokeSharedRef(jni::alias_ref<SharedRef::javaobject> result);
|
|
75
|
+
|
|
76
|
+
template<class T>
|
|
77
|
+
using ArgsConverter = std::function<void(
|
|
78
|
+
jsi::Runtime &rt,
|
|
79
|
+
jsi::Function &jsFunction,
|
|
80
|
+
T arg,
|
|
81
|
+
bool isRejectCallback
|
|
82
|
+
)>;
|
|
83
|
+
|
|
84
|
+
template<class T>
|
|
85
|
+
inline void invokeJSFunction(
|
|
86
|
+
ArgsConverter<T> argsConverter,
|
|
87
|
+
T arg
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
template<class T>
|
|
91
|
+
inline void invokeJSFunction(T arg);
|
|
57
92
|
};
|
|
58
93
|
} // namespace expo
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
#include "types/JNIToJSIConverter.h"
|
|
5
5
|
#include "types/AnyType.h"
|
|
6
6
|
|
|
7
|
+
#include "JavaScriptObject.h"
|
|
8
|
+
|
|
7
9
|
namespace expo {
|
|
8
10
|
|
|
9
11
|
void JavaScriptFunction::registerNatives() {
|
|
@@ -31,11 +33,11 @@ std::shared_ptr<jsi::Function> JavaScriptFunction::get() {
|
|
|
31
33
|
}
|
|
32
34
|
|
|
33
35
|
jobject JavaScriptFunction::invoke(
|
|
36
|
+
jni::alias_ref<JavaScriptObject::javaobject> jsThis,
|
|
34
37
|
jni::alias_ref<jni::JArrayClass<jni::JObject>> args,
|
|
35
38
|
jni::alias_ref<ExpectedType::javaobject> expectedReturnType
|
|
36
39
|
) {
|
|
37
40
|
auto &rt = runtimeHolder.getJSRuntime();
|
|
38
|
-
auto moduleRegistry = runtimeHolder.getModuleRegistry();
|
|
39
41
|
JNIEnv *env = jni::Environment::current();
|
|
40
42
|
|
|
41
43
|
size_t size = args->size();
|
|
@@ -44,18 +46,30 @@ jobject JavaScriptFunction::invoke(
|
|
|
44
46
|
|
|
45
47
|
for (size_t i = 0; i < size; i++) {
|
|
46
48
|
jni::local_ref<jni::JObject> arg = args->getElement(i);
|
|
47
|
-
convertedArgs.push_back(convert(
|
|
49
|
+
convertedArgs.push_back(convert(env, rt, std::move(arg)));
|
|
48
50
|
}
|
|
49
51
|
|
|
50
52
|
// TODO(@lukmccall): add better error handling
|
|
51
|
-
jsi::Value result =
|
|
53
|
+
jsi::Value result = jsThis == nullptr ?
|
|
54
|
+
jsFunction->call(
|
|
55
|
+
rt,
|
|
56
|
+
(const jsi::Value *) convertedArgs.data(),
|
|
57
|
+
size
|
|
58
|
+
) :
|
|
59
|
+
jsFunction->callWithThis(
|
|
60
|
+
rt,
|
|
61
|
+
*(jsThis->cthis()->get()),
|
|
62
|
+
(const jsi::Value *) convertedArgs.data(),
|
|
63
|
+
size
|
|
64
|
+
);
|
|
65
|
+
|
|
52
66
|
auto converter = AnyType(jni::make_local(expectedReturnType)).converter;
|
|
53
|
-
auto convertedResult = converter->convert(rt, env,
|
|
67
|
+
auto convertedResult = converter->convert(rt, env, result);
|
|
54
68
|
return convertedResult;
|
|
55
69
|
}
|
|
56
70
|
|
|
57
71
|
jni::local_ref<JavaScriptFunction::javaobject> JavaScriptFunction::newInstance(
|
|
58
|
-
|
|
72
|
+
JSIContext *jsiContext,
|
|
59
73
|
std::weak_ptr<JavaScriptRuntime> runtime,
|
|
60
74
|
std::shared_ptr<jsi::Function> jsFunction
|
|
61
75
|
) {
|
|
@@ -63,7 +77,7 @@ jni::local_ref<JavaScriptFunction::javaobject> JavaScriptFunction::newInstance(
|
|
|
63
77
|
std::move(runtime),
|
|
64
78
|
std::move(jsFunction)
|
|
65
79
|
);
|
|
66
|
-
|
|
80
|
+
jsiContext->jniDeallocator->addReference(function);
|
|
67
81
|
return function;
|
|
68
82
|
}
|
|
69
83
|
} // namespace expo
|
|
@@ -15,6 +15,8 @@ namespace jsi = facebook::jsi;
|
|
|
15
15
|
|
|
16
16
|
namespace expo {
|
|
17
17
|
|
|
18
|
+
class JavaScriptObject;
|
|
19
|
+
|
|
18
20
|
/**
|
|
19
21
|
* Represents any JavaScript function. Its purpose is to expose the `jsi::Function` API back to Kotlin.
|
|
20
22
|
*/
|
|
@@ -27,7 +29,7 @@ public:
|
|
|
27
29
|
static void registerNatives();
|
|
28
30
|
|
|
29
31
|
static jni::local_ref<JavaScriptFunction::javaobject> newInstance(
|
|
30
|
-
|
|
32
|
+
JSIContext *jsiContext,
|
|
31
33
|
std::weak_ptr<JavaScriptRuntime> runtime,
|
|
32
34
|
std::shared_ptr<jsi::Function> jsFunction
|
|
33
35
|
);
|
|
@@ -52,6 +54,7 @@ private:
|
|
|
52
54
|
std::shared_ptr<jsi::Function> jsFunction;
|
|
53
55
|
|
|
54
56
|
jobject invoke(
|
|
57
|
+
jni::alias_ref<jni::HybridClass<JavaScriptObject, Destructible>::javaobject> jsThis,
|
|
55
58
|
jni::alias_ref<jni::JArrayClass<jni::JObject>> args,
|
|
56
59
|
jni::alias_ref<ExpectedType::javaobject> expectedReturnType
|
|
57
60
|
);
|