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,10 +1,14 @@
|
|
|
1
1
|
// Copyright © 2021-present 650 Industries, Inc. (aka Expo)
|
|
2
2
|
|
|
3
3
|
#include "JavaScriptModuleObject.h"
|
|
4
|
-
#include "
|
|
4
|
+
#include "JSIContext.h"
|
|
5
5
|
#include "JSIUtils.h"
|
|
6
|
+
#include "EventEmitter.h"
|
|
7
|
+
#include "SharedObject.h"
|
|
8
|
+
#include "NativeModule.h"
|
|
6
9
|
|
|
7
10
|
#include <folly/dynamic.h>
|
|
11
|
+
#include <jni.h>
|
|
8
12
|
#include <jsi/JSIDynamic.h>
|
|
9
13
|
#include <react/jni/ReadableNativeArray.h>
|
|
10
14
|
#include <fbjni/detail/Hybrid.h>
|
|
@@ -27,21 +31,19 @@ namespace expo {
|
|
|
27
31
|
|
|
28
32
|
void decorateObjectWithFunctions(
|
|
29
33
|
jsi::Runtime &runtime,
|
|
30
|
-
JSIInteropModuleRegistry *jsiInteropModuleRegistry,
|
|
31
34
|
jsi::Object *jsObject,
|
|
32
35
|
JavaScriptModuleObject *objectData) {
|
|
33
36
|
for (auto &[name, method]: objectData->methodsMetadata) {
|
|
34
37
|
jsObject->setProperty(
|
|
35
38
|
runtime,
|
|
36
39
|
jsi::String::createFromUtf8(runtime, name),
|
|
37
|
-
jsi::Value(runtime, *method
|
|
40
|
+
jsi::Value(runtime, *method->toJSFunction(runtime))
|
|
38
41
|
);
|
|
39
42
|
}
|
|
40
43
|
}
|
|
41
44
|
|
|
42
45
|
void decorateObjectWithProperties(
|
|
43
46
|
jsi::Runtime &runtime,
|
|
44
|
-
JSIInteropModuleRegistry *jsiInteropModuleRegistry,
|
|
45
47
|
jsi::Object *jsObject,
|
|
46
48
|
JavaScriptModuleObject *objectData) {
|
|
47
49
|
for (auto &[name, property]: objectData->properties) {
|
|
@@ -52,22 +54,19 @@ void decorateObjectWithProperties(
|
|
|
52
54
|
descriptor.setProperty(
|
|
53
55
|
runtime,
|
|
54
56
|
"get",
|
|
55
|
-
jsi::Value(runtime, *getter
|
|
56
|
-
jsiInteropModuleRegistry))
|
|
57
|
+
jsi::Value(runtime, *getter->toJSFunction(runtime))
|
|
57
58
|
);
|
|
58
59
|
descriptor.setProperty(
|
|
59
60
|
runtime,
|
|
60
61
|
"set",
|
|
61
|
-
jsi::Value(runtime, *setter
|
|
62
|
-
jsiInteropModuleRegistry))
|
|
62
|
+
jsi::Value(runtime, *setter->toJSFunction(runtime))
|
|
63
63
|
);
|
|
64
|
-
common::
|
|
64
|
+
common::defineProperty(runtime, jsObject, name.c_str(), std::move(descriptor));
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
void decorateObjectWithConstants(
|
|
69
69
|
jsi::Runtime &runtime,
|
|
70
|
-
JSIInteropModuleRegistry *jsiInteropModuleRegistry,
|
|
71
70
|
jsi::Object *jsObject,
|
|
72
71
|
JavaScriptModuleObject *objectData) {
|
|
73
72
|
for (const auto &[name, value]: objectData->constants) {
|
|
@@ -81,7 +80,7 @@ void decorateObjectWithConstants(
|
|
|
81
80
|
|
|
82
81
|
jni::local_ref<jni::HybridClass<JavaScriptModuleObject>::jhybriddata>
|
|
83
82
|
JavaScriptModuleObject::initHybrid(jni::alias_ref<jhybridobject> jThis) {
|
|
84
|
-
return makeCxxInstance(
|
|
83
|
+
return makeCxxInstance();
|
|
85
84
|
}
|
|
86
85
|
|
|
87
86
|
void JavaScriptModuleObject::registerNatives() {
|
|
@@ -97,7 +96,9 @@ void JavaScriptModuleObject::registerNatives() {
|
|
|
97
96
|
makeNativeMethod("registerClass",
|
|
98
97
|
JavaScriptModuleObject::registerClass),
|
|
99
98
|
makeNativeMethod("registerViewPrototype",
|
|
100
|
-
JavaScriptModuleObject::registerViewPrototype)
|
|
99
|
+
JavaScriptModuleObject::registerViewPrototype),
|
|
100
|
+
makeNativeMethod("emitEvent",
|
|
101
|
+
JavaScriptModuleObject::emitEvent)
|
|
101
102
|
});
|
|
102
103
|
}
|
|
103
104
|
|
|
@@ -106,30 +107,33 @@ std::shared_ptr<jsi::Object> JavaScriptModuleObject::getJSIObject(jsi::Runtime &
|
|
|
106
107
|
return object;
|
|
107
108
|
}
|
|
108
109
|
|
|
109
|
-
auto moduleObject = std::make_shared<jsi::Object>(runtime);
|
|
110
|
+
auto moduleObject = std::make_shared<jsi::Object>(NativeModule::createInstance(runtime));
|
|
110
111
|
|
|
112
|
+
decorate(runtime, moduleObject.get());
|
|
113
|
+
|
|
114
|
+
jsiObject = moduleObject;
|
|
115
|
+
return moduleObject;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
void JavaScriptModuleObject::decorate(jsi::Runtime &runtime, jsi::Object *moduleObject) {
|
|
111
119
|
decorateObjectWithConstants(
|
|
112
120
|
runtime,
|
|
113
|
-
|
|
114
|
-
moduleObject.get(),
|
|
121
|
+
moduleObject,
|
|
115
122
|
this
|
|
116
123
|
);
|
|
117
124
|
decorateObjectWithProperties(
|
|
118
125
|
runtime,
|
|
119
|
-
|
|
120
|
-
moduleObject.get(),
|
|
126
|
+
moduleObject,
|
|
121
127
|
this
|
|
122
128
|
);
|
|
123
129
|
decorateObjectWithFunctions(
|
|
124
130
|
runtime,
|
|
125
|
-
|
|
126
|
-
moduleObject.get(),
|
|
131
|
+
moduleObject,
|
|
127
132
|
this
|
|
128
133
|
);
|
|
129
134
|
|
|
130
135
|
if (viewPrototype) {
|
|
131
136
|
auto viewPrototypeObject = viewPrototype->cthis();
|
|
132
|
-
viewPrototypeObject->jsiInteropModuleRegistry = jsiInteropModuleRegistry;
|
|
133
137
|
auto viewPrototypeJSIObject = viewPrototypeObject->getJSIObject(runtime);
|
|
134
138
|
moduleObject->setProperty(
|
|
135
139
|
runtime,
|
|
@@ -139,39 +143,27 @@ std::shared_ptr<jsi::Object> JavaScriptModuleObject::getJSIObject(jsi::Runtime &
|
|
|
139
143
|
}
|
|
140
144
|
|
|
141
145
|
for (auto &[name, classInfo]: classes) {
|
|
142
|
-
auto &[classRef, constructor] = classInfo;
|
|
146
|
+
auto &[classRef, constructor, ownerClass] = classInfo;
|
|
143
147
|
auto classObject = classRef->cthis();
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
std::string nativeConstructorKey("__native_constructor__");
|
|
147
|
-
|
|
148
|
-
// Create a string buffer of the source code to evaluate.
|
|
149
|
-
std::stringstream source;
|
|
150
|
-
source << "(function " << name << "(...args) { this." << nativeConstructorKey
|
|
151
|
-
<< "(...args); return this; })";
|
|
152
|
-
std::shared_ptr<jsi::StringBuffer> sourceBuffer = std::make_shared<jsi::StringBuffer>(
|
|
153
|
-
source.str());
|
|
154
|
-
|
|
155
|
-
// Evaluate the code and obtain returned value (the constructor function).
|
|
156
|
-
jsi::Object klass = runtime.evaluateJavaScript(sourceBuffer, "").asObject(runtime);
|
|
157
|
-
|
|
158
|
-
// Set the native constructor in the prototype.
|
|
159
|
-
jsi::Object prototype = klass.getPropertyAsObject(runtime, "prototype");
|
|
160
|
-
jsi::PropNameID nativeConstructorPropId = jsi::PropNameID::forAscii(runtime,
|
|
161
|
-
nativeConstructorKey);
|
|
162
|
-
jsi::Function nativeConstructor = jsi::Function::createFromHostFunction(
|
|
148
|
+
auto weakConstructor = std::weak_ptr(constructor);
|
|
149
|
+
auto klass = SharedObject::createClass(
|
|
163
150
|
runtime,
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
0,
|
|
167
|
-
[classObject, &constructor = constructor, jsiInteropModuleRegistry = jsiInteropModuleRegistry](
|
|
151
|
+
name.c_str(),
|
|
152
|
+
[classObject, weakConstructor = std::move(weakConstructor)](
|
|
168
153
|
jsi::Runtime &runtime,
|
|
169
154
|
const jsi::Value &thisValue,
|
|
170
155
|
const jsi::Value *args,
|
|
171
156
|
size_t count
|
|
172
157
|
) -> jsi::Value {
|
|
158
|
+
// We need to check if the constructor is still alive.
|
|
159
|
+
// If not we can just ignore the call. We're destroying the module.
|
|
160
|
+
auto ctr = weakConstructor.lock();
|
|
161
|
+
if (ctr == nullptr) {
|
|
162
|
+
return jsi::Value::undefined();
|
|
163
|
+
}
|
|
164
|
+
|
|
173
165
|
auto thisObject = std::make_shared<jsi::Object>(thisValue.asObject(runtime));
|
|
174
|
-
decorateObjectWithProperties(runtime,
|
|
166
|
+
decorateObjectWithProperties(runtime, thisObject.get(),
|
|
175
167
|
classObject);
|
|
176
168
|
try {
|
|
177
169
|
JNIEnv *env = jni::Environment::current();
|
|
@@ -181,16 +173,15 @@ std::shared_ptr<jsi::Object> JavaScriptModuleObject::getJSIObject(jsi::Runtime &
|
|
|
181
173
|
* all LocalReferences are deleted.
|
|
182
174
|
*/
|
|
183
175
|
jni::JniLocalScope scope(env, (int) count);
|
|
184
|
-
auto result =
|
|
176
|
+
auto result = ctr->callJNISync(
|
|
185
177
|
env,
|
|
186
178
|
runtime,
|
|
187
|
-
jsiInteropModuleRegistry,
|
|
188
179
|
thisValue,
|
|
189
180
|
args,
|
|
190
181
|
count
|
|
191
182
|
);
|
|
192
183
|
if (result == nullptr) {
|
|
193
|
-
return jsi::Value
|
|
184
|
+
return jsi::Value(runtime, thisValue);
|
|
194
185
|
}
|
|
195
186
|
jobject unpackedResult = result.get();
|
|
196
187
|
jclass resultClass = env->GetObjectClass(unpackedResult);
|
|
@@ -199,41 +190,52 @@ std::shared_ptr<jsi::Object> JavaScriptModuleObject::getJSIObject(jsi::Runtime &
|
|
|
199
190
|
JavaReferencesCache::instance()->getJClass(
|
|
200
191
|
"expo/modules/kotlin/sharedobjects/SharedObject").clazz
|
|
201
192
|
)) {
|
|
193
|
+
JSIContext *jsiContext = getJSIContext(runtime);
|
|
202
194
|
auto jsThisObject = JavaScriptObject::newInstance(
|
|
203
|
-
|
|
204
|
-
|
|
195
|
+
jsiContext,
|
|
196
|
+
jsiContext->runtimeHolder,
|
|
205
197
|
thisObject
|
|
206
198
|
);
|
|
207
|
-
|
|
199
|
+
jsiContext->registerSharedObject(result, jsThisObject);
|
|
208
200
|
}
|
|
201
|
+
return jsi::Value(runtime, thisValue);
|
|
209
202
|
} catch (jni::JniException &jniException) {
|
|
210
203
|
rethrowAsCodedError(runtime, jniException);
|
|
211
204
|
}
|
|
212
|
-
|
|
213
|
-
|
|
205
|
+
}
|
|
206
|
+
);
|
|
214
207
|
|
|
215
|
-
auto
|
|
216
|
-
descriptor.setProperty(runtime, "value", jsi::Value(runtime, nativeConstructor));
|
|
208
|
+
auto klassSharedPtr = std::make_shared<jsi::Function>(std::move(klass));
|
|
217
209
|
|
|
218
|
-
|
|
219
|
-
|
|
210
|
+
JSIContext *jsiContext = getJSIContext(runtime);
|
|
211
|
+
|
|
212
|
+
auto jsThisObject = JavaScriptObject::newInstance(
|
|
213
|
+
jsiContext,
|
|
214
|
+
jsiContext->runtimeHolder,
|
|
215
|
+
klassSharedPtr
|
|
216
|
+
);
|
|
217
|
+
|
|
218
|
+
if (ownerClass != nullptr) {
|
|
219
|
+
jsiContext->registerClass(jni::make_local(ownerClass), jsThisObject);
|
|
220
|
+
}
|
|
220
221
|
|
|
221
222
|
moduleObject->setProperty(
|
|
222
223
|
runtime,
|
|
223
224
|
jsi::String::createFromUtf8(runtime, name),
|
|
224
|
-
jsi::Value(runtime,
|
|
225
|
+
jsi::Value(runtime, *klassSharedPtr.get())
|
|
225
226
|
);
|
|
226
227
|
|
|
228
|
+
jsi::PropNameID prototypePropNameId = jsi::PropNameID::forAscii(runtime, "prototype", 9);
|
|
229
|
+
jsi::Object klassPrototype = klassSharedPtr
|
|
230
|
+
->getProperty(runtime, prototypePropNameId)
|
|
231
|
+
.asObject(runtime);
|
|
232
|
+
|
|
227
233
|
decorateObjectWithFunctions(
|
|
228
234
|
runtime,
|
|
229
|
-
|
|
230
|
-
&prototype,
|
|
235
|
+
&klassPrototype,
|
|
231
236
|
classObject
|
|
232
237
|
);
|
|
233
238
|
}
|
|
234
|
-
|
|
235
|
-
jsiObject = moduleObject;
|
|
236
|
-
return moduleObject;
|
|
237
239
|
}
|
|
238
240
|
|
|
239
241
|
void JavaScriptModuleObject::exportConstants(
|
|
@@ -254,15 +256,14 @@ void JavaScriptModuleObject::registerSyncFunction(
|
|
|
254
256
|
jni::alias_ref<JNIFunctionBody::javaobject> body
|
|
255
257
|
) {
|
|
256
258
|
std::string cName = name->toStdString();
|
|
257
|
-
|
|
258
|
-
methodsMetadata.try_emplace(
|
|
259
|
+
auto methodMetadata = std::make_shared<MethodMetadata>(
|
|
259
260
|
cName,
|
|
260
|
-
|
|
261
|
-
takesOwner,
|
|
261
|
+
takesOwner & 0x1, // We're unsure if takesOwner can be greater than 1, so we're using bitwise AND to ensure it's 0 or 1.
|
|
262
262
|
false,
|
|
263
263
|
jni::make_local(expectedArgTypes),
|
|
264
264
|
jni::make_global(body)
|
|
265
265
|
);
|
|
266
|
+
methodsMetadata.insert_or_assign(cName, std::move(methodMetadata));
|
|
266
267
|
}
|
|
267
268
|
|
|
268
269
|
void JavaScriptModuleObject::registerAsyncFunction(
|
|
@@ -272,38 +273,42 @@ void JavaScriptModuleObject::registerAsyncFunction(
|
|
|
272
273
|
jni::alias_ref<JNIAsyncFunctionBody::javaobject> body
|
|
273
274
|
) {
|
|
274
275
|
std::string cName = name->toStdString();
|
|
275
|
-
|
|
276
|
-
methodsMetadata.try_emplace(
|
|
276
|
+
auto methodMetadata = std::make_shared<MethodMetadata>(
|
|
277
277
|
cName,
|
|
278
|
-
|
|
279
|
-
takesOwner,
|
|
278
|
+
takesOwner & 0x1, // We're unsure if takesOwner can be greater than 1, so we're using bitwise AND to ensure it's 0 or 1.
|
|
280
279
|
true,
|
|
281
280
|
jni::make_local(expectedArgTypes),
|
|
282
281
|
jni::make_global(body)
|
|
283
282
|
);
|
|
283
|
+
methodsMetadata.insert_or_assign(cName, std::move(methodMetadata));
|
|
284
284
|
}
|
|
285
285
|
|
|
286
286
|
void JavaScriptModuleObject::registerClass(
|
|
287
287
|
jni::alias_ref<jstring> name,
|
|
288
288
|
jni::alias_ref<JavaScriptModuleObject::javaobject> classObject,
|
|
289
289
|
jboolean takesOwner,
|
|
290
|
+
jni::alias_ref<jclass> ownerClass,
|
|
290
291
|
jni::alias_ref<jni::JArrayClass<ExpectedType>> expectedArgTypes,
|
|
291
292
|
jni::alias_ref<JNIFunctionBody::javaobject> body
|
|
292
293
|
) {
|
|
293
294
|
std::string cName = name->toStdString();
|
|
294
|
-
|
|
295
|
+
auto constructor = std::make_shared<MethodMetadata>(
|
|
295
296
|
"constructor",
|
|
296
|
-
takesOwner,
|
|
297
|
+
takesOwner & 0x1, // We're unsure if takesOwner can be greater than 1, so we're using bitwise AND to ensure it's 0 or 1.
|
|
297
298
|
false,
|
|
298
299
|
jni::make_local(expectedArgTypes),
|
|
299
300
|
jni::make_global(body)
|
|
300
301
|
);
|
|
301
302
|
|
|
302
|
-
auto
|
|
303
|
+
auto classTuple = std::make_tuple(
|
|
304
|
+
jni::make_global(classObject),
|
|
305
|
+
std::move(constructor),
|
|
306
|
+
jni::make_global(ownerClass)
|
|
307
|
+
);
|
|
303
308
|
|
|
304
309
|
classes.try_emplace(
|
|
305
310
|
cName,
|
|
306
|
-
std::move(
|
|
311
|
+
std::move(classTuple)
|
|
307
312
|
);
|
|
308
313
|
}
|
|
309
314
|
|
|
@@ -324,17 +329,17 @@ void JavaScriptModuleObject::registerProperty(
|
|
|
324
329
|
) {
|
|
325
330
|
auto cName = name->toStdString();
|
|
326
331
|
|
|
327
|
-
auto getterMetadata = MethodMetadata(
|
|
332
|
+
auto getterMetadata = make_shared<MethodMetadata>(
|
|
328
333
|
cName,
|
|
329
|
-
getterTakesOwner,
|
|
334
|
+
getterTakesOwner & 0x1, // We're unsure if getterTakesOwner can be greater than 1, so we're using bitwise AND to ensure it's 0 or 1.
|
|
330
335
|
false,
|
|
331
336
|
jni::make_local(getterExpectedArgsTypes),
|
|
332
337
|
jni::make_global(getter)
|
|
333
338
|
);
|
|
334
339
|
|
|
335
|
-
auto setterMetadata = MethodMetadata(
|
|
340
|
+
auto setterMetadata = make_shared<MethodMetadata>(
|
|
336
341
|
cName,
|
|
337
|
-
setterTakesOwner,
|
|
342
|
+
setterTakesOwner & 0x1, // We're unsure if setterTakesOwner can be greater than 1, so we're using bitwise AND to ensure it's 0 or 1.
|
|
338
343
|
false,
|
|
339
344
|
jni::make_local(setterExpectedArgsTypes),
|
|
340
345
|
jni::make_global(setter)
|
|
@@ -345,10 +350,41 @@ void JavaScriptModuleObject::registerProperty(
|
|
|
345
350
|
std::move(setterMetadata)
|
|
346
351
|
);
|
|
347
352
|
|
|
348
|
-
properties.
|
|
353
|
+
properties.insert_or_assign(cName, std::move(functions));
|
|
349
354
|
}
|
|
350
355
|
|
|
351
|
-
JavaScriptModuleObject::
|
|
352
|
-
|
|
356
|
+
void JavaScriptModuleObject::emitEvent(
|
|
357
|
+
jni::alias_ref<jni::HybridClass<JSIContext>::javaobject> jsiContextRef,
|
|
358
|
+
jni::alias_ref<jstring> eventName,
|
|
359
|
+
jni::alias_ref<react::ReadableNativeMap::javaobject> eventBody
|
|
360
|
+
) {
|
|
361
|
+
const std::string name = eventName->toStdString();
|
|
362
|
+
folly::dynamic body;
|
|
363
|
+
if (eventBody) {
|
|
364
|
+
body = eventBody->cthis()->consume();
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
const JSIContext *jsiContext = jsiContextRef->cthis();
|
|
368
|
+
|
|
369
|
+
jsiContext->runtimeHolder->jsInvoker->invokeAsync([
|
|
370
|
+
jsiContext,
|
|
371
|
+
name = std::move(name),
|
|
372
|
+
body = std::move(body),
|
|
373
|
+
weakThis = jsiObject
|
|
374
|
+
]() {
|
|
375
|
+
std::shared_ptr<jsi::Object> jsThis = weakThis.lock();
|
|
376
|
+
if (!jsThis) {
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
// TODO(@lukmccall): refactor when jsInvoker recieves a runtime as a parameter
|
|
381
|
+
jsi::Runtime &rt = jsiContext->runtimeHolder->get();
|
|
382
|
+
|
|
383
|
+
jsi::Value convertedBody = jsi::valueFromDynamic(rt, body);
|
|
384
|
+
std::vector<jsi::Value> args;
|
|
385
|
+
args.emplace_back(std::move(convertedBody));
|
|
386
|
+
|
|
387
|
+
EventEmitter::emitEvent(rt, *jsThis, name, args);
|
|
388
|
+
});
|
|
353
389
|
}
|
|
354
390
|
} // namespace expo
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
#include <fbjni/fbjni.h>
|
|
6
6
|
#include <jsi/jsi.h>
|
|
7
7
|
#include <react/jni/ReadableNativeArray.h>
|
|
8
|
+
#include <react/jni/ReadableNativeMap.h>
|
|
8
9
|
#include <jni/JCallback.h>
|
|
9
10
|
|
|
10
11
|
#include <unordered_map>
|
|
@@ -18,27 +19,24 @@ namespace jsi = facebook::jsi;
|
|
|
18
19
|
namespace react = facebook::react;
|
|
19
20
|
|
|
20
21
|
namespace expo {
|
|
21
|
-
class
|
|
22
|
+
class JSIContext;
|
|
22
23
|
|
|
23
24
|
class JavaScriptModuleObject;
|
|
24
25
|
|
|
25
26
|
void decorateObjectWithFunctions(
|
|
26
27
|
jsi::Runtime &runtime,
|
|
27
|
-
JSIInteropModuleRegistry *jsiInteropModuleRegistry,
|
|
28
28
|
jsi::Object *jsObject,
|
|
29
29
|
JavaScriptModuleObject *objectData
|
|
30
30
|
);
|
|
31
31
|
|
|
32
32
|
void decorateObjectWithProperties(
|
|
33
33
|
jsi::Runtime &runtime,
|
|
34
|
-
JSIInteropModuleRegistry *jsiInteropModuleRegistry,
|
|
35
34
|
jsi::Object *jsObject,
|
|
36
35
|
JavaScriptModuleObject *objectData
|
|
37
36
|
);
|
|
38
37
|
|
|
39
38
|
void decorateObjectWithConstants(
|
|
40
39
|
jsi::Runtime &runtime,
|
|
41
|
-
JSIInteropModuleRegistry *jsiInteropModuleRegistry,
|
|
42
40
|
jsi::Object *jsObject,
|
|
43
41
|
JavaScriptModuleObject *objectData
|
|
44
42
|
);
|
|
@@ -59,11 +57,6 @@ public:
|
|
|
59
57
|
|
|
60
58
|
static void registerNatives();
|
|
61
59
|
|
|
62
|
-
/**
|
|
63
|
-
* Pointer to the module registry interop.
|
|
64
|
-
*/
|
|
65
|
-
JSIInteropModuleRegistry *jsiInteropModuleRegistry;
|
|
66
|
-
|
|
67
60
|
/**
|
|
68
61
|
* Returns a cached instance of jsi::Object representing this module.
|
|
69
62
|
* @param runtime
|
|
@@ -71,6 +64,11 @@ public:
|
|
|
71
64
|
*/
|
|
72
65
|
std::shared_ptr<jsi::Object> getJSIObject(jsi::Runtime &runtime);
|
|
73
66
|
|
|
67
|
+
/**
|
|
68
|
+
* Decorates the given object with properties and functions provided in the module definition.
|
|
69
|
+
*/
|
|
70
|
+
void decorate(jsi::Runtime &runtime, jsi::Object *moduleObject);
|
|
71
|
+
|
|
74
72
|
/**
|
|
75
73
|
* Exports constants that will be assigned to the underlying HostObject.
|
|
76
74
|
*/
|
|
@@ -102,6 +100,7 @@ public:
|
|
|
102
100
|
jni::alias_ref<jstring> name,
|
|
103
101
|
jni::alias_ref<JavaScriptModuleObject::javaobject> classObject,
|
|
104
102
|
jboolean takesOwner,
|
|
103
|
+
jni::alias_ref<jclass> ownerClass,
|
|
105
104
|
jni::alias_ref<jni::JArrayClass<ExpectedType>> expectedArgTypes,
|
|
106
105
|
jni::alias_ref<JNIFunctionBody::javaobject> body
|
|
107
106
|
);
|
|
@@ -127,29 +126,34 @@ public:
|
|
|
127
126
|
jni::alias_ref<JNIFunctionBody::javaobject> setter
|
|
128
127
|
);
|
|
129
128
|
|
|
130
|
-
|
|
131
|
-
|
|
129
|
+
/**
|
|
130
|
+
* Emits an event using cached jsi::Object with the given name and body.
|
|
131
|
+
* @param eventName
|
|
132
|
+
* @param eventBody
|
|
133
|
+
*/
|
|
134
|
+
void emitEvent(
|
|
135
|
+
jni::alias_ref<jni::HybridClass<JSIContext>::javaobject> jsiContextRef,
|
|
136
|
+
jni::alias_ref<jstring> eventName,
|
|
137
|
+
jni::alias_ref<react::ReadableNativeMap::javaobject> eventBody
|
|
138
|
+
);
|
|
132
139
|
|
|
133
140
|
private:
|
|
134
141
|
friend HybridBase;
|
|
135
142
|
|
|
136
143
|
friend void decorateObjectWithFunctions(
|
|
137
144
|
jsi::Runtime &runtime,
|
|
138
|
-
JSIInteropModuleRegistry *jsiInteropModuleRegistry,
|
|
139
145
|
jsi::Object *jsObject,
|
|
140
146
|
JavaScriptModuleObject *objectData
|
|
141
147
|
);
|
|
142
148
|
|
|
143
149
|
friend void decorateObjectWithProperties(
|
|
144
150
|
jsi::Runtime &runtime,
|
|
145
|
-
JSIInteropModuleRegistry *jsiInteropModuleRegistry,
|
|
146
151
|
jsi::Object *jsObject,
|
|
147
152
|
JavaScriptModuleObject *objectData
|
|
148
153
|
);
|
|
149
154
|
|
|
150
155
|
friend void decorateObjectWithConstants(
|
|
151
156
|
jsi::Runtime &runtime,
|
|
152
|
-
JSIInteropModuleRegistry *jsiInteropModuleRegistry,
|
|
153
157
|
jsi::Object *jsObject,
|
|
154
158
|
JavaScriptModuleObject *objectData
|
|
155
159
|
);
|
|
@@ -161,12 +165,11 @@ private:
|
|
|
161
165
|
* Doing that allows the runtime to deallocate jsi::Object if it's not needed anymore.
|
|
162
166
|
*/
|
|
163
167
|
std::weak_ptr<jsi::Object> jsiObject;
|
|
164
|
-
jni::global_ref<JavaScriptModuleObject::javaobject> javaPart_;
|
|
165
168
|
|
|
166
169
|
/**
|
|
167
170
|
* Metadata map that stores information about all available methods on this module.
|
|
168
171
|
*/
|
|
169
|
-
std::unordered_map<std::string, MethodMetadata
|
|
172
|
+
std::unordered_map<std::string, std::shared_ptr<MethodMetadata>> methodsMetadata;
|
|
170
173
|
|
|
171
174
|
/**
|
|
172
175
|
* A constants map.
|
|
@@ -177,11 +180,11 @@ private:
|
|
|
177
180
|
* A registry of properties
|
|
178
181
|
* The first MethodMetadata points to the getter and the second one to the setter.
|
|
179
182
|
*/
|
|
180
|
-
std::map<std::string, std::pair<MethodMetadata
|
|
183
|
+
std::map<std::string, std::pair<std::shared_ptr<MethodMetadata>, std::shared_ptr<MethodMetadata>>> properties;
|
|
181
184
|
|
|
182
185
|
std::map<
|
|
183
186
|
std::string,
|
|
184
|
-
std::
|
|
187
|
+
std::tuple<jni::global_ref<JavaScriptModuleObject::javaobject>, std::shared_ptr<MethodMetadata>, jni::global_ref<jclass>>
|
|
185
188
|
> classes;
|
|
186
189
|
|
|
187
190
|
jni::global_ref<JavaScriptModuleObject::javaobject> viewPrototype;
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
#include "JSITypeConverter.h"
|
|
9
9
|
#include "ObjectDeallocator.h"
|
|
10
10
|
#include "JavaReferencesCache.h"
|
|
11
|
-
#include "
|
|
11
|
+
#include "JSIContext.h"
|
|
12
12
|
|
|
13
13
|
namespace expo {
|
|
14
14
|
void JavaScriptObject::registerNatives() {
|
|
@@ -77,7 +77,7 @@ jni::local_ref<JavaScriptValue::javaobject> JavaScriptObject::jniGetProperty(
|
|
|
77
77
|
) {
|
|
78
78
|
auto result = std::make_shared<jsi::Value>(getProperty(name->toStdString()));
|
|
79
79
|
return JavaScriptValue::newInstance(
|
|
80
|
-
runtimeHolder.
|
|
80
|
+
runtimeHolder.getJSIContext(),
|
|
81
81
|
runtimeHolder,
|
|
82
82
|
result
|
|
83
83
|
);
|
|
@@ -113,7 +113,7 @@ jni::local_ref<jni::JArrayClass<jstring>> JavaScriptObject::jniGetPropertyNames(
|
|
|
113
113
|
|
|
114
114
|
jni::local_ref<jni::HybridClass<JavaScriptWeakObject, Destructible>::javaobject> JavaScriptObject::createWeak() {
|
|
115
115
|
return JavaScriptWeakObject::newInstance(
|
|
116
|
-
runtimeHolder.
|
|
116
|
+
runtimeHolder.getJSIContext(),
|
|
117
117
|
runtimeHolder,
|
|
118
118
|
get()
|
|
119
119
|
);
|
|
@@ -123,7 +123,7 @@ jni::local_ref<JavaScriptFunction::javaobject> JavaScriptObject::jniAsFunction()
|
|
|
123
123
|
auto &jsRuntime = runtimeHolder.getJSRuntime();
|
|
124
124
|
auto jsFuncion = std::make_shared<jsi::Function>(jsObject->asFunction(jsRuntime));
|
|
125
125
|
return JavaScriptFunction::newInstance(
|
|
126
|
-
runtimeHolder.
|
|
126
|
+
runtimeHolder.getJSIContext(),
|
|
127
127
|
runtimeHolder,
|
|
128
128
|
jsFuncion
|
|
129
129
|
);
|
|
@@ -158,12 +158,12 @@ jsi::Object JavaScriptObject::preparePropertyDescriptor(
|
|
|
158
158
|
}
|
|
159
159
|
|
|
160
160
|
jni::local_ref<JavaScriptObject::javaobject> JavaScriptObject::newInstance(
|
|
161
|
-
|
|
161
|
+
JSIContext *jsiContext,
|
|
162
162
|
std::weak_ptr<JavaScriptRuntime> runtime,
|
|
163
163
|
std::shared_ptr<jsi::Object> jsObject
|
|
164
164
|
) {
|
|
165
165
|
auto object = JavaScriptObject::newObjectCxxArgs(std::move(runtime), std::move(jsObject));
|
|
166
|
-
|
|
166
|
+
jsiContext->jniDeallocator->addReference(object);
|
|
167
167
|
return object;
|
|
168
168
|
}
|
|
169
169
|
|
|
@@ -184,8 +184,7 @@ void JavaScriptObject::defineNativeDeallocator(
|
|
|
184
184
|
);
|
|
185
185
|
globalRef->invoke(args);
|
|
186
186
|
globalRef.reset();
|
|
187
|
-
}
|
|
188
|
-
"__expo_shared_object_deallocator__"
|
|
187
|
+
}
|
|
189
188
|
);
|
|
190
189
|
}
|
|
191
190
|
} // namespace expo
|
|
@@ -37,7 +37,7 @@ public:
|
|
|
37
37
|
static void registerNatives();
|
|
38
38
|
|
|
39
39
|
static jni::local_ref<JavaScriptObject::javaobject> newInstance(
|
|
40
|
-
|
|
40
|
+
JSIContext *jsiContext,
|
|
41
41
|
std::weak_ptr<JavaScriptRuntime> runtime,
|
|
42
42
|
std::shared_ptr<jsi::Object> jsObject
|
|
43
43
|
);
|
|
@@ -52,6 +52,8 @@ public:
|
|
|
52
52
|
std::shared_ptr<jsi::Object> jsObject
|
|
53
53
|
);
|
|
54
54
|
|
|
55
|
+
virtual ~JavaScriptObject() = default;
|
|
56
|
+
|
|
55
57
|
std::shared_ptr<jsi::Object> get() override;
|
|
56
58
|
|
|
57
59
|
/**
|
|
@@ -137,7 +139,7 @@ private:
|
|
|
137
139
|
auto cName = name->toStdString();
|
|
138
140
|
jsi::Object descriptor = preparePropertyDescriptor(jsRuntime, options);
|
|
139
141
|
descriptor.setProperty(jsRuntime, "value", jsi_type_converter<T>::convert(jsRuntime, value));
|
|
140
|
-
common::
|
|
142
|
+
common::defineProperty(jsRuntime, jsObject.get(), cName.c_str(), std::move(descriptor));
|
|
141
143
|
}
|
|
142
144
|
};
|
|
143
145
|
} // namespace expo
|