react-native-reanimated 2.3.0-alpha.3 → 2.3.0-beta.4
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/Common/cpp/LayoutAnimations/LayoutAnimationsProxy.cpp +15 -8
- package/Common/cpp/NativeModules/NativeReanimatedModule.cpp +176 -154
- package/Common/cpp/NativeModules/NativeReanimatedModuleSpec.cpp +49 -33
- package/Common/cpp/Registries/EventHandlerRegistry.cpp +14 -7
- package/Common/cpp/Registries/MapperRegistry.cpp +24 -20
- package/Common/cpp/Registries/WorkletsCache.cpp +19 -9
- package/Common/cpp/SharedItems/FrozenObject.cpp +17 -8
- package/Common/cpp/SharedItems/MutableValue.cpp +38 -25
- package/Common/cpp/SharedItems/MutableValueSetterProxy.cpp +11 -7
- package/Common/cpp/SharedItems/RemoteObject.cpp +9 -5
- package/Common/cpp/SharedItems/ShareableValue.cpp +211 -160
- package/Common/cpp/Tools/FeaturesConfig.cpp +5 -0
- package/Common/cpp/Tools/JSIStoreValueUser.cpp +25 -6
- package/Common/cpp/Tools/Mapper.cpp +30 -30
- package/Common/cpp/Tools/RuntimeDecorator.cpp +124 -86
- package/Common/cpp/Tools/Scheduler.cpp +6 -5
- package/Common/cpp/Tools/WorkletEventHandler.cpp +4 -2
- package/Common/cpp/headers/LayoutAnimations/LayoutAnimationsProxy.h +12 -11
- package/Common/cpp/headers/NativeModules/NativeReanimatedModule.h +50 -31
- package/Common/cpp/headers/NativeModules/NativeReanimatedModuleSpec.h +34 -16
- package/Common/cpp/headers/Registries/EventHandlerRegistry.h +15 -8
- package/Common/cpp/headers/Registries/MapperRegistry.h +5 -4
- package/Common/cpp/headers/Registries/WorkletsCache.h +9 -7
- package/Common/cpp/headers/SharedItems/FrozenObject.h +19 -11
- package/Common/cpp/headers/SharedItems/HostFunctionHandler.h +8 -4
- package/Common/cpp/headers/SharedItems/MutableValue.h +23 -12
- package/Common/cpp/headers/SharedItems/MutableValueSetterProxy.h +12 -7
- package/Common/cpp/headers/SharedItems/RemoteObject.h +19 -8
- package/Common/cpp/headers/SharedItems/RuntimeManager.h +26 -25
- package/Common/cpp/headers/SharedItems/ShareableValue.h +32 -27
- package/Common/cpp/headers/SharedItems/SharedParent.h +10 -7
- package/Common/cpp/headers/SharedItems/ValueWrapper.h +95 -72
- package/Common/cpp/headers/SpecTools/ErrorHandler.h +18 -19
- package/Common/cpp/headers/Tools/FeaturesConfig.h +19 -0
- package/Common/cpp/headers/Tools/JSIStoreValueUser.h +13 -16
- package/Common/cpp/headers/Tools/Mapper.h +19 -16
- package/Common/cpp/headers/Tools/PlatformDepMethodsHolder.h +17 -7
- package/Common/cpp/headers/Tools/ReanimatedHiddenHeaders.h +7 -11
- package/Common/cpp/headers/Tools/RuntimeDecorator.h +36 -27
- package/Common/cpp/headers/Tools/Scheduler.h +30 -35
- package/Common/cpp/headers/Tools/WorkletEventHandler.h +11 -8
- package/Common/cpp/hidden_headers/Logger.h +14 -14
- package/Common/cpp/hidden_headers/LoggerInterface.h +8 -9
- package/Common/cpp/hidden_headers/SpeedChecker.h +7 -8
- package/README.md +1 -1
- package/RNReanimated.podspec +24 -6
- package/android/build.gradle +38 -29
- package/android/react-native-reanimated-63-hermes.aar +0 -0
- package/android/react-native-reanimated-63-jsc.aar +0 -0
- package/android/react-native-reanimated-64-hermes.aar +0 -0
- package/android/react-native-reanimated-64-jsc.aar +0 -0
- package/android/react-native-reanimated-65-hermes.aar +0 -0
- package/android/react-native-reanimated-65-jsc.aar +0 -0
- package/android/react-native-reanimated-66-hermes.aar +0 -0
- package/android/react-native-reanimated-66-jsc.aar +0 -0
- package/android/react-native-reanimated-67-hermes.aar +0 -0
- package/android/react-native-reanimated-67-jsc.aar +0 -0
- package/ios/LayoutReanimation/REAAnimationsManager.h +10 -8
- package/ios/LayoutReanimation/REAAnimationsManager.m +91 -87
- package/ios/LayoutReanimation/REASnapshot.h +2 -2
- package/ios/LayoutReanimation/REASnapshot.m +8 -7
- package/ios/LayoutReanimation/REAUIManager.h +4 -4
- package/ios/LayoutReanimation/REAUIManager.mm +116 -70
- package/ios/Nodes/REAAlwaysNode.m +14 -15
- package/ios/Nodes/REABezierNode.m +8 -7
- package/ios/Nodes/REABlockNode.m +1 -1
- package/ios/Nodes/REACallFuncNode.h +0 -1
- package/ios/Nodes/REACallFuncNode.m +10 -8
- package/ios/Nodes/REAClockNodes.m +22 -20
- package/ios/Nodes/REAConcatNode.h +0 -1
- package/ios/Nodes/REAConcatNode.m +2 -2
- package/ios/Nodes/REACondNode.m +7 -5
- package/ios/Nodes/READebugNode.m +5 -4
- package/ios/Nodes/REAEventNode.m +1 -1
- package/ios/Nodes/REAFunctionNode.h +0 -1
- package/ios/Nodes/REAFunctionNode.m +2 -2
- package/ios/Nodes/REAJSCallNode.m +4 -5
- package/ios/Nodes/REANode.h +3 -4
- package/ios/Nodes/REANode.m +9 -11
- package/ios/Nodes/REAOperatorNode.m +68 -67
- package/ios/Nodes/REAParamNode.h +1 -3
- package/ios/Nodes/REAParamNode.m +15 -17
- package/ios/Nodes/REAPropsNode.h +1 -3
- package/ios/Nodes/REAPropsNode.m +19 -22
- package/ios/Nodes/REASetNode.h +0 -1
- package/ios/Nodes/REASetNode.m +7 -5
- package/ios/Nodes/REAStyleNode.h +0 -1
- package/ios/Nodes/REAStyleNode.m +2 -4
- package/ios/Nodes/REATransformNode.h +0 -1
- package/ios/Nodes/REATransformNode.m +3 -5
- package/ios/Nodes/REAValueNode.m +5 -7
- package/ios/REAEventDispatcher.m +4 -4
- package/ios/REAModule.h +0 -2
- package/ios/REAModule.m +29 -38
- package/ios/REANodesManager.h +11 -19
- package/ios/REANodesManager.m +106 -130
- package/ios/REAUtils.h +5 -3
- package/ios/RNGestureHandlerStateManager.h +5 -0
- package/ios/Transitioning/RCTConvert+REATransition.m +45 -29
- package/ios/Transitioning/REAAllTransitions.h +2 -2
- package/ios/Transitioning/REAAllTransitions.m +14 -25
- package/ios/Transitioning/REATransition.h +8 -7
- package/ios/Transitioning/REATransition.m +19 -16
- package/ios/Transitioning/REATransitionAnimation.h +1 -1
- package/ios/Transitioning/REATransitionAnimation.m +2 -3
- package/ios/Transitioning/REATransitionManager.m +3 -3
- package/ios/native/NativeMethods.h +20 -5
- package/ios/native/NativeMethods.mm +14 -6
- package/ios/native/NativeProxy.h +4 -2
- package/ios/native/NativeProxy.mm +84 -63
- package/ios/native/REAIOSErrorHandler.h +13 -10
- package/ios/native/REAIOSErrorHandler.mm +19 -15
- package/ios/native/REAIOSLogger.h +8 -8
- package/ios/native/REAIOSLogger.mm +10 -6
- package/ios/native/REAIOSScheduler.h +5 -5
- package/ios/native/REAIOSScheduler.mm +17 -10
- package/ios/native/REAInitializer.h +5 -7
- package/ios/native/REAInitializer.mm +43 -31
- package/ios/native/UIResponder+Reanimated.mm +2 -2
- package/lib/Animated.js +9 -1
- package/lib/ConfigHelper.js +121 -138
- package/lib/ReanimatedEventEmitter.js +0 -1
- package/lib/ReanimatedModule.js +0 -1
- package/lib/ReanimatedModule.macos.js +0 -1
- package/lib/ReanimatedModule.native.js +5 -6
- package/lib/ReanimatedModule.windows.js +0 -1
- package/lib/ReanimatedModuleCompat.js +64 -35
- package/lib/createAnimatedComponent.js +468 -487
- package/lib/index.js +9 -1
- package/lib/reanimated2/NativeMethods.js +7 -12
- package/lib/reanimated2/NativeReanimated/NativeReanimated.js +37 -0
- package/lib/reanimated2/NativeReanimated/index.js +15 -0
- package/lib/reanimated2/PropAdapters.js +0 -1
- package/lib/reanimated2/UpdateProps.js +6 -7
- package/lib/reanimated2/ViewDescriptorsSet.js +4 -4
- package/lib/reanimated2/WorkletEventHandler.js +15 -13
- package/lib/reanimated2/animation/delay.js +8 -2
- package/lib/reanimated2/animation/spring.js +2 -0
- package/lib/reanimated2/animation/styleAnimation.js +7 -3
- package/lib/reanimated2/animation/util.js +25 -2
- package/lib/reanimated2/core.js +41 -17
- package/lib/reanimated2/globals.d.ts +21 -1
- package/lib/reanimated2/hook/useAnimatedRef.js +1 -1
- package/lib/reanimated2/hook/useAnimatedStyle.js +3 -3
- package/lib/reanimated2/index.js +1 -0
- package/lib/reanimated2/interpolation.js +95 -87
- package/lib/reanimated2/js-reanimated/JSReanimated.js +13 -10
- package/lib/reanimated2/js-reanimated/Mapper.js +4 -3
- package/lib/reanimated2/js-reanimated/MapperRegistry.js +3 -6
- package/lib/reanimated2/js-reanimated/MutableValue.js +0 -2
- package/lib/reanimated2/js-reanimated/index.js +10 -8
- package/lib/reanimated2/layoutReanimation/LayoutAnimationRepository.js +33 -2
- package/lib/reanimated2/layoutReanimation/animationBuilder/BaseAnimationBuilder.js +27 -124
- package/lib/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.js +125 -0
- package/lib/reanimated2/layoutReanimation/animationBuilder/index.js +1 -2
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Bounce.js +115 -45
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Default.js +7 -2
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Fade.js +21 -21
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Flip.js +25 -25
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js +19 -17
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.js +5 -5
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Roll.js +9 -9
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Rotate.js +17 -17
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Slide.js +19 -19
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Stretch.js +9 -9
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Zoom.js +33 -33
- package/lib/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.js +78 -0
- package/lib/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.js +128 -0
- package/lib/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.js +37 -0
- package/lib/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.js +41 -0
- package/lib/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.js +34 -0
- package/lib/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.js +46 -0
- package/lib/reanimated2/layoutReanimation/defaultTransitions/index.js +6 -0
- package/lib/reanimated2/layoutReanimation/index.js +1 -0
- package/lib/reanimated2/mock.js +3 -1
- package/lib/reanimated2/utils.js +9 -0
- package/lib/setAndForwardRef.js +14 -48
- package/libSo/fbjni/jni/arm64-v8a/libfbjni.so +0 -0
- package/libSo/fbjni/jni/armeabi-v7a/libfbjni.so +0 -0
- package/libSo/fbjni/jni/x86/libfbjni.so +0 -0
- package/libSo/fbjni/jni/x86_64/libfbjni.so +0 -0
- package/mock.js +1 -1
- package/package.json +28 -17
- package/plugin.js +220 -39
- package/react-native-reanimated.d.ts +542 -547
- package/src/Animated.js +9 -1
- package/src/{ConfigHelper.js → ConfigHelper.ts} +15 -7
- package/src/{ReanimatedEventEmitter.js → ReanimatedEventEmitter.ts} +0 -0
- package/src/{ReanimatedModule.js → ReanimatedModule.macos.ts} +0 -0
- package/src/{ReanimatedModule.native.js → ReanimatedModule.native.ts} +0 -0
- package/src/{ReanimatedModule.macos.js → ReanimatedModule.ts} +0 -0
- package/src/{ReanimatedModule.windows.js → ReanimatedModule.windows.ts} +0 -0
- package/src/ReanimatedModuleCompat.ts +51 -0
- package/src/{createAnimatedComponent.js → createAnimatedComponent.tsx} +285 -126
- package/src/reanimated2/NativeMethods.ts +34 -13
- package/src/reanimated2/NativeReanimated/NativeReanimated.ts +72 -0
- package/src/reanimated2/NativeReanimated/index.ts +18 -0
- package/src/reanimated2/PropAdapters.ts +0 -1
- package/src/reanimated2/UpdateProps.ts +31 -15
- package/src/reanimated2/ViewDescriptorsSet.ts +15 -12
- package/src/reanimated2/WorkletEventHandler.ts +41 -23
- package/src/reanimated2/animation/commonTypes.ts +4 -4
- package/src/reanimated2/animation/decay.ts +2 -2
- package/src/reanimated2/animation/delay.ts +11 -5
- package/src/reanimated2/animation/index.ts +7 -7
- package/src/reanimated2/animation/repeat.ts +4 -4
- package/src/reanimated2/animation/sequence.ts +2 -2
- package/src/reanimated2/animation/spring.ts +6 -5
- package/src/reanimated2/animation/styleAnimation.ts +27 -15
- package/src/reanimated2/animation/timing.ts +5 -5
- package/src/reanimated2/animation/util.ts +47 -8
- package/src/reanimated2/commonTypes.ts +3 -0
- package/src/reanimated2/core.ts +80 -34
- package/src/reanimated2/globals.d.ts +21 -1
- package/src/reanimated2/hook/useAnimatedGestureHandler.ts +1 -1
- package/src/reanimated2/hook/useAnimatedRef.ts +13 -15
- package/src/reanimated2/hook/useAnimatedScrollHandler.ts +3 -3
- package/src/reanimated2/hook/useAnimatedStyle.ts +7 -7
- package/src/reanimated2/hook/utils.ts +4 -3
- package/src/reanimated2/index.ts +1 -0
- package/src/reanimated2/interpolation.ts +170 -103
- package/src/reanimated2/js-reanimated/JSReanimated.ts +37 -23
- package/src/reanimated2/js-reanimated/Mapper.ts +22 -9
- package/src/reanimated2/js-reanimated/MapperRegistry.ts +22 -19
- package/src/reanimated2/js-reanimated/MutableValue.ts +11 -11
- package/src/reanimated2/js-reanimated/index.ts +31 -14
- package/src/reanimated2/layoutReanimation/LayoutAnimationRepository.ts +75 -0
- package/src/reanimated2/layoutReanimation/animationBuilder/BaseAnimationBuilder.ts +29 -159
- package/src/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.ts +169 -0
- package/src/reanimated2/layoutReanimation/animationBuilder/Keyframe.ts +2 -2
- package/src/reanimated2/layoutReanimation/animationBuilder/commonTypes.ts +3 -9
- package/src/reanimated2/layoutReanimation/animationBuilder/index.ts +1 -5
- package/src/reanimated2/layoutReanimation/defaultAnimations/Bounce.ts +162 -82
- package/src/reanimated2/layoutReanimation/defaultAnimations/Default.ts +7 -2
- package/src/reanimated2/layoutReanimation/defaultAnimations/Fade.ts +32 -32
- package/src/reanimated2/layoutReanimation/defaultAnimations/Flip.ts +38 -38
- package/src/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.ts +34 -32
- package/src/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.ts +8 -8
- package/src/reanimated2/layoutReanimation/defaultAnimations/Roll.ts +14 -14
- package/src/reanimated2/layoutReanimation/defaultAnimations/Rotate.ts +26 -26
- package/src/reanimated2/layoutReanimation/defaultAnimations/Slide.ts +28 -28
- package/src/reanimated2/layoutReanimation/defaultAnimations/Stretch.ts +14 -14
- package/src/reanimated2/layoutReanimation/defaultAnimations/Zoom.ts +50 -50
- package/src/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.ts +104 -0
- package/src/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.ts +213 -0
- package/src/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.ts +60 -0
- package/src/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.ts +58 -0
- package/src/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.ts +41 -0
- package/src/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.ts +78 -0
- package/src/reanimated2/layoutReanimation/defaultTransitions/index.ts +6 -0
- package/src/reanimated2/layoutReanimation/index.ts +1 -0
- package/src/reanimated2/mock.ts +3 -1
- package/src/reanimated2/utils.ts +21 -0
- package/src/{setAndForwardRef.js → setAndForwardRef.ts} +12 -2
- package/android/react-native-reanimated-62-hermes.aar +0 -0
- package/android/react-native-reanimated-62-jsc.aar +0 -0
- package/lib/reanimated2/NativeReanimated.js +0 -48
- package/lib/reanimated2/layoutReanimation/animationBuilder/BaseBounceAnimationBuilder.js +0 -55
- package/lib/reanimated2/layoutReanimation/animationBuilder/LayoutAnimationBuilder.js +0 -165
- package/src/ReanimatedModuleCompat.js +0 -37
- package/src/reanimated2/NativeReanimated.ts +0 -70
- package/src/reanimated2/layoutReanimation/LayoutAnimationRepository.tsx +0 -41
- package/src/reanimated2/layoutReanimation/animationBuilder/BaseBounceAnimationBuilder.ts +0 -82
- package/src/reanimated2/layoutReanimation/animationBuilder/LayoutAnimationBuilder.ts +0 -217
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
|
|
4
4
|
namespace reanimated {
|
|
5
5
|
|
|
6
|
-
void EventHandlerRegistry::registerEventHandler(
|
|
6
|
+
void EventHandlerRegistry::registerEventHandler(
|
|
7
|
+
std::shared_ptr<WorkletEventHandler> eventHandler) {
|
|
7
8
|
const std::lock_guard<std::mutex> lock(instanceMutex);
|
|
8
9
|
eventMappings[eventHandler->eventName][eventHandler->id] = eventHandler;
|
|
9
10
|
eventHandlers[eventHandler->id] = eventHandler;
|
|
@@ -21,7 +22,10 @@ void EventHandlerRegistry::unregisterEventHandler(unsigned long id) {
|
|
|
21
22
|
}
|
|
22
23
|
}
|
|
23
24
|
|
|
24
|
-
void EventHandlerRegistry::processEvent(
|
|
25
|
+
void EventHandlerRegistry::processEvent(
|
|
26
|
+
jsi::Runtime &rt,
|
|
27
|
+
std::string eventName,
|
|
28
|
+
std::string eventPayload) {
|
|
25
29
|
std::vector<std::shared_ptr<WorkletEventHandler>> handlersForEvent;
|
|
26
30
|
{
|
|
27
31
|
const std::lock_guard<std::mutex> lock(instanceMutex);
|
|
@@ -38,15 +42,18 @@ void EventHandlerRegistry::processEvent(jsi::Runtime &rt, std::string eventName,
|
|
|
38
42
|
std::string delimimter = "NativeMap:";
|
|
39
43
|
auto positionToSplit = eventPayload.find(delimimter) + delimimter.size();
|
|
40
44
|
auto lastBracketCharactedPosition = eventPayload.size() - positionToSplit - 1;
|
|
41
|
-
auto eventJSON =
|
|
45
|
+
auto eventJSON =
|
|
46
|
+
eventPayload.substr(positionToSplit, lastBracketCharactedPosition);
|
|
42
47
|
|
|
43
48
|
if (eventJSON.compare(std::string("null")) == 0) {
|
|
44
49
|
return;
|
|
45
50
|
}
|
|
46
51
|
|
|
47
|
-
auto eventObject = jsi::Value::createFromJsonUtf8(
|
|
52
|
+
auto eventObject = jsi::Value::createFromJsonUtf8(
|
|
53
|
+
rt, reinterpret_cast<uint8_t *>(&eventJSON[0]), eventJSON.size());
|
|
48
54
|
|
|
49
|
-
eventObject.asObject(rt).setProperty(
|
|
55
|
+
eventObject.asObject(rt).setProperty(
|
|
56
|
+
rt, "eventName", jsi::String::createFromUtf8(rt, eventName));
|
|
50
57
|
for (auto handler : handlersForEvent) {
|
|
51
58
|
handler->process(rt, eventObject);
|
|
52
59
|
}
|
|
@@ -55,7 +62,7 @@ void EventHandlerRegistry::processEvent(jsi::Runtime &rt, std::string eventName,
|
|
|
55
62
|
bool EventHandlerRegistry::isAnyHandlerWaitingForEvent(std::string eventName) {
|
|
56
63
|
const std::lock_guard<std::mutex> lock(instanceMutex);
|
|
57
64
|
auto it = eventMappings.find(eventName);
|
|
58
|
-
return (it != eventMappings.end())
|
|
65
|
+
return (it != eventMappings.end()) && (!(it->second).empty());
|
|
59
66
|
}
|
|
60
67
|
|
|
61
|
-
}
|
|
68
|
+
} // namespace reanimated
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#include "MapperRegistry.h"
|
|
2
|
-
#include "Mapper.h"
|
|
3
|
-
#include <map>
|
|
4
2
|
#include <array>
|
|
3
|
+
#include <map>
|
|
5
4
|
#include <set>
|
|
5
|
+
#include "Mapper.h"
|
|
6
6
|
|
|
7
7
|
namespace reanimated {
|
|
8
8
|
|
|
@@ -21,7 +21,7 @@ void MapperRegistry::execute(jsi::Runtime &rt) {
|
|
|
21
21
|
updateOrder();
|
|
22
22
|
updatedSinceLastExecute = false;
|
|
23
23
|
}
|
|
24
|
-
for (auto &
|
|
24
|
+
for (auto &mapper : sortedMappers) {
|
|
25
25
|
if (mapper->dirty) {
|
|
26
26
|
mapper->execute(rt);
|
|
27
27
|
}
|
|
@@ -39,16 +39,18 @@ void MapperRegistry::updateOrder() { // Topological sorting
|
|
|
39
39
|
std::shared_ptr<Mapper> mapper;
|
|
40
40
|
std::shared_ptr<MutableValue> mutableValue;
|
|
41
41
|
|
|
42
|
-
NodeID(std::shared_ptr<Mapper> mapper) {
|
|
42
|
+
explicit NodeID(std::shared_ptr<Mapper> mapper) {
|
|
43
43
|
if (mapper == nullptr) {
|
|
44
|
-
throw std::runtime_error(
|
|
44
|
+
throw std::runtime_error(
|
|
45
|
+
"Graph couldn't be sorted (Mapper cannot be nullptr)");
|
|
45
46
|
}
|
|
46
47
|
this->mapper = mapper;
|
|
47
48
|
}
|
|
48
49
|
|
|
49
|
-
NodeID(std::shared_ptr<MutableValue> mutableValue) {
|
|
50
|
+
explicit NodeID(std::shared_ptr<MutableValue> mutableValue) {
|
|
50
51
|
if (mutableValue == nullptr) {
|
|
51
|
-
throw std::runtime_error(
|
|
52
|
+
throw std::runtime_error(
|
|
53
|
+
"Graph couldn't be sorted (Mutable cannot be nullptr)");
|
|
52
54
|
}
|
|
53
55
|
this->mutableValue = mutableValue;
|
|
54
56
|
}
|
|
@@ -57,8 +59,7 @@ void MapperRegistry::updateOrder() { // Topological sorting
|
|
|
57
59
|
return mutableValue != nullptr;
|
|
58
60
|
}
|
|
59
61
|
|
|
60
|
-
bool operator<(const NodeID&
|
|
61
|
-
{
|
|
62
|
+
bool operator<(const NodeID &other) const {
|
|
62
63
|
if (isMutable() != other.isMutable())
|
|
63
64
|
return isMutable() < other.isMutable();
|
|
64
65
|
|
|
@@ -72,29 +73,31 @@ void MapperRegistry::updateOrder() { // Topological sorting
|
|
|
72
73
|
|
|
73
74
|
std::map<NodeID, int> deg;
|
|
74
75
|
|
|
75
|
-
std::map<std::shared_ptr<MutableValue>, std::vector<std::shared_ptr<Mapper>>>
|
|
76
|
+
std::map<std::shared_ptr<MutableValue>, std::vector<std::shared_ptr<Mapper>>>
|
|
77
|
+
mappersThatUseSharedValue;
|
|
76
78
|
|
|
77
79
|
std::set<std::pair<int, NodeID>> nodes;
|
|
78
80
|
|
|
79
|
-
std::function<void(NodeID)> update = [&]
|
|
81
|
+
std::function<void(NodeID)> update = [&](NodeID id) {
|
|
80
82
|
auto entry = std::make_pair(deg[id], id);
|
|
81
|
-
if (nodes.find(entry) == nodes.end())
|
|
83
|
+
if (nodes.find(entry) == nodes.end())
|
|
84
|
+
return;
|
|
82
85
|
nodes.erase(entry);
|
|
83
86
|
entry.first--;
|
|
84
87
|
deg[id]--;
|
|
85
88
|
nodes.insert(entry);
|
|
86
89
|
};
|
|
87
90
|
|
|
88
|
-
for (auto &
|
|
91
|
+
for (auto &entry : mappers) {
|
|
89
92
|
auto id = NodeID(entry.second);
|
|
90
|
-
auto &
|
|
93
|
+
auto &mapper = entry.second;
|
|
91
94
|
deg[id] = mapper->inputs.size();
|
|
92
95
|
nodes.insert(std::make_pair(deg[id], id));
|
|
93
96
|
|
|
94
97
|
for (auto sharedValue : mapper->inputs) {
|
|
95
98
|
auto sharedValueID = NodeID(sharedValue);
|
|
96
99
|
mappersThatUseSharedValue[sharedValue].push_back(mapper);
|
|
97
|
-
if (deg.count(
|
|
100
|
+
if (deg.count(sharedValueID) == 0) {
|
|
98
101
|
deg[sharedValueID] = 0;
|
|
99
102
|
}
|
|
100
103
|
}
|
|
@@ -104,14 +107,14 @@ void MapperRegistry::updateOrder() { // Topological sorting
|
|
|
104
107
|
}
|
|
105
108
|
}
|
|
106
109
|
|
|
107
|
-
for (auto &
|
|
110
|
+
for (auto &entry : deg) {
|
|
108
111
|
auto id = entry.first;
|
|
109
112
|
if (id.isMutable()) {
|
|
110
113
|
nodes.insert(std::make_pair(entry.second, id));
|
|
111
114
|
}
|
|
112
115
|
}
|
|
113
116
|
|
|
114
|
-
while (nodes.size() > 0
|
|
117
|
+
while (nodes.size() > 0 && nodes.begin()->first == 0) {
|
|
115
118
|
auto entry = *nodes.begin();
|
|
116
119
|
nodes.erase(entry);
|
|
117
120
|
|
|
@@ -120,7 +123,7 @@ void MapperRegistry::updateOrder() { // Topological sorting
|
|
|
120
123
|
|
|
121
124
|
if (id.isMutable()) {
|
|
122
125
|
for (auto id : mappersThatUseSharedValue[id.mutableValue]) {
|
|
123
|
-
toUpdate.push_back(id);
|
|
126
|
+
toUpdate.push_back(NodeID(id));
|
|
124
127
|
}
|
|
125
128
|
} else {
|
|
126
129
|
for (auto sharedValue : id.mapper->outputs) {
|
|
@@ -130,7 +133,8 @@ void MapperRegistry::updateOrder() { // Topological sorting
|
|
|
130
133
|
sortedMappers.push_back(id.mapper);
|
|
131
134
|
}
|
|
132
135
|
|
|
133
|
-
for (auto &
|
|
136
|
+
for (auto &id : toUpdate)
|
|
137
|
+
update(id);
|
|
134
138
|
}
|
|
135
139
|
|
|
136
140
|
if (nodes.size() > 0) {
|
|
@@ -138,4 +142,4 @@ void MapperRegistry::updateOrder() { // Topological sorting
|
|
|
138
142
|
}
|
|
139
143
|
}
|
|
140
144
|
|
|
141
|
-
}
|
|
145
|
+
} // namespace reanimated
|
|
@@ -1,28 +1,38 @@
|
|
|
1
1
|
#include "WorkletsCache.h"
|
|
2
|
-
#include "ShareableValue.h"
|
|
3
2
|
#include "FrozenObject.h"
|
|
3
|
+
#include "ShareableValue.h"
|
|
4
4
|
|
|
5
5
|
using namespace facebook;
|
|
6
6
|
|
|
7
|
-
namespace reanimated
|
|
8
|
-
{
|
|
7
|
+
namespace reanimated {
|
|
9
8
|
|
|
10
9
|
jsi::Value eval(jsi::Runtime &rt, const char *code) {
|
|
11
10
|
return rt.global().getPropertyAsFunction(rt, "eval").call(rt, code);
|
|
12
11
|
}
|
|
13
12
|
|
|
14
|
-
jsi::Function function(jsi::Runtime &rt, const std::string&
|
|
13
|
+
jsi::Function function(jsi::Runtime &rt, const std::string &code) {
|
|
15
14
|
return eval(rt, ("(" + code + ")").c_str()).getObject(rt).getFunction(rt);
|
|
16
15
|
}
|
|
17
16
|
|
|
18
|
-
std::shared_ptr<jsi::Function> WorkletsCache::getFunction(
|
|
19
|
-
|
|
17
|
+
std::shared_ptr<jsi::Function> WorkletsCache::getFunction(
|
|
18
|
+
jsi::Runtime &rt,
|
|
19
|
+
std::shared_ptr<FrozenObject> frozenObj) {
|
|
20
|
+
long long workletHash =
|
|
21
|
+
ValueWrapper::asNumber(frozenObj->map["__workletHash"]->valueContainer);
|
|
20
22
|
if (worklets.count(workletHash) == 0) {
|
|
21
|
-
auto codeBuffer = std::make_shared<const jsi::StringBuffer>(
|
|
22
|
-
|
|
23
|
+
auto codeBuffer = std::make_shared<const jsi::StringBuffer>(
|
|
24
|
+
"(" +
|
|
25
|
+
ValueWrapper::asString(frozenObj->map["asString"]->valueContainer) +
|
|
26
|
+
")");
|
|
27
|
+
auto func = rt.evaluateJavaScript(
|
|
28
|
+
codeBuffer,
|
|
29
|
+
ValueWrapper::asString(
|
|
30
|
+
frozenObj->map["__location"]->valueContainer))
|
|
31
|
+
.asObject(rt)
|
|
32
|
+
.asFunction(rt);
|
|
23
33
|
worklets[workletHash] = std::make_shared<jsi::Function>(std::move(func));
|
|
24
34
|
}
|
|
25
35
|
return worklets[workletHash];
|
|
26
36
|
}
|
|
27
37
|
|
|
28
|
-
}
|
|
38
|
+
} // namespace reanimated
|
|
@@ -1,26 +1,35 @@
|
|
|
1
1
|
#include "FrozenObject.h"
|
|
2
|
-
#include "SharedParent.h"
|
|
3
|
-
#include "ShareableValue.h"
|
|
4
2
|
#include "RuntimeManager.h"
|
|
3
|
+
#include "ShareableValue.h"
|
|
4
|
+
#include "SharedParent.h"
|
|
5
5
|
|
|
6
6
|
namespace reanimated {
|
|
7
7
|
|
|
8
|
-
FrozenObject::FrozenObject(
|
|
8
|
+
FrozenObject::FrozenObject(
|
|
9
|
+
jsi::Runtime &rt,
|
|
10
|
+
const jsi::Object &object,
|
|
11
|
+
RuntimeManager *runtimeManager) {
|
|
9
12
|
auto propertyNames = object.getPropertyNames(rt);
|
|
10
|
-
|
|
13
|
+
const size_t count = propertyNames.size(rt);
|
|
14
|
+
namesOrder.reserve(count);
|
|
15
|
+
for (size_t i = 0; i < count; i++) {
|
|
11
16
|
auto propertyName = propertyNames.getValueAtIndex(rt, i).asString(rt);
|
|
17
|
+
namesOrder.push_back(propertyName.utf8(rt));
|
|
12
18
|
std::string nameStr = propertyName.utf8(rt);
|
|
13
|
-
map[nameStr] = ShareableValue::adapt(
|
|
19
|
+
map[nameStr] = ShareableValue::adapt(
|
|
20
|
+
rt, object.getProperty(rt, propertyName), runtimeManager);
|
|
14
21
|
this->containsHostFunction |= map[nameStr]->containsHostFunction;
|
|
15
22
|
}
|
|
16
23
|
}
|
|
17
24
|
|
|
18
25
|
jsi::Object FrozenObject::shallowClone(jsi::Runtime &rt) {
|
|
19
26
|
jsi::Object object(rt);
|
|
20
|
-
for (auto
|
|
21
|
-
|
|
27
|
+
for (auto propName : namesOrder) {
|
|
28
|
+
auto value = map[propName];
|
|
29
|
+
object.setProperty(
|
|
30
|
+
rt, jsi::String::createFromUtf8(rt, propName), value->getValue(rt));
|
|
22
31
|
}
|
|
23
32
|
return object;
|
|
24
33
|
}
|
|
25
34
|
|
|
26
|
-
}
|
|
35
|
+
} // namespace reanimated
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#include "MutableValue.h"
|
|
2
|
-
#include "SharedParent.h"
|
|
3
|
-
#include "ShareableValue.h"
|
|
4
|
-
#include "RuntimeManager.h"
|
|
5
2
|
#include "RuntimeDecorator.h"
|
|
3
|
+
#include "RuntimeManager.h"
|
|
4
|
+
#include "ShareableValue.h"
|
|
5
|
+
#include "SharedParent.h"
|
|
6
6
|
|
|
7
7
|
namespace reanimated {
|
|
8
8
|
|
|
@@ -11,7 +11,7 @@ void MutableValue::setValue(jsi::Runtime &rt, const jsi::Value &newValue) {
|
|
|
11
11
|
value = ShareableValue::adapt(rt, newValue, runtimeManager);
|
|
12
12
|
|
|
13
13
|
std::shared_ptr<MutableValue> thiz = shared_from_this();
|
|
14
|
-
auto notifyListeners = [thiz]
|
|
14
|
+
auto notifyListeners = [thiz]() {
|
|
15
15
|
for (auto listener : thiz->listeners) {
|
|
16
16
|
listener.second();
|
|
17
17
|
}
|
|
@@ -19,9 +19,8 @@ void MutableValue::setValue(jsi::Runtime &rt, const jsi::Value &newValue) {
|
|
|
19
19
|
if (RuntimeDecorator::isUIRuntime(rt)) {
|
|
20
20
|
notifyListeners();
|
|
21
21
|
} else {
|
|
22
|
-
runtimeManager->scheduler->scheduleOnUI(
|
|
23
|
-
|
|
24
|
-
});
|
|
22
|
+
runtimeManager->scheduler->scheduleOnUI(
|
|
23
|
+
[notifyListeners] { notifyListeners(); });
|
|
25
24
|
}
|
|
26
25
|
}
|
|
27
26
|
|
|
@@ -30,20 +29,26 @@ jsi::Value MutableValue::getValue(jsi::Runtime &rt) {
|
|
|
30
29
|
return value->getValue(rt);
|
|
31
30
|
}
|
|
32
31
|
|
|
33
|
-
void MutableValue::set(
|
|
32
|
+
void MutableValue::set(
|
|
33
|
+
jsi::Runtime &rt,
|
|
34
|
+
const jsi::PropNameID &name,
|
|
35
|
+
const jsi::Value &newValue) {
|
|
34
36
|
auto propName = name.utf8(rt);
|
|
35
37
|
if (!runtimeManager->valueSetter) {
|
|
36
|
-
throw jsi::JSError(
|
|
38
|
+
throw jsi::JSError(
|
|
39
|
+
rt,
|
|
40
|
+
"Value-Setter is not yet configured! Make sure the core-functions are installed.");
|
|
37
41
|
}
|
|
38
42
|
|
|
39
43
|
if (RuntimeDecorator::isUIRuntime(rt)) {
|
|
40
44
|
// UI thread
|
|
41
45
|
if (propName == "value") {
|
|
42
|
-
auto setterProxy = jsi::Object::createFromHostObject(
|
|
46
|
+
auto setterProxy = jsi::Object::createFromHostObject(
|
|
47
|
+
rt, std::make_shared<MutableValueSetterProxy>(shared_from_this()));
|
|
43
48
|
runtimeManager->valueSetter->getValue(rt)
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
49
|
+
.asObject(rt)
|
|
50
|
+
.asFunction(rt)
|
|
51
|
+
.callWithThis(rt, setterProxy, newValue);
|
|
47
52
|
} else if (propName == "_animation") {
|
|
48
53
|
// TODO: assert to allow animation to be set from UI only
|
|
49
54
|
if (animation.expired()) {
|
|
@@ -51,7 +56,8 @@ void MutableValue::set(jsi::Runtime &rt, const jsi::PropNameID &name, const jsi:
|
|
|
51
56
|
}
|
|
52
57
|
*animation.lock() = jsi::Value(rt, newValue);
|
|
53
58
|
} else if (propName == "_value") {
|
|
54
|
-
auto setter =
|
|
59
|
+
auto setter =
|
|
60
|
+
std::make_shared<MutableValueSetterProxy>(shared_from_this());
|
|
55
61
|
setter->set(rt, jsi::PropNameID::forAscii(rt, "_value"), newValue);
|
|
56
62
|
}
|
|
57
63
|
} else {
|
|
@@ -60,12 +66,13 @@ void MutableValue::set(jsi::Runtime &rt, const jsi::PropNameID &name, const jsi:
|
|
|
60
66
|
auto shareable = ShareableValue::adapt(rt, newValue, runtimeManager);
|
|
61
67
|
runtimeManager->scheduler->scheduleOnUI([this, shareable] {
|
|
62
68
|
jsi::Runtime &rt = *this->runtimeManager->runtime.get();
|
|
63
|
-
auto setterProxy = jsi::Object::createFromHostObject(
|
|
69
|
+
auto setterProxy = jsi::Object::createFromHostObject(
|
|
70
|
+
rt, std::make_shared<MutableValueSetterProxy>(shared_from_this()));
|
|
64
71
|
jsi::Value newValue = shareable->getValue(rt);
|
|
65
72
|
runtimeManager->valueSetter->getValue(rt)
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
73
|
+
.asObject(rt)
|
|
74
|
+
.asFunction(rt)
|
|
75
|
+
.callWithThis(rt, setterProxy, newValue);
|
|
69
76
|
});
|
|
70
77
|
}
|
|
71
78
|
}
|
|
@@ -100,11 +107,18 @@ std::vector<jsi::PropNameID> MutableValue::getPropertyNames(jsi::Runtime &rt) {
|
|
|
100
107
|
return result;
|
|
101
108
|
}
|
|
102
109
|
|
|
103
|
-
MutableValue::MutableValue(
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
110
|
+
MutableValue::MutableValue(
|
|
111
|
+
jsi::Runtime &rt,
|
|
112
|
+
const jsi::Value &initial,
|
|
113
|
+
RuntimeManager *runtimeManager,
|
|
114
|
+
std::shared_ptr<Scheduler> s)
|
|
115
|
+
: StoreUser(s, *runtimeManager),
|
|
116
|
+
runtimeManager(runtimeManager),
|
|
117
|
+
value(ShareableValue::adapt(rt, initial, runtimeManager)) {}
|
|
118
|
+
|
|
119
|
+
unsigned long int MutableValue::addListener(
|
|
120
|
+
unsigned long id,
|
|
121
|
+
std::function<void()> listener) {
|
|
108
122
|
listeners[id] = listener;
|
|
109
123
|
return id;
|
|
110
124
|
}
|
|
@@ -115,5 +129,4 @@ void MutableValue::removeListener(unsigned long listenerId) {
|
|
|
115
129
|
}
|
|
116
130
|
}
|
|
117
131
|
|
|
118
|
-
|
|
119
|
-
}
|
|
132
|
+
} // namespace reanimated
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
#include "MutableValueSetterProxy.h"
|
|
2
|
-
#include "SharedParent.h"
|
|
3
|
-
#include "MutableValue.h"
|
|
4
2
|
#include <jsi/jsi.h>
|
|
3
|
+
#include "MutableValue.h"
|
|
4
|
+
#include "SharedParent.h"
|
|
5
5
|
|
|
6
6
|
using namespace facebook;
|
|
7
7
|
|
|
8
8
|
namespace reanimated {
|
|
9
9
|
|
|
10
|
-
void MutableValueSetterProxy::set(
|
|
10
|
+
void MutableValueSetterProxy::set(
|
|
11
|
+
jsi::Runtime &rt,
|
|
12
|
+
const jsi::PropNameID &name,
|
|
13
|
+
const jsi::Value &newValue) {
|
|
11
14
|
auto propName = name.utf8(rt);
|
|
12
15
|
if (propName == "_value") {
|
|
13
16
|
mutableValue->setValue(rt, newValue);
|
|
@@ -18,11 +21,13 @@ void MutableValueSetterProxy::set(jsi::Runtime &rt, const jsi::PropNameID &name,
|
|
|
18
21
|
}
|
|
19
22
|
*mutableValue->animation.lock() = jsi::Value(rt, newValue);
|
|
20
23
|
} else if (propName == "value") {
|
|
21
|
-
|
|
24
|
+
// you call `this.value` inside of value setter, we should throw
|
|
22
25
|
}
|
|
23
26
|
}
|
|
24
27
|
|
|
25
|
-
jsi::Value MutableValueSetterProxy::get(
|
|
28
|
+
jsi::Value MutableValueSetterProxy::get(
|
|
29
|
+
jsi::Runtime &rt,
|
|
30
|
+
const jsi::PropNameID &name) {
|
|
26
31
|
auto propName = name.utf8(rt);
|
|
27
32
|
|
|
28
33
|
if (propName == "value") {
|
|
@@ -39,5 +44,4 @@ jsi::Value MutableValueSetterProxy::get(jsi::Runtime &rt, const jsi::PropNameID
|
|
|
39
44
|
return jsi::Value::undefined();
|
|
40
45
|
}
|
|
41
46
|
|
|
42
|
-
}
|
|
43
|
-
|
|
47
|
+
} // namespace reanimated
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#include "RemoteObject.h"
|
|
2
|
-
#include "SharedParent.h"
|
|
3
|
-
#include "RuntimeDecorator.h"
|
|
4
2
|
#include <jsi/jsi.h>
|
|
3
|
+
#include "RuntimeDecorator.h"
|
|
4
|
+
#include "SharedParent.h"
|
|
5
5
|
|
|
6
6
|
using namespace facebook;
|
|
7
7
|
|
|
@@ -22,7 +22,10 @@ jsi::Value RemoteObject::get(jsi::Runtime &rt, const jsi::PropNameID &name) {
|
|
|
22
22
|
return jsi::Value::undefined();
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
void RemoteObject::set(
|
|
25
|
+
void RemoteObject::set(
|
|
26
|
+
jsi::Runtime &rt,
|
|
27
|
+
const jsi::PropNameID &name,
|
|
28
|
+
const jsi::Value &value) {
|
|
26
29
|
if (RuntimeDecorator::isWorkletRuntime(rt)) {
|
|
27
30
|
backing.lock()->getObject(rt).setProperty(rt, name, value);
|
|
28
31
|
}
|
|
@@ -33,9 +36,10 @@ std::vector<jsi::PropNameID> RemoteObject::getPropertyNames(jsi::Runtime &rt) {
|
|
|
33
36
|
std::vector<jsi::PropNameID> res;
|
|
34
37
|
auto propertyNames = backing.lock()->getObject(rt).getPropertyNames(rt);
|
|
35
38
|
for (size_t i = 0, size = propertyNames.size(rt); i < size; i++) {
|
|
36
|
-
res.push_back(jsi::PropNameID::forString(
|
|
39
|
+
res.push_back(jsi::PropNameID::forString(
|
|
40
|
+
rt, propertyNames.getValueAtIndex(rt, i).asString(rt)));
|
|
37
41
|
}
|
|
38
42
|
return res;
|
|
39
43
|
}
|
|
40
44
|
|
|
41
|
-
}
|
|
45
|
+
} // namespace reanimated
|