react-native-reanimated 2.3.0-alpha.1 → 2.3.0-beta.2
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 +170 -166
- package/Common/cpp/NativeModules/NativeReanimatedModuleSpec.cpp +36 -34
- package/Common/cpp/Registries/EventHandlerRegistry.cpp +13 -6
- package/Common/cpp/Registries/MapperRegistry.cpp +19 -15
- package/Common/cpp/Registries/WorkletsCache.cpp +19 -9
- package/Common/cpp/SharedItems/FrozenObject.cpp +19 -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 +216 -143
- package/Common/cpp/Tools/JSIStoreValueUser.cpp +36 -24
- package/Common/cpp/Tools/Mapper.cpp +41 -29
- package/Common/cpp/Tools/RuntimeDecorator.cpp +103 -84
- package/Common/cpp/Tools/Scheduler.cpp +14 -6
- package/Common/cpp/Tools/WorkletEventHandler.cpp +1 -1
- package/Common/cpp/headers/LayoutAnimations/LayoutAnimationsProxy.h +12 -11
- package/Common/cpp/headers/NativeModules/NativeReanimatedModule.h +45 -34
- package/Common/cpp/headers/NativeModules/NativeReanimatedModuleSpec.h +28 -16
- package/Common/cpp/headers/Registries/EventHandlerRegistry.h +14 -8
- package/Common/cpp/headers/Registries/MapperRegistry.h +4 -4
- package/Common/cpp/headers/Registries/WorkletsCache.h +9 -7
- package/Common/cpp/headers/SharedItems/FrozenObject.h +15 -11
- package/Common/cpp/headers/SharedItems/HostFunctionHandler.h +6 -4
- package/Common/cpp/headers/SharedItems/MutableValue.h +21 -12
- package/Common/cpp/headers/SharedItems/MutableValueSetterProxy.h +10 -7
- package/Common/cpp/headers/SharedItems/RemoteObject.h +16 -8
- package/Common/cpp/headers/SharedItems/RuntimeManager.h +39 -21
- package/Common/cpp/headers/SharedItems/ShareableValue.h +31 -27
- package/Common/cpp/headers/SharedItems/SharedParent.h +7 -4
- package/Common/cpp/headers/SharedItems/ValueWrapper.h +80 -61
- package/Common/cpp/headers/SpecTools/ErrorHandler.h +17 -19
- package/Common/cpp/headers/Tools/JSIStoreValueUser.h +18 -13
- package/Common/cpp/headers/Tools/Mapper.h +24 -18
- package/Common/cpp/headers/Tools/PlatformDepMethodsHolder.h +12 -7
- package/Common/cpp/headers/Tools/ReanimatedHiddenHeaders.h +7 -7
- package/Common/cpp/headers/Tools/RuntimeDecorator.h +29 -23
- package/Common/cpp/headers/Tools/Scheduler.h +28 -33
- package/Common/cpp/headers/Tools/WorkletEventHandler.h +9 -7
- 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 +4 -4
- package/android/build.gradle +80 -3
- 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/ios/LayoutReanimation/REAAnimationsManager.h +19 -10
- package/ios/LayoutReanimation/REAAnimationsManager.m +195 -200
- package/ios/LayoutReanimation/REASnapshot.h +13 -0
- package/ios/LayoutReanimation/REASnapshot.m +29 -0
- package/ios/LayoutReanimation/REAUIManager.h +16 -0
- package/ios/LayoutReanimation/REAUIManager.mm +348 -0
- 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 +3 -3
- package/ios/REAModule.h +0 -2
- package/ios/REAModule.m +29 -40
- package/ios/REANodesManager.h +11 -19
- package/ios/REANodesManager.m +105 -130
- package/ios/REAUtils.h +5 -3
- 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 +15 -5
- package/ios/native/NativeProxy.h +4 -3
- package/ios/native/NativeProxy.mm +19 -5
- package/ios/native/REAIOSErrorHandler.h +13 -10
- package/ios/native/REAIOSLogger.h +8 -8
- package/ios/native/REAIOSScheduler.h +5 -5
- package/ios/native/REAIOSScheduler.mm +7 -5
- package/ios/native/REAInitializer.h +37 -0
- package/ios/native/REAInitializer.mm +63 -0
- package/ios/native/UIResponder+Reanimated.mm +9 -48
- package/lib/ConfigHelper.js +1 -0
- package/lib/ReanimatedModule.native.js +10 -2
- package/lib/createAnimatedComponent.js +64 -30
- package/lib/reanimated1/core/AnimatedAlways.js +1 -1
- package/lib/reanimated1/core/AnimatedBezier.js +1 -1
- package/lib/reanimated1/core/AnimatedBlock.js +1 -1
- package/lib/reanimated1/core/AnimatedCall.js +1 -1
- package/lib/reanimated1/core/AnimatedCallFunc.js +1 -1
- package/lib/reanimated1/core/AnimatedConcat.js +1 -1
- package/lib/reanimated1/core/AnimatedCond.js +1 -1
- package/lib/reanimated1/core/AnimatedDebug.js +1 -1
- package/lib/reanimated1/core/AnimatedEvent.js +1 -1
- package/lib/reanimated1/core/AnimatedFunction.js +1 -1
- package/lib/reanimated1/core/AnimatedOperator.js +1 -1
- package/lib/reanimated1/core/AnimatedParam.js +1 -1
- package/lib/reanimated1/core/AnimatedProps.js +2 -2
- package/lib/reanimated1/core/AnimatedSet.js +1 -1
- package/lib/reanimated1/core/AnimatedStartClock.js +1 -1
- package/lib/reanimated1/core/AnimatedStopClock.js +1 -1
- package/lib/reanimated1/core/AnimatedStyle.js +1 -1
- package/lib/reanimated1/core/AnimatedTransform.js +1 -1
- package/lib/reanimated1/core/Core.test.js +30 -0
- package/lib/reanimated1/core/InternalAnimatedValue.js +1 -1
- package/lib/reanimated1/core/__mocks__/AnimatedProps.js +1 -1
- package/lib/reanimated1/derived/interpolate.js +1 -1
- package/lib/reanimated2/Colors.js +16 -12
- package/lib/reanimated2/NativeMethods.js +3 -14
- package/lib/reanimated2/{NativeReanimated.native.js → NativeReanimated/NativeReanimated.js} +19 -24
- package/lib/reanimated2/NativeReanimated/index.js +15 -0
- package/lib/reanimated2/PlatformChecker.js +16 -0
- package/lib/reanimated2/PropAdapters.js +14 -4
- package/lib/reanimated2/UpdateProps.js +14 -11
- package/lib/reanimated2/ViewDescriptorsSet.js +73 -0
- package/lib/reanimated2/WorkletEventHandler.js +15 -13
- package/lib/reanimated2/animation/commonTypes.js +1 -0
- package/lib/reanimated2/animation/decay.js +71 -0
- package/lib/reanimated2/animation/delay.js +64 -0
- package/lib/reanimated2/animation/index.js +8 -0
- package/lib/reanimated2/animation/repeat.js +69 -0
- package/lib/reanimated2/animation/sequence.js +72 -0
- package/lib/reanimated2/animation/spring.js +101 -0
- package/lib/reanimated2/animation/styleAnimation.js +166 -0
- package/lib/reanimated2/animation/timing.js +64 -0
- package/lib/reanimated2/animation/util.js +157 -0
- package/lib/reanimated2/commonTypes.js +1 -0
- package/lib/reanimated2/core.js +35 -39
- package/lib/reanimated2/globals.d.ts +47 -1
- package/lib/reanimated2/hook/Hooks.js +9 -0
- package/lib/reanimated2/hook/commonTypes.js +1 -0
- package/lib/reanimated2/hook/index.js +8 -0
- package/lib/reanimated2/hook/useAnimatedGestureHandler.js +50 -0
- package/lib/reanimated2/hook/useAnimatedReaction.js +37 -0
- package/lib/reanimated2/hook/useAnimatedRef.js +25 -0
- package/lib/reanimated2/hook/useAnimatedScrollHandler.js +41 -0
- package/lib/reanimated2/hook/useAnimatedStyle.js +376 -0
- package/lib/reanimated2/hook/useDerivedValue.js +36 -0
- package/lib/reanimated2/hook/useSharedValue.js +17 -0
- package/lib/reanimated2/hook/utils.js +175 -0
- package/lib/reanimated2/index.js +3 -2
- package/lib/reanimated2/interpolation.js +95 -86
- package/lib/reanimated2/jestUtils.js +0 -12
- package/lib/reanimated2/js-reanimated/JSReanimated.js +9 -10
- package/lib/reanimated2/js-reanimated/index.js +57 -1
- package/lib/reanimated2/layoutReanimation/LayoutAnimationRepository.js +58 -0
- package/lib/reanimated2/layoutReanimation/animationBuilder/BaseAnimationBuilder.js +69 -0
- package/lib/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.js +125 -0
- package/lib/reanimated2/layoutReanimation/animationBuilder/Keyframe.js +193 -0
- package/lib/reanimated2/layoutReanimation/animationBuilder/commonTypes.js +1 -0
- package/lib/reanimated2/layoutReanimation/animationBuilder/index.js +3 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Bounce.js +325 -207
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Default.js +36 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Fade.js +235 -187
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Flip.js +327 -269
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js +146 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.js +85 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Roll.js +119 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Rotate.js +289 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Slide.js +159 -121
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Stretch.js +83 -65
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Zoom.js +371 -277
- package/lib/reanimated2/layoutReanimation/defaultAnimations/index.js +4 -0
- 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 +3 -2
- package/lib/reanimated2/platform-specific/RNRenderer.web.js +2 -0
- package/lib/reanimated2/utils.js +9 -0
- 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/package.json +21 -10
- package/plugin.js +244 -85
- package/react-native-reanimated.d.ts +531 -453
- package/src/ConfigHelper.js +1 -0
- package/src/ReanimatedModule.native.js +10 -2
- package/src/createAnimatedComponent.js +64 -30
- package/src/reanimated1/core/AnimatedAlways.js +1 -1
- package/src/reanimated1/core/AnimatedBezier.js +1 -1
- package/src/reanimated1/core/AnimatedBlock.js +1 -1
- package/src/reanimated1/core/AnimatedCall.js +1 -1
- package/src/reanimated1/core/AnimatedCallFunc.js +1 -1
- package/src/reanimated1/core/AnimatedConcat.js +1 -1
- package/src/reanimated1/core/AnimatedCond.js +1 -1
- package/src/reanimated1/core/AnimatedDebug.js +1 -1
- package/src/reanimated1/core/AnimatedEvent.js +1 -1
- package/src/reanimated1/core/AnimatedFunction.js +1 -1
- package/src/reanimated1/core/AnimatedOperator.js +1 -1
- package/src/reanimated1/core/AnimatedParam.js +1 -1
- package/src/reanimated1/core/AnimatedProps.js +2 -2
- package/src/reanimated1/core/AnimatedSet.js +1 -1
- package/src/reanimated1/core/AnimatedStartClock.js +1 -1
- package/src/reanimated1/core/AnimatedStopClock.js +1 -1
- package/src/reanimated1/core/AnimatedStyle.js +1 -1
- package/src/reanimated1/core/AnimatedTransform.js +1 -1
- package/src/reanimated1/core/Core.test.js +30 -0
- package/src/reanimated1/core/InternalAnimatedValue.js +1 -1
- package/src/reanimated1/core/__mocks__/AnimatedProps.js +1 -1
- package/src/reanimated1/derived/interpolate.js +1 -1
- package/src/reanimated2/Colors.ts +30 -27
- package/src/reanimated2/Easing.ts +3 -1
- package/src/reanimated2/NativeMethods.ts +26 -16
- package/src/reanimated2/NativeReanimated/NativeReanimated.ts +78 -0
- package/src/reanimated2/NativeReanimated/index.ts +18 -0
- package/src/reanimated2/PlatformChecker.ts +21 -0
- package/src/reanimated2/PropAdapters.ts +52 -34
- package/src/reanimated2/UpdateProps.ts +40 -20
- package/src/reanimated2/ViewDescriptorsSet.ts +108 -0
- package/src/reanimated2/WorkletEventHandler.ts +41 -23
- package/src/reanimated2/animation/commonTypes.ts +48 -0
- package/src/reanimated2/animation/decay.ts +141 -0
- package/src/reanimated2/animation/delay.ts +103 -0
- package/src/reanimated2/animation/index.ts +16 -0
- package/src/reanimated2/animation/repeat.ts +128 -0
- package/src/reanimated2/animation/sequence.ts +110 -0
- package/src/reanimated2/animation/spring.ts +165 -0
- package/src/reanimated2/animation/styleAnimation.ts +253 -0
- package/src/reanimated2/animation/timing.ts +109 -0
- package/src/reanimated2/animation/util.ts +242 -0
- package/src/reanimated2/commonTypes.ts +81 -0
- package/src/reanimated2/core.ts +128 -82
- package/src/reanimated2/globals.d.ts +47 -1
- package/src/reanimated2/hook/Hooks.ts +16 -0
- package/src/reanimated2/hook/commonTypes.ts +12 -0
- package/src/reanimated2/hook/index.ts +25 -0
- package/src/reanimated2/hook/useAnimatedGestureHandler.ts +110 -0
- package/src/reanimated2/hook/useAnimatedReaction.ts +49 -0
- package/src/reanimated2/hook/useAnimatedRef.ts +34 -0
- package/src/reanimated2/hook/useAnimatedScrollHandler.ts +83 -0
- package/src/reanimated2/hook/useAnimatedStyle.ts +538 -0
- package/src/reanimated2/hook/useDerivedValue.ts +48 -0
- package/src/reanimated2/hook/useSharedValue.ts +22 -0
- package/src/reanimated2/hook/utils.ts +259 -0
- package/src/reanimated2/index.ts +3 -2
- package/src/reanimated2/interpolation.ts +170 -101
- package/src/reanimated2/jestUtils.ts +0 -12
- package/src/reanimated2/js-reanimated/JSReanimated.ts +47 -22
- package/src/reanimated2/js-reanimated/Mapper.ts +1 -1
- package/src/reanimated2/js-reanimated/index.ts +71 -0
- package/src/reanimated2/layoutReanimation/LayoutAnimationRepository.tsx +62 -0
- package/src/reanimated2/layoutReanimation/animationBuilder/BaseAnimationBuilder.ts +91 -0
- package/src/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.ts +169 -0
- package/src/reanimated2/layoutReanimation/animationBuilder/Keyframe.ts +263 -0
- package/src/reanimated2/layoutReanimation/animationBuilder/commonTypes.ts +78 -0
- package/src/reanimated2/layoutReanimation/animationBuilder/index.ts +16 -0
- package/src/reanimated2/layoutReanimation/defaultAnimations/Bounce.ts +243 -121
- package/src/reanimated2/layoutReanimation/defaultAnimations/Default.ts +43 -0
- package/src/reanimated2/layoutReanimation/defaultAnimations/Fade.ts +95 -53
- package/src/reanimated2/layoutReanimation/defaultAnimations/Flip.ts +114 -64
- package/src/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.ts +179 -0
- package/src/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.ts +93 -0
- package/src/reanimated2/layoutReanimation/defaultAnimations/Roll.ts +132 -0
- package/src/reanimated2/layoutReanimation/defaultAnimations/Rotate.ts +333 -0
- package/src/reanimated2/layoutReanimation/defaultAnimations/Slide.ts +84 -50
- package/src/reanimated2/layoutReanimation/defaultAnimations/Stretch.ts +41 -23
- package/src/reanimated2/layoutReanimation/defaultAnimations/Zoom.ts +234 -154
- package/src/reanimated2/layoutReanimation/defaultAnimations/index.ts +4 -0
- 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 +3 -2
- package/src/reanimated2/platform-specific/RNRenderer.web.ts +2 -0
- package/src/reanimated2/utils.ts +21 -0
- package/android/react-native-reanimated-62-hermes.aar +0 -0
- package/android/react-native-reanimated-62-jsc.aar +0 -0
- package/ios/LayoutReanimation/REAAnimationRootView.h +0 -12
- package/ios/LayoutReanimation/REAAnimationRootView.m +0 -16
- package/ios/LayoutReanimation/REAAnimationRootViewManager.h +0 -9
- package/ios/LayoutReanimation/REAAnimationRootViewManager.m +0 -49
- package/ios/LayoutReanimation/REAReactBatchObserver.h +0 -20
- package/ios/LayoutReanimation/REAReactBatchObserver.m +0 -125
- package/ios/LayoutReanimation/REASnapshooter.h +0 -19
- package/ios/LayoutReanimation/REASnapshooter.m +0 -64
- package/ios/LayoutReanimation/REAViewTraverser.h +0 -13
- package/ios/LayoutReanimation/REAViewTraverser.m +0 -40
- package/lib/reanimated2/Hooks.js +0 -732
- package/lib/reanimated2/NativeReanimated.js +0 -4
- package/lib/reanimated2/animations.js +0 -713
- package/lib/reanimated2/js-reanimated/index.web.js +0 -20
- package/lib/reanimated2/layoutReanimation/AnimatedRoot.js +0 -55
- package/lib/reanimated2/layoutReanimation/defaultAnimationsBuilder.js +0 -374
- package/src/reanimated2/Hooks.ts +0 -918
- package/src/reanimated2/NativeReanimated.native.ts +0 -61
- package/src/reanimated2/NativeReanimated.ts +0 -5
- package/src/reanimated2/animations.ts +0 -868
- package/src/reanimated2/js-reanimated/index.js +0 -0
- package/src/reanimated2/js-reanimated/index.web.ts +0 -29
- package/src/reanimated2/layoutReanimation/AnimatedRoot.tsx +0 -68
- package/src/reanimated2/layoutReanimation/defaultAnimationsBuilder.ts +0 -440
package/plugin.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
const generate = require('@babel/generator').default;
|
|
3
3
|
const hash = require('string-hash-64');
|
|
4
|
-
const { visitors } = require('@babel/traverse');
|
|
5
4
|
const traverse = require('@babel/traverse').default;
|
|
6
|
-
const
|
|
5
|
+
const { transformSync } = require('@babel/core');
|
|
7
6
|
/**
|
|
8
7
|
* holds a map of function names as keys and array of argument indexes as values which should be automatically workletized(they have to be functions)(starting from 0)
|
|
9
8
|
*/
|
|
@@ -35,6 +34,15 @@ const globals = new Set([
|
|
|
35
34
|
'Date',
|
|
36
35
|
'Array',
|
|
37
36
|
'ArrayBuffer',
|
|
37
|
+
'Int8Array',
|
|
38
|
+
'Int16Array',
|
|
39
|
+
'Int32Array',
|
|
40
|
+
'Uint8Array',
|
|
41
|
+
'Uint8ClampedArray',
|
|
42
|
+
'Uint16Array',
|
|
43
|
+
'Uint32Array',
|
|
44
|
+
'Float32Array',
|
|
45
|
+
'Float64Array',
|
|
38
46
|
'Date',
|
|
39
47
|
'HermesInternal',
|
|
40
48
|
'JSON',
|
|
@@ -122,10 +130,78 @@ const blacklistedFunctions = new Set([
|
|
|
122
130
|
'apply',
|
|
123
131
|
'call',
|
|
124
132
|
'__callAsync',
|
|
133
|
+
'includes',
|
|
125
134
|
]);
|
|
126
135
|
|
|
127
136
|
const possibleOptFunction = new Set(['interpolate']);
|
|
128
137
|
|
|
138
|
+
const gestureHandlerGestureObjects = new Set([
|
|
139
|
+
// from https://github.com/software-mansion/react-native-gesture-handler/blob/new-api/src/handlers/gestures/gestureObjects.ts
|
|
140
|
+
'Tap',
|
|
141
|
+
'Pan',
|
|
142
|
+
'Pinch',
|
|
143
|
+
'Rotation',
|
|
144
|
+
'Fling',
|
|
145
|
+
'LongPress',
|
|
146
|
+
'ForceTouch',
|
|
147
|
+
'Native',
|
|
148
|
+
'Race',
|
|
149
|
+
'Simultaneous',
|
|
150
|
+
'Exclusive',
|
|
151
|
+
]);
|
|
152
|
+
|
|
153
|
+
const gestureHandlerBuilderMethods = new Set([
|
|
154
|
+
// BaseGesture
|
|
155
|
+
'withRef',
|
|
156
|
+
'onBegan',
|
|
157
|
+
'onStart',
|
|
158
|
+
'onEnd',
|
|
159
|
+
'enabled',
|
|
160
|
+
'shouldCancelWhenOutside',
|
|
161
|
+
'hitSlop',
|
|
162
|
+
'simultaneousWithExternalGesture',
|
|
163
|
+
'requireExternalGestureToFail',
|
|
164
|
+
|
|
165
|
+
// ContinousBaseGesture
|
|
166
|
+
'onUpdate',
|
|
167
|
+
|
|
168
|
+
// TapGesture
|
|
169
|
+
'minPointers',
|
|
170
|
+
'numberOfTaps',
|
|
171
|
+
'maxDistance',
|
|
172
|
+
'maxDuration',
|
|
173
|
+
'maxDelay',
|
|
174
|
+
'maxDeltaX',
|
|
175
|
+
'maxDeltaY',
|
|
176
|
+
|
|
177
|
+
// PanGesture
|
|
178
|
+
'activeOffsetY',
|
|
179
|
+
'activeOffsetX',
|
|
180
|
+
'failOffsetY',
|
|
181
|
+
'failOffsetX',
|
|
182
|
+
'minPointers',
|
|
183
|
+
'minDistance',
|
|
184
|
+
'averageTouches',
|
|
185
|
+
'enableTrackpadTwoFingerGesture',
|
|
186
|
+
|
|
187
|
+
// FlingGesture
|
|
188
|
+
'numberOfPointers',
|
|
189
|
+
'direction',
|
|
190
|
+
|
|
191
|
+
// LongPress
|
|
192
|
+
'minDuration',
|
|
193
|
+
'maxDistance',
|
|
194
|
+
|
|
195
|
+
// ForceTouchGesture:
|
|
196
|
+
'minForce',
|
|
197
|
+
'maxForce',
|
|
198
|
+
'feedbackOnActivation',
|
|
199
|
+
|
|
200
|
+
// NativeGesture
|
|
201
|
+
'shouldActivateOnStart',
|
|
202
|
+
'disallowInterruption',
|
|
203
|
+
]);
|
|
204
|
+
|
|
129
205
|
class ClosureGenerator {
|
|
130
206
|
constructor() {
|
|
131
207
|
this.trie = [{}, false];
|
|
@@ -258,7 +334,7 @@ function buildWorkletString(t, fun, closureVariables, name) {
|
|
|
258
334
|
]);
|
|
259
335
|
}
|
|
260
336
|
|
|
261
|
-
|
|
337
|
+
traverse(fun, {
|
|
262
338
|
enter(path) {
|
|
263
339
|
t.removeComments(path.node);
|
|
264
340
|
},
|
|
@@ -266,14 +342,17 @@ function buildWorkletString(t, fun, closureVariables, name) {
|
|
|
266
342
|
|
|
267
343
|
const workletFunction = t.functionExpression(
|
|
268
344
|
t.identifier(name),
|
|
269
|
-
fun.
|
|
270
|
-
prependClosureVariablesIfNecessary(
|
|
345
|
+
fun.program.body[0].expression.params,
|
|
346
|
+
prependClosureVariablesIfNecessary(
|
|
347
|
+
closureVariables,
|
|
348
|
+
fun.program.body[0].expression.body
|
|
349
|
+
)
|
|
271
350
|
);
|
|
272
351
|
|
|
273
352
|
return generate(workletFunction, { compact: true }).code;
|
|
274
353
|
}
|
|
275
354
|
|
|
276
|
-
function processWorkletFunction(t, fun, fileName
|
|
355
|
+
function processWorkletFunction(t, fun, fileName) {
|
|
277
356
|
if (!t.isFunctionParent(fun)) {
|
|
278
357
|
return;
|
|
279
358
|
}
|
|
@@ -282,12 +361,33 @@ function processWorkletFunction(t, fun, fileName, options = {}) {
|
|
|
282
361
|
const closure = new Map();
|
|
283
362
|
const outputs = new Set();
|
|
284
363
|
const closureGenerator = new ClosureGenerator();
|
|
364
|
+
const options = {};
|
|
285
365
|
|
|
286
366
|
// We use copy because some of the plugins don't update bindings and
|
|
287
367
|
// some even break them
|
|
288
|
-
const
|
|
289
|
-
|
|
290
|
-
|
|
368
|
+
const code = '\n(' + fun.toString() + '\n)';
|
|
369
|
+
const transformed = transformSync(code, {
|
|
370
|
+
filename: fileName,
|
|
371
|
+
presets: ['@babel/preset-typescript'],
|
|
372
|
+
plugins: [
|
|
373
|
+
'@babel/plugin-transform-shorthand-properties',
|
|
374
|
+
'@babel/plugin-transform-arrow-functions',
|
|
375
|
+
'@babel/plugin-proposal-optional-chaining',
|
|
376
|
+
'@babel/plugin-proposal-nullish-coalescing-operator',
|
|
377
|
+
['@babel/plugin-transform-template-literals', { loose: true }],
|
|
378
|
+
],
|
|
379
|
+
ast: true,
|
|
380
|
+
babelrc: false,
|
|
381
|
+
configFile: false,
|
|
382
|
+
});
|
|
383
|
+
if (
|
|
384
|
+
fun.parent &&
|
|
385
|
+
fun.parent.callee &&
|
|
386
|
+
fun.parent.callee.name === 'useAnimatedStyle'
|
|
387
|
+
) {
|
|
388
|
+
options.optFlags = isPossibleOptimization(transformed.ast);
|
|
389
|
+
}
|
|
390
|
+
traverse(transformed.ast, {
|
|
291
391
|
ReferencedIdentifier(path) {
|
|
292
392
|
const name = path.node.name;
|
|
293
393
|
if (globals.has(name) || (fun.node.id && fun.node.id.name === name)) {
|
|
@@ -347,9 +447,18 @@ function processWorkletFunction(t, fun, fileName, options = {}) {
|
|
|
347
447
|
|
|
348
448
|
const privateFunctionId = t.identifier('_f');
|
|
349
449
|
const clone = t.cloneNode(fun.node);
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
450
|
+
let funExpression;
|
|
451
|
+
if (clone.body.type === 'BlockStatement') {
|
|
452
|
+
funExpression = t.functionExpression(null, clone.params, clone.body);
|
|
453
|
+
} else {
|
|
454
|
+
funExpression = clone;
|
|
455
|
+
}
|
|
456
|
+
const funString = buildWorkletString(
|
|
457
|
+
t,
|
|
458
|
+
transformed.ast,
|
|
459
|
+
variables,
|
|
460
|
+
functionName
|
|
461
|
+
).replace("'worklet';", '');
|
|
353
462
|
const workletHash = hash(funString);
|
|
354
463
|
|
|
355
464
|
const loc = fun && fun.node && fun.node.loc && fun.node.loc.start;
|
|
@@ -473,18 +582,125 @@ function processIfWorkletNode(t, fun, fileName) {
|
|
|
473
582
|
directive.value.value === 'worklet'
|
|
474
583
|
)
|
|
475
584
|
) {
|
|
476
|
-
|
|
477
|
-
if (flags) {
|
|
478
|
-
processWorkletFunction(t, fun, fileName, { optFlags: flags });
|
|
479
|
-
} else {
|
|
480
|
-
processWorkletFunction(t, fun, fileName);
|
|
481
|
-
}
|
|
585
|
+
processWorkletFunction(t, fun, fileName);
|
|
482
586
|
}
|
|
483
587
|
}
|
|
484
588
|
},
|
|
485
589
|
});
|
|
486
590
|
}
|
|
487
591
|
|
|
592
|
+
function processIfGestureHandlerEventCallbackFunctionNode(t, fun, fileName) {
|
|
593
|
+
// Auto-workletizes React Native Gesture Handler callback functions.
|
|
594
|
+
// Detects `Gesture.Tap().onEnd(<fun>)` or similar, but skips `something.onEnd(<fun>)`.
|
|
595
|
+
// Supports method chaining as well, e.g. `Gesture.Tap().onStart(<fun1>).onUpdate(<fun2>).onEnd(<fun3>)`.
|
|
596
|
+
|
|
597
|
+
// Example #1: `Gesture.Tap().onEnd(<fun>)`
|
|
598
|
+
/*
|
|
599
|
+
CallExpression(
|
|
600
|
+
callee: MemberExpression(
|
|
601
|
+
object: CallExpression(
|
|
602
|
+
callee: MemberExpression(
|
|
603
|
+
object: Identifier('Gesture')
|
|
604
|
+
property: Identifier('Tap')
|
|
605
|
+
)
|
|
606
|
+
)
|
|
607
|
+
property: Identifier('onEnd')
|
|
608
|
+
)
|
|
609
|
+
arguments: [fun]
|
|
610
|
+
)
|
|
611
|
+
*/
|
|
612
|
+
|
|
613
|
+
// Example #2: `Gesture.Tap().onStart(<fun1>).onUpdate(<fun2>).onEnd(<fun3>)`
|
|
614
|
+
/*
|
|
615
|
+
CallExpression(
|
|
616
|
+
callee: MemberExpression(
|
|
617
|
+
object: CallExpression(
|
|
618
|
+
callee: MemberExpression(
|
|
619
|
+
object: CallExpression(
|
|
620
|
+
callee: MemberExpression(
|
|
621
|
+
object: CallExpression(
|
|
622
|
+
callee: MemberExpression(
|
|
623
|
+
object: Identifier('Gesture')
|
|
624
|
+
property: Identifier('Tap')
|
|
625
|
+
)
|
|
626
|
+
)
|
|
627
|
+
property: Identifier('onStart')
|
|
628
|
+
)
|
|
629
|
+
arguments: [fun1]
|
|
630
|
+
)
|
|
631
|
+
property: Identifier('onUpdate')
|
|
632
|
+
)
|
|
633
|
+
arguments: [fun2]
|
|
634
|
+
)
|
|
635
|
+
property: Identifier('onEnd')
|
|
636
|
+
)
|
|
637
|
+
arguments: [fun3]
|
|
638
|
+
)
|
|
639
|
+
*/
|
|
640
|
+
|
|
641
|
+
if (
|
|
642
|
+
t.isCallExpression(fun.parent) &&
|
|
643
|
+
isGestureObjectEventCallbackMethod(t, fun.parent.callee)
|
|
644
|
+
) {
|
|
645
|
+
processWorkletFunction(t, fun, fileName);
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
function isGestureObjectEventCallbackMethod(t, node) {
|
|
650
|
+
// Checks if node matches the pattern `Gesture.Foo()[*].onBar`
|
|
651
|
+
// where `[*]` represents any number of `.onBar(...)` or similar method calls.
|
|
652
|
+
/*
|
|
653
|
+
node: MemberExpression(
|
|
654
|
+
object: CallExpression(
|
|
655
|
+
callee: MemberExpression(
|
|
656
|
+
object: Identifier('Gesture')
|
|
657
|
+
property: Identifier('Tap')
|
|
658
|
+
)
|
|
659
|
+
)
|
|
660
|
+
property: Identifier('onEnd')
|
|
661
|
+
)
|
|
662
|
+
*/
|
|
663
|
+
if (
|
|
664
|
+
t.isMemberExpression(node) &&
|
|
665
|
+
t.isIdentifier(node.property) &&
|
|
666
|
+
gestureHandlerBuilderMethods.has(node.property.name)
|
|
667
|
+
) {
|
|
668
|
+
// direct call
|
|
669
|
+
if (isGestureObject(t, node.object)) {
|
|
670
|
+
return true;
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
// method chaining
|
|
674
|
+
if (
|
|
675
|
+
t.isCallExpression(node.object) &&
|
|
676
|
+
isGestureObjectEventCallbackMethod(t, node.object.callee)
|
|
677
|
+
) {
|
|
678
|
+
return true;
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
return false;
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
function isGestureObject(t, node) {
|
|
685
|
+
// Checks if node matches `Gesture.Tap()` or similar.
|
|
686
|
+
/*
|
|
687
|
+
node: CallExpression(
|
|
688
|
+
callee: MemberExpression(
|
|
689
|
+
object: Identifier('Gesture')
|
|
690
|
+
property: Identifier('Tap')
|
|
691
|
+
)
|
|
692
|
+
)
|
|
693
|
+
*/
|
|
694
|
+
return (
|
|
695
|
+
t.isCallExpression(node) &&
|
|
696
|
+
t.isMemberExpression(node.callee) &&
|
|
697
|
+
t.isIdentifier(node.callee.object) &&
|
|
698
|
+
node.callee.object.name === 'Gesture' &&
|
|
699
|
+
t.isIdentifier(node.callee.property) &&
|
|
700
|
+
gestureHandlerGestureObjects.has(node.callee.property.name)
|
|
701
|
+
);
|
|
702
|
+
}
|
|
703
|
+
|
|
488
704
|
function processWorklets(t, path, fileName) {
|
|
489
705
|
const name =
|
|
490
706
|
path.node.callee.type === 'MemberExpression'
|
|
@@ -516,13 +732,13 @@ function processWorklets(t, path, fileName) {
|
|
|
516
732
|
}
|
|
517
733
|
}
|
|
518
734
|
|
|
519
|
-
const FUNCTIONLESS_FLAG =
|
|
520
|
-
const STATEMENTLESS_FLAG =
|
|
735
|
+
const FUNCTIONLESS_FLAG = 0b00000001;
|
|
736
|
+
const STATEMENTLESS_FLAG = 0b00000010;
|
|
521
737
|
|
|
522
738
|
function isPossibleOptimization(fun) {
|
|
523
739
|
let isFunctionCall = false;
|
|
524
740
|
let isSteatements = false;
|
|
525
|
-
|
|
741
|
+
traverse(fun, {
|
|
526
742
|
CallExpression(path) {
|
|
527
743
|
if (!possibleOptFunction.has(path.node.callee.name)) {
|
|
528
744
|
isFunctionCall = true;
|
|
@@ -542,86 +758,29 @@ function isPossibleOptimization(fun) {
|
|
|
542
758
|
return flags;
|
|
543
759
|
}
|
|
544
760
|
|
|
545
|
-
const PLUGIN_BLACKLIST_NAMES = ['@babel/plugin-transform-object-assign'];
|
|
546
|
-
|
|
547
|
-
const PLUGIN_BLACKLIST = PLUGIN_BLACKLIST_NAMES.map((pluginName) => {
|
|
548
|
-
try {
|
|
549
|
-
const blacklistedPluginObject = require(pluginName);
|
|
550
|
-
// All Babel polyfills use the declare method that's why we can create them like that.
|
|
551
|
-
// https://github.com/babel/babel/blob/32279147e6a69411035dd6c43dc819d668c74466/packages/babel-helper-plugin-utils/src/index.js#L1
|
|
552
|
-
const blacklistedPlugin = blacklistedPluginObject.default({
|
|
553
|
-
assertVersion: (_x) => true,
|
|
554
|
-
});
|
|
555
|
-
|
|
556
|
-
visitors.explode(blacklistedPlugin.visitor);
|
|
557
|
-
return blacklistedPlugin;
|
|
558
|
-
} catch (e) {
|
|
559
|
-
console.warn(`Plugin ${pluginName} couldn't be removed!`);
|
|
560
|
-
}
|
|
561
|
-
});
|
|
562
|
-
|
|
563
|
-
// plugin objects are created by babel internals and they don't carry any identifier
|
|
564
|
-
function removePluginsFromBlacklist(plugins) {
|
|
565
|
-
PLUGIN_BLACKLIST.forEach((blacklistedPlugin) => {
|
|
566
|
-
if (!blacklistedPlugin) {
|
|
567
|
-
return;
|
|
568
|
-
}
|
|
569
|
-
|
|
570
|
-
const toRemove = [];
|
|
571
|
-
for (let i = 0; i < plugins.length; i++) {
|
|
572
|
-
if (
|
|
573
|
-
JSON.stringify(Object.keys(plugins[i].visitor)) !==
|
|
574
|
-
JSON.stringify(Object.keys(blacklistedPlugin.visitor))
|
|
575
|
-
) {
|
|
576
|
-
continue;
|
|
577
|
-
}
|
|
578
|
-
let areEqual = true;
|
|
579
|
-
for (const key of Object.keys(blacklistedPlugin.visitor)) {
|
|
580
|
-
if (
|
|
581
|
-
blacklistedPlugin.visitor[key].toString() !==
|
|
582
|
-
plugins[i].visitor[key].toString()
|
|
583
|
-
) {
|
|
584
|
-
areEqual = false;
|
|
585
|
-
break;
|
|
586
|
-
}
|
|
587
|
-
}
|
|
588
|
-
|
|
589
|
-
if (areEqual) {
|
|
590
|
-
toRemove.push(i);
|
|
591
|
-
}
|
|
592
|
-
}
|
|
593
|
-
|
|
594
|
-
toRemove.forEach((x) => plugins.splice(x, 1));
|
|
595
|
-
});
|
|
596
|
-
}
|
|
597
|
-
|
|
598
761
|
module.exports = function ({ types: t }) {
|
|
599
762
|
return {
|
|
600
763
|
pre() {
|
|
601
764
|
// allows adding custom globals such as host-functions
|
|
602
765
|
if (this.opts != null && Array.isArray(this.opts.globals)) {
|
|
603
766
|
this.opts.globals.forEach((name) => {
|
|
604
|
-
globals.add(name)
|
|
605
|
-
})
|
|
767
|
+
globals.add(name);
|
|
768
|
+
});
|
|
606
769
|
}
|
|
607
770
|
},
|
|
608
771
|
visitor: {
|
|
609
772
|
CallExpression: {
|
|
610
|
-
|
|
773
|
+
enter(path, state) {
|
|
611
774
|
processWorklets(t, path, state.file.opts.filename);
|
|
612
775
|
},
|
|
613
776
|
},
|
|
614
777
|
'FunctionDeclaration|FunctionExpression|ArrowFunctionExpression': {
|
|
615
|
-
|
|
616
|
-
|
|
778
|
+
enter(path, state) {
|
|
779
|
+
const fileName = state.file.opts.filename;
|
|
780
|
+
processIfWorkletNode(t, path, fileName);
|
|
781
|
+
processIfGestureHandlerEventCallbackFunctionNode(t, path, fileName);
|
|
617
782
|
},
|
|
618
783
|
},
|
|
619
784
|
},
|
|
620
|
-
// In this way we can modify babel options
|
|
621
|
-
// https://github.com/babel/babel/blob/eea156b2cb8deecfcf82d52aa1b71ba4995c7d68/packages/babel-core/src/transformation/normalize-opts.js#L64
|
|
622
|
-
manipulateOptions(opts, _) {
|
|
623
|
-
const plugins = opts.plugins;
|
|
624
|
-
removePluginsFromBlacklist(plugins);
|
|
625
|
-
},
|
|
626
785
|
};
|
|
627
786
|
};
|