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