react-native-windows 0.74.11 → 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 +14 -70
- package/Libraries/Components/TextInput/TextInput.windows.js +15 -72
- 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/CompositionViewComponentView.cpp +1 -4
- package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.cpp +10 -6
- package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.h +4 -4
- package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.cpp +0 -10
- package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.h +0 -3
- package/Microsoft.ReactNative/Fabric/Composition/ReactNativeIsland.cpp +29 -45
- package/Microsoft.ReactNative/Fabric/Composition/ReactNativeIsland.h +1 -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 -16
- 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 +4 -0
- 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 -2377
- package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/config/Config.cpp +0 -140
- package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/config/Config.h +0 -92
- package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/enums/ExperimentalFeature.h +0 -40
- package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/node/LayoutResults.cpp +0 -48
- package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/node/LayoutResults.h +0 -122
- package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/node/Node.cpp +0 -366
- 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
|
@@ -0,0 +1,152 @@
|
|
|
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 <jsi/jsi.h>
|
|
11
|
+
#include <Convert.h> // [Windows]
|
|
12
|
+
|
|
13
|
+
#include <cstdint>
|
|
14
|
+
#include <memory>
|
|
15
|
+
#include <type_traits>
|
|
16
|
+
|
|
17
|
+
namespace facebook::react {
|
|
18
|
+
|
|
19
|
+
class CallInvoker;
|
|
20
|
+
|
|
21
|
+
template <typename T, typename = void>
|
|
22
|
+
struct Bridging;
|
|
23
|
+
|
|
24
|
+
template <>
|
|
25
|
+
struct Bridging<void> {
|
|
26
|
+
// Highly generic code may result in "casting" to void.
|
|
27
|
+
static void fromJs(jsi::Runtime&, const jsi::Value&) {}
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
namespace bridging {
|
|
31
|
+
namespace detail {
|
|
32
|
+
|
|
33
|
+
template <typename F>
|
|
34
|
+
struct function_wrapper;
|
|
35
|
+
|
|
36
|
+
template <typename C, typename R, typename... Args>
|
|
37
|
+
struct function_wrapper<R (C::*)(Args...)> {
|
|
38
|
+
using type = std::function<R(Args...)>;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
template <typename C, typename R, typename... Args>
|
|
42
|
+
struct function_wrapper<R (C::*)(Args...) const> {
|
|
43
|
+
using type = std::function<R(Args...)>;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
template <typename T, typename = void>
|
|
47
|
+
struct bridging_wrapper {
|
|
48
|
+
using type = remove_cvref_t<T>;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
// Convert lambda types to move-only function types since we can't specialize
|
|
52
|
+
// Bridging templates for arbitrary lambdas.
|
|
53
|
+
template <typename T>
|
|
54
|
+
struct bridging_wrapper<
|
|
55
|
+
T,
|
|
56
|
+
std::void_t<decltype(&remove_cvref_t<T>::operator())>>
|
|
57
|
+
: function_wrapper<decltype(&remove_cvref_t<T>::operator())> {};
|
|
58
|
+
|
|
59
|
+
} // namespace detail
|
|
60
|
+
|
|
61
|
+
template <typename T>
|
|
62
|
+
using bridging_t = typename detail::bridging_wrapper<T>::type;
|
|
63
|
+
|
|
64
|
+
template <typename R, typename T, std::enable_if_t<is_jsi_v<T>, int> = 0>
|
|
65
|
+
auto fromJs(jsi::Runtime& rt, T&& value, const std::shared_ptr<CallInvoker>&)
|
|
66
|
+
-> decltype(static_cast<R>(convert(rt, std::forward<T>(value)))) {
|
|
67
|
+
return convert(rt, std::forward<T>(value));
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
template <typename R, typename T>
|
|
71
|
+
auto fromJs(jsi::Runtime& rt, T&& value, const std::shared_ptr<CallInvoker>&)
|
|
72
|
+
-> decltype(Bridging<remove_cvref_t<R>>::fromJs(
|
|
73
|
+
rt,
|
|
74
|
+
convert(rt, std::forward<T>(value)))) {
|
|
75
|
+
return Bridging<remove_cvref_t<R>>::fromJs(
|
|
76
|
+
rt, convert(rt, std::forward<T>(value)));
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
template <typename R, typename T>
|
|
80
|
+
auto fromJs(
|
|
81
|
+
jsi::Runtime& rt,
|
|
82
|
+
T&& value,
|
|
83
|
+
const std::shared_ptr<CallInvoker>& jsInvoker)
|
|
84
|
+
-> decltype(Bridging<remove_cvref_t<R>>::fromJs(
|
|
85
|
+
rt,
|
|
86
|
+
convert(rt, std::forward<T>(value)),
|
|
87
|
+
jsInvoker)) {
|
|
88
|
+
return Bridging<remove_cvref_t<R>>::fromJs(
|
|
89
|
+
rt, convert(rt, std::forward<T>(value)), jsInvoker);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
template <typename T, std::enable_if_t<is_jsi_v<T>, int> = 0>
|
|
93
|
+
auto toJs(
|
|
94
|
+
jsi::Runtime& rt,
|
|
95
|
+
T&& value,
|
|
96
|
+
const std::shared_ptr<CallInvoker>& = nullptr) -> remove_cvref_t<T> {
|
|
97
|
+
return convert(rt, std::forward<T>(value));
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
template <typename T>
|
|
101
|
+
auto toJs(
|
|
102
|
+
jsi::Runtime& rt,
|
|
103
|
+
T&& value,
|
|
104
|
+
const std::shared_ptr<CallInvoker>& = nullptr)
|
|
105
|
+
-> decltype(Bridging<bridging_t<T>>::toJs(rt, std::forward<T>(value))) {
|
|
106
|
+
return Bridging<bridging_t<T>>::toJs(rt, std::forward<T>(value));
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
template <typename T>
|
|
110
|
+
auto toJs(
|
|
111
|
+
jsi::Runtime& rt,
|
|
112
|
+
T&& value,
|
|
113
|
+
const std::shared_ptr<CallInvoker>& jsInvoker)
|
|
114
|
+
-> decltype(Bridging<bridging_t<T>>::toJs(
|
|
115
|
+
rt,
|
|
116
|
+
std::forward<T>(value),
|
|
117
|
+
jsInvoker)) {
|
|
118
|
+
return Bridging<bridging_t<T>>::toJs(rt, std::forward<T>(value), jsInvoker);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
template <typename, typename = jsi::Value, typename = void>
|
|
122
|
+
inline constexpr bool supportsFromJs = false;
|
|
123
|
+
|
|
124
|
+
template <typename T, typename Arg = jsi::Value>
|
|
125
|
+
inline constexpr bool supportsFromJs<
|
|
126
|
+
T,
|
|
127
|
+
Arg,
|
|
128
|
+
std::void_t<decltype(fromJs<T>(
|
|
129
|
+
std::declval<jsi::Runtime&>(),
|
|
130
|
+
std::declval<Arg>(),
|
|
131
|
+
nullptr))>> = true;
|
|
132
|
+
|
|
133
|
+
template <typename, typename = jsi::Value, typename = void>
|
|
134
|
+
inline constexpr bool supportsToJs = false;
|
|
135
|
+
|
|
136
|
+
template <typename T, typename Ret = jsi::Value>
|
|
137
|
+
inline constexpr bool supportsToJs<
|
|
138
|
+
T,
|
|
139
|
+
Ret,
|
|
140
|
+
std::void_t<decltype(toJs(
|
|
141
|
+
std::declval<jsi::Runtime&>(),
|
|
142
|
+
std::declval<T>(),
|
|
143
|
+
nullptr))>> =
|
|
144
|
+
std::is_convertible_v<
|
|
145
|
+
decltype(toJs(
|
|
146
|
+
std::declval<jsi::Runtime&>(),
|
|
147
|
+
std::declval<T>(),
|
|
148
|
+
nullptr)),
|
|
149
|
+
Ret>;
|
|
150
|
+
|
|
151
|
+
} // namespace bridging
|
|
152
|
+
} // namespace facebook::react
|
|
@@ -13,8 +13,9 @@
|
|
|
13
13
|
#include <react/bridging/Class.h>
|
|
14
14
|
// #include <react/bridging/Dynamic.h> // Line causes Error C1083 Cannot open include file: 'double-conversion/double-conversion.h' #11644
|
|
15
15
|
#include <react/bridging/Error.h>
|
|
16
|
+
#include <react/bridging/EventEmitter.h>
|
|
16
17
|
#include <react/bridging/Function.h>
|
|
17
18
|
#include <react/bridging/Number.h>
|
|
18
19
|
#include <react/bridging/Object.h>
|
|
19
20
|
#include <react/bridging/Promise.h>
|
|
20
|
-
#include <react/bridging/Value.h>
|
|
21
|
+
#include <react/bridging/Value.h>
|
|
@@ -8,23 +8,24 @@
|
|
|
8
8
|
#pragma once
|
|
9
9
|
|
|
10
10
|
#include <jsi/jsi.h>
|
|
11
|
-
#include <LongLivedObject.h>
|
|
12
11
|
|
|
13
12
|
#include <memory>
|
|
14
13
|
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
#include <LongLivedObject.h> // [Windows]
|
|
15
|
+
|
|
16
|
+
namespace facebook::react {
|
|
17
|
+
|
|
18
|
+
class CallInvoker;
|
|
17
19
|
|
|
18
20
|
// Helper for passing jsi::Function arg to other methods.
|
|
19
21
|
class CallbackWrapper : public LongLivedObject {
|
|
20
22
|
private:
|
|
21
23
|
CallbackWrapper(
|
|
22
|
-
jsi::Function
|
|
23
|
-
jsi::Runtime
|
|
24
|
+
jsi::Function&& callback,
|
|
25
|
+
jsi::Runtime& runtime,
|
|
24
26
|
std::shared_ptr<CallInvoker> jsInvoker)
|
|
25
|
-
:
|
|
27
|
+
: LongLivedObject(runtime),
|
|
26
28
|
callback_(std::move(callback)),
|
|
27
|
-
runtime_(runtime),
|
|
28
29
|
jsInvoker_(std::move(jsInvoker)) {}
|
|
29
30
|
|
|
30
31
|
CallbackWrapper(
|
|
@@ -32,9 +33,8 @@ class CallbackWrapper : public LongLivedObject {
|
|
|
32
33
|
jsi::Function &&callback,
|
|
33
34
|
jsi::Runtime &runtime,
|
|
34
35
|
std::shared_ptr<CallInvoker> jsInvoker)
|
|
35
|
-
:
|
|
36
|
+
: LongLivedObject(runtime),
|
|
36
37
|
callback_(std::move(callback)),
|
|
37
|
-
runtime_(runtime),
|
|
38
38
|
jsInvoker_(std::move(jsInvoker)) {}
|
|
39
39
|
|
|
40
40
|
// Use a weak_ptr to avoid a retain cycle: LongLivedObjectCollection owns all
|
|
@@ -42,7 +42,6 @@ class CallbackWrapper : public LongLivedObject {
|
|
|
42
42
|
// LongLivedObjectCollection.
|
|
43
43
|
std::weak_ptr<LongLivedObjectCollection> longLivedObjectCollection_;
|
|
44
44
|
jsi::Function callback_;
|
|
45
|
-
jsi::Runtime &runtime_;
|
|
46
45
|
std::shared_ptr<CallInvoker> jsInvoker_;
|
|
47
46
|
|
|
48
47
|
public:
|
|
@@ -50,9 +49,9 @@ class CallbackWrapper : public LongLivedObject {
|
|
|
50
49
|
jsi::Function &&callback,
|
|
51
50
|
jsi::Runtime &runtime,
|
|
52
51
|
std::shared_ptr<CallInvoker> jsInvoker) {
|
|
53
|
-
auto wrapper = std::shared_ptr<CallbackWrapper>(
|
|
54
|
-
|
|
55
|
-
LongLivedObjectCollection::get().add(wrapper);
|
|
52
|
+
auto wrapper = std::shared_ptr<CallbackWrapper>(new CallbackWrapper(
|
|
53
|
+
std::move(callback), runtime, std::move(jsInvoker)));
|
|
54
|
+
LongLivedObjectCollection::get(runtime).add(wrapper);
|
|
56
55
|
return wrapper;
|
|
57
56
|
}
|
|
58
57
|
|
|
@@ -99,5 +98,4 @@ class CallbackWrapper : public LongLivedObject {
|
|
|
99
98
|
}
|
|
100
99
|
};
|
|
101
100
|
|
|
102
|
-
} // namespace react
|
|
103
|
-
} // namespace facebook
|
|
101
|
+
} // namespace facebook::react
|
|
@@ -0,0 +1,137 @@
|
|
|
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 <Function.h> // [Windows]
|
|
11
|
+
#include <functional>
|
|
12
|
+
#include <memory>
|
|
13
|
+
#include <mutex>
|
|
14
|
+
#include <unordered_map>
|
|
15
|
+
|
|
16
|
+
#define FRIEND_TEST(test_case_name, test_name) \
|
|
17
|
+
friend class test_case_name##_##test_name##_Test
|
|
18
|
+
|
|
19
|
+
namespace facebook::react {
|
|
20
|
+
|
|
21
|
+
class EventSubscription {
|
|
22
|
+
public:
|
|
23
|
+
explicit EventSubscription(std::function<void()> remove)
|
|
24
|
+
: remove_(std::move(remove)) {}
|
|
25
|
+
~EventSubscription() = default;
|
|
26
|
+
EventSubscription(EventSubscription&&) noexcept = default;
|
|
27
|
+
EventSubscription& operator=(EventSubscription&&) noexcept = default;
|
|
28
|
+
EventSubscription(const EventSubscription&) = delete;
|
|
29
|
+
EventSubscription& operator=(const EventSubscription&) = delete;
|
|
30
|
+
|
|
31
|
+
private:
|
|
32
|
+
friend Bridging<EventSubscription>;
|
|
33
|
+
|
|
34
|
+
std::function<void()> remove_;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
template <>
|
|
38
|
+
struct Bridging<EventSubscription> {
|
|
39
|
+
static jsi::Object toJs(
|
|
40
|
+
jsi::Runtime& rt,
|
|
41
|
+
const EventSubscription& eventSubscription,
|
|
42
|
+
const std::shared_ptr<CallInvoker>& jsInvoker) {
|
|
43
|
+
auto result = jsi::Object(rt);
|
|
44
|
+
result.setProperty(
|
|
45
|
+
rt, "remove", bridging::toJs(rt, eventSubscription.remove_, jsInvoker));
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
class IAsyncEventEmitter {
|
|
51
|
+
public:
|
|
52
|
+
IAsyncEventEmitter() noexcept = default;
|
|
53
|
+
virtual ~IAsyncEventEmitter() noexcept = default;
|
|
54
|
+
IAsyncEventEmitter(IAsyncEventEmitter&&) noexcept = default;
|
|
55
|
+
IAsyncEventEmitter& operator=(IAsyncEventEmitter&&) noexcept = default;
|
|
56
|
+
IAsyncEventEmitter(const IAsyncEventEmitter&) = delete;
|
|
57
|
+
IAsyncEventEmitter& operator=(const IAsyncEventEmitter&) = delete;
|
|
58
|
+
|
|
59
|
+
virtual jsi::Object get(
|
|
60
|
+
jsi::Runtime& rt,
|
|
61
|
+
const std::shared_ptr<CallInvoker>& jsInvoker) const = 0;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
template <typename... Args>
|
|
65
|
+
class AsyncEventEmitter : public IAsyncEventEmitter {
|
|
66
|
+
static_assert(
|
|
67
|
+
sizeof...(Args) <= 1,
|
|
68
|
+
"AsyncEventEmitter must have at most one argument");
|
|
69
|
+
|
|
70
|
+
public:
|
|
71
|
+
AsyncEventEmitter() : state_(std::make_shared<SharedState>()) {
|
|
72
|
+
listen_ = [state = state_](AsyncCallback<Args...> listener) {
|
|
73
|
+
std::lock_guard<std::mutex> lock(state->mutex);
|
|
74
|
+
auto listenerId = state->listenerId++;
|
|
75
|
+
state->listeners.emplace(listenerId, std::move(listener));
|
|
76
|
+
return EventSubscription([state, listenerId]() {
|
|
77
|
+
std::lock_guard<std::mutex> innerLock(state->mutex);
|
|
78
|
+
state->listeners.erase(listenerId);
|
|
79
|
+
});
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
~AsyncEventEmitter() override = default;
|
|
83
|
+
AsyncEventEmitter(AsyncEventEmitter&&) noexcept = default;
|
|
84
|
+
AsyncEventEmitter& operator=(AsyncEventEmitter&&) noexcept = default;
|
|
85
|
+
AsyncEventEmitter(const AsyncEventEmitter&) = delete;
|
|
86
|
+
AsyncEventEmitter& operator=(const AsyncEventEmitter&) = delete;
|
|
87
|
+
|
|
88
|
+
void emit(std::function<jsi::Value(jsi::Runtime&)>&& converter) {
|
|
89
|
+
std::lock_guard<std::mutex> lock(state_->mutex);
|
|
90
|
+
for (auto& [_, listener] : state_->listeners) {
|
|
91
|
+
listener.call([converter](jsi::Runtime& rt, jsi::Function& jsFunction) {
|
|
92
|
+
jsFunction.call(rt, converter(rt));
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
void emit(Args... value) {
|
|
98
|
+
std::lock_guard<std::mutex> lock(state_->mutex);
|
|
99
|
+
for (const auto& [_, listener] : state_->listeners) {
|
|
100
|
+
listener.call(static_cast<Args>(value)...);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
jsi::Object get(
|
|
105
|
+
jsi::Runtime& rt,
|
|
106
|
+
const std::shared_ptr<CallInvoker>& jsInvoker) const override {
|
|
107
|
+
auto result = jsi::Object(rt);
|
|
108
|
+
result.setProperty(
|
|
109
|
+
rt, "addListener", bridging::toJs(rt, listen_, jsInvoker));
|
|
110
|
+
return result;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
private:
|
|
114
|
+
friend Bridging<AsyncEventEmitter>;
|
|
115
|
+
FRIEND_TEST(BridgingTest, eventEmitterTest);
|
|
116
|
+
|
|
117
|
+
struct SharedState {
|
|
118
|
+
std::mutex mutex;
|
|
119
|
+
std::unordered_map<size_t, AsyncCallback<Args...>> listeners;
|
|
120
|
+
size_t listenerId{};
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
std::function<EventSubscription(AsyncCallback<Args...>)> listen_;
|
|
124
|
+
std::shared_ptr<SharedState> state_;
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
template <typename... Args>
|
|
128
|
+
struct Bridging<AsyncEventEmitter<Args...>> {
|
|
129
|
+
static jsi::Object toJs(
|
|
130
|
+
jsi::Runtime& rt,
|
|
131
|
+
const AsyncEventEmitter<Args...>& eventEmitter,
|
|
132
|
+
const std::shared_ptr<CallInvoker>& jsInvoker) {
|
|
133
|
+
return eventEmitter.get(rt, jsInvoker);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
} // namespace facebook::react
|
|
@@ -0,0 +1,283 @@
|
|
|
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 <Base.h> // [Windows]
|
|
11
|
+
#include <CallbackWrapper.h> // [Windows]
|
|
12
|
+
|
|
13
|
+
#include <ReactCommon/CallInvoker.h>
|
|
14
|
+
#include <ReactCommon/SchedulerPriority.h>
|
|
15
|
+
|
|
16
|
+
namespace facebook::react {
|
|
17
|
+
|
|
18
|
+
template <typename F>
|
|
19
|
+
class SyncCallback;
|
|
20
|
+
|
|
21
|
+
template <typename... Args>
|
|
22
|
+
class AsyncCallback {
|
|
23
|
+
public:
|
|
24
|
+
AsyncCallback(
|
|
25
|
+
jsi::Runtime& runtime,
|
|
26
|
+
jsi::Function function,
|
|
27
|
+
std::shared_ptr<CallInvoker> jsInvoker)
|
|
28
|
+
: callback_(std::make_shared<SyncCallback<void(Args...)>>(
|
|
29
|
+
runtime,
|
|
30
|
+
std::move(function),
|
|
31
|
+
std::move(jsInvoker))) {}
|
|
32
|
+
|
|
33
|
+
void operator()(Args... args) const noexcept {
|
|
34
|
+
call(std::forward<Args>(args)...);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
void call(Args... args) const noexcept {
|
|
38
|
+
callWithArgs(std::nullopt, std::forward<Args>(args)...);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
void callWithPriority(SchedulerPriority priority, Args... args)
|
|
42
|
+
const noexcept {
|
|
43
|
+
callWithArgs(priority, std::forward<Args>(args)...);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
void call(std::function<void(jsi::Runtime&, jsi::Function&)>&& callImpl)
|
|
47
|
+
const noexcept {
|
|
48
|
+
callWithFunction(std::nullopt, std::move(callImpl));
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
void callWithPriority(
|
|
52
|
+
SchedulerPriority priority,
|
|
53
|
+
std::function<void(jsi::Runtime&, jsi::Function&)>&& callImpl)
|
|
54
|
+
const noexcept {
|
|
55
|
+
callWithFunction(priority, std::move(callImpl));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
private:
|
|
59
|
+
friend Bridging<AsyncCallback>;
|
|
60
|
+
|
|
61
|
+
std::shared_ptr<SyncCallback<void(Args...)>> callback_;
|
|
62
|
+
|
|
63
|
+
void callWithArgs(std::optional<SchedulerPriority> priority, Args... args)
|
|
64
|
+
const noexcept {
|
|
65
|
+
if (auto wrapper = callback_->wrapper_.lock()) {
|
|
66
|
+
auto fn = [callback = callback_,
|
|
67
|
+
argsPtr = std::make_shared<std::tuple<Args...>>(
|
|
68
|
+
std::make_tuple(std::forward<Args>(args)...))](
|
|
69
|
+
jsi::Runtime&) { callback->apply(std::move(*argsPtr)); };
|
|
70
|
+
|
|
71
|
+
auto& jsInvoker = wrapper->jsInvoker();
|
|
72
|
+
if (priority) {
|
|
73
|
+
jsInvoker.invokeAsync(*priority, std::move(fn));
|
|
74
|
+
} else {
|
|
75
|
+
jsInvoker.invokeAsync(std::move(fn));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
void callWithFunction(
|
|
81
|
+
std::optional<SchedulerPriority> priority,
|
|
82
|
+
std::function<void(jsi::Runtime&, jsi::Function&)>&& callImpl)
|
|
83
|
+
const noexcept {
|
|
84
|
+
if (auto wrapper = callback_->wrapper_.lock()) {
|
|
85
|
+
// Capture callback_ and not wrapper_. If callback_ is deallocated or the
|
|
86
|
+
// JSVM is shutdown before the async task is scheduled, the underlying
|
|
87
|
+
// function will have been deallocated.
|
|
88
|
+
auto fn = [callback = callback_,
|
|
89
|
+
callImpl = std::move(callImpl)](jsi::Runtime& rt) {
|
|
90
|
+
if (auto wrapper2 = callback->wrapper_.lock()) {
|
|
91
|
+
callImpl(rt, wrapper2->callback());
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
auto& jsInvoker = wrapper->jsInvoker();
|
|
96
|
+
if (priority) {
|
|
97
|
+
jsInvoker.invokeAsync(*priority, std::move(fn));
|
|
98
|
+
} else {
|
|
99
|
+
jsInvoker.invokeAsync(std::move(fn));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
// You must ensure that when invoking this you're located on the JS thread, or
|
|
106
|
+
// have exclusive control of the JS VM context. If you cannot ensure this, use
|
|
107
|
+
// AsyncCallback instead.
|
|
108
|
+
template <typename R, typename... Args>
|
|
109
|
+
class SyncCallback<R(Args...)> {
|
|
110
|
+
public:
|
|
111
|
+
SyncCallback(
|
|
112
|
+
jsi::Runtime& rt,
|
|
113
|
+
jsi::Function function,
|
|
114
|
+
std::shared_ptr<CallInvoker> jsInvoker)
|
|
115
|
+
: wrapper_(CallbackWrapper::createWeak(
|
|
116
|
+
std::move(function),
|
|
117
|
+
rt,
|
|
118
|
+
std::move(jsInvoker))) {}
|
|
119
|
+
|
|
120
|
+
// Disallow copying, as we can no longer safely destroy the callback
|
|
121
|
+
// from the destructor if there's multiple copies
|
|
122
|
+
SyncCallback(const SyncCallback&) = delete;
|
|
123
|
+
SyncCallback& operator=(const SyncCallback&) = delete;
|
|
124
|
+
|
|
125
|
+
// Allow move
|
|
126
|
+
SyncCallback(SyncCallback&& other) noexcept
|
|
127
|
+
: wrapper_(std::move(other.wrapper_)) {}
|
|
128
|
+
|
|
129
|
+
SyncCallback& operator=(SyncCallback&& other) noexcept {
|
|
130
|
+
wrapper_ = std::move(other.wrapper_);
|
|
131
|
+
return *this;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
~SyncCallback() {
|
|
135
|
+
if (auto wrapper = wrapper_.lock()) {
|
|
136
|
+
wrapper->destroy();
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
R operator()(Args... args) const {
|
|
141
|
+
return call(std::forward<Args>(args)...);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
R call(Args... args) const {
|
|
145
|
+
auto wrapper = wrapper_.lock();
|
|
146
|
+
|
|
147
|
+
// If the wrapper has been deallocated, we can no longer provide a return
|
|
148
|
+
// value consistently, so our only option is to throw
|
|
149
|
+
if (!wrapper) {
|
|
150
|
+
if constexpr (std::is_void_v<R>) {
|
|
151
|
+
return;
|
|
152
|
+
} else {
|
|
153
|
+
throw std::runtime_error("Failed to call invalidated sync callback");
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
auto& callback = wrapper->callback();
|
|
158
|
+
auto& rt = wrapper->runtime();
|
|
159
|
+
auto jsInvoker = wrapper->jsInvokerPtr();
|
|
160
|
+
|
|
161
|
+
if constexpr (std::is_void_v<R>) {
|
|
162
|
+
callback.call(
|
|
163
|
+
rt, bridging::toJs(rt, std::forward<Args>(args), jsInvoker)...);
|
|
164
|
+
} else {
|
|
165
|
+
return bridging::fromJs<R>(
|
|
166
|
+
rt,
|
|
167
|
+
callback.call(
|
|
168
|
+
rt, bridging::toJs(rt, std::forward<Args>(args), jsInvoker)...),
|
|
169
|
+
jsInvoker);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
private:
|
|
174
|
+
friend AsyncCallback<Args...>;
|
|
175
|
+
friend Bridging<SyncCallback>;
|
|
176
|
+
|
|
177
|
+
R apply(std::tuple<Args...>&& args) const {
|
|
178
|
+
return apply(std::move(args), std::index_sequence_for<Args...>{});
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
template <size_t... Index>
|
|
182
|
+
R apply(std::tuple<Args...>&& args, std::index_sequence<Index...>) const {
|
|
183
|
+
return call(std::move(std::get<Index>(args))...);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// Held weakly so lifetime is managed by LongLivedObjectCollection.
|
|
187
|
+
std::weak_ptr<CallbackWrapper> wrapper_;
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
template <typename... Args>
|
|
191
|
+
struct Bridging<AsyncCallback<Args...>> {
|
|
192
|
+
static AsyncCallback<Args...> fromJs(
|
|
193
|
+
jsi::Runtime& rt,
|
|
194
|
+
jsi::Function&& value,
|
|
195
|
+
const std::shared_ptr<CallInvoker>& jsInvoker) {
|
|
196
|
+
return AsyncCallback<Args...>(rt, std::move(value), jsInvoker);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
static jsi::Function toJs(
|
|
200
|
+
jsi::Runtime& rt,
|
|
201
|
+
const AsyncCallback<Args...>& value) {
|
|
202
|
+
return value.callback_->function_.getFunction(rt);
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
template <typename R, typename... Args>
|
|
207
|
+
struct Bridging<SyncCallback<R(Args...)>> {
|
|
208
|
+
static SyncCallback<R(Args...)> fromJs(
|
|
209
|
+
jsi::Runtime& rt,
|
|
210
|
+
jsi::Function&& value,
|
|
211
|
+
const std::shared_ptr<CallInvoker>& jsInvoker) {
|
|
212
|
+
return SyncCallback<R(Args...)>(rt, std::move(value), jsInvoker);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
static jsi::Function toJs(
|
|
216
|
+
jsi::Runtime& rt,
|
|
217
|
+
const SyncCallback<R(Args...)>& value) {
|
|
218
|
+
return value.function_.getFunction(rt);
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
template <typename R, typename... Args>
|
|
223
|
+
struct Bridging<std::function<R(Args...)>> {
|
|
224
|
+
using Func = std::function<R(Args...)>;
|
|
225
|
+
using IndexSequence = std::index_sequence_for<Args...>;
|
|
226
|
+
|
|
227
|
+
static constexpr size_t kArgumentCount = sizeof...(Args);
|
|
228
|
+
|
|
229
|
+
static jsi::Function toJs(
|
|
230
|
+
jsi::Runtime& rt,
|
|
231
|
+
Func fn,
|
|
232
|
+
const std::shared_ptr<CallInvoker>& jsInvoker) {
|
|
233
|
+
return jsi::Function::createFromHostFunction(
|
|
234
|
+
rt,
|
|
235
|
+
jsi::PropNameID::forAscii(rt, "BridgedFunction"),
|
|
236
|
+
kArgumentCount,
|
|
237
|
+
[fn = std::make_shared<Func>(std::move(fn)), jsInvoker](
|
|
238
|
+
jsi::Runtime& rt,
|
|
239
|
+
const jsi::Value&,
|
|
240
|
+
const jsi::Value* args,
|
|
241
|
+
size_t count) -> jsi::Value {
|
|
242
|
+
if (count < kArgumentCount) {
|
|
243
|
+
throw jsi::JSError(rt, "Incorrect number of arguments");
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
if constexpr (std::is_void_v<R>) {
|
|
247
|
+
callFromJs(*fn, rt, args, jsInvoker, IndexSequence{});
|
|
248
|
+
return jsi::Value();
|
|
249
|
+
} else {
|
|
250
|
+
return bridging::toJs(
|
|
251
|
+
rt,
|
|
252
|
+
callFromJs(*fn, rt, args, jsInvoker, IndexSequence{}),
|
|
253
|
+
jsInvoker);
|
|
254
|
+
}
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
private:
|
|
259
|
+
template <size_t... Index>
|
|
260
|
+
static R callFromJs(
|
|
261
|
+
Func& fn,
|
|
262
|
+
jsi::Runtime& rt,
|
|
263
|
+
const jsi::Value* args,
|
|
264
|
+
const std::shared_ptr<CallInvoker>& jsInvoker,
|
|
265
|
+
std::index_sequence<Index...>) {
|
|
266
|
+
return fn(bridging::fromJs<Args>(rt, args[Index], jsInvoker)...);
|
|
267
|
+
}
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
template <typename R, typename... Args>
|
|
271
|
+
struct Bridging<
|
|
272
|
+
std::function<R(Args...)>,
|
|
273
|
+
std::enable_if_t<
|
|
274
|
+
!std::is_same_v<std::function<R(Args...)>, std::function<R(Args...)>>>>
|
|
275
|
+
: Bridging<std::function<R(Args...)>> {};
|
|
276
|
+
|
|
277
|
+
template <typename R, typename... Args>
|
|
278
|
+
struct Bridging<R(Args...)> : Bridging<std::function<R(Args...)>> {};
|
|
279
|
+
|
|
280
|
+
template <typename R, typename... Args>
|
|
281
|
+
struct Bridging<R (*)(Args...)> : Bridging<std::function<R(Args...)>> {};
|
|
282
|
+
|
|
283
|
+
} // namespace facebook::react
|
package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModule.cpp
CHANGED
|
@@ -40,25 +40,22 @@ TurboModule::TurboModule(
|
|
|
40
40
|
: name_(std::move(name)), jsInvoker_(std::move(jsInvoker)) {}
|
|
41
41
|
|
|
42
42
|
void TurboModule::emitDeviceEvent(
|
|
43
|
-
jsi::Runtime& runtime,
|
|
44
43
|
const std::string& eventName,
|
|
45
44
|
ArgFactory argFactory) {
|
|
46
|
-
jsInvoker_->invokeAsync([
|
|
47
|
-
jsi::Value emitter =
|
|
48
|
-
runtime.global().getProperty(runtime, "__rctDeviceEventEmitter");
|
|
45
|
+
jsInvoker_->invokeAsync([eventName, argFactory](jsi::Runtime& rt) {
|
|
46
|
+
jsi::Value emitter = rt.global().getProperty(rt, "__rctDeviceEventEmitter");
|
|
49
47
|
if (!emitter.isUndefined()) {
|
|
50
|
-
jsi::Object emitterObject = emitter.asObject(
|
|
48
|
+
jsi::Object emitterObject = emitter.asObject(rt);
|
|
51
49
|
// TODO: consider caching these
|
|
52
50
|
jsi::Function emitFunction =
|
|
53
|
-
emitterObject.getPropertyAsFunction(
|
|
51
|
+
emitterObject.getPropertyAsFunction(rt, "emit");
|
|
54
52
|
std::vector<jsi::Value> args;
|
|
55
|
-
args.emplace_back(
|
|
56
|
-
jsi::String::createFromAscii(runtime, eventName.c_str()));
|
|
53
|
+
args.emplace_back(jsi::String::createFromAscii(rt, eventName.c_str()));
|
|
57
54
|
if (argFactory) {
|
|
58
|
-
argFactory(
|
|
55
|
+
argFactory(rt, args);
|
|
59
56
|
}
|
|
60
57
|
emitFunction.callWithThis(
|
|
61
|
-
|
|
58
|
+
rt, emitterObject, (const jsi::Value*)args.data(), args.size());
|
|
62
59
|
}
|
|
63
60
|
});
|
|
64
61
|
}
|