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