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.
Files changed (328) hide show
  1. package/Common/cpp/LayoutAnimations/LayoutAnimationsProxy.cpp +15 -8
  2. package/Common/cpp/NativeModules/NativeReanimatedModule.cpp +170 -166
  3. package/Common/cpp/NativeModules/NativeReanimatedModuleSpec.cpp +36 -34
  4. package/Common/cpp/Registries/EventHandlerRegistry.cpp +13 -6
  5. package/Common/cpp/Registries/MapperRegistry.cpp +19 -15
  6. package/Common/cpp/Registries/WorkletsCache.cpp +19 -9
  7. package/Common/cpp/SharedItems/FrozenObject.cpp +19 -8
  8. package/Common/cpp/SharedItems/MutableValue.cpp +38 -25
  9. package/Common/cpp/SharedItems/MutableValueSetterProxy.cpp +11 -7
  10. package/Common/cpp/SharedItems/RemoteObject.cpp +9 -5
  11. package/Common/cpp/SharedItems/ShareableValue.cpp +216 -143
  12. package/Common/cpp/Tools/JSIStoreValueUser.cpp +36 -24
  13. package/Common/cpp/Tools/Mapper.cpp +41 -29
  14. package/Common/cpp/Tools/RuntimeDecorator.cpp +103 -84
  15. package/Common/cpp/Tools/Scheduler.cpp +14 -6
  16. package/Common/cpp/Tools/WorkletEventHandler.cpp +1 -1
  17. package/Common/cpp/headers/LayoutAnimations/LayoutAnimationsProxy.h +12 -11
  18. package/Common/cpp/headers/NativeModules/NativeReanimatedModule.h +45 -34
  19. package/Common/cpp/headers/NativeModules/NativeReanimatedModuleSpec.h +28 -16
  20. package/Common/cpp/headers/Registries/EventHandlerRegistry.h +14 -8
  21. package/Common/cpp/headers/Registries/MapperRegistry.h +4 -4
  22. package/Common/cpp/headers/Registries/WorkletsCache.h +9 -7
  23. package/Common/cpp/headers/SharedItems/FrozenObject.h +15 -11
  24. package/Common/cpp/headers/SharedItems/HostFunctionHandler.h +6 -4
  25. package/Common/cpp/headers/SharedItems/MutableValue.h +21 -12
  26. package/Common/cpp/headers/SharedItems/MutableValueSetterProxy.h +10 -7
  27. package/Common/cpp/headers/SharedItems/RemoteObject.h +16 -8
  28. package/Common/cpp/headers/SharedItems/RuntimeManager.h +39 -21
  29. package/Common/cpp/headers/SharedItems/ShareableValue.h +31 -27
  30. package/Common/cpp/headers/SharedItems/SharedParent.h +7 -4
  31. package/Common/cpp/headers/SharedItems/ValueWrapper.h +80 -61
  32. package/Common/cpp/headers/SpecTools/ErrorHandler.h +17 -19
  33. package/Common/cpp/headers/Tools/JSIStoreValueUser.h +18 -13
  34. package/Common/cpp/headers/Tools/Mapper.h +24 -18
  35. package/Common/cpp/headers/Tools/PlatformDepMethodsHolder.h +12 -7
  36. package/Common/cpp/headers/Tools/ReanimatedHiddenHeaders.h +7 -7
  37. package/Common/cpp/headers/Tools/RuntimeDecorator.h +29 -23
  38. package/Common/cpp/headers/Tools/Scheduler.h +28 -33
  39. package/Common/cpp/headers/Tools/WorkletEventHandler.h +9 -7
  40. package/Common/cpp/hidden_headers/Logger.h +14 -14
  41. package/Common/cpp/hidden_headers/LoggerInterface.h +8 -9
  42. package/Common/cpp/hidden_headers/SpeedChecker.h +7 -8
  43. package/README.md +1 -1
  44. package/RNReanimated.podspec +4 -4
  45. package/android/build.gradle +80 -3
  46. package/android/react-native-reanimated-63-hermes.aar +0 -0
  47. package/android/react-native-reanimated-63-jsc.aar +0 -0
  48. package/android/react-native-reanimated-64-hermes.aar +0 -0
  49. package/android/react-native-reanimated-64-jsc.aar +0 -0
  50. package/android/react-native-reanimated-65-hermes.aar +0 -0
  51. package/android/react-native-reanimated-65-jsc.aar +0 -0
  52. package/android/react-native-reanimated-66-hermes.aar +0 -0
  53. package/android/react-native-reanimated-66-jsc.aar +0 -0
  54. package/ios/LayoutReanimation/REAAnimationsManager.h +19 -10
  55. package/ios/LayoutReanimation/REAAnimationsManager.m +195 -200
  56. package/ios/LayoutReanimation/REASnapshot.h +13 -0
  57. package/ios/LayoutReanimation/REASnapshot.m +29 -0
  58. package/ios/LayoutReanimation/REAUIManager.h +16 -0
  59. package/ios/LayoutReanimation/REAUIManager.mm +348 -0
  60. package/ios/Nodes/REAAlwaysNode.m +14 -15
  61. package/ios/Nodes/REABezierNode.m +8 -7
  62. package/ios/Nodes/REABlockNode.m +1 -1
  63. package/ios/Nodes/REACallFuncNode.h +0 -1
  64. package/ios/Nodes/REACallFuncNode.m +10 -8
  65. package/ios/Nodes/REAClockNodes.m +22 -20
  66. package/ios/Nodes/REAConcatNode.h +0 -1
  67. package/ios/Nodes/REAConcatNode.m +2 -2
  68. package/ios/Nodes/REACondNode.m +7 -5
  69. package/ios/Nodes/READebugNode.m +5 -4
  70. package/ios/Nodes/REAEventNode.m +1 -1
  71. package/ios/Nodes/REAFunctionNode.h +0 -1
  72. package/ios/Nodes/REAFunctionNode.m +2 -2
  73. package/ios/Nodes/REAJSCallNode.m +4 -5
  74. package/ios/Nodes/REANode.h +3 -4
  75. package/ios/Nodes/REANode.m +9 -11
  76. package/ios/Nodes/REAOperatorNode.m +68 -67
  77. package/ios/Nodes/REAParamNode.h +1 -3
  78. package/ios/Nodes/REAParamNode.m +15 -17
  79. package/ios/Nodes/REAPropsNode.h +1 -3
  80. package/ios/Nodes/REAPropsNode.m +19 -22
  81. package/ios/Nodes/REASetNode.h +0 -1
  82. package/ios/Nodes/REASetNode.m +7 -5
  83. package/ios/Nodes/REAStyleNode.h +0 -1
  84. package/ios/Nodes/REAStyleNode.m +2 -4
  85. package/ios/Nodes/REATransformNode.h +0 -1
  86. package/ios/Nodes/REATransformNode.m +3 -5
  87. package/ios/Nodes/REAValueNode.m +5 -7
  88. package/ios/REAEventDispatcher.m +3 -3
  89. package/ios/REAModule.h +0 -2
  90. package/ios/REAModule.m +29 -40
  91. package/ios/REANodesManager.h +11 -19
  92. package/ios/REANodesManager.m +105 -130
  93. package/ios/REAUtils.h +5 -3
  94. package/ios/Transitioning/RCTConvert+REATransition.m +45 -29
  95. package/ios/Transitioning/REAAllTransitions.h +2 -2
  96. package/ios/Transitioning/REAAllTransitions.m +14 -25
  97. package/ios/Transitioning/REATransition.h +8 -7
  98. package/ios/Transitioning/REATransition.m +19 -16
  99. package/ios/Transitioning/REATransitionAnimation.h +1 -1
  100. package/ios/Transitioning/REATransitionAnimation.m +2 -3
  101. package/ios/Transitioning/REATransitionManager.m +3 -3
  102. package/ios/native/NativeMethods.h +15 -5
  103. package/ios/native/NativeProxy.h +4 -3
  104. package/ios/native/NativeProxy.mm +19 -5
  105. package/ios/native/REAIOSErrorHandler.h +13 -10
  106. package/ios/native/REAIOSLogger.h +8 -8
  107. package/ios/native/REAIOSScheduler.h +5 -5
  108. package/ios/native/REAIOSScheduler.mm +7 -5
  109. package/ios/native/REAInitializer.h +37 -0
  110. package/ios/native/REAInitializer.mm +63 -0
  111. package/ios/native/UIResponder+Reanimated.mm +9 -48
  112. package/lib/ConfigHelper.js +1 -0
  113. package/lib/ReanimatedModule.native.js +10 -2
  114. package/lib/createAnimatedComponent.js +64 -30
  115. package/lib/reanimated1/core/AnimatedAlways.js +1 -1
  116. package/lib/reanimated1/core/AnimatedBezier.js +1 -1
  117. package/lib/reanimated1/core/AnimatedBlock.js +1 -1
  118. package/lib/reanimated1/core/AnimatedCall.js +1 -1
  119. package/lib/reanimated1/core/AnimatedCallFunc.js +1 -1
  120. package/lib/reanimated1/core/AnimatedConcat.js +1 -1
  121. package/lib/reanimated1/core/AnimatedCond.js +1 -1
  122. package/lib/reanimated1/core/AnimatedDebug.js +1 -1
  123. package/lib/reanimated1/core/AnimatedEvent.js +1 -1
  124. package/lib/reanimated1/core/AnimatedFunction.js +1 -1
  125. package/lib/reanimated1/core/AnimatedOperator.js +1 -1
  126. package/lib/reanimated1/core/AnimatedParam.js +1 -1
  127. package/lib/reanimated1/core/AnimatedProps.js +2 -2
  128. package/lib/reanimated1/core/AnimatedSet.js +1 -1
  129. package/lib/reanimated1/core/AnimatedStartClock.js +1 -1
  130. package/lib/reanimated1/core/AnimatedStopClock.js +1 -1
  131. package/lib/reanimated1/core/AnimatedStyle.js +1 -1
  132. package/lib/reanimated1/core/AnimatedTransform.js +1 -1
  133. package/lib/reanimated1/core/Core.test.js +30 -0
  134. package/lib/reanimated1/core/InternalAnimatedValue.js +1 -1
  135. package/lib/reanimated1/core/__mocks__/AnimatedProps.js +1 -1
  136. package/lib/reanimated1/derived/interpolate.js +1 -1
  137. package/lib/reanimated2/Colors.js +16 -12
  138. package/lib/reanimated2/NativeMethods.js +3 -14
  139. package/lib/reanimated2/{NativeReanimated.native.js → NativeReanimated/NativeReanimated.js} +19 -24
  140. package/lib/reanimated2/NativeReanimated/index.js +15 -0
  141. package/lib/reanimated2/PlatformChecker.js +16 -0
  142. package/lib/reanimated2/PropAdapters.js +14 -4
  143. package/lib/reanimated2/UpdateProps.js +14 -11
  144. package/lib/reanimated2/ViewDescriptorsSet.js +73 -0
  145. package/lib/reanimated2/WorkletEventHandler.js +15 -13
  146. package/lib/reanimated2/animation/commonTypes.js +1 -0
  147. package/lib/reanimated2/animation/decay.js +71 -0
  148. package/lib/reanimated2/animation/delay.js +64 -0
  149. package/lib/reanimated2/animation/index.js +8 -0
  150. package/lib/reanimated2/animation/repeat.js +69 -0
  151. package/lib/reanimated2/animation/sequence.js +72 -0
  152. package/lib/reanimated2/animation/spring.js +101 -0
  153. package/lib/reanimated2/animation/styleAnimation.js +166 -0
  154. package/lib/reanimated2/animation/timing.js +64 -0
  155. package/lib/reanimated2/animation/util.js +157 -0
  156. package/lib/reanimated2/commonTypes.js +1 -0
  157. package/lib/reanimated2/core.js +35 -39
  158. package/lib/reanimated2/globals.d.ts +47 -1
  159. package/lib/reanimated2/hook/Hooks.js +9 -0
  160. package/lib/reanimated2/hook/commonTypes.js +1 -0
  161. package/lib/reanimated2/hook/index.js +8 -0
  162. package/lib/reanimated2/hook/useAnimatedGestureHandler.js +50 -0
  163. package/lib/reanimated2/hook/useAnimatedReaction.js +37 -0
  164. package/lib/reanimated2/hook/useAnimatedRef.js +25 -0
  165. package/lib/reanimated2/hook/useAnimatedScrollHandler.js +41 -0
  166. package/lib/reanimated2/hook/useAnimatedStyle.js +376 -0
  167. package/lib/reanimated2/hook/useDerivedValue.js +36 -0
  168. package/lib/reanimated2/hook/useSharedValue.js +17 -0
  169. package/lib/reanimated2/hook/utils.js +175 -0
  170. package/lib/reanimated2/index.js +3 -2
  171. package/lib/reanimated2/interpolation.js +95 -86
  172. package/lib/reanimated2/jestUtils.js +0 -12
  173. package/lib/reanimated2/js-reanimated/JSReanimated.js +9 -10
  174. package/lib/reanimated2/js-reanimated/index.js +57 -1
  175. package/lib/reanimated2/layoutReanimation/LayoutAnimationRepository.js +58 -0
  176. package/lib/reanimated2/layoutReanimation/animationBuilder/BaseAnimationBuilder.js +69 -0
  177. package/lib/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.js +125 -0
  178. package/lib/reanimated2/layoutReanimation/animationBuilder/Keyframe.js +193 -0
  179. package/lib/reanimated2/layoutReanimation/animationBuilder/commonTypes.js +1 -0
  180. package/lib/reanimated2/layoutReanimation/animationBuilder/index.js +3 -0
  181. package/lib/reanimated2/layoutReanimation/defaultAnimations/Bounce.js +325 -207
  182. package/lib/reanimated2/layoutReanimation/defaultAnimations/Default.js +36 -0
  183. package/lib/reanimated2/layoutReanimation/defaultAnimations/Fade.js +235 -187
  184. package/lib/reanimated2/layoutReanimation/defaultAnimations/Flip.js +327 -269
  185. package/lib/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js +146 -0
  186. package/lib/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.js +85 -0
  187. package/lib/reanimated2/layoutReanimation/defaultAnimations/Roll.js +119 -0
  188. package/lib/reanimated2/layoutReanimation/defaultAnimations/Rotate.js +289 -0
  189. package/lib/reanimated2/layoutReanimation/defaultAnimations/Slide.js +159 -121
  190. package/lib/reanimated2/layoutReanimation/defaultAnimations/Stretch.js +83 -65
  191. package/lib/reanimated2/layoutReanimation/defaultAnimations/Zoom.js +371 -277
  192. package/lib/reanimated2/layoutReanimation/defaultAnimations/index.js +4 -0
  193. package/lib/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.js +78 -0
  194. package/lib/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.js +128 -0
  195. package/lib/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.js +37 -0
  196. package/lib/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.js +41 -0
  197. package/lib/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.js +34 -0
  198. package/lib/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.js +46 -0
  199. package/lib/reanimated2/layoutReanimation/defaultTransitions/index.js +6 -0
  200. package/lib/reanimated2/layoutReanimation/index.js +3 -2
  201. package/lib/reanimated2/platform-specific/RNRenderer.web.js +2 -0
  202. package/lib/reanimated2/utils.js +9 -0
  203. package/libSo/fbjni/jni/arm64-v8a/libfbjni.so +0 -0
  204. package/libSo/fbjni/jni/armeabi-v7a/libfbjni.so +0 -0
  205. package/libSo/fbjni/jni/x86/libfbjni.so +0 -0
  206. package/libSo/fbjni/jni/x86_64/libfbjni.so +0 -0
  207. package/package.json +21 -10
  208. package/plugin.js +244 -85
  209. package/react-native-reanimated.d.ts +531 -453
  210. package/src/ConfigHelper.js +1 -0
  211. package/src/ReanimatedModule.native.js +10 -2
  212. package/src/createAnimatedComponent.js +64 -30
  213. package/src/reanimated1/core/AnimatedAlways.js +1 -1
  214. package/src/reanimated1/core/AnimatedBezier.js +1 -1
  215. package/src/reanimated1/core/AnimatedBlock.js +1 -1
  216. package/src/reanimated1/core/AnimatedCall.js +1 -1
  217. package/src/reanimated1/core/AnimatedCallFunc.js +1 -1
  218. package/src/reanimated1/core/AnimatedConcat.js +1 -1
  219. package/src/reanimated1/core/AnimatedCond.js +1 -1
  220. package/src/reanimated1/core/AnimatedDebug.js +1 -1
  221. package/src/reanimated1/core/AnimatedEvent.js +1 -1
  222. package/src/reanimated1/core/AnimatedFunction.js +1 -1
  223. package/src/reanimated1/core/AnimatedOperator.js +1 -1
  224. package/src/reanimated1/core/AnimatedParam.js +1 -1
  225. package/src/reanimated1/core/AnimatedProps.js +2 -2
  226. package/src/reanimated1/core/AnimatedSet.js +1 -1
  227. package/src/reanimated1/core/AnimatedStartClock.js +1 -1
  228. package/src/reanimated1/core/AnimatedStopClock.js +1 -1
  229. package/src/reanimated1/core/AnimatedStyle.js +1 -1
  230. package/src/reanimated1/core/AnimatedTransform.js +1 -1
  231. package/src/reanimated1/core/Core.test.js +30 -0
  232. package/src/reanimated1/core/InternalAnimatedValue.js +1 -1
  233. package/src/reanimated1/core/__mocks__/AnimatedProps.js +1 -1
  234. package/src/reanimated1/derived/interpolate.js +1 -1
  235. package/src/reanimated2/Colors.ts +30 -27
  236. package/src/reanimated2/Easing.ts +3 -1
  237. package/src/reanimated2/NativeMethods.ts +26 -16
  238. package/src/reanimated2/NativeReanimated/NativeReanimated.ts +78 -0
  239. package/src/reanimated2/NativeReanimated/index.ts +18 -0
  240. package/src/reanimated2/PlatformChecker.ts +21 -0
  241. package/src/reanimated2/PropAdapters.ts +52 -34
  242. package/src/reanimated2/UpdateProps.ts +40 -20
  243. package/src/reanimated2/ViewDescriptorsSet.ts +108 -0
  244. package/src/reanimated2/WorkletEventHandler.ts +41 -23
  245. package/src/reanimated2/animation/commonTypes.ts +48 -0
  246. package/src/reanimated2/animation/decay.ts +141 -0
  247. package/src/reanimated2/animation/delay.ts +103 -0
  248. package/src/reanimated2/animation/index.ts +16 -0
  249. package/src/reanimated2/animation/repeat.ts +128 -0
  250. package/src/reanimated2/animation/sequence.ts +110 -0
  251. package/src/reanimated2/animation/spring.ts +165 -0
  252. package/src/reanimated2/animation/styleAnimation.ts +253 -0
  253. package/src/reanimated2/animation/timing.ts +109 -0
  254. package/src/reanimated2/animation/util.ts +242 -0
  255. package/src/reanimated2/commonTypes.ts +81 -0
  256. package/src/reanimated2/core.ts +128 -82
  257. package/src/reanimated2/globals.d.ts +47 -1
  258. package/src/reanimated2/hook/Hooks.ts +16 -0
  259. package/src/reanimated2/hook/commonTypes.ts +12 -0
  260. package/src/reanimated2/hook/index.ts +25 -0
  261. package/src/reanimated2/hook/useAnimatedGestureHandler.ts +110 -0
  262. package/src/reanimated2/hook/useAnimatedReaction.ts +49 -0
  263. package/src/reanimated2/hook/useAnimatedRef.ts +34 -0
  264. package/src/reanimated2/hook/useAnimatedScrollHandler.ts +83 -0
  265. package/src/reanimated2/hook/useAnimatedStyle.ts +538 -0
  266. package/src/reanimated2/hook/useDerivedValue.ts +48 -0
  267. package/src/reanimated2/hook/useSharedValue.ts +22 -0
  268. package/src/reanimated2/hook/utils.ts +259 -0
  269. package/src/reanimated2/index.ts +3 -2
  270. package/src/reanimated2/interpolation.ts +170 -101
  271. package/src/reanimated2/jestUtils.ts +0 -12
  272. package/src/reanimated2/js-reanimated/JSReanimated.ts +47 -22
  273. package/src/reanimated2/js-reanimated/Mapper.ts +1 -1
  274. package/src/reanimated2/js-reanimated/index.ts +71 -0
  275. package/src/reanimated2/layoutReanimation/LayoutAnimationRepository.tsx +62 -0
  276. package/src/reanimated2/layoutReanimation/animationBuilder/BaseAnimationBuilder.ts +91 -0
  277. package/src/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.ts +169 -0
  278. package/src/reanimated2/layoutReanimation/animationBuilder/Keyframe.ts +263 -0
  279. package/src/reanimated2/layoutReanimation/animationBuilder/commonTypes.ts +78 -0
  280. package/src/reanimated2/layoutReanimation/animationBuilder/index.ts +16 -0
  281. package/src/reanimated2/layoutReanimation/defaultAnimations/Bounce.ts +243 -121
  282. package/src/reanimated2/layoutReanimation/defaultAnimations/Default.ts +43 -0
  283. package/src/reanimated2/layoutReanimation/defaultAnimations/Fade.ts +95 -53
  284. package/src/reanimated2/layoutReanimation/defaultAnimations/Flip.ts +114 -64
  285. package/src/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.ts +179 -0
  286. package/src/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.ts +93 -0
  287. package/src/reanimated2/layoutReanimation/defaultAnimations/Roll.ts +132 -0
  288. package/src/reanimated2/layoutReanimation/defaultAnimations/Rotate.ts +333 -0
  289. package/src/reanimated2/layoutReanimation/defaultAnimations/Slide.ts +84 -50
  290. package/src/reanimated2/layoutReanimation/defaultAnimations/Stretch.ts +41 -23
  291. package/src/reanimated2/layoutReanimation/defaultAnimations/Zoom.ts +234 -154
  292. package/src/reanimated2/layoutReanimation/defaultAnimations/index.ts +4 -0
  293. package/src/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.ts +104 -0
  294. package/src/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.ts +213 -0
  295. package/src/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.ts +60 -0
  296. package/src/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.ts +58 -0
  297. package/src/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.ts +41 -0
  298. package/src/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.ts +78 -0
  299. package/src/reanimated2/layoutReanimation/defaultTransitions/index.ts +6 -0
  300. package/src/reanimated2/layoutReanimation/index.ts +3 -2
  301. package/src/reanimated2/platform-specific/RNRenderer.web.ts +2 -0
  302. package/src/reanimated2/utils.ts +21 -0
  303. package/android/react-native-reanimated-62-hermes.aar +0 -0
  304. package/android/react-native-reanimated-62-jsc.aar +0 -0
  305. package/ios/LayoutReanimation/REAAnimationRootView.h +0 -12
  306. package/ios/LayoutReanimation/REAAnimationRootView.m +0 -16
  307. package/ios/LayoutReanimation/REAAnimationRootViewManager.h +0 -9
  308. package/ios/LayoutReanimation/REAAnimationRootViewManager.m +0 -49
  309. package/ios/LayoutReanimation/REAReactBatchObserver.h +0 -20
  310. package/ios/LayoutReanimation/REAReactBatchObserver.m +0 -125
  311. package/ios/LayoutReanimation/REASnapshooter.h +0 -19
  312. package/ios/LayoutReanimation/REASnapshooter.m +0 -64
  313. package/ios/LayoutReanimation/REAViewTraverser.h +0 -13
  314. package/ios/LayoutReanimation/REAViewTraverser.m +0 -40
  315. package/lib/reanimated2/Hooks.js +0 -732
  316. package/lib/reanimated2/NativeReanimated.js +0 -4
  317. package/lib/reanimated2/animations.js +0 -713
  318. package/lib/reanimated2/js-reanimated/index.web.js +0 -20
  319. package/lib/reanimated2/layoutReanimation/AnimatedRoot.js +0 -55
  320. package/lib/reanimated2/layoutReanimation/defaultAnimationsBuilder.js +0 -374
  321. package/src/reanimated2/Hooks.ts +0 -918
  322. package/src/reanimated2/NativeReanimated.native.ts +0 -61
  323. package/src/reanimated2/NativeReanimated.ts +0 -5
  324. package/src/reanimated2/animations.ts +0 -868
  325. package/src/reanimated2/js-reanimated/index.js +0 -0
  326. package/src/reanimated2/js-reanimated/index.web.ts +0 -29
  327. package/src/reanimated2/layoutReanimation/AnimatedRoot.tsx +0 -68
  328. 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 parse = require('@babel/parser').parse;
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
- fun.traverse({
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.node.params,
270
- prependClosureVariablesIfNecessary(closureVariables, fun.get('body').node)
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, options = {}) {
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 astWorkletCopy = parse('\n(' + fun.toString() + '\n)');
289
-
290
- traverse(astWorkletCopy, {
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
- const funExpression = t.functionExpression(null, clone.params, clone.body);
351
-
352
- const funString = buildWorkletString(t, fun, variables, functionName);
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
- const flags = isPossibleOptimization(fun);
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 = 0b00000001;
520
- const STATEMENTLESS_FLAG = 0b00000010;
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
- fun.scope.path.traverse({
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
- exit(path, state) {
773
+ enter(path, state) {
611
774
  processWorklets(t, path, state.file.opts.filename);
612
775
  },
613
776
  },
614
777
  'FunctionDeclaration|FunctionExpression|ArrowFunctionExpression': {
615
- exit(path, state) {
616
- processIfWorkletNode(t, path, state.file.opts.filename);
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
  };