react-native-windows 0.81.1 → 0.82.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 +11 -10
- package/Directory.Build.props +3 -3
- package/Folly/Folly.vcxproj +1 -3
- package/Libraries/ActionSheetIOS/ActionSheetIOS.js +7 -3
- package/Libraries/Alert/RCTAlertManager.android.js +4 -2
- package/Libraries/Animated/Animated.d.ts +2 -0
- package/Libraries/Animated/AnimatedEvent.js +1 -1
- package/Libraries/Animated/AnimatedExports.js.flow +1 -0
- package/Libraries/Animated/AnimatedImplementation.js +4 -2
- package/Libraries/Animated/AnimatedMock.js +1 -1
- package/Libraries/Animated/Easing.js +2 -0
- package/Libraries/Animated/NativeAnimatedAllowlist.js +1 -0
- package/Libraries/Animated/animations/Animation.js +19 -20
- package/Libraries/Animated/animations/TimingAnimation.js +2 -0
- package/Libraries/Animated/components/AnimatedScrollView.js +3 -2
- package/Libraries/Animated/components/AnimatedSectionList.js +1 -1
- package/Libraries/Animated/nodes/AnimatedColor.js +9 -9
- package/Libraries/Animated/nodes/AnimatedInterpolation.js +4 -4
- package/Libraries/Animated/nodes/AnimatedNode.js +14 -7
- package/Libraries/Animated/nodes/AnimatedObject.js +7 -7
- package/Libraries/Animated/nodes/AnimatedProps.js +32 -32
- package/Libraries/Animated/nodes/AnimatedStyle.js +23 -21
- package/Libraries/Animated/nodes/AnimatedTransform.js +6 -6
- package/Libraries/Animated/nodes/AnimatedValue.js +18 -18
- package/Libraries/AppState/AppState.js +8 -4
- package/Libraries/BatchedBridge/MessageQueue.js +4 -0
- package/Libraries/BatchedBridge/NativeModules.js +1 -1
- package/Libraries/Blob/BlobManager.js +1 -1
- package/Libraries/Blob/URLSearchParams.js +2 -0
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +2 -2
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.windows.js +2 -2
- package/Libraries/Components/Button.js +1 -1
- package/Libraries/Components/Button.windows.js +1 -1
- package/Libraries/Components/Flyout/FlyoutNativeComponent.js +2 -2
- package/Libraries/Components/Glyph/GlyphNativeComponent.js +1 -1
- package/Libraries/Components/Popup/PopupNativeComponent.js +1 -0
- package/Libraries/Components/Pressable/Pressable.d.ts +8 -0
- package/Libraries/Components/Pressable/Pressable.js +10 -1
- package/Libraries/Components/Pressable/Pressable.windows.js +30 -2
- package/Libraries/Components/Pressable/useAndroidRippleForView.js +2 -2
- package/Libraries/Components/ScrollView/ScrollView.js +13 -4
- package/Libraries/Components/ScrollView/ScrollView.windows.js +14 -5
- package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +1 -1
- package/Libraries/Components/StatusBar/StatusBar.js +2 -2
- package/Libraries/Components/Switch/Switch.js +2 -2
- package/Libraries/Components/Switch/Switch.windows.js +2 -2
- package/Libraries/Components/TextInput/TextInput.flow.js +12 -5
- package/Libraries/Components/TextInput/TextInput.flow.windows.js +12 -5
- package/Libraries/Components/TextInput/TextInput.js +14 -5
- package/Libraries/Components/TextInput/TextInput.windows.js +23 -11
- package/Libraries/Components/TextInput/TextInputState.js +1 -1
- package/Libraries/Components/TextInput/TextInputState.windows.js +1 -1
- package/Libraries/Components/Touchable/TouchableBounce.js +1 -1
- package/Libraries/Components/Touchable/TouchableHighlight.js +1 -1
- package/Libraries/Components/Touchable/TouchableNativeFeedback.js +1 -1
- package/Libraries/Components/Touchable/TouchableOpacity.js +1 -1
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +3 -3
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.windows.js +1 -1
- package/Libraries/Components/View/View.js +81 -167
- package/Libraries/Components/View/View.windows.js +202 -302
- package/Libraries/Core/Devtools/loadBundleFromServer.js +1 -1
- package/Libraries/Core/Devtools/loadBundleFromServer.windows.js +1 -1
- package/Libraries/Core/ExceptionsManager.js +4 -2
- package/Libraries/Core/ReactFiberErrorDialog.js +3 -3
- package/Libraries/Core/ReactNativeVersion.js +37 -10
- package/Libraries/Core/Timers/JSTimers.js +3 -1
- package/Libraries/Core/Timers/immediateShim.js +1 -1
- package/Libraries/Core/Timers/queueMicrotask.js +1 -0
- package/Libraries/Core/setUpPerformance.js +2 -1
- package/Libraries/Debugging/DebuggingOverlayRegistry.js +5 -3
- package/Libraries/Image/AssetSourceResolver.windows.js +2 -2
- package/Libraries/Image/Image.android.js +327 -111
- package/Libraries/Image/Image.ios.js +6 -1
- package/Libraries/Image/Image.windows.js +28 -61
- package/Libraries/Image/ImageSourceUtils.js +8 -2
- package/Libraries/Image/resolveAssetSource.js +1 -1
- package/Libraries/Image/resolveAssetSource.windows.js +1 -1
- package/Libraries/Interaction/InteractionManager.js +118 -167
- package/Libraries/Interaction/PanResponder.js +1 -1
- package/Libraries/LayoutAnimation/LayoutAnimation.js +2 -0
- package/Libraries/Lists/FlatList.js +5 -6
- package/Libraries/LogBox/Data/LogBoxData.js +5 -2
- package/Libraries/LogBox/Data/parseLogBoxLog.js +1 -1
- package/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.js +1 -1
- package/Libraries/Modal/Modal.js +3 -3
- package/Libraries/Modal/Modal.windows.js +2 -2
- package/Libraries/NativeComponent/NativeComponentRegistry.js +1 -1
- package/Libraries/NativeComponent/ViewConfig.js +2 -2
- package/Libraries/Network/RCTNetworking.android.js +1 -1
- package/Libraries/Network/RCTNetworking.ios.js +1 -1
- package/Libraries/Network/RCTNetworking.windows.js +1 -1
- package/Libraries/Network/XMLHttpRequest.js +20 -5
- package/Libraries/Network/convertRequestBody.js +1 -1
- package/Libraries/PermissionsAndroid/PermissionsAndroid.js +10 -9
- package/Libraries/Pressability/HoverState.js +2 -0
- package/Libraries/Pressability/Pressability.js +1 -1
- package/Libraries/Pressability/Pressability.windows.js +5 -5
- package/Libraries/PushNotificationIOS/PushNotificationIOS.js +2 -2
- package/Libraries/ReactNative/AppRegistryImpl.js +4 -2
- package/Libraries/ReactNative/PaperUIManager.windows.js +4 -4
- package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +2 -0
- package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance.js +3 -3
- package/Libraries/ReactNative/RendererImplementation.js +116 -116
- package/Libraries/ReactNative/UIManager.js +3 -3
- package/Libraries/ReactNative/renderApplication.js +1 -0
- package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +1 -1
- package/Libraries/Renderer/implementations/ReactFabric-dev.js +38 -35
- package/Libraries/Renderer/implementations/ReactFabric-prod.js +51 -22
- package/Libraries/Renderer/implementations/ReactFabric-profiling.js +54 -24
- package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +36 -33
- package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +5 -5
- package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +5 -5
- package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +3 -1
- package/Libraries/Share/Share.js +4 -0
- package/Libraries/StyleSheet/PlatformColorValueTypes.android.js +2 -2
- package/Libraries/StyleSheet/PlatformColorValueTypes.ios.js +2 -2
- package/Libraries/StyleSheet/PlatformColorValueTypes.windows.js +2 -0
- package/Libraries/StyleSheet/StyleSheet.d.ts +7 -22
- package/Libraries/StyleSheet/StyleSheetExports.js +2 -8
- package/Libraries/StyleSheet/StyleSheetExports.js.flow +11 -18
- package/Libraries/StyleSheet/flattenStyle.js +2 -2
- package/Libraries/StyleSheet/processAspectRatio.js +2 -0
- package/Libraries/StyleSheet/processFilter.js +5 -5
- package/Libraries/StyleSheet/splitLayoutProps.js +2 -2
- package/Libraries/Text/Text.js +534 -234
- package/Libraries/Text/Text.windows.js +622 -265
- package/Libraries/Text/TextNativeComponent.js +2 -2
- package/Libraries/Utilities/Appearance.d.ts +3 -5
- package/Libraries/Utilities/Appearance.js +5 -17
- package/Libraries/Utilities/HMRClient.js +2 -1
- package/Libraries/Utilities/Platform.android.js +3 -3
- package/Libraries/Utilities/Platform.d.ts +1 -0
- package/Libraries/Utilities/Platform.ios.js +1 -1
- package/Libraries/Utilities/Platform.windows.js +3 -3
- package/Libraries/Utilities/PlatformTypes.js +1 -1
- package/Libraries/Utilities/ReactNativeTestTools.js +12 -0
- package/Libraries/Utilities/SceneTracker.js +1 -1
- package/Libraries/Utilities/codegenNativeCommands.js +1 -1
- package/Libraries/Utilities/codegenNativeComponent.js +1 -1
- package/Libraries/Utilities/createPerformanceLogger.js +32 -0
- package/Libraries/Utilities/deepFreezeAndThrowOnMutationInDev.js +2 -0
- package/Libraries/Utilities/differ/pointsDiffer.js +1 -1
- package/Libraries/Utilities/useMergeRefs.js +1 -1
- package/Libraries/WebSocket/WebSocketInterceptor.js +2 -0
- package/Libraries/promiseRejectionTrackingOptions.js +17 -31
- package/Libraries/vendor/emitter/EventEmitter.js +1 -1
- package/Microsoft.ReactNative/App.xaml +5 -0
- package/Microsoft.ReactNative/Base/CxxReactIncludes.h +0 -3
- package/Microsoft.ReactNative/CompositionContext.idl +0 -2
- package/Microsoft.ReactNative/Fabric/AbiViewProps.cpp +2 -2
- package/Microsoft.ReactNative/Fabric/AbiViewProps.h +0 -2
- package/Microsoft.ReactNative/Fabric/ComponentView.cpp +26 -0
- package/Microsoft.ReactNative/Fabric/ComponentView.h +2 -0
- package/Microsoft.ReactNative/Fabric/Composition/ActivityIndicatorComponentView.cpp +0 -1
- package/Microsoft.ReactNative/Fabric/Composition/Composition.Input.cpp +0 -69
- package/Microsoft.ReactNative/Fabric/Composition/Composition.Input.h +1 -15
- package/Microsoft.ReactNative/Fabric/Composition/CompositionAnnotationProvider.cpp +2 -5
- package/Microsoft.ReactNative/Fabric/Composition/CompositionAnnotationProvider.h +1 -4
- package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper.cpp +0 -31
- package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper.h +0 -10
- package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper_emptyimpl.cpp +0 -4
- package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +65 -32
- package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.h +9 -0
- package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +8 -6
- package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.h +0 -2
- package/Microsoft.ReactNative/Fabric/Composition/CompositionHelpers.h +0 -2
- package/Microsoft.ReactNative/Fabric/Composition/CompositionHwndHost.cpp +0 -9
- package/Microsoft.ReactNative/Fabric/Composition/CompositionRootAutomationProvider.cpp +2 -11
- package/Microsoft.ReactNative/Fabric/Composition/CompositionRootAutomationProvider.h +0 -4
- package/Microsoft.ReactNative/Fabric/Composition/CompositionTextProvider.cpp +4 -7
- package/Microsoft.ReactNative/Fabric/Composition/CompositionTextProvider.h +1 -5
- package/Microsoft.ReactNative/Fabric/Composition/CompositionTextRangeProvider.cpp +68 -53
- package/Microsoft.ReactNative/Fabric/Composition/CompositionTextRangeProvider.h +1 -5
- package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +20 -18
- package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.h +10 -3
- package/Microsoft.ReactNative/Fabric/Composition/ContentIslandComponentView.cpp +30 -9
- package/Microsoft.ReactNative/Fabric/Composition/ContentIslandComponentView.h +4 -1
- package/Microsoft.ReactNative/Fabric/Composition/DebuggingOverlayComponentView.cpp +3 -2
- package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.cpp +0 -2
- package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.h +0 -1
- package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.cpp +550 -4
- package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.h +52 -0
- package/Microsoft.ReactNative/Fabric/Composition/ReactCompositionViewComponentBuilder.cpp +16 -0
- package/Microsoft.ReactNative/Fabric/Composition/ReactCompositionViewComponentBuilder.h +6 -0
- package/Microsoft.ReactNative/Fabric/Composition/ReactNativeIsland.cpp +0 -6
- package/Microsoft.ReactNative/Fabric/Composition/ReactNativeIsland.h +0 -2
- package/Microsoft.ReactNative/Fabric/Composition/RootComponentView.cpp +53 -2
- package/Microsoft.ReactNative/Fabric/Composition/RootComponentView.h +8 -1
- package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +0 -2
- package/Microsoft.ReactNative/Fabric/Composition/SwitchComponentView.cpp +0 -1
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +5 -2
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputShadowNode.cpp +4 -1
- package/Microsoft.ReactNative/Fabric/Composition/Theme.cpp +6 -30
- package/Microsoft.ReactNative/Fabric/Composition/Theme.h +1 -3
- package/Microsoft.ReactNative/Fabric/Composition/TooltipService.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +36 -14
- package/Microsoft.ReactNative/Fabric/Composition/UnimplementedNativeViewComponentView.cpp +0 -1
- package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +0 -1
- package/Microsoft.ReactNative/Fabric/ImageManager.cpp +0 -4
- package/Microsoft.ReactNative/Fabric/ReactTaggedView.h +1 -1
- package/Microsoft.ReactNative/Fabric/WindowsComponentDescriptorRegistry.cpp +8 -0
- package/Microsoft.ReactNative/Fabric/WindowsComponentDescriptorRegistry.h +3 -0
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/PlatformColorUtils.cpp +0 -11
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/WindowsTextLayoutManager.h +2 -1
- package/Microsoft.ReactNative/IReactContext.cpp +2 -25
- package/Microsoft.ReactNative/IReactContext.h +0 -7
- package/Microsoft.ReactNative/IReactContext.idl +4 -29
- package/Microsoft.ReactNative/IReactModuleBuilder.cpp +24 -140
- package/Microsoft.ReactNative/IReactModuleBuilder.h +0 -11
- package/Microsoft.ReactNative/IReactPackageBuilder.idl +1 -16
- package/Microsoft.ReactNative/IReactPackageProvider.idl +0 -1
- package/Microsoft.ReactNative/IReactViewComponentBuilder.idl +10 -0
- package/Microsoft.ReactNative/JsiApi.cpp +4 -3
- package/Microsoft.ReactNative/JsiApi.h +2 -3
- package/Microsoft.ReactNative/JsiApi.idl +3 -2
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +6 -214
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +0 -252
- package/Microsoft.ReactNative/Modules/AccessibilityInfoModule.cpp +0 -37
- package/Microsoft.ReactNative/Modules/AlertModule.cpp +2 -140
- package/Microsoft.ReactNative/Modules/AlertModule.h +0 -2
- package/Microsoft.ReactNative/Modules/Animated/NativeAnimatedNodeManager.cpp +5 -10
- package/Microsoft.ReactNative/Modules/Animated/NativeAnimatedNodeManager.h +0 -1
- package/Microsoft.ReactNative/Modules/Animated/PropsAnimatedNode.cpp +1 -96
- package/Microsoft.ReactNative/Modules/Animated/PropsAnimatedNode.h +0 -14
- package/Microsoft.ReactNative/Modules/AppStateModule.cpp +0 -53
- package/Microsoft.ReactNative/Modules/AppStateModule.h +0 -5
- package/Microsoft.ReactNative/Modules/AppThemeModuleUwp.cpp +5 -14
- package/Microsoft.ReactNative/Modules/AppThemeModuleUwp.h +0 -2
- package/Microsoft.ReactNative/Modules/AppearanceModule.cpp +1 -9
- package/Microsoft.ReactNative/Modules/DevSettingsModule.cpp +0 -4
- package/Microsoft.ReactNative/Modules/DevSettingsModule.h +0 -2
- package/Microsoft.ReactNative/Modules/DeviceInfoModule.cpp +16 -90
- package/Microsoft.ReactNative/Modules/I18nManagerModule.cpp +3 -8
- package/Microsoft.ReactNative/Modules/ImageViewManagerModule.cpp +11 -48
- package/Microsoft.ReactNative/Modules/LinkingManagerModule.cpp +0 -3
- package/Microsoft.ReactNative/Modules/LogBoxModule.cpp +30 -102
- package/Microsoft.ReactNative/Modules/LogBoxModule.h +0 -7
- package/Microsoft.ReactNative/Modules/Timing.cpp +7 -9
- package/Microsoft.ReactNative/Pch/pch.h +0 -28
- package/Microsoft.ReactNative/ReactCoreInjection.h +0 -1
- package/Microsoft.ReactNative/ReactHost/IReactInstance.h +0 -8
- package/Microsoft.ReactNative/ReactHost/MsoReactContext.cpp +0 -15
- package/Microsoft.ReactNative/ReactHost/MsoReactContext.h +0 -2
- package/Microsoft.ReactNative/ReactHost/React.h +0 -44
- package/Microsoft.ReactNative/ReactHost/ReactHost.cpp +10 -47
- package/Microsoft.ReactNative/ReactHost/ReactHost.h +1 -1
- package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp +30 -586
- package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.h +2 -37
- package/Microsoft.ReactNative/ReactHost/ReactNativeHeaders.h +0 -13
- package/Microsoft.ReactNative/ReactHost/React_Win.h +0 -1
- package/Microsoft.ReactNative/ReactInstanceSettings.cpp +0 -8
- package/Microsoft.ReactNative/ReactInstanceSettings.h +0 -13
- package/Microsoft.ReactNative/ReactInstanceSettings.idl +7 -23
- package/Microsoft.ReactNative/ReactNativeHost.cpp +10 -35
- package/Microsoft.ReactNative/ReactNativeHost.h +0 -1
- package/Microsoft.ReactNative/ReactNativeIsland.idl +0 -4
- package/Microsoft.ReactNative/ReactPackageBuilder.cpp +9 -36
- package/Microsoft.ReactNative/ReactPackageBuilder.h +4 -38
- package/Microsoft.ReactNative/RedBox.cpp +9 -362
- package/Microsoft.ReactNative/Theme.idl +0 -2
- package/Microsoft.ReactNative/Timer.cpp +3 -2
- package/Microsoft.ReactNative/Utils/Helpers.cpp +0 -47
- package/Microsoft.ReactNative/Utils/Helpers.h +0 -5
- package/Microsoft.ReactNative/Utils/IcuUtils.cpp +84 -0
- package/Microsoft.ReactNative/Utils/IcuUtils.h +42 -0
- package/Microsoft.ReactNative/Utils/KeyboardUtils.cpp +0 -11
- package/Microsoft.ReactNative/Utils/ThemeUtils.cpp +0 -4
- package/Microsoft.ReactNative/Utils/ThemeUtils.h +1 -5
- package/Microsoft.ReactNative/Utils/UwpPreparedScriptStore.h +0 -2
- package/Microsoft.ReactNative/Utils/ValueUtils.cpp +0 -245
- package/Microsoft.ReactNative/Utils/ValueUtils.h +0 -23
- package/Microsoft.ReactNative/ViewProps.idl +0 -2
- package/Microsoft.ReactNative/Views/DevMenu.cpp +2 -278
- package/Microsoft.ReactNative/Views/DevMenu.h +0 -5
- package/Microsoft.ReactNative/XamlApplication.cpp +71 -0
- package/Microsoft.ReactNative/XamlApplication.h +47 -0
- package/Microsoft.ReactNative/XamlApplication.idl +19 -0
- package/Microsoft.ReactNative/XamlUIService.cpp +0 -54
- package/Microsoft.ReactNative/XamlUIService.h +0 -12
- package/Microsoft.ReactNative/XamlUIService.idl +0 -12
- package/Microsoft.ReactNative.Cxx/CppWinRTIncludes.h +0 -19
- package/Microsoft.ReactNative.Cxx/DesktopWindowBridge.h +1 -1
- package/Microsoft.ReactNative.Cxx/JSI/decorator.h +191 -114
- package/Microsoft.ReactNative.Cxx/JSI/instrumentation.h +5 -0
- package/Microsoft.ReactNative.Cxx/JSI/jsi-inl.h +37 -0
- package/Microsoft.ReactNative.Cxx/JSI/jsi.cpp +68 -0
- package/Microsoft.ReactNative.Cxx/JSI/jsi.h +77 -11
- package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems +2 -2
- package/Microsoft.ReactNative.Cxx/NamespaceRedirect.h +0 -5
- package/Microsoft.ReactNative.Cxx/NodeApiJsiRuntime.cpp +93 -1
- package/Microsoft.ReactNative.Cxx/ReactCommon/TurboModule.cpp +4 -3
- package/Microsoft.ReactNative.Cxx/ReactCommon/TurboModule.h +2 -2
- package/Microsoft.ReactNative.Cxx/ReactCommon/TurboModuleUtils.cpp +2 -55
- package/Microsoft.ReactNative.Cxx/ReactCommon/TurboModuleUtils.h +4 -8
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Class.h +5 -0
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/timing/primitives.h +32 -4
- package/Microsoft.ReactNative.Cxx/ReactContext.h +0 -13
- package/Microsoft.ReactNative.Cxx/StructInfo.h +8 -1
- package/Microsoft.ReactNative.Cxx/UI.Composition.Effects.h +0 -4
- package/Microsoft.ReactNative.Cxx/UI.Composition.h +0 -4
- package/Microsoft.ReactNative.Cxx/UI.Input.h +0 -4
- package/Microsoft.ReactNative.Cxx/UI.Popups.h +0 -4
- package/Microsoft.ReactNative.Cxx/UI.Text.h +0 -4
- package/Microsoft.ReactNative.Cxx/XamlUtils.h +0 -33
- package/Microsoft.ReactNative.Managed/JSValueReader.cs +0 -4
- package/Microsoft.ReactNative.Managed/Microsoft.ReactNative.Managed.csproj +0 -3
- package/Microsoft.ReactNative.Managed/ReactContext.cs +0 -5
- package/Microsoft.ReactNative.Managed/ReactContextGenerator.cs +0 -4
- package/Microsoft.ReactNative.Managed/ReactPackageBuilderExtensions.cs +0 -25
- package/Microsoft.ReactNative.Managed/ReactSettingsSnapshot.cs +0 -4
- package/Microsoft.ReactNative.Managed/ReflectionReactPackageProvider.cs +1 -2
- package/Microsoft.ReactNative.Managed.CodeGen/CodeAnalyzer.cs +0 -10
- package/Microsoft.ReactNative.Managed.CodeGen/CodeGenerator.ViewManager.cs +0 -36
- package/Microsoft.ReactNative.Managed.CodeGen/CodeGenerator.cs +0 -6
- package/Microsoft.ReactNative.Managed.CodeGen/Model/ReactAssembly.cs +0 -2
- package/Microsoft.ReactNative.Managed.CodeGen/Model/ReactTypes.cs +0 -2
- package/Microsoft.ReactNative.Managed.CodeGen/ReactNativeNames.cs +0 -2
- package/Mso/src/dispatchQueue/queueService.cpp +3 -1
- package/Mso/src/dispatchQueue/uiScheduler_winrt.cpp +2 -10
- package/PropertySheets/Bundle.Common.targets +1 -1
- package/PropertySheets/Bundle.props +3 -4
- package/PropertySheets/External/Microsoft.ReactNative.Common.props +0 -1
- package/PropertySheets/External/Microsoft.ReactNative.Uwp.CSharpApp.targets +1 -1
- package/PropertySheets/External/Microsoft.ReactNative.Uwp.CppApp.targets +1 -1
- package/PropertySheets/Generated/PackageVersion.g.props +4 -4
- package/PropertySheets/JSEngine.props +1 -1
- package/PropertySheets/NuGet.LockFile.props +0 -8
- package/PropertySheets/OutputMSBuildProperties.targets +0 -1
- package/PropertySheets/React.Cpp.props +3 -5
- package/PropertySheets/WinUI.props +3 -3
- package/README.md +1 -5
- package/ReactCommon/ReactCommon.vcxproj +12 -31
- package/ReactCommon/ReactCommon.vcxproj.filters +0 -3
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/CxxNativeModule.cpp +3 -2
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/NativeToJsBridge.cpp +5 -2
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/TraceSection.h +20 -4
- package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/test/testlib.cpp +113 -1
- package/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/NetworkIOAgent.cpp +14 -6
- package/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/Utf8.h +1 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/jsinspector-modern/tracing/RuntimeSamplingProfileTraceEventSerializer.cpp +351 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModule.h +2 -2
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/dom/NativeDOM.cpp +42 -36
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/dom/NativeDOM.h +15 -3
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp +1 -1
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/image/conversions.h +174 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/text/ParagraphShadowNode.cpp +1 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/AccessibilityPrimitives.h +26 -3
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/conversions.h +1 -1
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/core/ShadowNode.cpp +1 -1
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/imagemanager/primitives.h +189 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/reactperflogger/reactperflogger/ReactPerfettoLogger.cpp +27 -8
- package/ReactCommon/cgmanifest.json +1 -1
- package/Scripts/Microsoft.ReactNative.nuspec +15 -33
- package/Scripts/NuGetRestoreForceEvaluateAllSolutions.ps1 +23 -23
- package/Scripts/OfficeReact.Win32.nuspec +0 -3
- package/Scripts/creaternwapp.cmd +1 -1
- package/Shared/DevServerHelper.h +17 -21
- package/Shared/DevSettings.h +1 -25
- package/Shared/DevSupportManager.cpp +0 -50
- package/Shared/DevSupportManager.h +0 -4
- package/Shared/Hermes/HermesRuntimeTargetDelegate.cpp +5 -1
- package/Shared/HermesRuntimeHolder.cpp +0 -31
- package/Shared/HermesRuntimeHolder.h +0 -14
- package/Shared/IDevSupportManager.h +0 -6
- package/Shared/InstanceManager.cpp +0 -97
- package/Shared/InstanceManager.h +0 -53
- package/Shared/JSI/ScriptStore.h +1 -1
- package/Shared/Logging.cpp +1 -12
- package/Shared/Modules/CxxModuleUtilities.cpp +0 -9
- package/Shared/Modules/CxxModuleUtilities.h +0 -8
- package/Shared/Networking/OriginPolicyHttpFilter.cpp +9 -1
- package/Shared/OInstance.cpp +144 -424
- package/Shared/OInstance.h +0 -81
- package/Shared/Shared.vcxitems +83 -203
- package/Shared/Shared.vcxitems.filters +8 -67
- package/Shared/Threading/MessageQueueThreadFactory.cpp +0 -6
- package/Shared/Threading/MessageQueueThreadFactory.h +0 -4
- package/Shared/TurboModuleManager.cpp +0 -4
- package/Shared/Utils.cpp +26 -0
- package/Shared/Utils.h +3 -0
- package/codegen/NativeDOMSpec.g.h +41 -35
- package/codegen/NativeIntersectionObserverSpec.g.h +9 -21
- package/codegen/NativePerformanceSpec.g.h +47 -35
- package/codegen/NativeReactNativeFeatureFlagsSpec.g.h +177 -129
- package/codegen/react/components/rnwcore/ActivityIndicatorView.g.h +14 -0
- package/codegen/react/components/rnwcore/AndroidDrawerLayout.g.h +14 -0
- package/codegen/react/components/rnwcore/AndroidHorizontalScrollContentView.g.h +14 -0
- package/codegen/react/components/rnwcore/AndroidProgressBar.g.h +14 -0
- package/codegen/react/components/rnwcore/AndroidSwipeRefreshLayout.g.h +14 -0
- package/codegen/react/components/rnwcore/AndroidSwitch.g.h +14 -0
- package/codegen/react/components/rnwcore/DebuggingOverlay.g.h +14 -0
- package/codegen/react/components/rnwcore/EventEmitters.cpp +25 -0
- package/codegen/react/components/rnwcore/EventEmitters.h +25 -0
- package/codegen/react/components/rnwcore/InputAccessory.g.h +14 -0
- package/codegen/react/components/rnwcore/ModalHostView.g.h +14 -0
- package/codegen/react/components/rnwcore/Props.cpp +41 -2
- package/codegen/react/components/rnwcore/Props.h +51 -2
- package/codegen/react/components/rnwcore/PullToRefreshView.g.h +14 -0
- package/codegen/react/components/rnwcore/SafeAreaView.g.h +14 -0
- package/codegen/react/components/rnwcore/Switch.g.h +14 -0
- package/codegen/react/components/rnwcore/UnimplementedNativeView.g.h +14 -0
- package/codegen/react/components/rnwcore/VirtualView.g.h +18 -0
- package/codegen/react/components/rnwcore/VirtualViewExperimental.g.h +240 -0
- package/codegen/rnwcoreJSI-generated.cpp +106 -51
- package/codegen/rnwcoreJSI.h +148 -67
- package/fmt/cgmanifest.json +1 -1
- package/fmt/fmt.vcxproj +0 -8
- package/index.js +8 -2
- package/index.windows.js +8 -2
- package/jest/local-setup.js +2 -2
- package/jest/mock.js +1 -1
- package/jest/mockComponent.js +9 -9
- package/jest/mockNativeComponent.js +3 -2
- package/jest/mocks/Modal.js +1 -1
- package/jest/mocks/ScrollView.js +1 -1
- package/jest/mocks/ViewNativeComponent.js +1 -1
- package/jest/setup.js +23 -12
- package/just-task.js +14 -0
- package/package.json +31 -32
- package/src/private/animated/NativeAnimatedHelper.js +16 -5
- package/src/private/animated/createAnimatedPropsHook.js +11 -60
- package/src/private/animated/createAnimatedPropsMemoHook.js +8 -54
- package/src/private/components/virtualview/VirtualView.js +43 -12
- package/src/private/components/virtualview/VirtualViewExperimentalNativeComponent.js +93 -0
- package/src/private/components/virtualview/VirtualViewNativeComponent.js +6 -0
- package/src/private/devsupport/devmenu/elementinspector/Inspector.js +2 -2
- package/src/private/devsupport/devmenu/elementinspector/ReactDevToolsOverlay.js +2 -2
- package/src/private/featureflags/ReactNativeFeatureFlags.js +80 -52
- package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +23 -4
- package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +14 -6
- package/src/private/renderer/errorhandling/ErrorHandlers.js +3 -3
- package/src/private/specs_DEPRECATED/components/SwitchNativeComponent.js +0 -1
- package/src/private/types/HostInstance.js +4 -1
- package/src/private/webapis/dom/nodes/ReactNativeDocument.js +22 -2
- package/src/private/webapis/dom/nodes/ReactNativeElement.js +1 -1
- package/src/private/webapis/dom/nodes/ReadOnlyElement.js +5 -3
- package/src/private/webapis/dom/nodes/ReadOnlyNode.js +16 -13
- package/src/private/webapis/dom/nodes/internals/NodeInternals.js +45 -22
- package/src/private/webapis/dom/nodes/internals/ReactNativeDocumentInstanceHandle.js +1 -1
- package/src/private/webapis/dom/nodes/specs/NativeDOM.js +26 -192
- package/src/private/webapis/dom/oldstylecollections/HTMLCollection.js +15 -12
- package/src/private/webapis/dom/oldstylecollections/NodeList.js +14 -11
- package/src/private/webapis/geometry/DOMRectList.js +2 -2
- package/src/private/webapis/intersectionobserver/internals/IntersectionObserverManager.js +19 -74
- package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +0 -4
- package/src/private/webapis/mutationobserver/internals/MutationObserverManager.js +1 -1
- package/src/private/webapis/performance/EventTiming.js +6 -10
- package/src/private/webapis/performance/Performance.js +309 -164
- package/src/private/webapis/performance/PerformanceEntry.js +20 -16
- package/src/private/webapis/performance/PerformanceObserver.js +8 -29
- package/src/private/webapis/performance/UserTiming.js +71 -18
- package/src/private/webapis/performance/UserTimingExtensibility.js.flow +38 -0
- package/src/private/webapis/performance/internals/Utilities.js +9 -0
- package/src/private/webapis/performance/specs/NativePerformance.js +21 -23
- package/src/private/webapis/structuredClone/structuredClone.js +10 -10
- package/stubs/double-conversion/README.md +1 -1
- package/template/cpp-lib/proj/MyLib.sln +0 -5
- package/template/cpp-lib/src/pch.h +0 -5
- package/template/cs-lib/proj/MyLib.sln +0 -5
- package/template/metro.config.js +1 -0
- package/templates/cpp-app/metro.config.js +2 -1
- package/templates/cpp-app/windows/MyApp.sln +0 -5
- package/templates/cpp-lib/example/metro.config.js +3 -4
- package/templates/cpp-lib/windows/MyLib.sln +0 -5
- package/Chakra/Chakra.vcxitems +0 -32
- package/Chakra/Chakra.vcxitems.filters +0 -54
- package/Chakra/ChakraHelpers.cpp +0 -468
- package/Chakra/ChakraHelpers.h +0 -146
- package/Chakra/ChakraInstanceArgs.h +0 -52
- package/Chakra/ChakraPlatform.cpp +0 -42
- package/Chakra/ChakraPlatform.h +0 -51
- package/Chakra/ChakraTracing.cpp +0 -275
- package/Chakra/ChakraTracing.h +0 -11
- package/Chakra/ChakraUtils.cpp +0 -190
- package/Chakra/ChakraUtils.h +0 -72
- package/Chakra/ChakraValue.cpp +0 -257
- package/Chakra/ChakraValue.h +0 -308
- package/Chakra/Utf8DebugExtensions.cpp +0 -62
- package/Chakra/Utf8DebugExtensions.h +0 -29
- package/Libraries/Interaction/InteractionManagerStub.js +0 -184
- package/Libraries/Interaction/TaskQueue.js +0 -183
- package/Libraries/ReactNative/ReactNativeFeatureFlags.js +0 -31
- package/Microsoft.ReactNative/ABICxxModule.cpp +0 -51
- package/Microsoft.ReactNative/ABICxxModule.h +0 -38
- package/Microsoft.ReactNative/ABIViewManager.cpp +0 -263
- package/Microsoft.ReactNative/ABIViewManager.h +0 -100
- package/Microsoft.ReactNative/Base/CoreUIManagers.cpp +0 -55
- package/Microsoft.ReactNative/DevMenuControl.cpp +0 -14
- package/Microsoft.ReactNative/DevMenuControl.h +0 -20
- package/Microsoft.ReactNative/DevMenuControl.idl +0 -28
- package/Microsoft.ReactNative/DevMenuControl.xaml +0 -139
- package/Microsoft.ReactNative/GlyphViewManager.cpp +0 -167
- package/Microsoft.ReactNative/GlyphViewManager.h +0 -24
- package/Microsoft.ReactNative/INativeUIManager.h +0 -75
- package/Microsoft.ReactNative/IViewManager.idl +0 -120
- package/Microsoft.ReactNative/IViewManagerCore.idl +0 -45
- package/Microsoft.ReactNative/LayoutService.cpp +0 -51
- package/Microsoft.ReactNative/LayoutService.h +0 -32
- package/Microsoft.ReactNative/LayoutService.idl +0 -41
- package/Microsoft.ReactNative/Modules/NativeUIManager.cpp +0 -1187
- package/Microsoft.ReactNative/Modules/NativeUIManager.h +0 -128
- package/Microsoft.ReactNative/Modules/PaperUIManagerModule.cpp +0 -891
- package/Microsoft.ReactNative/Modules/PaperUIManagerModule.h +0 -185
- package/Microsoft.ReactNative/NativeModulesProvider.cpp +0 -49
- package/Microsoft.ReactNative/NativeModulesProvider.h +0 -25
- package/Microsoft.ReactNative/ReactApplication.cpp +0 -276
- package/Microsoft.ReactNative/ReactApplication.h +0 -156
- package/Microsoft.ReactNative/ReactApplication.idl +0 -48
- package/Microsoft.ReactNative/ReactHost/ViewManagerProvider.h +0 -19
- package/Microsoft.ReactNative/ReactPointerEventArgs.cpp +0 -55
- package/Microsoft.ReactNative/ReactPointerEventArgs.h +0 -32
- package/Microsoft.ReactNative/ReactPointerEventArgs.idl +0 -79
- package/Microsoft.ReactNative/ReactRootView.cpp +0 -592
- package/Microsoft.ReactNative/ReactRootView.h +0 -127
- package/Microsoft.ReactNative/ReactRootView.idl +0 -40
- package/Microsoft.ReactNative/TestHook.cpp +0 -99
- package/Microsoft.ReactNative/TestHook.h +0 -15
- package/Microsoft.ReactNative/Utils/AccessibilityUtils.cpp +0 -36
- package/Microsoft.ReactNative/Utils/AccessibilityUtils.h +0 -15
- package/Microsoft.ReactNative/Utils/BatchingEventEmitter.cpp +0 -171
- package/Microsoft.ReactNative/Utils/BatchingEventEmitter.h +0 -72
- package/Microsoft.ReactNative/Utils/PropertyHandlerUtils.h +0 -87
- package/Microsoft.ReactNative/Utils/PropertyUtils.h +0 -568
- package/Microsoft.ReactNative/Utils/ResourceBrushUtils.cpp +0 -182
- package/Microsoft.ReactNative/Utils/ResourceBrushUtils.h +0 -58
- package/Microsoft.ReactNative/Utils/ShadowNodeTypeUtils.h +0 -26
- package/Microsoft.ReactNative/Utils/XamlIslandUtils.cpp +0 -93
- package/Microsoft.ReactNative/Utils/XamlIslandUtils.h +0 -48
- package/Microsoft.ReactNative/ViewManagersProvider.cpp +0 -39
- package/Microsoft.ReactNative/ViewManagersProvider.h +0 -27
- package/Microsoft.ReactNative/Views/ActivityIndicatorViewManager.cpp +0 -62
- package/Microsoft.ReactNative/Views/ActivityIndicatorViewManager.h +0 -29
- package/Microsoft.ReactNative/Views/ConfigureBundlerDlg.cpp +0 -186
- package/Microsoft.ReactNative/Views/ConfigureBundlerDlg.h +0 -11
- package/Microsoft.ReactNative/Views/ControlViewManager.cpp +0 -143
- package/Microsoft.ReactNative/Views/ControlViewManager.h +0 -38
- package/Microsoft.ReactNative/Views/DebuggingOverlayViewManager.cpp +0 -53
- package/Microsoft.ReactNative/Views/DebuggingOverlayViewManager.h +0 -30
- package/Microsoft.ReactNative/Views/DynamicAutomationPeer.cpp +0 -586
- package/Microsoft.ReactNative/Views/DynamicAutomationPeer.h +0 -104
- package/Microsoft.ReactNative/Views/DynamicAutomationProperties.cpp +0 -330
- package/Microsoft.ReactNative/Views/DynamicAutomationProperties.h +0 -111
- package/Microsoft.ReactNative/Views/DynamicValueProvider.cpp +0 -59
- package/Microsoft.ReactNative/Views/DynamicValueProvider.h +0 -32
- package/Microsoft.ReactNative/Views/ExpressionAnimationStore.cpp +0 -61
- package/Microsoft.ReactNative/Views/ExpressionAnimationStore.h +0 -26
- package/Microsoft.ReactNative/Views/FlyoutViewManager.cpp +0 -559
- package/Microsoft.ReactNative/Views/FlyoutViewManager.h +0 -34
- package/Microsoft.ReactNative/Views/FrameworkElementTransferProperties.cpp +0 -126
- package/Microsoft.ReactNative/Views/FrameworkElementTransferProperties.h +0 -23
- package/Microsoft.ReactNative/Views/FrameworkElementViewManager.cpp +0 -957
- package/Microsoft.ReactNative/Views/FrameworkElementViewManager.h +0 -41
- package/Microsoft.ReactNative/Views/IXamlRootView.h +0 -17
- package/Microsoft.ReactNative/Views/Image/ImageViewManager.cpp +0 -245
- package/Microsoft.ReactNative/Views/Image/ImageViewManager.h +0 -45
- package/Microsoft.ReactNative/Views/Image/ReactImage.cpp +0 -469
- package/Microsoft.ReactNative/Views/Image/ReactImage.h +0 -80
- package/Microsoft.ReactNative/Views/Image/ReactImageBrush.cpp +0 -247
- package/Microsoft.ReactNative/Views/Image/ReactImageBrush.h +0 -67
- package/Microsoft.ReactNative/Views/KeyboardEventHandler.cpp +0 -261
- package/Microsoft.ReactNative/Views/KeyboardEventHandler.h +0 -132
- package/Microsoft.ReactNative/Views/PaperShadowNode.cpp +0 -18
- package/Microsoft.ReactNative/Views/PaperShadowNode.h +0 -38
- package/Microsoft.ReactNative/Views/PopupViewManager.cpp +0 -349
- package/Microsoft.ReactNative/Views/PopupViewManager.h +0 -36
- package/Microsoft.ReactNative/Views/RawTextViewManager.cpp +0 -69
- package/Microsoft.ReactNative/Views/RawTextViewManager.h +0 -46
- package/Microsoft.ReactNative/Views/ReactViewInstance.cpp +0 -43
- package/Microsoft.ReactNative/Views/ReactViewInstance.h +0 -53
- package/Microsoft.ReactNative/Views/RefreshControlManager.cpp +0 -116
- package/Microsoft.ReactNative/Views/RefreshControlManager.h +0 -28
- package/Microsoft.ReactNative/Views/RootViewManager.cpp +0 -65
- package/Microsoft.ReactNative/Views/RootViewManager.h +0 -36
- package/Microsoft.ReactNative/Views/SIPEventHandler.cpp +0 -117
- package/Microsoft.ReactNative/Views/SIPEventHandler.h +0 -45
- package/Microsoft.ReactNative/Views/ScrollContentViewManager.cpp +0 -16
- package/Microsoft.ReactNative/Views/ScrollContentViewManager.h +0 -19
- package/Microsoft.ReactNative/Views/ScrollViewManager.cpp +0 -540
- package/Microsoft.ReactNative/Views/ScrollViewManager.h +0 -42
- package/Microsoft.ReactNative/Views/ShadowNodeBase.cpp +0 -228
- package/Microsoft.ReactNative/Views/ShadowNodeBase.h +0 -169
- package/Microsoft.ReactNative/Views/ShadowNodeRegistry.cpp +0 -68
- package/Microsoft.ReactNative/Views/ShadowNodeRegistry.h +0 -40
- package/Microsoft.ReactNative/Views/SliderViewManager.cpp +0 -97
- package/Microsoft.ReactNative/Views/SliderViewManager.h +0 -32
- package/Microsoft.ReactNative/Views/SwitchViewManager.cpp +0 -227
- package/Microsoft.ReactNative/Views/SwitchViewManager.h +0 -31
- package/Microsoft.ReactNative/Views/Text/TextHighlighterVisitor.cpp +0 -52
- package/Microsoft.ReactNative/Views/Text/TextHighlighterVisitor.h +0 -37
- package/Microsoft.ReactNative/Views/Text/TextHitTestUtils.cpp +0 -348
- package/Microsoft.ReactNative/Views/Text/TextHitTestUtils.h +0 -13
- package/Microsoft.ReactNative/Views/Text/TextHitTestVisitor.cpp +0 -76
- package/Microsoft.ReactNative/Views/Text/TextHitTestVisitor.h +0 -32
- package/Microsoft.ReactNative/Views/Text/TextParentVisitor.cpp +0 -12
- package/Microsoft.ReactNative/Views/Text/TextParentVisitor.h +0 -19
- package/Microsoft.ReactNative/Views/Text/TextPropertyChangedParentVisitor.cpp +0 -75
- package/Microsoft.ReactNative/Views/Text/TextPropertyChangedParentVisitor.h +0 -43
- package/Microsoft.ReactNative/Views/Text/TextTransformParentVisitor.cpp +0 -21
- package/Microsoft.ReactNative/Views/Text/TextTransformParentVisitor.h +0 -23
- package/Microsoft.ReactNative/Views/Text/TextTransformVisitor.cpp +0 -70
- package/Microsoft.ReactNative/Views/Text/TextTransformVisitor.h +0 -34
- package/Microsoft.ReactNative/Views/Text/TextVisitor.cpp +0 -56
- package/Microsoft.ReactNative/Views/Text/TextVisitor.h +0 -34
- package/Microsoft.ReactNative/Views/Text/TextVisitorScope.h +0 -35
- package/Microsoft.ReactNative/Views/Text/TextVisitors.h +0 -47
- package/Microsoft.ReactNative/Views/TextInputViewManager.cpp +0 -1003
- package/Microsoft.ReactNative/Views/TextInputViewManager.h +0 -33
- package/Microsoft.ReactNative/Views/TextViewManager.cpp +0 -414
- package/Microsoft.ReactNative/Views/TextViewManager.h +0 -47
- package/Microsoft.ReactNative/Views/TouchEventHandler.cpp +0 -608
- package/Microsoft.ReactNative/Views/TouchEventHandler.h +0 -116
- package/Microsoft.ReactNative/Views/UnimplementedViewManager.cpp +0 -79
- package/Microsoft.ReactNative/Views/UnimplementedViewManager.h +0 -27
- package/Microsoft.ReactNative/Views/ViewControl.cpp +0 -43
- package/Microsoft.ReactNative/Views/ViewControl.h +0 -32
- package/Microsoft.ReactNative/Views/ViewManager.h +0 -33
- package/Microsoft.ReactNative/Views/ViewManagerBase.cpp +0 -487
- package/Microsoft.ReactNative/Views/ViewManagerBase.h +0 -121
- package/Microsoft.ReactNative/Views/ViewPanel.cpp +0 -164
- package/Microsoft.ReactNative/Views/ViewPanel.h +0 -82
- package/Microsoft.ReactNative/Views/ViewViewManager.cpp +0 -507
- package/Microsoft.ReactNative/Views/ViewViewManager.h +0 -52
- package/Microsoft.ReactNative/Views/VirtualTextViewManager.cpp +0 -143
- package/Microsoft.ReactNative/Views/VirtualTextViewManager.h +0 -57
- package/Microsoft.ReactNative/Views/XamlFeatures.cpp +0 -11
- package/Microsoft.ReactNative/Views/XamlFeatures.h +0 -11
- package/Microsoft.ReactNative/Views/cppwinrt/AccessibilityAction.idl +0 -12
- package/Microsoft.ReactNative/Views/cppwinrt/DynamicAutomationPeer.idl +0 -231
- package/Microsoft.ReactNative/Views/cppwinrt/ViewPanel.idl +0 -48
- package/Microsoft.ReactNative/XamlHelper.cpp +0 -78
- package/Microsoft.ReactNative/XamlHelper.h +0 -54
- package/Microsoft.ReactNative/XamlHelper.idl +0 -30
- package/Microsoft.ReactNative/XamlLoadState.cpp +0 -217
- package/Microsoft.ReactNative/XamlLoadState.h +0 -44
- package/Microsoft.ReactNative/XamlView.cpp +0 -59
- package/Microsoft.ReactNative/XamlView.h +0 -58
- package/Microsoft.ReactNative/getLayoutProps.ps1 +0 -5
- package/Microsoft.ReactNative.Cxx/UI.Xaml.Automation.Peers.h +0 -10
- package/Microsoft.ReactNative.Cxx/UI.Xaml.Automation.h +0 -10
- package/Microsoft.ReactNative.Cxx/UI.Xaml.Controls.Primitives.h +0 -10
- package/Microsoft.ReactNative.Cxx/UI.Xaml.Controls.h +0 -13
- package/Microsoft.ReactNative.Cxx/UI.Xaml.Documents.h +0 -10
- package/Microsoft.ReactNative.Cxx/UI.Xaml.Hosting.DesktopWindowXamlSource.h +0 -11
- package/Microsoft.ReactNative.Cxx/UI.Xaml.Hosting.h +0 -10
- package/Microsoft.ReactNative.Cxx/UI.Xaml.Input.h +0 -10
- package/Microsoft.ReactNative.Cxx/UI.Xaml.Markup.h +0 -10
- package/Microsoft.ReactNative.Cxx/UI.Xaml.Media.Imaging.h +0 -10
- package/Microsoft.ReactNative.Cxx/UI.Xaml.Media.Media3D.h +0 -10
- package/Microsoft.ReactNative.Cxx/UI.Xaml.Media.h +0 -10
- package/Microsoft.ReactNative.Cxx/UI.Xaml.Navigation.h +0 -10
- package/Microsoft.ReactNative.Cxx/UI.Xaml.Shapes.h +0 -10
- package/Microsoft.ReactNative.Managed/AttributedViewManager.cs +0 -527
- package/Microsoft.ReactNative.Managed/ViewManagerAttributes.cs +0 -91
- package/Microsoft.ReactNative.Managed/ViewManagerEvent.cs +0 -13
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/AccessibilityProps.cpp +0 -344
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/core/DynamicEventPayload.cpp +0 -42
- package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/YGEnums.h +0 -146
- package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/algorithm/CalculateLayout.cpp +0 -2435
- package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/enums/ExperimentalFeature.h +0 -40
- package/Shared/BatchingMessageQueueThread.h +0 -20
- package/Shared/ChakraRuntimeHolder.cpp +0 -62
- package/Shared/ChakraRuntimeHolder.h +0 -46
- package/Shared/CreateInstance.h +0 -25
- package/Shared/Executors/WebSocketJSExecutor.cpp +0 -294
- package/Shared/Executors/WebSocketJSExecutor.h +0 -123
- package/Shared/Executors/WebSocketJSExecutorFactory.cpp +0 -25
- package/Shared/Hermes/HermesSamplingProfiler.cpp +0 -114
- package/Shared/Hermes/HermesSamplingProfiler.h +0 -26
- package/Shared/JSI/ChakraApi.cpp +0 -436
- package/Shared/JSI/ChakraApi.h +0 -474
- package/Shared/JSI/ChakraJsiRuntime_edgemode.cpp +0 -100
- package/Shared/JSI/ChakraRuntime.cpp +0 -1132
- package/Shared/JSI/ChakraRuntime.h +0 -512
- package/Shared/JSI/ChakraRuntimeArgs.h +0 -45
- package/Shared/JSI/ChakraRuntimeFactory.h +0 -15
- package/Shared/JSI/JSExecutorFactoryDelegate.h +0 -12
- package/Shared/JSI/JSExecutorFactorySettings.cpp +0 -30
- package/Shared/JSI/JSExecutorFactorySettings.h +0 -21
- package/Shared/NativeModuleProvider.h +0 -40
- package/Shared/SystemChakraRuntime.h +0 -38
- package/Shared/Threading/BatchingQueueThread.cpp +0 -128
- package/Shared/Threading/BatchingQueueThread.h +0 -59
- package/Shared/WebSocketJSExecutorFactory.h +0 -27
- package/fmt/TEMP_UntilFmtUpdate/core.h +0 -2925
- package/template/cpp-app/proj/MyApp.sln +0 -166
- package/template/cpp-app/proj/MyApp.vcxproj +0 -176
- package/template/cpp-app/proj/MyApp.vcxproj.filters +0 -62
- package/template/cpp-app/src/App.cpp +0 -93
- package/template/cpp-app/src/App.h +0 -21
- package/template/cpp-app/src/App.idl +0 -3
- package/template/cpp-app/src/AutolinkedNativeModules.g.cpp +0 -13
- package/template/cpp-app/src/AutolinkedNativeModules.g.h +0 -10
- package/template/cpp-app/src/MainPage.cpp +0 -20
- package/template/cpp-app/src/MainPage.h +0 -19
- package/template/cpp-app/src/MainPage.idl +0 -10
- package/template/cpp-app/src/PropertySheet.props +0 -16
- package/template/cpp-app/src/ReactPackageProvider.cpp +0 -15
- package/template/cpp-app/src/ReactPackageProvider.h +0 -13
- package/template/cpp-app/src/pch.cpp +0 -1
- package/template/cpp-app/src/pch.h +0 -24
- package/template/cs-app/proj/MyApp.csproj +0 -162
- package/template/cs-app/proj/MyApp.sln +0 -191
- package/template/cs-app/src/App.xaml.cs +0 -62
- package/template/cs-app/src/AutolinkedNativeModules.g.cs +0 -13
- package/template/cs-app/src/MainPage.xaml.cs +0 -34
- package/template/cs-app/src/Properties/AssemblyInfo.cs +0 -29
- package/template/cs-app/src/Properties/Default.rd.xml +0 -32
- package/template/cs-app/src/ReactPackageProvider.cs +0 -17
- package/template/shared-app/assets/LockScreenLogo.scale-200.png +0 -0
- package/template/shared-app/assets/SplashScreen.scale-200.png +0 -0
- package/template/shared-app/assets/Square150x150Logo.scale-200.png +0 -0
- package/template/shared-app/assets/Square44x44Logo.scale-200.png +0 -0
- package/template/shared-app/assets/Square44x44Logo.targetsize-24_altform-unplated.png +0 -0
- package/template/shared-app/assets/StoreLogo.png +0 -0
- package/template/shared-app/assets/Wide310x150Logo.scale-200.png +0 -0
- package/template/shared-app/proj/ExperimentalFeatures.props +0 -32
- package/template/shared-app/proj/NuGet_Config +0 -19
- package/template/shared-app/src/App.xaml +0 -10
- package/template/shared-app/src/AutolinkedNativeModules.g.props +0 -6
- package/template/shared-app/src/AutolinkedNativeModules.g.targets +0 -6
- package/template/shared-app/src/MainPage.xaml +0 -21
- package/template/shared-app/src/Package.appxmanifest +0 -50
- package/templates/old/uwp-cpp-app/template.config.js +0 -15
- package/templates/old/uwp-cs-app/template.config.js +0 -15
|
@@ -1,1132 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Microsoft Corporation.
|
|
2
|
-
// Licensed under the MIT License.
|
|
3
|
-
|
|
4
|
-
#include "ChakraRuntime.h"
|
|
5
|
-
#include "ChakraRuntimeFactory.h"
|
|
6
|
-
|
|
7
|
-
#include "Unicode.h"
|
|
8
|
-
#include "Utilities.h"
|
|
9
|
-
|
|
10
|
-
#include <cxxreact/MessageQueueThread.h>
|
|
11
|
-
|
|
12
|
-
#include <strsafe.h>
|
|
13
|
-
#include <cstring>
|
|
14
|
-
#include <limits>
|
|
15
|
-
#include <mutex>
|
|
16
|
-
#include <sstream>
|
|
17
|
-
#include <unordered_set>
|
|
18
|
-
|
|
19
|
-
#ifndef USE_EDGEMODE_JSRT
|
|
20
|
-
#define USE_EDGEMODE_JSRT
|
|
21
|
-
#endif
|
|
22
|
-
#include <jsrt.h>
|
|
23
|
-
|
|
24
|
-
namespace Microsoft::JSI {
|
|
25
|
-
|
|
26
|
-
namespace {
|
|
27
|
-
|
|
28
|
-
struct HostFunctionWrapper final {
|
|
29
|
-
HostFunctionWrapper(facebook::jsi::HostFunctionType &&hostFunction, ChakraRuntime &runtime)
|
|
30
|
-
: m_hostFunction(std::move(hostFunction)), m_runtime(runtime) {}
|
|
31
|
-
|
|
32
|
-
facebook::jsi::HostFunctionType &GetHostFunction() {
|
|
33
|
-
return m_hostFunction;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
ChakraRuntime &GetRuntime() {
|
|
37
|
-
return m_runtime;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
private:
|
|
41
|
-
facebook::jsi::HostFunctionType m_hostFunction;
|
|
42
|
-
ChakraRuntime &m_runtime;
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
} // namespace
|
|
46
|
-
|
|
47
|
-
// ES6 Promise callback
|
|
48
|
-
void CALLBACK ChakraRuntime::PromiseContinuationCallback(JsValueRef funcRef, void *callbackState) noexcept {
|
|
49
|
-
ChakraRuntime *runtime = static_cast<ChakraRuntime *>(callbackState);
|
|
50
|
-
runtime->PromiseContinuation(funcRef);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
ChakraRuntime::ChakraRuntime(ChakraRuntimeArgs &&args) noexcept : m_args{std::move(args)} {}
|
|
54
|
-
|
|
55
|
-
void ChakraRuntime::Init() noexcept {
|
|
56
|
-
JsRuntimeAttributes runtimeAttributes = JsRuntimeAttributeNone;
|
|
57
|
-
|
|
58
|
-
if (!m_args.enableJITCompilation) {
|
|
59
|
-
runtimeAttributes = static_cast<JsRuntimeAttributes>(
|
|
60
|
-
runtimeAttributes | JsRuntimeAttributeDisableNativeCodeGeneration |
|
|
61
|
-
JsRuntimeAttributeDisableExecutablePageAllocation);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
m_runtime = CreateRuntime(runtimeAttributes, nullptr);
|
|
65
|
-
|
|
66
|
-
m_context = JsRefHolder{CreateContext(m_runtime)};
|
|
67
|
-
|
|
68
|
-
// Note :: We currently assume that the runtime will be created and
|
|
69
|
-
// exclusively used in a single thread.
|
|
70
|
-
// Preserve the current context if it is already associated with the thread.
|
|
71
|
-
m_prevContext = JsRefHolder{GetCurrentContext()};
|
|
72
|
-
SetCurrentContext(m_context);
|
|
73
|
-
|
|
74
|
-
startDebuggingIfNeeded();
|
|
75
|
-
|
|
76
|
-
setupNativePromiseContinuation();
|
|
77
|
-
|
|
78
|
-
std::call_once(s_runtimeVersionInitFlag, initRuntimeVersion);
|
|
79
|
-
|
|
80
|
-
m_propertyId.Object = JsRefHolder{GetPropertyIdFromName(L"Object")};
|
|
81
|
-
m_propertyId.Proxy = JsRefHolder{GetPropertyIdFromName(L"Proxy")};
|
|
82
|
-
m_propertyId.Symbol = JsRefHolder{GetPropertyIdFromName(L"Symbol")};
|
|
83
|
-
m_propertyId.byteLength = JsRefHolder{GetPropertyIdFromName(L"byteLength")};
|
|
84
|
-
m_propertyId.configurable = JsRefHolder{GetPropertyIdFromName(L"configurable")};
|
|
85
|
-
m_propertyId.enumerable = JsRefHolder{GetPropertyIdFromName(L"enumerable")};
|
|
86
|
-
m_propertyId.get = JsRefHolder{GetPropertyIdFromName(L"get")};
|
|
87
|
-
m_propertyId.getOwnPropertyDescriptor = JsRefHolder{GetPropertyIdFromName(L"getOwnPropertyDescriptor")};
|
|
88
|
-
m_propertyId.has = JsRefHolder{GetPropertyIdFromName(L"has")};
|
|
89
|
-
m_propertyId.hostFunctionSymbol = JsRefHolder{GetPropertyIdFromSymbol(L"hostFunctionSymbol")};
|
|
90
|
-
m_propertyId.hostObjectSymbol = JsRefHolder{GetPropertyIdFromSymbol(L"hostObjectSymbol")};
|
|
91
|
-
m_propertyId.length = JsRefHolder{GetPropertyIdFromName(L"length")};
|
|
92
|
-
m_propertyId.message = JsRefHolder{GetPropertyIdFromName(L"message")};
|
|
93
|
-
m_propertyId.ownKeys = JsRefHolder{GetPropertyIdFromName(L"ownKeys")};
|
|
94
|
-
m_propertyId.propertyIsEnumerable = JsRefHolder{GetPropertyIdFromName(L"propertyIsEnumerable")};
|
|
95
|
-
m_propertyId.prototype = JsRefHolder{GetPropertyIdFromName(L"prototype")};
|
|
96
|
-
m_propertyId.set = JsRefHolder{GetPropertyIdFromName(L"set")};
|
|
97
|
-
m_propertyId.toString = JsRefHolder{GetPropertyIdFromName(L"toString")};
|
|
98
|
-
m_propertyId.value = JsRefHolder{GetPropertyIdFromName(L"value")};
|
|
99
|
-
m_propertyId.writable = JsRefHolder{GetPropertyIdFromName(L"writable")};
|
|
100
|
-
|
|
101
|
-
m_undefinedValue = JsRefHolder{GetUndefinedValue()};
|
|
102
|
-
|
|
103
|
-
JsValueRef global = GetGlobalObject();
|
|
104
|
-
JsValueRef weakMapPropertyId = GetPropertyIdFromName(L"WeakMap");
|
|
105
|
-
JsValueRef weakMapConstructor = GetProperty(global, weakMapPropertyId);
|
|
106
|
-
JsValueRef weakMapPrototype = GetProperty(weakMapConstructor, m_propertyId.prototype);
|
|
107
|
-
m_weakMapGet = JsRefHolder{GetProperty(weakMapPrototype, m_propertyId.get)};
|
|
108
|
-
m_weakMapHas = JsRefHolder{GetProperty(weakMapPrototype, m_propertyId.has)};
|
|
109
|
-
m_weakMapSet = JsRefHolder{GetProperty(weakMapPrototype, m_propertyId.set)};
|
|
110
|
-
m_nativeStateMap = JsRefHolder{ConstructObject(weakMapConstructor, Span<JsValueRef>{m_undefinedValue})};
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
/*virtual*/ ChakraRuntime::~ChakraRuntime() noexcept {
|
|
114
|
-
m_nativeStateMap = {};
|
|
115
|
-
m_weakMapSet = {};
|
|
116
|
-
m_weakMapHas = {};
|
|
117
|
-
m_weakMapGet = {};
|
|
118
|
-
m_undefinedValue = {};
|
|
119
|
-
m_propertyId = {};
|
|
120
|
-
m_proxyConstructor = {};
|
|
121
|
-
m_hostObjectProxyHandler = {};
|
|
122
|
-
|
|
123
|
-
m_context = {};
|
|
124
|
-
SetCurrentContext(m_prevContext);
|
|
125
|
-
m_prevContext = {};
|
|
126
|
-
|
|
127
|
-
DisposeRuntime(m_runtime);
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
void ChakraRuntime::PromiseContinuation(JsValueRef funcRef) noexcept {
|
|
131
|
-
if (runtimeArgs().jsQueue) {
|
|
132
|
-
JsAddRef(funcRef, nullptr);
|
|
133
|
-
runtimeArgs().jsQueue->runOnQueue([this, funcRef]() {
|
|
134
|
-
JsValueRef undefinedValue = nullptr;
|
|
135
|
-
JsGetUndefinedValue(&undefinedValue);
|
|
136
|
-
ChakraVerifyJsErrorElseThrow(JsCallFunction(funcRef, &undefinedValue, 1, nullptr));
|
|
137
|
-
JsRelease(funcRef, nullptr);
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
JsValueRef ChakraRuntime::CreatePropertyDescriptor(JsValueRef value, PropertyAttributes attrs) {
|
|
143
|
-
JsValueRef descriptor = CreateObject();
|
|
144
|
-
SetProperty(descriptor, m_propertyId.value, value);
|
|
145
|
-
if (!(attrs & PropertyAttributes::ReadOnly)) {
|
|
146
|
-
SetProperty(descriptor, m_propertyId.writable, BoolToBoolean(true));
|
|
147
|
-
}
|
|
148
|
-
if (!(attrs & PropertyAttributes::DontEnum)) {
|
|
149
|
-
SetProperty(descriptor, m_propertyId.enumerable, BoolToBoolean(true));
|
|
150
|
-
}
|
|
151
|
-
if (!(attrs & PropertyAttributes::DontDelete)) {
|
|
152
|
-
// The JavaScript 'configurable=true' allows property to be deleted.
|
|
153
|
-
SetProperty(descriptor, m_propertyId.configurable, BoolToBoolean(true));
|
|
154
|
-
}
|
|
155
|
-
return descriptor;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
#pragma region Functions_inherited_from_Runtime
|
|
159
|
-
|
|
160
|
-
facebook::jsi::Value ChakraRuntime::evaluateJavaScript(
|
|
161
|
-
const std::shared_ptr<const facebook::jsi::Buffer> &buffer,
|
|
162
|
-
const std::string &sourceURL) {
|
|
163
|
-
// Simple evaluate if scriptStore not available as it's risky to utilize the
|
|
164
|
-
// byte codes without checking the script version.
|
|
165
|
-
if (!runtimeArgs().scriptStore) {
|
|
166
|
-
if (!buffer)
|
|
167
|
-
throw facebook::jsi::JSINativeException("Script buffer is empty!");
|
|
168
|
-
return evaluateJavaScriptSimple(*buffer, sourceURL);
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
uint64_t scriptVersion = 0;
|
|
172
|
-
std::shared_ptr<const facebook::jsi::Buffer> scriptBuffer;
|
|
173
|
-
|
|
174
|
-
if (buffer) {
|
|
175
|
-
scriptBuffer = buffer;
|
|
176
|
-
scriptVersion = runtimeArgs().scriptStore->getScriptVersion(sourceURL);
|
|
177
|
-
} else {
|
|
178
|
-
auto versionedScript = runtimeArgs().scriptStore->getVersionedScript(sourceURL);
|
|
179
|
-
scriptBuffer = std::move(versionedScript.buffer);
|
|
180
|
-
scriptVersion = versionedScript.version;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
if (!scriptBuffer) {
|
|
184
|
-
throw facebook::jsi::JSINativeException("Script buffer is empty!");
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
// Simple evaluate if script version can't be computed.
|
|
188
|
-
if (scriptVersion == 0) {
|
|
189
|
-
return evaluateJavaScriptSimple(*scriptBuffer, sourceURL);
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
auto sharedScriptBuffer = std::shared_ptr<const facebook::jsi::Buffer>(std::move(scriptBuffer));
|
|
193
|
-
|
|
194
|
-
facebook::jsi::ScriptSignature scriptSignature = {sourceURL, scriptVersion};
|
|
195
|
-
facebook::jsi::JSRuntimeSignature runtimeSignature = {description().c_str(), getRuntimeVersion()};
|
|
196
|
-
|
|
197
|
-
auto preparedScript =
|
|
198
|
-
runtimeArgs().preparedScriptStore->tryGetPreparedScript(scriptSignature, runtimeSignature, nullptr);
|
|
199
|
-
|
|
200
|
-
std::shared_ptr<const facebook::jsi::Buffer> sharedPreparedScript;
|
|
201
|
-
if (preparedScript) {
|
|
202
|
-
sharedPreparedScript = std::shared_ptr<const facebook::jsi::Buffer>(std::move(preparedScript));
|
|
203
|
-
} else {
|
|
204
|
-
auto genPreparedScript = generatePreparedScript(sourceURL, *sharedScriptBuffer);
|
|
205
|
-
if (!genPreparedScript)
|
|
206
|
-
std::terminate(); // Cache generation can't fail unless something really
|
|
207
|
-
// wrong. but we should get rid of this abort before
|
|
208
|
-
// shipping.
|
|
209
|
-
|
|
210
|
-
sharedPreparedScript = std::shared_ptr<const facebook::jsi::Buffer>(std::move(genPreparedScript));
|
|
211
|
-
runtimeArgs().preparedScriptStore->persistPreparedScript(
|
|
212
|
-
sharedPreparedScript, scriptSignature, runtimeSignature, nullptr);
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
// We are pinning the buffers which are backing the external array buffers to
|
|
216
|
-
// the duration of this. This is not good if the external array buffers have a
|
|
217
|
-
// reduced lifetime compared to the runtime itself. But, it's ok for the script
|
|
218
|
-
// and prepared script buffer as their lifetime is expected to be same as the
|
|
219
|
-
// JSI runtime.
|
|
220
|
-
m_pinnedPreparedScripts.push_back(sharedPreparedScript);
|
|
221
|
-
m_pinnedScripts.push_back(sharedScriptBuffer);
|
|
222
|
-
|
|
223
|
-
JsValueRef result;
|
|
224
|
-
if (evaluateSerializedScript(*sharedScriptBuffer, *sharedPreparedScript, sourceURL, &result)) {
|
|
225
|
-
return ToJsiValue(result);
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
// If we reach here, fall back to simple evaluation.
|
|
229
|
-
return evaluateJavaScriptSimple(*sharedScriptBuffer, sourceURL);
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
struct ChakraPreparedJavaScript final : facebook::jsi::PreparedJavaScript {
|
|
233
|
-
ChakraPreparedJavaScript(
|
|
234
|
-
std::string sourceUrl,
|
|
235
|
-
const std::shared_ptr<const facebook::jsi::Buffer> &sourceBuffer,
|
|
236
|
-
std::unique_ptr<const facebook::jsi::Buffer> byteCode)
|
|
237
|
-
: m_sourceUrl{std::move(sourceUrl)}, m_sourceBuffer{sourceBuffer}, m_byteCode{std::move(byteCode)} {}
|
|
238
|
-
|
|
239
|
-
const std::string &SourceUrl() const {
|
|
240
|
-
return m_sourceUrl;
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
const facebook::jsi::Buffer &SourceBuffer() const {
|
|
244
|
-
return *m_sourceBuffer;
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
const facebook::jsi::Buffer &ByteCode() const {
|
|
248
|
-
return *m_byteCode;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
private:
|
|
252
|
-
std::string m_sourceUrl;
|
|
253
|
-
std::shared_ptr<const facebook::jsi::Buffer> m_sourceBuffer;
|
|
254
|
-
std::unique_ptr<const facebook::jsi::Buffer> m_byteCode;
|
|
255
|
-
};
|
|
256
|
-
|
|
257
|
-
std::shared_ptr<const facebook::jsi::PreparedJavaScript> ChakraRuntime::prepareJavaScript(
|
|
258
|
-
const std::shared_ptr<const facebook::jsi::Buffer> &sourceBuffer,
|
|
259
|
-
std::string sourceURL) {
|
|
260
|
-
return std::make_shared<ChakraPreparedJavaScript>(
|
|
261
|
-
sourceURL, sourceBuffer, generatePreparedScript(sourceURL, *sourceBuffer));
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
facebook::jsi::Value ChakraRuntime::evaluatePreparedJavaScript(
|
|
265
|
-
const std::shared_ptr<const facebook::jsi::PreparedJavaScript> &preparedJS) {
|
|
266
|
-
const ChakraPreparedJavaScript &chakraPreparedJS = *static_cast<const ChakraPreparedJavaScript *>(preparedJS.get());
|
|
267
|
-
JsValueRef result;
|
|
268
|
-
if (evaluateSerializedScript(
|
|
269
|
-
chakraPreparedJS.SourceBuffer(), chakraPreparedJS.ByteCode(), chakraPreparedJS.SourceUrl(), &result)) {
|
|
270
|
-
return ToJsiValue(result);
|
|
271
|
-
} else {
|
|
272
|
-
return facebook::jsi::Value::undefined();
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
bool ChakraRuntime::drainMicrotasks(int /*maxMicrotasksHint*/) {
|
|
277
|
-
// Not implemented
|
|
278
|
-
return true;
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
void ChakraRuntime::queueMicrotask(const facebook::jsi::Function &) {
|
|
282
|
-
throw facebook::jsi::JSINativeException("Not implemented");
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
facebook::jsi::Object ChakraRuntime::global() {
|
|
286
|
-
return MakePointer<facebook::jsi::Object>(GetGlobalObject());
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
std::string ChakraRuntime::description() {
|
|
290
|
-
return "ChakraRuntime";
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
bool ChakraRuntime::isInspectable() {
|
|
294
|
-
return false;
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
facebook::jsi::Runtime::PointerValue *ChakraRuntime::cloneSymbol(
|
|
298
|
-
const facebook::jsi::Runtime::PointerValue *pointerValue) {
|
|
299
|
-
return CloneChakraPointerValue(pointerValue);
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
facebook::jsi::Runtime::PointerValue *ChakraRuntime::cloneBigInt(
|
|
303
|
-
const facebook::jsi::Runtime::PointerValue *pointerValue) {
|
|
304
|
-
return CloneChakraPointerValue(pointerValue);
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
facebook::jsi::Runtime::PointerValue *ChakraRuntime::cloneString(
|
|
308
|
-
const facebook::jsi::Runtime::PointerValue *pointerValue) {
|
|
309
|
-
return CloneChakraPointerValue(pointerValue);
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
facebook::jsi::Runtime::PointerValue *ChakraRuntime::cloneObject(
|
|
313
|
-
const facebook::jsi::Runtime::PointerValue *pointerValue) {
|
|
314
|
-
return CloneChakraPointerValue(pointerValue);
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
facebook::jsi::Runtime::PointerValue *ChakraRuntime::clonePropNameID(
|
|
318
|
-
const facebook::jsi::Runtime::PointerValue *pointerValue) {
|
|
319
|
-
return CloneChakraPointerValue(pointerValue);
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
facebook::jsi::PropNameID ChakraRuntime::createPropNameIDFromAscii(const char *str, size_t length) {
|
|
323
|
-
const JsPropertyIdRef propertyId = GetPropertyIdFromName(std::string_view{str, length});
|
|
324
|
-
return MakePointer<facebook::jsi::PropNameID>(propertyId);
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
facebook::jsi::PropNameID ChakraRuntime::createPropNameIDFromUtf8(const uint8_t *utf8, size_t length) {
|
|
328
|
-
const JsPropertyIdRef propertyId =
|
|
329
|
-
GetPropertyIdFromName(std::string_view{reinterpret_cast<const char *>(utf8), length});
|
|
330
|
-
return MakePointer<facebook::jsi::PropNameID>(propertyId);
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
facebook::jsi::PropNameID ChakraRuntime::createPropNameIDFromString(const facebook::jsi::String &str) {
|
|
334
|
-
const JsPropertyIdRef propertyId = GetPropertyIdFromName(StringToPointer(GetJsRef(str)).data());
|
|
335
|
-
return MakePointer<facebook::jsi::PropNameID>(propertyId);
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
facebook::jsi::PropNameID ChakraRuntime::createPropNameIDFromSymbol(const facebook::jsi::Symbol &sym) {
|
|
339
|
-
const JsPropertyIdRef propSym = GetPropertyIdFromSymbol(GetJsRef(sym));
|
|
340
|
-
return MakePointer<facebook::jsi::PropNameID>(propSym);
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
facebook::jsi::BigInt ChakraRuntime::createBigIntFromInt64(int64_t val) {
|
|
344
|
-
throw facebook::jsi::JSINativeException("Not implemented");
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
facebook::jsi::BigInt ChakraRuntime::createBigIntFromUint64(uint64_t val) {
|
|
348
|
-
throw facebook::jsi::JSINativeException("Not implemented");
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
bool ChakraRuntime::bigintIsInt64(const facebook::jsi::BigInt &) {
|
|
352
|
-
throw facebook::jsi::JSINativeException("Not implemented");
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
bool ChakraRuntime::bigintIsUint64(const facebook::jsi::BigInt &) {
|
|
356
|
-
throw facebook::jsi::JSINativeException("Not implemented");
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
uint64_t ChakraRuntime::truncate(const facebook::jsi::BigInt &) {
|
|
360
|
-
throw facebook::jsi::JSINativeException("Not implemented");
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
facebook::jsi::String ChakraRuntime::bigintToString(const facebook::jsi::BigInt &, int) {
|
|
364
|
-
throw facebook::jsi::JSINativeException("Not implemented");
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
bool ChakraRuntime::hasNativeState(const facebook::jsi::Object &obj) {
|
|
368
|
-
return BooleanToBool(CallFunction(m_weakMapHas, {m_nativeStateMap, GetJsRef(obj)}));
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
std::shared_ptr<facebook::jsi::NativeState> ChakraRuntime::getNativeState(const facebook::jsi::Object &obj) {
|
|
372
|
-
JsValueRef stateWrapper = CallFunction(m_weakMapGet, {m_nativeStateMap, GetJsRef(obj)});
|
|
373
|
-
if (GetValueType(stateWrapper) == JsValueType::JsObject) {
|
|
374
|
-
return *static_cast<std::shared_ptr<facebook::jsi::NativeState> *>(GetExternalData(stateWrapper));
|
|
375
|
-
} else {
|
|
376
|
-
return nullptr;
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
void ChakraRuntime::setNativeState(
|
|
381
|
-
const facebook::jsi::Object &obj,
|
|
382
|
-
std::shared_ptr<facebook::jsi::NativeState> state) {
|
|
383
|
-
JsValueRef stateWrapper =
|
|
384
|
-
CreateExternalObject(std::make_unique<std::shared_ptr<facebook::jsi::NativeState>>(std::move(state)));
|
|
385
|
-
CallFunction(m_weakMapSet, {m_nativeStateMap, GetJsRef(obj), stateWrapper});
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
facebook::jsi::ArrayBuffer ChakraRuntime::createArrayBuffer(std::shared_ptr<facebook::jsi::MutableBuffer> buffer) {
|
|
389
|
-
throw facebook::jsi::JSINativeException("Not implemented");
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
std::string ChakraRuntime::utf8(const facebook::jsi::PropNameID &id) {
|
|
393
|
-
return Common::Unicode::Utf16ToUtf8(GetPropertyNameFromId(GetJsRef(id)));
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
bool ChakraRuntime::compare(const facebook::jsi::PropNameID &lhs, const facebook::jsi::PropNameID &rhs) {
|
|
397
|
-
return GetJsRef(lhs) == GetJsRef(rhs);
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
std::string ChakraRuntime::symbolToString(const facebook::jsi::Symbol &s) {
|
|
401
|
-
const JsValueRef symbol = GetJsRef(s);
|
|
402
|
-
const JsValueRef symbolCtor = GetProperty(GetGlobalObject(), m_propertyId.Symbol);
|
|
403
|
-
const JsValueRef symbolPrototype = GetProperty(symbolCtor, m_propertyId.prototype);
|
|
404
|
-
const JsValueRef symbolToString = GetProperty(symbolPrototype, m_propertyId.toString);
|
|
405
|
-
const JsValueRef jsString = CallFunction(symbolToString, {symbol});
|
|
406
|
-
return StringToStdString(jsString);
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
facebook::jsi::String ChakraRuntime::createStringFromAscii(const char *str, size_t length) {
|
|
410
|
-
return MakePointer<facebook::jsi::String>(PointerToString({str, length}));
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
facebook::jsi::String ChakraRuntime::createStringFromUtf8(const uint8_t *str, size_t length) {
|
|
414
|
-
return MakePointer<facebook::jsi::String>(PointerToString({reinterpret_cast<char const *>(str), length}));
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
std::string ChakraRuntime::utf8(const facebook::jsi::String &str) {
|
|
418
|
-
return StringToStdString(GetJsRef(str));
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
facebook::jsi::Object ChakraRuntime::createObject() {
|
|
422
|
-
return MakePointer<facebook::jsi::Object>(CreateObject());
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
facebook::jsi::Object ChakraRuntime::createObject(std::shared_ptr<facebook::jsi::HostObject> hostObject) {
|
|
426
|
-
// The hostObjectHolder keeps the hostObject as external data.
|
|
427
|
-
// Then the hostObjectHolder is wrapped up by a Proxy object to provide access to hostObject's
|
|
428
|
-
// get, set, and getPropertyNames methods.
|
|
429
|
-
// There is a special symbol property ID 'hostObjectSymbol' to access the hostObjectWrapper from the Proxy.
|
|
430
|
-
JsValueRef hostObjectHolder =
|
|
431
|
-
CreateExternalObject(std::make_unique<std::shared_ptr<facebook::jsi::HostObject>>(std::move(hostObject)));
|
|
432
|
-
if (!m_proxyConstructor) {
|
|
433
|
-
m_proxyConstructor = JsRefHolder{GetProperty(GetGlobalObject(), m_propertyId.Proxy)};
|
|
434
|
-
}
|
|
435
|
-
JsValueRef proxy =
|
|
436
|
-
ConstructObject(m_proxyConstructor, {m_undefinedValue, hostObjectHolder, GetHostObjectProxyHandler()});
|
|
437
|
-
return MakePointer<facebook::jsi::Object>(proxy);
|
|
438
|
-
}
|
|
439
|
-
|
|
440
|
-
std::shared_ptr<facebook::jsi::HostObject> ChakraRuntime::getHostObject(const facebook::jsi::Object &obj) {
|
|
441
|
-
JsValueRef hostObjectHolder = GetProperty(GetJsRef(obj), m_propertyId.hostObjectSymbol);
|
|
442
|
-
if (GetValueType(hostObjectHolder) == JsValueType::JsObject) {
|
|
443
|
-
return *static_cast<std::shared_ptr<facebook::jsi::HostObject> *>(GetExternalData(hostObjectHolder));
|
|
444
|
-
} else {
|
|
445
|
-
throw facebook::jsi::JSINativeException("getHostObject() can only be called with HostObjects.");
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
|
|
449
|
-
facebook::jsi::HostFunctionType &ChakraRuntime::getHostFunction(const facebook::jsi::Function &func) {
|
|
450
|
-
JsValueRef hostFunctionHolder = GetProperty(GetJsRef(func), m_propertyId.hostFunctionSymbol);
|
|
451
|
-
if (GetValueType(hostFunctionHolder) == JsValueType::JsObject) {
|
|
452
|
-
return static_cast<HostFunctionWrapper *>(GetExternalData(hostFunctionHolder))->GetHostFunction();
|
|
453
|
-
} else {
|
|
454
|
-
throw facebook::jsi::JSINativeException("getHostFunction() can only be called with HostFunction.");
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
facebook::jsi::Value ChakraRuntime::getProperty(
|
|
459
|
-
const facebook::jsi::Object &obj,
|
|
460
|
-
const facebook::jsi::PropNameID &name) {
|
|
461
|
-
return ToJsiValue(GetProperty(GetJsRef(obj), GetJsRef(name)));
|
|
462
|
-
}
|
|
463
|
-
|
|
464
|
-
facebook::jsi::Value ChakraRuntime::getProperty(const facebook::jsi::Object &obj, const facebook::jsi::String &name) {
|
|
465
|
-
return ToJsiValue(GetProperty(GetJsRef(obj), GetPropertyIdFromString(GetJsRef(name))));
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
bool ChakraRuntime::hasProperty(const facebook::jsi::Object &obj, const facebook::jsi::PropNameID &name) {
|
|
469
|
-
return HasProperty(GetJsRef(obj), GetJsRef(name));
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
bool ChakraRuntime::hasProperty(const facebook::jsi::Object &obj, const facebook::jsi::String &name) {
|
|
473
|
-
return HasProperty(GetJsRef(obj), GetPropertyIdFromString(GetJsRef(name)));
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
void ChakraRuntime::setPropertyValue(
|
|
477
|
-
const facebook::jsi::Object &object,
|
|
478
|
-
const facebook::jsi::PropNameID &name,
|
|
479
|
-
const facebook::jsi::Value &value) {
|
|
480
|
-
SetProperty(GetJsRef(object), GetJsRef(name), ToJsValueRef(value));
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
void ChakraRuntime::setPropertyValue(
|
|
484
|
-
const facebook::jsi::Object &object,
|
|
485
|
-
const facebook::jsi::String &name,
|
|
486
|
-
const facebook::jsi::Value &value) {
|
|
487
|
-
SetProperty(GetJsRef(object), GetPropertyIdFromString(GetJsRef(name)), ToJsValueRef(value));
|
|
488
|
-
}
|
|
489
|
-
|
|
490
|
-
bool ChakraRuntime::isArray(const facebook::jsi::Object &obj) const {
|
|
491
|
-
return GetValueType(GetJsRef(obj)) == JsArray;
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
bool ChakraRuntime::isArrayBuffer(const facebook::jsi::Object &obj) const {
|
|
495
|
-
return GetValueType(GetJsRef(obj)) == JsArrayBuffer;
|
|
496
|
-
}
|
|
497
|
-
|
|
498
|
-
bool ChakraRuntime::isFunction(const facebook::jsi::Object &obj) const {
|
|
499
|
-
return GetValueType(GetJsRef(obj)) == JsFunction;
|
|
500
|
-
}
|
|
501
|
-
|
|
502
|
-
bool ChakraRuntime::isHostObject(const facebook::jsi::Object &obj) const {
|
|
503
|
-
JsValueRef hostObjectHolder = GetProperty(GetJsRef(obj), m_propertyId.hostObjectSymbol);
|
|
504
|
-
if (GetValueType(hostObjectHolder) == JsValueType::JsObject) {
|
|
505
|
-
return GetExternalData(hostObjectHolder) != nullptr;
|
|
506
|
-
} else {
|
|
507
|
-
return false;
|
|
508
|
-
}
|
|
509
|
-
}
|
|
510
|
-
|
|
511
|
-
bool ChakraRuntime::isHostFunction(const facebook::jsi::Function &func) const {
|
|
512
|
-
JsValueRef hostFunctionHolder = GetProperty(GetJsRef(func), m_propertyId.hostFunctionSymbol);
|
|
513
|
-
if (GetValueType(hostFunctionHolder) == JsValueType::JsObject) {
|
|
514
|
-
return GetExternalData(hostFunctionHolder) != nullptr;
|
|
515
|
-
} else {
|
|
516
|
-
return false;
|
|
517
|
-
}
|
|
518
|
-
}
|
|
519
|
-
|
|
520
|
-
facebook::jsi::Array ChakraRuntime::getPropertyNames(const facebook::jsi::Object &object) {
|
|
521
|
-
// Handle to the null JS value.
|
|
522
|
-
JsValueRef jsNull = GetNullValue();
|
|
523
|
-
|
|
524
|
-
// Handle to the Object constructor.
|
|
525
|
-
JsValueRef objectConstructor = GetProperty(GetGlobalObject(), m_propertyId.Object);
|
|
526
|
-
|
|
527
|
-
// Handle to the Object.prototype Object.
|
|
528
|
-
JsValueRef objectPrototype = GetProperty(objectConstructor, m_propertyId.prototype);
|
|
529
|
-
|
|
530
|
-
// Handle to the Object.prototype.propertyIsEnumerable() Function.
|
|
531
|
-
JsValueRef objectPrototypePropertyIsEnumerable = GetProperty(objectPrototype, m_propertyId.propertyIsEnumerable);
|
|
532
|
-
|
|
533
|
-
// We now traverse the object's property chain and collect all enumerable property names.
|
|
534
|
-
std::vector<JsValueRef> enumerablePropNames{};
|
|
535
|
-
JsValueRef currentObjectOnPrototypeChain = GetJsRef(object);
|
|
536
|
-
|
|
537
|
-
// We have a small optimization here where we stop traversing the prototype
|
|
538
|
-
// chain as soon as we hit Object.prototype. However, we still need to check
|
|
539
|
-
// for null here, as one can create an Object with no prototype through
|
|
540
|
-
// Object.create(null).
|
|
541
|
-
while (!StrictEquals(currentObjectOnPrototypeChain, objectPrototype) &&
|
|
542
|
-
!StrictEquals(currentObjectOnPrototypeChain, jsNull)) {
|
|
543
|
-
JsValueRef propNames = GetOwnPropertyNames(currentObjectOnPrototypeChain);
|
|
544
|
-
int propNamesSize = NumberToInt(GetProperty(propNames, m_propertyId.length));
|
|
545
|
-
|
|
546
|
-
enumerablePropNames.reserve(enumerablePropNames.size() + propNamesSize);
|
|
547
|
-
for (int i = 0; i < propNamesSize; ++i) {
|
|
548
|
-
JsValueRef propName = GetIndexedProperty(propNames, i);
|
|
549
|
-
bool propIsEnumerable =
|
|
550
|
-
BooleanToBool(CallFunction(objectPrototypePropertyIsEnumerable, {currentObjectOnPrototypeChain, propName}));
|
|
551
|
-
if (propIsEnumerable) {
|
|
552
|
-
enumerablePropNames.push_back(propName);
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
|
|
556
|
-
currentObjectOnPrototypeChain = GetPrototype(currentObjectOnPrototypeChain);
|
|
557
|
-
}
|
|
558
|
-
|
|
559
|
-
size_t enumerablePropNamesSize = enumerablePropNames.size();
|
|
560
|
-
JsValueRef result = CreateArray(enumerablePropNamesSize);
|
|
561
|
-
|
|
562
|
-
for (size_t i = 0; i < enumerablePropNamesSize; ++i) {
|
|
563
|
-
SetIndexedProperty(result, static_cast<int32_t>(i), enumerablePropNames[i]);
|
|
564
|
-
}
|
|
565
|
-
|
|
566
|
-
return MakePointer<facebook::jsi::Object>(result).getArray(*this);
|
|
567
|
-
}
|
|
568
|
-
|
|
569
|
-
// Only ChakraCore supports weak reference semantics, so ChakraRuntime
|
|
570
|
-
// WeakObjects are in fact strong references.
|
|
571
|
-
|
|
572
|
-
facebook::jsi::WeakObject ChakraRuntime::createWeakObject(const facebook::jsi::Object &object) {
|
|
573
|
-
return make<facebook::jsi::WeakObject>(CloneChakraPointerValue(getPointerValue(object)));
|
|
574
|
-
}
|
|
575
|
-
|
|
576
|
-
facebook::jsi::Value ChakraRuntime::lockWeakObject(const facebook::jsi::WeakObject &weakObject) {
|
|
577
|
-
// We need to make a copy of the ChakraObjectRef held within weakObj's
|
|
578
|
-
// member PointerValue for the returned jsi::Value here.
|
|
579
|
-
return ToJsiValue(GetJsRef(weakObject));
|
|
580
|
-
}
|
|
581
|
-
|
|
582
|
-
facebook::jsi::Array ChakraRuntime::createArray(size_t length) {
|
|
583
|
-
assert(length <= (std::numeric_limits<unsigned int>::max)());
|
|
584
|
-
|
|
585
|
-
return MakePointer<facebook::jsi::Object>(CreateArray(length)).asArray(*this);
|
|
586
|
-
}
|
|
587
|
-
|
|
588
|
-
size_t ChakraRuntime::size(const facebook::jsi::Array &arr) {
|
|
589
|
-
assert(isArray(arr));
|
|
590
|
-
|
|
591
|
-
const int result = NumberToInt(GetProperty(GetJsRef(arr), m_propertyId.length));
|
|
592
|
-
ChakraVerifyElseThrow(result >= 0, "Invalid JS array length detected.");
|
|
593
|
-
return static_cast<size_t>(result);
|
|
594
|
-
}
|
|
595
|
-
|
|
596
|
-
size_t ChakraRuntime::size(const facebook::jsi::ArrayBuffer &arrBuf) {
|
|
597
|
-
assert(isArrayBuffer(arrBuf));
|
|
598
|
-
|
|
599
|
-
const int result = NumberToInt(GetProperty(GetJsRef(arrBuf), m_propertyId.byteLength));
|
|
600
|
-
ChakraVerifyElseThrow(result >= 0, "Invalid JS array buffer byteLength detected.");
|
|
601
|
-
return static_cast<size_t>(result);
|
|
602
|
-
}
|
|
603
|
-
|
|
604
|
-
uint8_t *ChakraRuntime::data(const facebook::jsi::ArrayBuffer &arrBuf) {
|
|
605
|
-
assert(isArrayBuffer(arrBuf));
|
|
606
|
-
return reinterpret_cast<uint8_t *>(GetArrayBufferStorage(GetJsRef(arrBuf)).begin());
|
|
607
|
-
}
|
|
608
|
-
|
|
609
|
-
facebook::jsi::Value ChakraRuntime::getValueAtIndex(const facebook::jsi::Array &arr, size_t index) {
|
|
610
|
-
assert(isArray(arr));
|
|
611
|
-
assert(index <= static_cast<size_t>((std::numeric_limits<int>::max)()));
|
|
612
|
-
|
|
613
|
-
return ToJsiValue(GetIndexedProperty(GetJsRef(arr), static_cast<int>(index)));
|
|
614
|
-
}
|
|
615
|
-
|
|
616
|
-
void ChakraRuntime::setValueAtIndexImpl(
|
|
617
|
-
const facebook::jsi::Array &arr,
|
|
618
|
-
size_t index,
|
|
619
|
-
const facebook::jsi::Value &value) {
|
|
620
|
-
assert(isArray(arr));
|
|
621
|
-
assert(index <= static_cast<size_t>((std::numeric_limits<int>::max)()));
|
|
622
|
-
|
|
623
|
-
SetIndexedProperty(GetJsRef(arr), static_cast<int>(index), ToJsValueRef(value));
|
|
624
|
-
}
|
|
625
|
-
|
|
626
|
-
facebook::jsi::Function ChakraRuntime::createFunctionFromHostFunction(
|
|
627
|
-
const facebook::jsi::PropNameID &name,
|
|
628
|
-
unsigned int paramCount,
|
|
629
|
-
facebook::jsi::HostFunctionType func) {
|
|
630
|
-
auto hostFunctionWrapper = std::make_unique<HostFunctionWrapper>(std::move(func), *this);
|
|
631
|
-
JsValueRef function = CreateExternalFunction(
|
|
632
|
-
GetJsRef(name), static_cast<int32_t>(paramCount), HostFunctionCall, hostFunctionWrapper.get());
|
|
633
|
-
|
|
634
|
-
const auto hostFunctionHolder = CreateExternalObject(std::move(hostFunctionWrapper));
|
|
635
|
-
DefineProperty(
|
|
636
|
-
function,
|
|
637
|
-
m_propertyId.hostFunctionSymbol,
|
|
638
|
-
CreatePropertyDescriptor(hostFunctionHolder, PropertyAttributes::DontEnumAndFrozen));
|
|
639
|
-
|
|
640
|
-
return MakePointer<facebook::jsi::Object>(function).getFunction(*this);
|
|
641
|
-
}
|
|
642
|
-
|
|
643
|
-
facebook::jsi::Value ChakraRuntime::call(
|
|
644
|
-
const facebook::jsi::Function &func,
|
|
645
|
-
const facebook::jsi::Value &jsThis,
|
|
646
|
-
const facebook::jsi::Value *args,
|
|
647
|
-
size_t count) {
|
|
648
|
-
return ToJsiValue(CallFunction(GetJsRef(func), JsValueArgs(*this, jsThis, Span(args, count))));
|
|
649
|
-
}
|
|
650
|
-
|
|
651
|
-
facebook::jsi::Value
|
|
652
|
-
ChakraRuntime::callAsConstructor(const facebook::jsi::Function &func, const facebook::jsi::Value *args, size_t count) {
|
|
653
|
-
return ToJsiValue(
|
|
654
|
-
ConstructObject(GetJsRef(func), JsValueArgs(*this, facebook::jsi::Value::undefined(), Span(args, count))));
|
|
655
|
-
}
|
|
656
|
-
|
|
657
|
-
facebook::jsi::Runtime::ScopeState *ChakraRuntime::pushScope() {
|
|
658
|
-
return nullptr;
|
|
659
|
-
}
|
|
660
|
-
|
|
661
|
-
void ChakraRuntime::popScope([[maybe_unused]] Runtime::ScopeState *state) {
|
|
662
|
-
assert(state == nullptr);
|
|
663
|
-
ChakraVerifyJsErrorElseThrow(JsCollectGarbage(m_runtime));
|
|
664
|
-
}
|
|
665
|
-
|
|
666
|
-
bool ChakraRuntime::strictEquals(const facebook::jsi::Symbol &a, const facebook::jsi::Symbol &b) const {
|
|
667
|
-
return StrictEquals(GetJsRef(a), GetJsRef(b));
|
|
668
|
-
}
|
|
669
|
-
|
|
670
|
-
bool ChakraRuntime::strictEquals(const facebook::jsi::BigInt &a, const facebook::jsi::BigInt &b) const {
|
|
671
|
-
return StrictEquals(GetJsRef(a), GetJsRef(b));
|
|
672
|
-
}
|
|
673
|
-
|
|
674
|
-
bool ChakraRuntime::strictEquals(const facebook::jsi::String &a, const facebook::jsi::String &b) const {
|
|
675
|
-
return StrictEquals(GetJsRef(a), GetJsRef(b));
|
|
676
|
-
}
|
|
677
|
-
|
|
678
|
-
bool ChakraRuntime::strictEquals(const facebook::jsi::Object &a, const facebook::jsi::Object &b) const {
|
|
679
|
-
return StrictEquals(GetJsRef(a), GetJsRef(b));
|
|
680
|
-
}
|
|
681
|
-
|
|
682
|
-
bool ChakraRuntime::instanceOf(const facebook::jsi::Object &obj, const facebook::jsi::Function &func) {
|
|
683
|
-
return InstanceOf(GetJsRef(obj), GetJsRef(func));
|
|
684
|
-
}
|
|
685
|
-
|
|
686
|
-
void ChakraRuntime::setExternalMemoryPressure(const facebook::jsi::Object & /*obj*/, size_t /*amount*/) {
|
|
687
|
-
// TODO: implement
|
|
688
|
-
}
|
|
689
|
-
|
|
690
|
-
#pragma endregion Functions_inherited_from_Runtime
|
|
691
|
-
|
|
692
|
-
// Sets variable in the constructor and then restores its value in the destructor.
|
|
693
|
-
template <typename T>
|
|
694
|
-
struct AutoRestore {
|
|
695
|
-
AutoRestore(T *var, T value) : m_var{var}, m_value{std::exchange(*var, value)} {}
|
|
696
|
-
|
|
697
|
-
~AutoRestore() {
|
|
698
|
-
*m_var = m_value;
|
|
699
|
-
}
|
|
700
|
-
|
|
701
|
-
private:
|
|
702
|
-
T *m_var;
|
|
703
|
-
T m_value;
|
|
704
|
-
};
|
|
705
|
-
|
|
706
|
-
[[noreturn]] void ChakraRuntime::ThrowJsExceptionOverride(JsErrorCode errorCode, JsValueRef jsError) {
|
|
707
|
-
if (!m_pendingJSError && (errorCode == JsErrorScriptException || GetValueType(jsError) == JsError)) {
|
|
708
|
-
AutoRestore<bool> setValue{const_cast<bool *>(&m_pendingJSError), true};
|
|
709
|
-
RewriteErrorMessage(jsError);
|
|
710
|
-
throw facebook::jsi::JSError(*this, ToJsiValue(jsError));
|
|
711
|
-
} else {
|
|
712
|
-
std::ostringstream errorString;
|
|
713
|
-
errorString << "A call to Chakra API returned error code 0x" << std::hex << errorCode << '.';
|
|
714
|
-
throw facebook::jsi::JSINativeException(errorString.str().c_str());
|
|
715
|
-
}
|
|
716
|
-
}
|
|
717
|
-
|
|
718
|
-
[[noreturn]] void ChakraRuntime::ThrowNativeExceptionOverride(char const *errorMessage) {
|
|
719
|
-
throw facebook::jsi::JSINativeException(errorMessage);
|
|
720
|
-
}
|
|
721
|
-
|
|
722
|
-
void ChakraRuntime::RewriteErrorMessage(JsValueRef jsError) {
|
|
723
|
-
// The code below must work correctly even if the 'message' getter throws.
|
|
724
|
-
// In case when it throws, we ignore that exception.
|
|
725
|
-
JsValueRef message{JS_INVALID_REFERENCE};
|
|
726
|
-
JsErrorCode errorCode = JsGetProperty(jsError, m_propertyId.message, &message);
|
|
727
|
-
if (errorCode != JsNoError) {
|
|
728
|
-
// If the 'message' property getter throws, then we clear the exception and ignore it.
|
|
729
|
-
JsValueRef ignoreJSError{JS_INVALID_REFERENCE};
|
|
730
|
-
JsGetAndClearException(&ignoreJSError);
|
|
731
|
-
} else if (GetValueType(message) == JsValueType::JsString) {
|
|
732
|
-
// JSI unit tests expect V8 or JSC like message for stack overflow.
|
|
733
|
-
std::wstring_view errorMessage = StringToPointer(message);
|
|
734
|
-
if (errorMessage == L"Out of stack space") {
|
|
735
|
-
SetProperty(jsError, m_propertyId.message, PointerToString(L"RangeError : Maximum call stack size exceeded"));
|
|
736
|
-
} else if (errorMessage == L"Syntax error") {
|
|
737
|
-
JsValueRef result;
|
|
738
|
-
JsPropertyIdRef property;
|
|
739
|
-
|
|
740
|
-
JsGetPropertyIdFromName(L"line", &property);
|
|
741
|
-
if (JsGetProperty(jsError, property, &result) != JsNoError) {
|
|
742
|
-
// If the 'line' property getter throws, clear the exception and ignore it.
|
|
743
|
-
JsValueRef ignoreJSError{JS_INVALID_REFERENCE};
|
|
744
|
-
JsGetAndClearException(&ignoreJSError);
|
|
745
|
-
return;
|
|
746
|
-
}
|
|
747
|
-
|
|
748
|
-
// Line numbers start from zero
|
|
749
|
-
const int32_t line = NumberToInt(result) + 1;
|
|
750
|
-
wchar_t buf[1024] = {};
|
|
751
|
-
|
|
752
|
-
JsGetPropertyIdFromName(L"column", &property);
|
|
753
|
-
if (JsGetProperty(jsError, property, &result) != JsNoError) {
|
|
754
|
-
// If the 'column' property getter throws, clear the exception and ignore it.
|
|
755
|
-
JsValueRef ignoreJSError{JS_INVALID_REFERENCE};
|
|
756
|
-
JsGetAndClearException(&ignoreJSError);
|
|
757
|
-
StringCchPrintf(buf, std::size(buf), L"Syntax error at line %i", line);
|
|
758
|
-
} else {
|
|
759
|
-
const int32_t column = NumberToInt(result);
|
|
760
|
-
StringCchPrintf(buf, std::size(buf), L"Syntax error at line %i column %i", line, column);
|
|
761
|
-
}
|
|
762
|
-
|
|
763
|
-
SetProperty(jsError, m_propertyId.message, PointerToString(buf));
|
|
764
|
-
}
|
|
765
|
-
}
|
|
766
|
-
}
|
|
767
|
-
|
|
768
|
-
facebook::jsi::Value ChakraRuntime::ToJsiValue(JsValueRef ref) {
|
|
769
|
-
switch (GetValueType(ref)) {
|
|
770
|
-
case JsUndefined:
|
|
771
|
-
return facebook::jsi::Value::undefined();
|
|
772
|
-
case JsNull:
|
|
773
|
-
return facebook::jsi::Value::null();
|
|
774
|
-
case JsNumber:
|
|
775
|
-
return facebook::jsi::Value(NumberToDouble(ref));
|
|
776
|
-
case JsString:
|
|
777
|
-
return facebook::jsi::Value(*this, MakePointer<facebook::jsi::String>(ref));
|
|
778
|
-
case JsBoolean:
|
|
779
|
-
return facebook::jsi::Value(BooleanToBool(ref));
|
|
780
|
-
case JsSymbol:
|
|
781
|
-
return facebook::jsi::Value(*this, MakePointer<facebook::jsi::Symbol>(ref));
|
|
782
|
-
case JsObject:
|
|
783
|
-
case JsFunction:
|
|
784
|
-
case JsError:
|
|
785
|
-
case JsArray:
|
|
786
|
-
case JsArrayBuffer:
|
|
787
|
-
case JsTypedArray:
|
|
788
|
-
case JsDataView:
|
|
789
|
-
return facebook::jsi::Value(*this, MakePointer<facebook::jsi::Object>(ref));
|
|
790
|
-
default:
|
|
791
|
-
throw facebook::jsi::JSINativeException("Unexpected value type");
|
|
792
|
-
}
|
|
793
|
-
}
|
|
794
|
-
|
|
795
|
-
JsValueRef ChakraRuntime::ToJsValueRef(const facebook::jsi::Value &value) {
|
|
796
|
-
if (value.isUndefined()) {
|
|
797
|
-
return m_undefinedValue;
|
|
798
|
-
} else if (value.isNull()) {
|
|
799
|
-
return GetNullValue();
|
|
800
|
-
} else if (value.isBool()) {
|
|
801
|
-
return BoolToBoolean(value.getBool());
|
|
802
|
-
} else if (value.isNumber()) {
|
|
803
|
-
return DoubleToNumber(value.getNumber());
|
|
804
|
-
} else if (value.isSymbol()) {
|
|
805
|
-
return GetJsRef(value.getSymbol(*this));
|
|
806
|
-
} else if (value.isString()) {
|
|
807
|
-
return GetJsRef(value.getString(*this));
|
|
808
|
-
} else if (value.isObject()) {
|
|
809
|
-
return GetJsRef(value.getObject(*this));
|
|
810
|
-
} else if (value.isBigInt()) {
|
|
811
|
-
return GetJsRef(value.getBigInt(*this));
|
|
812
|
-
} else {
|
|
813
|
-
throw facebook::jsi::JSINativeException("Unexpected jsi::Value type");
|
|
814
|
-
}
|
|
815
|
-
}
|
|
816
|
-
|
|
817
|
-
JsValueRef ChakraRuntime::CreateExternalFunction(
|
|
818
|
-
JsPropertyIdRef name,
|
|
819
|
-
int32_t paramCount,
|
|
820
|
-
JsNativeFunction nativeFunction,
|
|
821
|
-
void *callbackState) {
|
|
822
|
-
JsValueRef nameString = GetPropertyStringFromId(name);
|
|
823
|
-
JsValueRef function = CreateNamedFunction(nameString, nativeFunction, callbackState);
|
|
824
|
-
DefineProperty(
|
|
825
|
-
function,
|
|
826
|
-
m_propertyId.length,
|
|
827
|
-
CreatePropertyDescriptor(IntToNumber(paramCount), PropertyAttributes::DontEnumAndFrozen));
|
|
828
|
-
return function;
|
|
829
|
-
}
|
|
830
|
-
|
|
831
|
-
JsValueRef CALLBACK ChakraRuntime::HostFunctionCall(
|
|
832
|
-
JsValueRef /*callee*/,
|
|
833
|
-
bool isConstructCall,
|
|
834
|
-
JsValueRef *args,
|
|
835
|
-
unsigned short argCount,
|
|
836
|
-
void *callbackState) {
|
|
837
|
-
HostFunctionWrapper *hostFuncWrapper = static_cast<HostFunctionWrapper *>(callbackState);
|
|
838
|
-
ChakraRuntime &chakraRuntime = hostFuncWrapper->GetRuntime();
|
|
839
|
-
return chakraRuntime.HandleCallbackExceptions([&]() {
|
|
840
|
-
ChakraVerifyElseThrow(argCount > 0, "There must be at least 'this' argument.");
|
|
841
|
-
const JsiValueView jsiThisArg{*args};
|
|
842
|
-
const JsiValueViewArgs jsiArgs{args + 1, argCount - 1u};
|
|
843
|
-
|
|
844
|
-
const facebook::jsi::HostFunctionType &hostFunc = hostFuncWrapper->GetHostFunction();
|
|
845
|
-
return RunInMethodContext("HostFunction", [&]() {
|
|
846
|
-
return chakraRuntime.ToJsValueRef(hostFunc(chakraRuntime, jsiThisArg, jsiArgs.Data(), jsiArgs.Size()));
|
|
847
|
-
});
|
|
848
|
-
});
|
|
849
|
-
}
|
|
850
|
-
|
|
851
|
-
/*static*/ JsValueRef CALLBACK ChakraRuntime::HostObjectGetTrap(
|
|
852
|
-
JsValueRef /*callee*/,
|
|
853
|
-
bool isConstructCall,
|
|
854
|
-
JsValueRef *args,
|
|
855
|
-
unsigned short argCount,
|
|
856
|
-
void *callbackState) noexcept {
|
|
857
|
-
ChakraRuntime *chakraRuntime = static_cast<ChakraRuntime *>(callbackState);
|
|
858
|
-
return chakraRuntime->HandleCallbackExceptions([&]() {
|
|
859
|
-
// args[0] - the Proxy handler object (this) (unused).
|
|
860
|
-
// args[1] - the Proxy target object.
|
|
861
|
-
// args[2] - the name of the property to set.
|
|
862
|
-
// args[3] - the Proxy object (unused).
|
|
863
|
-
ChakraVerifyElseThrow(argCount == 4, "HostObjectGetTrap() requires 4 arguments.");
|
|
864
|
-
const JsValueRef target = args[1];
|
|
865
|
-
const JsValueRef propertyName = args[2];
|
|
866
|
-
if (GetValueType(propertyName) == JsValueType::JsString) {
|
|
867
|
-
auto const &hostObject = *static_cast<std::shared_ptr<facebook::jsi::HostObject> *>(GetExternalData(target));
|
|
868
|
-
const PropNameIDView propertyId{GetPropertyIdFromName(StringToPointer(propertyName).data())};
|
|
869
|
-
return RunInMethodContext("HostObject::get", [&]() {
|
|
870
|
-
return chakraRuntime->ToJsValueRef(hostObject->get(*chakraRuntime, propertyId));
|
|
871
|
-
});
|
|
872
|
-
} else if (GetValueType(propertyName) == JsValueType::JsSymbol) {
|
|
873
|
-
const auto chakraPropertyId = GetPropertyIdFromSymbol(propertyName);
|
|
874
|
-
if (chakraPropertyId == chakraRuntime->m_propertyId.hostObjectSymbol) {
|
|
875
|
-
// The special property to retrieve the target object.
|
|
876
|
-
return target;
|
|
877
|
-
} else {
|
|
878
|
-
auto const &hostObject = *static_cast<std::shared_ptr<facebook::jsi::HostObject> *>(GetExternalData(target));
|
|
879
|
-
const PropNameIDView propertyId{chakraPropertyId};
|
|
880
|
-
return RunInMethodContext("HostObject::get", [&]() {
|
|
881
|
-
return chakraRuntime->ToJsValueRef(hostObject->get(*chakraRuntime, propertyId));
|
|
882
|
-
});
|
|
883
|
-
}
|
|
884
|
-
}
|
|
885
|
-
|
|
886
|
-
return static_cast<JsValueRef>(chakraRuntime->m_undefinedValue);
|
|
887
|
-
});
|
|
888
|
-
} // namespace Microsoft::JSI
|
|
889
|
-
|
|
890
|
-
/*static*/ JsValueRef CALLBACK ChakraRuntime::HostObjectSetTrap(
|
|
891
|
-
JsValueRef /*callee*/,
|
|
892
|
-
bool isConstructCall,
|
|
893
|
-
JsValueRef *args,
|
|
894
|
-
unsigned short argCount,
|
|
895
|
-
void *callbackState) noexcept {
|
|
896
|
-
ChakraRuntime *chakraRuntime = static_cast<ChakraRuntime *>(callbackState);
|
|
897
|
-
return chakraRuntime->HandleCallbackExceptions([&]() {
|
|
898
|
-
// args[0] - the Proxy handler object (this) (unused).
|
|
899
|
-
// args[1] - the Proxy target object.
|
|
900
|
-
// args[2] - the name of the property to set.
|
|
901
|
-
// args[3] - the new value of the property to set.
|
|
902
|
-
// args[4] - the Proxy object (unused).
|
|
903
|
-
ChakraVerifyElseThrow(argCount == 5, "HostObjectSetTrap() requires 5 arguments.");
|
|
904
|
-
|
|
905
|
-
const JsValueRef target = args[1];
|
|
906
|
-
const JsValueRef propertyName = args[2];
|
|
907
|
-
if (GetValueType(propertyName) == JsValueType::JsString) {
|
|
908
|
-
auto const &hostObject = *static_cast<std::shared_ptr<facebook::jsi::HostObject> *>(GetExternalData(target));
|
|
909
|
-
const PropNameIDView propertyId{GetPropertyIdFromName(StringToPointer(propertyName).data())};
|
|
910
|
-
const JsiValueView value{args[3]};
|
|
911
|
-
RunInMethodContext("HostObject::set", [&]() { hostObject->set(*chakraRuntime, propertyId, value); });
|
|
912
|
-
}
|
|
913
|
-
|
|
914
|
-
return static_cast<JsValueRef>(chakraRuntime->m_undefinedValue);
|
|
915
|
-
});
|
|
916
|
-
}
|
|
917
|
-
|
|
918
|
-
/*static*/ JsValueRef CALLBACK ChakraRuntime::HostObjectOwnKeysTrap(
|
|
919
|
-
JsValueRef /*callee*/,
|
|
920
|
-
bool isConstructCall,
|
|
921
|
-
JsValueRef *args,
|
|
922
|
-
unsigned short argCount,
|
|
923
|
-
void *callbackState) noexcept {
|
|
924
|
-
ChakraRuntime *chakraRuntime = static_cast<ChakraRuntime *>(callbackState);
|
|
925
|
-
return chakraRuntime->HandleCallbackExceptions([&]() {
|
|
926
|
-
ChakraVerifyElseThrow(!isConstructCall, "Constructor call for HostObjectOwnKeysTrap() is not supported.");
|
|
927
|
-
|
|
928
|
-
// args[0] - the Proxy handler object (this) (unused).
|
|
929
|
-
// args[1] - the Proxy target object.
|
|
930
|
-
ChakraVerifyElseThrow(argCount == 2, "HostObjectOwnKeysTrap() requires 2 arguments.");
|
|
931
|
-
const JsValueRef target = args[1];
|
|
932
|
-
auto const &hostObject = *static_cast<std::shared_ptr<facebook::jsi::HostObject> *>(GetExternalData(target));
|
|
933
|
-
|
|
934
|
-
const std::vector<facebook::jsi::PropNameID> ownKeys = RunInMethodContext(
|
|
935
|
-
"HostObject::getPropertyNames", [&]() { return hostObject->getPropertyNames(*chakraRuntime); });
|
|
936
|
-
|
|
937
|
-
std::unordered_set<JsPropertyIdRef> dedupedOwnKeys{};
|
|
938
|
-
dedupedOwnKeys.reserve(ownKeys.size());
|
|
939
|
-
for (facebook::jsi::PropNameID const &key : ownKeys) {
|
|
940
|
-
dedupedOwnKeys.insert(GetJsRef(key));
|
|
941
|
-
}
|
|
942
|
-
|
|
943
|
-
const JsValueRef result = CreateArray(dedupedOwnKeys.size());
|
|
944
|
-
int32_t index = 0;
|
|
945
|
-
for (JsPropertyIdRef key : dedupedOwnKeys) {
|
|
946
|
-
SetIndexedProperty(result, index, GetPropertyStringFromId(key));
|
|
947
|
-
++index;
|
|
948
|
-
}
|
|
949
|
-
|
|
950
|
-
return result;
|
|
951
|
-
});
|
|
952
|
-
}
|
|
953
|
-
|
|
954
|
-
/*static*/ JsValueRef CALLBACK ChakraRuntime::HostObjectGetOwnPropertyDescriptorTrap(
|
|
955
|
-
JsValueRef callee,
|
|
956
|
-
bool isConstructCall,
|
|
957
|
-
JsValueRef *args,
|
|
958
|
-
unsigned short argCount,
|
|
959
|
-
void *callbackState) noexcept {
|
|
960
|
-
ChakraRuntime *chakraRuntime = static_cast<ChakraRuntime *>(callbackState);
|
|
961
|
-
return chakraRuntime->HandleCallbackExceptions([&]() {
|
|
962
|
-
ChakraVerifyElseThrow(
|
|
963
|
-
!isConstructCall, "Constructor call for HostObjectGetOwnPropertyDescriptorTrap() is not supported.");
|
|
964
|
-
|
|
965
|
-
// args[0] - the Proxy handler object (this) (unused).
|
|
966
|
-
// args[1] - the Proxy target object.
|
|
967
|
-
// args[2] - the property
|
|
968
|
-
ChakraVerifyElseThrow(argCount == 3, "HostObjectGetOwnPropertyDescriptorTrap() requires 3 arguments.");
|
|
969
|
-
const JsValueRef target = args[1];
|
|
970
|
-
auto const &hostObject = *static_cast<std::shared_ptr<facebook::jsi::HostObject> *>(GetExternalData(target));
|
|
971
|
-
|
|
972
|
-
const JsValueRef propertyName = args[2];
|
|
973
|
-
if (GetValueType(propertyName) == JsValueType::JsString) {
|
|
974
|
-
const PropNameIDView propertyId{GetPropertyIdFromName(StringToPointer(propertyName).data())};
|
|
975
|
-
return RunInMethodContext("HostObject::getOwnPropertyDescriptor", [&]() {
|
|
976
|
-
auto value = chakraRuntime->ToJsValueRef(hostObject->get(*chakraRuntime, propertyId));
|
|
977
|
-
auto descriptor = chakraRuntime->CreatePropertyDescriptor(value, PropertyAttributes::None);
|
|
978
|
-
return descriptor;
|
|
979
|
-
});
|
|
980
|
-
}
|
|
981
|
-
return static_cast<JsValueRef>(chakraRuntime->m_undefinedValue);
|
|
982
|
-
});
|
|
983
|
-
}
|
|
984
|
-
|
|
985
|
-
JsValueRef ChakraRuntime::GetHostObjectProxyHandler() {
|
|
986
|
-
if (!m_hostObjectProxyHandler) {
|
|
987
|
-
const JsValueRef handler = CreateObject();
|
|
988
|
-
SetProperty(handler, m_propertyId.get, CreateExternalFunction(m_propertyId.get, 2, HostObjectGetTrap, this));
|
|
989
|
-
SetProperty(handler, m_propertyId.set, CreateExternalFunction(m_propertyId.set, 3, HostObjectSetTrap, this));
|
|
990
|
-
SetProperty(
|
|
991
|
-
handler, m_propertyId.ownKeys, CreateExternalFunction(m_propertyId.ownKeys, 1, HostObjectOwnKeysTrap, this));
|
|
992
|
-
SetProperty(
|
|
993
|
-
handler,
|
|
994
|
-
m_propertyId.getOwnPropertyDescriptor,
|
|
995
|
-
CreateExternalFunction(m_propertyId.getOwnPropertyDescriptor, 3, HostObjectGetOwnPropertyDescriptorTrap, this));
|
|
996
|
-
m_hostObjectProxyHandler = JsRefHolder{handler};
|
|
997
|
-
}
|
|
998
|
-
|
|
999
|
-
return m_hostObjectProxyHandler;
|
|
1000
|
-
}
|
|
1001
|
-
|
|
1002
|
-
/*virtual*/ void ChakraRuntime::setupNativePromiseContinuation() noexcept {}
|
|
1003
|
-
|
|
1004
|
-
//===========================================================================
|
|
1005
|
-
// ChakraRuntime::JsValueArgs implementation
|
|
1006
|
-
//===========================================================================
|
|
1007
|
-
|
|
1008
|
-
ChakraRuntime::JsValueArgs::JsValueArgs(
|
|
1009
|
-
ChakraRuntime &rt,
|
|
1010
|
-
facebook::jsi::Value const &firstArg,
|
|
1011
|
-
Span<facebook::jsi::Value const> args)
|
|
1012
|
-
: m_count{args.size() + 1},
|
|
1013
|
-
m_heapArgs{m_count > MaxStackArgCount ? std::make_unique<JsValueRef[]>(m_count) : nullptr} {
|
|
1014
|
-
JsValueRef *const jsArgs = m_heapArgs ? m_heapArgs.get() : m_stackArgs.data();
|
|
1015
|
-
jsArgs[0] = rt.ToJsValueRef(firstArg);
|
|
1016
|
-
for (size_t i = 1; i < m_count; ++i) {
|
|
1017
|
-
jsArgs[i] = rt.ToJsValueRef(args.begin()[i - 1]);
|
|
1018
|
-
}
|
|
1019
|
-
if (m_heapArgs) {
|
|
1020
|
-
// Chakra GC cannot see values on heap. They must be ref-counted.
|
|
1021
|
-
for (size_t i = 0; i < m_count; ++i) {
|
|
1022
|
-
AddRef(m_heapArgs[i]);
|
|
1023
|
-
}
|
|
1024
|
-
}
|
|
1025
|
-
}
|
|
1026
|
-
|
|
1027
|
-
ChakraRuntime::JsValueArgs::~JsValueArgs() {
|
|
1028
|
-
if (m_heapArgs) {
|
|
1029
|
-
for (size_t i = 0; i < m_count; ++i) {
|
|
1030
|
-
Release(m_heapArgs[i]);
|
|
1031
|
-
}
|
|
1032
|
-
}
|
|
1033
|
-
}
|
|
1034
|
-
|
|
1035
|
-
ChakraRuntime::JsValueArgs::operator ChakraApi::Span<JsValueRef>() {
|
|
1036
|
-
if (m_count > MaxStackArgCount) {
|
|
1037
|
-
return Span<JsValueRef>(m_heapArgs.get(), m_count);
|
|
1038
|
-
} else {
|
|
1039
|
-
return Span<JsValueRef>(m_stackArgs.data(), m_count);
|
|
1040
|
-
}
|
|
1041
|
-
}
|
|
1042
|
-
|
|
1043
|
-
//===========================================================================
|
|
1044
|
-
// ChakraRuntime::JsiValueView implementation
|
|
1045
|
-
//===========================================================================
|
|
1046
|
-
|
|
1047
|
-
ChakraRuntime::JsiValueView::JsiValueView(JsValueRef jsValue)
|
|
1048
|
-
: m_value{InitValue(jsValue, std::addressof(m_pointerStore))} {}
|
|
1049
|
-
|
|
1050
|
-
ChakraRuntime::JsiValueView::~JsiValueView() noexcept {}
|
|
1051
|
-
|
|
1052
|
-
ChakraRuntime::JsiValueView::operator facebook::jsi::Value const &() const noexcept {
|
|
1053
|
-
return m_value;
|
|
1054
|
-
}
|
|
1055
|
-
|
|
1056
|
-
/*static*/ facebook::jsi::Value ChakraRuntime::JsiValueView::InitValue(JsValueRef jsValue, StoreType *store) {
|
|
1057
|
-
switch (GetValueType(jsValue)) {
|
|
1058
|
-
case JsUndefined:
|
|
1059
|
-
return facebook::jsi::Value::undefined();
|
|
1060
|
-
case JsNull:
|
|
1061
|
-
return facebook::jsi::Value::null();
|
|
1062
|
-
case JsNumber:
|
|
1063
|
-
return facebook::jsi::Value(NumberToDouble(jsValue));
|
|
1064
|
-
case JsString:
|
|
1065
|
-
return make<facebook::jsi::String>(new (store) ChakraPointerValueView(jsValue));
|
|
1066
|
-
case JsBoolean:
|
|
1067
|
-
return facebook::jsi::Value(BooleanToBool(jsValue));
|
|
1068
|
-
case JsSymbol:
|
|
1069
|
-
return make<facebook::jsi::Symbol>(new (store) ChakraPointerValueView(jsValue));
|
|
1070
|
-
case JsObject:
|
|
1071
|
-
case JsFunction:
|
|
1072
|
-
case JsError:
|
|
1073
|
-
case JsArray:
|
|
1074
|
-
case JsArrayBuffer:
|
|
1075
|
-
case JsTypedArray:
|
|
1076
|
-
case JsDataView:
|
|
1077
|
-
return make<facebook::jsi::Object>(new (store) ChakraPointerValueView(jsValue));
|
|
1078
|
-
default:
|
|
1079
|
-
throw facebook::jsi::JSINativeException("Unexpected JsValueType");
|
|
1080
|
-
}
|
|
1081
|
-
}
|
|
1082
|
-
|
|
1083
|
-
//===========================================================================
|
|
1084
|
-
// ChakraRuntime::JsiValueViewArray implementation
|
|
1085
|
-
//===========================================================================
|
|
1086
|
-
|
|
1087
|
-
ChakraRuntime::JsiValueViewArgs::JsiValueViewArgs(JsValueRef *args, size_t argCount) noexcept
|
|
1088
|
-
: m_size{argCount},
|
|
1089
|
-
m_heapPointerStore{m_size > MaxStackArgCount ? std::make_unique<JsiValueView::StoreType[]>(m_size) : nullptr},
|
|
1090
|
-
m_heapArgs{m_size > MaxStackArgCount ? std::make_unique<facebook::jsi::Value[]>(m_size) : nullptr} {
|
|
1091
|
-
JsiValueView::StoreType *const pointerStore =
|
|
1092
|
-
m_heapPointerStore ? m_heapPointerStore.get() : m_stackPointerStore.data();
|
|
1093
|
-
facebook::jsi::Value *const jsiArgs = m_heapArgs ? m_heapArgs.get() : m_stackArgs.data();
|
|
1094
|
-
for (size_t i = 0; i < m_size; ++i) {
|
|
1095
|
-
jsiArgs[i] = JsiValueView::InitValue(args[i], std::addressof(pointerStore[i]));
|
|
1096
|
-
}
|
|
1097
|
-
}
|
|
1098
|
-
|
|
1099
|
-
facebook::jsi::Value const *ChakraRuntime::JsiValueViewArgs::Data() const noexcept {
|
|
1100
|
-
return m_heapArgs ? m_heapArgs.get() : m_stackArgs.data();
|
|
1101
|
-
}
|
|
1102
|
-
|
|
1103
|
-
size_t ChakraRuntime::JsiValueViewArgs::Size() const noexcept {
|
|
1104
|
-
return m_size;
|
|
1105
|
-
}
|
|
1106
|
-
|
|
1107
|
-
//===========================================================================
|
|
1108
|
-
// ChakraRuntime::PropNameIDView implementation
|
|
1109
|
-
//===========================================================================
|
|
1110
|
-
|
|
1111
|
-
ChakraRuntime::PropNameIDView::PropNameIDView(JsPropertyIdRef propertyId) noexcept
|
|
1112
|
-
: m_propertyId{
|
|
1113
|
-
make<facebook::jsi::PropNameID>(new(std::addressof(m_pointerStore)) ChakraPointerValueView(propertyId))} {}
|
|
1114
|
-
|
|
1115
|
-
ChakraRuntime::PropNameIDView::~PropNameIDView() noexcept {}
|
|
1116
|
-
|
|
1117
|
-
ChakraRuntime::PropNameIDView::operator facebook::jsi::PropNameID const &() const noexcept {
|
|
1118
|
-
return m_propertyId;
|
|
1119
|
-
}
|
|
1120
|
-
|
|
1121
|
-
//===========================================================================
|
|
1122
|
-
// ChakraRuntime miscellaneous
|
|
1123
|
-
//===========================================================================
|
|
1124
|
-
|
|
1125
|
-
std::once_flag ChakraRuntime::s_runtimeVersionInitFlag;
|
|
1126
|
-
uint64_t ChakraRuntime::s_runtimeVersion = 0;
|
|
1127
|
-
|
|
1128
|
-
std::unique_ptr<facebook::jsi::Runtime> makeChakraRuntime(ChakraRuntimeArgs &&args) noexcept {
|
|
1129
|
-
return MakeSystemChakraRuntime(std::move(args));
|
|
1130
|
-
}
|
|
1131
|
-
|
|
1132
|
-
} // namespace Microsoft::JSI
|