@office-iss/react-native-win32 0.74.3 → 0.75.0-preview.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.flowconfig +9 -4
- package/CHANGELOG.json +563 -45
- package/CHANGELOG.md +169 -26
- package/Libraries/Animated/AnimatedImplementation.js +2 -0
- package/Libraries/Animated/NativeAnimatedHelper.js +4 -0
- package/Libraries/Animated/NativeAnimatedHelper.win32.js +4 -0
- package/Libraries/Animated/createAnimatedComponent.js +10 -4
- package/Libraries/Animated/useAnimatedProps.js +56 -28
- package/Libraries/BatchedBridge/MessageQueue.js +1 -0
- package/Libraries/Components/Button.js +10 -5
- package/Libraries/Components/Button.win32.js +1 -0
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +11 -2
- package/Libraries/Components/Pressable/Pressable.js +13 -6
- package/Libraries/Components/Pressable/Pressable.win32.js +13 -6
- package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +4 -0
- package/Libraries/Components/ScrollView/ScrollView.js +109 -29
- package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +6 -0
- package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +13 -1
- package/Libraries/Components/StatusBar/StatusBar.js +1 -21
- package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +0 -15
- package/Libraries/Components/TextInput/InputAccessoryView.js +10 -1
- package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +0 -12
- package/Libraries/Components/TextInput/TextInput.d.ts +0 -19
- package/Libraries/Components/TextInput/TextInput.js +20 -73
- package/Libraries/Components/TextInput/TextInput.win32.js +21 -75
- package/Libraries/Components/Touchable/Touchable.js +2 -2
- package/Libraries/Components/Touchable/TouchableHighlight.d.ts +4 -10
- package/Libraries/Components/Touchable/TouchableHighlight.js +3 -1
- package/Libraries/Components/Touchable/TouchableOpacity.d.ts +4 -32
- package/Libraries/Components/Touchable/TouchableOpacity.js +3 -1
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.d.ts +8 -0
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +117 -111
- package/Libraries/Components/View/ReactNativeStyleAttributes.js +6 -0
- package/Libraries/Components/View/ReactNativeViewAttributes.js +1 -0
- package/Libraries/Components/View/ReactNativeViewAttributes.win32.js +1 -0
- package/Libraries/Components/View/View.js +0 -11
- package/Libraries/Components/View/View.win32.js +0 -11
- package/Libraries/Components/View/ViewAccessibility.js +4 -4
- package/Libraries/Components/View/ViewAccessibility.win32.js +6 -6
- package/Libraries/Components/View/ViewPropTypes.d.ts +7 -49
- package/Libraries/Components/View/ViewPropTypes.js +7 -0
- package/Libraries/Components/View/ViewPropTypes.win32.js +7 -0
- package/Libraries/Core/Devtools/loadBundleFromServer.js +3 -3
- package/Libraries/Core/Devtools/loadBundleFromServer.win32.js +153 -0
- package/Libraries/Core/Devtools/parseErrorStack.js +5 -5
- package/Libraries/Core/Devtools/parseHermesStack.js +22 -16
- package/Libraries/Core/ErrorHandlers.js +116 -0
- package/Libraries/Core/ExceptionsManager.js +2 -2
- package/Libraries/Core/ReactNativeVersion.js +3 -3
- package/Libraries/Core/setUpDeveloperTools.js +3 -1
- package/Libraries/Core/setUpPerformance.js +6 -4
- package/Libraries/Core/setUpReactDevTools.js +70 -10
- package/Libraries/Core/setUpTimers.js +50 -31
- package/Libraries/Debugging/DebuggingOverlayRegistry.js +1 -1
- package/Libraries/Image/Image.android.js +23 -13
- package/Libraries/Image/Image.d.ts +14 -15
- package/Libraries/Image/Image.ios.js +21 -11
- package/Libraries/Image/Image.win32.js +5 -3
- package/Libraries/Image/ImageProps.js +16 -5
- package/Libraries/Image/ImageTypes.flow.js +7 -2
- package/Libraries/Image/ImageUtils.js +1 -0
- package/Libraries/Image/ImageViewNativeComponent.js +2 -1
- package/Libraries/Inspector/ElementBox.js +6 -3
- package/Libraries/Inspector/ElementProperties.js +1 -1
- package/Libraries/Interaction/TouchHistoryMath.js +4 -4
- package/Libraries/IntersectionObserver/IntersectionObserverManager.js +6 -26
- package/Libraries/JSInspector/NetworkAgent.js +1 -1
- package/Libraries/LogBox/Data/LogBoxData.js +39 -29
- package/Libraries/LogBox/Data/LogBoxLog.js +114 -2
- package/Libraries/LogBox/Data/parseLogBoxLog.js +168 -53
- package/Libraries/LogBox/LogBox.js +29 -12
- package/Libraries/LogBox/LogBoxNotificationContainer.js +4 -0
- package/Libraries/LogBox/UI/LogBoxInspector.js +8 -70
- package/Libraries/LogBox/UI/LogBoxInspectorBody.js +87 -0
- package/Libraries/LogBox/UI/LogBoxInspectorFooter.js +6 -42
- package/Libraries/LogBox/UI/LogBoxInspectorFooterButton.js +58 -0
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +5 -66
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.win32.js +8 -52
- package/Libraries/LogBox/UI/LogBoxInspectorHeaderButton.js +76 -0
- package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.js +8 -5
- package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.win32.js +8 -5
- package/Libraries/LogBox/UI/LogBoxNotification.js +13 -152
- package/Libraries/LogBox/UI/LogBoxNotificationCountBadge.js +63 -0
- package/Libraries/LogBox/UI/LogBoxNotificationDismissButton.js +67 -0
- package/Libraries/LogBox/UI/LogBoxNotificationMessage.js +57 -0
- package/Libraries/NativeComponent/BaseViewConfig.android.js +5 -0
- package/Libraries/NativeComponent/BaseViewConfig.ios.js +5 -0
- package/Libraries/NativeComponent/BaseViewConfig.win32.js +5 -0
- package/Libraries/NativeComponent/NativeComponentRegistry.js +12 -5
- package/Libraries/NativeComponent/StaticViewConfigValidator.js +3 -0
- package/Libraries/Network/XMLHttpRequest.js +5 -1
- package/Libraries/NewAppScreen/components/LearnMoreLinks.js +3 -3
- package/Libraries/Pressability/Pressability.js +3 -51
- package/Libraries/Pressability/Pressability.win32.js +3 -51
- package/Libraries/ReactNative/AppContainer-dev.js +3 -2
- package/Libraries/ReactNative/AppContainer-prod.js +2 -1
- package/Libraries/ReactNative/AppContainer.js +2 -0
- package/Libraries/ReactNative/AppRegistry.d.ts +7 -0
- package/Libraries/ReactNative/AppRegistry.js +10 -4
- package/Libraries/ReactNative/BridgelessUIManager.js +1 -21
- package/Libraries/ReactNative/FabricUIManager.js +0 -51
- package/Libraries/ReactNative/ReactFabricPublicInstance/warnForStyleProps.js +1 -0
- package/Libraries/ReactNative/RendererImplementation.js +20 -2
- package/Libraries/ReactNative/UIManager.d.ts +0 -21
- package/Libraries/ReactNative/UIManagerProperties.js +0 -3
- package/Libraries/ReactNative/__mocks__/FabricUIManager.js +5 -341
- package/Libraries/ReactNative/getNativeComponentAttributes.js +8 -8
- package/Libraries/ReactNative/renderApplication.js +3 -0
- package/Libraries/Renderer/implementations/ReactFabric-dev.js +15682 -27088
- package/Libraries/Renderer/implementations/ReactFabric-prod.js +5082 -4381
- package/Libraries/Renderer/implementations/ReactFabric-profiling.js +3480 -2571
- package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +15943 -27543
- package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +5303 -4606
- package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +3450 -2572
- package/Libraries/Renderer/shims/ReactFabric.js +2 -2
- package/Libraries/Renderer/shims/ReactFeatureFlags.js +2 -2
- package/Libraries/Renderer/shims/ReactNative.js +2 -3
- package/Libraries/Renderer/shims/ReactNativeTypes.js +24 -3
- package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +2 -2
- package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -2
- package/Libraries/Share/Share.d.ts +16 -10
- package/Libraries/Share/Share.js +14 -15
- package/Libraries/StyleSheet/StyleSheet.d.ts +1 -1
- package/Libraries/StyleSheet/StyleSheet.js +3 -10
- package/Libraries/StyleSheet/StyleSheet.win32.js +3 -10
- package/Libraries/StyleSheet/StyleSheetTypes.d.ts +21 -21
- package/Libraries/StyleSheet/StyleSheetTypes.js +24 -18
- package/Libraries/StyleSheet/flattenStyle.js +1 -0
- package/Libraries/StyleSheet/processFilter.js +132 -0
- package/Libraries/StyleSheet/processTransform.js +18 -3
- package/Libraries/Text/Text.js +151 -128
- package/Libraries/Text/Text.win32.js +163 -138
- package/Libraries/Text/TextNativeComponent.js +5 -4
- package/Libraries/Text/TextNativeComponent.win32.js +5 -4
- package/Libraries/Text/TextProps.js +6 -6
- package/Libraries/Text/TextProps.win32.js +6 -6
- package/Libraries/TurboModule/TurboModuleRegistry.js +2 -1
- package/Libraries/Types/CodegenTypes.js +3 -0
- package/Libraries/Utilities/{LoadingView.android.js → DevLoadingView.js} +33 -11
- package/Libraries/Utilities/Dimensions.js +1 -0
- package/Libraries/Utilities/Dimensions.win32.js +1 -0
- package/Libraries/Utilities/HMRClient.js +36 -8
- package/Libraries/Utilities/HMRClientProdShim.js +1 -0
- package/Libraries/Utilities/Platform.android.js +4 -4
- package/Libraries/Utilities/RCTLog.js +1 -0
- package/Libraries/Utilities/ReactNativeTestTools.js +12 -24
- package/Libraries/Utilities/verifyComponentAttributeEquivalence.js +11 -6
- package/Libraries/__tests__/ButtonWin32-test.js +7 -6
- package/Libraries/promiseRejectionTrackingOptions.js +1 -0
- package/jest/mockComponent.js +7 -0
- package/jest/renderer.js +25 -14
- package/jest/setup.js +19 -13
- package/jest.config.js +2 -1
- package/overrides.json +30 -29
- package/package.json +27 -25
- package/rn-get-polyfills.js +1 -0
- package/src/private/core/composeStyles.js +27 -0
- package/src/private/featureflags/ReactNativeFeatureFlags.js +93 -33
- package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +23 -4
- package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +56 -0
- package/src/private/fusebox/setUpFuseboxReactDevToolsDispatcher.js +108 -0
- package/src/private/specs/modules/NativeBlobModule.js +4 -2
- package/src/private/specs/modules/NativeDevSettings.js +1 -0
- package/src/private/specs/modules/NativePushNotificationManagerIOS.js +0 -4
- package/src/private/specs/modules/NativeUIManager.js +0 -7
- package/src/private/webapis/dom/geometry/DOMRectReadOnly.js +24 -24
- package/src/private/webapis/dom/nodes/ReactNativeElement.js +11 -14
- package/src/private/webapis/dom/nodes/ReadOnlyCharacterData.js +2 -3
- package/src/private/webapis/dom/nodes/ReadOnlyElement.js +24 -54
- package/src/private/webapis/dom/nodes/ReadOnlyNode.js +5 -13
- package/src/private/webapis/dom/nodes/specs/NativeDOM.js +468 -0
- package/src/private/webapis/dom/nodes/specs/__mocks__/NativeDOMMock.js +413 -0
- package/src/private/webapis/dom/oldstylecollections/DOMRectList.js +4 -4
- package/src/private/webapis/dom/oldstylecollections/HTMLCollection.js +4 -4
- package/src/private/webapis/dom/oldstylecollections/NodeList.js +5 -5
- package/src/private/webapis/idlecallbacks/specs/NativeIdleCallbacks.js +34 -0
- package/src/private/webapis/microtasks/specs/NativeMicrotasks.js +21 -0
- package/src/private/webapis/performance/EventCounts.js +1 -1
- package/src/private/webapis/performance/MemoryInfo.js +9 -9
- package/src/private/webapis/performance/Performance.js +10 -56
- package/src/private/webapis/performance/PerformanceObserver.js +30 -22
- package/src/private/webapis/performance/RawPerformanceEntry.js +2 -7
- package/src/private/webapis/performance/ReactNativeStartupTiming.js +18 -18
- package/src/private/webapis/performance/UserTiming.js +63 -0
- package/src/private/webapis/performance/{NativePerformance.js → specs/NativePerformance.js} +3 -2
- package/src/private/webapis/performance/{NativePerformanceObserver.js → specs/NativePerformanceObserver.js} +2 -2
- package/src/private/webapis/performance/{__mocks__ → specs/__mocks__}/NativePerformance.js +1 -1
- package/src/private/webapis/performance/{__mocks__ → specs/__mocks__}/NativePerformanceObserver.js +3 -4
- package/src-win/Libraries/Components/View/ViewPropTypes.d.ts +7 -49
- package/types/modules/globals.d.ts +4 -0
- package/Libraries/Components/ScrollView/ScrollView.win32.js +0 -1915
- package/Libraries/NativeModules/specs/NativeAnimationsDebugModule.js +0 -13
- package/Libraries/Utilities/LoadingView.ios.js +0 -50
- package/Libraries/Utilities/LoadingView.js +0 -16
- package/jest/ReactNativeInternalFeatureFlagsMock.js +0 -13
- package/src/private/featureflags/NativeReactNativeFeatureFlags.js +0 -44
- package/src/private/featureflags/__tests__/ReactNativeFeatureFlags-test.js +0 -92
- package/src/private/specs/modules/NativeAnimationsDebugModule.js +0 -20
- package/src/private/webapis/dom/oldstylecollections/__tests__/DOMRectList-test.js +0 -85
- package/src/private/webapis/dom/oldstylecollections/__tests__/HTMLCollection-test.js +0 -80
- package/src/private/webapis/dom/oldstylecollections/__tests__/NodeList-test.js +0 -161
- package/src/private/webapis/performance/__tests__/EventCounts-test.js +0 -116
- package/src/private/webapis/performance/__tests__/NativePerformanceMock-test.js +0 -82
- package/src/private/webapis/performance/__tests__/NativePerformanceObserverMock-test.js +0 -108
- package/src/private/webapis/performance/__tests__/Performance-test.js +0 -117
- package/src/private/webapis/performance/__tests__/PerformanceObserver-test.js +0 -208
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @flow strict-local
|
|
8
|
+
* @format
|
|
9
|
+
* @oncall react_native
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type {
|
|
13
|
+
InternalInstanceHandle,
|
|
14
|
+
Node,
|
|
15
|
+
} from '../../../../../../../Libraries/Renderer/shims/ReactNativeTypes';
|
|
16
|
+
import type {
|
|
17
|
+
MeasureInWindowOnSuccessCallback,
|
|
18
|
+
MeasureLayoutOnSuccessCallback,
|
|
19
|
+
MeasureOnSuccessCallback,
|
|
20
|
+
} from '../NativeDOM';
|
|
21
|
+
import typeof NativeDOM from '../NativeDOM';
|
|
22
|
+
|
|
23
|
+
import {
|
|
24
|
+
ensureHostNode,
|
|
25
|
+
fromNode,
|
|
26
|
+
getAncestorsInCurrentTree,
|
|
27
|
+
getNodeInCurrentTree,
|
|
28
|
+
} from '../../../../../../../Libraries/ReactNative/__mocks__/FabricUIManager';
|
|
29
|
+
|
|
30
|
+
function* dfs(node: ?Node): Iterator<Node> {
|
|
31
|
+
if (node == null) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
yield node;
|
|
36
|
+
|
|
37
|
+
for (const child of fromNode(node).children) {
|
|
38
|
+
yield* dfs(child);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function hasDisplayNone(node: Node): boolean {
|
|
43
|
+
const props = fromNode(node).props;
|
|
44
|
+
// Style is flattened when passed to native, so there's no style object.
|
|
45
|
+
// $FlowFixMe[prop-missing]
|
|
46
|
+
return props != null && props.display === 'none';
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const NativeDOMMock: NativeDOM = {
|
|
50
|
+
getBoundingClientRect: jest.fn(
|
|
51
|
+
(
|
|
52
|
+
node: Node,
|
|
53
|
+
includeTransform: boolean,
|
|
54
|
+
): [
|
|
55
|
+
/* x:*/ number,
|
|
56
|
+
/* y:*/ number,
|
|
57
|
+
/* width:*/ number,
|
|
58
|
+
/* height:*/ number,
|
|
59
|
+
] => {
|
|
60
|
+
ensureHostNode(node);
|
|
61
|
+
|
|
62
|
+
const nodeInCurrentTree = getNodeInCurrentTree(node);
|
|
63
|
+
const currentProps =
|
|
64
|
+
nodeInCurrentTree != null ? fromNode(nodeInCurrentTree).props : null;
|
|
65
|
+
if (currentProps == null) {
|
|
66
|
+
return [0, 0, 0, 0];
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const boundingClientRectForTests: ?{
|
|
70
|
+
x: number,
|
|
71
|
+
y: number,
|
|
72
|
+
width: number,
|
|
73
|
+
height: number,
|
|
74
|
+
} =
|
|
75
|
+
// $FlowExpectedError[prop-missing]
|
|
76
|
+
currentProps.__boundingClientRectForTests;
|
|
77
|
+
|
|
78
|
+
if (boundingClientRectForTests == null) {
|
|
79
|
+
return [0, 0, 0, 0];
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const {x, y, width, height} = boundingClientRectForTests;
|
|
83
|
+
return [x, y, width, height];
|
|
84
|
+
},
|
|
85
|
+
),
|
|
86
|
+
|
|
87
|
+
hasPointerCapture: jest.fn((node: Node, pointerId: number): boolean => false),
|
|
88
|
+
|
|
89
|
+
setPointerCapture: jest.fn((node: Node, pointerId: number): void => {}),
|
|
90
|
+
|
|
91
|
+
releasePointerCapture: jest.fn((node: Node, pointerId: number): void => {}),
|
|
92
|
+
|
|
93
|
+
getParentNode: jest.fn((node: Node): ?InternalInstanceHandle => {
|
|
94
|
+
const ancestors = getAncestorsInCurrentTree(node);
|
|
95
|
+
if (ancestors == null || ancestors.length - 2 < 0) {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const [parentOfParent, position] = ancestors[ancestors.length - 2];
|
|
100
|
+
const parentInCurrentTree = fromNode(parentOfParent).children[position];
|
|
101
|
+
return fromNode(parentInCurrentTree).instanceHandle;
|
|
102
|
+
}),
|
|
103
|
+
|
|
104
|
+
getChildNodes: jest.fn(
|
|
105
|
+
(node: Node): $ReadOnlyArray<InternalInstanceHandle> => {
|
|
106
|
+
const nodeInCurrentTree = getNodeInCurrentTree(node);
|
|
107
|
+
|
|
108
|
+
if (nodeInCurrentTree == null) {
|
|
109
|
+
return [];
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return fromNode(nodeInCurrentTree).children.map(
|
|
113
|
+
child => fromNode(child).instanceHandle,
|
|
114
|
+
);
|
|
115
|
+
},
|
|
116
|
+
),
|
|
117
|
+
|
|
118
|
+
isConnected: jest.fn((node: Node): boolean => {
|
|
119
|
+
return getNodeInCurrentTree(node) != null;
|
|
120
|
+
}),
|
|
121
|
+
|
|
122
|
+
getTextContent: jest.fn((node: Node): string => {
|
|
123
|
+
const nodeInCurrentTree = getNodeInCurrentTree(node);
|
|
124
|
+
|
|
125
|
+
let result = '';
|
|
126
|
+
|
|
127
|
+
if (nodeInCurrentTree == null) {
|
|
128
|
+
return result;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
for (const childNode of dfs(nodeInCurrentTree)) {
|
|
132
|
+
if (fromNode(childNode).viewName === 'RCTRawText') {
|
|
133
|
+
const props = fromNode(childNode).props;
|
|
134
|
+
// $FlowExpectedError[prop-missing]
|
|
135
|
+
const maybeString: ?string = props.text;
|
|
136
|
+
if (typeof maybeString === 'string') {
|
|
137
|
+
result += maybeString;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return result;
|
|
142
|
+
}),
|
|
143
|
+
|
|
144
|
+
compareDocumentPosition: jest.fn((node: Node, otherNode: Node): number => {
|
|
145
|
+
/* eslint-disable no-bitwise */
|
|
146
|
+
const ReadOnlyNode = require('../../ReadOnlyNode').default;
|
|
147
|
+
|
|
148
|
+
// Quick check for node vs. itself
|
|
149
|
+
if (fromNode(node).reactTag === fromNode(otherNode).reactTag) {
|
|
150
|
+
return 0;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (fromNode(node).rootTag !== fromNode(otherNode).rootTag) {
|
|
154
|
+
return ReadOnlyNode.DOCUMENT_POSITION_DISCONNECTED;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
const ancestors = getAncestorsInCurrentTree(node);
|
|
158
|
+
if (ancestors == null) {
|
|
159
|
+
return ReadOnlyNode.DOCUMENT_POSITION_DISCONNECTED;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const otherAncestors = getAncestorsInCurrentTree(otherNode);
|
|
163
|
+
if (otherAncestors == null) {
|
|
164
|
+
return ReadOnlyNode.DOCUMENT_POSITION_DISCONNECTED;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// Consume all common ancestors
|
|
168
|
+
let i = 0;
|
|
169
|
+
while (
|
|
170
|
+
i < ancestors.length &&
|
|
171
|
+
i < otherAncestors.length &&
|
|
172
|
+
ancestors[i][1] === otherAncestors[i][1]
|
|
173
|
+
) {
|
|
174
|
+
i++;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
if (i === ancestors.length) {
|
|
178
|
+
return (
|
|
179
|
+
ReadOnlyNode.DOCUMENT_POSITION_CONTAINED_BY |
|
|
180
|
+
ReadOnlyNode.DOCUMENT_POSITION_FOLLOWING
|
|
181
|
+
);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
if (i === otherAncestors.length) {
|
|
185
|
+
return (
|
|
186
|
+
ReadOnlyNode.DOCUMENT_POSITION_CONTAINS |
|
|
187
|
+
ReadOnlyNode.DOCUMENT_POSITION_PRECEDING
|
|
188
|
+
);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
if (ancestors[i][1] > otherAncestors[i][1]) {
|
|
192
|
+
return ReadOnlyNode.DOCUMENT_POSITION_PRECEDING;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
return ReadOnlyNode.DOCUMENT_POSITION_FOLLOWING;
|
|
196
|
+
}),
|
|
197
|
+
|
|
198
|
+
getOffset: jest.fn(
|
|
199
|
+
(
|
|
200
|
+
node: Node,
|
|
201
|
+
): [
|
|
202
|
+
/* offsetParent: */ ?InternalInstanceHandle,
|
|
203
|
+
/* offsetTop: */ number,
|
|
204
|
+
/* offsetLeft: */ number,
|
|
205
|
+
] => {
|
|
206
|
+
const ancestors = getAncestorsInCurrentTree(node);
|
|
207
|
+
if (ancestors == null) {
|
|
208
|
+
return [null, 0, 0];
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
const [parent, position] = ancestors[ancestors.length - 1];
|
|
212
|
+
const nodeInCurrentTree = fromNode(parent).children[position];
|
|
213
|
+
|
|
214
|
+
const currentProps =
|
|
215
|
+
nodeInCurrentTree != null ? fromNode(nodeInCurrentTree).props : null;
|
|
216
|
+
if (currentProps == null || hasDisplayNone(nodeInCurrentTree)) {
|
|
217
|
+
return [null, 0, 0];
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
const offsetForTests: ?{
|
|
221
|
+
top: number,
|
|
222
|
+
left: number,
|
|
223
|
+
} =
|
|
224
|
+
// $FlowExpectedError[prop-missing]
|
|
225
|
+
currentProps.__offsetForTests;
|
|
226
|
+
|
|
227
|
+
if (offsetForTests == null) {
|
|
228
|
+
return [null, 0, 0];
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
let currentIndex = ancestors.length - 1;
|
|
232
|
+
while (currentIndex >= 0 && !hasDisplayNone(ancestors[currentIndex][0])) {
|
|
233
|
+
currentIndex--;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
if (currentIndex >= 0) {
|
|
237
|
+
// The node or one of its ancestors have display: none
|
|
238
|
+
return [null, 0, 0];
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
return [
|
|
242
|
+
fromNode(parent).instanceHandle,
|
|
243
|
+
offsetForTests.top,
|
|
244
|
+
offsetForTests.left,
|
|
245
|
+
];
|
|
246
|
+
},
|
|
247
|
+
),
|
|
248
|
+
|
|
249
|
+
getScrollPosition: jest.fn(
|
|
250
|
+
(node: Node): [/* scrollLeft: */ number, /* scrollTop: */ number] => {
|
|
251
|
+
ensureHostNode(node);
|
|
252
|
+
|
|
253
|
+
const nodeInCurrentTree = getNodeInCurrentTree(node);
|
|
254
|
+
const currentProps =
|
|
255
|
+
nodeInCurrentTree != null ? fromNode(nodeInCurrentTree).props : null;
|
|
256
|
+
if (currentProps == null) {
|
|
257
|
+
return [0, 0];
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
const scrollForTests: ?{
|
|
261
|
+
scrollLeft: number,
|
|
262
|
+
scrollTop: number,
|
|
263
|
+
...
|
|
264
|
+
} =
|
|
265
|
+
// $FlowExpectedError[prop-missing]
|
|
266
|
+
currentProps.__scrollForTests;
|
|
267
|
+
|
|
268
|
+
if (scrollForTests == null) {
|
|
269
|
+
return [0, 0];
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
const {scrollLeft, scrollTop} = scrollForTests;
|
|
273
|
+
return [scrollLeft, scrollTop];
|
|
274
|
+
},
|
|
275
|
+
),
|
|
276
|
+
|
|
277
|
+
getScrollSize: jest.fn(
|
|
278
|
+
(node: Node): [/* scrollLeft: */ number, /* scrollTop: */ number] => {
|
|
279
|
+
ensureHostNode(node);
|
|
280
|
+
|
|
281
|
+
const nodeInCurrentTree = getNodeInCurrentTree(node);
|
|
282
|
+
const currentProps =
|
|
283
|
+
nodeInCurrentTree != null ? fromNode(nodeInCurrentTree).props : null;
|
|
284
|
+
if (currentProps == null) {
|
|
285
|
+
return [0, 0];
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
const scrollForTests: ?{
|
|
289
|
+
scrollWidth: number,
|
|
290
|
+
scrollHeight: number,
|
|
291
|
+
...
|
|
292
|
+
} =
|
|
293
|
+
// $FlowExpectedError[prop-missing]
|
|
294
|
+
currentProps.__scrollForTests;
|
|
295
|
+
|
|
296
|
+
if (scrollForTests == null) {
|
|
297
|
+
return [0, 0];
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
const {scrollWidth, scrollHeight} = scrollForTests;
|
|
301
|
+
return [scrollWidth, scrollHeight];
|
|
302
|
+
},
|
|
303
|
+
),
|
|
304
|
+
|
|
305
|
+
getInnerSize: jest.fn(
|
|
306
|
+
(node: Node): [/* width: */ number, /* height: */ number] => {
|
|
307
|
+
ensureHostNode(node);
|
|
308
|
+
|
|
309
|
+
const nodeInCurrentTree = getNodeInCurrentTree(node);
|
|
310
|
+
const currentProps =
|
|
311
|
+
nodeInCurrentTree != null ? fromNode(nodeInCurrentTree).props : null;
|
|
312
|
+
if (currentProps == null) {
|
|
313
|
+
return [0, 0];
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
const innerSizeForTests: ?{
|
|
317
|
+
width: number,
|
|
318
|
+
height: number,
|
|
319
|
+
...
|
|
320
|
+
} =
|
|
321
|
+
// $FlowExpectedError[prop-missing]
|
|
322
|
+
currentProps.__innerSizeForTests;
|
|
323
|
+
|
|
324
|
+
if (innerSizeForTests == null) {
|
|
325
|
+
return [0, 0];
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
const {width, height} = innerSizeForTests;
|
|
329
|
+
return [width, height];
|
|
330
|
+
},
|
|
331
|
+
),
|
|
332
|
+
|
|
333
|
+
getBorderWidth: jest.fn(
|
|
334
|
+
(
|
|
335
|
+
node: Node,
|
|
336
|
+
): [
|
|
337
|
+
/* topWidth: */ number,
|
|
338
|
+
/* rightWidth: */ number,
|
|
339
|
+
/* bottomWidth: */ number,
|
|
340
|
+
/* leftWidth: */ number,
|
|
341
|
+
] => {
|
|
342
|
+
ensureHostNode(node);
|
|
343
|
+
|
|
344
|
+
const nodeInCurrentTree = getNodeInCurrentTree(node);
|
|
345
|
+
const currentProps =
|
|
346
|
+
nodeInCurrentTree != null ? fromNode(nodeInCurrentTree).props : null;
|
|
347
|
+
if (currentProps == null) {
|
|
348
|
+
return [0, 0, 0, 0];
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
const borderSizeForTests: ?{
|
|
352
|
+
topWidth?: number,
|
|
353
|
+
rightWidth?: number,
|
|
354
|
+
bottomWidth?: number,
|
|
355
|
+
leftWidth?: number,
|
|
356
|
+
...
|
|
357
|
+
} =
|
|
358
|
+
// $FlowExpectedError[prop-missing]
|
|
359
|
+
currentProps.__borderSizeForTests;
|
|
360
|
+
|
|
361
|
+
if (borderSizeForTests == null) {
|
|
362
|
+
return [0, 0, 0, 0];
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
const {
|
|
366
|
+
topWidth = 0,
|
|
367
|
+
rightWidth = 0,
|
|
368
|
+
bottomWidth = 0,
|
|
369
|
+
leftWidth = 0,
|
|
370
|
+
} = borderSizeForTests;
|
|
371
|
+
return [topWidth, rightWidth, bottomWidth, leftWidth];
|
|
372
|
+
},
|
|
373
|
+
),
|
|
374
|
+
|
|
375
|
+
getTagName: jest.fn((node: Node): string => {
|
|
376
|
+
ensureHostNode(node);
|
|
377
|
+
return 'RN:' + fromNode(node).viewName;
|
|
378
|
+
}),
|
|
379
|
+
|
|
380
|
+
/**
|
|
381
|
+
* Legacy layout APIs
|
|
382
|
+
*/
|
|
383
|
+
|
|
384
|
+
measure: jest.fn((node: Node, callback: MeasureOnSuccessCallback): void => {
|
|
385
|
+
ensureHostNode(node);
|
|
386
|
+
|
|
387
|
+
callback(10, 10, 100, 100, 0, 0);
|
|
388
|
+
}),
|
|
389
|
+
|
|
390
|
+
measureInWindow: jest.fn(
|
|
391
|
+
(node: Node, callback: MeasureInWindowOnSuccessCallback): void => {
|
|
392
|
+
ensureHostNode(node);
|
|
393
|
+
|
|
394
|
+
callback(10, 10, 100, 100);
|
|
395
|
+
},
|
|
396
|
+
),
|
|
397
|
+
|
|
398
|
+
measureLayout: jest.fn(
|
|
399
|
+
(
|
|
400
|
+
node: Node,
|
|
401
|
+
relativeNode: Node,
|
|
402
|
+
onFail: () => void,
|
|
403
|
+
onSuccess: MeasureLayoutOnSuccessCallback,
|
|
404
|
+
): void => {
|
|
405
|
+
ensureHostNode(node);
|
|
406
|
+
ensureHostNode(relativeNode);
|
|
407
|
+
|
|
408
|
+
onSuccess(1, 1, 100, 100);
|
|
409
|
+
},
|
|
410
|
+
),
|
|
411
|
+
};
|
|
412
|
+
|
|
413
|
+
export default NativeDOMMock;
|
|
@@ -20,7 +20,7 @@ import {createValueIterator} from './ArrayLikeUtils';
|
|
|
20
20
|
|
|
21
21
|
// $FlowIssue[prop-missing] Flow doesn't understand [Symbol.iterator]() {} and thinks this class doesn't implement the Iterable interface.
|
|
22
22
|
export default class DOMRectList implements Iterable<DOMRectReadOnly> {
|
|
23
|
-
|
|
23
|
+
#length: number;
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
26
|
* Use `createDOMRectList` to create instances of this class.
|
|
@@ -38,15 +38,15 @@ export default class DOMRectList implements Iterable<DOMRectReadOnly> {
|
|
|
38
38
|
});
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
this
|
|
41
|
+
this.#length = elements.length;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
get length(): number {
|
|
45
|
-
return this
|
|
45
|
+
return this.#length;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
item(index: number): DOMRectReadOnly | null {
|
|
49
|
-
if (index < 0 || index >= this
|
|
49
|
+
if (index < 0 || index >= this.#length) {
|
|
50
50
|
return null;
|
|
51
51
|
}
|
|
52
52
|
|
|
@@ -19,7 +19,7 @@ import {createValueIterator} from './ArrayLikeUtils';
|
|
|
19
19
|
|
|
20
20
|
// $FlowIssue[prop-missing] Flow doesn't understand [Symbol.iterator]() {} and thinks this class doesn't implement the Iterable<T> interface.
|
|
21
21
|
export default class HTMLCollection<T> implements Iterable<T>, ArrayLike<T> {
|
|
22
|
-
|
|
22
|
+
#length: number;
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
25
|
* Use `createHTMLCollection` to create instances of this class.
|
|
@@ -37,15 +37,15 @@ export default class HTMLCollection<T> implements Iterable<T>, ArrayLike<T> {
|
|
|
37
37
|
});
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
this
|
|
40
|
+
this.#length = elements.length;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
get length(): number {
|
|
44
|
-
return this
|
|
44
|
+
return this.#length;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
item(index: number): T | null {
|
|
48
|
-
if (index < 0 || index >= this
|
|
48
|
+
if (index < 0 || index >= this.#length) {
|
|
49
49
|
return null;
|
|
50
50
|
}
|
|
51
51
|
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
|
|
24
24
|
// $FlowIssue[prop-missing] Flow doesn't understand [Symbol.iterator]() {} and thinks this class doesn't implement the Iterable<T> interface.
|
|
25
25
|
export default class NodeList<T> implements Iterable<T>, ArrayLike<T> {
|
|
26
|
-
|
|
26
|
+
#length: number;
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
29
|
* Use `createNodeList` to create instances of this class.
|
|
@@ -38,15 +38,15 @@ export default class NodeList<T> implements Iterable<T>, ArrayLike<T> {
|
|
|
38
38
|
writable: false,
|
|
39
39
|
});
|
|
40
40
|
}
|
|
41
|
-
this
|
|
41
|
+
this.#length = elements.length;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
get length(): number {
|
|
45
|
-
return this
|
|
45
|
+
return this.#length;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
item(index: number): T | null {
|
|
49
|
-
if (index < 0 || index >= this
|
|
49
|
+
if (index < 0 || index >= this.#length) {
|
|
50
50
|
return null;
|
|
51
51
|
}
|
|
52
52
|
|
|
@@ -70,7 +70,7 @@ export default class NodeList<T> implements Iterable<T>, ArrayLike<T> {
|
|
|
70
70
|
// eslint-disable-next-line consistent-this
|
|
71
71
|
const arrayLike: ArrayLike<T> = this;
|
|
72
72
|
|
|
73
|
-
for (let index = 0; index < this
|
|
73
|
+
for (let index = 0; index < this.#length; index++) {
|
|
74
74
|
if (thisArg == null) {
|
|
75
75
|
callbackFn(arrayLike[index], index, this);
|
|
76
76
|
} else {
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @flow strict
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type {TurboModule} from '../../../../../Libraries/TurboModule/RCTExport';
|
|
12
|
+
|
|
13
|
+
import * as TurboModuleRegistry from '../../../../../Libraries/TurboModule/TurboModuleRegistry';
|
|
14
|
+
|
|
15
|
+
export type RequestIdleCallbackOptions = {
|
|
16
|
+
timeout?: number,
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export type IdleDeadline = {
|
|
20
|
+
didTimeout: boolean,
|
|
21
|
+
timeRemaining: () => mixed,
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export interface Spec extends TurboModule {
|
|
25
|
+
+requestIdleCallback: (
|
|
26
|
+
callback: (idleDeadline: IdleDeadline) => mixed,
|
|
27
|
+
options?: RequestIdleCallbackOptions,
|
|
28
|
+
) => mixed;
|
|
29
|
+
+cancelIdleCallback: (handle: mixed) => void;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export default (TurboModuleRegistry.getEnforcing<Spec>(
|
|
33
|
+
'NativeIdleCallbacksCxx',
|
|
34
|
+
): Spec);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @flow strict
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type {TurboModule} from '../../../../../Libraries/TurboModule/RCTExport';
|
|
12
|
+
|
|
13
|
+
import * as TurboModuleRegistry from '../../../../../Libraries/TurboModule/TurboModuleRegistry';
|
|
14
|
+
|
|
15
|
+
export interface Spec extends TurboModule {
|
|
16
|
+
+queueMicrotask: (callback: () => mixed) => void;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export default (TurboModuleRegistry.getEnforcing<Spec>(
|
|
20
|
+
'NativeMicrotasksCxx',
|
|
21
|
+
): Spec);
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import NativePerformanceObserver from './NativePerformanceObserver';
|
|
12
11
|
import {warnNoNativePerformanceObserver} from './PerformanceObserver';
|
|
12
|
+
import NativePerformanceObserver from './specs/NativePerformanceObserver';
|
|
13
13
|
|
|
14
14
|
type EventCountsForEachCallbackType =
|
|
15
15
|
| (() => void)
|
|
@@ -19,15 +19,15 @@ type MemoryInfoLike = {
|
|
|
19
19
|
|
|
20
20
|
// Read-only object with JS memory information. This is returned by the performance.memory API.
|
|
21
21
|
export default class MemoryInfo {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
#jsHeapSizeLimit: ?number;
|
|
23
|
+
#totalJSHeapSize: ?number;
|
|
24
|
+
#usedJSHeapSize: ?number;
|
|
25
25
|
|
|
26
26
|
constructor(memoryInfo: ?MemoryInfoLike) {
|
|
27
27
|
if (memoryInfo != null) {
|
|
28
|
-
this
|
|
29
|
-
this
|
|
30
|
-
this
|
|
28
|
+
this.#jsHeapSizeLimit = memoryInfo.jsHeapSizeLimit;
|
|
29
|
+
this.#totalJSHeapSize = memoryInfo.totalJSHeapSize;
|
|
30
|
+
this.#usedJSHeapSize = memoryInfo.usedJSHeapSize;
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
|
|
@@ -35,20 +35,20 @@ export default class MemoryInfo {
|
|
|
35
35
|
* The maximum size of the heap, in bytes, that is available to the context
|
|
36
36
|
*/
|
|
37
37
|
get jsHeapSizeLimit(): ?number {
|
|
38
|
-
return this
|
|
38
|
+
return this.#jsHeapSizeLimit;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
/**
|
|
42
42
|
* The total allocated heap size, in bytes
|
|
43
43
|
*/
|
|
44
44
|
get totalJSHeapSize(): ?number {
|
|
45
|
-
return this
|
|
45
|
+
return this.#totalJSHeapSize;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
/**
|
|
49
49
|
* The currently active segment of JS heap, in bytes.
|
|
50
50
|
*/
|
|
51
51
|
get usedJSHeapSize(): ?number {
|
|
52
|
-
return this
|
|
52
|
+
return this.#usedJSHeapSize;
|
|
53
53
|
}
|
|
54
54
|
}
|