react-native
Version:
A framework for building native apps using React
400 lines (392 loc) • 14 kB
JavaScript
/**
* 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.
*
* @format
* @flow strict-local
*/
// flowlint unsafe-getters-setters:off
/* eslint-disable lint/no-commonjs-exports */
;
'use client';
// ----------------------------------------------------------------------------
// Runtime entry point for react-native.
//
// This module is separate from index.js.flow as it provides a more lenient
// `module.exports` API at runtime, for lazy module loading and backwards
// compatibility.
//
// IMPORTANT: Keep this file in sync with index.js.flow. Test your changes
// whenever updating React Native's public API.
// ----------------------------------------------------------------------------
import typeof * as ReactNativePublicAPI from './index.js.flow';
const warnOnce = require('./Libraries/Utilities/warnOnce').default;
const invariant = require('invariant');
module.exports = {
// #region Components
get ActivityIndicator() {
return require('./Libraries/Components/ActivityIndicator/ActivityIndicator')
.default;
},
get Button() {
return require('./Libraries/Components/Button').default;
},
get DrawerLayoutAndroid() {
return require('./Libraries/Components/DrawerAndroid/DrawerLayoutAndroid')
.default;
},
get FlatList() {
return require('./Libraries/Lists/FlatList').default;
},
get Image() {
return require('./Libraries/Image/Image').default;
},
get ImageBackground() {
return require('./Libraries/Image/ImageBackground').default;
},
get InputAccessoryView() {
return require('./Libraries/Components/TextInput/InputAccessoryView')
.default;
},
get KeyboardAvoidingView() {
return require('./Libraries/Components/Keyboard/KeyboardAvoidingView')
.default;
},
get experimental_LayoutConformance() {
return require('./Libraries/Components/LayoutConformance/LayoutConformance')
.default;
},
get Modal() {
return require('./Libraries/Modal/Modal').default;
},
get Pressable() {
return require('./Libraries/Components/Pressable/Pressable').default;
},
get ProgressBarAndroid() {
warnOnce(
'progress-bar-android-moved',
'ProgressBarAndroid has been extracted from react-native core and will be removed in a future release. ' +
"It can now be installed and imported from '@react-native-community/progress-bar-android' instead of 'react-native'. " +
'See https://github.com/react-native-progress-view/progress-bar-android',
);
return require('./Libraries/Components/ProgressBarAndroid/ProgressBarAndroid')
.default;
},
get RefreshControl() {
return require('./Libraries/Components/RefreshControl/RefreshControl')
.default;
},
get SafeAreaView() {
return require('./Libraries/Components/SafeAreaView/SafeAreaView').default;
},
get ScrollView() {
return require('./Libraries/Components/ScrollView/ScrollView').default;
},
get SectionList() {
return require('./Libraries/Lists/SectionList').default;
},
get StatusBar() {
return require('./Libraries/Components/StatusBar/StatusBar').default;
},
get Switch() {
return require('./Libraries/Components/Switch/Switch').default;
},
get Text() {
return require('./Libraries/Text/Text').default;
},
get TextInput() {
return require('./Libraries/Components/TextInput/TextInput').default;
},
get Touchable() {
return require('./Libraries/Components/Touchable/Touchable').default;
},
get TouchableHighlight() {
return require('./Libraries/Components/Touchable/TouchableHighlight')
.default;
},
get TouchableNativeFeedback() {
return require('./Libraries/Components/Touchable/TouchableNativeFeedback')
.default;
},
get TouchableOpacity() {
return require('./Libraries/Components/Touchable/TouchableOpacity').default;
},
get TouchableWithoutFeedback() {
return require('./Libraries/Components/Touchable/TouchableWithoutFeedback')
.default;
},
get View() {
return require('./Libraries/Components/View/View').default;
},
get VirtualizedList() {
return require('./Libraries/Lists/VirtualizedList').default;
},
get VirtualizedSectionList() {
return require('./Libraries/Lists/VirtualizedSectionList').default;
},
// #endregion
// #region APIs
get AccessibilityInfo() {
return require('./Libraries/Components/AccessibilityInfo/AccessibilityInfo')
.default;
},
get ActionSheetIOS() {
return require('./Libraries/ActionSheetIOS/ActionSheetIOS').default;
},
get Alert() {
return require('./Libraries/Alert/Alert').default;
},
// Include any types exported in the Animated module together with its default export, so
// you can references types such as Animated.Numeric
get Animated() {
return require('./Libraries/Animated/Animated').default;
},
get Appearance() {
return require('./Libraries/Utilities/Appearance');
},
get AppRegistry() {
return require('./Libraries/ReactNative/AppRegistry').AppRegistry;
},
get AppState() {
return require('./Libraries/AppState/AppState').default;
},
get BackHandler() {
return require('./Libraries/Utilities/BackHandler').default;
},
get Clipboard() {
warnOnce(
'clipboard-moved',
'Clipboard has been extracted from react-native core and will be removed in a future release. ' +
"It can now be installed and imported from '@react-native-clipboard/clipboard' instead of 'react-native'. " +
'See https://github.com/react-native-clipboard/clipboard',
);
return require('./Libraries/Components/Clipboard/Clipboard').default;
},
get codegenNativeCommands() {
return require('./Libraries/Utilities/codegenNativeCommands').default;
},
get codegenNativeComponent() {
return require('./Libraries/Utilities/codegenNativeComponent').default;
},
get DeviceEventEmitter() {
return require('./Libraries/EventEmitter/RCTDeviceEventEmitter').default;
},
get DeviceInfo() {
return require('./Libraries/Utilities/DeviceInfo').default;
},
get DevMenu() {
return require('./src/private/devsupport/devmenu/DevMenu').default;
},
get DevSettings() {
return require('./Libraries/Utilities/DevSettings').default;
},
get Dimensions() {
return require('./Libraries/Utilities/Dimensions').default;
},
get DynamicColorIOS() {
return require('./Libraries/StyleSheet/PlatformColorValueTypesIOS')
.DynamicColorIOS;
},
get Easing() {
return require('./Libraries/Animated/Easing').default;
},
get findNodeHandle() {
return require('./Libraries/ReactNative/RendererProxy').findNodeHandle;
},
get I18nManager() {
return require('./Libraries/ReactNative/I18nManager').default;
},
/**
* @deprecated
*/
get InteractionManager() {
return require('./Libraries/Interaction/InteractionManager').default;
},
get Keyboard() {
return require('./Libraries/Components/Keyboard/Keyboard').default;
},
get LayoutAnimation() {
return require('./Libraries/LayoutAnimation/LayoutAnimation').default;
},
get Linking() {
return require('./Libraries/Linking/Linking').default;
},
get LogBox() {
return require('./Libraries/LogBox/LogBox').default;
},
get NativeAppEventEmitter() {
return require('./Libraries/EventEmitter/RCTNativeAppEventEmitter').default;
},
get NativeDialogManagerAndroid() {
return require('./Libraries/NativeModules/specs/NativeDialogManagerAndroid')
.default;
},
get NativeEventEmitter() {
return require('./Libraries/EventEmitter/NativeEventEmitter').default;
},
get NativeModules() {
return require('./Libraries/BatchedBridge/NativeModules').default;
},
get Networking() {
return require('./Libraries/Network/RCTNetworking').default;
},
get PanResponder() {
return require('./Libraries/Interaction/PanResponder').default;
},
get PermissionsAndroid() {
return require('./Libraries/PermissionsAndroid/PermissionsAndroid').default;
},
get PixelRatio() {
return require('./Libraries/Utilities/PixelRatio').default;
},
get Platform() {
return require('./Libraries/Utilities/Platform').default;
},
get PlatformColor() {
return require('./Libraries/StyleSheet/PlatformColorValueTypes')
.PlatformColor;
},
get PushNotificationIOS() {
warnOnce(
'pushNotificationIOS-moved',
'PushNotificationIOS has been extracted from react-native core and will be removed in a future release. ' +
"It can now be installed and imported from '@react-native-community/push-notification-ios' instead of 'react-native'. " +
'See https://github.com/react-native-push-notification/ios',
);
return require('./Libraries/PushNotificationIOS/PushNotificationIOS')
.default;
},
get processColor() {
return require('./Libraries/StyleSheet/processColor').default;
},
get registerCallableModule() {
return require('./Libraries/Core/registerCallableModule').default;
},
get requireNativeComponent() {
return require('./Libraries/ReactNative/requireNativeComponent').default;
},
get RootTagContext() {
return require('./Libraries/ReactNative/RootTag').RootTagContext;
},
get Settings() {
return require('./Libraries/Settings/Settings').default;
},
get Share() {
return require('./Libraries/Share/Share').default;
},
get StyleSheet() {
return require('./Libraries/StyleSheet/StyleSheet').default;
},
get Systrace() {
return require('./Libraries/Performance/Systrace');
},
get ToastAndroid() {
return require('./Libraries/Components/ToastAndroid/ToastAndroid').default;
},
get TurboModuleRegistry() {
return require('./Libraries/TurboModule/TurboModuleRegistry');
},
get UIManager() {
return require('./Libraries/ReactNative/UIManager').default;
},
get unstable_batchedUpdates() {
return require('./Libraries/ReactNative/RendererProxy')
.unstable_batchedUpdates;
},
get useAnimatedValue() {
return require('./Libraries/Animated/useAnimatedValue').default;
},
get useColorScheme() {
return require('./Libraries/Utilities/useColorScheme').default;
},
get useWindowDimensions() {
return require('./Libraries/Utilities/useWindowDimensions').default;
},
get UTFSequence() {
return require('./Libraries/UTFSequence').default;
},
get Vibration() {
return require('./Libraries/Vibration/Vibration').default;
},
// #endregion
} as ReactNativePublicAPI;
if (__DEV__) {
/* $FlowFixMe[prop-missing] This is intentional: Flow will error when
* attempting to access AsyncStorage. */
/* $FlowFixMe[invalid-export] This is intentional: Flow will error when
* attempting to access AsyncStorage. */
Object.defineProperty(module.exports, 'AsyncStorage', {
configurable: true,
get() {
invariant(
false,
'AsyncStorage has been removed from react-native core. ' +
"It can now be installed and imported from '@react-native-async-storage/async-storage' instead of 'react-native'. " +
'See https://github.com/react-native-async-storage/async-storage',
);
},
});
/* $FlowFixMe[prop-missing] This is intentional: Flow will error when
* attempting to access ImagePickerIOS. */
/* $FlowFixMe[invalid-export] This is intentional: Flow will error when
* attempting to access ImagePickerIOS. */
Object.defineProperty(module.exports, 'ImagePickerIOS', {
configurable: true,
get() {
invariant(
false,
'ImagePickerIOS has been removed from React Native. ' +
"Please upgrade to use either 'react-native-image-picker' or 'expo-image-picker'. " +
"If you cannot upgrade to a different library, please install the deprecated '@react-native-community/image-picker-ios' package. " +
'See https://github.com/rnc-archive/react-native-image-picker-ios',
);
},
});
/* $FlowFixMe[prop-missing] This is intentional: Flow will error when
* attempting to access ProgressViewIOS. */
/* $FlowFixMe[invalid-export] This is intentional: Flow will error when
* attempting to access ProgressViewIOS. */
Object.defineProperty(module.exports, 'ProgressViewIOS', {
configurable: true,
get() {
invariant(
false,
'ProgressViewIOS has been removed from react-native core. ' +
"It can now be installed and imported from '@react-native-community/progress-view' instead of 'react-native'. " +
'See https://github.com/react-native-progress-view/progress-view',
);
},
});
/* $FlowFixMe[prop-missing] This is intentional: Flow will error when
* attempting to access DatePickerIOS. */
/* $FlowFixMe[invalid-export] This is intentional: Flow will error when
* attempting to access DatePickerIOS. */
Object.defineProperty(module.exports, 'DatePickerIOS', {
configurable: true,
get() {
invariant(
false,
'DatePickerIOS has been removed from react-native core. ' +
"It can now be installed and imported from '@react-native-community/datetimepicker' instead of 'react-native'. " +
'See https://github.com/react-native-datetimepicker/datetimepicker',
);
},
});
/* $FlowFixMe[prop-missing] This is intentional: Flow will error when
* attempting to access Slider. */
/* $FlowFixMe[invalid-export] This is intentional: Flow will error when
* attempting to access Slider. */
Object.defineProperty(module.exports, 'Slider', {
configurable: true,
get() {
invariant(
false,
'Slider has been removed from react-native core. ' +
"It can now be installed and imported from '@react-native-community/slider' instead of 'react-native'. " +
'See https://github.com/callstack/react-native-slider',
);
},
});
}