diff --git a/packages/eslint-plugin-react-native/no-deep-imports.js b/packages/eslint-plugin-react-native/no-deep-imports.js index 1a682374c6be..50639ee29035 100644 --- a/packages/eslint-plugin-react-native/no-deep-imports.js +++ b/packages/eslint-plugin-react-native/no-deep-imports.js @@ -202,7 +202,8 @@ module.exports = { return ( source.value === 'react-native/asset-registry' || source.value === 'react-native/react-private-interface' || - source.value === 'react-native/setup-env' + source.value === 'react-native/setup-env' || + source.value === 'react-native/unstable-internals-do-not-use' ); } diff --git a/packages/eslint-plugin-react-native/utils.js b/packages/eslint-plugin-react-native/utils.js index 851592232ed0..be51ad8d14cf 100644 --- a/packages/eslint-plugin-react-native/utils.js +++ b/packages/eslint-plugin-react-native/utils.js @@ -15,95 +15,129 @@ * The assumption is that renaming/removing components shouldn't happen too often. * If a new component is added, it should be imported from the root. * If the path is not matched, the auto-fix won't be suggested. + * + * Mirrors the public API surface declared in `index.js.flow`, plus the re-export + * aliases below. + * + * `index.js.flow` names exactly one source module per export, but several modules + * re-export the same symbol and call sites import from whichever is closest to hand + * (e.g. `EventSubscription` is published from `vendor/emitter/EventEmitter` yet also + * re-exported by `EventEmitter/NativeEventEmitter`). Those aliases are listed + * explicitly so the rule keeps offering a fix for them. + * + * Two groups of exports are left out on purpose, so the deep import is still + * reported but no auto-fix is offered: + * - renamed re-exports (`NativeText as unstable_NativeText`) and namespace + * re-exports (`export * as Systrace`), which the fixer cannot express; + * - names published under an `unstable_` or `experimental_` prefix, since + * auto-fixing a call site onto an experimental API is not a decision a lint + * fixer should make on the author's behalf. */ const publicAPIMapping = { + 'Libraries/ActionSheetIOS/ActionSheetIOS': { + default: 'ActionSheetIOS', + types: [ + 'ActionSheetIOSOptions', + 'ShareActionSheetError', + 'ShareActionSheetIOSOptions', + ], + }, + 'Libraries/Alert/Alert': { + default: 'Alert', + types: ['AlertButton', 'AlertButtonStyle', 'AlertOptions', 'AlertType'], + }, + 'Libraries/Animated/Animated': { + default: 'Animated', + types: null, + }, + 'Libraries/Animated/Easing': { + default: 'Easing', + types: ['EasingFunction'], + }, + 'Libraries/Animated/useAnimatedColor': { + default: 'useAnimatedColor', + types: null, + }, + 'Libraries/Animated/useAnimatedValue': { + default: 'useAnimatedValue', + types: null, + }, + 'Libraries/Animated/useAnimatedValueXY': { + default: 'useAnimatedValueXY', + types: null, + }, + 'Libraries/AppState/AppState': { + default: 'AppState', + types: ['AppStateEvent', 'AppStateStatus'], + }, + 'Libraries/BatchedBridge/NativeModules': { + default: 'NativeModules', + types: null, + }, 'Libraries/Components/AccessibilityInfo/AccessibilityInfo': { default: 'AccessibilityInfo', types: null, }, 'Libraries/Components/ActivityIndicator/ActivityIndicator': { default: 'ActivityIndicator', - types: ['ActivityIndicatorProps'], + types: ['ActivityIndicatorInstance', 'ActivityIndicatorProps'], }, 'Libraries/Components/Button': { default: 'Button', - types: ['ButtonProps'], + types: ['ButtonInstance', 'ButtonProps'], + }, + 'Libraries/Components/Clipboard/Clipboard': { + default: 'Clipboard', + types: null, }, 'Libraries/Components/DrawerAndroid/DrawerLayoutAndroid': { default: 'DrawerLayoutAndroid', - types: ['DrawerLayoutAndroidProps', 'DrawerSlideEvent'], - }, - 'Libraries/Components/LayoutConformance/LayoutConformance': { - default: 'experimental_LayoutConformance', - types: ['LayoutConformanceProps'], - }, - 'Libraries/Core/InitializeCore': { - // `InitializeCore` has no public named export; the deep import must be - // swapped for the `react-native/setup-env` entry point entirely. - default: null, types: null, - replacementSource: 'react-native/setup-env', }, - 'Libraries/Lists/FlatList': { - default: 'FlatList', - types: ['FlatListProps'], - }, - 'Libraries/Image/Image': { - default: 'Image', + 'Libraries/Components/DrawerAndroid/DrawerLayoutAndroidTypes': { + default: null, types: [ - 'ImageBackgroundProps', - 'ImageErrorEvent', - 'ImageLoadEvent', - 'ImageProgressEventIOS', - 'ImageProps', - 'ImagePropsAndroid', - 'ImagePropsBase', - 'ImagePropsIOS', - 'ImageResolvedAssetSource', - 'ImageSize', - 'ImageSourcePropType', + 'DrawerLayoutAndroidInstance', + 'DrawerLayoutAndroidProps', + 'DrawerSlideEvent', ], }, - 'Libraries/Image/ImageSource': { - default: null, - types: ['ImageRequireSource', 'ImageSource', 'ImageURISource'], - }, - 'Libraries/Image/ImageBackground': { - default: 'ImageBackground', - types: null, - }, - 'Libraries/Components/TextInput/InputAccessoryView': { - default: 'InputAccessoryView', - types: ['InputAccessoryViewProps'], + 'Libraries/Components/Keyboard/Keyboard': { + default: 'Keyboard', + types: [ + 'AndroidKeyboardEvent', + 'IOSKeyboardEvent', + 'KeyboardEvent', + 'KeyboardEventEasing', + 'KeyboardEventName', + 'KeyboardMetrics', + ], }, 'Libraries/Components/Keyboard/KeyboardAvoidingView': { default: 'KeyboardAvoidingView', - types: ['KeyboardAvoidingViewProps'], + types: ['KeyboardAvoidingViewInstance', 'KeyboardAvoidingViewProps'], }, - 'Libraries/Modal/Modal': { - default: 'Modal', - types: [ - 'ModalBaseProps', - 'ModalProps', - 'ModalPropsAndroid', - 'ModalPropsIOS', - ], + 'Libraries/Components/LayoutConformance/LayoutConformance': { + default: null, + types: ['LayoutConformanceProps'], }, 'Libraries/Components/Pressable/Pressable': { default: 'Pressable', types: [ 'PressableAndroidRippleConfig', + 'PressableInstance', 'PressableProps', 'PressableStateCallbackType', ], }, 'Libraries/Components/ProgressBarAndroid/ProgressBarAndroid': { default: 'ProgressBarAndroid', - types: ['ProgressBarAndroidProps'], + types: ['ProgressBarAndroidInstance', 'ProgressBarAndroidProps'], }, 'Libraries/Components/RefreshControl/RefreshControl': { default: 'RefreshControl', types: [ + 'RefreshControlInstance', 'RefreshControlProps', 'RefreshControlPropsAndroid', 'RefreshControlPropsIOS', @@ -111,77 +145,78 @@ const publicAPIMapping = { }, 'Libraries/Components/SafeAreaView/SafeAreaView': { default: 'SafeAreaView', - types: null, + types: ['SafeAreaViewInstance'], }, 'Libraries/Components/ScrollView/ScrollView': { default: 'ScrollView', types: [ 'ScrollResponderType', + 'ScrollViewImperativeMethods', + 'ScrollViewInstance', 'ScrollViewProps', 'ScrollViewPropsAndroid', 'ScrollViewPropsIOS', - 'ScrollViewImperativeMethods', 'ScrollViewScrollToOptions', ], }, - 'Libraries/Lists/SectionList': { - default: 'SectionList', - types: [ - 'SectionListProps', - 'SectionListRenderItem', - 'SectionListRenderItemInfo', - 'SectionListData', - ], - }, 'Libraries/Components/StatusBar/StatusBar': { default: 'StatusBar', - types: ['StatusBarAnimation', 'StatusBarProps', 'StatusBarStyle'], + types: [ + 'StatusBarAnimation', + 'StatusBarInstance', + 'StatusBarProps', + 'StatusBarStyle', + ], }, 'Libraries/Components/Switch/Switch': { default: 'Switch', - types: ['SwitchChangeEvent', 'SwitchProps'], + types: ['SwitchChangeEvent', 'SwitchInstance', 'SwitchProps'], }, - 'Libraries/Text/Text': { - default: 'Text', - types: ['TextProps'], + 'Libraries/Components/TextInput/InputAccessoryView': { + default: 'InputAccessoryView', + types: ['InputAccessoryViewProps'], }, 'Libraries/Components/TextInput/TextInput': { default: 'TextInput', types: [ 'AutoCapitalize', + 'BlurEvent', 'EnterKeyHintTypeOptions', - 'KeyboardTypeOptions', + 'FocusEvent', 'InputModeOptions', + 'KeyboardTypeOptions', + 'ReturnKeyTypeOptions', + 'SubmitBehavior', 'TextContentType', 'TextInputAndroidProps', - 'TextInputIOSProps', - 'TextInputProps', + 'TextInputBlurEvent', 'TextInputChangeEvent', 'TextInputContentSizeChangeEvent', 'TextInputEndEditingEvent', 'TextInputFocusEvent', + 'TextInputIOSProps', + 'TextInputInstance', 'TextInputKeyPressEvent', + 'TextInputProps', 'TextInputSelectionChangeEvent', 'TextInputSubmitEditingEvent', - 'ReturnKeyTypeOptions', - 'SubmitBehavior', ], }, - 'Libraries/Components/Touchable/Touchable': { - default: 'Touchable', + 'Libraries/Components/ToastAndroid/ToastAndroid': { + default: 'ToastAndroid', types: null, }, 'Libraries/Components/Touchable/TouchableHighlight': { default: 'TouchableHighlight', - types: ['TouchableHighlightProps'], + types: ['TouchableHighlightInstance', 'TouchableHighlightProps'], }, 'Libraries/Components/Touchable/TouchableNativeFeedback': { default: 'TouchableNativeFeedback', - types: ['TouchableNativeFeedbackProps'], + types: ['TouchableNativeFeedbackInstance', 'TouchableNativeFeedbackProps'], }, 'Libraries/Components/Touchable/TouchableOpacity': { default: 'TouchableOpacity', - types: ['TouchableOpacityProps'], + types: ['TouchableOpacityInstance', 'TouchableOpacityProps'], }, 'Libraries/Components/Touchable/TouchableWithoutFeedback': { default: 'TouchableWithoutFeedback', @@ -189,12 +224,13 @@ const publicAPIMapping = { }, 'Libraries/Components/View/View': { default: 'View', - types: null, + types: ['ViewInstance'], }, 'Libraries/Components/View/ViewAccessibility': { default: null, types: [ 'AccessibilityActionEvent', + 'AccessibilityActionInfo', 'AccessibilityProps', 'AccessibilityRole', 'AccessibilityState', @@ -202,6 +238,10 @@ const publicAPIMapping = { 'Role', ], }, + 'Libraries/Components/View/ViewNativeComponent': { + default: null, + types: null, + }, 'Libraries/Components/View/ViewPropTypes': { default: null, types: [ @@ -212,107 +252,75 @@ const publicAPIMapping = { 'ViewPropsIOS', ], }, - 'Libraries/Lists/VirtualizedList': { - default: 'VirtualizedList', - types: [ - 'ListRenderItemInfo', - 'ListRenderItem', - 'Separators', - 'VirtualizedListProps', - ], - }, - 'Libraries/Lists/VirtualizedSectionList': { - default: 'VirtualizedSectionList', - types: [ - 'ScrollToLocationParamsType', - 'SectionBase', - 'VirtualizedSectionListProps', - ], - }, - 'Libraries/ActionSheetIOS/ActionSheetIOS': { - default: 'ActionSheetIOS', - types: [ - 'ActionSheetIOSOptions', - 'ShareActionSheetIOSOptions', - 'ShareActionSheetError', - ], - }, - 'Libraries/Alert/Alert': { - default: 'Alert', - types: ['AlertType', 'AlertButtonStyle', 'AlertButton', 'AlertOptions'], + 'Libraries/Core/InitializeCore': { + // `InitializeCore` has no public named export; the deep import must be + // swapped for the `react-native/setup-env` entry point entirely. + default: null, + types: null, + replacementSource: 'react-native/setup-env', }, - 'Libraries/Animated/Animated': { - default: 'Animated', + 'Libraries/Core/ReactNativeVersion': { + default: 'ReactNativeVersion', types: null, }, - 'Libraries/Utilities/Appearance': { - default: 'Appearance', + 'Libraries/Core/registerCallableModule': { + default: 'registerCallableModule', types: null, }, - 'Libraries/ReactNative/AppRegistry': { - default: 'AppRegistry', + 'Libraries/EventEmitter/NativeEventEmitter': { + default: 'NativeEventEmitter', types: [ - 'TaskProvider', - 'ComponentProvider', - 'ComponentProviderInstrumentationHook', - 'AppConfig', - 'Runnable', - 'Runnables', - 'Registry', - 'WrapperComponentProvider', - 'RootViewStyleProvider', + 'EmitterSubscription', + 'EventSubscription', + 'NativeEventSubscription', ], }, - 'Libraries/AppState/AppState': { - default: 'AppState', - types: ['AppStateStatus', 'AppStateEvent'], - }, - 'Libraries/Utilities/BackHandler': { - default: 'BackHandler', - types: ['BackPressEventName'], - }, - 'Libraries/Components/Clipboard/Clipboard': { - default: 'Clipboard', - types: null, - }, - 'Libraries/Utilities/DeviceInfo': { - default: 'DeviceInfo', - types: ['DeviceInfoConstants'], - }, - 'src/private/devsupport/devmenu/DevMenu': { - default: 'DevMenu', + 'Libraries/EventEmitter/RCTDeviceEventEmitter': { + default: 'DeviceEventEmitter', types: null, }, - 'Libraries/Utilities/DevSettings': { - default: 'DevSettings', + 'Libraries/EventEmitter/RCTNativeAppEventEmitter': { + default: 'NativeAppEventEmitter', types: null, }, - 'Libraries/Utilities/Dimensions': { - default: 'Dimensions', + 'Libraries/Image/Image': { + default: 'Image', types: [ - 'DimensionsPayload', - 'DisplayMetrics', - 'DisplayMetricsAndroid', - 'ScaledSize', + 'ImageBackgroundProps', + 'ImageErrorEvent', + 'ImageLoadEvent', + 'ImageProgressEventIOS', + 'ImageProps', + 'ImagePropsAndroid', + 'ImagePropsBase', + 'ImagePropsIOS', + 'ImageResolvedAssetSource', + 'ImageSize', + 'ImageSourcePropType', ], }, - 'Libraries/Animated/Easing': { - default: 'Easing', - types: ['EasingFunction'], + 'Libraries/Image/ImageBackground': { + default: 'ImageBackground', + types: ['ImageBackgroundInstance', 'ImageBackgroundProps'], }, - 'Libraries/ReactNative/I18nManager': { - default: 'I18nManager', - types: null, + 'Libraries/Image/ImageResizeMode': { + default: null, + types: ['ImageResizeMode'], }, - 'Libraries/Components/Keyboard/Keyboard': { - default: 'Keyboard', + 'Libraries/Image/ImageSource': { + default: null, + types: ['ImageRequireSource', 'ImageSource', 'ImageURISource'], + }, + 'Libraries/Image/ImageTypes.flow': { + default: null, + types: ['ImageInstance', 'ImageProps'], + }, + 'Libraries/Interaction/PanResponder': { + default: 'PanResponder', types: [ - 'AndroidKeyboardEvent', - 'IOSKeyboardEvent', - 'KeyboardEvent', - 'KeyboardEventEasing', - 'KeyboardEventName', - 'KeyboardMetrics', + 'PanResponderCallbacks', + 'PanResponderGestureState', + 'PanResponderInstance', ], }, 'Libraries/LayoutAnimation/LayoutAnimation': { @@ -330,42 +338,114 @@ const publicAPIMapping = { default: 'Linking', types: null, }, + 'Libraries/Lists/FlatList': { + default: 'FlatList', + types: ['FlatListInstance', 'FlatListProps'], + }, + 'Libraries/Lists/SectionList': { + default: 'SectionList', + types: [ + 'SectionBase', + 'SectionListData', + 'SectionListInstance', + 'SectionListProps', + 'SectionListRenderItem', + 'SectionListRenderItemInfo', + ], + }, + 'Libraries/Lists/VirtualizedList': { + default: 'VirtualizedList', + types: [ + 'ListRenderItem', + 'ListRenderItemInfo', + 'ListViewToken', + 'Separators', + 'VirtualizedListInstance', + 'VirtualizedListProps', + ], + }, + 'Libraries/Lists/VirtualizedSectionList': { + default: 'VirtualizedSectionList', + types: [ + 'ScrollToLocationParamsType', + 'SectionBase', + 'VirtualizedSectionListInstance', + 'VirtualizedSectionListProps', + ], + }, 'Libraries/LogBox/LogBox': { default: 'LogBox', types: ['ExtendedExceptionData', 'IgnorePattern', 'LogData'], }, - 'Libraries/EventEmitter/NativeEventEmitter': { - default: 'NativeEventEmitter', + 'Libraries/Modal/Modal': { + default: 'Modal', types: [ - 'EventSubscription', - 'EmitterSubscription', - 'NativeEventSubscription', + 'ModalBaseProps', + 'ModalInstance', + 'ModalProps', + 'ModalPropsAndroid', + 'ModalPropsIOS', ], }, 'Libraries/Network/RCTNetworking': { default: 'Networking', types: null, }, - 'Libraries/Interaction/PanResponder': { - default: 'PanResponder', - types: [ - 'PanResponderCallbacks', - 'PanResponderGestureState', - 'PanResponderInstance', - ], - }, 'Libraries/PermissionsAndroid/PermissionsAndroid': { default: 'PermissionsAndroid', types: ['Permission', 'PermissionStatus', 'Rationale'], }, - 'Libraries/Utilities/PixelRatio': { - default: 'PixelRatio', + 'Libraries/Pressability/Pressability': { + default: null, + types: ['PressabilityConfig'], + }, + 'Libraries/Pressability/usePressability': { + default: 'usePressability', types: null, }, 'Libraries/PushNotificationIOS/PushNotificationIOS': { default: 'PushNotificationIOS', types: ['PushNotificationEventName', 'PushNotificationPermissions'], }, + 'Libraries/ReactNative/AppRegistry': { + default: null, + types: [ + 'AppConfig', + 'AppRegistry', + 'ComponentProvider', + 'ComponentProviderInstrumentationHook', + 'Registry', + 'RootViewStyleProvider', + 'Runnable', + 'Runnables', + 'TaskProvider', + 'WrapperComponentProvider', + ], + }, + 'Libraries/ReactNative/I18nManager': { + default: 'I18nManager', + types: null, + }, + 'Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance': { + default: null, + types: ['PublicRootInstance', 'PublicTextInstance'], + }, + 'Libraries/ReactNative/RendererProxy': { + default: null, + types: ['findNodeHandle'], + }, + 'Libraries/ReactNative/RootTag': { + default: null, + types: ['RootTag', 'RootTagContext'], + }, + 'Libraries/ReactNative/UIManager': { + default: 'UIManager', + types: null, + }, + 'Libraries/ReactNative/requireNativeComponent': { + default: 'requireNativeComponent', + types: null, + }, 'Libraries/Settings/Settings': { default: 'Settings', types: null, @@ -374,13 +454,30 @@ const publicAPIMapping = { default: 'Share', types: ['ShareAction', 'ShareContent', 'ShareOptions'], }, + 'Libraries/StyleSheet/EdgeInsetsPropType': { + default: null, + types: ['EdgeInsetsProp'], + }, + 'Libraries/StyleSheet/PlatformColorValueTypes': { + default: null, + types: ['PlatformColor'], + }, + 'Libraries/StyleSheet/PlatformColorValueTypesIOS': { + default: null, + types: ['DynamicColorIOS', 'DynamicColorIOSTuple'], + }, + 'Libraries/StyleSheet/Rect': { + default: null, + types: ['Insets'], + }, 'Libraries/StyleSheet/StyleSheet': { default: 'StyleSheet', types: [ + 'BoxShadowValue', 'ColorValue', - 'ImageStyle', 'FilterFunction', 'FontVariant', + 'ImageStyle', 'NativeColorValue', 'OpaqueColorValue', 'StyleProp', @@ -397,128 +494,186 @@ const publicAPIMapping = { 'DimensionValue', 'DropShadowValue', 'EdgeInsetsValue', + 'FilterFunction', + 'NativeColorValue', 'PointValue', ], }, - 'Libraries/StyleSheet/Rect': { + 'Libraries/StyleSheet/processColor': { + default: 'processColor', + types: ['ProcessedColorValue'], + }, + 'Libraries/Text/Text': { + default: 'Text', + types: ['TextInstance', 'TextProps'], + }, + 'Libraries/Text/TextAncestorContext': { default: null, - types: ['Insets'], + types: null, }, - 'Libraries/Performance/Systrace': { - default: 'Systrace', + 'Libraries/Text/TextNativeComponent': { + default: null, types: null, }, - 'Libraries/Components/ToastAndroid/ToastAndroid': { - default: 'ToastAndroid', + 'Libraries/Text/TextProps': { + default: null, + types: ['TextProps'], + }, + 'Libraries/TurboModule/RCTExport': { + default: null, + types: ['RootTag', 'TurboModule'], + }, + 'Libraries/Types/CoreEventTypes': { + default: null, + types: [ + 'BlurEvent', + 'FocusEvent', + 'GestureResponderEvent', + 'KeyDownEvent', + 'KeyEvent', + 'KeyUpEvent', + 'LayoutChangeEvent', + 'LayoutRectangle', + 'MouseEvent', + 'NativeMouseEvent', + 'NativePointerEvent', + 'NativeScrollEvent', + 'NativeSyntheticEvent', + 'NativeTouchEvent', + 'NativeUIEvent', + 'PointerEvent', + 'ResponderSyntheticEvent', + 'ScrollEvent', + 'TargetedEvent', + 'TextLayoutEvent', + ], + }, + 'Libraries/Types/RootTagTypes': { + default: null, + types: ['RootTag'], + }, + 'Libraries/UTFSequence': { + default: 'UTFSequence', types: null, }, - 'Libraries/TurboModule/TurboModuleRegistry': { - default: 'TurboModuleRegistry', + 'Libraries/Utilities/BackHandler': { + default: 'BackHandler', + types: ['BackPressEventName'], + }, + 'Libraries/Utilities/DevSettings': { + default: 'DevSettings', types: null, }, - 'Libraries/TurboModule/RCTExport': { + 'Libraries/Utilities/DeviceInfo': { + default: 'DeviceInfo', + types: ['DeviceInfoConstants'], + }, + 'Libraries/Utilities/Dimensions': { + default: 'Dimensions', + types: [ + 'DimensionsPayload', + 'DisplayMetrics', + 'DisplayMetricsAndroid', + 'ScaledSize', + ], + }, + 'Libraries/Utilities/PixelRatio': { + default: 'PixelRatio', + types: null, + }, + 'Libraries/Utilities/Platform': { + default: 'Platform', + types: null, + }, + 'Libraries/Utilities/PlatformTypes': { default: null, - types: ['TurboModule'], + types: ['PlatformOSType', 'PlatformSelectSpec'], }, - 'Libraries/ReactNative/UIManager': { - default: 'UIManager', + 'Libraries/Utilities/codegenNativeCommands': { + default: 'codegenNativeCommands', types: null, }, - 'Libraries/Animated/useAnimatedValue': { - default: 'useAnimatedValue', + 'Libraries/Utilities/codegenNativeComponent': { + default: 'codegenNativeComponent', types: null, }, 'Libraries/Utilities/useColorScheme': { default: 'useColorScheme', types: null, }, - 'src/private/specs_DEPRECATED/modules/NativeAppearance': { - default: null, - types: ['ColorSchemeName'], - }, 'Libraries/Utilities/useWindowDimensions': { default: 'useWindowDimensions', types: null, }, - 'Libraries/UTFSequence': { - default: 'UTFSequence', - types: null, - }, 'Libraries/Vibration/Vibration': { default: 'Vibration', types: null, }, - 'Libraries/Utilities/codegenNativeComponent': { - default: 'codegenNativeComponent', - types: null, + 'Libraries/vendor/core/ErrorUtils': { + default: null, + types: ['ErrorUtils'], }, - 'Libraries/Utilities/codegenNativeCommands': { - default: 'codegenNativeCommands', - types: null, + 'Libraries/vendor/emitter/EventEmitter': { + default: 'EventEmitter', + types: ['EventSubscription', 'IEventEmitter'], }, - 'Libraries/EventEmitter/RCTDeviceEventEmitter': { - default: 'DeviceEventEmitter', + 'src/private/assets/AssetRegistry': { + default: null, + types: ['AssetDestPathResolver', 'AssetRegistry', 'PackagerAsset'], + }, + 'src/private/components/virtualcollection/FlingConstants': { + default: null, types: null, }, - 'Libraries/StyleSheet/PlatformColorValueTypesIOS': { - default: 'DynamicColorIOS', - types: ['DynamicColorIOSTuple'], + 'src/private/components/virtualcollection/Virtual': { + default: null, + types: null, }, - 'Libraries/EventEmitter/RCTNativeAppEventEmitter': { - default: 'NativeAppEventEmitter', + 'src/private/components/virtualcollection/VirtualCollectionView': { + default: null, types: null, }, - 'Libraries/BatchedBridge/NativeModules': { - default: 'NativeModules', + 'src/private/components/virtualcollection/column/VirtualColumn': { + default: null, types: null, }, - 'Libraries/Utilities/Platform': { - default: 'Platform', + 'src/private/components/virtualcollection/column/VirtualColumnGenerator': { + default: null, types: null, }, - './Libraries/Utilities/PlatformTypes': { + 'src/private/components/virtualcollection/dom/getScrollParent': { default: null, - types: ['PlatformOSType', 'PlatformSelectSpec'], + types: null, }, - 'Libraries/StyleSheet/PlatformColorValueTypes': { - default: 'PlatformColor', + 'src/private/components/virtualcollection/row/VirtualRow': { + default: null, types: null, }, - 'Libraries/StyleSheet/processColor': { - default: 'processColor', - types: ['ProcessedColorValue'], + 'src/private/components/virtualview/VirtualView': { + default: null, + types: ['ModeChangeEvent', 'VirtualViewMode'], }, - 'Libraries/ReactNative/requireNativeComponent': { - default: 'requireNativeComponent', + 'src/private/devsupport/devmenu/DevMenu': { + default: 'DevMenu', types: null, }, - 'Libraries/ReactNative/RootTag': { - default: 'RootTagContext', - types: ['RootTag'], + 'src/private/specs_DEPRECATED/modules/NativeAppearance': { + default: null, + types: ['ColorSchemeName'], }, - 'Libraries/Types/RootTagTypes': { + 'src/private/types/HostComponent': { default: null, - types: ['RootTag'], + types: ['HostComponent'], }, 'src/private/types/HostInstance': { default: null, types: [ 'HostInstance', - 'NativeMethods', - 'NativeMethodsMixin', 'MeasureInWindowOnSuccessCallback', 'MeasureLayoutOnSuccessCallback', 'MeasureOnSuccessCallback', ], }, - 'src/private/types/HostComponent': { - default: null, - types: ['HostComponent'], - }, - 'Libraries/vendor/core/ErrorUtils': { - default: null, - types: ['ErrorUtils'], - }, }; module.exports = { diff --git a/packages/react-native/ReactNativeApi.d.ts b/packages/react-native/ReactNativeApi.d.ts index 429f8506e441..bcdc17c90d99 100644 --- a/packages/react-native/ReactNativeApi.d.ts +++ b/packages/react-native/ReactNativeApi.d.ts @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<739253e7b90afea5959c264e1ac3d91a>> * * This file was generated by scripts/js-api/build-types/index.js. */ @@ -5771,7 +5771,7 @@ export { AlertOptions, // 8a116d2a AlertType, // 5ab91217 AndroidKeyboardEvent, // e03becc8 - Animated, // cc4e6915 + Animated, // c2791b45 AppConfig, // 35c0ca70 AppRegistry, // 8ea6b37b AppState, // 12012be5 @@ -5823,9 +5823,9 @@ export { EventSubscription, // b8d084aa ExtendedExceptionData, // 5a6ccf5a FilterFunction, // bf24c0e3 - FlatList, // 069ce0a2 - FlatListInstance, // a905475e - FlatListProps, // df62164f + FlatList, // ce8451f1 + FlatListInstance, // 9e0c1443 + FlatListProps, // 19fa3c9e FocusEvent, // 850f1517 FontVariant, // 7c7558bb GestureResponderEvent, // 14d3e77a @@ -5974,10 +5974,10 @@ export { ScrollViewPropsIOS, // 807cb4f6 ScrollViewScrollToOptions, // 3313411e SectionBase, // 9f13db00 - SectionList, // 399fa87a + SectionList, // 7598284f SectionListData, // 1a4de01a - SectionListInstance, // 286b4240 - SectionListProps, // df63f051 + SectionListInstance, // 6fd92b7f + SectionListProps, // c467eaa7 SectionListRenderItem, // 715b2086 SectionListRenderItemInfo, // 4a48a922 Separators, // 6a45f7e3 @@ -6047,13 +6047,15 @@ export { ViewPropsAndroid, // 55e81851 ViewPropsIOS, // 58ee19bf ViewStyle, // e75eec1e + ViewabilityConfig, // eb3f7ed8 + ViewabilityConfigCallbackPair, // bdd0788c VirtualViewMode, // 6be59722 VirtualizedList, // 68c7345e VirtualizedListInstance, // 423ee7c0 - VirtualizedListProps, // ce23f0a3 + VirtualizedListProps, // 92e5c586 VirtualizedSectionList, // 9fd9cd61 VirtualizedSectionListInstance, // 12b706d5 - VirtualizedSectionListProps, // 14220470 + VirtualizedSectionListProps, // f7e337d7 WrapperComponentProvider, // 9b4247f6 codegenNativeCommands, // 322f3f4e codegenNativeComponent, // 520daa94 diff --git a/packages/react-native/index.js.flow b/packages/react-native/index.js.flow index c6895832c4f6..26bdee2353d7 100644 --- a/packages/react-native/index.js.flow +++ b/packages/react-native/index.js.flow @@ -226,6 +226,11 @@ export type { export type {VirtualizedListInstance} from './Libraries/Lists/VirtualizedList'; export {default as VirtualizedList} from './Libraries/Lists/VirtualizedList'; +export type { + ViewabilityConfig, + ViewabilityConfigCallbackPair, +} from './Libraries/Lists/ViewabilityHelper'; + export type { ScrollToLocationParamsType, SectionBase, diff --git a/packages/react-native/src/unstable-internals-do-not-use.js b/packages/react-native/src/unstable-internals-do-not-use.js index 20cb19edaec0..96c7b48e1ab0 100644 --- a/packages/react-native/src/unstable-internals-do-not-use.js +++ b/packages/react-native/src/unstable-internals-do-not-use.js @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @noflow + * @flow strict-local * @format */ @@ -36,40 +36,53 @@ // https://github.com/react-native-community/discussions-and-proposals/pull/985 // where we reviewed internal APIs used in the ecosystem. // -// IMPORTANT: Keep this file in sync with unstable-internals-do-not-use.d.ts. +// IMPORTANT: Keep this file in sync with unstable-internals-do-not-use.d.ts +// and unstable-internals-do-not-use.js.flow. // ---------------------------------------------------------------------------- +import typeof getDevServer from '../Libraries/Core/Devtools/getDevServer'; +import typeof NativeExceptionsManager from '../Libraries/Core/NativeExceptionsManager'; +import typeof AssetSourceResolver from '../Libraries/Image/AssetSourceResolver'; +import typeof NativeRedBox from '../Libraries/NativeModules/specs/NativeRedBox'; +import typeof NativeSourceCode from '../Libraries/NativeModules/specs/NativeSourceCode'; +import typeof {PressabilityDebugView} from '../Libraries/Pressability/PressabilityDebug'; +import typeof AppContainer from '../Libraries/ReactNative/AppContainer'; +import typeof {customDirectEventTypes} from '../Libraries/Renderer/shims/ReactNativeViewConfigRegistry'; +import typeof DevLoadingView from '../Libraries/Utilities/DevLoadingView'; +import typeof HMRClient from '../Libraries/Utilities/HMRClient'; + +// flowlint unsafe-getters-setters:off // eslint-disable-next-line @react-native/monorepo/no-commonjs-exports module.exports = { - get AppContainer() { + get AppContainer(): AppContainer { return require('../Libraries/ReactNative/AppContainer').default; }, - get AssetSourceResolver() { + get AssetSourceResolver(): AssetSourceResolver { return require('../Libraries/Image/AssetSourceResolver').default; }, - get customDirectEventTypes() { + get customDirectEventTypes(): customDirectEventTypes { return require('../Libraries/Renderer/shims/ReactNativeViewConfigRegistry') .customDirectEventTypes; }, - get DevLoadingView() { + get DevLoadingView(): DevLoadingView { return require('../Libraries/Utilities/DevLoadingView').default; }, - get getDevServer() { + get getDevServer(): getDevServer { return require('../Libraries/Core/Devtools/getDevServer').default; }, - get HMRClient() { + get HMRClient(): HMRClient { return require('../Libraries/Utilities/HMRClient').default; }, - get NativeExceptionsManager() { + get NativeExceptionsManager(): NativeExceptionsManager { return require('../Libraries/Core/NativeExceptionsManager').default; }, - get NativeRedBox() { + get NativeRedBox(): NativeRedBox { return require('../Libraries/NativeModules/specs/NativeRedBox').default; }, - get NativeSourceCode() { + get NativeSourceCode(): NativeSourceCode { return require('../Libraries/NativeModules/specs/NativeSourceCode').default; }, - get PressabilityDebugView() { + get PressabilityDebugView(): PressabilityDebugView { return require('../Libraries/Pressability/PressabilityDebug') .PressabilityDebugView; }, diff --git a/packages/react-native/src/unstable-internals-do-not-use.js.flow b/packages/react-native/src/unstable-internals-do-not-use.js.flow new file mode 100644 index 000000000000..b5f6ddec6a15 --- /dev/null +++ b/packages/react-native/src/unstable-internals-do-not-use.js.flow @@ -0,0 +1,26 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow strict-local + * @format + */ + +// ---------------------------------------------------------------------------- +// Types entry point for react-native/unstable-internals-do-not-use +// +// IMPORTANT: Keep this file in sync with unstable-internals-do-not-use.js. +// ---------------------------------------------------------------------------- + +export {default as AppContainer} from '../Libraries/ReactNative/AppContainer'; +export {default as AssetSourceResolver} from '../Libraries/Image/AssetSourceResolver'; +export {customDirectEventTypes} from '../Libraries/Renderer/shims/ReactNativeViewConfigRegistry'; +export {default as DevLoadingView} from '../Libraries/Utilities/DevLoadingView'; +export {default as getDevServer} from '../Libraries/Core/Devtools/getDevServer'; +export {default as HMRClient} from '../Libraries/Utilities/HMRClient'; +export {default as NativeExceptionsManager} from '../Libraries/Core/NativeExceptionsManager'; +export {default as NativeRedBox} from '../Libraries/NativeModules/specs/NativeRedBox'; +export {default as NativeSourceCode} from '../Libraries/NativeModules/specs/NativeSourceCode'; +export {PressabilityDebugView} from '../Libraries/Pressability/PressabilityDebug';