expo-modules-core 56.0.4 → 56.0.6
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 +13 -0
- package/android/build.gradle +39 -40
- package/android/src/main/cpp/Exceptions.cpp +0 -3
- package/android/src/main/cpp/Exceptions.h +1 -4
- package/android/src/main/cpp/ExpoHeader.pch +0 -2
- package/android/src/main/cpp/ExpoModulesHostObject.cpp +1 -2
- package/android/src/main/cpp/ExpoModulesHostObject.h +1 -3
- package/android/src/main/cpp/JNIDeallocator.h +1 -1
- package/android/src/main/cpp/JNIFunctionBody.cpp +0 -1
- package/android/src/main/cpp/JNIFunctionBody.h +1 -2
- package/android/src/main/cpp/JNIInjector.cpp +1 -1
- package/android/src/main/cpp/JNIUtils.cpp +1 -1
- package/android/src/main/cpp/JNIUtils.h +1 -6
- package/android/src/main/cpp/JSIContext.cpp +1 -5
- package/android/src/main/cpp/JSIContext.h +1 -6
- package/android/src/main/cpp/JSITypeConverter.h +1 -5
- package/android/src/main/cpp/JSharedObject.h +1 -1
- package/android/src/main/cpp/JavaCallback.cpp +8 -13
- package/android/src/main/cpp/JavaCallback.h +1 -7
- package/android/src/main/cpp/JavaReferencesCache.cpp +1 -2
- package/android/src/main/cpp/JavaReferencesCache.h +1 -4
- package/android/src/main/cpp/JavaScriptArrayBuffer.h +1 -4
- package/android/src/main/cpp/JavaScriptFunction.h +1 -4
- package/android/src/main/cpp/JavaScriptModuleObject.h +1 -5
- package/android/src/main/cpp/JavaScriptObject.h +1 -5
- package/android/src/main/cpp/JavaScriptRuntime.cpp +0 -1
- package/android/src/main/cpp/JavaScriptRuntime.h +1 -2
- package/android/src/main/cpp/JavaScriptTypedArray.h +1 -4
- package/android/src/main/cpp/JavaScriptValue.h +1 -5
- package/android/src/main/cpp/JavaScriptWeakObject.h +1 -5
- package/android/src/main/cpp/MethodMetadata.cpp +1 -6
- package/android/src/main/cpp/MethodMetadata.h +1 -9
- package/android/src/main/cpp/NativeArrayBuffer.h +1 -4
- package/android/src/main/cpp/RuntimeHolder.h +1 -2
- package/android/src/main/cpp/ThreadSafeJNIGlobalRef.h +1 -1
- package/android/src/main/cpp/concepts/jni.h +4 -4
- package/android/src/main/cpp/concepts/jni_deref.h +1 -1
- package/android/src/main/cpp/concepts/jsi.h +1 -1
- package/android/src/main/cpp/decorators/JSClassesDecorator.h +1 -3
- package/android/src/main/cpp/decorators/JSConstantsDecorator.cpp +1 -4
- package/android/src/main/cpp/decorators/JSConstantsDecorator.h +1 -3
- package/android/src/main/cpp/decorators/JSDecorator.h +1 -2
- package/android/src/main/cpp/decorators/JSDecoratorsBridgingObject.h +1 -4
- package/android/src/main/cpp/decorators/JSFunctionsDecorator.cpp +1 -2
- package/android/src/main/cpp/decorators/JSFunctionsDecorator.h +1 -5
- package/android/src/main/cpp/decorators/JSObjectDecorator.h +1 -1
- package/android/src/main/cpp/decorators/JSPropertiesDecorator.cpp +1 -2
- package/android/src/main/cpp/decorators/JSPropertiesDecorator.h +1 -3
- package/android/src/main/cpp/fabric/AndroidExpoViewProps.h +1 -1
- package/android/src/main/cpp/fabric/AndroidExpoViewState.h +1 -3
- package/android/src/main/cpp/fabric/FabricComponentsRegistry.h +1 -1
- package/android/src/main/cpp/fabric/NativeStatePropsGetter.h +1 -2
- package/android/src/main/cpp/installers/MainRuntimeInstaller.h +1 -2
- package/android/src/main/cpp/installers/WorkletRuntimeInstaller.h +1 -2
- package/android/src/main/cpp/javaclasses/Collections.h +1 -1
- package/android/src/main/cpp/javaclasses/JSRunnable.h +1 -1
- package/android/src/main/cpp/types/AnyType.cpp +0 -1
- package/android/src/main/cpp/types/AnyType.h +1 -2
- package/android/src/main/cpp/types/ExpectedType.h +1 -1
- package/android/src/main/cpp/types/FrontendConverter.cpp +1 -1
- package/android/src/main/cpp/types/FrontendConverter.h +1 -3
- package/android/src/main/cpp/types/FrontendConverterProvider.h +1 -5
- package/android/src/main/cpp/types/JNIToJSIConverter.h +13 -16
- package/android/src/main/cpp/worklets/Serializable.h +2 -2
- package/android/src/main/cpp/worklets/Worklet.h +2 -5
- package/android/src/main/cpp/worklets/WorkletJSCallInvoker.h +2 -4
- package/android/src/main/cpp/worklets/WorkletNativeRuntime.h +2 -2
- package/android/src/main/java/expo/modules/kotlin/views/decorators/CSSProps.kt +1 -1
- package/ios/Core/AppContext.swift +26 -4
- package/ios/Core/Conversions.swift +20 -7
- package/ios/Core/DynamicTypes/AnyDynamicType.swift +20 -0
- package/ios/Core/DynamicTypes/DynamicArrayType.swift +12 -6
- package/ios/Core/DynamicTypes/DynamicDictionaryType.swift +12 -6
- package/ios/Core/DynamicTypes/DynamicRawType.swift +6 -2
- package/ios/Core/DynamicTypes/DynamicStringType.swift +5 -1
- package/ios/Core/Functions/SyncFunctionDefinition.swift +1 -1
- package/ios/Core/MainValueConverter.swift +8 -0
- package/ios/JS/EXReactSchedulerDispatch.h +28 -0
- package/ios/JS/EXReactSchedulerDispatch.mm +19 -0
- package/package.json +3 -3
- package/prebuilds/output/debug/xcframeworks/ExpoModulesCore.tar.gz +0 -0
- package/prebuilds/output/debug/xcframeworks/ExpoModulesWorklets.tar.gz +0 -0
- package/prebuilds/output/release/xcframeworks/ExpoModulesCore.tar.gz +0 -0
- package/prebuilds/output/release/xcframeworks/ExpoModulesWorklets.tar.gz +0 -0
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
#pragma once
|
|
4
4
|
|
|
5
|
+
#include "../ExpoHeader.pch"
|
|
5
6
|
#include <concepts>
|
|
6
|
-
#include <fbjni/fbjni.h>
|
|
7
7
|
#include "jni_deref.h"
|
|
8
8
|
|
|
9
9
|
namespace jni = facebook::jni;
|
|
@@ -13,9 +13,6 @@ namespace expo {
|
|
|
13
13
|
template<typename T>
|
|
14
14
|
concept HasCthis = requires(T &t) { t->cthis(); };
|
|
15
15
|
|
|
16
|
-
template<typename T>
|
|
17
|
-
concept HasToStdString = requires(T &t) { t->toStdString(); };
|
|
18
|
-
|
|
19
16
|
template<typename T>
|
|
20
17
|
concept HasValue = requires(T &t) { t->value(); };
|
|
21
18
|
|
|
@@ -25,6 +22,9 @@ concept HasGetRegion = requires(T &t, jsize s) { t->getRegion(s, s); };
|
|
|
25
22
|
template<typename T>
|
|
26
23
|
concept IsJBoolean = std::is_same_v<jni_deref_t<T>, jni::JBoolean>;
|
|
27
24
|
|
|
25
|
+
template<typename T>
|
|
26
|
+
concept IsJString = std::is_same_v<jni_deref_t<T>, jni::JString>;
|
|
27
|
+
|
|
28
28
|
template<typename T>
|
|
29
29
|
concept JniRef =
|
|
30
30
|
std::is_same_v<T, jni::local_ref<jni_deref_t<T>>> ||
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
// Copyright © 2021-present 650 Industries, Inc. (aka Expo)
|
|
2
2
|
|
|
3
|
+
#include "../ExpoHeader.pch"
|
|
3
4
|
#include "JSConstantsDecorator.h"
|
|
4
5
|
#include "../JavaScriptObject.h"
|
|
5
6
|
#include "JSIUtils.h"
|
|
6
|
-
#include "JSFunctionsDecorator.h"
|
|
7
7
|
#include "../JSIContext.h"
|
|
8
8
|
#include "../types/JNIToJSIConverter.h"
|
|
9
9
|
|
|
10
|
-
#include <jsi/jsi.h>
|
|
11
|
-
#include <jsi/JSIDynamic.h>
|
|
12
|
-
|
|
13
10
|
namespace jsi = facebook::jsi;
|
|
14
11
|
|
|
15
12
|
namespace expo {
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
// Copyright © 2021-present 650 Industries, Inc. (aka Expo)
|
|
2
2
|
|
|
3
|
+
#include "../ExpoHeader.pch"
|
|
3
4
|
#include "JSPropertiesDecorator.h"
|
|
4
5
|
#include "../JavaScriptObject.h"
|
|
5
6
|
#include "JSIUtils.h"
|
|
6
7
|
#include "JSFunctionsDecorator.h"
|
|
7
8
|
|
|
8
|
-
#include <jsi/jsi.h>
|
|
9
|
-
|
|
10
9
|
namespace jsi = facebook::jsi;
|
|
11
10
|
|
|
12
11
|
namespace expo {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// Copyright © 2021-present 650 Industries, Inc. (aka Expo)
|
|
2
2
|
|
|
3
|
+
#include "../ExpoHeader.pch"
|
|
3
4
|
#include "FrontendConverter.h"
|
|
4
5
|
#include "ExpectedType.h"
|
|
5
6
|
#include "FrontendConverterProvider.h"
|
|
@@ -17,7 +18,6 @@
|
|
|
17
18
|
|
|
18
19
|
#include "react/jni/ReadableNativeMap.h"
|
|
19
20
|
#include "react/jni/ReadableNativeArray.h"
|
|
20
|
-
#include <jsi/JSIDynamic.h>
|
|
21
21
|
|
|
22
22
|
#include <utility>
|
|
23
23
|
#include <algorithm>
|
|
@@ -2,15 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
#pragma once
|
|
4
4
|
|
|
5
|
+
#include "../ExpoHeader.pch"
|
|
5
6
|
#include "CppType.h"
|
|
6
7
|
#include "FrontendConverter.h"
|
|
7
8
|
#include "ExpectedType.h"
|
|
8
9
|
|
|
9
|
-
#include <fbjni/fbjni.h>
|
|
10
|
-
|
|
11
|
-
#include <memory>
|
|
12
|
-
#include <unordered_map>
|
|
13
|
-
|
|
14
10
|
namespace jni = facebook::jni;
|
|
15
11
|
|
|
16
12
|
namespace expo {
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
#pragma once
|
|
4
4
|
|
|
5
|
+
#include "../ExpoHeader.pch"
|
|
5
6
|
#include "../JSIContext.h"
|
|
6
7
|
#include "../JSharedObject.h"
|
|
7
8
|
#include "../JNIUtils.h"
|
|
8
9
|
#include "ObjectDeallocator.h"
|
|
9
|
-
#include "../javaclasses/Collections.h"
|
|
10
10
|
#include "../JavaScriptArrayBuffer.h"
|
|
11
11
|
#include "../NativeArrayBuffer.h"
|
|
12
12
|
#include "../concepts/jni_deref.h"
|
|
@@ -14,17 +14,8 @@
|
|
|
14
14
|
#include "../concepts/jsi.h"
|
|
15
15
|
#include "ReturnType.h"
|
|
16
16
|
|
|
17
|
-
#include <fbjni/fbjni.h>
|
|
18
|
-
#include <jsi/jsi.h>
|
|
19
|
-
#include <optional>
|
|
20
17
|
#include <concepts>
|
|
21
18
|
|
|
22
|
-
#include <react/jni/ReadableNativeMap.h>
|
|
23
|
-
#include <react/jni/ReadableNativeArray.h>
|
|
24
|
-
#include <react/jni/WritableNativeArray.h>
|
|
25
|
-
#include <react/jni/WritableNativeMap.h>
|
|
26
|
-
#include <jsi/JSIDynamic.h>
|
|
27
|
-
|
|
28
19
|
namespace jni = facebook::jni;
|
|
29
20
|
namespace jsi = facebook::jsi;
|
|
30
21
|
namespace react = facebook::react;
|
|
@@ -63,11 +54,17 @@ struct RawArray {
|
|
|
63
54
|
};
|
|
64
55
|
|
|
65
56
|
template<typename T>
|
|
66
|
-
inline auto unwrapJNIRef(
|
|
57
|
+
inline auto unwrapJNIRef(
|
|
58
|
+
JNIEnv *env,
|
|
59
|
+
T &&value
|
|
60
|
+
) {
|
|
67
61
|
if constexpr (HasCthis<T>) {
|
|
68
62
|
return value->cthis();
|
|
69
|
-
} else if constexpr (
|
|
70
|
-
|
|
63
|
+
} else if constexpr (IsJString<T>) {
|
|
64
|
+
const char *rawValue = env->GetStringUTFChars(value.get(), nullptr);
|
|
65
|
+
std::string result = rawValue;
|
|
66
|
+
env->ReleaseStringUTFChars(value.get(), rawValue);
|
|
67
|
+
return result;
|
|
71
68
|
} else if constexpr (IsJBoolean<T>) {
|
|
72
69
|
return static_cast<bool>(value->value());
|
|
73
70
|
} else if constexpr (HasValue<T>) {
|
|
@@ -287,13 +284,13 @@ concept SimpleConversion = requires(JNIEnv *env, jsi::Runtime &rt, T value) {
|
|
|
287
284
|
|
|
288
285
|
template<typename T>
|
|
289
286
|
jsi::Value convertToJS(JNIEnv *env, jsi::Runtime &rt, T &&value) {
|
|
290
|
-
using UnwrappedType = decltype(unwrapJNIRef(std::declval<T>()));
|
|
287
|
+
using UnwrappedType = decltype(unwrapJNIRef(env, std::declval<T>()));
|
|
291
288
|
using Converter = JNIToJSIConverter<UnwrappedType>;
|
|
292
289
|
|
|
293
290
|
if constexpr (SimpleConversion<Converter, UnwrappedType>) {
|
|
294
|
-
return Converter::convert(env, rt, unwrapJNIRef(std::forward<T>(value)));
|
|
291
|
+
return Converter::convert(env, rt, unwrapJNIRef(env, std::forward<T>(value)));
|
|
295
292
|
} else {
|
|
296
|
-
return Converter::convert(env, rt, unwrapJNIRef(value), value);
|
|
293
|
+
return Converter::convert(env, rt, unwrapJNIRef(env, value), value);
|
|
297
294
|
}
|
|
298
295
|
}
|
|
299
296
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
+
#include "../ExpoHeader.pch"
|
|
4
|
+
|
|
3
5
|
#if WORKLETS_ENABLED
|
|
4
6
|
|
|
5
7
|
#include "../JSIContext.h"
|
|
6
8
|
#include "../JNIDeallocator.h"
|
|
7
|
-
#include "WorkletNativeRuntime.h"
|
|
8
9
|
|
|
9
|
-
#include <fbjni/fbjni.h>
|
|
10
10
|
#include <worklets/SharedItems/Serializable.h>
|
|
11
11
|
|
|
12
12
|
namespace jni = facebook::jni;
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
+
#include "../ExpoHeader.pch"
|
|
4
|
+
|
|
3
5
|
#if WORKLETS_ENABLED
|
|
4
6
|
|
|
5
|
-
#include "../JSIContext.h"
|
|
6
|
-
#include "../JNIDeallocator.h"
|
|
7
7
|
#include "WorkletNativeRuntime.h"
|
|
8
8
|
#include "Serializable.h"
|
|
9
9
|
|
|
10
|
-
#include <fbjni/fbjni.h>
|
|
11
|
-
#include <worklets/SharedItems/Serializable.h>
|
|
12
|
-
|
|
13
10
|
namespace jni = facebook::jni;
|
|
14
11
|
|
|
15
12
|
namespace expo {
|
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
+
#include "../ExpoHeader.pch"
|
|
4
|
+
|
|
3
5
|
#if WORKLETS_ENABLED
|
|
4
6
|
|
|
5
7
|
#include <ReactCommon/CallInvoker.h>
|
|
6
|
-
#include <ReactCommon/RuntimeExecutor.h>
|
|
7
8
|
|
|
8
9
|
#include <worklets/WorkletRuntime/WorkletRuntime.h>
|
|
9
10
|
|
|
10
|
-
#include <memory>
|
|
11
|
-
|
|
12
|
-
|
|
13
11
|
namespace jsi = facebook::jsi;
|
|
14
12
|
namespace react = facebook::react;
|
|
15
13
|
|
|
@@ -429,12 +429,34 @@ public final class AppContext: NSObject, EXAppContextProtocol, @unchecked Sendab
|
|
|
429
429
|
// MARK: - Runtime
|
|
430
430
|
|
|
431
431
|
/**
|
|
432
|
-
Sets the JavaScript runtime from
|
|
433
|
-
|
|
432
|
+
Sets the JavaScript runtime from raw pointers. Called by `ExpoReactNativeFactory`
|
|
433
|
+
when React Native initializes the runtime. When `scheduler` and `dispatch`
|
|
434
|
+
are both provided, `JavaScriptRuntime.schedule(...)` / `.execute(...)` dispatch
|
|
435
|
+
onto the JS thread through them. When either is `nil`, the runtime falls back
|
|
436
|
+
to a synchronous no-op scheduler — callers can detect this via
|
|
437
|
+
`JavaScriptRuntime.supportsAsyncScheduling`.
|
|
438
|
+
|
|
439
|
+
`dispatch` is a raw pointer to a C function with signature
|
|
440
|
+
`void (*)(void *scheduler, int priority, void (^callback)())` — cast back
|
|
441
|
+
to the typed pointer inside `ExpoModulesJSI`. It's typed as `UnsafeRawPointer`
|
|
442
|
+
here rather than `@convention(c)` so the symbol can cross the Objective-C
|
|
443
|
+
bridge without needing a Swift-typed entry point.
|
|
434
444
|
*/
|
|
435
445
|
@objc
|
|
436
|
-
public func setRuntime(
|
|
437
|
-
|
|
446
|
+
public func setRuntime(
|
|
447
|
+
_ runtimePointer: UnsafeMutableRawPointer,
|
|
448
|
+
scheduler: UnsafeMutableRawPointer?,
|
|
449
|
+
dispatch: UnsafeRawPointer?
|
|
450
|
+
) {
|
|
451
|
+
if let scheduler, let dispatch {
|
|
452
|
+
_runtime = ExpoRuntime(
|
|
453
|
+
unsafePointer: runtimePointer,
|
|
454
|
+
scheduler: scheduler,
|
|
455
|
+
dispatch: dispatch
|
|
456
|
+
)
|
|
457
|
+
} else {
|
|
458
|
+
_runtime = ExpoRuntime(unsafePointer: runtimePointer)
|
|
459
|
+
}
|
|
438
460
|
}
|
|
439
461
|
|
|
440
462
|
@JavaScriptActor
|
|
@@ -138,13 +138,20 @@ public struct Conversions {
|
|
|
138
138
|
`unknownToJavaScriptValue` which handles type-erased values through `NSNumber`/`NSDictionary` matching.
|
|
139
139
|
*/
|
|
140
140
|
static func anyToJavaScriptValue<ValueType>(_ value: ValueType, appContext: AppContext) throws -> JavaScriptValue {
|
|
141
|
+
return try anyToJavaScriptValue(value, appContext: appContext, in: appContext.runtime)
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
Variant that creates JS values in the given `runtime`, used by the worklet conversion.
|
|
146
|
+
*/
|
|
147
|
+
static func anyToJavaScriptValue<ValueType>(_ value: ValueType, appContext: AppContext, in runtime: JavaScriptRuntime) throws -> JavaScriptValue {
|
|
141
148
|
if ValueType.self is AnyOptional.Type, Optional.isNil(value) {
|
|
142
149
|
return .null
|
|
143
150
|
}
|
|
144
151
|
if let value = value as? AnyArgument {
|
|
145
|
-
return try type(of: value).getDynamicType().castToJS(value, appContext: appContext)
|
|
152
|
+
return try type(of: value).getDynamicType().castToJS(value, appContext: appContext, in: runtime)
|
|
146
153
|
}
|
|
147
|
-
return try unknownToJavaScriptValue(value, appContext: appContext)
|
|
154
|
+
return try unknownToJavaScriptValue(value, appContext: appContext, in: runtime)
|
|
148
155
|
}
|
|
149
156
|
|
|
150
157
|
/**
|
|
@@ -153,12 +160,18 @@ public struct Conversions {
|
|
|
153
160
|
can call this without re-entering the `AnyArgument` check and causing infinite recursion.
|
|
154
161
|
*/
|
|
155
162
|
static func unknownToJavaScriptValue(_ value: Any, appContext: AppContext) throws -> JavaScriptValue {
|
|
163
|
+
return try unknownToJavaScriptValue(value, appContext: appContext, in: appContext.runtime)
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
Variant that creates JS values in the given `runtime` — used by the worklet conversion
|
|
168
|
+
path so produced dicts/arrays live in the calling runtime, not the main runtime.
|
|
169
|
+
*/
|
|
170
|
+
static func unknownToJavaScriptValue(_ value: Any, appContext: AppContext, in runtime: JavaScriptRuntime) throws -> JavaScriptValue {
|
|
156
171
|
if let value = value as? JavaScriptRepresentable {
|
|
157
|
-
return .representing(value: value, in:
|
|
172
|
+
return .representing(value: value, in: runtime)
|
|
158
173
|
}
|
|
159
174
|
|
|
160
|
-
let runtime = try appContext.runtime
|
|
161
|
-
|
|
162
175
|
switch value {
|
|
163
176
|
case is Void:
|
|
164
177
|
return .undefined
|
|
@@ -179,14 +192,14 @@ public struct Conversions {
|
|
|
179
192
|
case let array as NSArray:
|
|
180
193
|
let jsArray = runtime.createArray(length: array.count)
|
|
181
194
|
for (index, element) in array.enumerated() {
|
|
182
|
-
try jsArray.set(value: anyToJavaScriptValue(element, appContext: appContext), at: index)
|
|
195
|
+
try jsArray.set(value: anyToJavaScriptValue(element, appContext: appContext, in: runtime), at: index)
|
|
183
196
|
}
|
|
184
197
|
return jsArray.asValue()
|
|
185
198
|
case let dict as NSDictionary:
|
|
186
199
|
let jsObject = runtime.createObject()
|
|
187
200
|
for (key, element) in dict {
|
|
188
201
|
guard let key = key as? String else { continue }
|
|
189
|
-
jsObject.setProperty(key, value: try anyToJavaScriptValue(element, appContext: appContext))
|
|
202
|
+
jsObject.setProperty(key, value: try anyToJavaScriptValue(element, appContext: appContext, in: runtime))
|
|
190
203
|
}
|
|
191
204
|
return jsObject.asValue()
|
|
192
205
|
default:
|