@office-iss/react-native-win32 0.72.6 → 0.73.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 +15 -4
- package/CHANGELOG.json +531 -87
- package/CHANGELOG.md +213 -48
- package/IntegrationTests/PromiseTest.js +1 -0
- package/IntegrationTests/websocket_integration_test_server.js +1 -1
- package/Libraries/Animated/Animated.js +1 -1
- package/Libraries/Animated/AnimatedImplementation.js +1 -1
- package/Libraries/Animated/NativeAnimatedHelper.js +14 -10
- package/Libraries/Animated/NativeAnimatedHelper.win32.js +16 -12
- package/Libraries/Animated/NativeAnimatedModule.js +6 -2
- package/Libraries/Animated/NativeAnimatedTurboModule.js +7 -4
- package/Libraries/Animated/animations/Animation.js +57 -3
- package/Libraries/Animated/animations/DecayAnimation.js +9 -0
- package/Libraries/Animated/animations/SpringAnimation.js +8 -0
- package/Libraries/Animated/animations/TimingAnimation.js +8 -0
- package/Libraries/Animated/components/AnimatedFlatList.js +2 -1
- package/Libraries/Animated/components/AnimatedScrollView.js +2 -0
- package/Libraries/Animated/components/AnimatedSectionList.js +2 -1
- package/Libraries/Animated/createAnimatedComponent.js +1 -0
- package/Libraries/Animated/nodes/AnimatedColor.js +1 -1
- package/Libraries/Animated/nodes/AnimatedObject.js +146 -0
- package/Libraries/Animated/nodes/AnimatedProps.js +19 -7
- package/Libraries/Animated/nodes/AnimatedStyle.js +29 -55
- package/Libraries/Animated/nodes/AnimatedValueXY.js +3 -17
- package/Libraries/Animated/shouldUseTurboAnimatedModule.js +17 -0
- package/Libraries/Animated/useAnimatedProps.js +9 -10
- package/Libraries/AppState/AppState.d.ts +1 -1
- package/Libraries/AppState/NativeAppState.js +8 -4
- package/Libraries/BatchedBridge/MessageQueue.js +45 -36
- package/Libraries/Blob/Blob.js +6 -2
- package/Libraries/Blob/BlobManager.js +9 -10
- package/Libraries/Blob/BlobRegistry.js +14 -9
- package/Libraries/Blob/File.js +1 -1
- package/Libraries/Blob/FileReader.js +1 -2
- package/Libraries/Components/Button/ButtonWin32.Props.d.ts +1 -1
- package/Libraries/Components/Button/ButtonWin32.Props.js.map +1 -1
- package/Libraries/Components/Button/ButtonWin32.d.ts +1 -1
- package/Libraries/Components/Button/ButtonWin32.js +1 -4
- package/Libraries/Components/Button/ButtonWin32.js.map +1 -1
- package/Libraries/Components/Clipboard/Clipboard.d.ts +4 -4
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +3 -1
- package/Libraries/Components/EnterString.win32.d.ts +1 -1
- package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +26 -6
- package/Libraries/Components/Pressable/Pressable.js +3 -2
- package/Libraries/Components/Pressable/Pressable.win32.js +4 -3
- package/Libraries/Components/Pressable/useAndroidRippleForView.js +1 -1
- package/Libraries/Components/SafeAreaView/SafeAreaView.js +7 -7
- package/Libraries/Components/SafeAreaView/SafeAreaView.win32.js +7 -8
- package/Libraries/Components/ScrollView/ScrollView.js +3 -1
- package/Libraries/Components/ScrollView/ScrollView.win32.js +3 -1
- package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +39 -46
- package/Libraries/Components/Switch/Switch.js +1 -0
- package/Libraries/Components/Text/TextWin32.d.ts +1 -1
- package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +1 -0
- package/Libraries/Components/TextInput/TextInput.d.ts +49 -7
- package/Libraries/Components/TextInput/TextInput.flow.js +43 -10
- package/Libraries/Components/TextInput/TextInput.js +62 -10
- package/Libraries/Components/TextInput/TextInput.win32.js +953 -206
- package/Libraries/Components/TextInput/Win32TextInputNativeComponent.js +23 -0
- package/Libraries/Components/ToastAndroid/{ToastAndroid.ios.js → ToastAndroid.js} +9 -1
- package/Libraries/Components/ToastAndroid/ToastAndroid.win32.js +9 -1
- package/Libraries/Components/Touchable/Tests/TouchableWin32Test.js +2 -2
- package/Libraries/Components/Touchable/Tests/TouchableWin32Test.js.map +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 +4 -1
- package/Libraries/Components/Touchable/TouchableWin32.d.ts +1 -1
- package/Libraries/Components/Touchable/TouchableWin32.js.map +1 -1
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +1 -0
- package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlay.js +16 -6
- package/Libraries/Components/View/ReactNativeStyleAttributes.js +9 -0
- package/Libraries/Components/View/ReactNativeViewAttributes.js +1 -0
- package/Libraries/Components/View/ReactNativeViewAttributes.win32.js +1 -0
- package/Libraries/Components/View/View.js +46 -32
- package/Libraries/Components/View/View.win32.js +37 -6
- package/Libraries/Components/View/ViewAccessibility.d.ts +8 -2
- package/Libraries/Components/View/ViewNativeComponent.js +1 -0
- package/Libraries/Components/View/ViewPropTypes.js +18 -3
- package/Libraries/Components/View/ViewPropTypes.win32.js +30 -4
- package/Libraries/Components/View/ViewWin32.js +3 -2
- package/Libraries/Core/Devtools/loadBundleFromServer.js +152 -0
- package/Libraries/Core/Devtools/symbolicateStackTrace.js +2 -1
- package/Libraries/Core/ExceptionsManager.js +16 -7
- package/Libraries/Core/ExtendedError.js +12 -0
- package/Libraries/Core/ReactNativeVersion.js +3 -3
- package/Libraries/Core/ReactNativeVersionCheck.js +0 -2
- package/Libraries/Core/ReactNativeVersionCheck.win32.js +0 -2
- package/Libraries/Core/__mocks__/NativeExceptionsManager.js +20 -0
- package/Libraries/Core/setUpDeveloperTools.js +5 -1
- package/Libraries/Core/setUpIntersectionObserver.js +16 -0
- package/Libraries/{Components/ProgressBarAndroid/ProgressBarAndroid.ios.js → Core/setUpMutationObserver.js} +6 -2
- package/Libraries/Core/setUpPerformance.js +6 -13
- package/Libraries/Core/setUpPerformanceObserver.js +16 -0
- package/Libraries/Core/setUpRegeneratorRuntime.js +4 -2
- package/Libraries/DOM/Nodes/ReactNativeElement.js +135 -18
- package/Libraries/DOM/Nodes/ReadOnlyCharacterData.js +72 -0
- package/Libraries/DOM/Nodes/ReadOnlyElement.js +209 -21
- package/Libraries/DOM/Nodes/ReadOnlyNode.js +206 -17
- package/Libraries/DOM/Nodes/ReadOnlyText.js +30 -0
- package/Libraries/DOM/Nodes/Utilities/Traversal.js +54 -0
- package/Libraries/EventEmitter/NativeEventEmitter.d.ts +0 -6
- package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +15 -4
- package/Libraries/Image/Image.android.js +8 -2
- package/Libraries/Image/Image.d.ts +1 -1
- package/Libraries/Image/Image.ios.js +4 -1
- package/Libraries/Image/Image.win32.js +6 -3
- package/Libraries/Image/ImageBackground.js +3 -0
- package/Libraries/Image/resolveAssetSource.win32.js +1 -1
- package/Libraries/Inspector/DevtoolsOverlay.js +6 -3
- package/Libraries/Inspector/NetworkOverlay.js +2 -2
- package/Libraries/Interaction/JSEventLoopWatchdog.js +1 -5
- package/Libraries/Interaction/PanResponder.js +1 -4
- package/Libraries/IntersectionObserver/IntersectionObserver.js +252 -0
- package/Libraries/IntersectionObserver/IntersectionObserverEntry.js +140 -0
- package/Libraries/IntersectionObserver/IntersectionObserverManager.js +221 -0
- package/Libraries/IntersectionObserver/NativeIntersectionObserver.js +41 -0
- package/Libraries/IntersectionObserver/__mocks__/NativeIntersectionObserver.js +162 -0
- package/Libraries/LayoutAnimation/LayoutAnimation.js +1 -1
- package/Libraries/Lists/FlatList.d.ts +2 -1
- package/Libraries/Lists/FlatList.js +15 -5
- package/Libraries/Lists/SectionList.js +4 -0
- package/Libraries/LogBox/Data/LogBoxLog.js +4 -1
- package/Libraries/LogBox/Data/LogBoxSymbolication.js +5 -2
- package/Libraries/LogBox/Data/parseLogBoxLog.js +57 -20
- package/Libraries/LogBox/UI/AnsiHighlight.js +1 -1
- package/Libraries/LogBox/UI/LogBoxInspectorFooter.js +24 -31
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +1 -1
- package/Libraries/LogBox/UI/LogBoxMessage.js +4 -7
- package/Libraries/MutationObserver/MutationObserver.js +184 -0
- package/Libraries/MutationObserver/MutationObserverManager.js +218 -0
- package/Libraries/MutationObserver/MutationRecord.js +82 -0
- package/Libraries/MutationObserver/NativeMutationObserver.js +58 -0
- package/Libraries/MutationObserver/__mocks__/NativeMutationObserver.js +327 -0
- package/Libraries/NativeComponent/BaseViewConfig.android.js +18 -3
- package/Libraries/NativeComponent/BaseViewConfig.ios.js +33 -0
- package/Libraries/NativeComponent/BaseViewConfig.win32.js +33 -0
- package/Libraries/NativeComponent/NativeComponentRegistry.js +3 -5
- package/Libraries/NativeModules/specs/NativeSourceCode.js +6 -6
- package/Libraries/Network/RCTNetworking.android.js +2 -1
- package/Libraries/Network/XMLHttpRequest.js +1 -1
- package/Libraries/NewAppScreen/components/DebugInstructions.js +4 -4
- package/Libraries/NewAppScreen/components/LearnMoreLinks.js +9 -2
- package/Libraries/Performance/QuickPerformanceLogger.js +1 -1
- package/Libraries/PermissionsAndroid/NativePermissionsAndroid.js +1 -0
- package/Libraries/PermissionsAndroid/PermissionsAndroid.d.ts +1 -0
- package/Libraries/PermissionsAndroid/PermissionsAndroid.js +3 -1
- package/Libraries/Pressability/Pressability.js +28 -3
- package/Libraries/Pressability/Pressability.win32.js +30 -5
- package/Libraries/ReactNative/AppContainer.js +2 -3
- package/Libraries/ReactNative/AppRegistry.d.ts +0 -5
- package/Libraries/ReactNative/AppRegistry.js +66 -53
- package/Libraries/ReactNative/BridgelessUIManager.js +38 -9
- package/Libraries/ReactNative/FabricUIManager.js +143 -34
- package/Libraries/ReactNative/I18nManager.js +5 -11
- package/Libraries/ReactNative/NativeI18nManager.js +7 -5
- package/Libraries/ReactNative/PaperUIManager.win32.js +2 -2
- package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +151 -0
- package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance.js +81 -0
- package/Libraries/ReactNative/ReactFabricPublicInstance/ReactNativeAttributePayload.js +492 -0
- package/Libraries/ReactNative/ReactFabricPublicInstance/warnForStyleProps.js +32 -0
- package/Libraries/ReactNative/ReactNativeFeatureFlags.js +19 -3
- package/Libraries/ReactNative/UIManager.js +8 -0
- package/Libraries/ReactNative/__mocks__/FabricUIManager.js +648 -0
- package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +38 -2
- package/Libraries/Renderer/implementations/ReactFabric-dev.js +27 -27
- package/Libraries/Renderer/implementations/ReactFabric-prod.js +3 -3
- package/Libraries/Renderer/implementations/ReactFabric-profiling.js +3 -3
- package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +27 -27
- package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +3 -3
- package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +3 -3
- package/Libraries/Renderer/shims/ReactFabric.js +5 -6
- package/Libraries/Renderer/shims/ReactFeatureFlags.js +2 -3
- package/Libraries/Renderer/shims/ReactNative.js +2 -3
- package/Libraries/Renderer/shims/ReactNativeTypes.js +35 -17
- package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +3 -3
- package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -3
- package/Libraries/Settings/{Settings.android.js → Settings.js} +4 -4
- package/Libraries/Share/Share.d.ts +3 -9
- package/Libraries/StyleSheet/PlatformColorValueTypes.android.js +9 -4
- package/Libraries/StyleSheet/PlatformColorValueTypes.ios.js +28 -13
- package/Libraries/StyleSheet/PlatformColorValueTypes.win32.js +14 -4
- package/Libraries/StyleSheet/PlatformColorValueTypesIOS.ios.js +1 -1
- package/Libraries/StyleSheet/PlatformColorValueTypesWin32.d.ts +1 -1
- package/Libraries/StyleSheet/StyleSheet.d.ts +10 -1
- package/Libraries/StyleSheet/StyleSheet.js +3 -0
- package/Libraries/StyleSheet/StyleSheet.win32.js +3 -0
- package/Libraries/StyleSheet/StyleSheetTypes.d.ts +31 -17
- package/Libraries/StyleSheet/StyleSheetTypes.js +90 -6
- package/Libraries/StyleSheet/flattenStyle.js +4 -0
- package/Libraries/StyleSheet/private/_TransformStyle.js +16 -2
- package/Libraries/StyleSheet/processColor.js +1 -2
- package/Libraries/StyleSheet/processTransformOrigin.js +136 -0
- package/Libraries/StyleSheet/splitLayoutProps.js +1 -0
- package/Libraries/Text/Text.d.ts +5 -5
- package/Libraries/Text/Text.js +17 -10
- package/Libraries/Text/Text.win32.js +354 -0
- package/Libraries/Text/TextProps.win32.js +281 -0
- package/Libraries/TurboModule/TurboModuleRegistry.js +47 -7
- package/Libraries/TurboModule/samples/NativeSampleTurboModule.js +6 -0
- package/Libraries/Types/CoreEventTypes.d.ts +5 -2
- package/Libraries/Utilities/GlobalPerformanceLogger.js +2 -12
- package/Libraries/Utilities/NativeDeviceInfo.js +8 -9
- package/Libraries/Utilities/NativePlatformConstantsAndroid.js +23 -18
- package/Libraries/Utilities/NativePlatformConstantsIOS.js +16 -13
- package/Libraries/Utilities/NativePlatformConstantsWin.js +13 -10
- package/Libraries/Utilities/PerformanceLoggerContext.js +1 -1
- package/Libraries/Utilities/Platform.android.js +12 -8
- package/Libraries/Utilities/Platform.d.ts +1 -0
- package/Libraries/Utilities/Platform.flow.js +84 -0
- package/Libraries/Utilities/Platform.flow.win32.js +111 -0
- package/Libraries/Utilities/Platform.ios.js +12 -8
- package/Libraries/Utilities/Platform.win32.js +12 -8
- package/Libraries/Utilities/PolyfillFunctions.js +1 -1
- package/Libraries/Utilities/ReactNativeTestTools.js +1 -2
- package/Libraries/Utilities/SceneTracker.js +1 -1
- package/Libraries/Utilities/createPerformanceLogger.js +63 -32
- package/Libraries/Utilities/useColorScheme.js +7 -8
- package/Libraries/WebPerformance/MemoryInfo.js +1 -1
- package/Libraries/WebPerformance/NativePerformance.js +3 -8
- package/Libraries/WebPerformance/NativePerformanceObserver.js +4 -0
- package/Libraries/WebPerformance/Performance.js +42 -15
- package/Libraries/WebPerformance/PerformanceEntry.js +14 -6
- package/Libraries/WebPerformance/PerformanceEventTiming.js +18 -1
- package/Libraries/WebPerformance/ReactNativeStartupTiming.js +40 -14
- package/Libraries/WebPerformance/__mocks__/NativePerformance.js +4 -2
- package/Libraries/WebPerformance/__mocks__/NativePerformanceObserver.js +21 -3
- package/Libraries/promiseRejectionTrackingOptions.js +1 -3
- package/Libraries/vendor/emitter/EventEmitter.js +20 -18
- package/flow/global.js +1 -3
- package/flow/jest.js +5 -1
- package/{Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.ios.js → jest/ReactNativeInternalFeatureFlagsMock.js} +2 -1
- package/jest/__tests__/setup-test.js +18 -0
- package/jest/mockModal.js +6 -4
- package/jest/setup.js +61 -30
- package/jest.config.js +1 -1
- package/just-task.js +1 -0
- package/overrides.json +51 -46
- package/package.json +35 -33
- package/src/Libraries/Components/Button/ButtonWin32.Props.ts +1 -1
- package/src/Libraries/Components/Button/ButtonWin32.tsx +0 -2
- package/src/Libraries/Components/Touchable/Tests/TouchableWin32Test.tsx +2 -2
- package/src/Libraries/Components/Touchable/TouchableWin32.tsx +1 -1
- package/src/Libraries/Components/View/ViewAccessibility.d.ts +8 -2
- package/src/Libraries/StyleSheet/PlatformColorValueTypesWin32.d.ts +1 -1
- package/types/experimental.d.ts +44 -0
- package/types/index.d.ts +2 -1
- package/types/modules/Devtools.d.ts +1 -0
- package/types/modules/globals.d.ts +16 -1
- package/IntegrationTests/BUCK +0 -32
- package/IntegrationTests/PropertiesUpdateTest.js +0 -29
- package/IntegrationTests/RCTRootViewIntegrationTestApp.js +0 -86
- package/IntegrationTests/ReactContentSizeUpdateTest.js +0 -89
- package/IntegrationTests/SizeFlexibilityUpdateTest.js +0 -106
- package/Libraries/Components/TextInput/TextInput.Types.win32.d.ts +0 -51
- package/Libraries/Components/TextInput/TextInput.Types.win32.js +0 -3
- package/Libraries/Components/TextInput/TextInput.Types.win32.js.map +0 -1
- package/Libraries/Utilities/AcessibilityMapping.js +0 -154
- package/Libraries/Utilities/AcessibilityMapping.win32.js +0 -156
- package/Libraries/Utilities/NativeDevSplitBundleLoader.js +0 -19
- package/Libraries/Utilities/useColorScheme.win32.js +0 -26
- package/flow/use-sync-external-store.js +0 -20
- package/flow-typed/npm/base64-js_v1.x.x.js +0 -12
- package/flow-typed/npm/glob_v7.x.x.js +0 -79
- package/flow-typed/npm/pretty-format_v26.x.x.js +0 -49
- package/flow-typed/npm/promise_v8.x.x.js +0 -30
- package/flow-typed/npm/react-dom_v17.x.x.js +0 -139
- package/flow-typed/npm/react-test-renderer_v16.x.x.js +0 -79
- package/flow-typed/npm/stacktrace-parser_v0.1.x.js +0 -17
- package/flow-typed/npm/yargs_v17.x.x.js +0 -341
- package/src/Libraries/Components/TextInput/TextInput.Types.win32.ts +0 -68
- /package/Libraries/{Renderer/public → ReactNative/ReactFabricPublicInstance}/ReactFabricPublicInstanceUtils.js +0 -0
|
@@ -0,0 +1,327 @@
|
|
|
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
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* This is a mock of `NativeMutationObserver` implementing the same logic as the
|
|
13
|
+
* native module and integrating with the existing mock for `FabricUIManager`.
|
|
14
|
+
* This allows us to test all the JavaScript code for IntersectionObserver in
|
|
15
|
+
* JavaScript as an integration test using only public APIs.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import type {NodeSet} from '../../ReactNative/FabricUIManager';
|
|
19
|
+
import type {RootTag} from '../../ReactNative/RootTag';
|
|
20
|
+
import type {
|
|
21
|
+
InternalInstanceHandle,
|
|
22
|
+
Node,
|
|
23
|
+
} from '../../Renderer/shims/ReactNativeTypes';
|
|
24
|
+
import type {
|
|
25
|
+
MutationObserverId,
|
|
26
|
+
NativeMutationObserverObserveOptions,
|
|
27
|
+
NativeMutationRecord,
|
|
28
|
+
Spec,
|
|
29
|
+
} from '../NativeMutationObserver';
|
|
30
|
+
|
|
31
|
+
import ReadOnlyNode from '../../DOM/Nodes/ReadOnlyNode';
|
|
32
|
+
import {
|
|
33
|
+
type NodeMock,
|
|
34
|
+
type UIManagerCommitHook,
|
|
35
|
+
fromNode,
|
|
36
|
+
getFabricUIManager,
|
|
37
|
+
getNodeInChildSet,
|
|
38
|
+
} from '../../ReactNative/__mocks__/FabricUIManager';
|
|
39
|
+
import invariant from 'invariant';
|
|
40
|
+
import nullthrows from 'nullthrows';
|
|
41
|
+
|
|
42
|
+
let pendingRecords: Array<NativeMutationRecord> = [];
|
|
43
|
+
let callback: ?() => void;
|
|
44
|
+
let getPublicInstance: ?(instanceHandle: InternalInstanceHandle) => mixed;
|
|
45
|
+
let observersByRootTag: Map<
|
|
46
|
+
RootTag,
|
|
47
|
+
Map<MutationObserverId, {deep: Set<Node>, shallow: Set<Node>}>,
|
|
48
|
+
> = new Map();
|
|
49
|
+
|
|
50
|
+
const FabricUIManagerMock = nullthrows(getFabricUIManager());
|
|
51
|
+
|
|
52
|
+
function getMockDataFromShadowNode(node: mixed): NodeMock {
|
|
53
|
+
// $FlowExpectedError[incompatible-call]
|
|
54
|
+
return fromNode(node);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function castToNode(node: mixed): Node {
|
|
58
|
+
// $FlowExpectedError[incompatible-return]
|
|
59
|
+
return node;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const NativeMutationMock = {
|
|
63
|
+
observe: (options: NativeMutationObserverObserveOptions): void => {
|
|
64
|
+
const targetShadowNode = castToNode(options.targetShadowNode);
|
|
65
|
+
const rootTag = getMockDataFromShadowNode(options.targetShadowNode).rootTag;
|
|
66
|
+
|
|
67
|
+
let observers = observersByRootTag.get(rootTag);
|
|
68
|
+
if (observers == null) {
|
|
69
|
+
observers = new Map();
|
|
70
|
+
observersByRootTag.set(rootTag, observers);
|
|
71
|
+
}
|
|
72
|
+
let observations = observers.get(options.mutationObserverId);
|
|
73
|
+
if (observations == null) {
|
|
74
|
+
observations = {deep: new Set(), shallow: new Set()};
|
|
75
|
+
observers.set(options.mutationObserverId, observations);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const isTargetBeingObserved =
|
|
79
|
+
observations.deep.has(targetShadowNode) ||
|
|
80
|
+
observations.shallow.has(targetShadowNode);
|
|
81
|
+
invariant(!isTargetBeingObserved, 'unexpected duplicate call to observe');
|
|
82
|
+
|
|
83
|
+
if (options.subtree) {
|
|
84
|
+
observations.deep.add(targetShadowNode);
|
|
85
|
+
} else {
|
|
86
|
+
observations.shallow.add(targetShadowNode);
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
unobserve: (mutationObserverId: number, target: mixed): void => {
|
|
90
|
+
const targetShadowNode = castToNode(target);
|
|
91
|
+
|
|
92
|
+
const observers = observersByRootTag.get(
|
|
93
|
+
getMockDataFromShadowNode(targetShadowNode).rootTag,
|
|
94
|
+
);
|
|
95
|
+
const observations = observers?.get(mutationObserverId);
|
|
96
|
+
invariant(observations != null, 'unexpected call to unobserve');
|
|
97
|
+
|
|
98
|
+
const isTargetBeingObserved =
|
|
99
|
+
observations.deep.has(targetShadowNode) ||
|
|
100
|
+
observations.shallow.has(targetShadowNode);
|
|
101
|
+
invariant(isTargetBeingObserved, 'unexpected call to unobserve');
|
|
102
|
+
|
|
103
|
+
observations.deep.delete(targetShadowNode);
|
|
104
|
+
observations.shallow.delete(targetShadowNode);
|
|
105
|
+
},
|
|
106
|
+
connect: (
|
|
107
|
+
notifyMutationObserversCallback: () => void,
|
|
108
|
+
getPublicInstanceFromInstanceHandle: (
|
|
109
|
+
instanceHandle: InternalInstanceHandle,
|
|
110
|
+
) => mixed,
|
|
111
|
+
): void => {
|
|
112
|
+
invariant(callback == null, 'unexpected call to connect');
|
|
113
|
+
callback = notifyMutationObserversCallback;
|
|
114
|
+
getPublicInstance = getPublicInstanceFromInstanceHandle;
|
|
115
|
+
FabricUIManagerMock.__addCommitHook(NativeMutationObserverCommitHook);
|
|
116
|
+
},
|
|
117
|
+
disconnect: (): void => {
|
|
118
|
+
invariant(callback != null, 'unexpected call to disconnect');
|
|
119
|
+
callback = null;
|
|
120
|
+
FabricUIManagerMock.__removeCommitHook(NativeMutationObserverCommitHook);
|
|
121
|
+
},
|
|
122
|
+
takeRecords: (): $ReadOnlyArray<NativeMutationRecord> => {
|
|
123
|
+
const currentRecords = pendingRecords;
|
|
124
|
+
pendingRecords = [];
|
|
125
|
+
return currentRecords;
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
(NativeMutationMock: Spec);
|
|
130
|
+
|
|
131
|
+
export default NativeMutationMock;
|
|
132
|
+
|
|
133
|
+
const NativeMutationObserverCommitHook: UIManagerCommitHook = {
|
|
134
|
+
shadowTreeWillCommit: (rootTag, oldChildSet, newChildSet) => {
|
|
135
|
+
runMutationObservations(rootTag, oldChildSet, newChildSet);
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
function runMutationObservations(
|
|
140
|
+
rootTag: RootTag,
|
|
141
|
+
oldChildSet: ?NodeSet,
|
|
142
|
+
newChildSet: NodeSet,
|
|
143
|
+
): void {
|
|
144
|
+
const observers = observersByRootTag.get(rootTag);
|
|
145
|
+
if (!observers) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
const newRecords: Array<NativeMutationRecord> = [];
|
|
150
|
+
|
|
151
|
+
for (const [mutationObserverId, observations] of observers) {
|
|
152
|
+
const processedNodes: Set<Node> = new Set();
|
|
153
|
+
for (const targetShadowNode of observations.deep) {
|
|
154
|
+
runMutationObservation({
|
|
155
|
+
mutationObserverId,
|
|
156
|
+
targetShadowNode,
|
|
157
|
+
subtree: true,
|
|
158
|
+
oldChildSet,
|
|
159
|
+
newChildSet,
|
|
160
|
+
newRecords,
|
|
161
|
+
processedNodes,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
for (const targetShadowNode of observations.shallow) {
|
|
165
|
+
runMutationObservation({
|
|
166
|
+
mutationObserverId,
|
|
167
|
+
targetShadowNode,
|
|
168
|
+
subtree: false,
|
|
169
|
+
oldChildSet,
|
|
170
|
+
newChildSet,
|
|
171
|
+
newRecords,
|
|
172
|
+
processedNodes,
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
for (const record of newRecords) {
|
|
178
|
+
pendingRecords.push(record);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
notifyObserversIfNecessary();
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
function findNodeOfSameFamily(list: NodeSet, node: Node): ?Node {
|
|
185
|
+
for (const current of list) {
|
|
186
|
+
if (fromNode(current).reactTag === fromNode(node).reactTag) {
|
|
187
|
+
return current;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
function recordMutations({
|
|
194
|
+
mutationObserverId,
|
|
195
|
+
targetShadowNode,
|
|
196
|
+
subtree,
|
|
197
|
+
oldNode,
|
|
198
|
+
newNode,
|
|
199
|
+
newRecords,
|
|
200
|
+
processedNodes,
|
|
201
|
+
}: {
|
|
202
|
+
mutationObserverId: MutationObserverId,
|
|
203
|
+
targetShadowNode: Node,
|
|
204
|
+
subtree: boolean,
|
|
205
|
+
oldNode: Node,
|
|
206
|
+
newNode: Node,
|
|
207
|
+
newRecords: Array<NativeMutationRecord>,
|
|
208
|
+
processedNodes: Set<Node>,
|
|
209
|
+
}): void {
|
|
210
|
+
// If the nodes are referentially equal, their children are also the same.
|
|
211
|
+
if (oldNode === newNode || processedNodes.has(newNode)) {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
processedNodes.add(newNode);
|
|
216
|
+
|
|
217
|
+
const oldChildren = fromNode(oldNode).children;
|
|
218
|
+
const newChildren = fromNode(newNode).children;
|
|
219
|
+
|
|
220
|
+
const addedNodes = [];
|
|
221
|
+
const removedNodes = [];
|
|
222
|
+
|
|
223
|
+
// Check for removed nodes (and equal nodes for further inspection later)
|
|
224
|
+
for (const oldChild of oldChildren) {
|
|
225
|
+
const newChild = findNodeOfSameFamily(newChildren, oldChild);
|
|
226
|
+
if (newChild == null) {
|
|
227
|
+
removedNodes.push(oldChild);
|
|
228
|
+
} else if (subtree) {
|
|
229
|
+
recordMutations({
|
|
230
|
+
mutationObserverId,
|
|
231
|
+
targetShadowNode,
|
|
232
|
+
subtree,
|
|
233
|
+
oldNode: oldChild,
|
|
234
|
+
newNode: newChild,
|
|
235
|
+
newRecords,
|
|
236
|
+
processedNodes,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
// Check for added nodes
|
|
242
|
+
for (const newChild of newChildren) {
|
|
243
|
+
const oldChild = findNodeOfSameFamily(oldChildren, newChild);
|
|
244
|
+
if (oldChild == null) {
|
|
245
|
+
addedNodes.push(newChild);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
if (addedNodes.length > 0 || removedNodes.length > 0) {
|
|
250
|
+
newRecords.push({
|
|
251
|
+
mutationObserverId: mutationObserverId,
|
|
252
|
+
target: nullthrows(getPublicInstance)(
|
|
253
|
+
getMockDataFromShadowNode(targetShadowNode).instanceHandle,
|
|
254
|
+
),
|
|
255
|
+
addedNodes: addedNodes.map(node => {
|
|
256
|
+
const readOnlyNode = nullthrows(getPublicInstance)(
|
|
257
|
+
fromNode(node).instanceHandle,
|
|
258
|
+
);
|
|
259
|
+
invariant(
|
|
260
|
+
readOnlyNode instanceof ReadOnlyNode,
|
|
261
|
+
'expected instance of ReadOnlyNode',
|
|
262
|
+
);
|
|
263
|
+
return readOnlyNode;
|
|
264
|
+
}),
|
|
265
|
+
removedNodes: removedNodes.map(node => {
|
|
266
|
+
const readOnlyNode = nullthrows(getPublicInstance)(
|
|
267
|
+
fromNode(node).instanceHandle,
|
|
268
|
+
);
|
|
269
|
+
invariant(
|
|
270
|
+
readOnlyNode instanceof ReadOnlyNode,
|
|
271
|
+
'expected instance of ReadOnlyNode',
|
|
272
|
+
);
|
|
273
|
+
return readOnlyNode;
|
|
274
|
+
}),
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
function runMutationObservation({
|
|
280
|
+
mutationObserverId,
|
|
281
|
+
targetShadowNode,
|
|
282
|
+
subtree,
|
|
283
|
+
oldChildSet,
|
|
284
|
+
newChildSet,
|
|
285
|
+
newRecords,
|
|
286
|
+
processedNodes,
|
|
287
|
+
}: {
|
|
288
|
+
mutationObserverId: MutationObserverId,
|
|
289
|
+
targetShadowNode: Node,
|
|
290
|
+
subtree: boolean,
|
|
291
|
+
oldChildSet: ?NodeSet,
|
|
292
|
+
newChildSet: NodeSet,
|
|
293
|
+
newRecords: Array<NativeMutationRecord>,
|
|
294
|
+
processedNodes: Set<Node>,
|
|
295
|
+
}): void {
|
|
296
|
+
if (!oldChildSet) {
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
const oldTargetShadowNode = getNodeInChildSet(targetShadowNode, oldChildSet);
|
|
301
|
+
if (oldTargetShadowNode == null) {
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
const newTargetShadowNode = getNodeInChildSet(targetShadowNode, newChildSet);
|
|
306
|
+
if (newTargetShadowNode == null) {
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
recordMutations({
|
|
311
|
+
mutationObserverId,
|
|
312
|
+
targetShadowNode,
|
|
313
|
+
subtree,
|
|
314
|
+
oldNode: oldTargetShadowNode,
|
|
315
|
+
newNode: newTargetShadowNode,
|
|
316
|
+
newRecords,
|
|
317
|
+
processedNodes,
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
function notifyObserversIfNecessary(): void {
|
|
322
|
+
if (pendingRecords.length > 0) {
|
|
323
|
+
// We schedule these using regular tasks in native because microtasks are
|
|
324
|
+
// still not properly supported.
|
|
325
|
+
setTimeout(() => callback?.(), 0);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
@@ -103,6 +103,12 @@ const bubblingEventTypes = {
|
|
|
103
103
|
bubbled: 'onPointerOver',
|
|
104
104
|
},
|
|
105
105
|
},
|
|
106
|
+
topClick: {
|
|
107
|
+
phasedRegistrationNames: {
|
|
108
|
+
captured: 'onClickCapture',
|
|
109
|
+
bubbled: 'onClick',
|
|
110
|
+
},
|
|
111
|
+
},
|
|
106
112
|
};
|
|
107
113
|
|
|
108
114
|
const directEventTypes = {
|
|
@@ -135,9 +141,6 @@ const directEventTypes = {
|
|
|
135
141
|
topMomentumScrollEnd: {
|
|
136
142
|
registrationName: 'onMomentumScrollEnd',
|
|
137
143
|
},
|
|
138
|
-
topClick: {
|
|
139
|
-
registrationName: 'onClick',
|
|
140
|
-
},
|
|
141
144
|
topLoadingStart: {
|
|
142
145
|
registrationName: 'onLoadingStart',
|
|
143
146
|
},
|
|
@@ -162,6 +165,7 @@ const validAttributesForNonEventProps = {
|
|
|
162
165
|
// @ReactProps from BaseViewManager
|
|
163
166
|
backgroundColor: {process: require('../StyleSheet/processColor').default},
|
|
164
167
|
transform: true,
|
|
168
|
+
transformOrigin: true,
|
|
165
169
|
opacity: true,
|
|
166
170
|
elevation: true,
|
|
167
171
|
shadowColor: {process: require('../StyleSheet/processColor').default},
|
|
@@ -179,6 +183,7 @@ const validAttributesForNonEventProps = {
|
|
|
179
183
|
accessibilityActions: true,
|
|
180
184
|
accessibilityValue: true,
|
|
181
185
|
importantForAccessibility: true,
|
|
186
|
+
role: true,
|
|
182
187
|
rotation: true,
|
|
183
188
|
scaleX: true,
|
|
184
189
|
scaleY: true,
|
|
@@ -258,9 +263,19 @@ const validAttributesForNonEventProps = {
|
|
|
258
263
|
top: true,
|
|
259
264
|
bottom: true,
|
|
260
265
|
|
|
266
|
+
inset: true,
|
|
267
|
+
insetBlock: true,
|
|
268
|
+
insetBlockEnd: true,
|
|
269
|
+
insetBlockStart: true,
|
|
270
|
+
insetInline: true,
|
|
271
|
+
insetInlineEnd: true,
|
|
272
|
+
insetInlineStart: true,
|
|
273
|
+
|
|
261
274
|
position: true,
|
|
262
275
|
|
|
263
276
|
style: ReactNativeStyleAttributes,
|
|
277
|
+
|
|
278
|
+
experimental_layoutConformance: true,
|
|
264
279
|
};
|
|
265
280
|
|
|
266
281
|
// Props for bubbling and direct events
|
|
@@ -88,6 +88,12 @@ const bubblingEventTypes = {
|
|
|
88
88
|
},
|
|
89
89
|
|
|
90
90
|
// Experimental/Work in Progress Pointer Events (not yet ready for use)
|
|
91
|
+
topClick: {
|
|
92
|
+
phasedRegistrationNames: {
|
|
93
|
+
captured: 'onClickCapture',
|
|
94
|
+
bubbled: 'onClick',
|
|
95
|
+
},
|
|
96
|
+
},
|
|
91
97
|
topPointerCancel: {
|
|
92
98
|
phasedRegistrationNames: {
|
|
93
99
|
captured: 'onPointerCancelCapture',
|
|
@@ -138,6 +144,18 @@ const bubblingEventTypes = {
|
|
|
138
144
|
bubbled: 'onPointerOut',
|
|
139
145
|
},
|
|
140
146
|
},
|
|
147
|
+
topGotPointerCapture: {
|
|
148
|
+
phasedRegistrationNames: {
|
|
149
|
+
captured: 'onGotPointerCaptureCapture',
|
|
150
|
+
bubbled: 'onGotPointerCapture',
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
topLostPointerCapture: {
|
|
154
|
+
phasedRegistrationNames: {
|
|
155
|
+
captured: 'onLostPointerCaptureCapture',
|
|
156
|
+
bubbled: 'onLostPointerCapture',
|
|
157
|
+
},
|
|
158
|
+
},
|
|
141
159
|
};
|
|
142
160
|
|
|
143
161
|
const directEventTypes = {
|
|
@@ -187,11 +205,13 @@ const validAttributesForNonEventProps = {
|
|
|
187
205
|
overflow: true,
|
|
188
206
|
shouldRasterizeIOS: true,
|
|
189
207
|
transform: {diff: require('../Utilities/differ/matricesDiffer')},
|
|
208
|
+
transformOrigin: true,
|
|
190
209
|
accessibilityRole: true,
|
|
191
210
|
accessibilityState: true,
|
|
192
211
|
nativeID: true,
|
|
193
212
|
pointerEvents: true,
|
|
194
213
|
removeClippedSubviews: true,
|
|
214
|
+
role: true,
|
|
195
215
|
borderRadius: true,
|
|
196
216
|
borderColor: {process: require('../StyleSheet/processColor').default},
|
|
197
217
|
borderCurve: true,
|
|
@@ -236,6 +256,14 @@ const validAttributesForNonEventProps = {
|
|
|
236
256
|
bottom: true,
|
|
237
257
|
left: true,
|
|
238
258
|
|
|
259
|
+
inset: true,
|
|
260
|
+
insetBlock: true,
|
|
261
|
+
insetBlockEnd: true,
|
|
262
|
+
insetBlockStart: true,
|
|
263
|
+
insetInline: true,
|
|
264
|
+
insetInlineEnd: true,
|
|
265
|
+
insetInlineStart: true,
|
|
266
|
+
|
|
239
267
|
width: true,
|
|
240
268
|
height: true,
|
|
241
269
|
|
|
@@ -308,6 +336,8 @@ const validAttributesForNonEventProps = {
|
|
|
308
336
|
direction: true,
|
|
309
337
|
|
|
310
338
|
style: ReactNativeStyleAttributes,
|
|
339
|
+
|
|
340
|
+
experimental_layoutConformance: true,
|
|
311
341
|
};
|
|
312
342
|
|
|
313
343
|
// Props for bubbling and direct events
|
|
@@ -342,6 +372,7 @@ const validAttributesForEventProps = ConditionallyIgnoredEventHandlers({
|
|
|
342
372
|
onTouchCancel: true,
|
|
343
373
|
|
|
344
374
|
// Pointer events
|
|
375
|
+
onClick: true,
|
|
345
376
|
onPointerUp: true,
|
|
346
377
|
onPointerDown: true,
|
|
347
378
|
onPointerCancel: true,
|
|
@@ -350,6 +381,8 @@ const validAttributesForEventProps = ConditionallyIgnoredEventHandlers({
|
|
|
350
381
|
onPointerLeave: true,
|
|
351
382
|
onPointerOver: true,
|
|
352
383
|
onPointerOut: true,
|
|
384
|
+
onGotPointerCapture: true,
|
|
385
|
+
onLostPointerCapture: true,
|
|
353
386
|
});
|
|
354
387
|
|
|
355
388
|
/**
|
|
@@ -88,6 +88,12 @@ const bubblingEventTypes = {
|
|
|
88
88
|
},
|
|
89
89
|
|
|
90
90
|
// Experimental/Work in Progress Pointer Events (not yet ready for use)
|
|
91
|
+
topClick: {
|
|
92
|
+
phasedRegistrationNames: {
|
|
93
|
+
captured: 'onClickCapture',
|
|
94
|
+
bubbled: 'onClick',
|
|
95
|
+
},
|
|
96
|
+
},
|
|
91
97
|
topPointerCancel: {
|
|
92
98
|
phasedRegistrationNames: {
|
|
93
99
|
captured: 'onPointerCancelCapture',
|
|
@@ -138,6 +144,18 @@ const bubblingEventTypes = {
|
|
|
138
144
|
bubbled: 'onPointerOut',
|
|
139
145
|
},
|
|
140
146
|
},
|
|
147
|
+
topGotPointerCapture: {
|
|
148
|
+
phasedRegistrationNames: {
|
|
149
|
+
captured: 'onGotPointerCaptureCapture',
|
|
150
|
+
bubbled: 'onGotPointerCapture',
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
topLostPointerCapture: {
|
|
154
|
+
phasedRegistrationNames: {
|
|
155
|
+
captured: 'onLostPointerCaptureCapture',
|
|
156
|
+
bubbled: 'onLostPointerCapture',
|
|
157
|
+
},
|
|
158
|
+
},
|
|
141
159
|
};
|
|
142
160
|
|
|
143
161
|
const directEventTypes = {
|
|
@@ -187,11 +205,13 @@ const validAttributesForNonEventProps = {
|
|
|
187
205
|
overflow: true,
|
|
188
206
|
shouldRasterizeIOS: true,
|
|
189
207
|
transform: {diff: require('../Utilities/differ/matricesDiffer')},
|
|
208
|
+
transformOrigin: true,
|
|
190
209
|
accessibilityRole: true,
|
|
191
210
|
accessibilityState: true,
|
|
192
211
|
nativeID: true,
|
|
193
212
|
pointerEvents: true,
|
|
194
213
|
removeClippedSubviews: true,
|
|
214
|
+
role: true,
|
|
195
215
|
borderRadius: true,
|
|
196
216
|
borderColor: {process: require('../StyleSheet/processColor').default},
|
|
197
217
|
borderCurve: true,
|
|
@@ -236,6 +256,14 @@ const validAttributesForNonEventProps = {
|
|
|
236
256
|
bottom: true,
|
|
237
257
|
left: true,
|
|
238
258
|
|
|
259
|
+
inset: true,
|
|
260
|
+
insetBlock: true,
|
|
261
|
+
insetBlockEnd: true,
|
|
262
|
+
insetBlockStart: true,
|
|
263
|
+
insetInline: true,
|
|
264
|
+
insetInlineEnd: true,
|
|
265
|
+
insetInlineStart: true,
|
|
266
|
+
|
|
239
267
|
width: true,
|
|
240
268
|
height: true,
|
|
241
269
|
|
|
@@ -308,6 +336,8 @@ const validAttributesForNonEventProps = {
|
|
|
308
336
|
direction: true,
|
|
309
337
|
|
|
310
338
|
style: ReactNativeStyleAttributes,
|
|
339
|
+
|
|
340
|
+
experimental_layoutConformance: true,
|
|
311
341
|
};
|
|
312
342
|
|
|
313
343
|
// Props for bubbling and direct events
|
|
@@ -342,6 +372,7 @@ const validAttributesForEventProps = ConditionallyIgnoredEventHandlers({
|
|
|
342
372
|
onTouchCancel: true,
|
|
343
373
|
|
|
344
374
|
// Pointer events
|
|
375
|
+
onClick: true,
|
|
345
376
|
onPointerUp: true,
|
|
346
377
|
onPointerDown: true,
|
|
347
378
|
onPointerCancel: true,
|
|
@@ -350,6 +381,8 @@ const validAttributesForEventProps = ConditionallyIgnoredEventHandlers({
|
|
|
350
381
|
onPointerLeave: true,
|
|
351
382
|
onPointerOver: true,
|
|
352
383
|
onPointerOut: true,
|
|
384
|
+
onGotPointerCapture: true,
|
|
385
|
+
onLostPointerCapture: true,
|
|
353
386
|
});
|
|
354
387
|
|
|
355
388
|
/**
|
|
@@ -38,11 +38,9 @@ export function setRuntimeConfigProvider(
|
|
|
38
38
|
verify: boolean,
|
|
39
39
|
},
|
|
40
40
|
): void {
|
|
41
|
-
|
|
42
|
-
getRuntimeConfig
|
|
43
|
-
|
|
44
|
-
);
|
|
45
|
-
getRuntimeConfig = runtimeConfigProvider;
|
|
41
|
+
if (getRuntimeConfig === undefined) {
|
|
42
|
+
getRuntimeConfig = runtimeConfigProvider;
|
|
43
|
+
}
|
|
46
44
|
}
|
|
47
45
|
|
|
48
46
|
/**
|
|
@@ -12,19 +12,19 @@ import type {TurboModule} from '../../TurboModule/RCTExport';
|
|
|
12
12
|
|
|
13
13
|
import * as TurboModuleRegistry from '../../TurboModule/TurboModuleRegistry';
|
|
14
14
|
|
|
15
|
+
export type SourceCodeConstants = {|
|
|
16
|
+
scriptURL: string,
|
|
17
|
+
|};
|
|
18
|
+
|
|
15
19
|
export interface Spec extends TurboModule {
|
|
16
|
-
+getConstants: () =>
|
|
17
|
-
scriptURL: string,
|
|
18
|
-
|};
|
|
20
|
+
+getConstants: () => SourceCodeConstants;
|
|
19
21
|
}
|
|
20
22
|
|
|
21
23
|
const NativeModule = TurboModuleRegistry.getEnforcing<Spec>('SourceCode');
|
|
22
24
|
let constants = null;
|
|
23
25
|
|
|
24
26
|
const NativeSourceCode = {
|
|
25
|
-
getConstants(): {
|
|
26
|
-
scriptURL: string,
|
|
27
|
-
|} {
|
|
27
|
+
getConstants(): SourceCodeConstants {
|
|
28
28
|
if (constants == null) {
|
|
29
29
|
constants = NativeModule.getConstants();
|
|
30
30
|
}
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import type {RequestBody} from './convertRequestBody';
|
|
12
|
+
import type {NativeResponseType} from './XMLHttpRequest';
|
|
12
13
|
|
|
13
14
|
// Do not require the native RCTNetworking module directly! Use this wrapper module instead.
|
|
14
15
|
// It will add the necessary requestId, so that you don't have to generate it yourself.
|
|
@@ -54,7 +55,7 @@ class RCTNetworking extends NativeEventEmitter<$FlowFixMe> {
|
|
|
54
55
|
url: string,
|
|
55
56
|
headers: Object,
|
|
56
57
|
data: RequestBody,
|
|
57
|
-
responseType:
|
|
58
|
+
responseType: NativeResponseType,
|
|
58
59
|
incrementalUpdates: boolean,
|
|
59
60
|
timeout: number,
|
|
60
61
|
callback: (requestId: number) => mixed,
|
|
@@ -13,12 +13,12 @@
|
|
|
13
13
|
import type {IPerformanceLogger} from '../Utilities/createPerformanceLogger';
|
|
14
14
|
|
|
15
15
|
import {type EventSubscription} from '../vendor/emitter/EventEmitter';
|
|
16
|
+
import EventTarget from 'event-target-shim';
|
|
16
17
|
|
|
17
18
|
const BlobManager = require('../Blob/BlobManager');
|
|
18
19
|
const GlobalPerformanceLogger = require('../Utilities/GlobalPerformanceLogger');
|
|
19
20
|
const RCTNetworking = require('./RCTNetworking').default;
|
|
20
21
|
const base64 = require('base64-js');
|
|
21
|
-
const EventTarget = require('event-target-shim');
|
|
22
22
|
const invariant = require('invariant');
|
|
23
23
|
|
|
24
24
|
const DEBUG_NETWORK_SEND_DELAY: false = false; // Set to a number of milliseconds when debugging
|
|
@@ -25,15 +25,15 @@ const DebugInstructions: () => Node = Platform.select({
|
|
|
25
25
|
ios: () => (
|
|
26
26
|
<Text>
|
|
27
27
|
Press <Text style={styles.highlight}>Cmd + D</Text> in the simulator or{' '}
|
|
28
|
-
<Text style={styles.highlight}>Shake</Text> your device to open the
|
|
29
|
-
|
|
28
|
+
<Text style={styles.highlight}>Shake</Text> your device to open the Dev
|
|
29
|
+
Menu.
|
|
30
30
|
</Text>
|
|
31
31
|
),
|
|
32
32
|
default: () => (
|
|
33
33
|
<Text>
|
|
34
34
|
Press <Text style={styles.highlight}>Cmd or Ctrl + M</Text> or{' '}
|
|
35
|
-
<Text style={styles.highlight}>Shake</Text> your device to open the
|
|
36
|
-
|
|
35
|
+
<Text style={styles.highlight}>Shake</Text> your device to open the Dev
|
|
36
|
+
Menu.
|
|
37
37
|
</Text>
|
|
38
38
|
),
|
|
39
39
|
});
|
|
@@ -60,13 +60,20 @@ const links = [
|
|
|
60
60
|
},
|
|
61
61
|
{
|
|
62
62
|
id: 7,
|
|
63
|
+
title: 'Debugging',
|
|
64
|
+
link: 'https://facebook.github.io/react-native/docs/debugging',
|
|
65
|
+
description:
|
|
66
|
+
'Learn about the tools available to debug and inspect your app.',
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
id: 8,
|
|
63
70
|
title: 'Help',
|
|
64
|
-
link: 'https://
|
|
71
|
+
link: 'https://facebook.github.io/react-native/help',
|
|
65
72
|
description:
|
|
66
73
|
'Need more help? There are many other React Native developers who may have the answer.',
|
|
67
74
|
},
|
|
68
75
|
{
|
|
69
|
-
id:
|
|
76
|
+
id: 9,
|
|
70
77
|
title: 'Follow us on Twitter',
|
|
71
78
|
link: 'https://twitter.com/reactnative',
|
|
72
79
|
description:
|
|
@@ -16,7 +16,7 @@ const DUMMY_INSTANCE_KEY = 0;
|
|
|
16
16
|
// Defines map of annotations
|
|
17
17
|
// Use as following:
|
|
18
18
|
// {string: {key1: value1, key2: value2}}
|
|
19
|
-
export type AnnotationsMap =
|
|
19
|
+
export type AnnotationsMap = Partial<{
|
|
20
20
|
string: ?{[string]: string, ...},
|
|
21
21
|
int: ?{[string]: number, ...},
|
|
22
22
|
double: ?{[string]: number, ...},
|
|
@@ -48,6 +48,7 @@ export type PermissionType =
|
|
|
48
48
|
| 'android.permission.READ_MEDIA_IMAGES',
|
|
49
49
|
| 'android.permission.READ_MEDIA_VIDEO',
|
|
50
50
|
| 'android.permission.READ_MEDIA_AUDIO',
|
|
51
|
+
| 'android.permission.READ_MEDIA_VISUAL_USER_SELECTED'
|
|
51
52
|
| 'android.permission.WRITE_EXTERNAL_STORAGE'
|
|
52
53
|
| 'android.permission.BLUETOOTH_CONNECT'
|
|
53
54
|
| 'android.permission.BLUETOOTH_SCAN'
|
|
@@ -46,6 +46,7 @@ export type Permission =
|
|
|
46
46
|
| 'android.permission.READ_MEDIA_IMAGES'
|
|
47
47
|
| 'android.permission.READ_MEDIA_VIDEO'
|
|
48
48
|
| 'android.permission.READ_MEDIA_AUDIO'
|
|
49
|
+
| 'android.permission.READ_MEDIA_VISUAL_USER_SELECTED'
|
|
49
50
|
| 'android.permission.WRITE_EXTERNAL_STORAGE'
|
|
50
51
|
| 'android.permission.BLUETOOTH_CONNECT'
|
|
51
52
|
| 'android.permission.BLUETOOTH_SCAN'
|