From ff4e7fac6c60bf516674102ebf7715a940e69293 Mon Sep 17 00:00:00 2001 From: Ruslan Shestopalyuk Date: Tue, 29 Aug 2023 14:49:09 -0700 Subject: [PATCH] Use type aliases for native module getConstants where applicable Summary: ## Changelog: [Internal] - This replaces object literal return types in `getConstants()` for core RN native modules with type aliases. This is a valid change from the point of view of binary compatibility between native/JS, and provides a couple of benefits, such as clearer code in general, but also ability to employ C++ codegen for the corresponding types and their marshalling. bypass-github-export-checks Reviewed By: christophpurrer Differential Revision: D48685992 fbshipit-source-id: f21358b12448d30a7b5e25e81f62ef77964d1fcd --- .../Libraries/AppState/NativeAppState.js | 8 ++-- .../Libraries/ReactNative/I18nManager.js | 16 +++---- .../ReactNative/NativeI18nManager.js | 12 +++--- .../Libraries/Utilities/NativeDeviceInfo.js | 5 +-- .../NativePlatformConstantsAndroid.js | 42 ++++++++++--------- .../Utilities/NativePlatformConstantsIOS.js | 30 ++++++------- 6 files changed, 57 insertions(+), 56 deletions(-) diff --git a/packages/react-native/Libraries/AppState/NativeAppState.js b/packages/react-native/Libraries/AppState/NativeAppState.js index 177e167c679..b4b96d97a7b 100644 --- a/packages/react-native/Libraries/AppState/NativeAppState.js +++ b/packages/react-native/Libraries/AppState/NativeAppState.js @@ -12,10 +12,12 @@ import type {TurboModule} from '../TurboModule/RCTExport'; import * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry'; +export type AppStateConstants = {| + initialAppState: string, +|}; + export interface Spec extends TurboModule { - +getConstants: () => {| - initialAppState: string, - |}; + +getConstants: () => AppStateConstants; +getCurrentAppState: ( success: (appState: {|app_state: string|}) => void, error: (error: Object) => void, diff --git a/packages/react-native/Libraries/ReactNative/I18nManager.js b/packages/react-native/Libraries/ReactNative/I18nManager.js index 9084f2279d9..1c3225638e9 100644 --- a/packages/react-native/Libraries/ReactNative/I18nManager.js +++ b/packages/react-native/Libraries/ReactNative/I18nManager.js @@ -8,15 +8,13 @@ * @format */ +import type {I18nManagerConstants} from './NativeI18nManager'; + import NativeI18nManager from './NativeI18nManager'; -const i18nConstants: {| - doLeftAndRightSwapInRTL: boolean, - isRTL: boolean, - localeIdentifier?: ?string, -|} = getI18nManagerConstants(); +const i18nConstants: I18nManagerConstants = getI18nManagerConstants(); -function getI18nManagerConstants() { +function getI18nManagerConstants(): I18nManagerConstants { if (NativeI18nManager) { const {isRTL, doLeftAndRightSwapInRTL, localeIdentifier} = NativeI18nManager.getConstants(); @@ -30,11 +28,7 @@ function getI18nManagerConstants() { } module.exports = { - getConstants: (): {| - doLeftAndRightSwapInRTL: boolean, - isRTL: boolean, - localeIdentifier: ?string, - |} => { + getConstants: (): I18nManagerConstants => { return i18nConstants; }, diff --git a/packages/react-native/Libraries/ReactNative/NativeI18nManager.js b/packages/react-native/Libraries/ReactNative/NativeI18nManager.js index 7161aec921d..7228b4f2e2c 100644 --- a/packages/react-native/Libraries/ReactNative/NativeI18nManager.js +++ b/packages/react-native/Libraries/ReactNative/NativeI18nManager.js @@ -12,12 +12,14 @@ import type {TurboModule} from '../TurboModule/RCTExport'; import * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry'; +export type I18nManagerConstants = {| + doLeftAndRightSwapInRTL: boolean, + isRTL: boolean, + localeIdentifier?: ?string, +|}; + export interface Spec extends TurboModule { - +getConstants: () => {| - isRTL: boolean, - doLeftAndRightSwapInRTL: boolean, - localeIdentifier: ?string, - |}; + +getConstants: () => I18nManagerConstants; allowRTL: (allowRTL: boolean) => void; forceRTL: (forceRTL: boolean) => void; swapLeftAndRightInRTL: (flipStyles: boolean) => void; diff --git a/packages/react-native/Libraries/Utilities/NativeDeviceInfo.js b/packages/react-native/Libraries/Utilities/NativeDeviceInfo.js index 6939c03c2f1..ff4e2818f26 100644 --- a/packages/react-native/Libraries/Utilities/NativeDeviceInfo.js +++ b/packages/react-native/Libraries/Utilities/NativeDeviceInfo.js @@ -40,10 +40,7 @@ export type DeviceInfoConstants = {| |}; export interface Spec extends TurboModule { - +getConstants: () => {| - +Dimensions: DimensionsPayload, - +isIPhoneX_deprecated?: boolean, - |}; + +getConstants: () => DeviceInfoConstants; } const NativeModule: Spec = TurboModuleRegistry.getEnforcing('DeviceInfo'); diff --git a/packages/react-native/Libraries/Utilities/NativePlatformConstantsAndroid.js b/packages/react-native/Libraries/Utilities/NativePlatformConstantsAndroid.js index b470f9b350e..6eab28ff02f 100644 --- a/packages/react-native/Libraries/Utilities/NativePlatformConstantsAndroid.js +++ b/packages/react-native/Libraries/Utilities/NativePlatformConstantsAndroid.js @@ -12,26 +12,30 @@ import type {TurboModule} from '../TurboModule/RCTExport'; import * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry'; +export type ReactNativeVersionAndroid = {| + major: number, + minor: number, + patch: number, + prerelease: ?number, +|}; + +export type PlatformConstantsAndroid = {| + isTesting: boolean, + isDisableAnimations?: boolean, + reactNativeVersion: ReactNativeVersionAndroid, + Version: number, + Release: string, + Serial: string, + Fingerprint: string, + Model: string, + ServerHost?: string, + uiMode: string, + Brand: string, + Manufacturer: string, +|}; + export interface Spec extends TurboModule { - +getConstants: () => {| - isTesting: boolean, - isDisableAnimations?: boolean, - reactNativeVersion: {| - major: number, - minor: number, - patch: number, - prerelease: ?number, - |}, - Version: number, - Release: string, - Serial: string, - Fingerprint: string, - Model: string, - ServerHost?: string, - uiMode: string, - Brand: string, - Manufacturer: string, - |}; + +getConstants: () => PlatformConstantsAndroid; +getAndroidID: () => string; } diff --git a/packages/react-native/Libraries/Utilities/NativePlatformConstantsIOS.js b/packages/react-native/Libraries/Utilities/NativePlatformConstantsIOS.js index c1defa9981f..1a2cf4ad506 100644 --- a/packages/react-native/Libraries/Utilities/NativePlatformConstantsIOS.js +++ b/packages/react-native/Libraries/Utilities/NativePlatformConstantsIOS.js @@ -12,21 +12,23 @@ import type {TurboModule} from '../TurboModule/RCTExport'; import * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry'; +export type PlatformConstantsIOS = {| + isTesting: boolean, + isDisableAnimations?: boolean, + reactNativeVersion: {| + major: number, + minor: number, + patch: number, + prerelease: ?number, + |}, + forceTouchAvailable: boolean, + osVersion: string, + systemName: string, + interfaceIdiom: string, +|}; + export interface Spec extends TurboModule { - +getConstants: () => {| - isTesting: boolean, - isDisableAnimations?: boolean, - reactNativeVersion: {| - major: number, - minor: number, - patch: number, - prerelease: ?number, - |}, - forceTouchAvailable: boolean, - osVersion: string, - systemName: string, - interfaceIdiom: string, - |}; + +getConstants: () => PlatformConstantsIOS; } export default (TurboModuleRegistry.getEnforcing(