@react-native-oh/react-native-harmony 0.77.18 → 0.77.22
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/Libraries/ActionSheetIOS/ActionSheetIOS.d.ts +87 -0
- package/Libraries/ActionSheetIOS/ActionSheetIOS.js +175 -0
- package/Libraries/ActionSheetIOS/NativeActionSheetManager.js +13 -0
- package/Libraries/ActionSheetIOS/React-RCTActionSheet.podspec +34 -0
- package/Libraries/Alert/Alert.d.ts +91 -0
- package/Libraries/Alert/Alert.js +181 -0
- package/Libraries/Alert/NativeAlertManager.js +13 -0
- package/Libraries/Alert/RCTAlertManager.android.js +27 -0
- package/Libraries/Alert/RCTAlertManager.ios.js +25 -0
- package/Libraries/Alert/RCTAlertManager.js.flow +18 -0
- package/Libraries/Alert/delegates/AlertDelegate.ts +33 -0
- package/Libraries/Alert/delegates/BaseAlertDelegate.ts +37 -0
- package/Libraries/Animated/Animated.d.ts +626 -0
- package/Libraries/Animated/Animated.js +48 -0
- package/Libraries/Animated/AnimatedEvent.js +256 -0
- package/Libraries/Animated/AnimatedImplementation.js +754 -0
- package/Libraries/Animated/AnimatedMock.js +195 -0
- package/Libraries/Animated/AnimatedPlatformConfig.js +13 -0
- package/Libraries/Animated/AnimatedWeb.js +26 -0
- package/Libraries/Animated/Easing.d.ts +37 -0
- package/Libraries/Animated/Easing.js +250 -0
- package/Libraries/Animated/NativeAnimatedAllowlist.js +122 -0
- package/Libraries/Animated/NativeAnimatedModule.js +13 -0
- package/Libraries/Animated/NativeAnimatedTurboModule.js +13 -0
- package/Libraries/Animated/SpringConfig.js +98 -0
- package/Libraries/Animated/animations/Animation.js +171 -0
- package/Libraries/Animated/animations/DecayAnimation.js +121 -0
- package/Libraries/Animated/animations/SpringAnimation.js +372 -0
- package/Libraries/Animated/animations/TimingAnimation.js +173 -0
- package/Libraries/Animated/bezier.js +164 -0
- package/Libraries/Animated/components/AnimatedFlatList.js +20 -0
- package/Libraries/Animated/components/AnimatedImage.js +22 -0
- package/Libraries/Animated/components/AnimatedScrollView.js +137 -0
- package/Libraries/Animated/components/AnimatedSectionList.js +22 -0
- package/Libraries/Animated/components/AnimatedText.js +22 -0
- package/Libraries/Animated/components/AnimatedView.js +20 -0
- package/Libraries/Animated/createAnimatedComponent.js +102 -0
- package/Libraries/Animated/delegates/createAnimatedComponentDelegate.js +3 -0
- package/Libraries/Animated/nodes/AnimatedAddition.js +64 -0
- package/Libraries/Animated/nodes/AnimatedColor.js +320 -0
- package/Libraries/Animated/nodes/AnimatedDiffClamp.js +72 -0
- package/Libraries/Animated/nodes/AnimatedDivision.js +80 -0
- package/Libraries/Animated/nodes/AnimatedInterpolation.js +416 -0
- package/Libraries/Animated/nodes/AnimatedModulo.js +63 -0
- package/Libraries/Animated/nodes/AnimatedMultiplication.js +63 -0
- package/Libraries/Animated/nodes/AnimatedNode.js +200 -0
- package/Libraries/Animated/nodes/AnimatedObject.js +162 -0
- package/Libraries/Animated/nodes/AnimatedProps.js +281 -0
- package/Libraries/Animated/nodes/AnimatedStyle.js +251 -0
- package/Libraries/Animated/nodes/AnimatedSubtraction.js +64 -0
- package/Libraries/Animated/nodes/AnimatedTracking.js +100 -0
- package/Libraries/Animated/nodes/AnimatedTransform.js +198 -0
- package/Libraries/Animated/nodes/AnimatedValue.js +303 -0
- package/Libraries/Animated/nodes/AnimatedValueXY.js +236 -0
- package/Libraries/Animated/nodes/AnimatedWithChildren.js +85 -0
- package/Libraries/Animated/shouldUseTurboAnimatedModule.js +17 -0
- package/Libraries/Animated/useAnimatedProps.js +389 -0
- package/Libraries/Animated/useAnimatedValue.d.ts +15 -0
- package/Libraries/Animated/useAnimatedValue.js +25 -0
- package/Libraries/AppDelegate/RCTAppDelegate+Protected.h +16 -0
- package/Libraries/AppDelegate/RCTAppDelegate.h +122 -0
- package/Libraries/AppDelegate/RCTAppDelegate.mm +330 -0
- package/Libraries/AppDelegate/RCTAppSetupUtils.h +59 -0
- package/Libraries/AppDelegate/RCTAppSetupUtils.mm +167 -0
- package/Libraries/AppDelegate/RCTArchConfiguratorProtocol.h +32 -0
- package/Libraries/AppDelegate/RCTDependencyProvider.h +26 -0
- package/Libraries/AppDelegate/RCTRootViewFactory.h +198 -0
- package/Libraries/AppDelegate/RCTRootViewFactory.mm +310 -0
- package/Libraries/AppDelegate/RCTUIConfiguratorProtocol.h +56 -0
- package/Libraries/AppDelegate/React-RCTAppDelegate.podspec +99 -0
- package/Libraries/AppState/AppState.d.ts +58 -0
- package/Libraries/AppState/AppState.js +128 -0
- package/Libraries/AppState/NativeAppState.js +13 -0
- package/Libraries/BatchedBridge/BatchedBridge.js +28 -0
- package/Libraries/BatchedBridge/MessageQueue.js +492 -0
- package/Libraries/BatchedBridge/NativeModules.d.ts +25 -0
- package/Libraries/BatchedBridge/NativeModules.js +212 -0
- package/Libraries/BatchedBridge/__mocks__/MessageQueueTestConfig.js +38 -0
- package/Libraries/BatchedBridge/__mocks__/MessageQueueTestModule.js +22 -0
- package/Libraries/Blob/Blob.js +158 -0
- package/Libraries/Blob/BlobManager.js +179 -0
- package/Libraries/Blob/BlobRegistry.js +43 -0
- package/Libraries/Blob/BlobTypes.js +30 -0
- package/Libraries/Blob/File.js +55 -0
- package/Libraries/Blob/FileReader.js +186 -0
- package/Libraries/Blob/NativeBlobModule.js +13 -0
- package/Libraries/Blob/NativeFileReaderModule.js +13 -0
- package/Libraries/Blob/RCTBlobCollector.h +26 -0
- package/Libraries/Blob/RCTBlobCollector.mm +57 -0
- package/Libraries/Blob/RCTBlobManager.h +35 -0
- package/Libraries/Blob/RCTBlobManager.mm +358 -0
- package/Libraries/Blob/RCTBlobPlugins.h +41 -0
- package/Libraries/Blob/RCTBlobPlugins.mm +34 -0
- package/Libraries/Blob/RCTFileReaderModule.h +12 -0
- package/Libraries/Blob/RCTFileReaderModule.mm +96 -0
- package/Libraries/Blob/React-RCTBlob.podspec +68 -0
- package/Libraries/Blob/URL.js +173 -0
- package/Libraries/Blob/URLSearchParams.js +71 -0
- package/Libraries/Blob/URLSearchParams.js.flow +23 -0
- package/Libraries/Blob/__mocks__/BlobModule.js +16 -0
- package/Libraries/Blob/__mocks__/FileReaderModule.js +20 -0
- package/Libraries/BugReporting/BugReporting.js +140 -0
- package/Libraries/BugReporting/NativeBugReporting.js +13 -0
- package/Libraries/BugReporting/dumpReactTree.js +151 -0
- package/Libraries/BugReporting/getReactData.js +187 -0
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +173 -0
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +514 -0
- package/Libraries/Components/AccessibilityInfo/NativeAccessibilityInfo.js +13 -0
- package/Libraries/Components/AccessibilityInfo/NativeAccessibilityManager.js +13 -0
- package/Libraries/Components/AccessibilityInfo/delegates/AccessibilityInfoDelegate.ts +28 -0
- package/Libraries/Components/AccessibilityInfo/delegates/BaseAccessibilityInfoDelegate.ts +69 -0
- package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.android.js +36 -0
- package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.ios.js +26 -0
- package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.js.flow +20 -0
- package/Libraries/Components/ActivityIndicator/ActivityIndicator.d.ts +86 -0
- package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +177 -0
- package/Libraries/Components/ActivityIndicator/ActivityIndicatorViewNativeComponent.js +13 -0
- package/Libraries/Components/Button.d.ts +42 -0
- package/Libraries/Components/Button.js +450 -0
- package/Libraries/Components/Clipboard/Clipboard.d.ts +28 -0
- package/Libraries/Components/Clipboard/Clipboard.js +40 -0
- package/Libraries/Components/Clipboard/NativeClipboard.js +13 -0
- package/Libraries/Components/DrawerAndroid/AndroidDrawerLayoutNativeComponent.js +13 -0
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +394 -0
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.d.ts +141 -0
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.js +14 -0
- package/Libraries/Components/Keyboard/Keyboard.d.ts +109 -0
- package/Libraries/Components/Keyboard/Keyboard.js +205 -0
- package/Libraries/Components/Keyboard/KeyboardAvoidingView.d.ts +46 -0
- package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +305 -0
- package/Libraries/Components/Keyboard/NativeKeyboardObserver.js +13 -0
- package/Libraries/Components/Keyboard/delegates/BaseKeyboardAvoidingViewDelegate.ts +28 -0
- package/Libraries/Components/Keyboard/delegates/KeyboardAvoidingViewDelegate.ts +6 -0
- package/Libraries/Components/Pressable/Pressable.d.ts +167 -0
- package/Libraries/Components/Pressable/Pressable.js +369 -0
- package/Libraries/Components/Pressable/useAndroidRippleForView.js +109 -0
- package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.android.js +113 -0
- package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.d.ts +83 -0
- package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.js +20 -0
- package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidNativeComponent.js +13 -0
- package/Libraries/Components/RefreshControl/AndroidSwipeRefreshLayoutNativeComponent.js +13 -0
- package/Libraries/Components/RefreshControl/PullToRefreshViewNativeComponent.js +13 -0
- package/Libraries/Components/RefreshControl/RefreshControl.d.ts +87 -0
- package/Libraries/Components/RefreshControl/RefreshControl.js +219 -0
- package/Libraries/Components/RefreshControl/__mocks__/RefreshControlMock.js +31 -0
- package/Libraries/Components/RefreshControl/delegates/BaseRefreshControlDelegate.ts +31 -0
- package/Libraries/Components/RefreshControl/delegates/RefreshControlDelegate.ts +21 -0
- package/Libraries/Components/SafeAreaView/RCTSafeAreaViewNativeComponent.js +13 -0
- package/Libraries/Components/SafeAreaView/SafeAreaView.d.ts +24 -0
- package/Libraries/Components/SafeAreaView/SafeAreaView.js +34 -0
- package/Libraries/Components/ScrollView/AndroidHorizontalScrollContentViewNativeComponent.js +13 -0
- package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +73 -0
- package/Libraries/Components/ScrollView/ScrollContentViewNativeComponent.js +32 -0
- package/Libraries/Components/ScrollView/ScrollView.d.ts +910 -0
- package/Libraries/Components/ScrollView/ScrollView.js +1936 -0
- package/Libraries/Components/ScrollView/ScrollViewCommands.js +52 -0
- package/Libraries/Components/ScrollView/ScrollViewContext.js +24 -0
- package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +31 -0
- package/Libraries/Components/ScrollView/ScrollViewNativeComponentType.js +81 -0
- package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +310 -0
- package/Libraries/Components/ScrollView/delegates/BaseScrollViewDelegate.ts +36 -0
- package/Libraries/Components/ScrollView/delegates/BaseScrollViewNativeComponentDelegate.ts +12 -0
- package/Libraries/Components/ScrollView/delegates/ScrollViewDelegate.ts +23 -0
- package/Libraries/Components/ScrollView/delegates/ScrollViewNativeComponentDelegate.ts +14 -0
- package/Libraries/Components/ScrollView/delegates/types.ts +1 -0
- package/Libraries/Components/ScrollView/processDecelerationRate.js +30 -0
- package/Libraries/Components/Sound/NativeSoundManager.js +13 -0
- package/Libraries/Components/Sound/SoundManager.js +21 -0
- package/Libraries/Components/StaticRenderer.js +37 -0
- package/Libraries/Components/StatusBar/NativeStatusBarManagerAndroid.js +13 -0
- package/Libraries/Components/StatusBar/NativeStatusBarManagerIOS.js +13 -0
- package/Libraries/Components/StatusBar/StatusBar.d.ts +138 -0
- package/Libraries/Components/StatusBar/StatusBar.js +480 -0
- package/Libraries/Components/StatusBar/delegates/BaseStatusBarDelegate.ts +25 -0
- package/Libraries/Components/StatusBar/delegates/StatusBarDelegate.ts +44 -0
- package/Libraries/Components/Switch/AndroidSwitchNativeComponent.js +13 -0
- package/Libraries/Components/Switch/Switch.d.ts +115 -0
- package/Libraries/Components/Switch/Switch.js +257 -0
- package/Libraries/Components/Switch/SwitchNativeComponent.js +13 -0
- package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +751 -0
- package/Libraries/Components/TextInput/InputAccessoryView.d.ts +34 -0
- package/Libraries/Components/TextInput/InputAccessoryView.js +123 -0
- package/Libraries/Components/TextInput/RCTInputAccessoryViewNativeComponent.js +13 -0
- package/Libraries/Components/TextInput/RCTMultilineTextInputNativeComponent.js +45 -0
- package/Libraries/Components/TextInput/RCTSingelineTextInputNativeComponent.js +43 -0
- package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +168 -0
- package/Libraries/Components/TextInput/TextInput.d.ts +1007 -0
- package/Libraries/Components/TextInput/TextInput.flow.js +1109 -0
- package/Libraries/Components/TextInput/TextInput.js +1948 -0
- package/Libraries/Components/TextInput/TextInputNativeCommands.js +29 -0
- package/Libraries/Components/TextInput/TextInputState.js +216 -0
- package/Libraries/Components/TextInput/delegates/BaseTextInputDelegate.ts +39 -0
- package/Libraries/Components/TextInput/delegates/BaseTextInputStateDelegate.ts +12 -0
- package/Libraries/Components/TextInput/delegates/TextInputDelegate.ts +40 -0
- package/Libraries/Components/TextInput/delegates/TextInputStateDelegate.ts +15 -0
- package/Libraries/Components/ToastAndroid/NativeToastAndroid.js +13 -0
- package/Libraries/Components/ToastAndroid/ToastAndroid.android.js +74 -0
- package/Libraries/Components/ToastAndroid/ToastAndroid.d.ts +47 -0
- package/Libraries/Components/ToastAndroid/ToastAndroid.js +45 -0
- package/Libraries/Components/Touchable/BoundingDimensions.js +53 -0
- package/Libraries/Components/Touchable/PooledClass.js +133 -0
- package/Libraries/Components/Touchable/Position.js +40 -0
- package/Libraries/Components/Touchable/Touchable.d.ts +90 -0
- package/Libraries/Components/Touchable/Touchable.js +973 -0
- package/Libraries/Components/Touchable/TouchableBounce.js +222 -0
- package/Libraries/Components/Touchable/TouchableHighlight.d.ts +62 -0
- package/Libraries/Components/Touchable/TouchableHighlight.js +398 -0
- package/Libraries/Components/Touchable/TouchableNativeFeedback.d.ts +114 -0
- package/Libraries/Components/Touchable/TouchableNativeFeedback.js +370 -0
- package/Libraries/Components/Touchable/TouchableOpacity.d.ts +81 -0
- package/Libraries/Components/Touchable/TouchableOpacity.js +339 -0
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.d.ts +151 -0
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +238 -0
- package/Libraries/Components/Touchable/delegates/BaseTouchableHighlightDelegate.ts +13 -0
- package/Libraries/Components/Touchable/delegates/BaseTouchableNativeFeedbackDelegate.ts +13 -0
- package/Libraries/Components/Touchable/delegates/BaseTouchableWithoutFeedbackDelegate.ts +13 -0
- package/Libraries/Components/Touchable/delegates/TouchableHighlightDelegate.ts +6 -0
- package/Libraries/Components/Touchable/delegates/TouchableNativeFeedbackDelegate.ts +6 -0
- package/Libraries/Components/Touchable/delegates/TouchableWithoutFeedbackDelegate.ts +6 -0
- package/Libraries/Components/UnimplementedViews/UnimplementedNativeViewNativeComponent.js +13 -0
- package/Libraries/Components/UnimplementedViews/UnimplementedView.js +41 -0
- package/Libraries/Components/View/ReactNativeStyleAttributes.js +218 -0
- package/Libraries/Components/View/ReactNativeViewAttributes.js +60 -0
- package/Libraries/Components/View/View.d.ts +29 -0
- package/Libraries/Components/View/View.js +140 -0
- package/Libraries/Components/View/ViewAccessibility.d.ts +404 -0
- package/Libraries/Components/View/ViewAccessibility.js +167 -0
- package/Libraries/Components/View/ViewNativeComponent.js +36 -0
- package/Libraries/Components/View/ViewPropTypes.d.ts +221 -0
- package/Libraries/Components/View/ViewPropTypes.js +656 -0
- package/Libraries/Components/View/delegates/ViewDelegate.js +3 -0
- package/Libraries/Components/delegates/BaseButtonDelegate.ts +15 -0
- package/Libraries/Components/delegates/ButtonDelegate.ts +27 -0
- package/Libraries/Core/Devtools/getDevServer.js +43 -0
- package/Libraries/Core/Devtools/loadBundleFromServer.js +152 -0
- package/Libraries/Core/Devtools/openFileInEditor.js +26 -0
- package/Libraries/Core/Devtools/openURLInBrowser.js +23 -0
- package/Libraries/Core/Devtools/parseErrorStack.js +59 -0
- package/Libraries/Core/Devtools/parseHermesStack.js +147 -0
- package/Libraries/Core/Devtools/symbolicateStackTrace.js +50 -0
- package/Libraries/Core/ExceptionsManager.js +282 -0
- package/Libraries/Core/ExtendedError.js +33 -0
- package/Libraries/Core/InitializeCore.js +60 -0
- package/Libraries/Core/NativeExceptionsManager.js +13 -0
- package/Libraries/Core/RawEventEmitter.js +39 -0
- package/Libraries/Core/ReactFiberErrorDialog.js +65 -0
- package/Libraries/Core/ReactNativeVersion.js +23 -0
- package/Libraries/Core/ReactNativeVersionCheck.js +52 -0
- package/Libraries/Core/SegmentFetcher/NativeSegmentFetcher.js +13 -0
- package/Libraries/Core/Timers/JSTimers.js +487 -0
- package/Libraries/Core/Timers/NativeTiming.js +13 -0
- package/Libraries/Core/Timers/immediateShim.js +68 -0
- package/Libraries/Core/Timers/queueMicrotask.js +41 -0
- package/Libraries/Core/__mocks__/ErrorUtils.js +33 -0
- package/Libraries/Core/__mocks__/NativeExceptionsManager.js +19 -0
- package/Libraries/Core/checkNativeVersion.js +18 -0
- package/Libraries/Core/polyfillPromise.js +38 -0
- package/Libraries/Core/registerCallableModule.d.ts +16 -0
- package/Libraries/Core/registerCallableModule.js +42 -0
- package/Libraries/Core/setUpAlert.js +23 -0
- package/Libraries/Core/setUpBatchedBridge.js +50 -0
- package/Libraries/Core/setUpDeveloperTools.js +82 -0
- package/Libraries/Core/setUpErrorHandling.js +35 -0
- package/Libraries/Core/setUpGlobals.js +36 -0
- package/Libraries/Core/setUpNavigator.js +22 -0
- package/Libraries/Core/setUpPerformance.js +31 -0
- package/Libraries/Core/setUpPlatform.js +1 -0
- package/Libraries/Core/setUpReactDevTools.js +252 -0
- package/Libraries/Core/setUpReactRefresh.js +47 -0
- package/Libraries/Core/setUpRegeneratorRuntime.js +46 -0
- package/Libraries/Core/setUpSegmentFetcher.js +53 -0
- package/Libraries/Core/setUpTimers.js +125 -0
- package/Libraries/Core/setUpXHR.js +41 -0
- package/Libraries/Debugging/DebuggingOverlay.js +110 -0
- package/Libraries/Debugging/DebuggingOverlayNativeComponent.js +13 -0
- package/Libraries/Debugging/DebuggingOverlayRegistry.js +513 -0
- package/Libraries/Debugging/useSubscribeToDebuggingOverlayRegistry.js +32 -0
- package/Libraries/EventEmitter/NativeEventEmitter.d.ts +63 -0
- package/Libraries/EventEmitter/NativeEventEmitter.js +122 -0
- package/Libraries/EventEmitter/RCTDeviceEventEmitter.d.ts +29 -0
- package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +43 -0
- package/Libraries/EventEmitter/RCTEventEmitter.js +25 -0
- package/Libraries/EventEmitter/RCTNativeAppEventEmitter.d.ts +32 -0
- package/Libraries/EventEmitter/RCTNativeAppEventEmitter.js +18 -0
- package/Libraries/EventEmitter/__mocks__/NativeEventEmitter.js +48 -0
- package/Libraries/Events/CustomEvent.js +32 -0
- package/Libraries/Events/EventPolyfill.js +239 -0
- package/Libraries/FBLazyVector/FBLazyVector/FBLazyIterator.h +127 -0
- package/Libraries/FBLazyVector/FBLazyVector/FBLazyVector.h +102 -0
- package/Libraries/FBLazyVector/FBLazyVector.podspec +31 -0
- package/Libraries/HeapCapture/HeapCapture.js +29 -0
- package/Libraries/HeapCapture/NativeJSCHeapCapture.js +13 -0
- package/Libraries/Image/AssetRegistry.js +13 -0
- package/Libraries/Image/AssetSourceResolver.js +202 -0
- package/Libraries/Image/AssetUtils.js +47 -0
- package/Libraries/Image/Image.android.js +322 -0
- package/Libraries/Image/Image.d.ts +373 -0
- package/Libraries/Image/Image.ios.js +252 -0
- package/Libraries/Image/Image.js.flow +13 -0
- package/Libraries/Image/ImageAnalyticsTagContext.js +22 -0
- package/Libraries/Image/ImageBackground.js +106 -0
- package/Libraries/Image/ImageInjection.js +87 -0
- package/Libraries/Image/ImageProps.js +296 -0
- package/Libraries/Image/ImageResizeMode.d.ts +56 -0
- package/Libraries/Image/ImageResizeMode.js +39 -0
- package/Libraries/Image/ImageSource.d.ts +74 -0
- package/Libraries/Image/ImageSource.js +135 -0
- package/Libraries/Image/ImageSourceUtils.js +80 -0
- package/Libraries/Image/ImageTypes.flow.js +78 -0
- package/Libraries/Image/ImageUtils.js +25 -0
- package/Libraries/Image/ImageViewNativeComponent.js +175 -0
- package/Libraries/Image/NativeImageEditor.js +13 -0
- package/Libraries/Image/NativeImageLoaderAndroid.js +13 -0
- package/Libraries/Image/NativeImageLoaderIOS.js +13 -0
- package/Libraries/Image/NativeImageStoreAndroid.js +13 -0
- package/Libraries/Image/NativeImageStoreIOS.js +13 -0
- package/Libraries/Image/RCTAnimatedImage.h +21 -0
- package/Libraries/Image/RCTAnimatedImage.mm +175 -0
- package/Libraries/Image/RCTBundleAssetImageLoader.h +12 -0
- package/Libraries/Image/RCTBundleAssetImageLoader.mm +83 -0
- package/Libraries/Image/RCTDisplayWeakRefreshable.h +23 -0
- package/Libraries/Image/RCTDisplayWeakRefreshable.mm +31 -0
- package/Libraries/Image/RCTGIFImageDecoder.h +12 -0
- package/Libraries/Image/RCTGIFImageDecoder.mm +63 -0
- package/Libraries/Image/RCTImageBlurUtils.h +13 -0
- package/Libraries/Image/RCTImageBlurUtils.mm +100 -0
- package/Libraries/Image/RCTImageCache.h +45 -0
- package/Libraries/Image/RCTImageCache.mm +164 -0
- package/Libraries/Image/RCTImageDataDecoder.h +53 -0
- package/Libraries/Image/RCTImageEditingManager.h +12 -0
- package/Libraries/Image/RCTImageEditingManager.mm +113 -0
- package/Libraries/Image/RCTImageLoader.h +43 -0
- package/Libraries/Image/RCTImageLoader.mm +1302 -0
- package/Libraries/Image/RCTImageLoaderLoggable.h +32 -0
- package/Libraries/Image/RCTImageLoaderProtocol.h +135 -0
- package/Libraries/Image/RCTImageLoaderWithAttributionProtocol.h +48 -0
- package/Libraries/Image/RCTImagePlugins.h +44 -0
- package/Libraries/Image/RCTImagePlugins.mm +37 -0
- package/Libraries/Image/RCTImageShadowView.h +12 -0
- package/Libraries/Image/RCTImageShadowView.mm +24 -0
- package/Libraries/Image/RCTImageStoreManager.h +55 -0
- package/Libraries/Image/RCTImageStoreManager.mm +296 -0
- package/Libraries/Image/RCTImageURLLoader.h +83 -0
- package/Libraries/Image/RCTImageURLLoaderWithAttribution.h +78 -0
- package/Libraries/Image/RCTImageURLLoaderWithAttribution.mm +32 -0
- package/Libraries/Image/RCTImageUtils.h +94 -0
- package/Libraries/Image/RCTImageUtils.mm +389 -0
- package/Libraries/Image/RCTImageView.h +27 -0
- package/Libraries/Image/RCTImageView.mm +504 -0
- package/Libraries/Image/RCTImageViewManager.h +12 -0
- package/Libraries/Image/RCTImageViewManager.mm +116 -0
- package/Libraries/Image/RCTLocalAssetImageLoader.h +13 -0
- package/Libraries/Image/RCTLocalAssetImageLoader.mm +83 -0
- package/Libraries/Image/RCTResizeMode.h +53 -0
- package/Libraries/Image/RCTResizeMode.mm +25 -0
- package/Libraries/Image/RCTUIImageViewAnimated.h +13 -0
- package/Libraries/Image/RCTUIImageViewAnimated.mm +346 -0
- package/Libraries/Image/React-RCTImage.podspec +60 -0
- package/Libraries/Image/RelativeImageStub.js +28 -0
- package/Libraries/Image/TextInlineImageNativeComponent.js +51 -0
- package/Libraries/Image/nativeImageSource.js +64 -0
- package/Libraries/Image/resolveAssetSource.js +143 -0
- package/Libraries/Inspector/BorderBox.js +32 -0
- package/Libraries/Inspector/BoxInspector.js +109 -0
- package/Libraries/Inspector/ElementBox.js +143 -0
- package/Libraries/Inspector/ElementProperties.js +120 -0
- package/Libraries/Inspector/Inspector.js +206 -0
- package/Libraries/Inspector/InspectorOverlay.js +65 -0
- package/Libraries/Inspector/InspectorPanel.js +164 -0
- package/Libraries/Inspector/NetworkOverlay.js +611 -0
- package/Libraries/Inspector/PerformanceOverlay.js +63 -0
- package/Libraries/Inspector/ReactDevToolsOverlay.js +165 -0
- package/Libraries/Inspector/StyleInspector.js +70 -0
- package/Libraries/Inspector/getInspectorDataForViewAtPoint.js +81 -0
- package/Libraries/Inspector/resolveBoxStyle.js +114 -0
- package/Libraries/Interaction/FrameRateLogger.js +72 -0
- package/Libraries/Interaction/InteractionManager.d.ts +74 -0
- package/Libraries/Interaction/InteractionManager.js +216 -0
- package/Libraries/Interaction/InteractionManagerStub.js +176 -0
- package/Libraries/Interaction/JSEventLoopWatchdog.js +88 -0
- package/Libraries/Interaction/NativeFrameRateLogger.js +13 -0
- package/Libraries/Interaction/PanResponder.d.ts +202 -0
- package/Libraries/Interaction/PanResponder.js +579 -0
- package/Libraries/Interaction/TaskQueue.js +183 -0
- package/Libraries/Interaction/TouchHistoryMath.js +156 -0
- package/Libraries/JSInspector/InspectorAgent.js +27 -0
- package/Libraries/JSInspector/JSInspector.js +33 -0
- package/Libraries/JSInspector/NetworkAgent.js +295 -0
- package/Libraries/LayoutAnimation/LayoutAnimation.d.ts +84 -0
- package/Libraries/LayoutAnimation/LayoutAnimation.js +200 -0
- package/Libraries/Linking/Linking.d.ts +61 -0
- package/Libraries/Linking/Linking.js +133 -0
- package/Libraries/Linking/NativeIntentAndroid.js +13 -0
- package/Libraries/Linking/NativeLinkingManager.js +13 -0
- package/Libraries/LinkingIOS/RCTLinkingManager.h +27 -0
- package/Libraries/LinkingIOS/RCTLinkingManager.mm +204 -0
- package/Libraries/LinkingIOS/RCTLinkingPlugins.h +40 -0
- package/Libraries/LinkingIOS/RCTLinkingPlugins.mm +33 -0
- package/Libraries/LinkingIOS/React-RCTLinking.podspec +56 -0
- package/Libraries/Lists/FillRateHelper.js +19 -0
- package/Libraries/Lists/FlatList.d.ts +244 -0
- package/Libraries/Lists/FlatList.js +717 -0
- package/Libraries/Lists/SectionList.d.ts +267 -0
- package/Libraries/Lists/SectionList.js +269 -0
- package/Libraries/Lists/SectionListModern.js +249 -0
- package/Libraries/Lists/ViewabilityHelper.js +24 -0
- package/Libraries/Lists/VirtualizeUtils.js +18 -0
- package/Libraries/Lists/VirtualizedList.js +23 -0
- package/Libraries/Lists/VirtualizedListContext.js +18 -0
- package/Libraries/Lists/VirtualizedSectionList.js +22 -0
- package/Libraries/Lists/__flowtests__/FlatList-flowtest.js +118 -0
- package/Libraries/Lists/__flowtests__/SectionList-flowtest.js +134 -0
- package/Libraries/LogBox/Data/LogBoxData.js +511 -0
- package/Libraries/LogBox/Data/LogBoxLog.js +257 -0
- package/Libraries/LogBox/Data/LogBoxSymbolication.js +65 -0
- package/Libraries/LogBox/Data/parseLogBoxLog.js +514 -0
- package/Libraries/LogBox/LogBox.d.ts +28 -0
- package/Libraries/LogBox/LogBox.js +291 -0
- package/Libraries/LogBox/LogBoxInspectorContainer.js +68 -0
- package/Libraries/LogBox/LogBoxNotificationContainer.js +105 -0
- package/Libraries/LogBox/UI/AnsiHighlight.js +121 -0
- package/Libraries/LogBox/UI/LogBoxButton.js +70 -0
- package/Libraries/LogBox/UI/LogBoxImages/alert-triangle.png +0 -0
- package/Libraries/LogBox/UI/LogBoxImages/chevron-left.png +0 -0
- package/Libraries/LogBox/UI/LogBoxImages/chevron-right.png +0 -0
- package/Libraries/LogBox/UI/LogBoxImages/close.png +0 -0
- package/Libraries/LogBox/UI/LogBoxImages/loader.png +0 -0
- package/Libraries/LogBox/UI/LogBoxInspector.js +89 -0
- package/Libraries/LogBox/UI/LogBoxInspectorBody.js +87 -0
- package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.js +164 -0
- package/Libraries/LogBox/UI/LogBoxInspectorFooter.js +70 -0
- package/Libraries/LogBox/UI/LogBoxInspectorFooterButton.js +58 -0
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +108 -0
- package/Libraries/LogBox/UI/LogBoxInspectorHeaderButton.js +76 -0
- package/Libraries/LogBox/UI/LogBoxInspectorMessageHeader.js +125 -0
- package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.js +188 -0
- package/Libraries/LogBox/UI/LogBoxInspectorSection.js +58 -0
- package/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.js +133 -0
- package/Libraries/LogBox/UI/LogBoxInspectorStackFrame.js +114 -0
- package/Libraries/LogBox/UI/LogBoxInspectorStackFrames.js +221 -0
- package/Libraries/LogBox/UI/LogBoxMessage.js +169 -0
- package/Libraries/LogBox/UI/LogBoxNotification.js +83 -0
- 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/LogBox/UI/LogBoxStyle.js +65 -0
- package/Libraries/Modal/Modal.d.ts +116 -0
- package/Libraries/Modal/Modal.js +365 -0
- package/Libraries/Modal/ModalInjection.js +15 -0
- package/Libraries/Modal/NativeModalManager.js +13 -0
- package/Libraries/Modal/RCTModalHostViewNativeComponent.js +13 -0
- package/Libraries/NativeAnimation/Drivers/RCTAnimationDriver.h +38 -0
- package/Libraries/NativeAnimation/Drivers/RCTDecayAnimation.h +12 -0
- package/Libraries/NativeAnimation/Drivers/RCTDecayAnimation.mm +125 -0
- package/Libraries/NativeAnimation/Drivers/RCTEventAnimation.h +20 -0
- package/Libraries/NativeAnimation/Drivers/RCTEventAnimation.mm +36 -0
- package/Libraries/NativeAnimation/Drivers/RCTFrameAnimation.h +12 -0
- package/Libraries/NativeAnimation/Drivers/RCTFrameAnimation.mm +151 -0
- package/Libraries/NativeAnimation/Drivers/RCTSpringAnimation.h +12 -0
- package/Libraries/NativeAnimation/Drivers/RCTSpringAnimation.mm +200 -0
- package/Libraries/NativeAnimation/Nodes/RCTAdditionAnimatedNode.h +12 -0
- package/Libraries/NativeAnimation/Nodes/RCTAdditionAnimatedNode.mm +25 -0
- package/Libraries/NativeAnimation/Nodes/RCTAnimatedNode.h +50 -0
- package/Libraries/NativeAnimation/Nodes/RCTAnimatedNode.mm +126 -0
- package/Libraries/NativeAnimation/Nodes/RCTColorAnimatedNode.h +14 -0
- package/Libraries/NativeAnimation/Nodes/RCTColorAnimatedNode.mm +29 -0
- package/Libraries/NativeAnimation/Nodes/RCTDiffClampAnimatedNode.h +12 -0
- package/Libraries/NativeAnimation/Nodes/RCTDiffClampAnimatedNode.mm +64 -0
- package/Libraries/NativeAnimation/Nodes/RCTDivisionAnimatedNode.h +12 -0
- package/Libraries/NativeAnimation/Nodes/RCTDivisionAnimatedNode.mm +32 -0
- package/Libraries/NativeAnimation/Nodes/RCTInterpolationAnimatedNode.h +26 -0
- package/Libraries/NativeAnimation/Nodes/RCTInterpolationAnimatedNode.mm +169 -0
- package/Libraries/NativeAnimation/Nodes/RCTModuloAnimatedNode.h +12 -0
- package/Libraries/NativeAnimation/Nodes/RCTModuloAnimatedNode.mm +22 -0
- package/Libraries/NativeAnimation/Nodes/RCTMultiplicationAnimatedNode.h +12 -0
- package/Libraries/NativeAnimation/Nodes/RCTMultiplicationAnimatedNode.mm +26 -0
- package/Libraries/NativeAnimation/Nodes/RCTObjectAnimatedNode.h +14 -0
- package/Libraries/NativeAnimation/Nodes/RCTObjectAnimatedNode.mm +66 -0
- package/Libraries/NativeAnimation/Nodes/RCTPropsAnimatedNode.h +26 -0
- package/Libraries/NativeAnimation/Nodes/RCTPropsAnimatedNode.mm +146 -0
- package/Libraries/NativeAnimation/Nodes/RCTStyleAnimatedNode.h +14 -0
- package/Libraries/NativeAnimation/Nodes/RCTStyleAnimatedNode.mm +62 -0
- package/Libraries/NativeAnimation/Nodes/RCTSubtractionAnimatedNode.h +12 -0
- package/Libraries/NativeAnimation/Nodes/RCTSubtractionAnimatedNode.mm +25 -0
- package/Libraries/NativeAnimation/Nodes/RCTTrackingAnimatedNode.h +12 -0
- package/Libraries/NativeAnimation/Nodes/RCTTrackingAnimatedNode.mm +47 -0
- package/Libraries/NativeAnimation/Nodes/RCTTransformAnimatedNode.h +14 -0
- package/Libraries/NativeAnimation/Nodes/RCTTransformAnimatedNode.mm +55 -0
- package/Libraries/NativeAnimation/Nodes/RCTValueAnimatedNode.h +30 -0
- package/Libraries/NativeAnimation/Nodes/RCTValueAnimatedNode.mm +60 -0
- package/Libraries/NativeAnimation/RCTAnimationPlugins.h +41 -0
- package/Libraries/NativeAnimation/RCTAnimationPlugins.mm +34 -0
- package/Libraries/NativeAnimation/RCTAnimationUtils.h +46 -0
- package/Libraries/NativeAnimation/RCTAnimationUtils.mm +129 -0
- package/Libraries/NativeAnimation/RCTNativeAnimatedModule.h +28 -0
- package/Libraries/NativeAnimation/RCTNativeAnimatedModule.mm +395 -0
- package/Libraries/NativeAnimation/RCTNativeAnimatedNodesManager.h +94 -0
- package/Libraries/NativeAnimation/RCTNativeAnimatedNodesManager.mm +511 -0
- package/Libraries/NativeAnimation/RCTNativeAnimatedTurboModule.h +25 -0
- package/Libraries/NativeAnimation/RCTNativeAnimatedTurboModule.mm +411 -0
- package/Libraries/NativeAnimation/React-RCTAnimation.podspec +56 -0
- package/Libraries/NativeComponent/BaseViewConfig.android.js +423 -0
- package/Libraries/NativeComponent/BaseViewConfig.ios.js +423 -0
- package/Libraries/NativeComponent/BaseViewConfig.js.flow +14 -0
- package/Libraries/NativeComponent/NativeComponentRegistry.js +164 -0
- package/Libraries/NativeComponent/NativeComponentRegistryUnstable.js +30 -0
- package/Libraries/NativeComponent/PlatformBaseViewConfig.js +25 -0
- package/Libraries/NativeComponent/StaticViewConfigValidator.js +144 -0
- package/Libraries/NativeComponent/ViewConfig.js +52 -0
- package/Libraries/NativeComponent/ViewConfigIgnore.js +55 -0
- package/Libraries/NativeComponent/delegates/BaseViewConfigIgnoreDelegate.ts +10 -0
- package/Libraries/NativeComponent/delegates/ViewConfigIgnoreDelegate.ts +10 -0
- package/Libraries/NativeModules/specs/NativeDevMenu.js +13 -0
- package/Libraries/NativeModules/specs/NativeDevSettings.js +13 -0
- package/Libraries/NativeModules/specs/NativeDeviceEventManager.js +13 -0
- package/Libraries/NativeModules/specs/NativeDialogManagerAndroid.js +13 -0
- package/Libraries/NativeModules/specs/NativeLogBox.js +13 -0
- package/Libraries/NativeModules/specs/NativeRedBox.js +13 -0
- package/Libraries/NativeModules/specs/NativeSourceCode.js +13 -0
- package/Libraries/Network/FormData.js +108 -0
- package/Libraries/Network/NativeNetworkingAndroid.js +13 -0
- package/Libraries/Network/NativeNetworkingIOS.js +13 -0
- package/Libraries/Network/RCTDataRequestHandler.h +16 -0
- package/Libraries/Network/RCTDataRequestHandler.mm +86 -0
- package/Libraries/Network/RCTFileRequestHandler.h +16 -0
- package/Libraries/Network/RCTFileRequestHandler.mm +100 -0
- package/Libraries/Network/RCTHTTPRequestHandler.h +22 -0
- package/Libraries/Network/RCTHTTPRequestHandler.mm +195 -0
- package/Libraries/Network/RCTNetworkPlugins.h +43 -0
- package/Libraries/Network/RCTNetworkPlugins.mm +36 -0
- package/Libraries/Network/RCTNetworkTask.h +47 -0
- package/Libraries/Network/RCTNetworkTask.mm +228 -0
- package/Libraries/Network/RCTNetworking.android.js +95 -0
- package/Libraries/Network/RCTNetworking.h +86 -0
- package/Libraries/Network/RCTNetworking.ios.js +112 -0
- package/Libraries/Network/RCTNetworking.js.flow +89 -0
- package/Libraries/Network/RCTNetworking.mm +823 -0
- package/Libraries/Network/React-RCTNetwork.podspec +56 -0
- package/Libraries/Network/XHRInterceptor.js +214 -0
- package/Libraries/Network/XMLHttpRequest.js +698 -0
- package/Libraries/Network/convertRequestBody.js +43 -0
- package/Libraries/Network/fetch.js +19 -0
- package/Libraries/NewAppScreen/components/Colors.js +19 -0
- package/Libraries/NewAppScreen/components/DebugInstructions.js +41 -0
- package/Libraries/NewAppScreen/components/Header.js +77 -0
- package/Libraries/NewAppScreen/components/HermesBadge.js +53 -0
- package/Libraries/NewAppScreen/components/LearnMoreLinks.js +148 -0
- package/Libraries/NewAppScreen/components/ReloadInstructions.js +39 -0
- package/Libraries/NewAppScreen/components/logo.png +0 -0
- package/Libraries/NewAppScreen/index.js +25 -0
- package/Libraries/Performance/NativeJSCSamplingProfiler.js +13 -0
- package/Libraries/Performance/SamplingProfiler.js +39 -0
- package/Libraries/Performance/Systrace.d.ts +66 -0
- package/Libraries/Performance/Systrace.js +139 -0
- package/Libraries/PermissionsAndroid/NativePermissionsAndroid.js +13 -0
- package/Libraries/PermissionsAndroid/PermissionsAndroid.d.ts +163 -0
- package/Libraries/PermissionsAndroid/PermissionsAndroid.js +299 -0
- package/Libraries/Pressability/HoverState.js +58 -0
- package/Libraries/Pressability/Pressability.js +954 -0
- package/Libraries/Pressability/PressabilityDebug.js +85 -0
- package/Libraries/Pressability/PressabilityPerformanceEventEmitter.js +49 -0
- package/Libraries/Pressability/PressabilityTypes.js +18 -0
- package/Libraries/Pressability/usePressability.js +60 -0
- package/Libraries/Promise.js +23 -0
- package/Libraries/PushNotificationIOS/NativePushNotificationManagerIOS.js +13 -0
- package/Libraries/PushNotificationIOS/PushNotificationIOS.d.ts +295 -0
- package/Libraries/PushNotificationIOS/PushNotificationIOS.js +569 -0
- package/Libraries/PushNotificationIOS/RCTPushNotificationManager.h +48 -0
- package/Libraries/PushNotificationIOS/RCTPushNotificationManager.mm +590 -0
- package/Libraries/PushNotificationIOS/RCTPushNotificationPlugins.h +40 -0
- package/Libraries/PushNotificationIOS/RCTPushNotificationPlugins.mm +33 -0
- package/Libraries/PushNotificationIOS/React-RCTPushNotification.podspec +56 -0
- package/Libraries/ReactNative/AppContainer-dev.js +208 -0
- package/Libraries/ReactNative/AppContainer-prod.js +50 -0
- package/Libraries/ReactNative/AppContainer.js +31 -0
- package/Libraries/ReactNative/AppRegistry.d.ts +121 -0
- package/Libraries/ReactNative/AppRegistry.js +360 -0
- package/Libraries/ReactNative/BridgelessUIManager.js +430 -0
- package/Libraries/ReactNative/DisplayMode.js +32 -0
- package/Libraries/ReactNative/FabricUIManager.js +145 -0
- package/Libraries/ReactNative/HeadlessJsTaskError.js +11 -0
- package/Libraries/ReactNative/I18nManager.d.ts +25 -0
- package/Libraries/ReactNative/I18nManager.js +64 -0
- package/Libraries/ReactNative/NativeHeadlessJsTaskSupport.js +13 -0
- package/Libraries/ReactNative/NativeI18nManager.js +13 -0
- package/Libraries/ReactNative/NativeUIManager.js +13 -0
- package/Libraries/ReactNative/PaperUIManager.js +191 -0
- package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +150 -0
- package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance.js +100 -0
- package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstanceUtils.js +38 -0
- package/Libraries/ReactNative/ReactFabricPublicInstance/ReactNativeAttributePayload.js +492 -0
- package/Libraries/ReactNative/ReactFabricPublicInstance/warnForStyleProps.js +33 -0
- package/Libraries/ReactNative/ReactNativeFeatureFlags.js +31 -0
- package/Libraries/ReactNative/ReactNativeRuntimeDiagnostics.js +68 -0
- package/Libraries/ReactNative/RendererImplementation.js +164 -0
- package/Libraries/ReactNative/RendererProxy.d.ts +20 -0
- package/Libraries/ReactNative/RendererProxy.js +26 -0
- package/Libraries/ReactNative/RootTag.d.ts +13 -0
- package/Libraries/ReactNative/RootTag.js +27 -0
- package/Libraries/ReactNative/UIManager.d.ts +113 -0
- package/Libraries/ReactNative/UIManager.js +193 -0
- package/Libraries/ReactNative/UIManagerProperties.js +61 -0
- package/Libraries/ReactNative/__mocks__/FabricUIManager.js +334 -0
- package/Libraries/ReactNative/delegates/BaseBridgelessUIManagerDelegate.ts +14 -0
- package/Libraries/ReactNative/delegates/BaseI18nManagerDelegate.ts +18 -0
- package/Libraries/ReactNative/delegates/BridgelessUIManagerDelegate.ts +11 -0
- package/Libraries/ReactNative/delegates/I18nManagerDelegate.ts +24 -0
- package/Libraries/ReactNative/getCachedComponentWithDebugName.js +33 -0
- package/Libraries/ReactNative/getNativeComponentAttributes.js +212 -0
- package/Libraries/ReactNative/renderApplication.js +108 -0
- package/Libraries/ReactNative/requireNativeComponent.d.ts +23 -0
- package/Libraries/ReactNative/requireNativeComponent.js +35 -0
- package/Libraries/ReactPrivate/README +1 -0
- package/Libraries/ReactPrivate/ReactNativePrivateInitializeCore.js +11 -0
- package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +116 -0
- package/Libraries/Renderer/README.md +22 -0
- package/Libraries/Renderer/implementations/ReactFabric-dev.js +27376 -0
- package/Libraries/Renderer/implementations/ReactFabric-prod.js +9152 -0
- package/Libraries/Renderer/implementations/ReactFabric-profiling.js +9642 -0
- package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +27830 -0
- package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +9379 -0
- package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +9896 -0
- package/Libraries/Renderer/shims/ReactFabric.js +33 -0
- package/Libraries/Renderer/shims/ReactFeatureFlags.js +19 -0
- package/Libraries/Renderer/shims/ReactNative.js +24 -0
- package/Libraries/Renderer/shims/ReactNativeTypes.js +320 -0
- package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +123 -0
- package/Libraries/Renderer/shims/createReactNativeComponentClass.js +35 -0
- package/Libraries/Required/RCTRequired.h +90 -0
- package/Libraries/Required/RCTRequired.podspec +30 -0
- package/Libraries/Settings/NativeSettingsManager.js +13 -0
- package/Libraries/Settings/RCTSettingsManager.h +16 -0
- package/Libraries/Settings/RCTSettingsManager.mm +123 -0
- package/Libraries/Settings/RCTSettingsPlugins.h +40 -0
- package/Libraries/Settings/RCTSettingsPlugins.mm +33 -0
- package/Libraries/Settings/React-RCTSettings.podspec +56 -0
- package/Libraries/Settings/Settings.d.ts +18 -0
- package/Libraries/Settings/Settings.ios.js +81 -0
- package/Libraries/Settings/Settings.js +33 -0
- package/Libraries/Share/NativeShareModule.js +13 -0
- package/Libraries/Share/Share.d.ts +80 -0
- package/Libraries/Share/Share.js +176 -0
- package/Libraries/Share/delegates/BaseShareDelegate.ts +21 -0
- package/Libraries/Share/delegates/ShareDelegate.ts +20 -0
- package/Libraries/StyleSheet/EdgeInsetsPropType.js +18 -0
- package/Libraries/StyleSheet/PlatformColorValueTypes.android.js +40 -0
- package/Libraries/StyleSheet/PlatformColorValueTypes.d.ts +18 -0
- package/Libraries/StyleSheet/PlatformColorValueTypes.ios.js +113 -0
- package/Libraries/StyleSheet/PlatformColorValueTypes.js.flow +22 -0
- package/Libraries/StyleSheet/PlatformColorValueTypesIOS.d.ts +25 -0
- package/Libraries/StyleSheet/PlatformColorValueTypesIOS.ios.js +29 -0
- package/Libraries/StyleSheet/PlatformColorValueTypesIOS.js +22 -0
- package/Libraries/StyleSheet/PointPropType.js +17 -0
- package/Libraries/StyleSheet/Rect.js +26 -0
- package/Libraries/StyleSheet/StyleSheet.d.ts +150 -0
- package/Libraries/StyleSheet/StyleSheet.js +356 -0
- package/Libraries/StyleSheet/StyleSheetTypes.d.ts +573 -0
- package/Libraries/StyleSheet/StyleSheetTypes.js +1004 -0
- package/Libraries/StyleSheet/__flowtests__/StyleSheet-flowtest.js +58 -0
- package/Libraries/StyleSheet/flattenStyle.js +46 -0
- package/Libraries/StyleSheet/normalizeColor.js +34 -0
- package/Libraries/StyleSheet/private/_StyleSheetTypesOverrides.js +15 -0
- package/Libraries/StyleSheet/private/_TransformStyle.js +69 -0
- package/Libraries/StyleSheet/processAspectRatio.js +63 -0
- package/Libraries/StyleSheet/processBackgroundImage.js +361 -0
- package/Libraries/StyleSheet/processBoxShadow.js +209 -0
- package/Libraries/StyleSheet/processColor.d.ts +16 -0
- package/Libraries/StyleSheet/processColor.js +59 -0
- package/Libraries/StyleSheet/processColorArray.js +35 -0
- package/Libraries/StyleSheet/processFilter.js +321 -0
- package/Libraries/StyleSheet/processFontVariant.js +30 -0
- package/Libraries/StyleSheet/processTransform.js +263 -0
- package/Libraries/StyleSheet/processTransformOrigin.js +136 -0
- package/Libraries/StyleSheet/setNormalizedColorAlpha.js +31 -0
- package/Libraries/StyleSheet/splitLayoutProps.js +72 -0
- package/Libraries/Text/BaseText/RCTBaseTextShadowView.h +29 -0
- package/Libraries/Text/BaseText/RCTBaseTextShadowView.mm +158 -0
- package/Libraries/Text/BaseText/RCTBaseTextViewManager.h +16 -0
- package/Libraries/Text/BaseText/RCTBaseTextViewManager.mm +60 -0
- package/Libraries/Text/RCTConvert+Text.h +23 -0
- package/Libraries/Text/RCTConvert+Text.mm +44 -0
- package/Libraries/Text/RCTTextAttributes.h +100 -0
- package/Libraries/Text/RCTTextAttributes.mm +354 -0
- package/Libraries/Text/RCTTextTransform.h +16 -0
- package/Libraries/Text/RawText/RCTRawTextShadowView.h +18 -0
- package/Libraries/Text/RawText/RCTRawTextShadowView.mm +34 -0
- package/Libraries/Text/RawText/RCTRawTextViewManager.h +16 -0
- package/Libraries/Text/RawText/RCTRawTextViewManager.mm +28 -0
- package/Libraries/Text/React-RCTText.podspec +37 -0
- package/Libraries/Text/Text/NSTextStorage+FontScaling.h +20 -0
- package/Libraries/Text/Text/NSTextStorage+FontScaling.m +122 -0
- package/Libraries/Text/Text/RCTDynamicTypeRamp.h +37 -0
- package/Libraries/Text/Text/RCTDynamicTypeRamp.mm +82 -0
- package/Libraries/Text/Text/RCTTextShadowView.h +28 -0
- package/Libraries/Text/Text/RCTTextShadowView.mm +466 -0
- package/Libraries/Text/Text/RCTTextView.h +29 -0
- package/Libraries/Text/Text/RCTTextView.mm +294 -0
- package/Libraries/Text/Text/RCTTextViewManager.h +14 -0
- package/Libraries/Text/Text/RCTTextViewManager.mm +93 -0
- package/Libraries/Text/Text.d.ts +219 -0
- package/Libraries/Text/Text.js +537 -0
- package/Libraries/Text/TextAncestor.js +23 -0
- package/Libraries/Text/TextInput/Multiline/RCTMultilineTextInputView.h +16 -0
- package/Libraries/Text/TextInput/Multiline/RCTMultilineTextInputView.mm +63 -0
- package/Libraries/Text/TextInput/Multiline/RCTMultilineTextInputViewManager.h +16 -0
- package/Libraries/Text/TextInput/Multiline/RCTMultilineTextInputViewManager.mm +24 -0
- package/Libraries/Text/TextInput/Multiline/RCTUITextView.h +44 -0
- package/Libraries/Text/TextInput/Multiline/RCTUITextView.mm +338 -0
- package/Libraries/Text/TextInput/RCTBackedTextInputDelegate.h +46 -0
- package/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.h +36 -0
- package/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.mm +307 -0
- package/Libraries/Text/TextInput/RCTBackedTextInputViewProtocol.h +57 -0
- package/Libraries/Text/TextInput/RCTBaseTextInputShadowView.h +25 -0
- package/Libraries/Text/TextInput/RCTBaseTextInputShadowView.mm +364 -0
- package/Libraries/Text/TextInput/RCTBaseTextInputView.h +63 -0
- package/Libraries/Text/TextInput/RCTBaseTextInputView.mm +817 -0
- package/Libraries/Text/TextInput/RCTBaseTextInputViewManager.h +12 -0
- package/Libraries/Text/TextInput/RCTBaseTextInputViewManager.mm +178 -0
- package/Libraries/Text/TextInput/RCTInputAccessoryShadowView.h +12 -0
- package/Libraries/Text/TextInput/RCTInputAccessoryShadowView.mm +20 -0
- package/Libraries/Text/TextInput/RCTInputAccessoryView.h +17 -0
- package/Libraries/Text/TextInput/RCTInputAccessoryView.mm +78 -0
- package/Libraries/Text/TextInput/RCTInputAccessoryViewContent.h +12 -0
- package/Libraries/Text/TextInput/RCTInputAccessoryViewContent.mm +74 -0
- package/Libraries/Text/TextInput/RCTInputAccessoryViewManager.h +12 -0
- package/Libraries/Text/TextInput/RCTInputAccessoryViewManager.mm +29 -0
- package/Libraries/Text/TextInput/RCTTextSelection.h +26 -0
- package/Libraries/Text/TextInput/RCTTextSelection.mm +36 -0
- package/Libraries/Text/TextInput/Singleline/RCTSinglelineTextInputView.h +16 -0
- package/Libraries/Text/TextInput/Singleline/RCTSinglelineTextInputView.mm +39 -0
- package/Libraries/Text/TextInput/Singleline/RCTSinglelineTextInputViewManager.h +16 -0
- package/Libraries/Text/TextInput/Singleline/RCTSinglelineTextInputViewManager.mm +31 -0
- package/Libraries/Text/TextInput/Singleline/RCTUITextField.h +40 -0
- package/Libraries/Text/TextInput/Singleline/RCTUITextField.mm +255 -0
- package/Libraries/Text/TextNativeComponent.js +82 -0
- package/Libraries/Text/TextProps.js +268 -0
- package/Libraries/Text/VirtualText/RCTVirtualTextShadowView.h +12 -0
- package/Libraries/Text/VirtualText/RCTVirtualTextShadowView.mm +38 -0
- package/Libraries/Text/VirtualText/RCTVirtualTextView.h +23 -0
- package/Libraries/Text/VirtualText/RCTVirtualTextView.mm +12 -0
- package/Libraries/Text/VirtualText/RCTVirtualTextViewManager.h +12 -0
- package/Libraries/Text/VirtualText/RCTVirtualTextViewManager.mm +26 -0
- package/Libraries/TurboModule/RCTExport.d.ts +12 -0
- package/Libraries/TurboModule/RCTExport.js +38 -0
- package/Libraries/TurboModule/TurboModuleRegistry.d.ts +13 -0
- package/Libraries/TurboModule/TurboModuleRegistry.js +53 -0
- package/Libraries/TurboModule/samples/NativeSampleTurboModule.js +13 -0
- package/Libraries/TypeSafety/RCTConvertHelpers.h +83 -0
- package/Libraries/TypeSafety/RCTConvertHelpers.mm +51 -0
- package/Libraries/TypeSafety/RCTTypeSafety.podspec +39 -0
- package/Libraries/TypeSafety/RCTTypedModuleConstants.h +47 -0
- package/Libraries/TypeSafety/RCTTypedModuleConstants.mm +50 -0
- package/Libraries/Types/CodegenTypes.js +47 -0
- package/Libraries/Types/CoreEventTypes.d.ts +259 -0
- package/Libraries/Types/CoreEventTypes.js +291 -0
- package/Libraries/Types/ReactDevToolsTypes.js +58 -0
- package/Libraries/Types/RootTagTypes.js +11 -0
- package/Libraries/Types/UIManagerJSInterface.js +16 -0
- package/Libraries/UTFSequence.js +56 -0
- package/Libraries/Utilities/Appearance.d.ts +53 -0
- package/Libraries/Utilities/Appearance.js +133 -0
- package/Libraries/Utilities/BackHandler.android.js +95 -0
- package/Libraries/Utilities/BackHandler.d.ts +34 -0
- package/Libraries/Utilities/BackHandler.ios.js +34 -0
- package/Libraries/Utilities/BackHandler.js.flow +23 -0
- package/Libraries/Utilities/DebugEnvironment.js +16 -0
- package/Libraries/Utilities/DevLoadingView.js +64 -0
- package/Libraries/Utilities/DevSettings.d.ts +32 -0
- package/Libraries/Utilities/DevSettings.js +72 -0
- package/Libraries/Utilities/DeviceInfo.js +13 -0
- package/Libraries/Utilities/Dimensions.d.ts +79 -0
- package/Libraries/Utilities/Dimensions.js +123 -0
- package/Libraries/Utilities/FeatureDetection.js +31 -0
- package/Libraries/Utilities/GlobalPerformanceLogger.js +24 -0
- package/Libraries/Utilities/HMRClient.js +362 -0
- package/Libraries/Utilities/HMRClientProdShim.js +30 -0
- package/Libraries/Utilities/IPerformanceLogger.d.ts +48 -0
- package/Libraries/Utilities/IPerformanceLogger.js +49 -0
- package/Libraries/Utilities/NativeAppearance.js +13 -0
- package/Libraries/Utilities/NativeDevLoadingView.js +13 -0
- package/Libraries/Utilities/NativeDeviceInfo.js +13 -0
- package/Libraries/Utilities/NativePlatformConstantsAndroid.js +13 -0
- package/Libraries/Utilities/NativePlatformConstantsIOS.js +13 -0
- package/Libraries/Utilities/PerformanceLoggerContext.js +33 -0
- package/Libraries/Utilities/PixelRatio.d.ts +64 -0
- package/Libraries/Utilities/PixelRatio.js +127 -0
- package/Libraries/Utilities/Platform.android.js +87 -0
- package/Libraries/Utilities/Platform.d.ts +127 -0
- package/Libraries/Utilities/Platform.flow.js +91 -0
- package/Libraries/Utilities/Platform.ios.js +88 -0
- package/Libraries/Utilities/Platform.js.flow +13 -0
- package/Libraries/Utilities/PolyfillFunctions.js +56 -0
- package/Libraries/Utilities/RCTLog.js +56 -0
- package/Libraries/Utilities/ReactNativeTestTools.js +225 -0
- package/Libraries/Utilities/SceneTracker.js +42 -0
- package/Libraries/Utilities/__mocks__/BackHandler.js +45 -0
- package/Libraries/Utilities/__mocks__/GlobalPerformanceLogger.js +16 -0
- package/Libraries/Utilities/__mocks__/PixelRatio.js +25 -0
- package/Libraries/Utilities/binaryToBase64.js +31 -0
- package/Libraries/Utilities/codegenNativeCommands.js +31 -0
- package/Libraries/Utilities/codegenNativeComponent.js +73 -0
- package/Libraries/Utilities/createPerformanceLogger.js +290 -0
- package/Libraries/Utilities/deepFreezeAndThrowOnMutationInDev.js +90 -0
- package/Libraries/Utilities/defineLazyObjectProperty.js +66 -0
- package/Libraries/Utilities/differ/deepDiffer.js +101 -0
- package/Libraries/Utilities/differ/insetsDiffer.js +40 -0
- package/Libraries/Utilities/differ/matricesDiffer.js +51 -0
- package/Libraries/Utilities/differ/pointsDiffer.js +27 -0
- package/Libraries/Utilities/differ/sizesDiffer.js +26 -0
- package/Libraries/Utilities/dismissKeyboard.js +21 -0
- package/Libraries/Utilities/infoLog.js +20 -0
- package/Libraries/Utilities/logError.js +27 -0
- package/Libraries/Utilities/mapWithSeparator.js +28 -0
- package/Libraries/Utilities/stringifySafe.js +121 -0
- package/Libraries/Utilities/stringifyViewConfig.js +22 -0
- package/Libraries/Utilities/useColorScheme.js +25 -0
- package/Libraries/Utilities/useMergeRefs.js +59 -0
- package/Libraries/Utilities/useRefEffect.js +45 -0
- package/Libraries/Utilities/useWindowDimensions.js +47 -0
- package/Libraries/Utilities/warnOnce.js +32 -0
- package/Libraries/Vibration/NativeVibration.js +13 -0
- package/Libraries/Vibration/RCTVibration.h +12 -0
- package/Libraries/Vibration/RCTVibration.mm +54 -0
- package/Libraries/Vibration/RCTVibrationPlugins.h +40 -0
- package/Libraries/Vibration/RCTVibrationPlugins.mm +33 -0
- package/Libraries/Vibration/React-RCTVibration.podspec +56 -0
- package/Libraries/Vibration/Vibration.d.ts +43 -0
- package/Libraries/Vibration/Vibration.js +115 -0
- package/Libraries/Vibration/delegates/BaseVibrationDelegate.ts +11 -0
- package/Libraries/Vibration/delegates/VibrationDelegate.ts +11 -0
- package/Libraries/WebSocket/NativeWebSocketModule.js +13 -0
- package/Libraries/WebSocket/RCTReconnectingWebSocket.h +37 -0
- package/Libraries/WebSocket/RCTReconnectingWebSocket.m +109 -0
- package/Libraries/WebSocket/WebSocket.js +297 -0
- package/Libraries/WebSocket/WebSocketEvent.js +30 -0
- package/Libraries/WebSocket/WebSocketInterceptor.js +247 -0
- package/Libraries/WebSocket/__mocks__/event-target-shim.js +27 -0
- package/Libraries/Wrapper/Example/RCTWrapperExampleView.h +16 -0
- package/Libraries/Wrapper/Example/RCTWrapperExampleView.m +53 -0
- package/Libraries/Wrapper/Example/RCTWrapperExampleViewController.h +16 -0
- package/Libraries/Wrapper/Example/RCTWrapperExampleViewController.m +23 -0
- package/Libraries/Wrapper/Example/RCTWrapperReactRootViewController.h +20 -0
- package/Libraries/Wrapper/Example/RCTWrapperReactRootViewController.m +46 -0
- package/Libraries/Wrapper/Example/RCTWrapperReactRootViewManager.h +18 -0
- package/Libraries/Wrapper/Example/RCTWrapperReactRootViewManager.m +31 -0
- package/Libraries/Wrapper/RCTWrapper.h +68 -0
- package/Libraries/Wrapper/RCTWrapperShadowView.h +22 -0
- package/Libraries/Wrapper/RCTWrapperShadowView.m +134 -0
- package/Libraries/Wrapper/RCTWrapperView.h +36 -0
- package/Libraries/Wrapper/RCTWrapperView.m +95 -0
- package/Libraries/Wrapper/RCTWrapperViewControllerHostingView.h +25 -0
- package/Libraries/Wrapper/RCTWrapperViewControllerHostingView.m +133 -0
- package/Libraries/Wrapper/RCTWrapperViewManager.h +20 -0
- package/Libraries/Wrapper/RCTWrapperViewManager.m +27 -0
- package/Libraries/YellowBox/YellowBoxDeprecated.d.ts +19 -0
- package/Libraries/YellowBox/YellowBoxDeprecated.js +75 -0
- package/Libraries/__flowtests__/ReactNativeTypes-flowtest.js +32 -0
- package/Libraries/promiseRejectionTrackingOptions.js +72 -0
- package/Libraries/vendor/core/ErrorUtils.d.ts +15 -0
- package/Libraries/vendor/core/ErrorUtils.js +25 -0
- package/Libraries/vendor/emitter/EventEmitter.d.ts +164 -0
- package/Libraries/vendor/emitter/EventEmitter.js +158 -0
- package/Libraries/vendor/emitter/__flowtests__/EventEmitter-flowtest.js +81 -0
- package/delegates/DelegateError.ts +10 -0
- package/metro.config.js +4 -0
- package/package.json +1 -1
- package/react_native_openharmony.har +0 -0
- package/src/private/animated/NativeAnimatedHelper.js +440 -0
- package/src/private/animated/NativeAnimatedValidation.js +64 -0
- package/src/private/animated/useAnimatedPropsMemo.js +356 -0
- package/src/private/components/HScrollViewNativeComponents.js +30 -0
- package/src/private/components/SafeAreaView_INTERNAL_DO_NOT_USE.js +32 -0
- package/src/private/components/VScrollViewNativeComponents.js +25 -0
- package/src/private/debugging/FuseboxSessionObserver.js +42 -0
- package/src/private/debugging/ReactDevToolsSettingsManager.android.js +20 -0
- package/src/private/debugging/ReactDevToolsSettingsManager.ios.js +30 -0
- package/src/private/debugging/ReactDevToolsSettingsManager.js.flow +16 -0
- package/src/private/debugging/setUpFuseboxReactDevToolsDispatcher.js +114 -0
- package/src/private/devmenu/DevMenu.d.ts +20 -0
- package/src/private/devmenu/DevMenu.js +31 -0
- package/src/private/featureflags/ReactNativeFeatureFlags.js +369 -0
- package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +109 -0
- package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +78 -0
- package/src/private/fusebox/specs/NativeReactDevToolsRuntimeSettingsModule.js +34 -0
- package/src/private/renderer/errorhandling/ErrorHandlers.js +126 -0
- package/src/private/setup/setUpDOM.js +36 -0
- package/src/private/setup/setUpIntersectionObserver.js +27 -0
- package/src/private/setup/setUpMutationObserver.js +31 -0
- package/src/private/setup/setUpPerformanceObserver.js +64 -0
- package/src/private/specs/components/ActivityIndicatorViewNativeComponent.js +53 -0
- package/src/private/specs/components/AndroidDrawerLayoutNativeComponent.js +124 -0
- package/src/private/specs/components/AndroidHorizontalScrollContentViewNativeComponent.js +27 -0
- package/src/private/specs/components/AndroidSwipeRefreshLayoutNativeComponent.js +74 -0
- package/src/private/specs/components/AndroidSwitchNativeComponent.js +62 -0
- package/src/private/specs/components/DebuggingOverlayNativeComponent.js +61 -0
- package/src/private/specs/components/ProgressBarAndroidNativeComponent.js +36 -0
- package/src/private/specs/components/PullToRefreshViewNativeComponent.js +71 -0
- package/src/private/specs/components/RCTInputAccessoryViewNativeComponent.js +26 -0
- package/src/private/specs/components/RCTModalHostViewNativeComponent.js +147 -0
- package/src/private/specs/components/RCTSafeAreaViewNativeComponent.js +25 -0
- package/src/private/specs/components/SwitchNativeComponent.js +61 -0
- package/src/private/specs/components/UnimplementedNativeViewNativeComponent.js +26 -0
- package/src/private/specs/modules/NativeAccessibilityInfo.js +42 -0
- package/src/private/specs/modules/NativeAccessibilityManager.js +70 -0
- package/src/private/specs/modules/NativeActionSheetManager.js +56 -0
- package/src/private/specs/modules/NativeAlertManager.js +35 -0
- package/src/private/specs/modules/NativeAnimatedModule.js +77 -0
- package/src/private/specs/modules/NativeAnimatedTurboModule.js +78 -0
- package/src/private/specs/modules/NativeAppState.js +33 -0
- package/src/private/specs/modules/NativeAppearance.js +30 -0
- package/src/private/specs/modules/NativeBlobModule.js +61 -0
- package/src/private/specs/modules/NativeBugReporting.js +20 -0
- package/src/private/specs/modules/NativeClipboard.js +21 -0
- package/src/private/specs/modules/NativeDevLoadingView.js +24 -0
- package/src/private/specs/modules/NativeDevMenu.js +23 -0
- package/src/private/specs/modules/NativeDevSettings.js +34 -0
- package/src/private/specs/modules/NativeDeviceEventManager.js +19 -0
- package/src/private/specs/modules/NativeDeviceInfo.js +58 -0
- package/src/private/specs/modules/NativeDialogManagerAndroid.js +48 -0
- package/src/private/specs/modules/NativeExceptionsManager.js +91 -0
- package/src/private/specs/modules/NativeFileReaderModule.js +22 -0
- package/src/private/specs/modules/NativeFrameRateLogger.js +22 -0
- package/src/private/specs/modules/NativeHeadlessJsTaskSupport.js +20 -0
- package/src/private/specs/modules/NativeI18nManager.js +28 -0
- package/src/private/specs/modules/NativeImageEditor.js +52 -0
- package/src/private/specs/modules/NativeImageLoaderAndroid.js +30 -0
- package/src/private/specs/modules/NativeImageLoaderIOS.js +37 -0
- package/src/private/specs/modules/NativeImageStoreAndroid.js +26 -0
- package/src/private/specs/modules/NativeImageStoreIOS.js +33 -0
- package/src/private/specs/modules/NativeIntentAndroid.js +30 -0
- package/src/private/specs/modules/NativeJSCHeapCapture.js +19 -0
- package/src/private/specs/modules/NativeJSCSamplingProfiler.js +19 -0
- package/src/private/specs/modules/NativeKeyboardObserver.js +20 -0
- package/src/private/specs/modules/NativeLinkingManager.js +27 -0
- package/src/private/specs/modules/NativeLogBox.js +20 -0
- package/src/private/specs/modules/NativeModalManager.js +21 -0
- package/src/private/specs/modules/NativeNetworkingAndroid.js +37 -0
- package/src/private/specs/modules/NativeNetworkingIOS.js +37 -0
- package/src/private/specs/modules/NativePermissionsAndroid.js +77 -0
- package/src/private/specs/modules/NativePlatformConstantsAndroid.js +44 -0
- package/src/private/specs/modules/NativePlatformConstantsIOS.js +37 -0
- package/src/private/specs/modules/NativePushNotificationManagerIOS.js +103 -0
- package/src/private/specs/modules/NativeReactDevToolsSettingsManager.js +22 -0
- package/src/private/specs/modules/NativeRedBox.js +20 -0
- package/src/private/specs/modules/NativeSampleTurboModule.js +66 -0
- package/src/private/specs/modules/NativeSegmentFetcher.js +28 -0
- package/src/private/specs/modules/NativeSettingsManager.js +25 -0
- package/src/private/specs/modules/NativeShareModule.js +23 -0
- package/src/private/specs/modules/NativeSoundManager.js +22 -0
- package/src/private/specs/modules/NativeSourceCode.js +36 -0
- package/src/private/specs/modules/NativeStatusBarManagerAndroid.js +68 -0
- package/src/private/specs/modules/NativeStatusBarManagerIOS.js +89 -0
- package/src/private/specs/modules/NativeTiming.js +26 -0
- package/src/private/specs/modules/NativeToastAndroid.js +38 -0
- package/src/private/specs/modules/NativeUIManager.js +111 -0
- package/src/private/specs/modules/NativeVibration.js +24 -0
- package/src/private/specs/modules/NativeWebSocketModule.js +34 -0
- package/src/private/styles/composeStyles.js +27 -0
- package/src/private/webapis/dom/geometry/DOMRect.js +82 -0
- package/src/private/webapis/dom/geometry/DOMRectReadOnly.js +188 -0
- package/src/private/webapis/dom/nodes/ReactNativeElement.js +188 -0
- package/src/private/webapis/dom/nodes/ReadOnlyCharacterData.js +71 -0
- package/src/private/webapis/dom/nodes/ReadOnlyElement.js +247 -0
- package/src/private/webapis/dom/nodes/ReadOnlyNode.js +359 -0
- package/src/private/webapis/dom/nodes/ReadOnlyText.js +30 -0
- 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/nodes/utilities/Traversal.js +54 -0
- package/src/private/webapis/dom/oldstylecollections/ArrayLikeUtils.js +46 -0
- package/src/private/webapis/dom/oldstylecollections/DOMRectList.js +76 -0
- package/src/private/webapis/dom/oldstylecollections/DOMRectList.js.flow +27 -0
- package/src/private/webapis/dom/oldstylecollections/HTMLCollection.js +82 -0
- package/src/private/webapis/dom/oldstylecollections/HTMLCollection.js.flow +27 -0
- package/src/private/webapis/dom/oldstylecollections/NodeList.js +104 -0
- package/src/private/webapis/dom/oldstylecollections/NodeList.js.flow +31 -0
- package/src/private/webapis/idlecallbacks/specs/NativeIdleCallbacks.js +34 -0
- package/src/private/webapis/intersectionobserver/IntersectionObserver.js +345 -0
- package/src/private/webapis/intersectionobserver/IntersectionObserverEntry.js +167 -0
- package/src/private/webapis/intersectionobserver/IntersectionObserverManager.js +277 -0
- package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +42 -0
- package/src/private/webapis/intersectionobserver/specs/__mocks__/NativeIntersectionObserver.js +181 -0
- package/src/private/webapis/microtasks/specs/NativeMicrotasks.js +21 -0
- package/src/private/webapis/mutationobserver/MutationObserver.js +186 -0
- package/src/private/webapis/mutationobserver/MutationObserverManager.js +227 -0
- package/src/private/webapis/mutationobserver/MutationRecord.js +82 -0
- package/src/private/webapis/mutationobserver/specs/NativeMutationObserver.js +58 -0
- package/src/private/webapis/mutationobserver/specs/__mocks__/NativeMutationObserver.js +327 -0
- package/src/private/webapis/performance/EventTiming.js +145 -0
- package/src/private/webapis/performance/LongTasks.js +39 -0
- package/src/private/webapis/performance/MemoryInfo.js +54 -0
- package/src/private/webapis/performance/Performance.js +299 -0
- package/src/private/webapis/performance/PerformanceEntry.js +68 -0
- package/src/private/webapis/performance/PerformanceObserver.js +232 -0
- package/src/private/webapis/performance/RawPerformanceEntry.js +105 -0
- package/src/private/webapis/performance/ReactNativeStartupTiming.js +91 -0
- package/src/private/webapis/performance/UserTiming.js +72 -0
- package/src/private/webapis/performance/Utilities.js +18 -0
- package/src/private/webapis/performance/specs/NativePerformance.js +103 -0
- package/src/private/webapis/performance/specs/__mocks__/NativePerformanceMock.js +267 -0
- package/types/index.d.ts +215 -0
- package/types/modules/BatchedBridge.d.ts +32 -0
- package/types/modules/Codegen.d.ts +80 -0
- package/types/modules/Devtools.d.ts +32 -0
- package/types/modules/LaunchScreen.d.ts +18 -0
- package/types/modules/globals.d.ts +599 -0
- package/types/private/TimerMixin.d.ts +19 -0
- package/types/private/Utilities.d.ts +10 -0
- package/types/public/DeprecatedPropertiesAlias.d.ts +185 -0
- package/types/public/Insets.d.ts +15 -0
- package/types/public/ReactNativeRenderer.d.ts +144 -0
- package/types/public/ReactNativeTypes.d.ts +139 -0
- package/types/tsconfig.json +15 -0
- package/types/tslint.json +24 -0
|
@@ -0,0 +1,1302 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#import <mach/mach_time.h>
|
|
9
|
+
#import <objc/runtime.h>
|
|
10
|
+
#import <atomic>
|
|
11
|
+
|
|
12
|
+
#import <ImageIO/ImageIO.h>
|
|
13
|
+
|
|
14
|
+
#import <FBReactNativeSpec/FBReactNativeSpec.h>
|
|
15
|
+
#import <React/RCTConvert.h>
|
|
16
|
+
#import <React/RCTDefines.h>
|
|
17
|
+
#import <React/RCTImageCache.h>
|
|
18
|
+
#import <React/RCTImageLoader.h>
|
|
19
|
+
#import <React/RCTImageLoaderWithAttributionProtocol.h>
|
|
20
|
+
#import <React/RCTImageUtils.h>
|
|
21
|
+
#import <React/RCTLog.h>
|
|
22
|
+
#import <React/RCTNetworking.h>
|
|
23
|
+
#import <React/RCTUtils.h>
|
|
24
|
+
|
|
25
|
+
#import "RCTImagePlugins.h"
|
|
26
|
+
|
|
27
|
+
using namespace facebook::react;
|
|
28
|
+
|
|
29
|
+
static NSInteger RCTImageBytesForImage(UIImage *image)
|
|
30
|
+
{
|
|
31
|
+
NSInteger singleImageBytes = (NSInteger)(image.size.width * image.size.height * image.scale * image.scale * 4);
|
|
32
|
+
return image.images ? image.images.count * singleImageBytes : singleImageBytes;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
static auto currentRequestCount = std::atomic<uint64_t>(0);
|
|
36
|
+
|
|
37
|
+
static NSError *addResponseHeadersToError(NSError *originalError, NSHTTPURLResponse *response)
|
|
38
|
+
{
|
|
39
|
+
NSMutableDictionary<NSString *, id> *_userInfo =
|
|
40
|
+
(NSMutableDictionary<NSString *, id> *)originalError.userInfo.mutableCopy;
|
|
41
|
+
_userInfo[@"httpStatusCode"] = [NSNumber numberWithInt:response.statusCode];
|
|
42
|
+
_userInfo[@"httpResponseHeaders"] = response.allHeaderFields;
|
|
43
|
+
NSError *error = [NSError errorWithDomain:originalError.domain code:originalError.code userInfo:_userInfo];
|
|
44
|
+
|
|
45
|
+
return error;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
@interface RCTImageLoader () <NativeImageLoaderIOSSpec, RCTImageLoaderWithAttributionProtocol>
|
|
49
|
+
|
|
50
|
+
@end
|
|
51
|
+
|
|
52
|
+
@implementation UIImage (React)
|
|
53
|
+
|
|
54
|
+
- (NSInteger)reactDecodedImageBytes
|
|
55
|
+
{
|
|
56
|
+
NSNumber *imageBytes = objc_getAssociatedObject(self, _cmd);
|
|
57
|
+
if (!imageBytes) {
|
|
58
|
+
imageBytes = @(RCTImageBytesForImage(self));
|
|
59
|
+
}
|
|
60
|
+
return [imageBytes integerValue];
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
- (void)setReactDecodedImageBytes:(NSInteger)bytes
|
|
64
|
+
{
|
|
65
|
+
objc_setAssociatedObject(self, @selector(reactDecodedImageBytes), @(bytes), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
@end
|
|
69
|
+
|
|
70
|
+
@implementation RCTImageLoader {
|
|
71
|
+
std::atomic<BOOL> _isLoaderSetup;
|
|
72
|
+
std::mutex _loaderSetupLock;
|
|
73
|
+
NSArray<id<RCTImageURLLoader>> * (^_loadersProvider)(RCTModuleRegistry *);
|
|
74
|
+
NSArray<id<RCTImageDataDecoder>> * (^_decodersProvider)(RCTModuleRegistry *);
|
|
75
|
+
NSArray<id<RCTImageURLLoader>> *_loaders;
|
|
76
|
+
NSArray<id<RCTImageDataDecoder>> *_decoders;
|
|
77
|
+
NSOperationQueue *_imageDecodeQueue;
|
|
78
|
+
dispatch_queue_t _URLRequestQueue;
|
|
79
|
+
id<RCTImageCache> _imageCache;
|
|
80
|
+
NSMutableArray *_pendingTasks;
|
|
81
|
+
NSInteger _activeTasks;
|
|
82
|
+
NSMutableArray *_pendingDecodes;
|
|
83
|
+
NSInteger _scheduledDecodes;
|
|
84
|
+
NSUInteger _activeBytes;
|
|
85
|
+
std::mutex _loadersMutex;
|
|
86
|
+
__weak id<RCTImageRedirectProtocol> _redirectDelegate;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
@synthesize bridge = _bridge;
|
|
90
|
+
@synthesize moduleRegistry = _moduleRegistry;
|
|
91
|
+
@synthesize maxConcurrentLoadingTasks = _maxConcurrentLoadingTasks;
|
|
92
|
+
@synthesize maxConcurrentDecodingTasks = _maxConcurrentDecodingTasks;
|
|
93
|
+
@synthesize maxConcurrentDecodingBytes = _maxConcurrentDecodingBytes;
|
|
94
|
+
|
|
95
|
+
RCT_EXPORT_MODULE()
|
|
96
|
+
|
|
97
|
+
- (instancetype)init
|
|
98
|
+
{
|
|
99
|
+
return [self initWithRedirectDelegate:nil];
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
+ (BOOL)requiresMainQueueSetup
|
|
103
|
+
{
|
|
104
|
+
return NO;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
- (instancetype)initWithRedirectDelegate:(id<RCTImageRedirectProtocol>)redirectDelegate
|
|
108
|
+
{
|
|
109
|
+
if (self = [super init]) {
|
|
110
|
+
_redirectDelegate = redirectDelegate;
|
|
111
|
+
_isLoaderSetup = NO;
|
|
112
|
+
}
|
|
113
|
+
return self;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
- (instancetype)initWithRedirectDelegate:(id<RCTImageRedirectProtocol>)redirectDelegate
|
|
117
|
+
loadersProvider:(NSArray<id<RCTImageURLLoader>> * (^)(RCTModuleRegistry *))getLoaders
|
|
118
|
+
decodersProvider:(NSArray<id<RCTImageDataDecoder>> * (^)(RCTModuleRegistry *))getHandlers
|
|
119
|
+
{
|
|
120
|
+
if (self = [self initWithRedirectDelegate:redirectDelegate]) {
|
|
121
|
+
_loadersProvider = getLoaders;
|
|
122
|
+
_decodersProvider = getHandlers;
|
|
123
|
+
}
|
|
124
|
+
return self;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
- (void)setUp
|
|
128
|
+
{
|
|
129
|
+
std::lock_guard<std::mutex> guard(_loaderSetupLock);
|
|
130
|
+
if (!_isLoaderSetup) {
|
|
131
|
+
// Set defaults
|
|
132
|
+
_maxConcurrentLoadingTasks = _maxConcurrentLoadingTasks ?: 4;
|
|
133
|
+
_maxConcurrentDecodingTasks = _maxConcurrentDecodingTasks ?: 2;
|
|
134
|
+
_maxConcurrentDecodingBytes = _maxConcurrentDecodingBytes ?: 30 * 1024 * 1024; // 30MB
|
|
135
|
+
|
|
136
|
+
_URLRequestQueue = dispatch_queue_create("com.facebook.react.ImageLoaderURLRequestQueue", DISPATCH_QUEUE_SERIAL);
|
|
137
|
+
_isLoaderSetup = YES;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
- (float)handlerPriority
|
|
142
|
+
{
|
|
143
|
+
return 2;
|
|
144
|
+
}
|
|
145
|
+
#pragma mark - RCTImageLoaderProtocol 1/3
|
|
146
|
+
|
|
147
|
+
- (id<RCTImageCache>)imageCache
|
|
148
|
+
{
|
|
149
|
+
if (!_imageCache) {
|
|
150
|
+
// set up with default cache
|
|
151
|
+
_imageCache = [RCTImageCache new];
|
|
152
|
+
}
|
|
153
|
+
return _imageCache;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
- (void)setImageCache:(id<RCTImageCache>)cache
|
|
157
|
+
{
|
|
158
|
+
if (_imageCache) {
|
|
159
|
+
RCTLogWarn(@"RCTImageCache was already set and has now been overridden.");
|
|
160
|
+
}
|
|
161
|
+
_imageCache = cache;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
- (id<RCTImageURLLoader>)imageURLLoaderForURL:(NSURL *)URL
|
|
165
|
+
{
|
|
166
|
+
if (!_isLoaderSetup) {
|
|
167
|
+
[self setUp];
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if (!_loaders) {
|
|
171
|
+
std::unique_lock<std::mutex> guard(_loadersMutex);
|
|
172
|
+
if (!_loaders) {
|
|
173
|
+
// Get loaders, sorted in reverse priority order (highest priority first)
|
|
174
|
+
if (_loadersProvider) {
|
|
175
|
+
_loaders = _loadersProvider(self.moduleRegistry);
|
|
176
|
+
} else {
|
|
177
|
+
RCTAssert(_bridge, @"Trying to find RCTImageURLLoaders and bridge not set.");
|
|
178
|
+
_loaders = [_bridge modulesConformingToProtocol:@protocol(RCTImageURLLoader)];
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
_loaders =
|
|
182
|
+
[_loaders sortedArrayUsingComparator:^NSComparisonResult(id<RCTImageURLLoader> a, id<RCTImageURLLoader> b) {
|
|
183
|
+
float priorityA = [a respondsToSelector:@selector(loaderPriority)] ? [a loaderPriority] : 0;
|
|
184
|
+
float priorityB = [b respondsToSelector:@selector(loaderPriority)] ? [b loaderPriority] : 0;
|
|
185
|
+
if (priorityA > priorityB) {
|
|
186
|
+
return NSOrderedAscending;
|
|
187
|
+
} else if (priorityA < priorityB) {
|
|
188
|
+
return NSOrderedDescending;
|
|
189
|
+
} else {
|
|
190
|
+
return NSOrderedSame;
|
|
191
|
+
}
|
|
192
|
+
}];
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
if (RCT_DEBUG) {
|
|
197
|
+
// Check for handler conflicts
|
|
198
|
+
float previousPriority = 0;
|
|
199
|
+
id<RCTImageURLLoader> previousLoader = nil;
|
|
200
|
+
for (id<RCTImageURLLoader> loader in _loaders) {
|
|
201
|
+
float priority = [loader respondsToSelector:@selector(loaderPriority)] ? [loader loaderPriority] : 0;
|
|
202
|
+
if (previousLoader && priority < previousPriority) {
|
|
203
|
+
return previousLoader;
|
|
204
|
+
}
|
|
205
|
+
if ([loader canLoadImageURL:URL]) {
|
|
206
|
+
if (previousLoader) {
|
|
207
|
+
if (priority == previousPriority) {
|
|
208
|
+
RCTLogError(
|
|
209
|
+
@"The RCTImageURLLoaders %@ and %@ both reported that"
|
|
210
|
+
" they can load the URL %@, and have equal priority"
|
|
211
|
+
" (%g). This could result in non-deterministic behavior.",
|
|
212
|
+
loader,
|
|
213
|
+
previousLoader,
|
|
214
|
+
URL,
|
|
215
|
+
priority);
|
|
216
|
+
}
|
|
217
|
+
} else {
|
|
218
|
+
previousLoader = loader;
|
|
219
|
+
previousPriority = priority;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return previousLoader;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// Normal code path
|
|
227
|
+
for (id<RCTImageURLLoader> loader in _loaders) {
|
|
228
|
+
if ([loader canLoadImageURL:URL]) {
|
|
229
|
+
return loader;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return nil;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
#pragma mark - Private Image Decoding & Resizing
|
|
236
|
+
|
|
237
|
+
- (id<RCTImageDataDecoder>)imageDataDecoderForData:(NSData *)data
|
|
238
|
+
{
|
|
239
|
+
if (!_isLoaderSetup) {
|
|
240
|
+
[self setUp];
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
if (!_decoders) {
|
|
244
|
+
// Get decoders, sorted in reverse priority order (highest priority first)
|
|
245
|
+
|
|
246
|
+
if (_decodersProvider) {
|
|
247
|
+
_decoders = _decodersProvider(self.moduleRegistry);
|
|
248
|
+
} else {
|
|
249
|
+
RCTAssert(_bridge, @"Trying to find RCTImageDataDecoders and bridge not set.");
|
|
250
|
+
_decoders = [_bridge modulesConformingToProtocol:@protocol(RCTImageDataDecoder)];
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
_decoders = [_decoders
|
|
254
|
+
sortedArrayUsingComparator:^NSComparisonResult(id<RCTImageDataDecoder> a, id<RCTImageDataDecoder> b) {
|
|
255
|
+
float priorityA = [a respondsToSelector:@selector(decoderPriority)] ? [a decoderPriority] : 0;
|
|
256
|
+
float priorityB = [b respondsToSelector:@selector(decoderPriority)] ? [b decoderPriority] : 0;
|
|
257
|
+
if (priorityA > priorityB) {
|
|
258
|
+
return NSOrderedAscending;
|
|
259
|
+
} else if (priorityA < priorityB) {
|
|
260
|
+
return NSOrderedDescending;
|
|
261
|
+
} else {
|
|
262
|
+
return NSOrderedSame;
|
|
263
|
+
}
|
|
264
|
+
}];
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
if (RCT_DEBUG) {
|
|
268
|
+
// Check for handler conflicts
|
|
269
|
+
float previousPriority = 0;
|
|
270
|
+
id<RCTImageDataDecoder> previousDecoder = nil;
|
|
271
|
+
for (id<RCTImageDataDecoder> decoder in _decoders) {
|
|
272
|
+
float priority = [decoder respondsToSelector:@selector(decoderPriority)] ? [decoder decoderPriority] : 0;
|
|
273
|
+
if (previousDecoder && priority < previousPriority) {
|
|
274
|
+
return previousDecoder;
|
|
275
|
+
}
|
|
276
|
+
if ([decoder canDecodeImageData:data]) {
|
|
277
|
+
if (previousDecoder) {
|
|
278
|
+
if (priority == previousPriority) {
|
|
279
|
+
RCTLogError(
|
|
280
|
+
@"The RCTImageDataDecoders %@ and %@ both reported that"
|
|
281
|
+
" they can decode the data <NSData %p; %tu bytes>, and"
|
|
282
|
+
" have equal priority (%g). This could result in"
|
|
283
|
+
" non-deterministic behavior.",
|
|
284
|
+
decoder,
|
|
285
|
+
previousDecoder,
|
|
286
|
+
data,
|
|
287
|
+
data.length,
|
|
288
|
+
priority);
|
|
289
|
+
}
|
|
290
|
+
} else {
|
|
291
|
+
previousDecoder = decoder;
|
|
292
|
+
previousPriority = priority;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
return previousDecoder;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
// Normal code path
|
|
300
|
+
for (id<RCTImageDataDecoder> decoder in _decoders) {
|
|
301
|
+
if ([decoder canDecodeImageData:data]) {
|
|
302
|
+
return decoder;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
return nil;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
static UIImage *RCTResizeImageIfNeeded(UIImage *image, CGSize size, CGFloat scale, RCTResizeMode resizeMode)
|
|
309
|
+
{
|
|
310
|
+
if (CGSizeEqualToSize(size, CGSizeZero) || CGSizeEqualToSize(image.size, CGSizeZero) ||
|
|
311
|
+
CGSizeEqualToSize(image.size, size)) {
|
|
312
|
+
return image;
|
|
313
|
+
}
|
|
314
|
+
CGRect targetSize = RCTTargetRect(image.size, size, scale, resizeMode);
|
|
315
|
+
CGAffineTransform transform = RCTTransformFromTargetRect(image.size, targetSize);
|
|
316
|
+
image = RCTTransformImage(image, size, scale, transform);
|
|
317
|
+
return image;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
#pragma mark - RCTImageLoaderProtocol 2/3
|
|
321
|
+
|
|
322
|
+
- (nullable RCTImageLoaderCancellationBlock)loadImageWithURLRequest:(NSURLRequest *)imageURLRequest
|
|
323
|
+
callback:(RCTImageLoaderCompletionBlock)callback
|
|
324
|
+
{
|
|
325
|
+
return [self loadImageWithURLRequest:imageURLRequest priority:RCTImageLoaderPriorityImmediate callback:callback];
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
- (nullable RCTImageLoaderCancellationBlock)loadImageWithURLRequest:(NSURLRequest *)imageURLRequest
|
|
329
|
+
priority:(RCTImageLoaderPriority)priority
|
|
330
|
+
callback:(RCTImageLoaderCompletionBlock)callback
|
|
331
|
+
{
|
|
332
|
+
return [self loadImageWithURLRequest:imageURLRequest
|
|
333
|
+
size:CGSizeZero
|
|
334
|
+
scale:1
|
|
335
|
+
clipped:YES
|
|
336
|
+
resizeMode:RCTResizeModeStretch
|
|
337
|
+
priority:priority
|
|
338
|
+
progressBlock:nil
|
|
339
|
+
partialLoadBlock:nil
|
|
340
|
+
completionBlock:callback];
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
- (nullable RCTImageLoaderCancellationBlock)loadImageWithURLRequest:(NSURLRequest *)imageURLRequest
|
|
344
|
+
size:(CGSize)size
|
|
345
|
+
scale:(CGFloat)scale
|
|
346
|
+
clipped:(BOOL)clipped
|
|
347
|
+
resizeMode:(RCTResizeMode)resizeMode
|
|
348
|
+
progressBlock:(RCTImageLoaderProgressBlock)progressBlock
|
|
349
|
+
partialLoadBlock:(RCTImageLoaderPartialLoadBlock)partialLoadBlock
|
|
350
|
+
completionBlock:(RCTImageLoaderCompletionBlock)completionBlock
|
|
351
|
+
{
|
|
352
|
+
return [self loadImageWithURLRequest:imageURLRequest
|
|
353
|
+
size:size
|
|
354
|
+
scale:scale
|
|
355
|
+
clipped:clipped
|
|
356
|
+
resizeMode:resizeMode
|
|
357
|
+
priority:RCTImageLoaderPriorityImmediate
|
|
358
|
+
progressBlock:progressBlock
|
|
359
|
+
partialLoadBlock:partialLoadBlock
|
|
360
|
+
completionBlock:completionBlock];
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
- (nullable RCTImageLoaderCancellationBlock)loadImageWithURLRequest:(NSURLRequest *)imageURLRequest
|
|
364
|
+
size:(CGSize)size
|
|
365
|
+
scale:(CGFloat)scale
|
|
366
|
+
clipped:(BOOL)clipped
|
|
367
|
+
resizeMode:(RCTResizeMode)resizeMode
|
|
368
|
+
priority:(RCTImageLoaderPriority)priority
|
|
369
|
+
progressBlock:(RCTImageLoaderProgressBlock)progressBlock
|
|
370
|
+
partialLoadBlock:(RCTImageLoaderPartialLoadBlock)partialLoadBlock
|
|
371
|
+
completionBlock:(RCTImageLoaderCompletionBlock)completionBlock
|
|
372
|
+
{
|
|
373
|
+
RCTImageURLLoaderRequest *request = [self loadImageWithURLRequest:imageURLRequest
|
|
374
|
+
size:size
|
|
375
|
+
scale:scale
|
|
376
|
+
clipped:clipped
|
|
377
|
+
resizeMode:resizeMode
|
|
378
|
+
priority:priority
|
|
379
|
+
attribution:{}
|
|
380
|
+
progressBlock:progressBlock
|
|
381
|
+
partialLoadBlock:partialLoadBlock
|
|
382
|
+
completionBlock:^(NSError *error, UIImage *image, id metadata) {
|
|
383
|
+
completionBlock(error, image);
|
|
384
|
+
}];
|
|
385
|
+
return ^{
|
|
386
|
+
[request cancel];
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
#pragma mark - Private Downloader Methods
|
|
391
|
+
|
|
392
|
+
- (void)dequeueTasks
|
|
393
|
+
{
|
|
394
|
+
dispatch_async(_URLRequestQueue, ^{
|
|
395
|
+
// Remove completed tasks
|
|
396
|
+
NSMutableArray *tasksToRemove = nil;
|
|
397
|
+
for (RCTNetworkTask *task in self->_pendingTasks.reverseObjectEnumerator) {
|
|
398
|
+
switch (task.status) {
|
|
399
|
+
case RCTNetworkTaskFinished:
|
|
400
|
+
if (!tasksToRemove) {
|
|
401
|
+
tasksToRemove = [NSMutableArray new];
|
|
402
|
+
}
|
|
403
|
+
[tasksToRemove addObject:task];
|
|
404
|
+
self->_activeTasks--;
|
|
405
|
+
break;
|
|
406
|
+
case RCTNetworkTaskPending:
|
|
407
|
+
break;
|
|
408
|
+
case RCTNetworkTaskInProgress:
|
|
409
|
+
// Check task isn't "stuck"
|
|
410
|
+
if (task.requestToken == nil) {
|
|
411
|
+
RCTLogWarn(@"Task orphaned for request %@", task.request);
|
|
412
|
+
if (!tasksToRemove) {
|
|
413
|
+
tasksToRemove = [NSMutableArray new];
|
|
414
|
+
}
|
|
415
|
+
[tasksToRemove addObject:task];
|
|
416
|
+
self->_activeTasks--;
|
|
417
|
+
[task cancel];
|
|
418
|
+
}
|
|
419
|
+
break;
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
if (tasksToRemove) {
|
|
424
|
+
[self->_pendingTasks removeObjectsInArray:tasksToRemove];
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
// Start queued decode
|
|
428
|
+
NSInteger activeDecodes = self->_scheduledDecodes - self->_pendingDecodes.count;
|
|
429
|
+
while (activeDecodes == 0 ||
|
|
430
|
+
(self->_activeBytes <= self->_maxConcurrentDecodingBytes &&
|
|
431
|
+
activeDecodes <= self->_maxConcurrentDecodingTasks)) {
|
|
432
|
+
dispatch_block_t decodeBlock = self->_pendingDecodes.firstObject;
|
|
433
|
+
if (decodeBlock) {
|
|
434
|
+
[self->_pendingDecodes removeObjectAtIndex:0];
|
|
435
|
+
decodeBlock();
|
|
436
|
+
} else {
|
|
437
|
+
break;
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
// Start queued tasks
|
|
442
|
+
for (RCTNetworkTask *task in self->_pendingTasks) {
|
|
443
|
+
if (MAX(self->_activeTasks, self->_scheduledDecodes) >= self->_maxConcurrentLoadingTasks) {
|
|
444
|
+
break;
|
|
445
|
+
}
|
|
446
|
+
if (task.status == RCTNetworkTaskPending) {
|
|
447
|
+
[task start];
|
|
448
|
+
self->_activeTasks++;
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
/**
|
|
455
|
+
* This returns either an image, or raw image data, depending on the loading
|
|
456
|
+
* path taken. This is useful if you want to skip decoding, e.g. when preloading
|
|
457
|
+
* the image, or retrieving metadata.
|
|
458
|
+
*/
|
|
459
|
+
- (RCTImageURLLoaderRequest *)_loadImageOrDataWithURLRequest:(NSURLRequest *)request
|
|
460
|
+
size:(CGSize)size
|
|
461
|
+
scale:(CGFloat)scale
|
|
462
|
+
resizeMode:(RCTResizeMode)resizeMode
|
|
463
|
+
priority:(RCTImageLoaderPriority)priority
|
|
464
|
+
attribution:(const ImageURLLoaderAttribution &)attribution
|
|
465
|
+
progressBlock:(RCTImageLoaderProgressBlock)progressHandler
|
|
466
|
+
partialLoadBlock:(RCTImageLoaderPartialLoadBlock)partialLoadHandler
|
|
467
|
+
completionBlock:(void (^)(
|
|
468
|
+
NSError *error,
|
|
469
|
+
id imageOrData,
|
|
470
|
+
id imageMetadata,
|
|
471
|
+
BOOL cacheResult,
|
|
472
|
+
NSURLResponse *response))completionBlock
|
|
473
|
+
{
|
|
474
|
+
{
|
|
475
|
+
NSMutableURLRequest *mutableRequest = [request mutableCopy];
|
|
476
|
+
[NSURLProtocol setProperty:@"RCTImageLoader" forKey:@"trackingName" inRequest:mutableRequest];
|
|
477
|
+
|
|
478
|
+
// Add missing png extension
|
|
479
|
+
if (request.URL.fileURL && request.URL.pathExtension.length == 0) {
|
|
480
|
+
// Check if there exists a file with that url on disk already
|
|
481
|
+
// This should fix issue https://github.com/facebook/react-native/issues/46870
|
|
482
|
+
if ([[NSFileManager defaultManager] fileExistsAtPath:request.URL.path]) {
|
|
483
|
+
mutableRequest.URL = request.URL;
|
|
484
|
+
} else {
|
|
485
|
+
// This is the default behavior in case there is no file on disk with no extension.
|
|
486
|
+
// We assume that the extension is `png`.
|
|
487
|
+
mutableRequest.URL = [request.URL URLByAppendingPathExtension:@"png"];
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
if (_redirectDelegate != nil) {
|
|
491
|
+
mutableRequest.URL = [_redirectDelegate redirectAssetsURL:mutableRequest.URL];
|
|
492
|
+
}
|
|
493
|
+
request = mutableRequest;
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
// Create a copy here so the value is retained when accessed in the blocks below.
|
|
497
|
+
ImageURLLoaderAttribution attributionCopy(attribution);
|
|
498
|
+
|
|
499
|
+
// Find suitable image URL loader
|
|
500
|
+
id<RCTImageURLLoader> loadHandler = [self imageURLLoaderForURL:request.URL];
|
|
501
|
+
BOOL requiresScheduling =
|
|
502
|
+
[loadHandler respondsToSelector:@selector(requiresScheduling)] ? [loadHandler requiresScheduling] : YES;
|
|
503
|
+
|
|
504
|
+
BOOL cacheResult =
|
|
505
|
+
[loadHandler respondsToSelector:@selector(shouldCacheLoadedImages)] ? [loadHandler shouldCacheLoadedImages] : YES;
|
|
506
|
+
|
|
507
|
+
if (request.cachePolicy == NSURLRequestReloadIgnoringLocalCacheData) {
|
|
508
|
+
cacheResult = NO;
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
if (cacheResult && partialLoadHandler) {
|
|
512
|
+
UIImage *image = [[self imageCache] imageForUrl:request.URL.absoluteString
|
|
513
|
+
size:size
|
|
514
|
+
scale:scale
|
|
515
|
+
resizeMode:resizeMode];
|
|
516
|
+
if (image) {
|
|
517
|
+
partialLoadHandler(image);
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
auto cancelled = std::make_shared<std::atomic<int>>(0);
|
|
522
|
+
__block dispatch_block_t cancelLoad = nil;
|
|
523
|
+
__block NSLock *cancelLoadLock = [NSLock new];
|
|
524
|
+
NSString *requestId = [NSString stringWithFormat:@"%@-%llu", [[NSUUID UUID] UUIDString], currentRequestCount++];
|
|
525
|
+
|
|
526
|
+
void (^completionHandler)(NSError *, id, id, NSURLResponse *) =
|
|
527
|
+
^(NSError *error, id imageOrData, id imageMetadata, NSURLResponse *response) {
|
|
528
|
+
[cancelLoadLock lock];
|
|
529
|
+
cancelLoad = nil;
|
|
530
|
+
[cancelLoadLock unlock];
|
|
531
|
+
|
|
532
|
+
// If we've received an image, we should try to set it synchronously,
|
|
533
|
+
// if it's data, do decoding on a background thread.
|
|
534
|
+
if (RCTIsMainQueue() && ![imageOrData isKindOfClass:[UIImage class]]) {
|
|
535
|
+
// Most loaders do not return on the main thread, so caller is probably not
|
|
536
|
+
// expecting it, and may do expensive post-processing in the callback
|
|
537
|
+
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
|
538
|
+
if (!std::atomic_load(cancelled.get())) {
|
|
539
|
+
completionBlock(error, imageOrData, imageMetadata, cacheResult, response);
|
|
540
|
+
}
|
|
541
|
+
});
|
|
542
|
+
} else if (!std::atomic_load(cancelled.get())) {
|
|
543
|
+
if (response && error && [response isKindOfClass:[NSHTTPURLResponse class]]) {
|
|
544
|
+
NSHTTPURLResponse *_httpResp = (NSHTTPURLResponse *)response;
|
|
545
|
+
error = addResponseHeadersToError(error, _httpResp);
|
|
546
|
+
}
|
|
547
|
+
completionBlock(error, imageOrData, imageMetadata, cacheResult, response);
|
|
548
|
+
}
|
|
549
|
+
};
|
|
550
|
+
|
|
551
|
+
// If the loader doesn't require scheduling we call it directly on
|
|
552
|
+
// the main queue.
|
|
553
|
+
if (loadHandler && !requiresScheduling) {
|
|
554
|
+
if ([loadHandler conformsToProtocol:@protocol(RCTImageURLLoaderWithAttribution)]) {
|
|
555
|
+
return [(id<RCTImageURLLoaderWithAttribution>)loadHandler
|
|
556
|
+
loadImageForURL:request.URL
|
|
557
|
+
size:size
|
|
558
|
+
scale:scale
|
|
559
|
+
resizeMode:resizeMode
|
|
560
|
+
requestId:requestId
|
|
561
|
+
priority:priority
|
|
562
|
+
attribution:attributionCopy
|
|
563
|
+
progressHandler:progressHandler
|
|
564
|
+
partialLoadHandler:partialLoadHandler
|
|
565
|
+
completionHandler:^(NSError *error, UIImage *image, id metadata) {
|
|
566
|
+
completionHandler(error, image, metadata, nil);
|
|
567
|
+
}];
|
|
568
|
+
}
|
|
569
|
+
RCTImageLoaderCancellationBlock cb = [loadHandler loadImageForURL:request.URL
|
|
570
|
+
size:size
|
|
571
|
+
scale:scale
|
|
572
|
+
resizeMode:resizeMode
|
|
573
|
+
progressHandler:progressHandler
|
|
574
|
+
partialLoadHandler:partialLoadHandler
|
|
575
|
+
completionHandler:^(NSError *error, UIImage *image) {
|
|
576
|
+
completionHandler(error, image, nil, nil);
|
|
577
|
+
}];
|
|
578
|
+
return [[RCTImageURLLoaderRequest alloc] initWithRequestId:nil imageURL:request.URL cancellationBlock:cb];
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
// All access to URL cache must be serialized
|
|
582
|
+
if (!_isLoaderSetup) {
|
|
583
|
+
[self setUp];
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
__weak RCTImageLoader *weakSelf = self;
|
|
587
|
+
dispatch_async(_URLRequestQueue, ^{
|
|
588
|
+
__typeof(self) strongSelf = weakSelf;
|
|
589
|
+
if (atomic_load(cancelled.get()) || !strongSelf) {
|
|
590
|
+
return;
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
if (loadHandler) {
|
|
594
|
+
dispatch_block_t cancelLoadLocal;
|
|
595
|
+
if ([loadHandler conformsToProtocol:@protocol(RCTImageURLLoaderWithAttribution)]) {
|
|
596
|
+
RCTImageURLLoaderRequest *loaderRequest = [(id<RCTImageURLLoaderWithAttribution>)loadHandler
|
|
597
|
+
loadImageForURL:request.URL
|
|
598
|
+
size:size
|
|
599
|
+
scale:scale
|
|
600
|
+
resizeMode:resizeMode
|
|
601
|
+
requestId:requestId
|
|
602
|
+
priority:priority
|
|
603
|
+
attribution:attributionCopy
|
|
604
|
+
progressHandler:progressHandler
|
|
605
|
+
partialLoadHandler:partialLoadHandler
|
|
606
|
+
completionHandler:^(NSError *error, UIImage *image, id metadata) {
|
|
607
|
+
completionHandler(error, image, metadata, nil);
|
|
608
|
+
}];
|
|
609
|
+
cancelLoadLocal = loaderRequest.cancellationBlock;
|
|
610
|
+
} else {
|
|
611
|
+
cancelLoadLocal = [loadHandler loadImageForURL:request.URL
|
|
612
|
+
size:size
|
|
613
|
+
scale:scale
|
|
614
|
+
resizeMode:resizeMode
|
|
615
|
+
progressHandler:progressHandler
|
|
616
|
+
partialLoadHandler:partialLoadHandler
|
|
617
|
+
completionHandler:^(NSError *error, UIImage *image) {
|
|
618
|
+
completionHandler(error, image, nil, nil);
|
|
619
|
+
}];
|
|
620
|
+
}
|
|
621
|
+
[cancelLoadLock lock];
|
|
622
|
+
cancelLoad = cancelLoadLocal;
|
|
623
|
+
[cancelLoadLock unlock];
|
|
624
|
+
} else {
|
|
625
|
+
UIImage *image;
|
|
626
|
+
if (cacheResult) {
|
|
627
|
+
image = [[strongSelf imageCache] imageForUrl:request.URL.absoluteString
|
|
628
|
+
size:size
|
|
629
|
+
scale:scale
|
|
630
|
+
resizeMode:resizeMode];
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
if (image) {
|
|
634
|
+
completionHandler(nil, image, nil, nil);
|
|
635
|
+
} else {
|
|
636
|
+
// Use networking module to load image
|
|
637
|
+
dispatch_block_t cancelLoadLocal =
|
|
638
|
+
[strongSelf _loadURLRequest:request
|
|
639
|
+
progressBlock:progressHandler
|
|
640
|
+
completionBlock:^(NSError *error, id imageOrData, NSURLResponse *response) {
|
|
641
|
+
completionHandler(error, imageOrData, nil, response);
|
|
642
|
+
}];
|
|
643
|
+
[cancelLoadLock lock];
|
|
644
|
+
cancelLoad = cancelLoadLocal;
|
|
645
|
+
[cancelLoadLock unlock];
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
});
|
|
649
|
+
|
|
650
|
+
return [[RCTImageURLLoaderRequest alloc] initWithRequestId:requestId
|
|
651
|
+
imageURL:request.URL
|
|
652
|
+
cancellationBlock:^{
|
|
653
|
+
BOOL alreadyCancelled = atomic_fetch_or(cancelled.get(), 1) ? YES : NO;
|
|
654
|
+
if (alreadyCancelled) {
|
|
655
|
+
return;
|
|
656
|
+
}
|
|
657
|
+
[cancelLoadLock lock];
|
|
658
|
+
dispatch_block_t cancelLoadLocal = cancelLoad;
|
|
659
|
+
cancelLoad = nil;
|
|
660
|
+
[cancelLoadLock unlock];
|
|
661
|
+
if (cancelLoadLocal) {
|
|
662
|
+
cancelLoadLocal();
|
|
663
|
+
}
|
|
664
|
+
}];
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
- (RCTImageLoaderCancellationBlock)_loadURLRequest:(NSURLRequest *)request
|
|
668
|
+
progressBlock:(RCTImageLoaderProgressBlock)progressHandler
|
|
669
|
+
completionBlock:(void (^)(NSError *error, id imageOrData, NSURLResponse *response))
|
|
670
|
+
completionHandler
|
|
671
|
+
{
|
|
672
|
+
RCTNetworking *networking = [_moduleRegistry moduleForName:"Networking"];
|
|
673
|
+
if (RCT_DEBUG && !networking) {
|
|
674
|
+
RCTLogError(
|
|
675
|
+
@"No suitable image URL loader found for %@. You may need to "
|
|
676
|
+
" import the RCTNetwork library in order to load images.",
|
|
677
|
+
request.URL.absoluteString);
|
|
678
|
+
return NULL;
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
// Check if networking module can load image
|
|
682
|
+
if (RCT_DEBUG && ![networking canHandleRequest:request]) {
|
|
683
|
+
RCTLogError(@"No suitable image URL loader found for %@", request.URL.absoluteString);
|
|
684
|
+
return NULL;
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
// Use networking module to load image
|
|
688
|
+
RCTURLRequestCompletionBlock processResponse = ^(NSURLResponse *response, NSData *data, NSError *error) {
|
|
689
|
+
// Check for system errors
|
|
690
|
+
if (error) {
|
|
691
|
+
completionHandler(error, nil, response);
|
|
692
|
+
return;
|
|
693
|
+
} else if (!response) {
|
|
694
|
+
completionHandler(RCTErrorWithMessage(@"Response metadata error"), nil, response);
|
|
695
|
+
return;
|
|
696
|
+
} else if (!data) {
|
|
697
|
+
completionHandler(RCTErrorWithMessage(@"Unknown image download error"), nil, response);
|
|
698
|
+
return;
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
// Check for http errors
|
|
702
|
+
if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
|
|
703
|
+
NSInteger statusCode = ((NSHTTPURLResponse *)response).statusCode;
|
|
704
|
+
if (statusCode != 200) {
|
|
705
|
+
NSString *errorMessage = [NSString stringWithFormat:@"Failed to load %@", response.URL];
|
|
706
|
+
NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errorMessage};
|
|
707
|
+
completionHandler(
|
|
708
|
+
[[NSError alloc] initWithDomain:NSURLErrorDomain code:statusCode userInfo:userInfo], nil, response);
|
|
709
|
+
return;
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
// Call handler
|
|
714
|
+
completionHandler(nil, data, response);
|
|
715
|
+
};
|
|
716
|
+
|
|
717
|
+
// Download image
|
|
718
|
+
__weak __typeof(self) weakSelf = self;
|
|
719
|
+
__block RCTNetworkTask *task =
|
|
720
|
+
[networking networkTaskWithRequest:request
|
|
721
|
+
completionBlock:^(NSURLResponse *response, NSData *data, NSError *error) {
|
|
722
|
+
__typeof(self) strongSelf = weakSelf;
|
|
723
|
+
if (!strongSelf) {
|
|
724
|
+
return;
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
if (error || !response || !data) {
|
|
728
|
+
NSError *someError = nil;
|
|
729
|
+
if (error) {
|
|
730
|
+
someError = error;
|
|
731
|
+
} else if (!response) {
|
|
732
|
+
someError = RCTErrorWithMessage(@"Response metadata error");
|
|
733
|
+
} else {
|
|
734
|
+
someError = RCTErrorWithMessage(@"Unknown image download error");
|
|
735
|
+
}
|
|
736
|
+
completionHandler(someError, nil, response);
|
|
737
|
+
[strongSelf dequeueTasks];
|
|
738
|
+
return;
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
dispatch_async(strongSelf->_URLRequestQueue, ^{
|
|
742
|
+
// Process image data
|
|
743
|
+
processResponse(response, data, nil);
|
|
744
|
+
|
|
745
|
+
// Prepare for next task
|
|
746
|
+
[strongSelf dequeueTasks];
|
|
747
|
+
});
|
|
748
|
+
}];
|
|
749
|
+
|
|
750
|
+
task.downloadProgressBlock = ^(int64_t progress, int64_t total) {
|
|
751
|
+
if (progressHandler) {
|
|
752
|
+
progressHandler(progress, total);
|
|
753
|
+
}
|
|
754
|
+
};
|
|
755
|
+
|
|
756
|
+
if (task) {
|
|
757
|
+
if (!_pendingTasks) {
|
|
758
|
+
_pendingTasks = [NSMutableArray new];
|
|
759
|
+
}
|
|
760
|
+
[_pendingTasks addObject:task];
|
|
761
|
+
[self dequeueTasks];
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
return ^{
|
|
765
|
+
__typeof(self) strongSelf = weakSelf;
|
|
766
|
+
if (!strongSelf || !task) {
|
|
767
|
+
return;
|
|
768
|
+
}
|
|
769
|
+
dispatch_async(strongSelf->_URLRequestQueue, ^{
|
|
770
|
+
[task cancel];
|
|
771
|
+
task = nil;
|
|
772
|
+
});
|
|
773
|
+
[strongSelf dequeueTasks];
|
|
774
|
+
};
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
#pragma mark - RCTImageLoaderWithAttributionProtocol
|
|
778
|
+
|
|
779
|
+
- (RCTImageURLLoaderRequest *)loadImageWithURLRequest:(NSURLRequest *)imageURLRequest
|
|
780
|
+
size:(CGSize)size
|
|
781
|
+
scale:(CGFloat)scale
|
|
782
|
+
clipped:(BOOL)clipped
|
|
783
|
+
resizeMode:(RCTResizeMode)resizeMode
|
|
784
|
+
priority:(RCTImageLoaderPriority)priority
|
|
785
|
+
attribution:(const ImageURLLoaderAttribution &)attribution
|
|
786
|
+
progressBlock:(RCTImageLoaderProgressBlock)progressBlock
|
|
787
|
+
partialLoadBlock:(RCTImageLoaderPartialLoadBlock)partialLoadBlock
|
|
788
|
+
completionBlock:(RCTImageLoaderCompletionBlockWithMetadata)completionBlock
|
|
789
|
+
{
|
|
790
|
+
auto cancelled = std::make_shared<std::atomic<int>>(0);
|
|
791
|
+
__block dispatch_block_t cancelLoad = nil;
|
|
792
|
+
__block NSLock *cancelLoadLock = [NSLock new];
|
|
793
|
+
dispatch_block_t cancellationBlock = ^{
|
|
794
|
+
BOOL alreadyCancelled = atomic_fetch_or(cancelled.get(), 1) ? YES : NO;
|
|
795
|
+
if (alreadyCancelled) {
|
|
796
|
+
return;
|
|
797
|
+
}
|
|
798
|
+
[cancelLoadLock lock];
|
|
799
|
+
dispatch_block_t cancelLoadLocal = cancelLoad;
|
|
800
|
+
cancelLoad = nil;
|
|
801
|
+
[cancelLoadLock unlock];
|
|
802
|
+
if (cancelLoadLocal) {
|
|
803
|
+
cancelLoadLocal();
|
|
804
|
+
}
|
|
805
|
+
};
|
|
806
|
+
|
|
807
|
+
__weak RCTImageLoader *weakSelf = self;
|
|
808
|
+
void (^completionHandler)(NSError *, id, id, BOOL, NSURLResponse *) =
|
|
809
|
+
^(NSError *error, id imageOrData, id imageMetadata, BOOL cacheResult, NSURLResponse *response) {
|
|
810
|
+
__typeof(self) strongSelf = weakSelf;
|
|
811
|
+
if (std::atomic_load(cancelled.get()) || !strongSelf) {
|
|
812
|
+
return;
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
if (!imageOrData || [imageOrData isKindOfClass:[UIImage class]]) {
|
|
816
|
+
[cancelLoadLock lock];
|
|
817
|
+
cancelLoad = nil;
|
|
818
|
+
[cancelLoadLock unlock];
|
|
819
|
+
completionBlock(error, imageOrData, imageMetadata);
|
|
820
|
+
return;
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
RCTImageLoaderCompletionBlock decodeCompletionHandler = ^(NSError *error_, UIImage *image) {
|
|
824
|
+
if (cacheResult && image) {
|
|
825
|
+
// Store decoded image in cache
|
|
826
|
+
[[strongSelf imageCache] addImageToCache:image
|
|
827
|
+
URL:imageURLRequest.URL.absoluteString
|
|
828
|
+
size:size
|
|
829
|
+
scale:scale
|
|
830
|
+
resizeMode:resizeMode
|
|
831
|
+
response:response];
|
|
832
|
+
}
|
|
833
|
+
[cancelLoadLock lock];
|
|
834
|
+
cancelLoad = nil;
|
|
835
|
+
[cancelLoadLock unlock];
|
|
836
|
+
completionBlock(error_, image, nil);
|
|
837
|
+
};
|
|
838
|
+
dispatch_block_t cancelLoadLocal = [strongSelf decodeImageData:imageOrData
|
|
839
|
+
size:size
|
|
840
|
+
scale:scale
|
|
841
|
+
clipped:clipped
|
|
842
|
+
resizeMode:resizeMode
|
|
843
|
+
completionBlock:decodeCompletionHandler];
|
|
844
|
+
[cancelLoadLock lock];
|
|
845
|
+
cancelLoad = cancelLoadLocal;
|
|
846
|
+
[cancelLoadLock unlock];
|
|
847
|
+
};
|
|
848
|
+
|
|
849
|
+
RCTImageURLLoaderRequest *loaderRequest = [self _loadImageOrDataWithURLRequest:imageURLRequest
|
|
850
|
+
size:size
|
|
851
|
+
scale:scale
|
|
852
|
+
resizeMode:resizeMode
|
|
853
|
+
priority:priority
|
|
854
|
+
attribution:attribution
|
|
855
|
+
progressBlock:progressBlock
|
|
856
|
+
partialLoadBlock:partialLoadBlock
|
|
857
|
+
completionBlock:completionHandler];
|
|
858
|
+
[cancelLoadLock lock];
|
|
859
|
+
cancelLoad = loaderRequest.cancellationBlock;
|
|
860
|
+
[cancelLoadLock unlock];
|
|
861
|
+
return [[RCTImageURLLoaderRequest alloc] initWithRequestId:loaderRequest.requestId
|
|
862
|
+
imageURL:imageURLRequest.URL
|
|
863
|
+
cancellationBlock:cancellationBlock];
|
|
864
|
+
}
|
|
865
|
+
|
|
866
|
+
- (BOOL)shouldEnablePerfLoggingForRequestUrl:(NSURL *)url
|
|
867
|
+
{
|
|
868
|
+
id<RCTImageURLLoader> loadHandler = [self imageURLLoaderForURL:url];
|
|
869
|
+
if ([loadHandler respondsToSelector:@selector(shouldEnablePerfLogging)]) {
|
|
870
|
+
return [(id<RCTImageURLLoaderWithAttribution>)loadHandler shouldEnablePerfLogging];
|
|
871
|
+
}
|
|
872
|
+
return NO;
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
- (void)trackURLImageVisibilityForRequest:(RCTImageURLLoaderRequest *)loaderRequest imageView:(UIView *)imageView
|
|
876
|
+
{
|
|
877
|
+
if (!loaderRequest || !imageView) {
|
|
878
|
+
return;
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
id<RCTImageURLLoader> loadHandler = [self imageURLLoaderForURL:loaderRequest.imageURL];
|
|
882
|
+
if ([loadHandler respondsToSelector:@selector(trackURLImageVisibilityForRequest:imageView:)]) {
|
|
883
|
+
[(id<RCTImageURLLoaderWithAttribution>)loadHandler trackURLImageVisibilityForRequest:loaderRequest
|
|
884
|
+
imageView:imageView];
|
|
885
|
+
}
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
- (void)trackURLImageRequestDidDestroy:(RCTImageURLLoaderRequest *)loaderRequest
|
|
889
|
+
{
|
|
890
|
+
if (!loaderRequest) {
|
|
891
|
+
return;
|
|
892
|
+
}
|
|
893
|
+
|
|
894
|
+
id<RCTImageURLLoader> loadHandler = [self imageURLLoaderForURL:loaderRequest.imageURL];
|
|
895
|
+
if ([loadHandler respondsToSelector:@selector(trackURLImageRequestDidDestroy:)]) {
|
|
896
|
+
[(id<RCTImageURLLoaderWithAttribution>)loadHandler trackURLImageRequestDidDestroy:loaderRequest];
|
|
897
|
+
}
|
|
898
|
+
}
|
|
899
|
+
|
|
900
|
+
- (void)trackURLImageDidDestroy:(RCTImageURLLoaderRequest *)loaderRequest
|
|
901
|
+
{
|
|
902
|
+
if (!loaderRequest) {
|
|
903
|
+
return;
|
|
904
|
+
}
|
|
905
|
+
|
|
906
|
+
id<RCTImageURLLoader> loadHandler = [self imageURLLoaderForURL:loaderRequest.imageURL];
|
|
907
|
+
if ([loadHandler respondsToSelector:@selector(trackURLImageDidDestroy:)]) {
|
|
908
|
+
[(id<RCTImageURLLoaderWithAttribution>)loadHandler trackURLImageDidDestroy:loaderRequest];
|
|
909
|
+
}
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
#pragma mark - RCTImageLoaderProtocol 3/3
|
|
913
|
+
|
|
914
|
+
- (RCTImageLoaderCancellationBlock)decodeImageData:(NSData *)data
|
|
915
|
+
size:(CGSize)size
|
|
916
|
+
scale:(CGFloat)scale
|
|
917
|
+
clipped:(BOOL)clipped
|
|
918
|
+
resizeMode:(RCTResizeMode)resizeMode
|
|
919
|
+
completionBlock:(RCTImageLoaderCompletionBlock)completionBlock
|
|
920
|
+
{
|
|
921
|
+
if (data.length == 0) {
|
|
922
|
+
completionBlock(RCTErrorWithMessage(@"No image data"), nil);
|
|
923
|
+
return ^{
|
|
924
|
+
};
|
|
925
|
+
}
|
|
926
|
+
|
|
927
|
+
auto cancelled = std::make_shared<std::atomic<int>>(0);
|
|
928
|
+
void (^completionHandler)(NSError *, UIImage *) = ^(NSError *error, UIImage *image) {
|
|
929
|
+
if (RCTIsMainQueue()) {
|
|
930
|
+
// Most loaders do not return on the main thread, so caller is probably not
|
|
931
|
+
// expecting it, and may do expensive post-processing in the callback
|
|
932
|
+
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
|
933
|
+
if (!std::atomic_load(cancelled.get())) {
|
|
934
|
+
completionBlock(error, clipped ? RCTResizeImageIfNeeded(image, size, scale, resizeMode) : image);
|
|
935
|
+
}
|
|
936
|
+
});
|
|
937
|
+
} else if (!std::atomic_load(cancelled.get())) {
|
|
938
|
+
completionBlock(error, clipped ? RCTResizeImageIfNeeded(image, size, scale, resizeMode) : image);
|
|
939
|
+
}
|
|
940
|
+
};
|
|
941
|
+
|
|
942
|
+
id<RCTImageDataDecoder> imageDecoder = [self imageDataDecoderForData:data];
|
|
943
|
+
if (imageDecoder) {
|
|
944
|
+
return [imageDecoder decodeImageData:data
|
|
945
|
+
size:size
|
|
946
|
+
scale:scale
|
|
947
|
+
resizeMode:resizeMode
|
|
948
|
+
completionHandler:completionHandler]
|
|
949
|
+
?: ^{
|
|
950
|
+
};
|
|
951
|
+
} else {
|
|
952
|
+
dispatch_block_t decodeBlock = ^{
|
|
953
|
+
// Calculate the size, in bytes, that the decompressed image will require
|
|
954
|
+
NSInteger decodedImageBytes = (NSInteger)((size.width * scale) * (size.height * scale) * 4);
|
|
955
|
+
|
|
956
|
+
// Mark these bytes as in-use
|
|
957
|
+
self->_activeBytes += decodedImageBytes;
|
|
958
|
+
|
|
959
|
+
// Do actual decompression on a concurrent background queue
|
|
960
|
+
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
|
961
|
+
if (!std::atomic_load(cancelled.get())) {
|
|
962
|
+
// Decompress the image data (this may be CPU and memory intensive)
|
|
963
|
+
UIImage *image = RCTDecodeImageWithData(data, size, scale, resizeMode);
|
|
964
|
+
|
|
965
|
+
#if RCT_DEV
|
|
966
|
+
CGSize imagePixelSize = RCTSizeInPixels(image.size, image.scale);
|
|
967
|
+
CGSize screenPixelSize = RCTSizeInPixels(RCTScreenSize(), RCTScreenScale());
|
|
968
|
+
if (imagePixelSize.width * imagePixelSize.height > screenPixelSize.width * screenPixelSize.height) {
|
|
969
|
+
RCTLogInfo(
|
|
970
|
+
@"[PERF ASSETS] Loading image at size %@, which is larger "
|
|
971
|
+
"than the screen size %@",
|
|
972
|
+
NSStringFromCGSize(imagePixelSize),
|
|
973
|
+
NSStringFromCGSize(screenPixelSize));
|
|
974
|
+
}
|
|
975
|
+
#endif
|
|
976
|
+
|
|
977
|
+
if (image) {
|
|
978
|
+
completionHandler(nil, image);
|
|
979
|
+
} else {
|
|
980
|
+
NSString *errorMessage =
|
|
981
|
+
[NSString stringWithFormat:@"Error decoding image data <NSData %p; %tu bytes>", data, data.length];
|
|
982
|
+
NSError *finalError = RCTErrorWithMessage(errorMessage);
|
|
983
|
+
completionHandler(finalError, nil);
|
|
984
|
+
}
|
|
985
|
+
}
|
|
986
|
+
|
|
987
|
+
// We're no longer retaining the uncompressed data, so now we'll mark
|
|
988
|
+
// the decoding as complete so that the loading task queue can resume.
|
|
989
|
+
dispatch_async(self->_URLRequestQueue, ^{
|
|
990
|
+
self->_scheduledDecodes--;
|
|
991
|
+
self->_activeBytes -= decodedImageBytes;
|
|
992
|
+
[self dequeueTasks];
|
|
993
|
+
});
|
|
994
|
+
});
|
|
995
|
+
};
|
|
996
|
+
|
|
997
|
+
if (!_isLoaderSetup) {
|
|
998
|
+
[self setUp];
|
|
999
|
+
}
|
|
1000
|
+
dispatch_async(_URLRequestQueue, ^{
|
|
1001
|
+
// The decode operation retains the compressed image data until it's
|
|
1002
|
+
// complete, so we'll mark it as having started, in order to block
|
|
1003
|
+
// further image loads from happening until we're done with the data.
|
|
1004
|
+
self->_scheduledDecodes++;
|
|
1005
|
+
|
|
1006
|
+
if (!self->_pendingDecodes) {
|
|
1007
|
+
self->_pendingDecodes = [NSMutableArray new];
|
|
1008
|
+
}
|
|
1009
|
+
NSInteger activeDecodes = self->_scheduledDecodes - self->_pendingDecodes.count - 1;
|
|
1010
|
+
if (activeDecodes == 0 ||
|
|
1011
|
+
(self->_activeBytes <= self->_maxConcurrentDecodingBytes &&
|
|
1012
|
+
activeDecodes <= self->_maxConcurrentDecodingTasks)) {
|
|
1013
|
+
decodeBlock();
|
|
1014
|
+
} else {
|
|
1015
|
+
[self->_pendingDecodes addObject:decodeBlock];
|
|
1016
|
+
}
|
|
1017
|
+
});
|
|
1018
|
+
|
|
1019
|
+
return ^{
|
|
1020
|
+
std::atomic_store(cancelled.get(), 1);
|
|
1021
|
+
};
|
|
1022
|
+
}
|
|
1023
|
+
}
|
|
1024
|
+
|
|
1025
|
+
- (RCTImageLoaderCancellationBlock)getImageSizeForURLRequest:(NSURLRequest *)imageURLRequest
|
|
1026
|
+
block:(void (^)(NSError *error, CGSize size))callback
|
|
1027
|
+
{
|
|
1028
|
+
void (^completion)(NSError *, id, id, BOOL, NSURLResponse *) =
|
|
1029
|
+
^(NSError *error, id imageOrData, id imageMetadata, BOOL cacheResult, NSURLResponse *response) {
|
|
1030
|
+
CGSize size;
|
|
1031
|
+
if ([imageOrData isKindOfClass:[NSData class]]) {
|
|
1032
|
+
NSDictionary *meta = RCTGetImageMetadata(imageOrData);
|
|
1033
|
+
|
|
1034
|
+
NSInteger imageOrientation = [meta[(id)kCGImagePropertyOrientation] integerValue];
|
|
1035
|
+
switch (imageOrientation) {
|
|
1036
|
+
case kCGImagePropertyOrientationLeft:
|
|
1037
|
+
case kCGImagePropertyOrientationRight:
|
|
1038
|
+
case kCGImagePropertyOrientationLeftMirrored:
|
|
1039
|
+
case kCGImagePropertyOrientationRightMirrored:
|
|
1040
|
+
// swap width and height
|
|
1041
|
+
size = (CGSize){
|
|
1042
|
+
[meta[(id)kCGImagePropertyPixelHeight] floatValue],
|
|
1043
|
+
[meta[(id)kCGImagePropertyPixelWidth] floatValue],
|
|
1044
|
+
};
|
|
1045
|
+
break;
|
|
1046
|
+
case kCGImagePropertyOrientationUp:
|
|
1047
|
+
case kCGImagePropertyOrientationDown:
|
|
1048
|
+
case kCGImagePropertyOrientationUpMirrored:
|
|
1049
|
+
case kCGImagePropertyOrientationDownMirrored:
|
|
1050
|
+
default:
|
|
1051
|
+
size = (CGSize){
|
|
1052
|
+
[meta[(id)kCGImagePropertyPixelWidth] floatValue],
|
|
1053
|
+
[meta[(id)kCGImagePropertyPixelHeight] floatValue],
|
|
1054
|
+
};
|
|
1055
|
+
break;
|
|
1056
|
+
}
|
|
1057
|
+
} else {
|
|
1058
|
+
UIImage *image = imageOrData;
|
|
1059
|
+
size = (CGSize){
|
|
1060
|
+
image.size.width * image.scale,
|
|
1061
|
+
image.size.height * image.scale,
|
|
1062
|
+
};
|
|
1063
|
+
}
|
|
1064
|
+
callback(error, size);
|
|
1065
|
+
};
|
|
1066
|
+
|
|
1067
|
+
RCTImageURLLoaderRequest *loaderRequest = [self _loadImageOrDataWithURLRequest:imageURLRequest
|
|
1068
|
+
size:CGSizeZero
|
|
1069
|
+
scale:1
|
|
1070
|
+
resizeMode:RCTResizeModeStretch
|
|
1071
|
+
priority:RCTImageLoaderPriorityImmediate
|
|
1072
|
+
attribution:{}
|
|
1073
|
+
progressBlock:NULL
|
|
1074
|
+
partialLoadBlock:NULL
|
|
1075
|
+
completionBlock:completion];
|
|
1076
|
+
return loaderRequest.cancellationBlock;
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1079
|
+
- (NSDictionary *)getImageCacheStatus:(NSArray *)requests
|
|
1080
|
+
{
|
|
1081
|
+
NSMutableDictionary *results = [NSMutableDictionary dictionary];
|
|
1082
|
+
for (id request in requests) {
|
|
1083
|
+
NSURLRequest *urlRequest = [RCTConvert NSURLRequest:request];
|
|
1084
|
+
if (urlRequest) {
|
|
1085
|
+
NSCachedURLResponse *cachedResponse = [NSURLCache.sharedURLCache cachedResponseForRequest:urlRequest];
|
|
1086
|
+
if (cachedResponse) {
|
|
1087
|
+
if (cachedResponse.storagePolicy == NSURLCacheStorageAllowedInMemoryOnly) {
|
|
1088
|
+
results[urlRequest.URL.absoluteString] = @"memory";
|
|
1089
|
+
} else if (NSURLCache.sharedURLCache.currentMemoryUsage == 0) {
|
|
1090
|
+
// We can't check whether the file is cached on disk or memory.
|
|
1091
|
+
// However, if currentMemoryUsage is disabled, it must be read from disk.
|
|
1092
|
+
results[urlRequest.URL.absoluteString] = @"disk";
|
|
1093
|
+
} else {
|
|
1094
|
+
results[urlRequest.URL.absoluteString] = @"disk/memory";
|
|
1095
|
+
}
|
|
1096
|
+
}
|
|
1097
|
+
}
|
|
1098
|
+
}
|
|
1099
|
+
return results;
|
|
1100
|
+
}
|
|
1101
|
+
|
|
1102
|
+
#pragma mark - RCTURLRequestHandler
|
|
1103
|
+
|
|
1104
|
+
- (BOOL)canHandleRequest:(NSURLRequest *)request
|
|
1105
|
+
{
|
|
1106
|
+
NSURL *requestURL = request.URL;
|
|
1107
|
+
|
|
1108
|
+
// If the data being loaded is a video, return NO
|
|
1109
|
+
// Even better may be to implement this on the RCTImageURLLoader that would try to load it,
|
|
1110
|
+
// but we'd have to run the logic both in RCTPhotoLibraryImageLoader and
|
|
1111
|
+
// RCTAssetsLibraryRequestHandler. Once we drop iOS7 though, we'd drop
|
|
1112
|
+
// RCTAssetsLibraryRequestHandler and can move it there.
|
|
1113
|
+
static NSRegularExpression *videoRegex;
|
|
1114
|
+
static dispatch_once_t onceToken;
|
|
1115
|
+
dispatch_once(&onceToken, ^{
|
|
1116
|
+
NSError *error = nil;
|
|
1117
|
+
videoRegex = [NSRegularExpression regularExpressionWithPattern:@"(?:&|^)ext=MOV(?:&|$)"
|
|
1118
|
+
options:NSRegularExpressionCaseInsensitive
|
|
1119
|
+
error:&error];
|
|
1120
|
+
if (error) {
|
|
1121
|
+
RCTLogError(@"%@", error);
|
|
1122
|
+
}
|
|
1123
|
+
});
|
|
1124
|
+
|
|
1125
|
+
NSString *query = requestURL.query;
|
|
1126
|
+
if (query != nil && [videoRegex firstMatchInString:query options:0 range:NSMakeRange(0, query.length)]) {
|
|
1127
|
+
return NO;
|
|
1128
|
+
}
|
|
1129
|
+
|
|
1130
|
+
for (id<RCTImageURLLoader> loader in _loaders) {
|
|
1131
|
+
// Don't use RCTImageURLLoader protocol for modules that already conform to
|
|
1132
|
+
// RCTURLRequestHandler as it's inefficient to decode an image and then
|
|
1133
|
+
// convert it back into data
|
|
1134
|
+
if (![loader conformsToProtocol:@protocol(RCTURLRequestHandler)] && [loader canLoadImageURL:requestURL]) {
|
|
1135
|
+
return YES;
|
|
1136
|
+
}
|
|
1137
|
+
}
|
|
1138
|
+
|
|
1139
|
+
return NO;
|
|
1140
|
+
}
|
|
1141
|
+
|
|
1142
|
+
- (id)sendRequest:(NSURLRequest *)request withDelegate:(id<RCTURLRequestDelegate>)delegate
|
|
1143
|
+
{
|
|
1144
|
+
__block RCTImageLoaderCancellationBlock requestToken;
|
|
1145
|
+
requestToken = [self loadImageWithURLRequest:request
|
|
1146
|
+
callback:^(NSError *error, UIImage *image) {
|
|
1147
|
+
if (error) {
|
|
1148
|
+
[delegate URLRequest:requestToken didCompleteWithError:error];
|
|
1149
|
+
return;
|
|
1150
|
+
}
|
|
1151
|
+
|
|
1152
|
+
NSString *mimeType = nil;
|
|
1153
|
+
NSData *imageData = nil;
|
|
1154
|
+
if (RCTImageHasAlpha(image.CGImage)) {
|
|
1155
|
+
mimeType = @"image/png";
|
|
1156
|
+
imageData = UIImagePNGRepresentation(image);
|
|
1157
|
+
} else {
|
|
1158
|
+
mimeType = @"image/jpeg";
|
|
1159
|
+
imageData = UIImageJPEGRepresentation(image, 1.0);
|
|
1160
|
+
}
|
|
1161
|
+
|
|
1162
|
+
NSURLResponse *response = [[NSURLResponse alloc] initWithURL:request.URL
|
|
1163
|
+
MIMEType:mimeType
|
|
1164
|
+
expectedContentLength:imageData.length
|
|
1165
|
+
textEncodingName:nil];
|
|
1166
|
+
|
|
1167
|
+
[delegate URLRequest:requestToken didReceiveResponse:response];
|
|
1168
|
+
[delegate URLRequest:requestToken didReceiveData:imageData];
|
|
1169
|
+
[delegate URLRequest:requestToken didCompleteWithError:nil];
|
|
1170
|
+
}];
|
|
1171
|
+
|
|
1172
|
+
return requestToken;
|
|
1173
|
+
}
|
|
1174
|
+
|
|
1175
|
+
- (void)cancelRequest:(id)requestToken
|
|
1176
|
+
{
|
|
1177
|
+
if (requestToken) {
|
|
1178
|
+
((RCTImageLoaderCancellationBlock)requestToken)();
|
|
1179
|
+
}
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1182
|
+
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
|
|
1183
|
+
(const facebook::react::ObjCTurboModule::InitParams &)params
|
|
1184
|
+
{
|
|
1185
|
+
return std::make_shared<facebook::react::NativeImageLoaderIOSSpecJSI>(params);
|
|
1186
|
+
}
|
|
1187
|
+
|
|
1188
|
+
RCT_EXPORT_METHOD(getSize
|
|
1189
|
+
: (NSString *)uri resolve
|
|
1190
|
+
: (RCTPromiseResolveBlock)resolve reject
|
|
1191
|
+
: (RCTPromiseRejectBlock)reject)
|
|
1192
|
+
{
|
|
1193
|
+
NSURLRequest *request = [RCTConvert NSURLRequest:uri];
|
|
1194
|
+
[self getImageSizeForURLRequest:request
|
|
1195
|
+
block:^(NSError *error, CGSize size) {
|
|
1196
|
+
if (error) {
|
|
1197
|
+
reject(
|
|
1198
|
+
@"E_GET_SIZE_FAILURE",
|
|
1199
|
+
[NSString stringWithFormat:@"Failed to getSize of %@", uri],
|
|
1200
|
+
error);
|
|
1201
|
+
} else {
|
|
1202
|
+
resolve(@[ @(size.width), @(size.height) ]);
|
|
1203
|
+
}
|
|
1204
|
+
}];
|
|
1205
|
+
}
|
|
1206
|
+
|
|
1207
|
+
RCT_EXPORT_METHOD(getSizeWithHeaders
|
|
1208
|
+
: (NSString *)uri headers
|
|
1209
|
+
: (NSDictionary *)headers resolve
|
|
1210
|
+
: (RCTPromiseResolveBlock)resolve reject
|
|
1211
|
+
: (RCTPromiseRejectBlock)reject)
|
|
1212
|
+
{
|
|
1213
|
+
NSURL *URL = [RCTConvert NSURL:uri];
|
|
1214
|
+
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
|
|
1215
|
+
[headers enumerateKeysAndObjectsUsingBlock:^(NSString *key, id value, BOOL *stop) {
|
|
1216
|
+
[request addValue:[RCTConvert NSString:value] forHTTPHeaderField:key];
|
|
1217
|
+
}];
|
|
1218
|
+
[self getImageSizeForURLRequest:request
|
|
1219
|
+
block:^(NSError *error, CGSize size) {
|
|
1220
|
+
if (error) {
|
|
1221
|
+
reject(@"E_GET_SIZE_FAILURE", nil, error);
|
|
1222
|
+
return;
|
|
1223
|
+
}
|
|
1224
|
+
resolve(@{@"width" : @(size.width), @"height" : @(size.height)});
|
|
1225
|
+
}];
|
|
1226
|
+
}
|
|
1227
|
+
|
|
1228
|
+
RCT_EXPORT_METHOD(prefetchImage
|
|
1229
|
+
: (NSString *)uri resolve
|
|
1230
|
+
: (RCTPromiseResolveBlock)resolve reject
|
|
1231
|
+
: (RCTPromiseRejectBlock)reject)
|
|
1232
|
+
{
|
|
1233
|
+
[self prefetchImageWithMetadata:uri queryRootName:nil rootTag:0 resolve:resolve reject:reject];
|
|
1234
|
+
}
|
|
1235
|
+
|
|
1236
|
+
RCT_EXPORT_METHOD(prefetchImageWithMetadata
|
|
1237
|
+
: (NSString *)uri queryRootName
|
|
1238
|
+
: (NSString *)queryRootName rootTag
|
|
1239
|
+
: (double)rootTag resolve
|
|
1240
|
+
: (RCTPromiseResolveBlock)resolve reject
|
|
1241
|
+
: (RCTPromiseRejectBlock)reject)
|
|
1242
|
+
{
|
|
1243
|
+
NSURLRequest *request = [RCTConvert NSURLRequest:uri];
|
|
1244
|
+
[self loadImageWithURLRequest:request
|
|
1245
|
+
size:CGSizeZero
|
|
1246
|
+
scale:1
|
|
1247
|
+
clipped:YES
|
|
1248
|
+
resizeMode:RCTResizeModeStretch
|
|
1249
|
+
priority:RCTImageLoaderPriorityPrefetch
|
|
1250
|
+
attribution:{
|
|
1251
|
+
.queryRootName = queryRootName ? [queryRootName UTF8String] : "",
|
|
1252
|
+
.surfaceId = (int)rootTag,
|
|
1253
|
+
}
|
|
1254
|
+
progressBlock:nil
|
|
1255
|
+
partialLoadBlock:nil
|
|
1256
|
+
completionBlock:^(NSError *error, UIImage *image, id completionMetadata) {
|
|
1257
|
+
if (error) {
|
|
1258
|
+
reject(@"E_PREFETCH_FAILURE", nil, error);
|
|
1259
|
+
return;
|
|
1260
|
+
}
|
|
1261
|
+
resolve(@YES);
|
|
1262
|
+
}];
|
|
1263
|
+
}
|
|
1264
|
+
|
|
1265
|
+
RCT_EXPORT_METHOD(queryCache
|
|
1266
|
+
: (NSArray *)uris resolve
|
|
1267
|
+
: (RCTPromiseResolveBlock)resolve reject
|
|
1268
|
+
: (RCTPromiseRejectBlock)reject)
|
|
1269
|
+
{
|
|
1270
|
+
resolve([self getImageCacheStatus:uris]);
|
|
1271
|
+
}
|
|
1272
|
+
@end
|
|
1273
|
+
|
|
1274
|
+
/**
|
|
1275
|
+
* DEPRECATED!! DO NOT USE
|
|
1276
|
+
* Instead use `[_bridge moduleForClass:[RCTImageLoader class]]`
|
|
1277
|
+
*/
|
|
1278
|
+
@implementation RCTBridge (RCTImageLoader)
|
|
1279
|
+
|
|
1280
|
+
- (RCTImageLoader *)imageLoader
|
|
1281
|
+
{
|
|
1282
|
+
RCTLogWarn(
|
|
1283
|
+
@"Calling bridge.imageLoader is deprecated and will not work in newer versions of RN. Please update to the "
|
|
1284
|
+
"moduleForClass API or turboModuleRegistry API.");
|
|
1285
|
+
return [self moduleForClass:[RCTImageLoader class]];
|
|
1286
|
+
}
|
|
1287
|
+
|
|
1288
|
+
@end
|
|
1289
|
+
|
|
1290
|
+
@implementation RCTBridgeProxy (RCTImageLoader)
|
|
1291
|
+
|
|
1292
|
+
- (RCTImageLoader *)imageLoader
|
|
1293
|
+
{
|
|
1294
|
+
return [self moduleForClass:[RCTImageLoader class]];
|
|
1295
|
+
}
|
|
1296
|
+
|
|
1297
|
+
@end
|
|
1298
|
+
|
|
1299
|
+
Class RCTImageLoaderCls(void)
|
|
1300
|
+
{
|
|
1301
|
+
return RCTImageLoader.class;
|
|
1302
|
+
}
|