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