react-native 0.0.0-263478b91 → 0.0.0-268efb102

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 (866) hide show
  1. package/Libraries/ActionSheetIOS/ActionSheetIOS.js +14 -1
  2. package/Libraries/ActionSheetIOS/NativeActionSheetManager.js +2 -0
  3. package/Libraries/Animated/AnimatedEvent.js +23 -4
  4. package/Libraries/Animated/AnimatedMock.js +1 -7
  5. package/Libraries/Animated/NativeAnimatedHelper.js +3 -3
  6. package/Libraries/Animated/animations/Animation.js +1 -0
  7. package/Libraries/Animated/animations/DecayAnimation.js +2 -0
  8. package/Libraries/Animated/animations/SpringAnimation.js +1 -0
  9. package/Libraries/Animated/animations/TimingAnimation.js +3 -0
  10. package/Libraries/Animated/createAnimatedComponent.js +5 -1
  11. package/Libraries/Animated/createAnimatedComponentInjection.js +48 -0
  12. package/Libraries/Animated/createAnimatedComponent_EXPERIMENTAL.js +48 -0
  13. package/Libraries/Animated/nodes/AnimatedValue.js +6 -0
  14. package/Libraries/Animated/nodes/AnimatedWithChildren.js +1 -0
  15. package/Libraries/Animated/useAnimatedProps.js +211 -0
  16. package/Libraries/BatchedBridge/MessageQueue.js +15 -10
  17. package/Libraries/BatchedBridge/NativeModules.js +5 -1
  18. package/Libraries/Blob/FileReader.js +1 -1
  19. package/Libraries/Blob/RCTBlobManager.h +2 -1
  20. package/Libraries/Blob/RCTBlobManager.mm +1 -3
  21. package/Libraries/Blob/React-RCTBlob.podspec +1 -1
  22. package/Libraries/Blob/URL.js +1 -1
  23. package/Libraries/BugReporting/BugReporting.js +2 -0
  24. package/Libraries/BugReporting/getReactData.js +1 -1
  25. package/Libraries/Components/Button.js +18 -2
  26. package/Libraries/Components/DatePicker/DatePickerIOS.ios.js +3 -6
  27. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +4 -7
  28. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +1 -1
  29. package/Libraries/Components/Pressable/useAndroidRippleForView.js +18 -15
  30. package/Libraries/Components/ScrollView/ScrollView.js +22 -5
  31. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +1 -0
  32. package/Libraries/Components/ScrollView/ScrollViewNativeComponentType.js +2 -0
  33. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +268 -252
  34. package/Libraries/Components/ScrollView/ScrollViewViewConfig.js +2 -0
  35. package/Libraries/Components/SegmentedControlIOS/SegmentedControlIOS.ios.js +14 -6
  36. package/Libraries/Components/Slider/Slider.js +13 -1
  37. package/Libraries/Components/StatusBar/StatusBar.js +6 -14
  38. package/Libraries/Components/Switch/Switch.js +18 -6
  39. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +4 -4
  40. package/Libraries/Components/TextInput/AndroidTextInputViewConfig.js +1 -0
  41. package/Libraries/Components/TextInput/TextInput.js +32 -4
  42. package/Libraries/Components/TextInput/TextInputState.js +1 -1
  43. package/Libraries/Components/Touchable/Touchable.js +14 -0
  44. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +1 -1
  45. package/Libraries/Components/Touchable/TouchableOpacity.js +11 -2
  46. package/Libraries/Components/View/ReactNativeStyleAttributes.js +131 -64
  47. package/Libraries/Components/View/ViewAccessibility.js +2 -0
  48. package/Libraries/Components/View/ViewNativeComponent.js +0 -10
  49. package/Libraries/Core/Devtools/parseErrorStack.js +0 -10
  50. package/Libraries/Core/Devtools/parseHermesStack.js +1 -1
  51. package/Libraries/Core/ExceptionsManager.js +49 -39
  52. package/Libraries/{Components/View/ViewInjection.js → Core/ExtendedError.js} +8 -2
  53. package/Libraries/Core/ReactFiberErrorDialog.js +44 -34
  54. package/Libraries/Core/ReactNativeVersion.js +1 -1
  55. package/Libraries/Core/Timers/JSTimers.js +37 -28
  56. package/Libraries/Core/Timers/immediateShim.js +67 -0
  57. package/Libraries/Core/Timers/queueMicrotask.js +41 -0
  58. package/Libraries/Core/polyfillPromise.js +1 -1
  59. package/Libraries/Core/setUpBatchedBridge.js +1 -1
  60. package/Libraries/Core/setUpGlobals.js +2 -0
  61. package/Libraries/Core/setUpRegeneratorRuntime.js +25 -8
  62. package/Libraries/Core/setUpTimers.js +65 -6
  63. package/Libraries/DeprecatedPropTypes/DeprecatedImagePropType.android.js +131 -0
  64. package/Libraries/DeprecatedPropTypes/{DeprecatedImagePropType.js → DeprecatedImagePropType.ios.js} +0 -0
  65. package/Libraries/DeprecatedPropTypes/DeprecatedTextInputPropTypes.js +5 -5
  66. package/Libraries/DeprecatedPropTypes/DeprecatedViewAccessibility.js +1 -0
  67. package/Libraries/EventEmitter/NativeEventEmitter.js +2 -0
  68. package/Libraries/Image/Image.android.js +20 -130
  69. package/Libraries/Image/Image.ios.js +12 -7
  70. package/Libraries/Image/ImageBackground.js +10 -8
  71. package/Libraries/Image/ImageInjection.js +28 -0
  72. package/Libraries/Image/ImageProps.js +28 -0
  73. package/Libraries/Image/ImageSource.js +108 -65
  74. package/Libraries/Image/React-RCTImage.podspec +1 -1
  75. package/Libraries/Inspector/Inspector.js +6 -0
  76. package/Libraries/Interaction/InteractionManager.js +3 -0
  77. package/Libraries/Interaction/PanResponder.js +1 -1
  78. package/Libraries/LinkingIOS/React-RCTLinking.podspec +1 -1
  79. package/Libraries/Lists/CellRenderMask.js +145 -0
  80. package/Libraries/Lists/FlatList.js +43 -26
  81. package/Libraries/Lists/VirtualizedList.js +3 -1
  82. package/Libraries/Lists/VirtualizedSectionList.js +3 -0
  83. package/Libraries/Lists/__flowtests__/SectionList-flowtest.js +4 -4
  84. package/Libraries/LogBox/Data/LogBoxData.js +21 -19
  85. package/Libraries/LogBox/UI/LogBoxImages/alert-triangle.png +0 -0
  86. package/Libraries/LogBox/UI/LogBoxImages/chevron-left.png +0 -0
  87. package/Libraries/LogBox/UI/LogBoxImages/chevron-right.png +0 -0
  88. package/Libraries/LogBox/UI/LogBoxImages/close.png +0 -0
  89. package/Libraries/LogBox/UI/LogBoxImages/loader.png +0 -0
  90. package/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.js +1 -0
  91. package/Libraries/Modal/Modal.js +1 -0
  92. package/Libraries/NativeAnimation/Nodes/RCTPropsAnimatedNode.m +0 -3
  93. package/Libraries/NativeAnimation/RCTNativeAnimatedModule.mm +6 -3
  94. package/Libraries/NativeAnimation/RCTNativeAnimatedNodesManager.h +1 -1
  95. package/Libraries/NativeAnimation/RCTNativeAnimatedNodesManager.m +1 -1
  96. package/Libraries/NativeAnimation/RCTNativeAnimatedTurboModule.mm +32 -28
  97. package/Libraries/NativeAnimation/React-RCTAnimation.podspec +1 -1
  98. package/Libraries/Network/RCTHTTPRequestHandler.h +5 -0
  99. package/Libraries/Network/RCTHTTPRequestHandler.mm +19 -7
  100. package/Libraries/Network/React-RCTNetwork.podspec +1 -1
  101. package/Libraries/Network/XMLHttpRequest.js +4 -1
  102. package/Libraries/NewAppScreen/components/Header.js +1 -0
  103. package/Libraries/NewAppScreen/components/logo.png +0 -0
  104. package/Libraries/Performance/QuickPerformanceLogger.js +3 -1
  105. package/Libraries/PermissionsAndroid/NativePermissionsAndroid.js +4 -1
  106. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +6 -0
  107. package/Libraries/Pressability/Pressability.js +1 -0
  108. package/Libraries/Pressability/PressabilityPerformanceEventEmitter.js +1 -0
  109. package/Libraries/PushNotificationIOS/RCTPushNotificationManager.mm +0 -1
  110. package/Libraries/PushNotificationIOS/React-RCTPushNotification.podspec +1 -1
  111. package/Libraries/ReactNative/AppContainer.js +1 -0
  112. package/Libraries/ReactNative/AppRegistry.js +3 -1
  113. package/Libraries/ReactNative/I18nManager.js +12 -3
  114. package/Libraries/ReactNative/PaperUIManager.js +1 -0
  115. package/Libraries/ReactNative/renderApplication.js +8 -3
  116. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +2 -3
  117. package/Libraries/Reliability/UserFlow.js +7 -0
  118. package/Libraries/Renderer/REVISION +1 -1
  119. package/Libraries/Renderer/implementations/ReactFabric-dev.fb.js +5686 -4572
  120. package/Libraries/Renderer/implementations/ReactFabric-dev.js +4324 -3826
  121. package/Libraries/Renderer/implementations/ReactFabric-prod.fb.js +2196 -1859
  122. package/Libraries/Renderer/implementations/ReactFabric-prod.js +196 -210
  123. package/Libraries/Renderer/implementations/ReactFabric-profiling.fb.js +2694 -2070
  124. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +647 -375
  125. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.fb.js +5474 -4460
  126. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +4109 -3636
  127. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.fb.js +1375 -1166
  128. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +162 -193
  129. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.fb.js +2197 -1708
  130. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +618 -364
  131. package/Libraries/Renderer/shims/ReactFabric.js +5 -4
  132. package/Libraries/Renderer/shims/ReactFeatureFlags.js +3 -1
  133. package/Libraries/Renderer/shims/ReactNative.js +3 -1
  134. package/Libraries/Renderer/shims/ReactNativeTypes.js +7 -4
  135. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +3 -1
  136. package/Libraries/Renderer/shims/createReactNativeComponentClass.js +3 -1
  137. package/Libraries/Settings/React-RCTSettings.podspec +1 -1
  138. package/Libraries/Settings/Settings.ios.js +4 -0
  139. package/Libraries/Storage/AsyncStorage.js +1 -0
  140. package/Libraries/StyleSheet/PlatformColorValueTypes.ios.js +16 -1
  141. package/Libraries/StyleSheet/PlatformColorValueTypesIOS.ios.js +8 -1
  142. package/Libraries/StyleSheet/PlatformColorValueTypesIOS.js +2 -0
  143. package/Libraries/StyleSheet/StyleSheet.js +3 -5
  144. package/Libraries/StyleSheet/normalizeColor.js +2 -2
  145. package/Libraries/SurfaceHostingComponent/RCTSurfaceHostingComponent.mm +1 -1
  146. package/Libraries/Text/Text.js +11 -0
  147. package/Libraries/Text/TextInput/RCTBaseTextInputView.m +10 -12
  148. package/Libraries/Text/TextInput/RCTInputAccessoryViewContent.m +4 -11
  149. package/Libraries/Text/TextProps.js +5 -7
  150. package/Libraries/TurboModule/TurboModuleRegistry.js +1 -10
  151. package/Libraries/TypeSafety/RCTTypeSafety.podspec +1 -1
  152. package/Libraries/UTFSequence.js +1 -1
  153. package/Libraries/Utilities/Dimensions.js +9 -14
  154. package/Libraries/Utilities/FeatureDetection.js +31 -0
  155. package/Libraries/Utilities/HMRClient.js +13 -6
  156. package/Libraries/Utilities/MatrixMath.js +1 -1
  157. package/Libraries/Utilities/NativeDeviceInfo.js +1 -1
  158. package/Libraries/Utilities/PerformanceLoggerContext.js +1 -1
  159. package/Libraries/Utilities/deepFreezeAndThrowOnMutationInDev.js +1 -0
  160. package/Libraries/Utilities/deprecatedPropType.js +2 -2
  161. package/Libraries/Utilities/useMergeRefs.js +44 -0
  162. package/Libraries/Utilities/useRefEffect.js +45 -0
  163. package/Libraries/Utilities/useWindowDimensions.js +7 -2
  164. package/Libraries/Vibration/React-RCTVibration.podspec +1 -1
  165. package/Libraries/YellowBox/YellowBoxDeprecated.js +1 -0
  166. package/Libraries/promiseRejectionTrackingOptions.js +2 -0
  167. package/Libraries/vendor/emitter/_EventSubscriptionVendor.js +1 -1
  168. package/README.md +5 -5
  169. package/React/Base/RCTAssert.h +11 -11
  170. package/React/Base/RCTBridge+Private.h +8 -2
  171. package/React/Base/RCTBridge.h +12 -3
  172. package/React/Base/RCTBridge.m +24 -12
  173. package/React/Base/RCTBridgeModule.h +36 -12
  174. package/React/Base/RCTBundleURLProvider.h +26 -1
  175. package/React/Base/RCTBundleURLProvider.mm +79 -15
  176. package/React/Base/RCTCallableJSModules.m +47 -0
  177. package/React/Base/RCTConstants.h +6 -7
  178. package/React/Base/RCTConstants.m +12 -12
  179. package/React/Base/RCTConvert.h +1 -1
  180. package/React/Base/RCTConvert.m +31 -7
  181. package/React/Base/RCTCxxConvert.h +1 -1
  182. package/React/Base/RCTDefines.h +12 -3
  183. package/React/Base/RCTEventDispatcherProtocol.h +3 -2
  184. package/React/{Views/RCTPickerManager.h → Base/RCTInitializing.h} +4 -2
  185. package/React/Base/RCTJSThread.h +29 -0
  186. package/React/Base/RCTJSThread.m +19 -0
  187. package/React/Base/RCTModuleData.h +7 -3
  188. package/React/Base/RCTModuleData.mm +41 -1
  189. package/React/Base/RCTMultipartStreamReader.m +0 -2
  190. package/React/Base/RCTRootView.h +15 -0
  191. package/React/Base/RCTRootView.m +15 -0
  192. package/React/Base/RCTTouchHandler.m +4 -9
  193. package/React/Base/RCTUtils.h +3 -0
  194. package/React/Base/RCTUtils.m +14 -7
  195. package/React/Base/RCTVersion.m +1 -1
  196. package/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingProxyRootView.h +12 -0
  197. package/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingProxyRootView.mm +45 -1
  198. package/React/CoreModules/BUCK +4 -3
  199. package/React/CoreModules/RCTAccessibilityManager.mm +1 -1
  200. package/React/CoreModules/RCTActionSheetManager.mm +14 -5
  201. package/React/CoreModules/RCTAsyncLocalStorage.mm +4 -0
  202. package/React/CoreModules/RCTDevLoadingView.mm +6 -21
  203. package/React/CoreModules/RCTDevMenu.mm +8 -11
  204. package/React/CoreModules/RCTDevSettings.h +2 -1
  205. package/React/CoreModules/RCTDevSettings.mm +63 -53
  206. package/React/CoreModules/RCTDevSplitBundleLoader.mm +1 -6
  207. package/React/CoreModules/RCTDeviceInfo.mm +4 -4
  208. package/React/CoreModules/RCTEventDispatcher.h +2 -1
  209. package/React/CoreModules/RCTEventDispatcher.mm +17 -28
  210. package/React/CoreModules/RCTKeyboardObserver.mm +1 -1
  211. package/React/CoreModules/RCTLogBox.mm +14 -10
  212. package/React/CoreModules/RCTPerfMonitor.mm +9 -4
  213. package/React/CoreModules/RCTRedBox.mm +1 -5
  214. package/React/CoreModules/RCTTiming.h +2 -1
  215. package/React/CoreModules/RCTTiming.mm +1 -3
  216. package/React/CoreModules/React-CoreModules.podspec +1 -1
  217. package/React/CxxBridge/RCTCxxBridge.mm +49 -12
  218. package/React/DevSupport/RCTPackagerConnection.h +3 -0
  219. package/React/DevSupport/RCTPackagerConnection.mm +19 -8
  220. package/React/FBReactNativeSpec/FBReactNativeSpec.podspec +12 -4
  221. package/React/Fabric/Mounting/ComponentViews/Modal/RCTModalHostViewComponentView.mm +1 -2
  222. package/React/Fabric/Mounting/ComponentViews/RCTFabricComponentsPlugins.h +0 -1
  223. package/React/Fabric/Mounting/ComponentViews/RCTFabricComponentsPlugins.mm +0 -1
  224. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +97 -85
  225. package/React/Fabric/Mounting/ComponentViews/Text/RCTParagraphComponentView.mm +1 -0
  226. package/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm +45 -17
  227. package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.h +6 -0
  228. package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +109 -5
  229. package/React/Fabric/Mounting/RCTComponentViewFactory.mm +1 -0
  230. package/React/Fabric/Mounting/RCTMountingManager.h +3 -0
  231. package/React/Fabric/Mounting/RCTMountingManager.mm +22 -3
  232. package/React/Fabric/Mounting/UIView+ComponentViewProtocol.h +2 -0
  233. package/React/Fabric/Mounting/UIView+ComponentViewProtocol.mm +12 -0
  234. package/React/Fabric/RCTConversions.h +3 -0
  235. package/React/Fabric/RCTScheduler.mm +23 -7
  236. package/React/Fabric/RCTSurfacePresenter.mm +28 -37
  237. package/React/Fabric/RCTSurfacePresenterBridgeAdapter.h +4 -2
  238. package/React/Fabric/RCTSurfacePresenterBridgeAdapter.mm +1 -1
  239. package/React/Fabric/RCTSurfaceRegistry.h +1 -1
  240. package/React/Fabric/RCTSurfaceTouchHandler.mm +6 -20
  241. package/React/Fabric/Surface/RCTFabricSurface.mm +3 -0
  242. package/React/Modules/RCTEventEmitter.h +1 -2
  243. package/React/Modules/RCTEventEmitter.m +8 -11
  244. package/React/Modules/RCTI18nUtil.h +14 -6
  245. package/React/Modules/RCTI18nUtil.m +1 -47
  246. package/React/Profiler/RCTProfileTrampoline-arm.S +1 -1
  247. package/React/Profiler/RCTProfileTrampoline-arm64.S +2 -2
  248. package/React/React-RCTFabric.podspec +3 -3
  249. package/React/Views/RCTFont.mm +54 -38
  250. package/React/Views/RCTModalHostView.h +1 -1
  251. package/React/Views/RCTModalHostView.m +16 -0
  252. package/React/Views/RCTModalHostViewManager.m +1 -0
  253. package/React/Views/RCTView.h +7 -7
  254. package/React/Views/RCTView.m +32 -49
  255. package/React/Views/RCTViewManager.m +14 -4
  256. package/React/Views/SafeAreaView/RCTSafeAreaView.m +1 -5
  257. package/React/Views/ScrollView/RCTScrollView.h +1 -0
  258. package/React/Views/ScrollView/RCTScrollView.m +123 -36
  259. package/React/Views/ScrollView/RCTScrollViewManager.m +4 -7
  260. package/React/Views/UIView+React.m +2 -11
  261. package/React/third-party.xcconfig +1 -1
  262. package/React-Core.podspec +2 -2
  263. package/ReactAndroid/Android-prebuilt.mk +8 -0
  264. package/ReactAndroid/README.md +1 -1
  265. package/ReactAndroid/build.gradle +82 -18
  266. package/ReactAndroid/gradle.properties +5 -5
  267. package/ReactAndroid/src/androidTest/java/com/facebook/react/testing/BUCK +1 -1
  268. package/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactAppInstrumentationTestCase.java +1 -1
  269. package/ReactAndroid/src/androidTest/java/com/facebook/react/testing/idledetection/BUCK +1 -1
  270. package/ReactAndroid/src/androidTest/java/com/facebook/react/testing/rule/BUCK +5 -5
  271. package/ReactAndroid/src/androidTest/java/com/facebook/react/tests/BUCK +0 -2
  272. package/ReactAndroid/src/androidTest/java/com/facebook/react/tests/core/BUCK +5 -5
  273. package/ReactAndroid/src/androidTest/js/BUCK +26 -0
  274. package/ReactAndroid/src/androidTest/js/TestBundle.js +0 -12
  275. package/ReactAndroid/src/main/java/com/facebook/hermes/instrumentation/Android.mk +2 -2
  276. package/ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/Android.mk +4 -4
  277. package/ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/HermesExecutorFactory.java +1 -1
  278. package/ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/RuntimeConfig.java +0 -6
  279. package/ReactAndroid/src/main/java/com/facebook/proguard/annotations/BUCK +2 -2
  280. package/ReactAndroid/src/main/java/com/facebook/react/BUCK +1 -0
  281. package/ReactAndroid/src/main/java/com/facebook/react/ReactActivity.java +1 -0
  282. package/ReactAndroid/src/main/java/com/facebook/react/ReactAndroidHWInputDeviceHelper.java +5 -0
  283. package/ReactAndroid/src/main/java/com/facebook/react/ReactFragment.java +6 -2
  284. package/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +123 -64
  285. package/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java +28 -0
  286. package/ReactAndroid/src/main/java/com/facebook/react/ReactNativeHost.java +13 -0
  287. package/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java +25 -3
  288. package/ReactAndroid/src/main/java/com/facebook/react/animated/BUCK +1 -1
  289. package/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.java +2 -2
  290. package/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedNodesManager.java +5 -5
  291. package/ReactAndroid/src/main/java/com/facebook/react/bridge/BackgroundExecutor.java +3 -2
  292. package/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstance.java +4 -0
  293. package/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java +11 -5
  294. package/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaModuleWrapper.java +37 -0
  295. package/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeModuleRegistry.java +22 -0
  296. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java +3 -6
  297. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContextBaseJavaModule.java +1 -1
  298. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactCxxErrorHandler.java +39 -0
  299. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactMarkerConstants.java +3 -1
  300. package/ReactAndroid/src/main/java/com/facebook/react/bridge/{ReactSoftException.java → ReactSoftExceptionLogger.java} +8 -3
  301. package/ReactAndroid/src/main/java/com/facebook/react/bridge/RuntimeScheduler.java +21 -0
  302. package/ReactAndroid/src/main/java/com/facebook/react/bridge/SoftAssertions.java +8 -7
  303. package/ReactAndroid/src/main/java/com/facebook/react/bridge/UIManager.java +10 -0
  304. package/ReactAndroid/src/main/java/com/facebook/react/common/BUCK +2 -2
  305. package/ReactAndroid/src/main/java/com/facebook/react/common/mapbuffer/BUCK +3 -0
  306. package/ReactAndroid/src/main/java/com/facebook/react/common/mapbuffer/ReadableMapBuffer.java +1 -2
  307. package/ReactAndroid/src/main/java/com/facebook/react/common/mapbuffer/ReadableMapBufferSoLoader.java +33 -0
  308. package/ReactAndroid/src/main/java/com/facebook/react/common/mapbuffer/jni/BUCK +1 -1
  309. package/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java +40 -36
  310. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/BUCK +1 -1
  311. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/BridgeDevSupportManager.java +275 -0
  312. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DefaultDevSupportManagerFactory.java +97 -0
  313. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.java +9 -58
  314. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.java +163 -328
  315. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerFactory.java +3 -72
  316. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/PackagerStatusCheck.java +100 -0
  317. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/RedBoxHandler.java +1 -1
  318. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevSupportManager.java +1 -1
  319. package/ReactAndroid/src/main/java/com/facebook/react/fabric/Binding.java +10 -0
  320. package/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricComponents.java +4 -3
  321. package/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricJSIModuleProvider.java +6 -67
  322. package/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +154 -74
  323. package/ReactAndroid/src/main/java/com/facebook/react/fabric/events/EventEmitterWrapper.java +36 -1
  324. package/ReactAndroid/src/main/java/com/facebook/react/fabric/events/FabricEventEmitter.java +14 -2
  325. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Android.mk +2 -2
  326. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/BUCK +1 -2
  327. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.cpp +129 -40
  328. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.h +18 -2
  329. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/CoreComponentsRegistry.cpp +0 -6
  330. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/EventEmitterWrapper.cpp +22 -2
  331. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/EventEmitterWrapper.h +4 -0
  332. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountItemDispatcher.java +53 -7
  333. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.java +27 -7
  334. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.java +136 -35
  335. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/IntBufferBatchMountItem.java +2 -1
  336. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/PreAllocateViewMountItem.java +5 -5
  337. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/SendAccessibilityEvent.java +2 -2
  338. package/ReactAndroid/src/main/java/com/facebook/react/jscexecutor/Android.mk +2 -2
  339. package/ReactAndroid/src/main/java/com/facebook/react/jstasks/HeadlessJsTaskContext.java +2 -2
  340. package/ReactAndroid/src/main/java/com/facebook/react/modules/accessibilityinfo/BUCK +1 -1
  341. package/ReactAndroid/src/main/java/com/facebook/react/modules/appearance/BUCK +1 -1
  342. package/ReactAndroid/src/main/java/com/facebook/react/modules/appstate/BUCK +1 -1
  343. package/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BUCK +1 -1
  344. package/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BlobProvider.java +35 -7
  345. package/ReactAndroid/src/main/java/com/facebook/react/modules/blob/jni/Android.mk +2 -2
  346. package/ReactAndroid/src/main/java/com/facebook/react/modules/bundleloader/BUCK +1 -1
  347. package/ReactAndroid/src/main/java/com/facebook/react/modules/camera/BUCK +1 -1
  348. package/ReactAndroid/src/main/java/com/facebook/react/modules/core/BUCK +1 -1
  349. package/ReactAndroid/src/main/java/com/facebook/react/modules/core/{JavaScriptTimerManager.java → JavaScriptTimerExecutor.java} +1 -1
  350. package/ReactAndroid/src/main/java/com/facebook/react/modules/core/JavaTimerManager.java +7 -7
  351. package/ReactAndroid/src/main/java/com/facebook/react/modules/core/TimingModule.java +2 -2
  352. package/ReactAndroid/src/main/java/com/facebook/react/modules/debug/BUCK +1 -1
  353. package/ReactAndroid/src/main/java/com/facebook/react/modules/deviceinfo/BUCK +1 -1
  354. package/ReactAndroid/src/main/java/com/facebook/react/modules/deviceinfo/DeviceInfoModule.java +10 -6
  355. package/ReactAndroid/src/main/java/com/facebook/react/modules/dialog/BUCK +1 -1
  356. package/ReactAndroid/src/main/java/com/facebook/react/modules/i18nmanager/BUCK +1 -1
  357. package/ReactAndroid/src/main/java/com/facebook/react/modules/i18nmanager/I18nManagerModule.java +7 -1
  358. package/ReactAndroid/src/main/java/com/facebook/react/modules/image/BUCK +1 -1
  359. package/ReactAndroid/src/main/java/com/facebook/react/modules/intent/BUCK +1 -1
  360. package/ReactAndroid/src/main/java/com/facebook/react/modules/intent/IntentModule.java +23 -19
  361. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/BUCK +1 -1
  362. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/ForwardingCookieHandler.java +1 -4
  363. package/ReactAndroid/src/main/java/com/facebook/react/modules/permissions/BUCK +1 -1
  364. package/ReactAndroid/src/main/java/com/facebook/react/modules/share/BUCK +1 -1
  365. package/ReactAndroid/src/main/java/com/facebook/react/modules/sound/BUCK +1 -1
  366. package/ReactAndroid/src/main/java/com/facebook/react/modules/statusbar/BUCK +1 -1
  367. package/ReactAndroid/src/main/java/com/facebook/react/modules/storage/BUCK +1 -1
  368. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/BUCK +2 -2
  369. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java +1 -1
  370. package/ReactAndroid/src/main/java/com/facebook/react/modules/toast/BUCK +1 -1
  371. package/ReactAndroid/src/main/java/com/facebook/react/modules/vibration/BUCK +1 -1
  372. package/ReactAndroid/src/main/java/com/facebook/react/modules/websocket/BUCK +1 -1
  373. package/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/ReconnectingWebSocket.java +11 -9
  374. package/ReactAndroid/src/main/java/com/facebook/react/shell/BUCK +0 -2
  375. package/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java +0 -9
  376. package/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModuleManager.java +4 -2
  377. package/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/ReactCommon/TurboModuleManager.cpp +39 -11
  378. package/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/ReactCommon/TurboModuleManager.h +9 -2
  379. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/DisplayMetricsHolder.java +7 -28
  380. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSTouchDispatcher.java +14 -5
  381. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyOptimizer.java +10 -13
  382. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/PixelUtil.java +1 -6
  383. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactAccessibilityDelegate.java +5 -6
  384. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactClippingProhibitedView.java +26 -0
  385. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactOverflowView.java +25 -0
  386. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/TouchTargetHelper.java +162 -66
  387. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java +1 -4
  388. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerHelper.java +9 -9
  389. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java +10 -1
  390. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIViewOperationQueue.java +6 -5
  391. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagersPropertyCache.java +16 -1
  392. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/Event.java +53 -19
  393. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/LockFreeEventDispatcherImpl.java +236 -0
  394. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/RCTModernEventEmitter.java +8 -0
  395. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ReactEventEmitter.java +20 -6
  396. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchEvent.java +34 -5
  397. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchesHelper.java +1 -1
  398. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/interfaces/ViewProps.java +9 -4
  399. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/jni/BUCK +1 -1
  400. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/jni/ComponentNameResolverManager.cpp +2 -1
  401. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/jni/ComponentNameResolverManager.h +10 -15
  402. package/ReactAndroid/src/main/java/com/facebook/react/views/drawer/BUCK +1 -1
  403. package/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerClosedEvent.java +0 -6
  404. package/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerOpenedEvent.java +0 -6
  405. package/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerSlideEvent.java +0 -6
  406. package/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerStateChangedEvent.java +0 -6
  407. package/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageManager.java +5 -5
  408. package/ReactAndroid/src/main/java/com/facebook/react/views/modal/BUCK +1 -1
  409. package/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.java +7 -11
  410. package/ReactAndroid/src/main/java/com/facebook/react/views/progressbar/BUCK +1 -1
  411. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/BUCK +1 -0
  412. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java +15 -1
  413. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollViewManager.java +5 -0
  414. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java +42 -5
  415. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewHelper.java +18 -3
  416. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.java +5 -0
  417. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ScrollEvent.java +9 -7
  418. package/ReactAndroid/src/main/java/com/facebook/react/views/slider/BUCK +1 -1
  419. package/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSliderEvent.java +0 -5
  420. package/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSliderManager.java +4 -7
  421. package/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSlidingCompleteEvent.java +0 -5
  422. package/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/BUCK +1 -1
  423. package/ReactAndroid/src/main/java/com/facebook/react/views/switchview/BUCK +1 -1
  424. package/ReactAndroid/src/main/java/com/facebook/react/views/switchview/ReactSwitchEvent.java +0 -6
  425. package/ReactAndroid/src/main/java/com/facebook/react/views/text/CustomStyleSpan.java +6 -8
  426. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactFontManager.java +59 -44
  427. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextAnchorViewManager.java +0 -4
  428. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextShadowNode.java +23 -2
  429. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java +19 -0
  430. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTypefaceUtils.java +41 -59
  431. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.java +20 -51
  432. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java +31 -12
  433. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManagerMapBuffer.java +31 -11
  434. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TypefaceStyle.java +72 -0
  435. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/BUCK +1 -0
  436. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java +16 -6
  437. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditTextInputConnectionWrapper.java +3 -0
  438. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java +117 -62
  439. package/ReactAndroid/src/main/java/com/facebook/react/views/view/CanvasUtil.java +92 -0
  440. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewBackgroundDrawable.java +39 -8
  441. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.java +49 -2
  442. package/ReactAndroid/src/main/jni/first-party/yogajni/jni/YGJNIVanilla.cpp +2 -7
  443. package/ReactAndroid/src/main/jni/first-party/yogajni/jni/YGJTypesVanilla.h +8 -4
  444. package/ReactAndroid/src/main/jni/react/jni/Android.mk +5 -3
  445. package/ReactAndroid/src/main/jni/react/jni/BUCK +5 -2
  446. package/ReactAndroid/src/main/jni/react/jni/CatalystInstanceImpl.cpp +64 -3
  447. package/ReactAndroid/src/main/jni/react/jni/CatalystInstanceImpl.h +9 -2
  448. package/ReactAndroid/src/main/jni/react/jni/JReactCxxErrorHandler.cpp +18 -0
  449. package/{ReactCommon/react/renderer/components/picker/iospicker/primitives.h → ReactAndroid/src/main/jni/react/jni/JReactCxxErrorHandler.h} +6 -10
  450. package/ReactAndroid/src/main/jni/react/jni/JReactSoftExceptionLogger.cpp +21 -0
  451. package/ReactAndroid/src/main/jni/react/jni/JReactSoftExceptionLogger.h +28 -0
  452. package/{ReactCommon/react/renderer/components/picker/androidpicker/react/renderer/components/androidpicker/AndroidDialogPickerComponentDescriptor.h → ReactAndroid/src/main/jni/react/jni/JRuntimeScheduler.cpp} +8 -7
  453. package/ReactAndroid/src/main/jni/react/jni/JRuntimeScheduler.h +30 -0
  454. package/ReactAndroid/src/main/jni/react/jni/JSLoader.cpp +1 -1
  455. package/ReactAndroid/src/main/jni/react/jni/ProxyExecutor.h +1 -0
  456. package/ReactAndroid/src/main/jni/third-party/folly/Android.mk +3 -1
  457. package/ReactAndroid/src/main/jni/third-party/libevent/Android.mk +0 -1
  458. package/ReactAndroid/src/main/libraries/fresco/fresco-react-native/BUCK +26 -26
  459. package/ReactAndroid/src/main/libraries/soloader/java/com/facebook/soloader/BUCK +5 -5
  460. package/ReactAndroid/src/main/res/devsupport/values/strings.xml +2 -1
  461. package/ReactAndroid/src/main/res/views/uimanager/values/strings_unlocalized.xml +0 -12
  462. package/ReactAndroid/src/main/third-party/android/androidx/BUCK +63 -2
  463. package/ReactAndroid/src/main/third-party/java/infer-annotations/BUCK +2 -2
  464. package/ReactAndroid/src/main/third-party/java/okhttp/BUCK +4 -4
  465. package/ReactAndroid/src/main/third-party/java/okio/BUCK +2 -2
  466. package/ReactAndroid/src/main/third-party/java/robolectric/{4.4/BUCK → BUCK} +0 -0
  467. package/ReactAndroid/src/main/third-party/java/testing-support-lib/BUCK +0 -31
  468. package/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.java +2 -2
  469. package/ReactAndroid/src/test/java/com/facebook/react/bridge/BUCK +1 -1
  470. package/ReactAndroid/src/test/java/com/facebook/react/bridge/ReactTestHelper.java +1 -0
  471. package/ReactAndroid/src/test/java/com/facebook/react/modules/BUCK +1 -0
  472. package/ReactAndroid/src/test/java/com/facebook/react/modules/deviceinfo/DeviceInfoModuleTest.java +168 -0
  473. package/ReactAndroid/src/test/java/com/facebook/react/views/textinput/ReactTextInputPropertyTest.java +4 -0
  474. package/ReactCommon/React-Fabric.podspec +11 -11
  475. package/ReactCommon/ReactCommon.podspec +3 -2
  476. package/ReactCommon/callinvoker/BUCK +2 -2
  477. package/ReactCommon/callinvoker/React-callinvoker.podspec +1 -1
  478. package/ReactCommon/cxxreact/Android.mk +2 -1
  479. package/ReactCommon/cxxreact/BUCK +1 -3
  480. package/ReactCommon/cxxreact/CxxNativeModule.cpp +28 -0
  481. package/ReactCommon/cxxreact/CxxNativeModule.h +9 -0
  482. package/ReactCommon/cxxreact/Instance.cpp +5 -8
  483. package/ReactCommon/cxxreact/Instance.h +1 -1
  484. package/ReactCommon/cxxreact/React-cxxreact.podspec +4 -3
  485. package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
  486. package/ReactCommon/hermes/React-hermes.podspec +2 -2
  487. package/ReactCommon/hermes/executor/Android.mk +4 -4
  488. package/ReactCommon/hermes/inspector/Android.mk +1 -2
  489. package/ReactCommon/hermes/inspector/tools/msggen/package.json +7 -4
  490. package/ReactCommon/hermes/inspector/tools/msggen/yarn.lock +13 -10
  491. package/ReactCommon/jsi/Android.mk +1 -1
  492. package/ReactCommon/jsi/BUCK +0 -2
  493. package/ReactCommon/jsi/React-jsi.podspec +3 -3
  494. package/ReactCommon/jsi/jsi/jsilib-posix.cpp +1 -11
  495. package/ReactCommon/jsiexecutor/Android.mk +2 -2
  496. package/ReactCommon/jsiexecutor/React-jsiexecutor.podspec +2 -2
  497. package/ReactCommon/logger/Android.mk +23 -0
  498. package/ReactCommon/logger/BUCK +43 -0
  499. package/ReactCommon/logger/React-logger.podspec +40 -0
  500. package/ReactCommon/logger/react_native_log.cpp +52 -0
  501. package/ReactCommon/logger/react_native_log.h +33 -0
  502. package/ReactCommon/react/nativemodule/core/Android.mk +2 -2
  503. package/ReactCommon/react/nativemodule/core/ReactCommon/LongLivedObject.cpp +1 -0
  504. package/ReactCommon/react/nativemodule/core/ReactCommon/LongLivedObject.h +3 -2
  505. package/ReactCommon/react/nativemodule/core/ReactCommon/TurboModuleBinding.cpp +46 -1
  506. package/ReactCommon/react/nativemodule/core/ReactCommon/TurboModuleBinding.h +10 -0
  507. package/ReactCommon/react/nativemodule/core/ReactCommon/TurboModuleUtils.h +37 -1
  508. package/ReactCommon/react/nativemodule/core/platform/android/ReactCommon/JavaTurboModule.cpp +24 -22
  509. package/ReactCommon/react/nativemodule/core/platform/android/ReactCommon/JavaTurboModule.h +11 -8
  510. package/ReactCommon/react/nativemodule/core/platform/ios/RCTTurboModule.h +7 -5
  511. package/ReactCommon/react/nativemodule/core/platform/ios/RCTTurboModule.mm +61 -42
  512. package/ReactCommon/react/nativemodule/core/platform/ios/RCTTurboModuleManager.mm +55 -35
  513. package/ReactCommon/react/nativemodule/samples/BUCK +2 -2
  514. package/ReactCommon/react/nativemodule/samples/platform/android/Android.mk +1 -1
  515. package/ReactCommon/react/renderer/animations/BUCK +1 -0
  516. package/ReactCommon/react/renderer/animations/LayoutAnimationCallbackWrapper.h +34 -0
  517. package/ReactCommon/react/renderer/animations/LayoutAnimationDriver.cpp +5 -27
  518. package/ReactCommon/react/renderer/animations/LayoutAnimationDriver.h +8 -14
  519. package/ReactCommon/react/renderer/animations/LayoutAnimationKeyFrameManager.cpp +920 -1127
  520. package/ReactCommon/react/renderer/animations/LayoutAnimationKeyFrameManager.h +80 -245
  521. package/ReactCommon/react/renderer/animations/conversions.h +212 -0
  522. package/ReactCommon/react/renderer/animations/primitives.h +104 -0
  523. package/ReactCommon/react/renderer/animations/tests/LayoutAnimationTest.cpp +18 -10
  524. package/ReactCommon/react/renderer/animations/utils.cpp +71 -0
  525. package/ReactCommon/react/renderer/animations/utils.h +80 -0
  526. package/ReactCommon/react/renderer/attributedstring/AttributedString.h +0 -1
  527. package/ReactCommon/react/renderer/attributedstring/ParagraphAttributes.cpp +7 -3
  528. package/ReactCommon/react/renderer/attributedstring/ParagraphAttributes.h +12 -2
  529. package/ReactCommon/react/renderer/attributedstring/TextAttributes.cpp +7 -2
  530. package/ReactCommon/react/renderer/attributedstring/TextAttributes.h +3 -1
  531. package/ReactCommon/react/renderer/attributedstring/conversions.h +162 -11
  532. package/ReactCommon/react/renderer/attributedstring/primitives.h +34 -1
  533. package/ReactCommon/react/renderer/componentregistry/ComponentDescriptorProviderRegistry.cpp +2 -2
  534. package/ReactCommon/react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h +1 -0
  535. package/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp +12 -6
  536. package/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.h +4 -1
  537. package/ReactCommon/react/renderer/componentregistry/componentNameByReactViewName.cpp +2 -1
  538. package/ReactCommon/react/renderer/components/image/Android.mk +1 -1
  539. package/ReactCommon/react/renderer/components/image/ImageProps.cpp +28 -9
  540. package/ReactCommon/react/renderer/components/image/ImageProps.h +5 -1
  541. package/ReactCommon/react/renderer/components/image/conversions.h +9 -2
  542. package/ReactCommon/react/renderer/components/inputaccessory/BUCK +1 -1
  543. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/BUCK +1 -1
  544. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropComponentDescriptor.mm +0 -1
  545. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropViewProps.cpp +2 -1
  546. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropViewProps.h +2 -0
  547. package/ReactCommon/react/renderer/components/root/BUCK +1 -0
  548. package/ReactCommon/react/renderer/components/root/RootProps.cpp +12 -2
  549. package/ReactCommon/react/renderer/components/root/RootProps.h +6 -1
  550. package/ReactCommon/react/renderer/components/root/RootShadowNode.cpp +2 -1
  551. package/ReactCommon/react/renderer/components/root/RootShadowNode.h +2 -0
  552. package/ReactCommon/react/renderer/components/root/tests/RootShadowNodeTest.cpp +35 -3
  553. package/ReactCommon/react/renderer/components/safeareaview/BUCK +1 -1
  554. package/ReactCommon/react/renderer/components/scrollview/Android.mk +1 -1
  555. package/ReactCommon/react/renderer/components/scrollview/ScrollViewProps.cpp +54 -4
  556. package/ReactCommon/react/renderer/components/scrollview/ScrollViewProps.h +10 -5
  557. package/ReactCommon/react/renderer/components/scrollview/conversions.h +5 -0
  558. package/ReactCommon/react/renderer/components/text/Android.mk +1 -1
  559. package/ReactCommon/react/renderer/components/text/BaseTextProps.cpp +32 -0
  560. package/ReactCommon/react/renderer/components/text/BaseTextProps.h +5 -1
  561. package/ReactCommon/react/renderer/components/text/BaseTextShadowNode.cpp +2 -3
  562. package/ReactCommon/react/renderer/components/text/ParagraphComponentDescriptor.h +1 -16
  563. package/ReactCommon/react/renderer/components/text/ParagraphProps.cpp +10 -4
  564. package/ReactCommon/react/renderer/components/text/ParagraphProps.h +5 -1
  565. package/ReactCommon/react/renderer/components/text/ParagraphShadowNode.cpp +3 -3
  566. package/ReactCommon/react/renderer/components/text/RawTextProps.cpp +3 -2
  567. package/ReactCommon/react/renderer/components/text/RawTextProps.h +5 -1
  568. package/ReactCommon/react/renderer/components/text/RawTextShadowNode.h +36 -2
  569. package/ReactCommon/react/renderer/components/text/TextProps.cpp +6 -3
  570. package/ReactCommon/react/renderer/components/text/TextProps.h +5 -1
  571. package/ReactCommon/react/renderer/components/text/TextShadowNode.h +23 -0
  572. package/ReactCommon/react/renderer/components/textinput/Android.mk +1 -1
  573. package/ReactCommon/react/renderer/components/textinput/androidtextinput/react/renderer/components/androidtextinput/AndroidTextInputProps.cpp +58 -91
  574. package/ReactCommon/react/renderer/components/textinput/androidtextinput/react/renderer/components/androidtextinput/AndroidTextInputProps.h +10 -6
  575. package/ReactCommon/react/renderer/components/textinput/iostextinput/TextInputProps.cpp +46 -22
  576. package/ReactCommon/react/renderer/components/textinput/iostextinput/TextInputProps.h +6 -5
  577. package/ReactCommon/react/renderer/components/textinput/iostextinput/conversions.h +19 -7
  578. package/ReactCommon/react/renderer/components/textinput/iostextinput/primitives.h +6 -0
  579. package/ReactCommon/react/renderer/components/textinput/iostextinput/propsConversions.h +63 -2
  580. package/ReactCommon/react/renderer/components/unimplementedview/Android.mk +1 -1
  581. package/ReactCommon/react/renderer/components/unimplementedview/UnimplementedViewComponentDescriptor.cpp +4 -2
  582. package/ReactCommon/react/renderer/components/unimplementedview/UnimplementedViewComponentDescriptor.h +5 -2
  583. package/ReactCommon/react/renderer/components/unimplementedview/UnimplementedViewProps.h +1 -0
  584. package/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h +28 -0
  585. package/ReactCommon/react/renderer/components/view/AccessibilityProps.cpp +24 -1
  586. package/ReactCommon/react/renderer/components/view/AccessibilityProps.h +4 -1
  587. package/ReactCommon/react/renderer/components/view/Android.mk +3 -2
  588. package/ReactCommon/react/renderer/components/view/BUCK +1 -0
  589. package/ReactCommon/react/renderer/components/view/Touch.h +1 -32
  590. package/ReactCommon/react/renderer/components/view/TouchEventEmitter.cpp +19 -5
  591. package/ReactCommon/react/renderer/components/view/TouchEventEmitter.h +2 -1
  592. package/ReactCommon/react/renderer/components/view/ViewComponentDescriptor.h +0 -22
  593. package/ReactCommon/react/renderer/components/view/ViewEventEmitter.cpp +1 -1
  594. package/ReactCommon/react/renderer/components/view/ViewProps.cpp +62 -14
  595. package/ReactCommon/react/renderer/components/view/ViewProps.h +7 -1
  596. package/ReactCommon/react/renderer/components/view/ViewPropsInterpolation.h +5 -10
  597. package/ReactCommon/react/renderer/components/view/ViewShadowNode.cpp +5 -12
  598. package/ReactCommon/react/renderer/components/view/ViewShadowNode.h +1 -1
  599. package/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp +58 -33
  600. package/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.h +2 -8
  601. package/ReactCommon/react/renderer/components/view/YogaStylableProps.cpp +3 -2
  602. package/ReactCommon/react/renderer/components/view/YogaStylableProps.h +2 -0
  603. package/ReactCommon/react/renderer/components/view/accessibilityPropsConversions.h +77 -6
  604. package/ReactCommon/react/renderer/components/view/conversions.h +57 -14
  605. package/ReactCommon/react/renderer/components/view/primitives.h +5 -4
  606. package/ReactCommon/react/renderer/components/view/propsConversions.h +163 -28
  607. package/ReactCommon/react/renderer/components/view/tests/ViewTest.cpp +7 -2
  608. package/ReactCommon/react/renderer/core/Android.mk +1 -1
  609. package/ReactCommon/react/renderer/core/BUCK +1 -0
  610. package/ReactCommon/react/renderer/core/BatchedEventQueue.cpp +2 -34
  611. package/ReactCommon/react/renderer/core/BatchedEventQueue.h +2 -9
  612. package/ReactCommon/react/renderer/core/ComponentDescriptor.h +5 -2
  613. package/ReactCommon/react/renderer/core/ConcreteComponentDescriptor.h +19 -21
  614. package/ReactCommon/react/renderer/core/ConcreteShadowNode.h +4 -0
  615. package/ReactCommon/react/renderer/core/EventDispatcher.cpp +5 -10
  616. package/ReactCommon/react/renderer/core/EventDispatcher.h +3 -8
  617. package/ReactCommon/react/renderer/core/EventEmitter.cpp +21 -11
  618. package/ReactCommon/react/renderer/core/EventEmitter.h +6 -1
  619. package/ReactCommon/react/renderer/core/EventPipe.h +2 -0
  620. package/ReactCommon/react/renderer/core/EventQueue.cpp +35 -32
  621. package/ReactCommon/react/renderer/core/EventQueue.h +12 -6
  622. package/ReactCommon/react/renderer/core/EventQueueProcessor.cpp +82 -0
  623. package/ReactCommon/react/renderer/core/EventQueueProcessor.h +36 -0
  624. package/ReactCommon/react/renderer/core/LayoutableShadowNode.cpp +1 -1
  625. package/ReactCommon/react/renderer/core/LayoutableShadowNode.h +0 -6
  626. package/ReactCommon/react/renderer/core/Props.cpp +10 -2
  627. package/ReactCommon/react/renderer/core/Props.h +6 -1
  628. package/ReactCommon/react/renderer/core/PropsParserContext.h +29 -0
  629. package/ReactCommon/react/renderer/core/RawEvent.cpp +4 -2
  630. package/ReactCommon/react/renderer/core/RawEvent.h +40 -3
  631. package/ReactCommon/react/renderer/core/RawProps.cpp +2 -1
  632. package/ReactCommon/react/renderer/core/RawProps.h +3 -1
  633. package/ReactCommon/react/renderer/core/RawPropsKey.cpp +10 -2
  634. package/ReactCommon/react/renderer/core/RawPropsKeyMap.cpp +1 -1
  635. package/ReactCommon/react/renderer/core/RawPropsParser.cpp +1 -1
  636. package/ReactCommon/react/renderer/core/RawPropsParser.h +11 -2
  637. package/ReactCommon/react/renderer/core/ReactEventPriority.h +43 -0
  638. package/ReactCommon/react/renderer/core/ReactPrimitives.h +0 -2
  639. package/ReactCommon/react/renderer/core/ShadowNode.cpp +9 -12
  640. package/ReactCommon/react/renderer/core/ShadowNode.h +4 -0
  641. package/ReactCommon/react/renderer/core/ShadowNodeFamily.h +1 -0
  642. package/ReactCommon/react/renderer/core/ShadowNodeTraits.h +17 -1
  643. package/ReactCommon/react/renderer/core/propsConversions.h +19 -9
  644. package/ReactCommon/react/renderer/core/tests/ComponentDescriptorTest.cpp +16 -4
  645. package/ReactCommon/react/renderer/core/tests/EventQueueProcessorTest.cpp +134 -0
  646. package/ReactCommon/react/renderer/core/tests/RawPropsTest.cpp +97 -29
  647. package/ReactCommon/react/renderer/core/tests/TestComponent.h +6 -2
  648. package/ReactCommon/react/renderer/core/tests/traitCastTest.cpp +31 -0
  649. package/ReactCommon/react/renderer/debug/DebugStringConvertible.h +9 -9
  650. package/ReactCommon/react/renderer/graphics/Android.mk +5 -2
  651. package/ReactCommon/react/renderer/graphics/BUCK +12 -1
  652. package/ReactCommon/react/renderer/graphics/React-graphics.podspec +3 -2
  653. package/ReactCommon/react/renderer/graphics/Transform.cpp +2 -2
  654. package/ReactCommon/react/renderer/graphics/Transform.h +1 -1
  655. package/ReactCommon/react/renderer/graphics/conversions.h +34 -19
  656. package/ReactCommon/react/renderer/graphics/platform/android/react/renderer/graphics/PlatformColorParser.h +67 -0
  657. package/ReactCommon/react/renderer/graphics/platform/cxx/react/renderer/graphics/Color.cpp +8 -0
  658. package/ReactCommon/react/renderer/graphics/platform/cxx/react/renderer/graphics/Color.h +1 -0
  659. package/ReactCommon/react/renderer/graphics/platform/cxx/react/renderer/graphics/PlatformColorParser.h +29 -0
  660. package/ReactCommon/react/renderer/graphics/platform/ios/Color.cpp +8 -0
  661. package/ReactCommon/react/renderer/graphics/platform/ios/Color.h +43 -1
  662. package/ReactCommon/react/renderer/graphics/platform/ios/PlatformColorParser.h +34 -0
  663. package/ReactCommon/react/renderer/graphics/platform/ios/RCTPlatformColorUtils.h +12 -0
  664. package/ReactCommon/react/renderer/graphics/platform/ios/RCTPlatformColorUtils.mm +206 -0
  665. package/ReactCommon/react/renderer/imagemanager/BUCK +1 -1
  666. package/ReactCommon/react/renderer/imagemanager/platform/ios/RCTSyncImageManager.mm +1 -1
  667. package/ReactCommon/react/renderer/leakchecker/LeakChecker.cpp +6 -9
  668. package/ReactCommon/react/renderer/leakchecker/LeakChecker.h +1 -4
  669. package/ReactCommon/react/renderer/mapbuffer/BUCK +2 -2
  670. package/ReactCommon/react/renderer/mounting/Android.mk +2 -1
  671. package/ReactCommon/react/renderer/mounting/Differentiator.cpp +3 -10
  672. package/ReactCommon/react/renderer/mounting/Differentiator.h +1 -2
  673. package/ReactCommon/react/renderer/mounting/MountingCoordinator.cpp +1 -7
  674. package/ReactCommon/react/renderer/mounting/MountingCoordinator.h +0 -4
  675. package/ReactCommon/react/renderer/mounting/MountingOverrideDelegate.h +1 -1
  676. package/ReactCommon/react/renderer/mounting/ShadowTree.cpp +7 -5
  677. package/ReactCommon/react/renderer/mounting/ShadowTree.h +2 -1
  678. package/ReactCommon/react/renderer/mounting/ShadowView.cpp +2 -0
  679. package/ReactCommon/react/renderer/mounting/ShadowView.h +1 -0
  680. package/ReactCommon/react/renderer/mounting/ShadowViewMutation.cpp +12 -0
  681. package/ReactCommon/react/renderer/mounting/ShadowViewMutation.h +10 -1
  682. package/ReactCommon/react/renderer/mounting/StubViewTree.cpp +10 -3
  683. package/ReactCommon/react/renderer/mounting/TelemetryController.cpp +1 -1
  684. package/ReactCommon/react/renderer/mounting/stubs.cpp +3 -3
  685. package/ReactCommon/react/renderer/mounting/tests/MountingTest.cpp +22 -21
  686. package/ReactCommon/react/renderer/mounting/tests/ShadowTreeLifeCycleTest.cpp +12 -5
  687. package/ReactCommon/react/renderer/mounting/tests/StackingContextTest.cpp +2 -2
  688. package/ReactCommon/react/renderer/mounting/tests/StateReconciliationTest.cpp +6 -3
  689. package/ReactCommon/react/renderer/runtimescheduler/Android.mk +2 -1
  690. package/ReactCommon/react/renderer/runtimescheduler/BUCK +1 -0
  691. package/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler.cpp +75 -33
  692. package/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler.h +54 -10
  693. package/ReactCommon/react/renderer/runtimescheduler/RuntimeSchedulerBinding.cpp +8 -7
  694. package/ReactCommon/react/renderer/runtimescheduler/RuntimeSchedulerBinding.h +8 -5
  695. package/ReactCommon/react/renderer/runtimescheduler/RuntimeSchedulerCallInvoker.cpp +30 -0
  696. package/ReactCommon/react/renderer/runtimescheduler/RuntimeSchedulerCallInvoker.h +34 -0
  697. package/ReactCommon/react/renderer/runtimescheduler/RuntimeSchedulerClock.h +4 -2
  698. package/ReactCommon/react/renderer/runtimescheduler/SchedulerPriority.h +4 -2
  699. package/ReactCommon/react/renderer/runtimescheduler/Task.cpp +11 -5
  700. package/ReactCommon/react/renderer/runtimescheduler/Task.h +5 -3
  701. package/ReactCommon/react/renderer/runtimescheduler/primitives.h +4 -2
  702. package/ReactCommon/react/renderer/runtimescheduler/tests/RuntimeSchedulerTest.cpp +157 -0
  703. package/ReactCommon/react/renderer/runtimescheduler/tests/StubQueue.h +6 -0
  704. package/ReactCommon/react/renderer/scheduler/AsynchronousEventBeat.cpp +13 -12
  705. package/ReactCommon/react/renderer/scheduler/AsynchronousEventBeat.h +4 -4
  706. package/ReactCommon/react/renderer/{components/picker/androidpicker/react/renderer/components/androidpicker/AndroidDialogPickerShadowNode.cpp → scheduler/InspectorData.h} +10 -2
  707. package/ReactCommon/react/renderer/scheduler/Scheduler.cpp +64 -37
  708. package/ReactCommon/react/renderer/scheduler/Scheduler.h +18 -3
  709. package/ReactCommon/react/renderer/scheduler/SchedulerDelegate.h +9 -1
  710. package/ReactCommon/react/renderer/scheduler/SchedulerToolbox.h +1 -6
  711. package/ReactCommon/react/renderer/scheduler/SurfaceHandler.cpp +49 -35
  712. package/ReactCommon/react/renderer/scheduler/SurfaceHandler.h +12 -12
  713. package/ReactCommon/react/renderer/scheduler/SurfaceManager.cpp +1 -0
  714. package/ReactCommon/react/renderer/scheduler/SynchronousEventBeat.cpp +11 -4
  715. package/ReactCommon/react/renderer/scheduler/SynchronousEventBeat.h +4 -1
  716. package/ReactCommon/react/renderer/templateprocessor/UITemplateProcessor.cpp +5 -5
  717. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/RCTAttributedTextUtils.h +2 -0
  718. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/RCTAttributedTextUtils.mm +22 -0
  719. package/ReactCommon/react/renderer/timeline/BUCK +6 -6
  720. package/ReactCommon/react/renderer/uimanager/UIManager.cpp +29 -16
  721. package/ReactCommon/react/renderer/uimanager/UIManager.h +3 -1
  722. package/ReactCommon/react/renderer/uimanager/UIManagerAnimationDelegate.h +1 -1
  723. package/ReactCommon/react/renderer/uimanager/UIManagerBinding.cpp +61 -2
  724. package/ReactCommon/react/renderer/uimanager/UIManagerBinding.h +13 -1
  725. package/ReactCommon/react/renderer/uimanager/UIManagerDelegate.h +10 -2
  726. package/ReactCommon/react/test_utils/BUCK +3 -0
  727. package/ReactCommon/react/{renderer/core/Constants.h → test_utils/MockSurfaceHandler.h} +9 -7
  728. package/ReactCommon/react/test_utils/shadowTreeGeneration.h +18 -4
  729. package/ReactCommon/react/utils/Android.mk +3 -1
  730. package/ReactCommon/react/utils/BUCK +1 -0
  731. package/ReactCommon/react/utils/ContextContainer.h +0 -27
  732. package/ReactCommon/reactperflogger/React-perflogger.podspec +1 -1
  733. package/ReactCommon/runtimeexecutor/React-runtimeexecutor.podspec +1 -1
  734. package/ReactCommon/runtimeexecutor/ReactCommon/RuntimeExecutor.h +12 -0
  735. package/ReactCommon/yoga/yoga/Yoga.cpp +2 -6
  736. package/android/com/facebook/react/react-native/0.0.0-268efb102/react-native-0.0.0-268efb102.aar +0 -0
  737. package/android/com/facebook/react/react-native/0.0.0-268efb102/react-native-0.0.0-268efb102.aar.md5 +1 -0
  738. package/android/com/facebook/react/react-native/0.0.0-268efb102/react-native-0.0.0-268efb102.aar.sha1 +1 -0
  739. package/android/com/facebook/react/react-native/0.0.0-268efb102/react-native-0.0.0-268efb102.aar.sha256 +1 -0
  740. package/android/com/facebook/react/react-native/0.0.0-268efb102/react-native-0.0.0-268efb102.aar.sha512 +1 -0
  741. package/android/com/facebook/react/react-native/0.0.0-268efb102/react-native-0.0.0-268efb102.module +272 -0
  742. package/android/com/facebook/react/react-native/0.0.0-268efb102/react-native-0.0.0-268efb102.module.md5 +1 -0
  743. package/android/com/facebook/react/react-native/0.0.0-268efb102/react-native-0.0.0-268efb102.module.sha1 +1 -0
  744. package/android/com/facebook/react/react-native/0.0.0-268efb102/react-native-0.0.0-268efb102.module.sha256 +1 -0
  745. package/android/com/facebook/react/react-native/0.0.0-268efb102/react-native-0.0.0-268efb102.module.sha512 +1 -0
  746. package/android/com/facebook/react/react-native/{0.0.0-263478b91/react-native-0.0.0-263478b91.pom → 0.0.0-268efb102/react-native-0.0.0-268efb102.pom} +22 -11
  747. package/android/com/facebook/react/react-native/0.0.0-268efb102/react-native-0.0.0-268efb102.pom.md5 +1 -0
  748. package/android/com/facebook/react/react-native/0.0.0-268efb102/react-native-0.0.0-268efb102.pom.sha1 +1 -0
  749. package/android/com/facebook/react/react-native/0.0.0-268efb102/react-native-0.0.0-268efb102.pom.sha256 +1 -0
  750. package/android/com/facebook/react/react-native/0.0.0-268efb102/react-native-0.0.0-268efb102.pom.sha512 +1 -0
  751. package/android/com/facebook/react/react-native/maven-metadata.xml +4 -3
  752. package/android/com/facebook/react/react-native/maven-metadata.xml.md5 +1 -1
  753. package/android/com/facebook/react/react-native/maven-metadata.xml.sha1 +1 -1
  754. package/android/com/facebook/react/react-native/maven-metadata.xml.sha256 +1 -0
  755. package/android/com/facebook/react/react-native/maven-metadata.xml.sha512 +1 -0
  756. package/flow/HermesInternalType.js +114 -0
  757. package/flow/global.js +68 -0
  758. package/flow-typed/npm/react-test-renderer_v16.x.x.js +79 -0
  759. package/index.js +65 -40
  760. package/jest/preprocessor.js +75 -7
  761. package/jest/renderer.js +3 -7
  762. package/jest/setup.js +2 -1
  763. package/package.json +58 -19
  764. package/react.gradle +47 -25
  765. package/scripts/find-node.sh +6 -0
  766. package/scripts/generate-specs-cli.js +20 -2
  767. package/scripts/ios-configure-glog.sh +4 -0
  768. package/scripts/react-native-xcode.sh +5 -1
  769. package/scripts/react_native_pods.rb +213 -43
  770. package/template/_flowconfig +1 -1
  771. package/template/_gitignore +1 -0
  772. package/template/android/app/build.gradle +12 -7
  773. package/template/android/app/src/main/res/values/styles.xml +0 -1
  774. package/template/android/build.gradle +5 -6
  775. package/template/android/gradle/wrapper/gradle-wrapper.properties +1 -1
  776. package/template/android/gradle.properties +1 -1
  777. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +2 -0
  778. package/template/ios/Podfile +1 -0
  779. package/template/package.json +3 -4
  780. package/third-party-podspecs/RCT-Folly.podspec +14 -10
  781. package/third-party-podspecs/boost.podspec +23 -0
  782. package/Libraries/BUCK +0 -24
  783. package/Libraries/Components/DatePickerAndroid/DatePickerAndroid.android.js +0 -87
  784. package/Libraries/Components/DatePickerAndroid/DatePickerAndroid.ios.js +0 -30
  785. package/Libraries/Components/DatePickerAndroid/DatePickerAndroidTypes.js +0 -30
  786. package/Libraries/Components/Picker/AndroidDialogPickerNativeComponent.js +0 -83
  787. package/Libraries/Components/Picker/AndroidDropdownPickerNativeComponent.js +0 -82
  788. package/Libraries/Components/Picker/Picker.js +0 -168
  789. package/Libraries/Components/Picker/PickerAndroid.android.js +0 -143
  790. package/Libraries/Components/Picker/PickerAndroid.ios.js +0 -12
  791. package/Libraries/Components/Picker/PickerIOS.android.js +0 -14
  792. package/Libraries/Components/Picker/PickerIOS.ios.js +0 -163
  793. package/Libraries/Components/Picker/RCTPickerNativeComponent.js +0 -86
  794. package/Libraries/Components/StaticContainer.react.js +0 -51
  795. package/Libraries/Components/StatusBar/StatusBarIOS.js +0 -38
  796. package/Libraries/Components/Touchable/ensurePositiveDelayProps.js +0 -25
  797. package/Libraries/Interaction/InteractionMixin.js +0 -53
  798. package/Libraries/ReactNative/queryLayoutByID.js +0 -58
  799. package/Libraries/StyleSheet/StyleSheetValidation.js +0 -100
  800. package/Libraries/Text/TextInjection.js +0 -15
  801. package/React/Base/RCTJSInvokerModule.h +0 -17
  802. package/React/Fabric/Mounting/ComponentViews/Picker/RCTPickerComponentView.h +0 -19
  803. package/React/Fabric/Mounting/ComponentViews/Picker/RCTPickerComponentView.mm +0 -206
  804. package/React/Views/RCTPicker.h +0 -23
  805. package/React/Views/RCTPicker.m +0 -122
  806. package/React/Views/RCTPickerManager.m +0 -59
  807. package/ReactAndroid/release.gradle +0 -87
  808. package/ReactAndroid/src/androidTest/java/com/facebook/react/tests/DatePickerDialogTestCase.java +0 -172
  809. package/ReactAndroid/src/androidTest/java/com/facebook/react/tests/ReactPickerTestCase.java +0 -196
  810. package/ReactAndroid/src/androidTest/js/DatePickerDialogTestModule.js +0 -45
  811. package/ReactAndroid/src/androidTest/js/PickerAndroidTestModule.js +0 -89
  812. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerImpl.java +0 -82
  813. package/ReactAndroid/src/main/java/com/facebook/react/modules/datepicker/BUCK +0 -27
  814. package/ReactAndroid/src/main/java/com/facebook/react/modules/datepicker/DatePickerDialogFragment.java +0 -137
  815. package/ReactAndroid/src/main/java/com/facebook/react/modules/datepicker/DatePickerDialogModule.java +0 -153
  816. package/ReactAndroid/src/main/java/com/facebook/react/modules/datepicker/DatePickerMode.java +0 -15
  817. package/ReactAndroid/src/main/java/com/facebook/react/modules/datepicker/DismissableDatePickerDialog.java +0 -117
  818. package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/AndroidDialogPickerManagerDelegate.java +0 -48
  819. package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/AndroidDialogPickerManagerInterface.java +0 -23
  820. package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/AndroidDropdownPickerManagerDelegate.java +0 -48
  821. package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/AndroidDropdownPickerManagerInterface.java +0 -22
  822. package/ReactAndroid/src/main/java/com/facebook/react/views/picker/BUCK +0 -30
  823. package/ReactAndroid/src/main/java/com/facebook/react/views/picker/ReactDialogPickerManager.java +0 -51
  824. package/ReactAndroid/src/main/java/com/facebook/react/views/picker/ReactDropdownPickerManager.java +0 -50
  825. package/ReactAndroid/src/main/java/com/facebook/react/views/picker/ReactPicker.java +0 -196
  826. package/ReactAndroid/src/main/java/com/facebook/react/views/picker/ReactPickerAdapter.java +0 -95
  827. package/ReactAndroid/src/main/java/com/facebook/react/views/picker/ReactPickerItem.java +0 -43
  828. package/ReactAndroid/src/main/java/com/facebook/react/views/picker/ReactPickerManager.java +0 -99
  829. package/ReactAndroid/src/main/java/com/facebook/react/views/picker/events/PickerItemSelectEvent.java +0 -42
  830. package/ReactCommon/react/renderer/components/picker/Android.mk +0 -37
  831. package/ReactCommon/react/renderer/components/picker/BUCK +0 -98
  832. package/ReactCommon/react/renderer/components/picker/androidpicker/react/renderer/components/androidpicker/AndroidDialogPickerEventEmitter.cpp +0 -23
  833. package/ReactCommon/react/renderer/components/picker/androidpicker/react/renderer/components/androidpicker/AndroidDialogPickerEventEmitter.h +0 -27
  834. package/ReactCommon/react/renderer/components/picker/androidpicker/react/renderer/components/androidpicker/AndroidDialogPickerProps.cpp +0 -28
  835. package/ReactCommon/react/renderer/components/picker/androidpicker/react/renderer/components/androidpicker/AndroidDialogPickerProps.h +0 -77
  836. package/ReactCommon/react/renderer/components/picker/androidpicker/react/renderer/components/androidpicker/AndroidDialogPickerShadowNode.h +0 -29
  837. package/ReactCommon/react/renderer/components/picker/androidpicker/react/renderer/components/androidpicker/AndroidDropdownPickerComponentDescriptor.h +0 -21
  838. package/ReactCommon/react/renderer/components/picker/androidpicker/react/renderer/components/androidpicker/AndroidDropdownPickerEventEmitter.cpp +0 -23
  839. package/ReactCommon/react/renderer/components/picker/androidpicker/react/renderer/components/androidpicker/AndroidDropdownPickerEventEmitter.h +0 -27
  840. package/ReactCommon/react/renderer/components/picker/androidpicker/react/renderer/components/androidpicker/AndroidDropdownPickerProps.cpp +0 -28
  841. package/ReactCommon/react/renderer/components/picker/androidpicker/react/renderer/components/androidpicker/AndroidDropdownPickerProps.h +0 -77
  842. package/ReactCommon/react/renderer/components/picker/androidpicker/react/renderer/components/androidpicker/AndroidDropdownPickerShadowNode.cpp +0 -17
  843. package/ReactCommon/react/renderer/components/picker/androidpicker/react/renderer/components/androidpicker/AndroidDropdownPickerShadowNode.h +0 -29
  844. package/ReactCommon/react/renderer/components/picker/iospicker/BUCK +0 -59
  845. package/ReactCommon/react/renderer/components/picker/iospicker/PickerComponentDescriptor.h +0 -26
  846. package/ReactCommon/react/renderer/components/picker/iospicker/PickerEventEmitter.cpp +0 -23
  847. package/ReactCommon/react/renderer/components/picker/iospicker/PickerEventEmitter.h +0 -28
  848. package/ReactCommon/react/renderer/components/picker/iospicker/PickerProps.cpp +0 -46
  849. package/ReactCommon/react/renderer/components/picker/iospicker/PickerProps.h +0 -36
  850. package/ReactCommon/react/renderer/components/picker/iospicker/PickerShadowNode.cpp +0 -16
  851. package/ReactCommon/react/renderer/components/picker/iospicker/PickerShadowNode.h +0 -33
  852. package/ReactCommon/react/renderer/components/picker/iospicker/PickerState.h +0 -19
  853. package/ReactCommon/react/renderer/components/picker/iospicker/conversions.h +0 -48
  854. package/ReactCommon/react/renderer/core/Constants.cpp +0 -24
  855. package/ReactCommon/react/renderer/mounting/DifferentiatorFlatteningClassic.cpp +0 -1564
  856. package/ReactCommon/react/renderer/mounting/DifferentiatorFlatteningClassic.h +0 -45
  857. package/ReactCommon/react/renderer/scheduler/AsynchronousEventBeatV2.cpp +0 -58
  858. package/ReactCommon/react/renderer/scheduler/AsynchronousEventBeatV2.h +0 -41
  859. package/android/com/facebook/react/react-native/0.0.0-263478b91/react-native-0.0.0-263478b91.aar +0 -0
  860. package/android/com/facebook/react/react-native/0.0.0-263478b91/react-native-0.0.0-263478b91.aar.md5 +0 -1
  861. package/android/com/facebook/react/react-native/0.0.0-263478b91/react-native-0.0.0-263478b91.aar.sha1 +0 -1
  862. package/android/com/facebook/react/react-native/0.0.0-263478b91/react-native-0.0.0-263478b91.pom.md5 +0 -1
  863. package/android/com/facebook/react/react-native/0.0.0-263478b91/react-native-0.0.0-263478b91.pom.sha1 +0 -1
  864. package/scripts/generate-specs.sh +0 -100
  865. package/template/_editorconfig +0 -3
  866. package/template/_gitattributes +0 -3
@@ -1,1564 +0,0 @@
1
- /*
2
- * Copyright (c) Facebook, Inc. and its affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
-
8
- #include "DifferentiatorFlatteningClassic.h"
9
-
10
- #include <better/map.h>
11
- #include <better/small_vector.h>
12
- #include <react/debug/react_native_assert.h>
13
- #include <react/renderer/core/LayoutableShadowNode.h>
14
- #include <react/renderer/debug/SystraceSection.h>
15
- #include <algorithm>
16
- #include "ShadowView.h"
17
-
18
- #ifdef DEBUG_LOGS_DIFFER
19
- #include <glog/logging.h>
20
- #define DEBUG_LOGS_BREADCRUMBS 1
21
- #define DEBUG_LOGS(code) code
22
- #else
23
- #define DEBUG_LOGS(code)
24
- #endif
25
-
26
- #ifdef DEBUG_LOGS_BREADCRUMBS
27
- #define BREADCRUMB_TYPE std::string
28
- #define DIFF_BREADCRUMB(X) (breadcrumb + " - " + std::string(X))
29
- #define CREATE_DIFF_BREADCRUMB(X) std::to_string(X)
30
- #else
31
-
32
- enum class NoBreadcrumb {};
33
-
34
- #define BREADCRUMB_TYPE NoBreadcrumb const &
35
- #define DIFF_BREADCRUMB(X) \
36
- {}
37
- #define CREATE_DIFF_BREADCRUMB(X) \
38
- {}
39
- #endif
40
-
41
- namespace facebook {
42
- namespace react {
43
- namespace DifferOld {
44
-
45
- /*
46
- * Extremely simple and naive implementation of a map.
47
- * The map is simple but it's optimized for particular constraints that we have
48
- * here.
49
- *
50
- * A regular map implementation (e.g. `std::unordered_map`) has some basic
51
- * performance guarantees like constant average insertion and lookup complexity.
52
- * This is nice, but it's *average* complexity measured on a non-trivial amount
53
- * of data. The regular map is a very complex data structure that using hashing,
54
- * buckets, multiple comprising operations, multiple allocations and so on.
55
- *
56
- * In our particular case, we need a map for `int` to `void *` with a dozen
57
- * values. In these conditions, nothing can beat a naive implementation using a
58
- * stack-allocated vector. And this implementation is exactly this: no
59
- * allocation, no hashing, no complex branching, no buckets, no iterators, no
60
- * rehashing, no other guarantees. It's crazy limited, unsafe, and performant on
61
- * a trivial amount of data.
62
- *
63
- * Besides that, we also need to optimize for insertion performance (the case
64
- * where a bunch of views appears on the screen first time); in this
65
- * implementation, this is as performant as vector `push_back`.
66
- */
67
- template <typename KeyT, typename ValueT, int DefaultSize = 16>
68
- class TinyMap final {
69
- public:
70
- using Pair = std::pair<KeyT, ValueT>;
71
- using Iterator = Pair *;
72
-
73
- /**
74
- * This must strictly only be called from outside of this class.
75
- */
76
- inline Iterator begin() {
77
- // Force a clean so that iterating over this TinyMap doesn't iterate over
78
- // erased elements. If all elements erased are at the front of the vector,
79
- // then we don't need to clean.
80
- cleanVector(erasedAtFront_ != numErased_);
81
-
82
- Iterator it = begin_();
83
-
84
- if (it != nullptr) {
85
- return it + erasedAtFront_;
86
- }
87
-
88
- return nullptr;
89
- }
90
-
91
- inline Iterator end() {
92
- // `back()` asserts on the vector being non-empty
93
- if (vector_.empty() || numErased_ == vector_.size()) {
94
- return nullptr;
95
- }
96
-
97
- return &vector_.back() + 1;
98
- }
99
-
100
- inline Iterator find(KeyT key) {
101
- cleanVector();
102
-
103
- react_native_assert(key != 0);
104
-
105
- if (begin_() == nullptr) {
106
- return end();
107
- }
108
-
109
- for (auto it = begin_() + erasedAtFront_; it != end(); it++) {
110
- if (it->first == key) {
111
- return it;
112
- }
113
- }
114
-
115
- return end();
116
- }
117
-
118
- inline void insert(Pair pair) {
119
- react_native_assert(pair.first != 0);
120
- vector_.push_back(pair);
121
- }
122
-
123
- inline void erase(Iterator iterator) {
124
- // Invalidate tag.
125
- iterator->first = 0;
126
-
127
- if (iterator == begin_() + erasedAtFront_) {
128
- erasedAtFront_++;
129
- }
130
-
131
- numErased_++;
132
- }
133
-
134
- private:
135
- /**
136
- * Same as begin() but doesn't call cleanVector at the beginning.
137
- */
138
- inline Iterator begin_() {
139
- // `front()` asserts on the vector being non-empty
140
- if (vector_.empty() || vector_.size() == numErased_) {
141
- return nullptr;
142
- }
143
-
144
- return &vector_.front();
145
- }
146
-
147
- /**
148
- * Remove erased elements from internal vector.
149
- * We only modify the vector if erased elements are at least half of the
150
- * vector.
151
- */
152
- inline void cleanVector(bool forceClean = false) {
153
- if ((numErased_ < (vector_.size() / 2) && !forceClean) || vector_.empty() ||
154
- numErased_ == 0 || numErased_ == erasedAtFront_) {
155
- return;
156
- }
157
-
158
- if (numErased_ == vector_.size()) {
159
- vector_.clear();
160
- } else {
161
- vector_.erase(
162
- std::remove_if(
163
- vector_.begin(),
164
- vector_.end(),
165
- [](auto const &item) { return item.first == 0; }),
166
- vector_.end());
167
- }
168
- numErased_ = 0;
169
- erasedAtFront_ = 0;
170
- }
171
-
172
- better::small_vector<Pair, DefaultSize> vector_;
173
- int numErased_{0};
174
- int erasedAtFront_{0};
175
- };
176
-
177
- /*
178
- * Sorting comparator for `reorderInPlaceIfNeeded`.
179
- */
180
- static bool shouldFirstPairComesBeforeSecondOne(
181
- ShadowViewNodePairLegacy const &lhs,
182
- ShadowViewNodePairLegacy const &rhs) noexcept {
183
- return lhs.shadowNode->getOrderIndex() < rhs.shadowNode->getOrderIndex();
184
- }
185
-
186
- /*
187
- * Reorders pairs in-place based on `orderIndex` using a stable sort algorithm.
188
- */
189
- static void reorderInPlaceIfNeeded(
190
- ShadowViewNodePairLegacy::OwningList &pairs) noexcept {
191
- if (pairs.size() < 2) {
192
- return;
193
- }
194
-
195
- auto isReorderNeeded = false;
196
- for (auto const &pair : pairs) {
197
- if (pair.shadowNode->getOrderIndex() != 0) {
198
- isReorderNeeded = true;
199
- break;
200
- }
201
- }
202
-
203
- if (!isReorderNeeded) {
204
- return;
205
- }
206
-
207
- std::stable_sort(
208
- pairs.begin(), pairs.end(), &shouldFirstPairComesBeforeSecondOne);
209
- }
210
-
211
- static void sliceChildShadowNodeViewPairsRecursivelyV2(
212
- ShadowViewNodePairLegacy::OwningList &pairList,
213
- Point layoutOffset,
214
- ShadowNode const &shadowNode) {
215
- for (auto const &sharedChildShadowNode : shadowNode.getChildren()) {
216
- auto &childShadowNode = *sharedChildShadowNode;
217
-
218
- #ifndef ANDROID
219
- // Temporary disabled on Android because the mounting infrastructure
220
- // is not fully ready yet.
221
- if (childShadowNode.getTraits().check(ShadowNodeTraits::Trait::Hidden)) {
222
- continue;
223
- }
224
- #endif
225
-
226
- auto shadowView = ShadowView(childShadowNode);
227
- auto origin = layoutOffset;
228
- if (shadowView.layoutMetrics != EmptyLayoutMetrics) {
229
- origin += shadowView.layoutMetrics.frame.origin;
230
- shadowView.layoutMetrics.frame.origin += layoutOffset;
231
- }
232
-
233
- // This might not be a FormsView, or a FormsStackingContext. We let the
234
- // differ handle removal of flattened views from the Mounting layer and
235
- // shuffling their children around.
236
- bool isConcreteView =
237
- childShadowNode.getTraits().check(ShadowNodeTraits::Trait::FormsView);
238
- bool areChildrenFlattened = !childShadowNode.getTraits().check(
239
- ShadowNodeTraits::Trait::FormsStackingContext);
240
- pairList.push_back(
241
- {shadowView, &childShadowNode, areChildrenFlattened, isConcreteView});
242
-
243
- if (!childShadowNode.getTraits().check(
244
- ShadowNodeTraits::Trait::FormsStackingContext)) {
245
- sliceChildShadowNodeViewPairsRecursivelyV2(
246
- pairList, origin, childShadowNode);
247
- }
248
- }
249
- }
250
-
251
- ShadowViewNodePairLegacy::OwningList sliceChildShadowNodeViewPairsV2(
252
- ShadowNode const &shadowNode,
253
- bool allowFlattened) {
254
- auto pairList = ShadowViewNodePairLegacy::OwningList{};
255
-
256
- if (!shadowNode.getTraits().check(
257
- ShadowNodeTraits::Trait::FormsStackingContext) &&
258
- shadowNode.getTraits().check(ShadowNodeTraits::Trait::FormsView) &&
259
- !allowFlattened) {
260
- return pairList;
261
- }
262
-
263
- sliceChildShadowNodeViewPairsRecursivelyV2(pairList, {0, 0}, shadowNode);
264
-
265
- // Sorting pairs based on `orderIndex` if needed.
266
- reorderInPlaceIfNeeded(pairList);
267
-
268
- // Set list and mountIndex for each after reordering
269
- size_t mountIndex = 0;
270
- for (auto &child : pairList) {
271
- child.mountIndex = (child.isConcreteView ? mountIndex++ : -1);
272
- }
273
-
274
- return pairList;
275
- }
276
-
277
- /*
278
- * Before we start to diff, let's make sure all our core data structures are in
279
- * good shape to deliver the best performance.
280
- */
281
- static_assert(
282
- std::is_move_constructible<ShadowViewMutation>::value,
283
- "`ShadowViewMutation` must be `move constructible`.");
284
- static_assert(
285
- std::is_move_constructible<ShadowView>::value,
286
- "`ShadowView` must be `move constructible`.");
287
- static_assert(
288
- std::is_move_constructible<ShadowViewNodePairLegacy>::value,
289
- "`ShadowViewNodePairLegacy` must be `move constructible`.");
290
- static_assert(
291
- std::is_move_constructible<ShadowViewNodePairLegacy::OwningList>::value,
292
- "`ShadowViewNodePairLegacy::OwningList` must be `move constructible`.");
293
-
294
- static_assert(
295
- std::is_move_assignable<ShadowViewMutation>::value,
296
- "`ShadowViewMutation` must be `move assignable`.");
297
- static_assert(
298
- std::is_move_assignable<ShadowView>::value,
299
- "`ShadowView` must be `move assignable`.");
300
- static_assert(
301
- std::is_move_assignable<ShadowViewNodePairLegacy>::value,
302
- "`ShadowViewNodePairLegacy` must be `move assignable`.");
303
- static_assert(
304
- std::is_move_assignable<ShadowViewNodePairLegacy::OwningList>::value,
305
- "`ShadowViewNodePairLegacy::OwningList` must be `move assignable`.");
306
-
307
- // Forward declaration
308
- static void calculateShadowViewMutationsV2(
309
- BREADCRUMB_TYPE breadcrumb,
310
- ShadowViewMutation::List &mutations,
311
- ShadowView const &parentShadowView,
312
- ShadowViewNodePairLegacy::OwningList &&oldChildPairs,
313
- ShadowViewNodePairLegacy::OwningList &&newChildPairs);
314
-
315
- struct OrderedMutationInstructionContainer {
316
- ShadowViewMutation::List &createMutations;
317
- ShadowViewMutation::List &deleteMutations;
318
- ShadowViewMutation::List &insertMutations;
319
- ShadowViewMutation::List &removeMutations;
320
- ShadowViewMutation::List &updateMutations;
321
- ShadowViewMutation::List &downwardMutations;
322
- ShadowViewMutation::List &destructiveDownwardMutations;
323
- };
324
-
325
- static void calculateShadowViewMutationsFlattener(
326
- BREADCRUMB_TYPE breadcrumb,
327
- ReparentMode reparentMode,
328
- OrderedMutationInstructionContainer &mutationInstructionContainer,
329
- ShadowView const &parentShadowView,
330
- TinyMap<Tag, ShadowViewNodePairLegacy *> &unvisitedFlattenedNodes,
331
- ShadowViewNodePairLegacy const &node,
332
- TinyMap<Tag, ShadowViewNodePairLegacy *> *parentSubVisitedOtherNewNodes =
333
- nullptr,
334
- TinyMap<Tag, ShadowViewNodePairLegacy *> *parentSubVisitedOtherOldNodes =
335
- nullptr);
336
-
337
- /**
338
- * Here we flatten or unflatten a subtree, given an unflattened node in either
339
- * the old or new tree, and a list of flattened nodes in the other tree.
340
- *
341
- * For example: if you are Flattening, the node will be in the old tree and the
342
- * list will be from the new tree. If you are Unflattening, the opposite is
343
- true.
344
-
345
- * It is currently not possible for ReactJS, and therefore React Native, to move
346
- * a node *from* one parent to another without an entirely new subtree being
347
- * created. When we "reparent" in React Native here it is only because
348
- intermediate
349
- * ShadowNodes/ShadowViews, which *always* exist, are flattened or unflattened
350
- away.
351
- * Thus, this algorithm handles the very specialized cases of the tree
352
- collapsing or
353
- * expanding vertically in that way.
354
-
355
- * Sketch of algorithm:
356
- * 0. Create a map of nodes in the flattened list. This should be done *before*
357
- * calling this function.
358
- * 1. Traverse the Node Subtree; remove elements from the map as they are
359
- * visited in the tree.
360
- * Perform a Remove/Insert depending on if we're flattening or unflattening
361
- * If Tree node is not in Map/List, perform Delete/Create.
362
- * 2. Traverse the list.
363
- * Perform linear remove from the old View, or insert into the new parent
364
- * View if we're flattening.
365
- * If a node is in the list but not the map, it means it's been visited and
366
- * Update has already been
367
- * performed in the subtree. If it *is* in the map, it means the node is not
368
- * * in the Tree, and should be Deleted/Created
369
- * **after this function is called**, by the caller.
370
- */
371
- static void calculateShadowViewMutationsFlattener(
372
- BREADCRUMB_TYPE breadcrumb,
373
- ReparentMode reparentMode,
374
- OrderedMutationInstructionContainer &mutationInstructionContainer,
375
- ShadowView const &parentShadowView,
376
- TinyMap<Tag, ShadowViewNodePairLegacy *> &unvisitedOtherNodes,
377
- ShadowViewNodePairLegacy const &node,
378
- TinyMap<Tag, ShadowViewNodePairLegacy *> *parentSubVisitedOtherNewNodes,
379
- TinyMap<Tag, ShadowViewNodePairLegacy *> *parentSubVisitedOtherOldNodes) {
380
- DEBUG_LOGS({
381
- LOG(ERROR) << "Differ Flattener 1: "
382
- << (reparentMode == ReparentMode::Unflatten ? "Unflattening"
383
- : "Flattening")
384
- << " [" << node.shadowView.tag << "]";
385
- });
386
-
387
- // Step 1: iterate through entire tree
388
- ShadowViewNodePairLegacy::OwningList treeChildren =
389
- sliceChildShadowNodeViewPairsV2(*node.shadowNode);
390
-
391
- DEBUG_LOGS({
392
- LOG(ERROR) << "Differ Flattener 1.4: "
393
- << (reparentMode == ReparentMode::Unflatten ? "Unflattening"
394
- : "Flattening")
395
- << " [" << node.shadowView.tag << "]";
396
- LOG(ERROR) << "Differ Flattener Entry: Child Pairs: ";
397
- std::string strTreeChildPairs;
398
- for (size_t k = 0; k < treeChildren.size(); k++) {
399
- strTreeChildPairs.append(std::to_string(treeChildren[k].shadowView.tag));
400
- strTreeChildPairs.append(treeChildren[k].isConcreteView ? "" : "'");
401
- strTreeChildPairs.append(treeChildren[k].flattened ? "*" : "");
402
- strTreeChildPairs.append(", ");
403
- }
404
- std::string strListChildPairs;
405
- for (auto &unvisitedNode : unvisitedOtherNodes) {
406
- strListChildPairs.append(
407
- std::to_string(unvisitedNode.second->shadowView.tag));
408
- strListChildPairs.append(unvisitedNode.second->isConcreteView ? "" : "'");
409
- strListChildPairs.append(unvisitedNode.second->flattened ? "*" : "");
410
- strListChildPairs.append(", ");
411
- }
412
- LOG(ERROR) << "Differ Flattener Entry: Tree Child Pairs: "
413
- << strTreeChildPairs;
414
- LOG(ERROR) << "Differ Flattener Entry: List Child Pairs: "
415
- << strListChildPairs;
416
- });
417
-
418
- // Views in other tree that are visited by sub-flattening or sub-unflattening
419
- TinyMap<Tag, ShadowViewNodePairLegacy *> subVisitedOtherNewNodes{};
420
- TinyMap<Tag, ShadowViewNodePairLegacy *> subVisitedOtherOldNodes{};
421
- auto subVisitedNewMap =
422
- (parentSubVisitedOtherNewNodes != nullptr ? parentSubVisitedOtherNewNodes
423
- : &subVisitedOtherNewNodes);
424
- auto subVisitedOldMap =
425
- (parentSubVisitedOtherOldNodes != nullptr ? parentSubVisitedOtherOldNodes
426
- : &subVisitedOtherOldNodes);
427
-
428
- // Candidates for full tree creation or deletion at the end of this function
429
- auto deletionCreationCandidatePairs =
430
- TinyMap<Tag, ShadowViewNodePairLegacy const *>{};
431
-
432
- for (size_t index = 0;
433
- index < treeChildren.size() && index < treeChildren.size();
434
- index++) {
435
- // First, remove all children of the tree being flattened, or insert
436
- // children into parent tree if they're being unflattened. Then, look up
437
- // each node in the "unvisited" list and update the nodes and subtrees if
438
- // appropriate.
439
- auto &treeChildPair = treeChildren[index];
440
-
441
- // Caller will take care of the corresponding action in the other tree.
442
- if (treeChildPair.isConcreteView) {
443
- if (reparentMode == ReparentMode::Flatten) {
444
- mutationInstructionContainer.removeMutations.push_back(
445
- ShadowViewMutation::RemoveMutation(
446
- node.shadowView,
447
- treeChildPair.shadowView,
448
- static_cast<int>(treeChildPair.mountIndex)));
449
- } else {
450
- mutationInstructionContainer.insertMutations.push_back(
451
- ShadowViewMutation::InsertMutation(
452
- node.shadowView,
453
- treeChildPair.shadowView,
454
- static_cast<int>(treeChildPair.mountIndex)));
455
- }
456
- }
457
-
458
- // Try to find node in other tree
459
- auto unvisitedIt = unvisitedOtherNodes.find(treeChildPair.shadowView.tag);
460
- auto subVisitedOtherNewIt =
461
- (unvisitedIt == unvisitedOtherNodes.end()
462
- ? subVisitedNewMap->find(treeChildPair.shadowView.tag)
463
- : subVisitedNewMap->end());
464
- auto subVisitedOtherOldIt =
465
- (unvisitedIt == unvisitedOtherNodes.end()
466
- ? subVisitedOldMap->find(treeChildPair.shadowView.tag)
467
- : subVisitedOldMap->end());
468
-
469
- // Find in other tree
470
- if (unvisitedIt != unvisitedOtherNodes.end() ||
471
- subVisitedOtherNewIt != subVisitedNewMap->end() ||
472
- subVisitedOtherOldIt != subVisitedOldMap->end()) {
473
- // If we've already done updates on this node, don't repeat.
474
- if (reparentMode == ReparentMode::Flatten &&
475
- unvisitedIt == unvisitedOtherNodes.end() &&
476
- subVisitedOtherOldIt != subVisitedOldMap->end()) {
477
- continue;
478
- } else if (
479
- reparentMode == ReparentMode::Unflatten &&
480
- unvisitedIt == unvisitedOtherNodes.end() &&
481
- subVisitedOtherNewIt != subVisitedNewMap->end()) {
482
- continue;
483
- }
484
-
485
- auto &otherTreeNodePair =
486
- *(unvisitedIt != unvisitedOtherNodes.end()
487
- ? unvisitedIt->second
488
- : (subVisitedOtherNewIt != subVisitedNewMap->end()
489
- ? subVisitedOtherNewIt->second
490
- : subVisitedOtherOldIt->second));
491
-
492
- // If we've already done updates, don't repeat it.
493
- if (treeChildPair.inOtherTree || otherTreeNodePair.inOtherTree) {
494
- continue;
495
- }
496
-
497
- auto &newTreeNodePair =
498
- (reparentMode == ReparentMode::Flatten ? otherTreeNodePair
499
- : treeChildPair);
500
- auto &oldTreeNodePair =
501
- (reparentMode == ReparentMode::Flatten ? treeChildPair
502
- : otherTreeNodePair);
503
-
504
- if (newTreeNodePair.shadowView != oldTreeNodePair.shadowView &&
505
- newTreeNodePair.isConcreteView && oldTreeNodePair.isConcreteView) {
506
- mutationInstructionContainer.updateMutations.push_back(
507
- ShadowViewMutation::UpdateMutation(
508
- oldTreeNodePair.shadowView, newTreeNodePair.shadowView));
509
- }
510
-
511
- // Update children if appropriate.
512
- if (!oldTreeNodePair.flattened && !newTreeNodePair.flattened) {
513
- if (oldTreeNodePair.shadowNode != newTreeNodePair.shadowNode) {
514
- calculateShadowViewMutationsV2(
515
- DIFF_BREADCRUMB(
516
- "(Un)Flattener trivial update of " +
517
- std::to_string(newTreeNodePair.shadowView.tag)),
518
- mutationInstructionContainer.downwardMutations,
519
- newTreeNodePair.shadowView,
520
- sliceChildShadowNodeViewPairsV2(*oldTreeNodePair.shadowNode),
521
- sliceChildShadowNodeViewPairsV2(*newTreeNodePair.shadowNode));
522
- }
523
- } else if (oldTreeNodePair.flattened != newTreeNodePair.flattened) {
524
- // We need to handle one of the children being flattened or unflattened,
525
- // in the context of a parent flattening or unflattening.
526
- ReparentMode childReparentMode =
527
- (oldTreeNodePair.flattened ? ReparentMode::Unflatten
528
- : ReparentMode::Flatten);
529
-
530
- // Case 1: child mode is the same as parent.
531
- // This is a flatten-flatten, or unflatten-unflatten.
532
- if (childReparentMode == reparentMode) {
533
- calculateShadowViewMutationsFlattener(
534
- DIFF_BREADCRUMB(
535
- std::string(
536
- reparentMode == ReparentMode::Flatten
537
- ? "Flatten-Flatten"
538
- : "Unflatten-Unflatten") +
539
- " new:" +
540
- std::to_string(
541
- reparentMode == ReparentMode::Flatten
542
- ? parentShadowView.tag
543
- : newTreeNodePair.shadowView.tag) +
544
- " old:" + std::to_string(treeChildPair.shadowView.tag)),
545
- childReparentMode,
546
- mutationInstructionContainer,
547
- (reparentMode == ReparentMode::Flatten
548
- ? parentShadowView
549
- : newTreeNodePair.shadowView),
550
- unvisitedOtherNodes,
551
- treeChildPair,
552
- subVisitedNewMap,
553
- subVisitedOldMap);
554
- } else {
555
- // Unflatten parent, flatten child
556
- if (childReparentMode == ReparentMode::Flatten) {
557
- // Construct unvisited nodes map
558
- auto unvisitedNewChildPairs =
559
- TinyMap<Tag, ShadowViewNodePairLegacy *>{};
560
- // Memory note: these oldFlattenedNodes all disappear at the end of
561
- // this "else" block, including any annotations we put on them.
562
- auto newFlattenedNodes = sliceChildShadowNodeViewPairsV2(
563
- *newTreeNodePair.shadowNode, true);
564
- for (size_t i = 0; i < newFlattenedNodes.size(); i++) {
565
- auto &newChild = newFlattenedNodes[i];
566
-
567
- auto unvisitedOtherNodesIt =
568
- unvisitedOtherNodes.find(newChild.shadowView.tag);
569
- if (unvisitedOtherNodesIt != unvisitedOtherNodes.end()) {
570
- auto &unvisitedItPair = *unvisitedOtherNodesIt->second;
571
- unvisitedNewChildPairs.insert(
572
- {unvisitedItPair.shadowView.tag, &unvisitedItPair});
573
- } else {
574
- unvisitedNewChildPairs.insert(
575
- {newChild.shadowView.tag, &newChild});
576
- }
577
- }
578
-
579
- // Flatten old tree into new list
580
- // At the end of this loop we still want to know which of these
581
- // children are visited, so we reuse the `newRemainingPairs` map.
582
- calculateShadowViewMutationsFlattener(
583
- DIFF_BREADCRUMB(
584
- std::string("Flatten old tree into new list; new:") +
585
- std::to_string(
586
- reparentMode == ReparentMode::Flatten
587
- ? parentShadowView.tag
588
- : newTreeNodePair.shadowView.tag) +
589
- " old:" + std::to_string(oldTreeNodePair.shadowView.tag)),
590
- ReparentMode::Flatten,
591
- mutationInstructionContainer,
592
- (reparentMode == ReparentMode::Flatten
593
- ? parentShadowView
594
- : newTreeNodePair.shadowView),
595
- unvisitedNewChildPairs,
596
- oldTreeNodePair,
597
- subVisitedNewMap,
598
- subVisitedOldMap);
599
-
600
- for (auto &newFlattenedNode : newFlattenedNodes) {
601
- auto unvisitedOldChildPairIt =
602
- unvisitedNewChildPairs.find(newFlattenedNode.shadowView.tag);
603
-
604
- if (unvisitedOldChildPairIt == unvisitedNewChildPairs.end()) {
605
- // Node was visited.
606
-
607
- auto deleteCreateIt = deletionCreationCandidatePairs.find(
608
- newFlattenedNode.shadowView.tag);
609
- if (deleteCreateIt != deletionCreationCandidatePairs.end()) {
610
- deletionCreationCandidatePairs.erase(deleteCreateIt);
611
- }
612
- }
613
- }
614
- }
615
- // Flatten parent, unflatten child
616
- else {
617
- // Construct unvisited nodes map
618
- auto unvisitedOldChildPairs =
619
- TinyMap<Tag, ShadowViewNodePairLegacy *>{};
620
- // Memory note: these oldFlattenedNodes all disappear at the end of
621
- // this "else" block, including any annotations we put on them.
622
- auto oldFlattenedNodes = sliceChildShadowNodeViewPairsV2(
623
- *oldTreeNodePair.shadowNode, true);
624
- for (size_t i = 0; i < oldFlattenedNodes.size(); i++) {
625
- auto &oldChild = oldFlattenedNodes[i];
626
-
627
- auto unvisitedOtherNodesIt =
628
- unvisitedOtherNodes.find(oldChild.shadowView.tag);
629
- if (unvisitedOtherNodesIt != unvisitedOtherNodes.end()) {
630
- auto &unvisitedItPair = *unvisitedOtherNodesIt->second;
631
- unvisitedOldChildPairs.insert(
632
- {unvisitedItPair.shadowView.tag, &unvisitedItPair});
633
- } else {
634
- unvisitedOldChildPairs.insert(
635
- {oldChild.shadowView.tag, &oldChild});
636
- }
637
- }
638
-
639
- // Unflatten old list into new tree
640
- calculateShadowViewMutationsFlattener(
641
- DIFF_BREADCRUMB(
642
- "Unflatten old list into new tree; old:" +
643
- std::to_string(
644
- reparentMode == ReparentMode::Flatten
645
- ? parentShadowView.tag
646
- : newTreeNodePair.shadowView.tag) +
647
- " new:" + std::to_string(newTreeNodePair.shadowView.tag)),
648
- ReparentMode::Unflatten,
649
- mutationInstructionContainer,
650
- (reparentMode == ReparentMode::Flatten
651
- ? parentShadowView
652
- : newTreeNodePair.shadowView),
653
- unvisitedOldChildPairs,
654
- newTreeNodePair,
655
- subVisitedNewMap,
656
- subVisitedOldMap);
657
-
658
- // If old nodes were not visited, we know that we can delete them
659
- // now. They will be removed from the hierarchy by the outermost
660
- // loop of this function.
661
- for (auto &oldFlattenedNode : oldFlattenedNodes) {
662
- auto unvisitedOldChildPairIt =
663
- unvisitedOldChildPairs.find(oldFlattenedNode.shadowView.tag);
664
- if (unvisitedOldChildPairIt != unvisitedOldChildPairs.end()) {
665
- // Node unvisited - mark the entire subtree for deletion
666
- if (oldFlattenedNode.isConcreteView) {
667
- auto tag = oldFlattenedNode.shadowView.tag;
668
- auto oldRemainingChildInListIt = std::find_if(
669
- treeChildren.begin(),
670
- treeChildren.end(),
671
- [&tag](ShadowViewNodePairLegacy &nodePair) {
672
- return nodePair.shadowView.tag == tag;
673
- });
674
- if (oldRemainingChildInListIt != treeChildren.end()) {
675
- auto deleteCreateIt = deletionCreationCandidatePairs.find(
676
- oldFlattenedNode.shadowView.tag);
677
- if (deleteCreateIt ==
678
- deletionCreationCandidatePairs.end()) {
679
- deletionCreationCandidatePairs.insert(
680
- {tag, &*oldRemainingChildInListIt});
681
- }
682
- } else {
683
- // TODO: we might want to remove this block. It seems
684
- // impossible to hit this logically (and empirically, after
685
- // testing on lots of randomized and pathologically
686
- // constructed trees) but I'm leaving this here out of an
687
- // abundance of caution.
688
- // In theory, this path should never be hit. If we don't see
689
- // this in dev after a few months, let's delete this path.
690
- react_native_assert(false);
691
- mutationInstructionContainer.deleteMutations.push_back(
692
- ShadowViewMutation::DeleteMutation(
693
- oldFlattenedNode.shadowView));
694
-
695
- calculateShadowViewMutationsV2(
696
- DIFF_BREADCRUMB(
697
- "Destroy " +
698
- std::to_string(oldFlattenedNode.shadowView.tag)),
699
- mutationInstructionContainer
700
- .destructiveDownwardMutations,
701
- oldFlattenedNode.shadowView,
702
- sliceChildShadowNodeViewPairsV2(
703
- *oldFlattenedNode.shadowNode),
704
- {});
705
- }
706
- }
707
- } else {
708
- // Node was visited - make sure to remove it from
709
- // "newRemainingPairs" map
710
- auto newRemainingIt =
711
- unvisitedOtherNodes.find(oldFlattenedNode.shadowView.tag);
712
- if (newRemainingIt != unvisitedOtherNodes.end()) {
713
- unvisitedOtherNodes.erase(newRemainingIt);
714
- }
715
-
716
- // We also remove it from delete/creation candidates
717
- auto deleteCreateIt = deletionCreationCandidatePairs.find(
718
- oldFlattenedNode.shadowView.tag);
719
- if (deleteCreateIt != deletionCreationCandidatePairs.end()) {
720
- deletionCreationCandidatePairs.erase(deleteCreateIt);
721
- }
722
- }
723
- }
724
- }
725
- }
726
- }
727
-
728
- // Mark that node exists in another tree, but only if the tree node is a
729
- // concrete view. Removing the node from the unvisited list prevents the
730
- // caller from taking further action on this node, so make sure to
731
- // delete/create if the Concreteness of the node has changed.
732
- if (newTreeNodePair.isConcreteView != oldTreeNodePair.isConcreteView &&
733
- !newTreeNodePair.inOtherTree) {
734
- if (newTreeNodePair.isConcreteView) {
735
- mutationInstructionContainer.createMutations.push_back(
736
- ShadowViewMutation::CreateMutation(newTreeNodePair.shadowView));
737
- } else {
738
- mutationInstructionContainer.deleteMutations.push_back(
739
- ShadowViewMutation::DeleteMutation(newTreeNodePair.shadowView));
740
- }
741
- }
742
-
743
- treeChildPair.inOtherTree = true;
744
- otherTreeNodePair.inOtherTree = true;
745
-
746
- if (parentSubVisitedOtherNewNodes != nullptr) {
747
- parentSubVisitedOtherNewNodes->insert(
748
- {newTreeNodePair.shadowView.tag, &newTreeNodePair});
749
- }
750
- if (parentSubVisitedOtherOldNodes != nullptr) {
751
- parentSubVisitedOtherOldNodes->insert(
752
- {oldTreeNodePair.shadowView.tag, &oldTreeNodePair});
753
- }
754
-
755
- if (unvisitedIt != unvisitedOtherNodes.end()) {
756
- unvisitedOtherNodes.erase(unvisitedIt);
757
- }
758
- } else {
759
- // Node does not in exist in other tree.
760
- if (treeChildPair.isConcreteView && !treeChildPair.inOtherTree) {
761
- auto deletionCreationIt =
762
- deletionCreationCandidatePairs.find(treeChildPair.shadowView.tag);
763
- if (deletionCreationIt == deletionCreationCandidatePairs.end()) {
764
- deletionCreationCandidatePairs.insert(
765
- {treeChildPair.shadowView.tag, &treeChildPair});
766
- }
767
- }
768
- }
769
- }
770
-
771
- // Final step: go through creation/deletion candidates and delete/create
772
- // subtrees if they were never visited during the execution of the above loop
773
- // and recursions.
774
- for (auto it = deletionCreationCandidatePairs.begin();
775
- it != deletionCreationCandidatePairs.end();
776
- it++) {
777
- if (it->first == 0) {
778
- continue;
779
- }
780
- auto &treeChildPair = *it->second;
781
-
782
- // If node was visited during a flattening/unflattening recursion.
783
- if (treeChildPair.inOtherTree) {
784
- continue;
785
- }
786
-
787
- if (reparentMode == ReparentMode::Flatten) {
788
- mutationInstructionContainer.deleteMutations.push_back(
789
- ShadowViewMutation::DeleteMutation(treeChildPair.shadowView));
790
-
791
- if (!treeChildPair.flattened) {
792
- calculateShadowViewMutationsV2(
793
- DIFF_BREADCRUMB(
794
- "Recursively delete tree child pair (flatten case): " +
795
- std::to_string(treeChildPair.shadowView.tag)),
796
- mutationInstructionContainer.destructiveDownwardMutations,
797
- treeChildPair.shadowView,
798
- sliceChildShadowNodeViewPairsV2(*treeChildPair.shadowNode),
799
- {});
800
- }
801
- } else {
802
- mutationInstructionContainer.createMutations.push_back(
803
- ShadowViewMutation::CreateMutation(treeChildPair.shadowView));
804
-
805
- if (!treeChildPair.flattened) {
806
- calculateShadowViewMutationsV2(
807
- DIFF_BREADCRUMB(
808
- "Recursively delete tree child pair (unflatten case): " +
809
- std::to_string(treeChildPair.shadowView.tag)),
810
- mutationInstructionContainer.downwardMutations,
811
- treeChildPair.shadowView,
812
- {},
813
- sliceChildShadowNodeViewPairsV2(*treeChildPair.shadowNode));
814
- }
815
- }
816
- }
817
- }
818
-
819
- static void calculateShadowViewMutationsV2(
820
- BREADCRUMB_TYPE breadcrumb,
821
- ShadowViewMutation::List &mutations,
822
- ShadowView const &parentShadowView,
823
- ShadowViewNodePairLegacy::OwningList &&oldChildPairs,
824
- ShadowViewNodePairLegacy::OwningList &&newChildPairs) {
825
- if (oldChildPairs.empty() && newChildPairs.empty()) {
826
- return;
827
- }
828
-
829
- size_t index = 0;
830
-
831
- // Lists of mutations
832
- auto createMutations = ShadowViewMutation::List{};
833
- auto deleteMutations = ShadowViewMutation::List{};
834
- auto insertMutations = ShadowViewMutation::List{};
835
- auto removeMutations = ShadowViewMutation::List{};
836
- auto updateMutations = ShadowViewMutation::List{};
837
- auto downwardMutations = ShadowViewMutation::List{};
838
- auto destructiveDownwardMutations = ShadowViewMutation::List{};
839
- auto mutationInstructionContainer = OrderedMutationInstructionContainer{
840
- createMutations,
841
- deleteMutations,
842
- insertMutations,
843
- removeMutations,
844
- updateMutations,
845
- downwardMutations,
846
- destructiveDownwardMutations};
847
-
848
- DEBUG_LOGS({
849
- LOG(ERROR) << "Differ Entry: Child Pairs of node: [" << parentShadowView.tag
850
- << "]";
851
- std::string strOldChildPairs;
852
- for (size_t oldIndex = 0; oldIndex < oldChildPairs.size(); oldIndex++) {
853
- strOldChildPairs.append(
854
- std::to_string(oldChildPairs[oldIndex].shadowView.tag));
855
- strOldChildPairs.append(
856
- oldChildPairs[oldIndex].isConcreteView ? "" : "'");
857
- strOldChildPairs.append(oldChildPairs[oldIndex].flattened ? "*" : "");
858
- strOldChildPairs.append(", ");
859
- }
860
- std::string strNewChildPairs;
861
- for (size_t newIndex = 0; newIndex < newChildPairs.size(); newIndex++) {
862
- strNewChildPairs.append(
863
- std::to_string(newChildPairs[newIndex].shadowView.tag));
864
- strNewChildPairs.append(
865
- newChildPairs[newIndex].isConcreteView ? "" : "'");
866
- strNewChildPairs.append(newChildPairs[newIndex].flattened ? "*" : "");
867
- strNewChildPairs.append(", ");
868
- }
869
- LOG(ERROR) << "Differ Entry: Old Child Pairs: " << strOldChildPairs;
870
- LOG(ERROR) << "Differ Entry: New Child Pairs: " << strNewChildPairs;
871
- });
872
-
873
- // Stage 1: Collecting `Update` mutations
874
- for (index = 0; index < oldChildPairs.size() && index < newChildPairs.size();
875
- index++) {
876
- auto &oldChildPair = oldChildPairs[index];
877
- auto &newChildPair = newChildPairs[index];
878
-
879
- if (oldChildPair.shadowView.tag != newChildPair.shadowView.tag) {
880
- DEBUG_LOGS({
881
- LOG(ERROR) << "Differ Branch 1.1: Tags Different: ["
882
- << oldChildPair.shadowView.tag << "] ["
883
- << newChildPair.shadowView.tag << "]"
884
- << " with parent: [" << parentShadowView.tag << "]";
885
- });
886
-
887
- // Totally different nodes, updating is impossible.
888
- break;
889
- }
890
-
891
- // If either view was flattened, and that has changed this frame, don't try
892
- // to update
893
- if (oldChildPair.flattened != newChildPair.flattened ||
894
- oldChildPair.isConcreteView != newChildPair.isConcreteView) {
895
- break;
896
- }
897
-
898
- DEBUG_LOGS({
899
- LOG(ERROR) << "Differ Branch 1.2: Same tags, update and recurse: ["
900
- << oldChildPair.shadowView.tag << "]"
901
- << (oldChildPair.flattened ? " (flattened)" : "")
902
- << (oldChildPair.isConcreteView ? " (concrete)" : "") << "["
903
- << newChildPair.shadowView.tag << "]"
904
- << (newChildPair.flattened ? " (flattened)" : "")
905
- << (newChildPair.isConcreteView ? " (concrete)" : "")
906
- << " with parent: [" << parentShadowView.tag << "]";
907
- });
908
-
909
- if (newChildPair.isConcreteView &&
910
- oldChildPair.shadowView != newChildPair.shadowView) {
911
- updateMutations.push_back(ShadowViewMutation::UpdateMutation(
912
- oldChildPair.shadowView, newChildPair.shadowView));
913
- }
914
-
915
- // Recursively update tree if ShadowNode pointers are not equal
916
- if (!oldChildPair.flattened &&
917
- oldChildPair.shadowNode != newChildPair.shadowNode) {
918
- auto oldGrandChildPairs =
919
- sliceChildShadowNodeViewPairsV2(*oldChildPair.shadowNode);
920
- auto newGrandChildPairs =
921
- sliceChildShadowNodeViewPairsV2(*newChildPair.shadowNode);
922
- calculateShadowViewMutationsV2(
923
- DIFF_BREADCRUMB(
924
- "Stage 1: Recurse on " +
925
- std::to_string(oldChildPair.shadowView.tag)),
926
- *(newGrandChildPairs.size() ? &downwardMutations
927
- : &destructiveDownwardMutations),
928
- oldChildPair.shadowView,
929
- std::move(oldGrandChildPairs),
930
- std::move(newGrandChildPairs));
931
- }
932
- }
933
-
934
- size_t lastIndexAfterFirstStage = index;
935
-
936
- if (index == newChildPairs.size()) {
937
- // We've reached the end of the new children. We can delete+remove the
938
- // rest.
939
- for (; index < oldChildPairs.size(); index++) {
940
- auto const &oldChildPair = oldChildPairs[index];
941
-
942
- DEBUG_LOGS({
943
- LOG(ERROR) << "Differ Branch 2: Deleting Tag/Tree: ["
944
- << oldChildPair.shadowView.tag << "]"
945
- << " with parent: [" << parentShadowView.tag << "]";
946
- });
947
-
948
- if (!oldChildPair.isConcreteView) {
949
- continue;
950
- }
951
-
952
- deleteMutations.push_back(
953
- ShadowViewMutation::DeleteMutation(oldChildPair.shadowView));
954
- removeMutations.push_back(ShadowViewMutation::RemoveMutation(
955
- parentShadowView,
956
- oldChildPair.shadowView,
957
- static_cast<int>(oldChildPair.mountIndex)));
958
-
959
- // We also have to call the algorithm recursively to clean up the entire
960
- // subtree starting from the removed view.
961
- calculateShadowViewMutationsV2(
962
- DIFF_BREADCRUMB(
963
- "Trivial delete " + std::to_string(oldChildPair.shadowView.tag)),
964
- destructiveDownwardMutations,
965
- oldChildPair.shadowView,
966
- sliceChildShadowNodeViewPairsV2(*oldChildPair.shadowNode),
967
- {});
968
- }
969
- } else if (index == oldChildPairs.size()) {
970
- // If we don't have any more existing children we can choose a fast path
971
- // since the rest will all be create+insert.
972
- for (; index < newChildPairs.size(); index++) {
973
- auto const &newChildPair = newChildPairs[index];
974
-
975
- DEBUG_LOGS({
976
- LOG(ERROR) << "Differ Branch 3: Creating Tag/Tree: ["
977
- << newChildPair.shadowView.tag << "]"
978
- << " with parent: [" << parentShadowView.tag << "]";
979
- });
980
-
981
- if (!newChildPair.isConcreteView) {
982
- continue;
983
- }
984
-
985
- insertMutations.push_back(ShadowViewMutation::InsertMutation(
986
- parentShadowView,
987
- newChildPair.shadowView,
988
- static_cast<int>(newChildPair.mountIndex)));
989
- createMutations.push_back(
990
- ShadowViewMutation::CreateMutation(newChildPair.shadowView));
991
-
992
- calculateShadowViewMutationsV2(
993
- DIFF_BREADCRUMB(
994
- "Trivial create " + std::to_string(newChildPair.shadowView.tag)),
995
- downwardMutations,
996
- newChildPair.shadowView,
997
- {},
998
- sliceChildShadowNodeViewPairsV2(*newChildPair.shadowNode));
999
- }
1000
- } else {
1001
- // Collect map of tags in the new list
1002
- auto newRemainingPairs = TinyMap<Tag, ShadowViewNodePairLegacy *>{};
1003
- auto newInsertedPairs = TinyMap<Tag, ShadowViewNodePairLegacy *>{};
1004
- auto deletionCandidatePairs =
1005
- TinyMap<Tag, ShadowViewNodePairLegacy const *>{};
1006
- for (; index < newChildPairs.size(); index++) {
1007
- auto &newChildPair = newChildPairs[index];
1008
- newRemainingPairs.insert({newChildPair.shadowView.tag, &newChildPair});
1009
- }
1010
-
1011
- // Walk through both lists at the same time
1012
- // We will perform updates, create+insert, remove+delete, remove+insert
1013
- // (move) here.
1014
- size_t oldIndex = lastIndexAfterFirstStage,
1015
- newIndex = lastIndexAfterFirstStage, newSize = newChildPairs.size(),
1016
- oldSize = oldChildPairs.size();
1017
- while (newIndex < newSize || oldIndex < oldSize) {
1018
- bool haveNewPair = newIndex < newSize;
1019
- bool haveOldPair = oldIndex < oldSize;
1020
-
1021
- // Advance both pointers if pointing to the same element
1022
- if (haveNewPair && haveOldPair) {
1023
- auto const &oldChildPair = oldChildPairs[oldIndex];
1024
- auto const &newChildPair = newChildPairs[newIndex];
1025
-
1026
- Tag newTag = newChildPair.shadowView.tag;
1027
- Tag oldTag = oldChildPair.shadowView.tag;
1028
-
1029
- if (newTag == oldTag) {
1030
- DEBUG_LOGS({
1031
- LOG(ERROR) << "Differ Branch 5: Matched Tags at indices: "
1032
- << oldIndex << " " << newIndex << ": ["
1033
- << oldChildPair.shadowView.tag << "]"
1034
- << (oldChildPair.flattened ? "(flattened)" : "")
1035
- << (oldChildPair.isConcreteView ? "(concrete)" : "")
1036
- << " [" << newChildPair.shadowView.tag << "]"
1037
- << (newChildPair.flattened ? "(flattened)" : "")
1038
- << (newChildPair.isConcreteView ? "(concrete)" : "")
1039
- << " with parent: [" << parentShadowView.tag << "]";
1040
- });
1041
-
1042
- // Check concrete-ness of views
1043
- // Create/Delete and Insert/Remove if necessary
1044
- if (oldChildPair.isConcreteView != newChildPair.isConcreteView) {
1045
- if (newChildPair.isConcreteView) {
1046
- insertMutations.push_back(ShadowViewMutation::InsertMutation(
1047
- parentShadowView,
1048
- newChildPair.shadowView,
1049
- static_cast<int>(newChildPair.mountIndex)));
1050
- createMutations.push_back(
1051
- ShadowViewMutation::CreateMutation(newChildPair.shadowView));
1052
- } else {
1053
- removeMutations.push_back(ShadowViewMutation::RemoveMutation(
1054
- parentShadowView,
1055
- oldChildPair.shadowView,
1056
- static_cast<int>(oldChildPair.mountIndex)));
1057
- deleteMutations.push_back(
1058
- ShadowViewMutation::DeleteMutation(oldChildPair.shadowView));
1059
- }
1060
- } else if (
1061
- oldChildPair.isConcreteView && newChildPair.isConcreteView) {
1062
- // Even if node's children are flattened, it might still be a
1063
- // concrete view. The case where they're different is handled above.
1064
- if (oldChildPair.shadowView != newChildPair.shadowView) {
1065
- updateMutations.push_back(ShadowViewMutation::UpdateMutation(
1066
- oldChildPair.shadowView, newChildPair.shadowView));
1067
- }
1068
-
1069
- // Remove from newRemainingPairs
1070
- auto newRemainingPairIt = newRemainingPairs.find(oldTag);
1071
- if (newRemainingPairIt != newRemainingPairs.end()) {
1072
- newRemainingPairs.erase(newRemainingPairIt);
1073
- }
1074
- }
1075
-
1076
- // Are we flattening or unflattening either one? If node was flattened
1077
- // in both trees, there's no change, just continue.
1078
- if (oldChildPair.flattened && newChildPair.flattened) {
1079
- newIndex++;
1080
- oldIndex++;
1081
- continue;
1082
- }
1083
- // We are either flattening or unflattening this node.
1084
- if (oldChildPair.flattened != newChildPair.flattened) {
1085
- DEBUG_LOGS({
1086
- LOG(ERROR) << "Differ: flattening or unflattening at branch 6: ["
1087
- << oldChildPair.shadowView.tag << "] ["
1088
- << newChildPair.shadowView.tag << "] "
1089
- << oldChildPair.flattened << " "
1090
- << newChildPair.flattened << " with parent: ["
1091
- << parentShadowView.tag << "]";
1092
- });
1093
-
1094
- // Flattening
1095
- if (!oldChildPair.flattened) {
1096
- // Flatten old tree into new list
1097
- // At the end of this loop we still want to know which of these
1098
- // children are visited, so we reuse the `newRemainingPairs` map.
1099
- calculateShadowViewMutationsFlattener(
1100
- DIFF_BREADCRUMB(
1101
- "Flatten tree " + std::to_string(parentShadowView.tag) +
1102
- " into list " +
1103
- std::to_string(oldChildPair.shadowView.tag)),
1104
- ReparentMode::Flatten,
1105
- mutationInstructionContainer,
1106
- parentShadowView,
1107
- newRemainingPairs,
1108
- oldChildPair);
1109
- }
1110
- // Unflattening
1111
- else {
1112
- // Construct unvisited nodes map
1113
- auto unvisitedOldChildPairs =
1114
- TinyMap<Tag, ShadowViewNodePairLegacy *>{};
1115
- // We don't know where all the children of oldChildPair are within
1116
- // oldChildPairs, but we know that they're in the same relative
1117
- // order. The reason for this is because of flattening + zIndex:
1118
- // the children could be listed before the parent, interwoven with
1119
- // children from other nodes, etc.
1120
- auto oldFlattenedNodes = sliceChildShadowNodeViewPairsV2(
1121
- *oldChildPair.shadowNode, true);
1122
- for (size_t i = 0, j = 0;
1123
- i < oldChildPairs.size() && j < oldFlattenedNodes.size();
1124
- i++) {
1125
- auto &oldChild = oldChildPairs[i];
1126
- if (oldChild.shadowView.tag ==
1127
- oldFlattenedNodes[j].shadowView.tag) {
1128
- unvisitedOldChildPairs.insert(
1129
- {oldChild.shadowView.tag, &oldChild});
1130
- j++;
1131
- }
1132
- }
1133
-
1134
- // Unflatten old list into new tree
1135
- calculateShadowViewMutationsFlattener(
1136
- DIFF_BREADCRUMB(
1137
- "Unflatten old list " +
1138
- std::to_string(parentShadowView.tag) + " into new tree " +
1139
- std::to_string(newChildPair.shadowView.tag)),
1140
- ReparentMode::Unflatten,
1141
- mutationInstructionContainer,
1142
- parentShadowView,
1143
- unvisitedOldChildPairs,
1144
- newChildPair);
1145
-
1146
- // If old nodes were not visited, we know that we can delete them
1147
- // now. They will be removed from the hierarchy by the outermost
1148
- // loop of this function.
1149
- for (auto &oldFlattenedNode : oldFlattenedNodes) {
1150
- auto unvisitedOldChildPairIt = unvisitedOldChildPairs.find(
1151
- oldFlattenedNode.shadowView.tag);
1152
- if (unvisitedOldChildPairIt == unvisitedOldChildPairs.end()) {
1153
- // Node was visited - make sure to remove it from
1154
- // "newRemainingPairs" map
1155
- auto newRemainingIt =
1156
- newRemainingPairs.find(oldFlattenedNode.shadowView.tag);
1157
- if (newRemainingIt != newRemainingPairs.end()) {
1158
- newRemainingPairs.erase(newRemainingIt);
1159
- }
1160
- }
1161
- }
1162
- }
1163
-
1164
- newIndex++;
1165
- oldIndex++;
1166
- continue;
1167
- }
1168
-
1169
- // Update subtrees if View is not flattened, and if node addresses are
1170
- // not equal
1171
- if (oldChildPair.shadowNode != newChildPair.shadowNode) {
1172
- auto oldGrandChildPairs =
1173
- sliceChildShadowNodeViewPairsV2(*oldChildPair.shadowNode);
1174
- auto newGrandChildPairs =
1175
- sliceChildShadowNodeViewPairsV2(*newChildPair.shadowNode);
1176
- calculateShadowViewMutationsV2(
1177
- DIFF_BREADCRUMB(
1178
- "Non-trivial update " +
1179
- std::to_string(oldChildPair.shadowView.tag)),
1180
- *(newGrandChildPairs.size() ? &downwardMutations
1181
- : &destructiveDownwardMutations),
1182
- oldChildPair.shadowView,
1183
- std::move(oldGrandChildPairs),
1184
- std::move(newGrandChildPairs));
1185
- }
1186
-
1187
- newIndex++;
1188
- oldIndex++;
1189
- continue;
1190
- }
1191
- }
1192
-
1193
- // We have an old pair, but we either don't have any remaining new pairs
1194
- // or we have one but it's not matched up with the old pair
1195
- if (haveOldPair) {
1196
- auto const &oldChildPair = oldChildPairs[oldIndex];
1197
-
1198
- Tag oldTag = oldChildPair.shadowView.tag;
1199
-
1200
- // Was oldTag already inserted? This indicates a reordering, not just
1201
- // a move. The new node has already been inserted, we just need to
1202
- // remove the node from its old position now, and update the node's
1203
- // subtree.
1204
- auto const insertedIt = newInsertedPairs.find(oldTag);
1205
- if (insertedIt != newInsertedPairs.end()) {
1206
- auto const &newChildPair = *insertedIt->second;
1207
-
1208
- // The node has been reordered and we are also flattening or
1209
- // unflattening
1210
- if (oldChildPair.flattened != newChildPair.flattened) {
1211
- DEBUG_LOGS({
1212
- LOG(ERROR)
1213
- << "Differ: branch 7: Flattening or unflattening already-inserted node upon remove (move/reorder operation)."
1214
- << oldChildPair.shadowView.tag << " "
1215
- << oldChildPair.flattened << " // "
1216
- << newChildPair.shadowView.tag << " "
1217
- << newChildPair.flattened;
1218
- });
1219
-
1220
- // Unflattening.
1221
- // The node in question was already inserted and we are
1222
- // *unflattening* it, so we just need to update the subtree nodes
1223
- // and remove them from the view hierarchy. Any of the unvisited
1224
- // nodes in the old tree will be deleted.
1225
- // TODO: can we consolidate this code? It's identical to the first
1226
- // block above.
1227
- if (!oldChildPair.flattened) {
1228
- // Flatten old tree into new list
1229
- // At the end of this loop we still want to know which of these
1230
- // children are visited, so we reuse the `newRemainingPairs` map.
1231
- calculateShadowViewMutationsFlattener(
1232
- DIFF_BREADCRUMB(
1233
- "Flatten2 " + std::to_string(parentShadowView.tag)),
1234
- ReparentMode::Flatten,
1235
- mutationInstructionContainer,
1236
- parentShadowView,
1237
- newRemainingPairs,
1238
- oldChildPair);
1239
- }
1240
- // Unflattening
1241
- else {
1242
- // Construct unvisited nodes map
1243
- auto unvisitedOldChildPairs =
1244
- TinyMap<Tag, ShadowViewNodePairLegacy *>{};
1245
- // We don't know where all the children of oldChildPair are within
1246
- // oldChildPairs, but we know that they're in the same relative
1247
- // order. The reason for this is because of flattening + zIndex:
1248
- // the children could be listed before the parent, interwoven with
1249
- // children from other nodes, etc.
1250
- auto oldFlattenedNodes = sliceChildShadowNodeViewPairsV2(
1251
- *oldChildPair.shadowNode, true);
1252
- for (size_t i = 0, j = 0;
1253
- i < oldChildPairs.size() && j < oldFlattenedNodes.size();
1254
- i++) {
1255
- auto &oldChild = oldChildPairs[i];
1256
- if (oldChild.shadowView.tag ==
1257
- oldFlattenedNodes[j].shadowView.tag) {
1258
- unvisitedOldChildPairs.insert(
1259
- {oldChild.shadowView.tag, &oldChild});
1260
- j++;
1261
- }
1262
- }
1263
-
1264
- // Unflatten old list into new tree
1265
- calculateShadowViewMutationsFlattener(
1266
- DIFF_BREADCRUMB(
1267
- "Unflatten2 " + std::to_string(parentShadowView.tag)),
1268
- ReparentMode::Unflatten,
1269
- mutationInstructionContainer,
1270
- parentShadowView,
1271
- unvisitedOldChildPairs,
1272
- newChildPair);
1273
-
1274
- // If old nodes were not visited, we know that we can delete them
1275
- // now. They will be removed from the hierarchy by the outermost
1276
- // loop of this function. TODO: delete recursively? create
1277
- // recursively?
1278
- for (auto &oldFlattenedNode : oldFlattenedNodes) {
1279
- auto unvisitedOldChildPairIt = unvisitedOldChildPairs.find(
1280
- oldFlattenedNode.shadowView.tag);
1281
- if (unvisitedOldChildPairIt == unvisitedOldChildPairs.end()) {
1282
- // Node was visited - make sure to remove it from
1283
- // "newRemainingPairs" map
1284
- auto newRemainingIt =
1285
- newRemainingPairs.find(oldFlattenedNode.shadowView.tag);
1286
- if (newRemainingIt != newRemainingPairs.end()) {
1287
- newRemainingPairs.erase(newRemainingIt);
1288
- }
1289
- }
1290
- }
1291
- }
1292
- }
1293
-
1294
- // Check concrete-ness of views
1295
- // Create/Delete and Insert/Remove if necessary
1296
- // TODO: document: Insert should already be handled by outermost loop,
1297
- // but not Remove
1298
- if (oldChildPair.isConcreteView != newChildPair.isConcreteView) {
1299
- if (newChildPair.isConcreteView) {
1300
- createMutations.push_back(
1301
- ShadowViewMutation::CreateMutation(newChildPair.shadowView));
1302
- } else {
1303
- removeMutations.push_back(ShadowViewMutation::RemoveMutation(
1304
- parentShadowView,
1305
- oldChildPair.shadowView,
1306
- static_cast<int>(oldChildPair.mountIndex)));
1307
- deleteMutations.push_back(
1308
- ShadowViewMutation::DeleteMutation(oldChildPair.shadowView));
1309
- }
1310
- }
1311
-
1312
- // old and new child pairs are both either flattened or unflattened at
1313
- // this point. If they're not views, we don't need to update subtrees.
1314
- if (oldChildPair.isConcreteView && newChildPair.isConcreteView) {
1315
- // TODO: do we always want to remove here? There are cases where we
1316
- // might be able to remove this to prevent unnecessary
1317
- // removes/inserts in cases of (un)flattening + reorders?
1318
- removeMutations.push_back(ShadowViewMutation::RemoveMutation(
1319
- parentShadowView,
1320
- oldChildPair.shadowView,
1321
- static_cast<int>(oldChildPair.mountIndex)));
1322
-
1323
- if (oldChildPair.shadowView != newChildPair.shadowView) {
1324
- updateMutations.push_back(ShadowViewMutation::UpdateMutation(
1325
- oldChildPair.shadowView, newChildPair.shadowView));
1326
- }
1327
- }
1328
-
1329
- if (!oldChildPair.flattened && !newChildPair.flattened &&
1330
- oldChildPair.shadowNode != newChildPair.shadowNode) {
1331
- // Update subtrees
1332
- auto oldGrandChildPairs =
1333
- sliceChildShadowNodeViewPairsV2(*oldChildPair.shadowNode);
1334
- auto newGrandChildPairs =
1335
- sliceChildShadowNodeViewPairsV2(*newChildPair.shadowNode);
1336
- calculateShadowViewMutationsV2(
1337
- DIFF_BREADCRUMB(
1338
- "Non-trivial update3 " +
1339
- std::to_string(oldChildPair.shadowView.tag)),
1340
- *(newGrandChildPairs.size() ? &downwardMutations
1341
- : &destructiveDownwardMutations),
1342
- oldChildPair.shadowView,
1343
- std::move(oldGrandChildPairs),
1344
- std::move(newGrandChildPairs));
1345
- }
1346
-
1347
- newInsertedPairs.erase(insertedIt);
1348
- oldIndex++;
1349
- continue;
1350
- }
1351
-
1352
- // Should we generate a delete+remove instruction for the old node?
1353
- // If there's an old node and it's not found in the "new" list, we
1354
- // generate remove+delete for this node and its subtree.
1355
- auto const newIt = newRemainingPairs.find(oldTag);
1356
- if (newIt == newRemainingPairs.end()) {
1357
- DEBUG_LOGS({
1358
- LOG(ERROR)
1359
- << "Differ Branch 9: Removing tag that was not reinserted: "
1360
- << oldIndex << ": [" << oldChildPair.shadowView.tag << "]"
1361
- << (oldChildPair.flattened ? " (flattened)" : "")
1362
- << (oldChildPair.isConcreteView ? " (concrete)" : "")
1363
- << " with parent: [" << parentShadowView.tag << "] "
1364
- << "node is in other tree? "
1365
- << (oldChildPair.inOtherTree ? "yes" : "no");
1366
- });
1367
-
1368
- if (oldChildPair.isConcreteView) {
1369
- removeMutations.push_back(ShadowViewMutation::RemoveMutation(
1370
- parentShadowView,
1371
- oldChildPair.shadowView,
1372
- static_cast<int>(oldChildPair.mountIndex)));
1373
-
1374
- deletionCandidatePairs.insert(
1375
- {oldChildPair.shadowView.tag, &oldChildPair});
1376
- }
1377
-
1378
- oldIndex++;
1379
- continue;
1380
- }
1381
- }
1382
-
1383
- // At this point, oldTag is -1 or is in the new list, and hasn't been
1384
- // inserted or matched yet. We're not sure yet if the new node is in the
1385
- // old list - generate an insert instruction for the new node.
1386
- auto &newChildPair = newChildPairs[newIndex];
1387
- DEBUG_LOGS({
1388
- LOG(ERROR)
1389
- << "Differ Branch 10: Inserting tag/tree that was not (yet?) removed from hierarchy: "
1390
- << newIndex << "/" << newSize << ": ["
1391
- << newChildPair.shadowView.tag << "]"
1392
- << (newChildPair.flattened ? " (flattened)" : "")
1393
- << (newChildPair.isConcreteView ? " (concrete)" : "")
1394
- << " with parent: [" << parentShadowView.tag << "]";
1395
- });
1396
- if (newChildPair.isConcreteView) {
1397
- insertMutations.push_back(ShadowViewMutation::InsertMutation(
1398
- parentShadowView,
1399
- newChildPair.shadowView,
1400
- static_cast<int>(newChildPair.mountIndex)));
1401
- }
1402
-
1403
- // `inOtherTree` is only set to true during flattening/unflattening of
1404
- // parent. If the parent isn't (un)flattened, this will always be `false`,
1405
- // even if the node is in the other (old) tree. In this case, we expect
1406
- // the node to be removed from `newInsertedPairs` when we later encounter
1407
- // it in this loop.
1408
- if (!newChildPair.inOtherTree) {
1409
- newInsertedPairs.insert({newChildPair.shadowView.tag, &newChildPair});
1410
- }
1411
-
1412
- newIndex++;
1413
- }
1414
-
1415
- // Penultimate step: generate Delete instructions for entirely deleted
1416
- // subtrees/nodes. We do this here because we need to traverse the entire
1417
- // list to make sure that a node was not reparented into an unflattened node
1418
- // that occurs *after* it in the hierarchy, due to zIndex ordering.
1419
- for (auto it = deletionCandidatePairs.begin();
1420
- it != deletionCandidatePairs.end();
1421
- it++) {
1422
- if (it->first == 0) {
1423
- continue;
1424
- }
1425
-
1426
- auto const &oldChildPair = *it->second;
1427
-
1428
- DEBUG_LOGS({
1429
- LOG(ERROR)
1430
- << "Differ Branch 11: Deleting tag/tree that was not in new hierarchy: "
1431
- << "[" << oldChildPair.shadowView.tag << "]"
1432
- << (oldChildPair.flattened ? "(flattened)" : "")
1433
- << (oldChildPair.isConcreteView ? "(concrete)" : "")
1434
- << (oldChildPair.inOtherTree ? "(in other tree)" : "")
1435
- << " with parent: [" << parentShadowView.tag << "]";
1436
- });
1437
-
1438
- // This can happen when the parent is unflattened
1439
- if (!oldChildPair.inOtherTree) {
1440
- deleteMutations.push_back(
1441
- ShadowViewMutation::DeleteMutation(oldChildPair.shadowView));
1442
-
1443
- // We also have to call the algorithm recursively to clean up the
1444
- // entire subtree starting from the removed view.
1445
- calculateShadowViewMutationsV2(
1446
- DIFF_BREADCRUMB(
1447
- "Non-trivial delete " +
1448
- std::to_string(oldChildPair.shadowView.tag)),
1449
- destructiveDownwardMutations,
1450
- oldChildPair.shadowView,
1451
- sliceChildShadowNodeViewPairsV2(*oldChildPair.shadowNode),
1452
- {});
1453
- }
1454
- }
1455
-
1456
- // Final step: generate Create instructions for entirely new subtrees/nodes
1457
- // that are not the result of flattening or unflattening.
1458
- for (auto it = newInsertedPairs.begin(); it != newInsertedPairs.end();
1459
- it++) {
1460
- // Erased elements of a TinyMap will have a Tag/key of 0 - skip those
1461
- // These *should* be removed by the map; there are currently no KNOWN
1462
- // cases where TinyMap will do the wrong thing, but there are not yet
1463
- // any unit tests explicitly for TinyMap, so this is safer for now.
1464
- if (it->first == 0) {
1465
- continue;
1466
- }
1467
-
1468
- auto const &newChildPair = *it->second;
1469
-
1470
- DEBUG_LOGS({
1471
- LOG(ERROR)
1472
- << "Differ Branch 12: Inserting tag/tree that was not in old hierarchy: "
1473
- << "[" << newChildPair.shadowView.tag << "]"
1474
- << (newChildPair.flattened ? "(flattened)" : "")
1475
- << (newChildPair.isConcreteView ? "(concrete)" : "")
1476
- << (newChildPair.inOtherTree ? "(in other tree)" : "")
1477
- << " with parent: [" << parentShadowView.tag << "]";
1478
- });
1479
-
1480
- if (!newChildPair.isConcreteView) {
1481
- continue;
1482
- }
1483
- if (newChildPair.inOtherTree) {
1484
- continue;
1485
- }
1486
-
1487
- createMutations.push_back(
1488
- ShadowViewMutation::CreateMutation(newChildPair.shadowView));
1489
-
1490
- calculateShadowViewMutationsV2(
1491
- DIFF_BREADCRUMB(
1492
- "Non-trivial create " +
1493
- std::to_string(newChildPair.shadowView.tag)),
1494
- downwardMutations,
1495
- newChildPair.shadowView,
1496
- {},
1497
- sliceChildShadowNodeViewPairsV2(*newChildPair.shadowNode));
1498
- }
1499
- }
1500
-
1501
- // All mutations in an optimal order:
1502
- std::move(
1503
- destructiveDownwardMutations.begin(),
1504
- destructiveDownwardMutations.end(),
1505
- std::back_inserter(mutations));
1506
- std::move(
1507
- updateMutations.begin(),
1508
- updateMutations.end(),
1509
- std::back_inserter(mutations));
1510
- std::move(
1511
- removeMutations.rbegin(),
1512
- removeMutations.rend(),
1513
- std::back_inserter(mutations));
1514
- std::move(
1515
- deleteMutations.begin(),
1516
- deleteMutations.end(),
1517
- std::back_inserter(mutations));
1518
- std::move(
1519
- createMutations.begin(),
1520
- createMutations.end(),
1521
- std::back_inserter(mutations));
1522
- std::move(
1523
- downwardMutations.begin(),
1524
- downwardMutations.end(),
1525
- std::back_inserter(mutations));
1526
- std::move(
1527
- insertMutations.begin(),
1528
- insertMutations.end(),
1529
- std::back_inserter(mutations));
1530
- }
1531
-
1532
- ShadowViewMutation::List calculateShadowViewMutations(
1533
- ShadowNode const &oldRootShadowNode,
1534
- ShadowNode const &newRootShadowNode) {
1535
- SystraceSection s("calculateShadowViewMutations");
1536
-
1537
- // Root shadow nodes must be belong the same family.
1538
- react_native_assert(
1539
- ShadowNode::sameFamily(oldRootShadowNode, newRootShadowNode));
1540
-
1541
- auto mutations = ShadowViewMutation::List{};
1542
- mutations.reserve(256);
1543
-
1544
- auto oldRootShadowView = ShadowView(oldRootShadowNode);
1545
- auto newRootShadowView = ShadowView(newRootShadowNode);
1546
-
1547
- if (oldRootShadowView != newRootShadowView) {
1548
- mutations.push_back(ShadowViewMutation::UpdateMutation(
1549
- oldRootShadowView, newRootShadowView));
1550
- }
1551
-
1552
- calculateShadowViewMutationsV2(
1553
- CREATE_DIFF_BREADCRUMB(oldRootShadowView.tag),
1554
- mutations,
1555
- ShadowView(oldRootShadowNode),
1556
- sliceChildShadowNodeViewPairsV2(oldRootShadowNode),
1557
- sliceChildShadowNodeViewPairsV2(newRootShadowNode));
1558
-
1559
- return mutations;
1560
- }
1561
-
1562
- } // namespace DifferOld
1563
- } // namespace react
1564
- } // namespace facebook