react-native-windows 0.74.10 → 0.75.0-preview.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.flowconfig +8 -2
- package/Common/Common.vcxproj +8 -0
- package/Common/Utilities.cpp +2 -2
- package/Directory.Build.targets +5 -0
- package/Folly/Folly.vcxproj +10 -2
- package/Folly/Folly.vcxproj.filters +0 -7
- package/Folly/TEMP_UntilFollyUpdate/ConstexprMath.h +970 -0
- package/Folly/TEMP_UntilFollyUpdate/json.cpp +1110 -0
- package/Folly/TEMP_UntilFollyUpdate/lang/ToAscii.cpp +4 -2
- package/Libraries/Animated/AnimatedImplementation.js +2 -0
- package/Libraries/Animated/NativeAnimatedHelper.js +4 -0
- package/Libraries/Animated/createAnimatedComponent.js +10 -4
- package/Libraries/Animated/useAnimatedProps.js +56 -28
- package/Libraries/BatchedBridge/MessageQueue.js +1 -0
- package/Libraries/Components/Button.js +10 -5
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +11 -2
- package/Libraries/Components/Flyout/Flyout.js +10 -10
- package/Libraries/Components/Flyout/FlyoutNativeComponent.js +8 -7
- package/Libraries/Components/Pressable/Pressable.js +13 -6
- package/Libraries/Components/Pressable/Pressable.windows.js +13 -6
- package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +4 -0
- package/Libraries/Components/ScrollView/ScrollView.js +109 -29
- package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +6 -0
- package/Libraries/Components/ScrollView/ScrollViewNativeComponent.windows.js +6 -0
- package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +13 -1
- package/Libraries/Components/StatusBar/StatusBar.js +1 -21
- package/Libraries/Components/Switch/Switch.windows.js +2 -0
- package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +0 -15
- package/Libraries/Components/TextInput/InputAccessoryView.js +10 -1
- package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +0 -12
- package/Libraries/Components/TextInput/TextInput.d.ts +0 -19
- package/Libraries/Components/TextInput/TextInput.js +20 -73
- package/Libraries/Components/TextInput/TextInput.windows.js +21 -75
- package/Libraries/Components/TextInput/WindowsTextInputNativeComponent.js +27 -12
- package/Libraries/Components/Touchable/Touchable.js +2 -2
- package/Libraries/Components/Touchable/TouchableHighlight.d.ts +4 -10
- package/Libraries/Components/Touchable/TouchableHighlight.js +3 -1
- package/Libraries/Components/Touchable/TouchableHighlight.windows.js +3 -1
- package/Libraries/Components/Touchable/TouchableOpacity.d.ts +4 -32
- package/Libraries/Components/Touchable/TouchableOpacity.js +3 -1
- package/Libraries/Components/Touchable/TouchableOpacity.windows.js +3 -1
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.d.ts +8 -0
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +117 -111
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.windows.js +129 -110
- package/Libraries/Components/View/ReactNativeStyleAttributes.js +6 -0
- package/Libraries/Components/View/ReactNativeViewAttributes.js +1 -0
- package/Libraries/Components/View/ReactNativeViewAttributes.windows.js +1 -0
- package/Libraries/Components/View/View.js +0 -11
- package/Libraries/Components/View/View.windows.js +0 -11
- package/Libraries/Components/View/ViewAccessibility.js +4 -4
- package/Libraries/Components/View/ViewAccessibility.windows.js +4 -4
- package/Libraries/Components/View/ViewPropTypes.d.ts +21 -59
- package/Libraries/Components/View/ViewPropTypes.js +7 -0
- package/Libraries/Components/View/ViewPropTypes.windows.js +7 -0
- package/Libraries/Core/Devtools/loadBundleFromServer.js +3 -3
- package/Libraries/Core/Devtools/loadBundleFromServer.windows.js +153 -0
- package/Libraries/Core/Devtools/parseErrorStack.js +5 -5
- package/Libraries/Core/Devtools/parseHermesStack.js +22 -16
- package/Libraries/Core/ErrorHandlers.js +116 -0
- package/Libraries/Core/ExceptionsManager.js +2 -2
- package/Libraries/Core/ReactNativeVersion.js +3 -3
- package/Libraries/Core/setUpDeveloperTools.js +3 -1
- package/Libraries/Core/setUpPerformance.js +6 -4
- package/Libraries/Core/setUpReactDevTools.js +70 -10
- package/Libraries/Core/setUpTimers.js +50 -31
- package/Libraries/Debugging/DebuggingOverlayRegistry.js +1 -1
- package/Libraries/Image/Image.android.js +23 -13
- package/Libraries/Image/Image.d.ts +14 -15
- package/Libraries/Image/Image.ios.js +21 -11
- package/Libraries/Image/Image.windows.js +21 -11
- package/Libraries/Image/ImageProps.js +16 -5
- package/Libraries/Image/ImageTypes.flow.js +7 -2
- package/Libraries/Image/ImageUtils.js +1 -0
- package/Libraries/Image/ImageViewNativeComponent.js +2 -1
- package/Libraries/Inspector/ElementBox.js +6 -3
- package/Libraries/Inspector/ElementProperties.js +1 -1
- package/Libraries/Interaction/TouchHistoryMath.js +4 -4
- package/Libraries/IntersectionObserver/IntersectionObserverManager.js +6 -26
- package/Libraries/JSInspector/NetworkAgent.js +1 -1
- package/Libraries/LogBox/Data/LogBoxData.js +39 -29
- package/Libraries/LogBox/Data/LogBoxLog.js +114 -2
- package/Libraries/LogBox/Data/parseLogBoxLog.js +168 -53
- package/Libraries/LogBox/LogBox.js +29 -12
- package/Libraries/LogBox/LogBoxNotificationContainer.js +4 -0
- package/Libraries/LogBox/UI/LogBoxInspector.js +8 -70
- package/Libraries/LogBox/UI/LogBoxInspectorBody.js +87 -0
- package/Libraries/LogBox/UI/LogBoxInspectorFooter.js +6 -42
- package/Libraries/LogBox/UI/LogBoxInspectorFooterButton.js +58 -0
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +5 -66
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.windows.js +5 -66
- package/Libraries/LogBox/UI/LogBoxInspectorHeaderButton.js +76 -0
- package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.js +8 -5
- package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.windows.js +8 -5
- package/Libraries/LogBox/UI/LogBoxNotification.js +13 -152
- package/Libraries/LogBox/UI/LogBoxNotificationCountBadge.js +63 -0
- package/Libraries/LogBox/UI/LogBoxNotificationDismissButton.js +67 -0
- package/Libraries/LogBox/UI/LogBoxNotificationMessage.js +57 -0
- package/Libraries/NativeComponent/BaseViewConfig.android.js +5 -0
- package/Libraries/NativeComponent/BaseViewConfig.ios.js +5 -0
- package/Libraries/NativeComponent/BaseViewConfig.windows.js +5 -0
- package/Libraries/NativeComponent/NativeComponentRegistry.js +12 -5
- package/Libraries/NativeComponent/StaticViewConfigValidator.js +3 -0
- package/Libraries/Network/XMLHttpRequest.js +5 -1
- package/Libraries/NewAppScreen/components/LearnMoreLinks.js +3 -3
- package/Libraries/Pressability/Pressability.js +3 -51
- package/Libraries/Pressability/Pressability.windows.js +3 -51
- package/Libraries/ReactNative/AppRegistry.d.ts +4 -0
- package/Libraries/ReactNative/AppRegistry.js +2 -4
- package/Libraries/ReactNative/BridgelessUIManager.js +1 -21
- package/Libraries/ReactNative/FabricUIManager.js +0 -51
- package/Libraries/ReactNative/ReactFabricPublicInstance/warnForStyleProps.js +1 -0
- package/Libraries/ReactNative/RendererImplementation.js +20 -2
- package/Libraries/ReactNative/UIManager.d.ts +0 -21
- package/Libraries/ReactNative/UIManagerProperties.js +0 -3
- package/Libraries/ReactNative/__mocks__/FabricUIManager.js +5 -341
- package/Libraries/ReactNative/getNativeComponentAttributes.js +8 -8
- package/Libraries/Renderer/implementations/ReactFabric-dev.js +15682 -27088
- package/Libraries/Renderer/implementations/ReactFabric-prod.js +5082 -4381
- package/Libraries/Renderer/implementations/ReactFabric-profiling.js +3480 -2571
- package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +15943 -27543
- package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +5303 -4606
- package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +3450 -2572
- package/Libraries/Renderer/shims/ReactFabric.js +2 -2
- package/Libraries/Renderer/shims/ReactFeatureFlags.js +2 -2
- package/Libraries/Renderer/shims/ReactNative.js +2 -3
- package/Libraries/Renderer/shims/ReactNativeTypes.js +24 -3
- package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +2 -2
- package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -2
- package/Libraries/Share/Share.d.ts +16 -10
- package/Libraries/Share/Share.js +14 -15
- package/Libraries/StyleSheet/StyleSheet.d.ts +1 -1
- package/Libraries/StyleSheet/StyleSheet.js +3 -10
- package/Libraries/StyleSheet/StyleSheetTypes.d.ts +21 -21
- package/Libraries/StyleSheet/StyleSheetTypes.js +24 -18
- package/Libraries/StyleSheet/flattenStyle.js +1 -0
- package/Libraries/StyleSheet/processFilter.js +132 -0
- package/Libraries/StyleSheet/processTransform.js +18 -3
- package/Libraries/Text/Text.js +151 -128
- package/Libraries/Text/Text.windows.js +144 -127
- package/Libraries/Text/TextNativeComponent.js +5 -4
- package/Libraries/Text/TextProps.js +6 -6
- package/Libraries/Text/TextProps.windows.js +6 -6
- package/Libraries/TurboModule/TurboModuleRegistry.js +2 -1
- package/Libraries/Types/CodegenTypes.js +3 -0
- package/Libraries/Utilities/{LoadingView.android.js → DevLoadingView.js} +33 -11
- package/Libraries/Utilities/Dimensions.js +1 -0
- package/Libraries/Utilities/HMRClient.js +36 -8
- package/Libraries/Utilities/HMRClientProdShim.js +1 -0
- package/Libraries/Utilities/NativePlatformConstantsWin.js +2 -2
- package/Libraries/Utilities/Platform.android.js +4 -4
- package/Libraries/Utilities/RCTLog.js +1 -0
- package/Libraries/Utilities/ReactNativeTestTools.js +12 -24
- package/Libraries/Utilities/verifyComponentAttributeEquivalence.js +11 -6
- package/Libraries/__tests__/ViewWindows-test.js +6 -6
- package/Libraries/promiseRejectionTrackingOptions.js +1 -0
- package/Microsoft.ReactNative/Base/FollyIncludes.h +1 -1
- package/Microsoft.ReactNative/ComponentView.idl +0 -17
- package/Microsoft.ReactNative/Fabric/AbiState.cpp +3 -45
- package/Microsoft.ReactNative/Fabric/AbiState.h +0 -6
- package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.cpp +10 -6
- package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.h +4 -4
- package/Microsoft.ReactNative/Fabric/Composition/ReactNativeIsland.cpp +12 -3
- package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +7 -12
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputShadowNode.cpp +1 -2
- package/Microsoft.ReactNative/Fabric/Composition/UriImageManager.cpp +9 -3
- package/Microsoft.ReactNative/Fabric/Composition/UriImageManager.h +1 -1
- package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +11 -18
- package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.h +3 -5
- package/Microsoft.ReactNative/Fabric/WindowsImageManager.cpp +23 -11
- package/Microsoft.ReactNative/Fabric/WindowsImageManager.h +5 -2
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewEventEmitter.cpp +2 -10
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/TextLayoutManager.cpp +107 -36
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/TextLayoutManager.h +18 -12
- package/Microsoft.ReactNative/Modules/DevSettingsModule.cpp +4 -0
- package/Microsoft.ReactNative/Modules/DevSettingsModule.h +1 -0
- package/Microsoft.ReactNative/Modules/ImageViewManagerModule.cpp +1 -2
- package/Microsoft.ReactNative/Modules/NativeUIManager.cpp +7 -4
- package/Microsoft.ReactNative/Modules/NativeUIManager.h +1 -1
- package/Microsoft.ReactNative/Modules/PlatformConstantsWinModule.cpp +2 -2
- package/Microsoft.ReactNative/Modules/PlatformConstantsWinModule.h +3 -3
- package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp +11 -17
- package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.h +1 -1
- package/Microsoft.ReactNative/Timer.idl +1 -3
- package/Microsoft.ReactNative/Utils/BatchingEventEmitter.cpp +1 -1
- package/Microsoft.ReactNative/Utils/LocalBundleReader.cpp +2 -3
- package/Microsoft.ReactNative/Utils/ValueUtils.cpp +1 -1
- package/Microsoft.ReactNative/Views/DynamicAutomationPeer.cpp +2 -2
- package/Microsoft.ReactNative/Views/TextInputViewManager.cpp +1 -1
- package/Microsoft.ReactNative/packages.lock.json +45 -72
- package/Microsoft.ReactNative.Cxx/JSI/LongLivedJsiValue.h +1 -1
- package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems +5 -0
- package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems.filters +1 -0
- package/Microsoft.ReactNative.Cxx/TurboModuleProvider.cpp +14 -6
- package/Microsoft.ReactNative.Cxx/TurboModuleProvider.h +2 -2
- package/Microsoft.ReactNative.Managed/Microsoft.ReactNative.Managed.csproj +1 -1
- package/Microsoft.ReactNative.Managed/packages.lock.json +3 -3
- package/PropertySheets/ARM64EC.props +13 -0
- package/PropertySheets/Application/ARM64EC.props +13 -0
- package/PropertySheets/DynamicLibrary/ARM64EC.props +13 -0
- package/PropertySheets/External/Microsoft.ReactNative.WindowsSdk.Default.props +4 -4
- package/PropertySheets/Generated/PackageVersion.g.props +4 -4
- package/PropertySheets/JSEngine.props +2 -0
- package/PropertySheets/StaticLibrary/ARM64EC.props +13 -0
- package/README.md +21 -21
- package/ReactCommon/ReactCommon.vcxproj +11 -1
- package/ReactCommon/ReactCommon.vcxproj.filters +19 -12
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/JSExecutor.cpp +67 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/JSExecutor.h +180 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/NativeToJsBridge.cpp +351 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/test/testlib.cpp +6 -3
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/Base.h +152 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/Bridging.h +2 -1
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/CallbackWrapper.h +13 -15
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/EventEmitter.h +137 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/Function.h +283 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModule.cpp +7 -10
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModule.h +162 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModuleUtils.h +2 -4
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/scrollview/ScrollViewProps.cpp +33 -8
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/runtime/JSRuntimeFactory.cpp +45 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/runtime/JSRuntimeFactory.h +67 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/runtime/ReactInstance.cpp +104 -74
- package/Scripts/StripAdditionalPlatformsFromNuspec.ps1 +1 -1
- package/Scripts/Tfs/Layout-MSRN-Headers.ps1 +10 -6
- package/Scripts/rnw-dependencies.ps1 +36 -23
- package/Shared/HermesRuntimeHolder.cpp +19 -1
- package/Shared/HermesRuntimeHolder.h +8 -1
- package/Shared/HermesSamplingProfiler.cpp +1 -2
- package/Shared/Networking/WinRTWebSocketResource.cpp +3 -3
- package/Shared/OInstance.cpp +1 -2
- package/Shared/Shared.vcxitems +21 -15
- package/Shared/Shared.vcxitems.filters +8 -3
- package/Shared/Threading/BatchingQueueThread.cpp +6 -2
- package/Shared/Threading/BatchingQueueThread.h +2 -2
- package/Shared/Utils/CppWinrtLessExceptions.h +2 -2
- package/codegen/NativeAppStateSpec.g.h +8 -8
- package/codegen/NativeBlobModuleSpec.g.h +0 -10
- package/codegen/NativeDOMSpec.g.h +136 -0
- package/codegen/NativeDevSettingsSpec.g.h +11 -5
- package/codegen/NativeIdleCallbacksSpec.g.h +64 -0
- package/codegen/NativeIntersectionObserverSpec.g.h +14 -14
- package/codegen/NativeMicrotasksSpec.g.h +34 -0
- package/codegen/NativePerformanceSpec.g.h +35 -7
- package/codegen/NativePlatformConstantsWindowsSpec.g.h +81 -0
- package/codegen/NativePushNotificationManagerIOSSpec.g.h +15 -19
- package/codegen/NativeReactNativeFeatureFlagsSpec.g.h +111 -39
- package/codegen/NativeUIManagerSpec.g.h +5 -17
- package/codegen/react/components/rnwcore/Props.cpp +1 -1
- package/codegen/react/components/rnwcore/Props.h +16 -12
- package/codegen/react/components/rnwcore/States.h +0 -26
- package/codegen/rnwcoreJSI-generated.cpp +688 -463
- package/codegen/rnwcoreJSI.h +1374 -2867
- package/fmt/TEMP_UntilFmtUpdate/core.h +2925 -0
- package/fmt/fmt.vcxproj +10 -2
- package/jest/mockComponent.js +7 -0
- package/jest/renderer.js +25 -14
- package/jest/setup.js +19 -13
- package/package.json +29 -27
- package/rn-get-polyfills.js +1 -0
- package/src/private/core/composeStyles.js +27 -0
- package/src/private/featureflags/ReactNativeFeatureFlags.js +93 -33
- package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +23 -4
- package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +56 -0
- package/src/private/fusebox/setUpFuseboxReactDevToolsDispatcher.js +108 -0
- package/src/private/specs/modules/NativeBlobModule.js +4 -2
- package/src/private/specs/modules/NativeDevSettings.js +1 -0
- package/src/private/specs/modules/NativePushNotificationManagerIOS.js +0 -4
- package/src/private/specs/modules/NativeUIManager.js +0 -7
- package/src/private/webapis/dom/geometry/DOMRectReadOnly.js +24 -24
- package/src/private/webapis/dom/nodes/ReactNativeElement.js +11 -14
- package/src/private/webapis/dom/nodes/ReadOnlyCharacterData.js +2 -3
- package/src/private/webapis/dom/nodes/ReadOnlyElement.js +24 -54
- package/src/private/webapis/dom/nodes/ReadOnlyNode.js +5 -13
- package/src/private/webapis/dom/nodes/specs/NativeDOM.js +468 -0
- package/src/private/webapis/dom/nodes/specs/__mocks__/NativeDOMMock.js +413 -0
- package/src/private/webapis/dom/oldstylecollections/DOMRectList.js +4 -4
- package/src/private/webapis/dom/oldstylecollections/HTMLCollection.js +4 -4
- package/src/private/webapis/dom/oldstylecollections/NodeList.js +5 -5
- package/src/private/webapis/idlecallbacks/specs/NativeIdleCallbacks.js +34 -0
- package/src/private/webapis/microtasks/specs/NativeMicrotasks.js +21 -0
- package/src/private/webapis/performance/EventCounts.js +1 -1
- package/src/private/webapis/performance/MemoryInfo.js +9 -9
- package/src/private/webapis/performance/Performance.js +10 -56
- package/src/private/webapis/performance/PerformanceObserver.js +30 -22
- package/src/private/webapis/performance/RawPerformanceEntry.js +2 -7
- package/src/private/webapis/performance/ReactNativeStartupTiming.js +18 -18
- package/src/private/webapis/performance/UserTiming.js +63 -0
- package/src/private/webapis/performance/{NativePerformance.js → specs/NativePerformance.js} +3 -2
- package/src/private/webapis/performance/{NativePerformanceObserver.js → specs/NativePerformanceObserver.js} +2 -2
- package/src/private/webapis/performance/{__mocks__ → specs/__mocks__}/NativePerformance.js +1 -1
- package/src/private/webapis/performance/{__mocks__ → specs/__mocks__}/NativePerformanceObserver.js +3 -4
- package/stubs/glog/logging.h +1 -0
- package/template/cpp-lib/proj/MyLib.vcxproj +1 -1
- package/template/cs-lib/proj/MyLib.csproj +1 -1
- package/template/metro.config.js +13 -2
- package/templates/cpp-app/template.config.js +1 -1
- package/templates/cpp-lib/example/metro.config.js +2 -2
- package/templates/cpp-lib/template.config.js +1 -1
- package/templates/old/generateWrapper.js +4 -1
- package/types/modules/globals.d.ts +4 -0
- package/Libraries/Lists/FlatList.windows.js +0 -717
- package/Libraries/NativeModules/specs/NativeAnimationsDebugModule.js +0 -13
- package/Libraries/Utilities/LoadingView.ios.js +0 -50
- package/Libraries/Utilities/LoadingView.js +0 -16
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModuleBinding.cpp +0 -178
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/utils/jsi-utils.cpp +0 -39
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/utils/jsi-utils.h +0 -31
- package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/YGEnums.h +0 -137
- package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/algorithm/CalculateLayout.cpp +0 -2375
- package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/enums/ExperimentalFeature.h +0 -40
- package/codegen/NativeAnimationsDebugModuleSpec.g.h +0 -40
- package/codegen/NativePlatformConstantsWinSpec.g.h +0 -81
- package/jest/ReactNativeInternalFeatureFlagsMock.js +0 -13
- package/src/private/featureflags/NativeReactNativeFeatureFlags.js +0 -44
- package/src/private/featureflags/__tests__/ReactNativeFeatureFlags-test.js +0 -92
- package/src/private/specs/modules/NativeAnimationsDebugModule.js +0 -20
- package/src/private/webapis/dom/oldstylecollections/__tests__/DOMRectList-test.js +0 -85
- package/src/private/webapis/dom/oldstylecollections/__tests__/HTMLCollection-test.js +0 -80
- package/src/private/webapis/dom/oldstylecollections/__tests__/NodeList-test.js +0 -161
- package/src/private/webapis/performance/__tests__/EventCounts-test.js +0 -116
- package/src/private/webapis/performance/__tests__/NativePerformanceMock-test.js +0 -82
- package/src/private/webapis/performance/__tests__/NativePerformanceObserverMock-test.js +0 -108
- package/src/private/webapis/performance/__tests__/Performance-test.js +0 -117
- package/src/private/webapis/performance/__tests__/PerformanceObserver-test.js +0 -208
- package/template/metro.devMode.config.js +0 -56
- /package/src/private/specs/modules/{NativePlatformConstantsWin.js → NativePlatformConstantsWindows.js} +0 -0
package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModule.h
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and 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
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <memory>
|
|
11
|
+
#include <string>
|
|
12
|
+
#include <unordered_map>
|
|
13
|
+
|
|
14
|
+
#include <jsi/jsi.h>
|
|
15
|
+
|
|
16
|
+
#include <ReactCommon/CallInvoker.h>
|
|
17
|
+
#include <EventEmitter.h> // [Windows]
|
|
18
|
+
|
|
19
|
+
namespace facebook::react {
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* For now, support the same set of return types as existing impl.
|
|
23
|
+
* This can be improved to support richer typed objects.
|
|
24
|
+
*/
|
|
25
|
+
enum TurboModuleMethodValueKind {
|
|
26
|
+
VoidKind,
|
|
27
|
+
BooleanKind,
|
|
28
|
+
NumberKind,
|
|
29
|
+
StringKind,
|
|
30
|
+
ObjectKind,
|
|
31
|
+
ArrayKind,
|
|
32
|
+
FunctionKind,
|
|
33
|
+
PromiseKind,
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Determines TurboModuleMethodValueKind based on the jsi::Value type.
|
|
38
|
+
*/
|
|
39
|
+
TurboModuleMethodValueKind getTurboModuleMethodValueKind(
|
|
40
|
+
jsi::Runtime& rt,
|
|
41
|
+
const jsi::Value* value);
|
|
42
|
+
|
|
43
|
+
class TurboCxxModule;
|
|
44
|
+
class TurboModuleBinding;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Base HostObject class for every module to be exposed to JS
|
|
48
|
+
*/
|
|
49
|
+
class JSI_EXPORT TurboModule : public facebook::jsi::HostObject {
|
|
50
|
+
public:
|
|
51
|
+
TurboModule(std::string name, std::shared_ptr<CallInvoker> jsInvoker);
|
|
52
|
+
|
|
53
|
+
// Note: keep this method declared inline to avoid conflicts
|
|
54
|
+
// between RTTI and non-RTTI compilation units
|
|
55
|
+
facebook::jsi::Value get(
|
|
56
|
+
facebook::jsi::Runtime& runtime,
|
|
57
|
+
const facebook::jsi::PropNameID& propName) override {
|
|
58
|
+
{
|
|
59
|
+
auto prop = create(runtime, propName);
|
|
60
|
+
// If we have a JS wrapper, cache the result of this lookup
|
|
61
|
+
// We don't cache misses, to allow for methodMap_ to dynamically be
|
|
62
|
+
// extended
|
|
63
|
+
if (jsRepresentation_ && !prop.isUndefined()) {
|
|
64
|
+
jsRepresentation_->lock(runtime).asObject(runtime).setProperty(
|
|
65
|
+
runtime, propName, prop);
|
|
66
|
+
}
|
|
67
|
+
return prop;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
virtual std::vector<facebook::jsi::PropNameID> getPropertyNames(
|
|
72
|
+
facebook::jsi::Runtime& runtime) override {
|
|
73
|
+
std::vector<jsi::PropNameID> result;
|
|
74
|
+
result.reserve(methodMap_.size());
|
|
75
|
+
for (auto it = methodMap_.cbegin(); it != methodMap_.cend(); ++it) {
|
|
76
|
+
result.push_back(jsi::PropNameID::forUtf8(runtime, it->first));
|
|
77
|
+
}
|
|
78
|
+
return result;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
protected:
|
|
82
|
+
const std::string name_;
|
|
83
|
+
std::shared_ptr<CallInvoker> jsInvoker_;
|
|
84
|
+
|
|
85
|
+
struct MethodMetadata {
|
|
86
|
+
size_t argCount;
|
|
87
|
+
facebook::jsi::Value (*invoker)(
|
|
88
|
+
facebook::jsi::Runtime& rt,
|
|
89
|
+
TurboModule& turboModule,
|
|
90
|
+
const facebook::jsi::Value* args,
|
|
91
|
+
size_t count);
|
|
92
|
+
};
|
|
93
|
+
std::unordered_map<std::string, MethodMetadata> methodMap_;
|
|
94
|
+
std::unordered_map<std::string, std::shared_ptr<IAsyncEventEmitter>>
|
|
95
|
+
eventEmitterMap_;
|
|
96
|
+
|
|
97
|
+
using ArgFactory =
|
|
98
|
+
std::function<void(jsi::Runtime& runtime, std::vector<jsi::Value>& args)>;
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Calls RCTDeviceEventEmitter.emit to JavaScript, with given event name and
|
|
102
|
+
* an optional list of arguments.
|
|
103
|
+
* If present, argFactory is a callback used to construct extra arguments,
|
|
104
|
+
* e.g.
|
|
105
|
+
*
|
|
106
|
+
* emitDeviceEvent(rt, "myCustomEvent",
|
|
107
|
+
* [](jsi::Runtime& rt, std::vector<jsi::Value>& args) {
|
|
108
|
+
* args.emplace_back(jsi::Value(true));
|
|
109
|
+
* args.emplace_back(jsi::Value(42));
|
|
110
|
+
* });
|
|
111
|
+
*/
|
|
112
|
+
void emitDeviceEvent(
|
|
113
|
+
const std::string& eventName,
|
|
114
|
+
ArgFactory argFactory = nullptr);
|
|
115
|
+
|
|
116
|
+
// Backwards compatibility version
|
|
117
|
+
void emitDeviceEvent(
|
|
118
|
+
jsi::Runtime& /*runtime*/,
|
|
119
|
+
|
|
120
|
+
const std::string& eventName,
|
|
121
|
+
ArgFactory argFactory = nullptr) {
|
|
122
|
+
emitDeviceEvent(eventName, std::move(argFactory));
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
virtual jsi::Value create(
|
|
126
|
+
jsi::Runtime& runtime,
|
|
127
|
+
const jsi::PropNameID& propName) {
|
|
128
|
+
std::string propNameUtf8 = propName.utf8(runtime);
|
|
129
|
+
if (auto methodIter = methodMap_.find(propNameUtf8);
|
|
130
|
+
methodIter != methodMap_.end()) {
|
|
131
|
+
const MethodMetadata& meta = methodIter->second;
|
|
132
|
+
return jsi::Function::createFromHostFunction(
|
|
133
|
+
runtime,
|
|
134
|
+
propName,
|
|
135
|
+
static_cast<unsigned int>(meta.argCount),
|
|
136
|
+
[this, meta](
|
|
137
|
+
jsi::Runtime& rt,
|
|
138
|
+
[[maybe_unused]] const jsi::Value& thisVal,
|
|
139
|
+
const jsi::Value* args,
|
|
140
|
+
size_t count) { return meta.invoker(rt, *this, args, count); });
|
|
141
|
+
} else if (auto eventEmitterIter = eventEmitterMap_.find(propNameUtf8);
|
|
142
|
+
eventEmitterIter != eventEmitterMap_.end()) {
|
|
143
|
+
return eventEmitterIter->second->get(runtime, jsInvoker_);
|
|
144
|
+
}
|
|
145
|
+
// Neither Method nor EventEmitter were not found, let JS decide what to do.
|
|
146
|
+
return facebook::jsi::Value::undefined();
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
private:
|
|
150
|
+
friend class TurboCxxModule;
|
|
151
|
+
friend class TurboModuleBinding;
|
|
152
|
+
std::unique_ptr<jsi::WeakObject> jsRepresentation_;
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* An app/platform-specific provider function to get an instance of a module
|
|
157
|
+
* given a name.
|
|
158
|
+
*/
|
|
159
|
+
using TurboModuleProviderFunctionType =
|
|
160
|
+
std::function<std::shared_ptr<TurboModule>(const std::string& name)>;
|
|
161
|
+
|
|
162
|
+
} // namespace facebook::react
|
|
@@ -11,9 +11,8 @@
|
|
|
11
11
|
#include <string>
|
|
12
12
|
|
|
13
13
|
#include <jsi/jsi.h>
|
|
14
|
-
|
|
15
|
-
#include <ReactCommon/CallInvoker.h>
|
|
16
14
|
#include <CallbackWrapper.h> // [Windows]
|
|
15
|
+
#include <LongLivedObject.h> // [Windows]
|
|
17
16
|
|
|
18
17
|
namespace facebook::react {
|
|
19
18
|
|
|
@@ -26,7 +25,6 @@ struct Promise : public LongLivedObject {
|
|
|
26
25
|
void resolve(const jsi::Value& result);
|
|
27
26
|
void reject(const std::string& error);
|
|
28
27
|
|
|
29
|
-
jsi::Runtime& runtime_;
|
|
30
28
|
jsi::Function resolve_;
|
|
31
29
|
jsi::Function reject_;
|
|
32
30
|
};
|
|
@@ -56,4 +54,4 @@ class RAIICallbackWrapperDestroyer {
|
|
|
56
54
|
std::weak_ptr<CallbackWrapper> callbackWrapper_;
|
|
57
55
|
};
|
|
58
56
|
|
|
59
|
-
} // namespace facebook::react
|
|
57
|
+
} // namespace facebook::react
|
|
@@ -111,17 +111,15 @@ ScrollViewProps::ScrollViewProps(
|
|
|
111
111
|
// [Windows fix
|
|
112
112
|
(Float)1)),
|
|
113
113
|
// Windows]
|
|
114
|
-
|
|
114
|
+
enableSyncOnScroll(
|
|
115
115
|
CoreFeatures::enablePropIteratorSetter
|
|
116
|
-
? sourceProps.
|
|
116
|
+
? sourceProps.enableSyncOnScroll
|
|
117
117
|
: convertRawProp(
|
|
118
118
|
context,
|
|
119
119
|
rawProps,
|
|
120
|
-
"
|
|
121
|
-
sourceProps.
|
|
122
|
-
|
|
123
|
-
(Float)0)),
|
|
124
|
-
// Windows]
|
|
120
|
+
"enableSyncOnScroll",
|
|
121
|
+
sourceProps.enableSyncOnScroll,
|
|
122
|
+
false)),
|
|
125
123
|
directionalLockEnabled(
|
|
126
124
|
CoreFeatures::enablePropIteratorSetter
|
|
127
125
|
? sourceProps.directionalLockEnabled
|
|
@@ -229,6 +227,23 @@ ScrollViewProps::ScrollViewProps(
|
|
|
229
227
|
"showsVerticalScrollIndicator",
|
|
230
228
|
sourceProps.showsVerticalScrollIndicator,
|
|
231
229
|
true)),
|
|
230
|
+
persistentScrollbar(
|
|
231
|
+
CoreFeatures::enablePropIteratorSetter
|
|
232
|
+
? sourceProps.persistentScrollbar
|
|
233
|
+
: convertRawProp(
|
|
234
|
+
context,
|
|
235
|
+
rawProps,
|
|
236
|
+
"persistentScrollbar",
|
|
237
|
+
sourceProps.persistentScrollbar,
|
|
238
|
+
true)),
|
|
239
|
+
horizontal(
|
|
240
|
+
CoreFeatures::enablePropIteratorSetter ? sourceProps.horizontal
|
|
241
|
+
: convertRawProp(
|
|
242
|
+
context,
|
|
243
|
+
rawProps,
|
|
244
|
+
"horizontal",
|
|
245
|
+
sourceProps.horizontal,
|
|
246
|
+
true)),
|
|
232
247
|
scrollEventThrottle(
|
|
233
248
|
CoreFeatures::enablePropIteratorSetter
|
|
234
249
|
? sourceProps.scrollEventThrottle
|
|
@@ -381,11 +396,14 @@ void ScrollViewProps::setProp(
|
|
|
381
396
|
RAW_SET_PROP_SWITCH_CASE_BASIC(maximumZoomScale);
|
|
382
397
|
RAW_SET_PROP_SWITCH_CASE_BASIC(minimumZoomScale);
|
|
383
398
|
RAW_SET_PROP_SWITCH_CASE_BASIC(scrollEnabled);
|
|
399
|
+
RAW_SET_PROP_SWITCH_CASE_BASIC(enableSyncOnScroll);
|
|
400
|
+
RAW_SET_PROP_SWITCH_CASE_BASIC(endDraggingSensitivityMultiplier);
|
|
384
401
|
RAW_SET_PROP_SWITCH_CASE_BASIC(pagingEnabled);
|
|
385
402
|
RAW_SET_PROP_SWITCH_CASE_BASIC(pinchGestureEnabled);
|
|
386
403
|
RAW_SET_PROP_SWITCH_CASE_BASIC(scrollsToTop);
|
|
387
404
|
RAW_SET_PROP_SWITCH_CASE_BASIC(showsHorizontalScrollIndicator);
|
|
388
|
-
RAW_SET_PROP_SWITCH_CASE_BASIC(
|
|
405
|
+
RAW_SET_PROP_SWITCH_CASE_BASIC(persistentScrollbar);
|
|
406
|
+
RAW_SET_PROP_SWITCH_CASE_BASIC(horizontal);
|
|
389
407
|
RAW_SET_PROP_SWITCH_CASE_BASIC(scrollEventThrottle);
|
|
390
408
|
RAW_SET_PROP_SWITCH_CASE_BASIC(zoomScale);
|
|
391
409
|
RAW_SET_PROP_SWITCH_CASE_BASIC(contentInset);
|
|
@@ -491,6 +509,12 @@ SharedDebugStringConvertibleList ScrollViewProps::getDebugProps() const {
|
|
|
491
509
|
"showsVerticalScrollIndicator",
|
|
492
510
|
showsVerticalScrollIndicator,
|
|
493
511
|
defaultScrollViewProps.showsVerticalScrollIndicator),
|
|
512
|
+
debugStringConvertibleItem(
|
|
513
|
+
"persistentScrollbar",
|
|
514
|
+
persistentScrollbar,
|
|
515
|
+
defaultScrollViewProps.persistentScrollbar),
|
|
516
|
+
debugStringConvertibleItem(
|
|
517
|
+
"horizontal", horizontal, defaultScrollViewProps.horizontal),
|
|
494
518
|
debugStringConvertibleItem(
|
|
495
519
|
"scrollEventThrottle",
|
|
496
520
|
scrollEventThrottle,
|
|
@@ -533,3 +557,4 @@ SharedDebugStringConvertibleList ScrollViewProps::getDebugProps() const {
|
|
|
533
557
|
#endif
|
|
534
558
|
|
|
535
559
|
} // namespace facebook::react
|
|
560
|
+
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and 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 "JSRuntimeFactory.h"
|
|
9
|
+
#include <jsinspector-modern/ConsoleMessage.h>
|
|
10
|
+
#include <jsinspector-modern/FallbackRuntimeAgentDelegate.h>
|
|
11
|
+
|
|
12
|
+
namespace facebook::react {
|
|
13
|
+
|
|
14
|
+
jsi::Runtime& JSIRuntimeHolder::getRuntime() noexcept {
|
|
15
|
+
return *runtime_;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
JSIRuntimeHolder::JSIRuntimeHolder(std::unique_ptr<jsi::Runtime> runtime)
|
|
19
|
+
: runtime_(std::move(runtime)) {
|
|
20
|
+
assert(runtime_ != nullptr);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
void JSIRuntimeHolder::addConsoleMessage(jsi::Runtime& runtime, jsinspector_modern::ConsoleMessage message) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
bool JSIRuntimeHolder::supportsConsole() const{
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
std::unique_ptr<jsinspector_modern::RuntimeAgentDelegate>
|
|
32
|
+
JSIRuntimeHolder::createAgentDelegate(
|
|
33
|
+
jsinspector_modern::FrontendChannel frontendChannel,
|
|
34
|
+
jsinspector_modern::SessionState& sessionState,
|
|
35
|
+
std::unique_ptr<jsinspector_modern::RuntimeAgentDelegate::ExportedState>,
|
|
36
|
+
const jsinspector_modern::ExecutionContextDescription&
|
|
37
|
+
executionContextDescription,
|
|
38
|
+
RuntimeExecutor runtimeExecutor) {
|
|
39
|
+
(void)executionContextDescription;
|
|
40
|
+
(void)runtimeExecutor;
|
|
41
|
+
return std::make_unique<jsinspector_modern::FallbackRuntimeAgentDelegate>(
|
|
42
|
+
std::move(frontendChannel), sessionState, runtime_->description());
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
} // namespace facebook::react
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and 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
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <ReactCommon/RuntimeExecutor.h>
|
|
11
|
+
#include <cxxreact/MessageQueueThread.h>
|
|
12
|
+
#include <jsinspector-modern/ConsoleMessage.h>
|
|
13
|
+
#include <jsi/jsi.h>
|
|
14
|
+
#include <jsinspector-modern/ReactCdp.h>
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
namespace facebook::react {
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* An interface that represents an instance of a JS VM
|
|
21
|
+
*/
|
|
22
|
+
class JSRuntime : public jsinspector_modern::RuntimeTargetDelegate {
|
|
23
|
+
public:
|
|
24
|
+
virtual jsi::Runtime& getRuntime() noexcept = 0;
|
|
25
|
+
|
|
26
|
+
virtual ~JSRuntime() = default;
|
|
27
|
+
|
|
28
|
+
virtual void addConsoleMessage(jsi::Runtime& runtime, jsinspector_modern::ConsoleMessage message) = 0;
|
|
29
|
+
virtual bool supportsConsole() const = 0;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Interface for a class that creates instances of a JS VM
|
|
34
|
+
*/
|
|
35
|
+
class JSRuntimeFactory {
|
|
36
|
+
public:
|
|
37
|
+
virtual std::unique_ptr<JSRuntime> createJSRuntime(
|
|
38
|
+
std::shared_ptr<MessageQueueThread> msgQueueThread) noexcept = 0;
|
|
39
|
+
|
|
40
|
+
virtual ~JSRuntimeFactory() = default;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Utility class for creating a JSRuntime from a uniquely owned jsi::Runtime.
|
|
45
|
+
*/
|
|
46
|
+
class JSIRuntimeHolder : public JSRuntime {
|
|
47
|
+
public:
|
|
48
|
+
jsi::Runtime& getRuntime() noexcept override;
|
|
49
|
+
void addConsoleMessage(jsi::Runtime& runtime, jsinspector_modern::ConsoleMessage message) override;
|
|
50
|
+
bool supportsConsole() const override;
|
|
51
|
+
|
|
52
|
+
std::unique_ptr<jsinspector_modern::RuntimeAgentDelegate> createAgentDelegate(
|
|
53
|
+
jsinspector_modern::FrontendChannel frontendChannel,
|
|
54
|
+
jsinspector_modern::SessionState& sessionState,
|
|
55
|
+
std::unique_ptr<jsinspector_modern::RuntimeAgentDelegate::ExportedState>
|
|
56
|
+
previouslyExportedState,
|
|
57
|
+
const jsinspector_modern::ExecutionContextDescription&
|
|
58
|
+
executionContextDescription,
|
|
59
|
+
RuntimeExecutor runtimeExecutor) override;
|
|
60
|
+
|
|
61
|
+
explicit JSIRuntimeHolder(std::unique_ptr<jsi::Runtime> runtime);
|
|
62
|
+
|
|
63
|
+
private:
|
|
64
|
+
std::unique_ptr<jsi::Runtime> runtime_;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
} // namespace facebook::react
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
#include "ReactInstance.h"
|
|
9
9
|
|
|
10
|
+
#include <ReactCommon/RuntimeExecutor.h>
|
|
10
11
|
#include <cxxreact/ErrorUtils.h>
|
|
11
12
|
#include <cxxreact/JSBigString.h>
|
|
12
13
|
#include <cxxreact/JSExecutor.h>
|
|
@@ -15,14 +16,13 @@
|
|
|
15
16
|
#include <glog/logging.h>
|
|
16
17
|
#include <jsi/JSIDynamic.h>
|
|
17
18
|
#include <jsi/instrumentation.h>
|
|
19
|
+
#include <jsinspector-modern/HostTarget.h>
|
|
18
20
|
#include <jsireact/JSIExecutor.h>
|
|
19
21
|
#include <react/featureflags/ReactNativeFeatureFlags.h>
|
|
20
22
|
#include <react/renderer/runtimescheduler/RuntimeSchedulerBinding.h>
|
|
21
|
-
// [Windows
|
|
22
23
|
#include <react/utils/jsi-utils.h>
|
|
23
|
-
// Windows]
|
|
24
24
|
#include <iostream>
|
|
25
|
-
#include <
|
|
25
|
+
#include <memory>
|
|
26
26
|
#include <utility>
|
|
27
27
|
|
|
28
28
|
namespace facebook::react {
|
|
@@ -31,86 +31,110 @@ ReactInstance::ReactInstance(
|
|
|
31
31
|
std::unique_ptr<JSRuntime> runtime,
|
|
32
32
|
std::shared_ptr<MessageQueueThread> jsMessageQueueThread,
|
|
33
33
|
std::shared_ptr<TimerManager> timerManager,
|
|
34
|
-
JsErrorHandler::
|
|
35
|
-
jsinspector_modern::
|
|
34
|
+
JsErrorHandler::OnJsError onJsError,
|
|
35
|
+
jsinspector_modern::HostTarget* parentInspectorTarget)
|
|
36
36
|
: runtime_(std::move(runtime)),
|
|
37
37
|
jsMessageQueueThread_(jsMessageQueueThread),
|
|
38
38
|
timerManager_(std::move(timerManager)),
|
|
39
|
-
jsErrorHandler_(
|
|
40
|
-
hasFatalJsError_(std::make_shared<bool>(false)),
|
|
39
|
+
jsErrorHandler_(std::make_shared<JsErrorHandler>(std::move(onJsError))),
|
|
41
40
|
parentInspectorTarget_(parentInspectorTarget) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
if (std::shared_ptr<bool> sharedHasFatalJsError =
|
|
53
|
-
weakHasFatalJsError.lock()) {
|
|
54
|
-
if (*sharedHasFatalJsError) {
|
|
55
|
-
LOG(INFO)
|
|
56
|
-
<< "Calling into JS using runtimeExecutor but hasFatalJsError_ is true";
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
41
|
+
RuntimeExecutor runtimeExecutor = [weakRuntime = std::weak_ptr(runtime_),
|
|
42
|
+
weakTimerManager =
|
|
43
|
+
std::weak_ptr(timerManager_),
|
|
44
|
+
weakJsThread =
|
|
45
|
+
std::weak_ptr(jsMessageQueueThread_),
|
|
46
|
+
weakJsErrorHander = std::weak_ptr(
|
|
47
|
+
jsErrorHandler_)](auto callback) {
|
|
48
|
+
auto jsErrorHandler = weakJsErrorHander.lock();
|
|
49
|
+
if (weakRuntime.expired() || !jsErrorHandler) {
|
|
50
|
+
return;
|
|
59
51
|
}
|
|
60
|
-
|
|
52
|
+
|
|
53
|
+
if (jsErrorHandler->hasHandledFatalError()) {
|
|
54
|
+
LOG(INFO)
|
|
55
|
+
<< "RuntimeExecutor: Detected fatal js error. Dropping work on non-js thread."
|
|
56
|
+
<< std::endl;
|
|
61
57
|
return;
|
|
62
58
|
}
|
|
63
59
|
|
|
64
|
-
if (
|
|
65
|
-
|
|
66
|
-
sharedJsMessageQueueThread->runOnQueue(
|
|
60
|
+
if (auto jsThread = weakJsThread.lock()) {
|
|
61
|
+
jsThread->runOnQueue(
|
|
67
62
|
[weakRuntime, weakTimerManager, callback = std::move(callback)]() {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
63
|
+
auto runtime = weakRuntime.lock();
|
|
64
|
+
if (!runtime) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
jsi::Runtime& jsiRuntime = runtime->getRuntime();
|
|
69
|
+
SystraceSection s("ReactInstance::_runtimeExecutor[Callback]");
|
|
70
|
+
try {
|
|
71
|
+
callback(jsiRuntime);
|
|
72
|
+
|
|
73
|
+
// If we have first-class support for microtasks,
|
|
74
|
+
// they would've been called as part of the previous callback.
|
|
75
|
+
if (!ReactNativeFeatureFlags::enableMicrotasks()) {
|
|
76
|
+
if (auto timerManager = weakTimerManager.lock()) {
|
|
77
|
+
timerManager->callReactNativeMicrotasks(jsiRuntime);
|
|
80
78
|
}
|
|
81
|
-
} catch (jsi::JSError& originalError) {
|
|
82
|
-
handleJSError(jsiRuntime, originalError, true);
|
|
83
79
|
}
|
|
80
|
+
} catch (jsi::JSError& originalError) {
|
|
81
|
+
handleJSError(jsiRuntime, originalError, true);
|
|
84
82
|
}
|
|
85
83
|
});
|
|
86
84
|
}
|
|
87
85
|
};
|
|
88
86
|
|
|
89
87
|
if (parentInspectorTarget_) {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
88
|
+
auto executor = parentInspectorTarget_->executorFromThis();
|
|
89
|
+
|
|
90
|
+
auto runtimeExecutorThatWaitsForInspectorSetup =
|
|
91
|
+
std::make_shared<BufferedRuntimeExecutor>(runtimeExecutor);
|
|
92
|
+
|
|
93
|
+
// This code can execute from any thread, so we need to make sure we set up
|
|
94
|
+
// the inspector logic in the right one. The callback executes immediately
|
|
95
|
+
// if we are already in the right thread.
|
|
96
|
+
executor([this, runtimeExecutor, runtimeExecutorThatWaitsForInspectorSetup](
|
|
97
|
+
jsinspector_modern::HostTarget& hostTarget) {
|
|
98
|
+
// Callbacks scheduled through the page target executor are generally
|
|
99
|
+
// not guaranteed to run (e.g.: if the page target is destroyed)
|
|
100
|
+
// but in this case it is because the page target cannot be destroyed
|
|
101
|
+
// before the instance finishes its setup:
|
|
102
|
+
// * On iOS it's because we do the setup synchronously.
|
|
103
|
+
// * On Android it's because we explicitly wait for the instance
|
|
104
|
+
// creation task to finish before starting the destruction.
|
|
105
|
+
inspectorTarget_ = &hostTarget.registerInstance(*this);
|
|
106
|
+
runtimeInspectorTarget_ =
|
|
107
|
+
&inspectorTarget_->registerRuntime(*runtime_, runtimeExecutor);
|
|
108
|
+
runtimeExecutorThatWaitsForInspectorSetup->flush();
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
// We decorate the runtime executor used everywhere else to wait for the
|
|
112
|
+
// inspector to finish its setup.
|
|
113
|
+
runtimeExecutor =
|
|
114
|
+
[runtimeExecutorThatWaitsForInspectorSetup](
|
|
115
|
+
std::function<void(jsi::Runtime & runtime)>&& callback) {
|
|
116
|
+
runtimeExecutorThatWaitsForInspectorSetup->execute(
|
|
117
|
+
std::move(callback));
|
|
118
|
+
};
|
|
93
119
|
}
|
|
94
120
|
|
|
95
|
-
runtimeScheduler_ =
|
|
96
|
-
std::make_shared<RuntimeScheduler>(std::move(runtimeExecutor));
|
|
121
|
+
runtimeScheduler_ = std::make_shared<RuntimeScheduler>(runtimeExecutor);
|
|
97
122
|
|
|
98
|
-
|
|
123
|
+
bufferedRuntimeExecutor_ = std::make_shared<BufferedRuntimeExecutor>(
|
|
99
124
|
[runtimeScheduler = runtimeScheduler_.get()](
|
|
100
125
|
std::function<void(jsi::Runtime & runtime)>&& callback) {
|
|
101
126
|
runtimeScheduler->scheduleWork(std::move(callback));
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
bufferedRuntimeExecutor_ =
|
|
105
|
-
std::make_shared<BufferedRuntimeExecutor>(pipedRuntimeExecutor);
|
|
127
|
+
});
|
|
106
128
|
}
|
|
107
129
|
|
|
108
130
|
void ReactInstance::unregisterFromInspector() {
|
|
109
131
|
if (inspectorTarget_) {
|
|
110
132
|
assert(runtimeInspectorTarget_);
|
|
111
133
|
inspectorTarget_->unregisterRuntime(*runtimeInspectorTarget_);
|
|
134
|
+
|
|
112
135
|
assert(parentInspectorTarget_);
|
|
113
136
|
parentInspectorTarget_->unregisterInstance(*inspectorTarget_);
|
|
137
|
+
|
|
114
138
|
inspectorTarget_ = nullptr;
|
|
115
139
|
}
|
|
116
140
|
}
|
|
@@ -137,6 +161,8 @@ RuntimeExecutor ReactInstance::getBufferedRuntimeExecutor() noexcept {
|
|
|
137
161
|
};
|
|
138
162
|
}
|
|
139
163
|
|
|
164
|
+
// TODO(T184010230): Should the RuntimeScheduler returned from this method be
|
|
165
|
+
// buffered?
|
|
140
166
|
std::shared_ptr<RuntimeScheduler>
|
|
141
167
|
ReactInstance::getRuntimeScheduler() noexcept {
|
|
142
168
|
return runtimeScheduler_;
|
|
@@ -194,9 +220,7 @@ void ReactInstance::loadScript(
|
|
|
194
220
|
strongBufferedRuntimeExecuter->flush();
|
|
195
221
|
}
|
|
196
222
|
} catch (jsi::JSError& error) {
|
|
197
|
-
|
|
198
|
-
*hasFatalJsError_ = true;
|
|
199
|
-
this->jsErrorHandler_.handleJsError(error, true);
|
|
223
|
+
jsErrorHandler_->handleFatalError(error);
|
|
200
224
|
}
|
|
201
225
|
});
|
|
202
226
|
}
|
|
@@ -208,20 +232,24 @@ void ReactInstance::loadScript(
|
|
|
208
232
|
void ReactInstance::callFunctionOnModule(
|
|
209
233
|
const std::string& moduleName,
|
|
210
234
|
const std::string& methodName,
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
235
|
+
folly::dynamic&& args) {
|
|
236
|
+
bufferedRuntimeExecutor_->execute([this,
|
|
237
|
+
moduleName = moduleName,
|
|
238
|
+
methodName = methodName,
|
|
239
|
+
args = std::move(args)](
|
|
240
|
+
jsi::Runtime& runtime) {
|
|
215
241
|
SystraceSection s(
|
|
216
242
|
"ReactInstance::callFunctionOnModule",
|
|
217
243
|
"moduleName",
|
|
218
244
|
moduleName,
|
|
219
245
|
"methodName",
|
|
220
246
|
methodName);
|
|
221
|
-
|
|
247
|
+
auto it = callableModules_.find(moduleName);
|
|
248
|
+
if (it == callableModules_.end()) {
|
|
222
249
|
std::ostringstream knownModules;
|
|
223
250
|
int i = 0;
|
|
224
|
-
for (
|
|
251
|
+
for (it = callableModules_.begin(); it != callableModules_.end();
|
|
252
|
+
it++, i++) {
|
|
225
253
|
const char* space = (i > 0 ? ", " : " ");
|
|
226
254
|
knownModules << space << it->first;
|
|
227
255
|
}
|
|
@@ -230,24 +258,25 @@ void ReactInstance::callFunctionOnModule(
|
|
|
230
258
|
"Failed to call into JavaScript module method " + moduleName + "." +
|
|
231
259
|
methodName +
|
|
232
260
|
"(). Module has not been registered as callable. Registered callable JavaScript modules (n = " +
|
|
233
|
-
std::to_string(
|
|
234
|
-
"
|
|
261
|
+
std::to_string(callableModules_.size()) +
|
|
262
|
+
"):" + knownModules.str() +
|
|
263
|
+
". Did you forget to call `registerCallableModule`?");
|
|
235
264
|
}
|
|
236
265
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
runtime,
|
|
242
|
-
"Failed to call into JavaScript module method " + moduleName + "." +
|
|
243
|
-
methodName + ". Module exists, but the method is undefined.");
|
|
266
|
+
if (std::holds_alternative<jsi::Function>(it->second)) {
|
|
267
|
+
auto module =
|
|
268
|
+
std::get<jsi::Function>(it->second).call(runtime).asObject(runtime);
|
|
269
|
+
it->second = std::move(module);
|
|
244
270
|
}
|
|
245
271
|
|
|
272
|
+
auto& module = std::get<jsi::Object>(it->second);
|
|
273
|
+
auto method = module.getPropertyAsFunction(runtime, methodName.c_str());
|
|
274
|
+
|
|
246
275
|
std::vector<jsi::Value> jsArgs;
|
|
247
276
|
for (auto& arg : args) {
|
|
248
277
|
jsArgs.push_back(jsi::valueFromDynamic(runtime, arg));
|
|
249
278
|
}
|
|
250
|
-
method.
|
|
279
|
+
method.callWithThis(
|
|
251
280
|
runtime, module, (const jsi::Value*)jsArgs.data(), jsArgs.size());
|
|
252
281
|
});
|
|
253
282
|
}
|
|
@@ -343,13 +372,14 @@ void ReactInstance::initializeRuntime(
|
|
|
343
372
|
}
|
|
344
373
|
auto name = args[0].asString(runtime).utf8(runtime);
|
|
345
374
|
if (!args[1].isObject() ||
|
|
346
|
-
!args[1].
|
|
375
|
+
!args[1].getObject(runtime).isFunction(runtime)) {
|
|
347
376
|
throw jsi::JSError(
|
|
348
377
|
runtime,
|
|
349
378
|
"The second argument to registerCallableModule must be a function that returns the JS module.");
|
|
350
379
|
}
|
|
351
|
-
|
|
352
|
-
|
|
380
|
+
callableModules_.emplace(
|
|
381
|
+
std::move(name),
|
|
382
|
+
args[1].getObject(runtime).getFunction(runtime));
|
|
353
383
|
return jsi::Value::undefined();
|
|
354
384
|
}));
|
|
355
385
|
|
|
@@ -16,7 +16,7 @@ If ($PSBoundParameters['Debug']) {
|
|
|
16
16
|
Write-Output "Creating filtered version of : $nuspec"
|
|
17
17
|
$xml = [xml](gc $nuspec)
|
|
18
18
|
|
|
19
|
-
$allSlices = @("x64.Release", "x64.Debug", "x86.Release", "x86.Debug", "ARM64.Release", "ARM64.Debug")
|
|
19
|
+
$allSlices = @("x64.Release", "x64.Debug", "x86.Release", "x86.Debug", "ARM64.Release", "ARM64.Debug", "ARM64EC.Debug", "ARM64EC.Release")
|
|
20
20
|
|
|
21
21
|
$nodesToRemove = @();
|
|
22
22
|
|