@office-iss/react-native-win32 0.79.0-preview.2 → 0.80.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 +10 -3
- package/CHANGELOG.json +120 -12
- package/CHANGELOG.md +50 -7
- package/IntegrationTests/ImageCachePolicyTest.js +1 -1
- package/IntegrationTests/LayoutEventsTest.js +1 -4
- package/Libraries/Alert/Alert.d.ts +4 -1
- package/Libraries/Alert/Alert.js +3 -0
- package/Libraries/Alert/RCTAlertManager.js +17 -0
- package/Libraries/Animated/Animated.js.flow +1 -3
- package/Libraries/Animated/AnimatedEvent.js +4 -3
- package/Libraries/Animated/AnimatedExports.js +2 -2
- package/Libraries/Animated/AnimatedExports.js.flow +140 -0
- package/Libraries/Animated/AnimatedImplementation.js +2 -123
- package/Libraries/Animated/Easing.js +13 -15
- package/Libraries/Animated/animations/Animation.js +8 -4
- package/Libraries/Animated/components/AnimatedFlatList.js +7 -6
- package/Libraries/Animated/components/AnimatedScrollView.js +48 -42
- package/Libraries/Animated/components/AnimatedSectionList.js +11 -7
- package/Libraries/Animated/createAnimatedComponent.js +105 -57
- package/Libraries/Animated/nodes/AnimatedNode.js +4 -3
- package/Libraries/Animated/nodes/AnimatedProps.js +46 -26
- package/Libraries/Animated/nodes/AnimatedValue.js +16 -7
- package/Libraries/Animated/nodes/AnimatedValueXY.js +3 -1
- package/Libraries/AppState/AppState.js +7 -2
- package/Libraries/BatchedBridge/MessageQueue.js +2 -2
- package/Libraries/BatchedBridge/NativeModules.js +2 -0
- package/Libraries/Blob/BlobManager.js +1 -0
- package/Libraries/Blob/FileReader.js +219 -8
- package/Libraries/Blob/URL.js +37 -12
- package/Libraries/Blob/URLSearchParams.js +106 -31
- package/Libraries/Blob/URLSearchParams.js.flow +12 -7
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +1 -1
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.win32.js +1 -1
- package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.js +17 -0
- package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +1 -0
- package/Libraries/Components/Button.js +1 -1
- package/Libraries/Components/Button.win32.js +1 -1
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +1 -3
- package/Libraries/{NewAppScreen/components/Colors.js → Components/DrawerAndroid/DrawerLayoutAndroid.ios.js} +6 -10
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.js +6 -66
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.js.flow +18 -0
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroidFallback.js +71 -0
- package/Libraries/Components/Keyboard/Keyboard.js +5 -3
- package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +6 -3
- package/Libraries/Components/Pressable/Pressable.js +20 -4
- package/Libraries/Components/Pressable/Pressable.win32.js +20 -4
- package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.js +25 -3
- package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidTypes.js +29 -20
- package/Libraries/Components/RefreshControl/RefreshControl.js +1 -1
- package/Libraries/Components/ScrollView/ScrollView.d.ts +3 -3
- package/Libraries/Components/ScrollView/ScrollView.js +132 -122
- package/Libraries/Components/StaticRenderer.js +1 -1
- package/Libraries/Components/Switch/Switch.d.ts +3 -0
- package/Libraries/Components/Switch/Switch.js +8 -4
- package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +2 -1
- package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +2 -4
- package/Libraries/Components/TextInput/Tests/TextInputTest.d.ts +2 -1
- package/Libraries/Components/TextInput/Tests/TextInputTest.js.map +1 -1
- package/Libraries/Components/TextInput/TextInput.d.ts +70 -33
- package/Libraries/Components/TextInput/TextInput.flow.js +100 -51
- package/Libraries/Components/TextInput/TextInput.flow.win32.js +1208 -0
- package/Libraries/Components/TextInput/TextInput.js +88 -1027
- package/Libraries/Components/TextInput/TextInput.win32.js +89 -1059
- package/Libraries/Components/TextInput/TextInputState.js +1 -1
- package/Libraries/Components/TextInput/TextInputState.win32.js +1 -1
- package/Libraries/{Modal/ModalInjection.js → Components/ToastAndroid/ToastAndroid.ios.js} +3 -5
- package/Libraries/Components/ToastAndroid/ToastAndroid.js +4 -32
- package/Libraries/Components/ToastAndroid/ToastAndroid.js.flow +109 -0
- package/Libraries/Components/ToastAndroid/ToastAndroid.win32.js +4 -32
- package/Libraries/Components/ToastAndroid/ToastAndroidFallback.js +45 -0
- package/Libraries/Components/Touchable/Tests/TouchableWin32Test.d.ts +2 -1
- package/Libraries/Components/Touchable/Tests/TouchableWin32Test.js.map +1 -1
- package/Libraries/Components/Touchable/Touchable.js +5 -5
- package/Libraries/Components/Touchable/Touchable.win32.js +5 -5
- package/Libraries/Components/Touchable/TouchableBounce.js +14 -7
- package/Libraries/Components/Touchable/TouchableHighlight.js +10 -7
- package/Libraries/Components/Touchable/TouchableNativeFeedback.js +6 -6
- package/Libraries/Components/Touchable/TouchableNativeFeedback.win32.js +6 -6
- package/Libraries/Components/Touchable/TouchableOpacity.js +13 -6
- package/Libraries/Components/View/View.js +18 -21
- package/Libraries/Components/View/View.win32.js +21 -24
- package/Libraries/Components/View/ViewAccessibility.js +25 -1
- package/Libraries/Components/View/ViewAccessibility.win32.js +9 -1
- package/Libraries/Components/View/ViewPropTypes.js +49 -3
- package/Libraries/Components/View/ViewPropTypes.win32.js +49 -3
- package/Libraries/Core/ReactNativeVersion.js +2 -2
- package/Libraries/Core/setUpReactDevTools.js +5 -5
- package/Libraries/Debugging/DebuggingOverlayRegistry.js +3 -3
- package/Libraries/EventEmitter/NativeEventEmitter.js +9 -4
- package/Libraries/Image/AssetSourceResolver.js +17 -4
- package/Libraries/Image/Image.d.ts +26 -10
- package/Libraries/Image/Image.js +17 -0
- package/Libraries/Image/Image.js.flow +5 -5
- package/Libraries/Image/ImageBackground.js +2 -0
- package/Libraries/Image/ImageInjection.js +1 -1
- package/Libraries/Image/ImageProps.js +22 -17
- package/Libraries/Image/ImageSource.js +3 -1
- package/Libraries/Image/ImageSourceUtils.js +4 -2
- package/Libraries/Image/ImageTypes.flow.js +1 -1
- package/Libraries/Image/Tests/ImageWin32Test.d.ts +2 -1
- package/Libraries/Image/Tests/ImageWin32Test.js.map +1 -1
- package/Libraries/Interaction/InteractionManager.d.ts +13 -0
- package/Libraries/Interaction/InteractionManager.js +1 -1
- package/Libraries/Interaction/PanResponder.js +3 -3
- package/Libraries/Interaction/TaskQueue.js +1 -0
- package/Libraries/LayoutAnimation/LayoutAnimation.js +2 -2
- package/Libraries/Linking/Linking.js +1 -1
- package/Libraries/Lists/FlatList.d.ts +2 -2
- package/Libraries/Lists/FlatList.js +8 -11
- package/Libraries/Lists/SectionList.js +39 -42
- package/Libraries/Lists/SectionListModern.js +25 -34
- package/Libraries/Lists/VirtualizedList.js +1 -0
- package/Libraries/Lists/VirtualizedSectionList.js +1 -0
- package/Libraries/LogBox/Data/LogBoxData.js +1 -1
- package/Libraries/LogBox/LogBoxNotificationContainer.js +1 -1
- package/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.win32.js +140 -0
- package/Libraries/Modal/Modal.js +33 -7
- package/Libraries/NativeComponent/BaseViewConfig.android.js +2 -0
- package/Libraries/NativeComponent/BaseViewConfig.ios.js +2 -0
- package/Libraries/NativeComponent/BaseViewConfig.js +17 -0
- package/Libraries/NativeComponent/BaseViewConfig.win32.js +1 -0
- package/Libraries/NativeComponent/PlatformBaseViewConfig.js +2 -2
- package/Libraries/NativeModules/specs/NativeDevMenu.js +2 -2
- package/Libraries/Network/RCTNetworking.android.js +1 -1
- package/Libraries/Network/RCTNetworking.ios.js +1 -1
- package/Libraries/Network/RCTNetworking.js +17 -0
- package/Libraries/Network/RCTNetworking.js.flow +1 -1
- package/Libraries/Network/RCTNetworking.win32.js +1 -1
- package/Libraries/Network/XMLHttpRequest.js +781 -10
- package/Libraries/Performance/Systrace.js +7 -7
- package/Libraries/Pressability/Pressability.js +1 -1
- package/Libraries/Pressability/Pressability.win32.js +1 -1
- package/Libraries/ReactNative/AppContainer-dev.js +5 -4
- package/Libraries/ReactNative/AppRegistry.flow.js +49 -0
- package/Libraries/ReactNative/AppRegistry.js +2 -322
- package/Libraries/ReactNative/AppRegistry.js.flow +23 -0
- package/Libraries/ReactNative/AppRegistryImpl.js +316 -0
- package/Libraries/ReactNative/FabricUIManager.js +10 -0
- package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +2 -4
- package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance.js +1 -4
- package/Libraries/ReactNative/RendererImplementation.js +10 -5
- package/Libraries/ReactNative/getNativeComponentAttributes.js +1 -0
- package/Libraries/ReactNative/renderApplication.js +9 -0
- package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +3 -3
- package/Libraries/ReactPrivate/ReactNativePrivateInterface.js.flow +51 -0
- package/Libraries/Renderer/implementations/ReactFabric-dev.js +4840 -4748
- package/Libraries/Renderer/implementations/ReactFabric-prod.js +4947 -4829
- package/Libraries/Renderer/implementations/ReactFabric-profiling.js +3998 -3888
- package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +5005 -4948
- package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +2744 -2652
- package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +5020 -4933
- package/Libraries/Renderer/shims/ReactNativeTypes.js +3 -3
- package/Libraries/Settings/Settings.ios.js +1 -0
- package/Libraries/Settings/Settings.js +13 -19
- package/Libraries/Settings/Settings.win32.js +19 -20
- package/Libraries/Settings/SettingsFallback.js +33 -0
- package/Libraries/StyleSheet/PlatformColorValueTypes.js +15 -0
- package/Libraries/StyleSheet/PlatformColorValueTypesIOS.js +6 -0
- package/Libraries/StyleSheet/Rect.js +1 -0
- package/Libraries/StyleSheet/StyleSheet.js +31 -200
- package/Libraries/StyleSheet/StyleSheet.js.flow +188 -0
- package/Libraries/StyleSheet/{StyleSheet.win32.js → StyleSheetExports.js} +2 -151
- package/Libraries/StyleSheet/StyleSheetExports.js.flow +112 -0
- package/Libraries/StyleSheet/StyleSheetTypes.d.ts +1 -1
- package/Libraries/StyleSheet/StyleSheetTypes.js +130 -52
- package/Libraries/StyleSheet/flattenStyle.js +14 -4
- package/Libraries/StyleSheet/private/_TransformStyle.js +49 -21
- package/Libraries/StyleSheet/processBackgroundImage.js +670 -214
- package/Libraries/Text/Text.d.ts +2 -5
- package/Libraries/Text/Text.js +3 -3
- package/Libraries/Text/Text.win32.js +3 -3
- package/Libraries/Text/TextNativeComponent.js +0 -4
- package/Libraries/Text/TextNativeComponent.win32.js +0 -4
- package/Libraries/Text/TextProps.js +5 -33
- package/Libraries/Text/TextProps.win32.js +5 -30
- package/Libraries/Types/CodegenTypesNamespace.d.ts +45 -0
- package/Libraries/{Blob/__mocks__/BlobModule.js → Types/CodegenTypesNamespace.js} +4 -6
- package/Libraries/Types/CoreEventTypes.d.ts +6 -1
- package/Libraries/Types/CoreEventTypes.js +1 -1
- package/Libraries/Types/CoreEventTypes.win32.js +1 -1
- package/Libraries/Utilities/Appearance.js +2 -0
- package/Libraries/Utilities/BackHandler.js +17 -0
- package/Libraries/Utilities/DeviceInfo.js +2 -0
- package/Libraries/Utilities/Dimensions.js +1 -1
- package/Libraries/Utilities/Dimensions.win32.js +1 -1
- package/Libraries/Utilities/Platform.js +17 -0
- package/Libraries/Utilities/PlatformTypes.js +11 -3
- package/Libraries/Utilities/ReactNativeTestTools.js +2 -2
- package/Libraries/Utilities/codegenNativeCommands.d.ts +18 -0
- package/Libraries/Utilities/codegenNativeComponent.d.ts +26 -0
- package/Libraries/WebSocket/WebSocket.js +313 -8
- package/Libraries/vendor/core/ErrorUtils.js +28 -2
- package/Libraries/vendor/emitter/EventEmitter.js +6 -2
- package/flow/global.js +1 -0
- package/index.js +51 -331
- package/index.win32.js +71 -352
- package/interface.js +0 -4
- package/jest/resolver.js +31 -0
- package/overrides.json +45 -47
- package/package.json +24 -24
- package/src/private/animated/NativeAnimatedHelper.js +21 -8
- package/src/private/animated/NativeAnimatedHelper.win32.js +21 -8
- package/src/private/animated/createAnimatedPropsHook.js +11 -16
- package/src/private/animated/createAnimatedPropsMemoHook.js +1 -2
- package/src/private/components/{SafeAreaView_INTERNAL_DO_NOT_USE.js → safeareaview/SafeAreaView_INTERNAL_DO_NOT_USE.js} +6 -6
- package/src/private/components/{HScrollViewNativeComponents.js → scrollview/HScrollViewNativeComponents.js} +8 -8
- package/src/private/components/scrollview/VScrollViewNativeComponents.js +25 -0
- package/src/private/{devmenu → devsupport/devmenu}/DevMenu.js +1 -1
- package/src/private/{inspector → devsupport/devmenu/elementinspector}/BorderBox.js +3 -3
- package/src/private/{inspector → devsupport/devmenu/elementinspector}/BoxInspector.js +6 -5
- package/src/private/{inspector → devsupport/devmenu/elementinspector}/ElementBox.js +8 -6
- package/src/private/{inspector → devsupport/devmenu/elementinspector}/ElementProperties.js +11 -10
- package/src/private/{inspector → devsupport/devmenu/elementinspector}/Inspector.js +14 -12
- package/src/private/{inspector → devsupport/devmenu/elementinspector}/InspectorOverlay.js +5 -4
- package/src/private/{inspector → devsupport/devmenu/elementinspector}/InspectorPanel.js +9 -8
- package/src/private/{inspector → devsupport/devmenu/elementinspector}/NetworkOverlay.js +10 -9
- package/src/private/{inspector → devsupport/devmenu/elementinspector}/ReactDevToolsOverlay.js +7 -7
- package/src/private/{inspector → devsupport/devmenu/elementinspector}/StyleInspector.js +7 -6
- package/src/private/{inspector → devsupport/devmenu/elementinspector}/XHRInterceptor.js +2 -2
- package/src/private/{inspector → devsupport/devmenu/elementinspector}/getInspectorDataForViewAtPoint.js +4 -4
- package/src/private/{inspector → devsupport/devmenu/elementinspector}/resolveBoxStyle.js +1 -1
- package/src/private/{inspector → devsupport/devmenu/perfmonitor}/PerformanceOverlay.js +6 -5
- package/src/private/{specs_DEPRECATED/modules → devsupport/devmenu/specs}/NativeDevMenu.js +2 -2
- package/src/private/{debugging → devsupport/rndevtools}/ReactDevToolsSettingsManager.android.js +1 -1
- package/src/private/{debugging → devsupport/rndevtools}/ReactDevToolsSettingsManager.ios.js +1 -1
- package/src/private/{debugging → devsupport/rndevtools}/ReactDevToolsSettingsManager.win32.js +1 -1
- package/src/private/{debugging → devsupport/rndevtools}/setUpFuseboxReactDevToolsDispatcher.js +1 -1
- package/src/private/{fusebox → devsupport/rndevtools}/specs/NativeReactDevToolsRuntimeSettingsModule.js +2 -2
- package/src/private/{specs_DEPRECATED/modules → devsupport/rndevtools/specs}/NativeReactDevToolsSettingsManager.js +2 -2
- package/src/private/featureflags/ReactNativeFeatureFlags.js +82 -80
- package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +9 -1
- package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +17 -13
- package/src/private/renderer/errorhandling/ErrorHandlers.js +2 -2
- package/src/private/specs_DEPRECATED/modules/NativeAnimatedModule.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeAnimatedTurboModule.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeSampleTurboModule.js +3 -0
- package/src/private/styles/composeStyles.js +12 -5
- package/src/private/types/HostComponent.js +1 -1
- package/src/private/types/HostInstance.js +67 -1
- package/src/private/webapis/dom/nodes/ReactNativeElement.js +2 -5
- package/src/private/webapis/dom/nodes/ReadOnlyNode.js +5 -18
- package/src/private/webapis/dom/nodes/internals/NodeInternals.js +6 -0
- package/src/private/webapis/performance/Performance.js +1 -3
- package/src/private/webapis/performance/PerformanceEntry.js +6 -1
- package/src/private/webapis/performance/internals/RawPerformanceEntry.js +3 -0
- package/src/private/webapis/performance/specs/NativePerformance.js +10 -1
- package/src/types/globals.d.ts +42 -0
- package/src-win/Libraries/Components/TextInput/Tests/TextInputTest.tsx +7 -7
- package/src-win/Libraries/Components/Touchable/Tests/TouchableWin32Test.tsx +3 -3
- package/src-win/Libraries/Image/Tests/ImageWin32Test.tsx +1 -1
- package/src-win/Libraries/Text/Text.d.ts +2 -5
- package/types/index.d.ts +6 -3
- package/types/public/ReactNativeTypes.d.ts +2 -2
- package/Libraries/BatchedBridge/__mocks__/MessageQueueTestConfig.js +0 -38
- package/Libraries/BatchedBridge/__mocks__/MessageQueueTestModule.js +0 -22
- package/Libraries/Blob/FileReader_new.js +0 -231
- package/Libraries/Blob/FileReader_old.js +0 -186
- package/Libraries/Blob/__mocks__/FileReaderModule.js +0 -20
- package/Libraries/Components/RefreshControl/__mocks__/RefreshControlMock.js +0 -32
- package/Libraries/Core/__mocks__/ErrorUtils.js +0 -33
- package/Libraries/Core/__mocks__/NativeExceptionsManager.js +0 -19
- package/Libraries/EventEmitter/__mocks__/NativeEventEmitter.js +0 -49
- package/Libraries/Events/CustomEvent.js +0 -32
- package/Libraries/Events/EventPolyfill.js +0 -239
- package/Libraries/Lists/__flowtests__/FlatList-flowtest.js +0 -118
- package/Libraries/Lists/__flowtests__/SectionList-flowtest.js +0 -134
- package/Libraries/Network/XMLHttpRequest_new.js +0 -794
- package/Libraries/Network/XMLHttpRequest_old.js +0 -701
- package/Libraries/NewAppScreen/components/DebugInstructions.js +0 -41
- package/Libraries/NewAppScreen/components/Header.js +0 -77
- package/Libraries/NewAppScreen/components/HermesBadge.js +0 -53
- package/Libraries/NewAppScreen/components/LearnMoreLinks.js +0 -148
- package/Libraries/NewAppScreen/components/ReloadInstructions.js +0 -39
- package/Libraries/NewAppScreen/components/logo.png +0 -0
- package/Libraries/NewAppScreen/index.js +0 -25
- package/Libraries/StyleSheet/__flowtests__/StyleSheet-flowtest.js +0 -58
- package/Libraries/Utilities/DeviceInfo.win32.js +0 -19
- package/Libraries/Utilities/__mocks__/BackHandler.js +0 -45
- package/Libraries/Utilities/__mocks__/GlobalPerformanceLogger.js +0 -16
- package/Libraries/Utilities/__mocks__/PixelRatio.js +0 -25
- package/Libraries/WebSocket/WebSocketEvent.js +0 -30
- package/Libraries/WebSocket/WebSocket_new.js +0 -325
- package/Libraries/WebSocket/WebSocket_old.js +0 -297
- package/Libraries/WebSocket/__mocks__/event-target-shim.js +0 -27
- package/Libraries/__flowtests__/ReactNativeTypes-flowtest.js +0 -30
- package/Libraries/vendor/emitter/__flowtests__/EventEmitter-flowtest.js +0 -81
- package/flow/jest.js +0 -1287
- package/jest/__tests__/setup-test.js +0 -18
- package/src/private/components/VScrollViewNativeComponents.js +0 -25
- package/src/private/utilities/ensureInstance.js +0 -21
- package/src/private/webapis/performance/specs/__mocks__/NativePerformanceMock.js +0 -267
- package/types/modules/LaunchScreen.d.ts +0 -18
- /package/src/private/{devmenu → devsupport/devmenu}/DevMenu.d.ts +0 -0
- /package/src/private/{debugging → devsupport/rndevtools}/FuseboxSessionObserver.js +0 -0
|
@@ -22,9 +22,15 @@ import invariant from 'invariant';
|
|
|
22
22
|
|
|
23
23
|
export type AnimatedPropsAllowlist = $ReadOnly<{
|
|
24
24
|
style?: ?AnimatedStyleAllowlist,
|
|
25
|
-
[string]: true,
|
|
25
|
+
[key: string]: true | AnimatedStyleAllowlist,
|
|
26
26
|
}>;
|
|
27
27
|
|
|
28
|
+
type TargetView = {
|
|
29
|
+
+instance: TargetViewInstance,
|
|
30
|
+
connectedViewTag: ?number,
|
|
31
|
+
};
|
|
32
|
+
type TargetViewInstance = React.ElementRef<React.ElementType>;
|
|
33
|
+
|
|
28
34
|
function createAnimatedProps(
|
|
29
35
|
inputProps: {[string]: mixed},
|
|
30
36
|
allowlist: ?AnimatedPropsAllowlist,
|
|
@@ -75,11 +81,11 @@ function createAnimatedProps(
|
|
|
75
81
|
}
|
|
76
82
|
|
|
77
83
|
export default class AnimatedProps extends AnimatedNode {
|
|
78
|
-
#animatedView: any = null;
|
|
79
84
|
#callback: () => void;
|
|
80
85
|
#nodeKeys: $ReadOnlyArray<string>;
|
|
81
86
|
#nodes: $ReadOnlyArray<AnimatedNode>;
|
|
82
87
|
#props: {[string]: mixed};
|
|
88
|
+
#target: ?TargetView = null;
|
|
83
89
|
|
|
84
90
|
constructor(
|
|
85
91
|
inputProps: {[string]: mixed},
|
|
@@ -140,6 +146,22 @@ export default class AnimatedProps extends AnimatedNode {
|
|
|
140
146
|
return props;
|
|
141
147
|
}
|
|
142
148
|
|
|
149
|
+
__getNativeAnimatedEventTuples(): $ReadOnlyArray<[string, AnimatedEvent]> {
|
|
150
|
+
const tuples = [];
|
|
151
|
+
|
|
152
|
+
const keys = Object.keys(this.#props);
|
|
153
|
+
for (let ii = 0, length = keys.length; ii < length; ii++) {
|
|
154
|
+
const key = keys[ii];
|
|
155
|
+
const value = this.#props[key];
|
|
156
|
+
|
|
157
|
+
if (value instanceof AnimatedEvent && value.__isNative) {
|
|
158
|
+
tuples.push([key, value]);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
return tuples;
|
|
163
|
+
}
|
|
164
|
+
|
|
143
165
|
__getAnimatedValue(): Object {
|
|
144
166
|
const props: {[string]: mixed} = {};
|
|
145
167
|
|
|
@@ -164,10 +186,10 @@ export default class AnimatedProps extends AnimatedNode {
|
|
|
164
186
|
}
|
|
165
187
|
|
|
166
188
|
__detach(): void {
|
|
167
|
-
if (this.__isNative && this.#
|
|
168
|
-
this
|
|
189
|
+
if (this.__isNative && this.#target != null) {
|
|
190
|
+
this.#disconnectAnimatedView(this.#target);
|
|
169
191
|
}
|
|
170
|
-
this.#
|
|
192
|
+
this.#target = null;
|
|
171
193
|
|
|
172
194
|
const nodes = this.#nodes;
|
|
173
195
|
for (let ii = 0, length = nodes.length; ii < length; ii++) {
|
|
@@ -193,56 +215,54 @@ export default class AnimatedProps extends AnimatedNode {
|
|
|
193
215
|
this.__isNative = true;
|
|
194
216
|
|
|
195
217
|
// Since this does not call the super.__makeNative, we need to store the
|
|
196
|
-
// supplied platformConfig here, before calling
|
|
218
|
+
// supplied platformConfig here, before calling #connectAnimatedView
|
|
197
219
|
// where it will be needed to traverse the graph of attached values.
|
|
198
220
|
super.__setPlatformConfig(platformConfig);
|
|
199
221
|
|
|
200
|
-
if (this.#
|
|
201
|
-
this
|
|
222
|
+
if (this.#target != null) {
|
|
223
|
+
this.#connectAnimatedView(this.#target);
|
|
202
224
|
}
|
|
203
225
|
}
|
|
204
226
|
}
|
|
205
227
|
|
|
206
|
-
setNativeView(
|
|
207
|
-
if (this.#
|
|
228
|
+
setNativeView(instance: TargetViewInstance): void {
|
|
229
|
+
if (this.#target?.instance === instance) {
|
|
208
230
|
return;
|
|
209
231
|
}
|
|
210
|
-
this.#
|
|
232
|
+
this.#target = {instance, connectedViewTag: null};
|
|
211
233
|
if (this.__isNative) {
|
|
212
|
-
this
|
|
234
|
+
this.#connectAnimatedView(this.#target);
|
|
213
235
|
}
|
|
214
236
|
}
|
|
215
237
|
|
|
216
|
-
|
|
238
|
+
#connectAnimatedView(target: TargetView): void {
|
|
217
239
|
invariant(this.__isNative, 'Expected node to be marked as "native"');
|
|
218
|
-
let
|
|
219
|
-
if (
|
|
240
|
+
let viewTag: ?number = findNodeHandle(target.instance);
|
|
241
|
+
if (viewTag == null) {
|
|
220
242
|
if (process.env.NODE_ENV === 'test') {
|
|
221
|
-
|
|
243
|
+
viewTag = -1;
|
|
222
244
|
} else {
|
|
223
245
|
throw new Error('Unable to locate attached view in the native tree');
|
|
224
246
|
}
|
|
225
247
|
}
|
|
226
248
|
NativeAnimatedHelper.API.connectAnimatedNodeToView(
|
|
227
249
|
this.__getNativeTag(),
|
|
228
|
-
|
|
250
|
+
viewTag,
|
|
229
251
|
);
|
|
252
|
+
target.connectedViewTag = viewTag;
|
|
230
253
|
}
|
|
231
254
|
|
|
232
|
-
|
|
255
|
+
#disconnectAnimatedView(target: TargetView): void {
|
|
233
256
|
invariant(this.__isNative, 'Expected node to be marked as "native"');
|
|
234
|
-
|
|
235
|
-
if (
|
|
236
|
-
|
|
237
|
-
nativeViewTag = -1;
|
|
238
|
-
} else {
|
|
239
|
-
throw new Error('Unable to locate attached view in the native tree');
|
|
240
|
-
}
|
|
257
|
+
const viewTag = target.connectedViewTag;
|
|
258
|
+
if (viewTag == null) {
|
|
259
|
+
return;
|
|
241
260
|
}
|
|
242
261
|
NativeAnimatedHelper.API.disconnectAnimatedNodeFromView(
|
|
243
262
|
this.__getNativeTag(),
|
|
244
|
-
|
|
263
|
+
viewTag,
|
|
245
264
|
);
|
|
265
|
+
target.connectedViewTag = null;
|
|
246
266
|
}
|
|
247
267
|
|
|
248
268
|
__restoreDefaultValues(): void {
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
import type {EventSubscription} from '../../vendor/emitter/EventEmitter';
|
|
12
12
|
import type {PlatformConfig} from '../AnimatedPlatformConfig';
|
|
13
|
-
import type Animation
|
|
13
|
+
import type Animation from '../animations/Animation';
|
|
14
|
+
import type {EndCallback} from '../animations/Animation';
|
|
14
15
|
import type {InterpolationConfigType} from './AnimatedInterpolation';
|
|
15
16
|
import type AnimatedNode from './AnimatedNode';
|
|
16
17
|
import type {AnimatedNodeConfig} from './AnimatedNode';
|
|
@@ -51,7 +52,6 @@ const NativeAnimatedAPI = NativeAnimatedHelper.API;
|
|
|
51
52
|
* transform which can receive values from multiple parents.
|
|
52
53
|
*/
|
|
53
54
|
export function flushValue(rootNode: AnimatedNode): void {
|
|
54
|
-
// eslint-disable-next-line func-call-spacing
|
|
55
55
|
const leaves = new Set<{update: () => void, ...}>();
|
|
56
56
|
function findAnimatedStyles(node: AnimatedNode) {
|
|
57
57
|
// $FlowFixMe[prop-missing]
|
|
@@ -85,8 +85,8 @@ function _executeAsAnimatedBatch(id: string, operation: () => void) {
|
|
|
85
85
|
* See https://reactnative.dev/docs/animatedvalue
|
|
86
86
|
*/
|
|
87
87
|
export default class AnimatedValue extends AnimatedWithChildren {
|
|
88
|
-
#listenerCount: number
|
|
89
|
-
#updateSubscription: ?EventSubscription
|
|
88
|
+
#listenerCount: number;
|
|
89
|
+
#updateSubscription: ?EventSubscription;
|
|
90
90
|
|
|
91
91
|
_value: number;
|
|
92
92
|
_startingValue: number;
|
|
@@ -99,6 +99,10 @@ export default class AnimatedValue extends AnimatedWithChildren {
|
|
|
99
99
|
if (typeof value !== 'number') {
|
|
100
100
|
throw new Error('AnimatedValue: Attempting to set value to undefined');
|
|
101
101
|
}
|
|
102
|
+
|
|
103
|
+
this.#listenerCount = 0;
|
|
104
|
+
this.#updateSubscription = null;
|
|
105
|
+
|
|
102
106
|
this._startingValue = this._value = value;
|
|
103
107
|
this._offset = 0;
|
|
104
108
|
this._animation = null;
|
|
@@ -164,7 +168,7 @@ export default class AnimatedValue extends AnimatedWithChildren {
|
|
|
164
168
|
'onAnimatedValueUpdate',
|
|
165
169
|
data => {
|
|
166
170
|
if (data.tag === nativeTag) {
|
|
167
|
-
this.__onAnimatedValueUpdateReceived(data.value);
|
|
171
|
+
this.__onAnimatedValueUpdateReceived(data.value, data.offset);
|
|
168
172
|
}
|
|
169
173
|
},
|
|
170
174
|
);
|
|
@@ -242,7 +246,9 @@ export default class AnimatedValue extends AnimatedWithChildren {
|
|
|
242
246
|
this._offset += this._value;
|
|
243
247
|
this._value = 0;
|
|
244
248
|
if (this.__isNative) {
|
|
245
|
-
|
|
249
|
+
_executeAsAnimatedBatch(this.__getNativeTag().toString(), () =>
|
|
250
|
+
NativeAnimatedAPI.extractAnimatedNodeOffset(this.__getNativeTag()),
|
|
251
|
+
);
|
|
246
252
|
}
|
|
247
253
|
}
|
|
248
254
|
|
|
@@ -282,8 +288,11 @@ export default class AnimatedValue extends AnimatedWithChildren {
|
|
|
282
288
|
}
|
|
283
289
|
}
|
|
284
290
|
|
|
285
|
-
__onAnimatedValueUpdateReceived(value: number): void {
|
|
291
|
+
__onAnimatedValueUpdateReceived(value: number, offset?: number): void {
|
|
286
292
|
this._updateValue(value, false /*flush*/);
|
|
293
|
+
if (offset != null) {
|
|
294
|
+
this._offset = offset;
|
|
295
|
+
}
|
|
287
296
|
}
|
|
288
297
|
|
|
289
298
|
/**
|
|
@@ -214,7 +214,9 @@ export default class AnimatedValueXY extends AnimatedWithChildren {
|
|
|
214
214
|
*
|
|
215
215
|
* See https://reactnative.dev/docs/animatedvaluexy#gettranslatetransform
|
|
216
216
|
*/
|
|
217
|
-
getTranslateTransform(): Array<
|
|
217
|
+
getTranslateTransform(): Array<
|
|
218
|
+
{translateX: AnimatedValue} | {translateY: AnimatedValue},
|
|
219
|
+
> {
|
|
218
220
|
return [{translateX: this.x}, {translateY: this.y}];
|
|
219
221
|
}
|
|
220
222
|
|
|
@@ -22,7 +22,12 @@ import NativeAppState from './NativeAppState';
|
|
|
22
22
|
* - @platform android - on another Activity (even if it was launched by your app)
|
|
23
23
|
* @platform ios - inactive - This is a state that occurs when transitioning between foreground & background, and during periods of inactivity such as entering the multitasking view, opening the Notification Center or in the event of an incoming call.
|
|
24
24
|
*/
|
|
25
|
-
export type AppStateStatus =
|
|
25
|
+
export type AppStateStatus =
|
|
26
|
+
| 'inactive'
|
|
27
|
+
| 'background'
|
|
28
|
+
| 'active'
|
|
29
|
+
| 'extension'
|
|
30
|
+
| 'unknown';
|
|
26
31
|
|
|
27
32
|
/**
|
|
28
33
|
* change - This even is received when the app state has changed.
|
|
@@ -107,7 +112,7 @@ class AppStateImpl {
|
|
|
107
112
|
*/
|
|
108
113
|
addEventListener<K: AppStateEvent>(
|
|
109
114
|
type: K,
|
|
110
|
-
handler: (
|
|
115
|
+
handler: (...AppStateEventDefinitions[K]) => void,
|
|
111
116
|
): EventSubscription {
|
|
112
117
|
const emitter = this._emitter;
|
|
113
118
|
if (emitter == null) {
|
|
@@ -35,7 +35,7 @@ const PARAMS = 2;
|
|
|
35
35
|
const MIN_TIME_BETWEEN_FLUSHES_MS = 5;
|
|
36
36
|
|
|
37
37
|
// eslint-disable-next-line no-bitwise
|
|
38
|
-
const
|
|
38
|
+
const TRACE_TAG_REACT = 1 << 13;
|
|
39
39
|
|
|
40
40
|
const DEBUG_INFO_LIMIT = 32;
|
|
41
41
|
|
|
@@ -228,7 +228,7 @@ class MessageQueue {
|
|
|
228
228
|
if (__DEV__) {
|
|
229
229
|
global.nativeTraceBeginAsyncFlow &&
|
|
230
230
|
global.nativeTraceBeginAsyncFlow(
|
|
231
|
-
|
|
231
|
+
TRACE_TAG_REACT,
|
|
232
232
|
'native',
|
|
233
233
|
this._callID,
|
|
234
234
|
);
|
|
@@ -65,6 +65,7 @@ function genModule(
|
|
|
65
65
|
module[methodName] = genMethod(moduleID, methodID, methodType);
|
|
66
66
|
});
|
|
67
67
|
|
|
68
|
+
// $FlowFixMe[unsafe-object-assign]
|
|
68
69
|
Object.assign(module, constants);
|
|
69
70
|
|
|
70
71
|
if (module.getConstants == null) {
|
|
@@ -173,6 +174,7 @@ function updateErrorWithErrorData(
|
|
|
173
174
|
/* $FlowFixMe[class-object-subtyping] added when improving typing for this
|
|
174
175
|
* parameters */
|
|
175
176
|
// $FlowFixMe[incompatible-return]
|
|
177
|
+
// $FlowFixMe[unsafe-object-assign]
|
|
176
178
|
return Object.assign(error, errorData || {});
|
|
177
179
|
}
|
|
178
180
|
|
|
@@ -110,6 +110,7 @@ class BlobManager {
|
|
|
110
110
|
static createFromOptions(options: BlobData): Blob {
|
|
111
111
|
BlobRegistry.register(options.blobId);
|
|
112
112
|
// $FlowFixMe[prop-missing]
|
|
113
|
+
// $FlowFixMe[unsafe-object-assign]
|
|
113
114
|
return Object.assign(Object.create(Blob.prototype), {
|
|
114
115
|
data:
|
|
115
116
|
// Reuse the collector instance when creating from an existing blob.
|
|
@@ -8,13 +8,224 @@
|
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import
|
|
11
|
+
import type {EventCallback} from '../../src/private/webapis/dom/events/EventTarget';
|
|
12
|
+
import type Blob from './Blob';
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
import Event from '../../src/private/webapis/dom/events/Event';
|
|
15
|
+
import {
|
|
16
|
+
getEventHandlerAttribute,
|
|
17
|
+
setEventHandlerAttribute,
|
|
18
|
+
} from '../../src/private/webapis/dom/events/EventHandlerAttributes';
|
|
19
|
+
import EventTarget from '../../src/private/webapis/dom/events/EventTarget';
|
|
20
|
+
import NativeFileReaderModule from './NativeFileReaderModule';
|
|
21
|
+
import {toByteArray} from 'base64-js';
|
|
16
22
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
23
|
+
type ReadyState =
|
|
24
|
+
| 0 // EMPTY
|
|
25
|
+
| 1 // LOADING
|
|
26
|
+
| 2; // DONE
|
|
27
|
+
|
|
28
|
+
type ReaderResult = string | ArrayBuffer;
|
|
29
|
+
|
|
30
|
+
const EMPTY = 0;
|
|
31
|
+
const LOADING = 1;
|
|
32
|
+
const DONE = 2;
|
|
33
|
+
|
|
34
|
+
class FileReader extends EventTarget {
|
|
35
|
+
static EMPTY: number = EMPTY;
|
|
36
|
+
static LOADING: number = LOADING;
|
|
37
|
+
static DONE: number = DONE;
|
|
38
|
+
|
|
39
|
+
EMPTY: number = EMPTY;
|
|
40
|
+
LOADING: number = LOADING;
|
|
41
|
+
DONE: number = DONE;
|
|
42
|
+
|
|
43
|
+
_readyState: ReadyState;
|
|
44
|
+
_error: ?Error;
|
|
45
|
+
_result: ?ReaderResult;
|
|
46
|
+
_aborted: boolean = false;
|
|
47
|
+
|
|
48
|
+
constructor() {
|
|
49
|
+
super();
|
|
50
|
+
this._reset();
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
_reset(): void {
|
|
54
|
+
this._readyState = EMPTY;
|
|
55
|
+
this._error = null;
|
|
56
|
+
this._result = null;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
_setReadyState(newState: ReadyState) {
|
|
60
|
+
this._readyState = newState;
|
|
61
|
+
this.dispatchEvent(new Event('readystatechange'));
|
|
62
|
+
if (newState === DONE) {
|
|
63
|
+
if (this._aborted) {
|
|
64
|
+
this.dispatchEvent(new Event('abort'));
|
|
65
|
+
} else if (this._error) {
|
|
66
|
+
this.dispatchEvent(new Event('error'));
|
|
67
|
+
} else {
|
|
68
|
+
this.dispatchEvent(new Event('load'));
|
|
69
|
+
}
|
|
70
|
+
this.dispatchEvent(new Event('loadend'));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
readAsArrayBuffer(blob: ?Blob): void {
|
|
75
|
+
this._aborted = false;
|
|
76
|
+
|
|
77
|
+
if (blob == null) {
|
|
78
|
+
throw new TypeError(
|
|
79
|
+
"Failed to execute 'readAsArrayBuffer' on 'FileReader': parameter 1 is not of type 'Blob'",
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
NativeFileReaderModule.readAsDataURL(blob.data).then(
|
|
84
|
+
(text: string) => {
|
|
85
|
+
if (this._aborted) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const base64 = text.split(',')[1];
|
|
90
|
+
const typedArray = toByteArray(base64);
|
|
91
|
+
|
|
92
|
+
this._result = typedArray.buffer;
|
|
93
|
+
this._setReadyState(DONE);
|
|
94
|
+
},
|
|
95
|
+
error => {
|
|
96
|
+
if (this._aborted) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
this._error = error;
|
|
100
|
+
this._setReadyState(DONE);
|
|
101
|
+
},
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
readAsDataURL(blob: ?Blob): void {
|
|
106
|
+
this._aborted = false;
|
|
107
|
+
|
|
108
|
+
if (blob == null) {
|
|
109
|
+
throw new TypeError(
|
|
110
|
+
"Failed to execute 'readAsDataURL' on 'FileReader': parameter 1 is not of type 'Blob'",
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
NativeFileReaderModule.readAsDataURL(blob.data).then(
|
|
115
|
+
(text: string) => {
|
|
116
|
+
if (this._aborted) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
this._result = text;
|
|
120
|
+
this._setReadyState(DONE);
|
|
121
|
+
},
|
|
122
|
+
error => {
|
|
123
|
+
if (this._aborted) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
this._error = error;
|
|
127
|
+
this._setReadyState(DONE);
|
|
128
|
+
},
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
readAsText(blob: ?Blob, encoding: string = 'UTF-8'): void {
|
|
133
|
+
this._aborted = false;
|
|
134
|
+
|
|
135
|
+
if (blob == null) {
|
|
136
|
+
throw new TypeError(
|
|
137
|
+
"Failed to execute 'readAsText' on 'FileReader': parameter 1 is not of type 'Blob'",
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
NativeFileReaderModule.readAsText(blob.data, encoding).then(
|
|
142
|
+
(text: string) => {
|
|
143
|
+
if (this._aborted) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
this._result = text;
|
|
147
|
+
this._setReadyState(DONE);
|
|
148
|
+
},
|
|
149
|
+
error => {
|
|
150
|
+
if (this._aborted) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
this._error = error;
|
|
154
|
+
this._setReadyState(DONE);
|
|
155
|
+
},
|
|
156
|
+
);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
abort() {
|
|
160
|
+
this._aborted = true;
|
|
161
|
+
// only call onreadystatechange if there is something to abort, as per spec
|
|
162
|
+
if (this._readyState !== EMPTY && this._readyState !== DONE) {
|
|
163
|
+
this._reset();
|
|
164
|
+
this._setReadyState(DONE);
|
|
165
|
+
}
|
|
166
|
+
// Reset again after, in case modified in handler
|
|
167
|
+
this._reset();
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
get readyState(): ReadyState {
|
|
171
|
+
return this._readyState;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
get error(): ?Error {
|
|
175
|
+
return this._error;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
get result(): ?ReaderResult {
|
|
179
|
+
return this._result;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
get onabort(): EventCallback | null {
|
|
183
|
+
return getEventHandlerAttribute(this, 'abort');
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
set onabort(listener: ?EventCallback) {
|
|
187
|
+
setEventHandlerAttribute(this, 'abort', listener);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
get onerror(): EventCallback | null {
|
|
191
|
+
return getEventHandlerAttribute(this, 'error');
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
set onerror(listener: ?EventCallback) {
|
|
195
|
+
setEventHandlerAttribute(this, 'error', listener);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
get onload(): EventCallback | null {
|
|
199
|
+
return getEventHandlerAttribute(this, 'load');
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
set onload(listener: ?EventCallback) {
|
|
203
|
+
setEventHandlerAttribute(this, 'load', listener);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
get onloadstart(): EventCallback | null {
|
|
207
|
+
return getEventHandlerAttribute(this, 'loadstart');
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
set onloadstart(listener: ?EventCallback) {
|
|
211
|
+
setEventHandlerAttribute(this, 'loadstart', listener);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
get onloadend(): EventCallback | null {
|
|
215
|
+
return getEventHandlerAttribute(this, 'loadend');
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
set onloadend(listener: ?EventCallback) {
|
|
219
|
+
setEventHandlerAttribute(this, 'loadend', listener);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
get onprogress(): EventCallback | null {
|
|
223
|
+
return getEventHandlerAttribute(this, 'progress');
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
set onprogress(listener: ?EventCallback) {
|
|
227
|
+
setEventHandlerAttribute(this, 'progress', listener);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
export default FileReader;
|
package/Libraries/Blob/URL.js
CHANGED
|
@@ -81,7 +81,19 @@ export class URL {
|
|
|
81
81
|
let baseUrl = null;
|
|
82
82
|
if (!base || validateBaseUrl(url)) {
|
|
83
83
|
this._url = url;
|
|
84
|
-
if (
|
|
84
|
+
if (this._url.includes('#')) {
|
|
85
|
+
const split = this._url.split('#');
|
|
86
|
+
const beforeHash = split[0];
|
|
87
|
+
const website = beforeHash.split('://')[1];
|
|
88
|
+
if (!website.includes('/')) {
|
|
89
|
+
this._url = split.join('/#');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (
|
|
94
|
+
!this._url.endsWith('/') &&
|
|
95
|
+
!(this._url.includes('?') || this._url.includes('#'))
|
|
96
|
+
) {
|
|
85
97
|
this._url += '/';
|
|
86
98
|
}
|
|
87
99
|
} else {
|
|
@@ -107,15 +119,21 @@ export class URL {
|
|
|
107
119
|
}
|
|
108
120
|
|
|
109
121
|
get hash(): string {
|
|
110
|
-
|
|
122
|
+
const hashMatch = this._url.match(/#([^/]*)/);
|
|
123
|
+
return hashMatch ? `#${hashMatch[1]}` : '';
|
|
111
124
|
}
|
|
112
125
|
|
|
113
126
|
get host(): string {
|
|
114
|
-
|
|
127
|
+
const hostMatch = this._url.match(/^https?:\/\/(?:[^@]+@)?([^:/?#]+)/);
|
|
128
|
+
const portMatch = this._url.match(/:(\d+)(?=[/?#]|$)/);
|
|
129
|
+
return hostMatch
|
|
130
|
+
? hostMatch[1] + (portMatch ? `:${portMatch[1]}` : '')
|
|
131
|
+
: '';
|
|
115
132
|
}
|
|
116
133
|
|
|
117
134
|
get hostname(): string {
|
|
118
|
-
|
|
135
|
+
const hostnameMatch = this._url.match(/^https?:\/\/(?:[^@]+@)?([^:/?#]+)/);
|
|
136
|
+
return hostnameMatch ? hostnameMatch[1] : '';
|
|
119
137
|
}
|
|
120
138
|
|
|
121
139
|
get href(): string {
|
|
@@ -123,32 +141,38 @@ export class URL {
|
|
|
123
141
|
}
|
|
124
142
|
|
|
125
143
|
get origin(): string {
|
|
126
|
-
|
|
144
|
+
const matches = this._url.match(/^(https?:\/\/[^/]+)/);
|
|
145
|
+
return matches ? matches[1] : '';
|
|
127
146
|
}
|
|
128
147
|
|
|
129
148
|
get password(): string {
|
|
130
|
-
|
|
149
|
+
const passwordMatch = this._url.match(/https?:\/\/.*:(.*)@/);
|
|
150
|
+
return passwordMatch ? passwordMatch[1] : '';
|
|
131
151
|
}
|
|
132
152
|
|
|
133
153
|
get pathname(): string {
|
|
134
|
-
|
|
154
|
+
const pathMatch = this._url.match(/https?:\/\/[^/]+(\/[^?#]*)?/);
|
|
155
|
+
return pathMatch ? pathMatch[1] || '/' : '/';
|
|
135
156
|
}
|
|
136
157
|
|
|
137
158
|
get port(): string {
|
|
138
|
-
|
|
159
|
+
const portMatch = this._url.match(/:(\d+)(?=[/?#]|$)/);
|
|
160
|
+
return portMatch ? portMatch[1] : '';
|
|
139
161
|
}
|
|
140
162
|
|
|
141
163
|
get protocol(): string {
|
|
142
|
-
|
|
164
|
+
const protocolMatch = this._url.match(/^([a-zA-Z][a-zA-Z\d+\-.]*):/);
|
|
165
|
+
return protocolMatch ? protocolMatch[1] + ':' : '';
|
|
143
166
|
}
|
|
144
167
|
|
|
145
168
|
get search(): string {
|
|
146
|
-
|
|
169
|
+
const searchMatch = this._url.match(/\?([^#]*)/);
|
|
170
|
+
return searchMatch ? `?${searchMatch[1]}` : '';
|
|
147
171
|
}
|
|
148
172
|
|
|
149
173
|
get searchParams(): URLSearchParams {
|
|
150
174
|
if (this._searchParamsInstance == null) {
|
|
151
|
-
this._searchParamsInstance = new URLSearchParams();
|
|
175
|
+
this._searchParamsInstance = new URLSearchParams(this.search);
|
|
152
176
|
}
|
|
153
177
|
return this._searchParamsInstance;
|
|
154
178
|
}
|
|
@@ -168,6 +192,7 @@ export class URL {
|
|
|
168
192
|
}
|
|
169
193
|
|
|
170
194
|
get username(): string {
|
|
171
|
-
|
|
195
|
+
const usernameMatch = this._url.match(/^https?:\/\/([^:@]+)(?::[^@]*)?@/);
|
|
196
|
+
return usernameMatch ? usernameMatch[1] : '';
|
|
172
197
|
}
|
|
173
198
|
}
|