Repository: expo/expo
File: packages/expo-device/src/Device.ts (TypeScript)

Code before:
export const totalMemory: number | null = ExpoDevice ? ExpoDevice.totalMemory : null;

/**
 * A list of supported processor architecture versions. The device expects the binaries it runs to be compiled for one of these architectures.
 * This value is `null` if the supported architectures could not be determined, particularly on web.
 *
 * @example
 * ```js
 * Device.supportedCpuArchitectures; // ['arm64 v8', 'Intel x86-64h Haswell', 'arm64-v8a', 'armeabi-v7a", 'armeabi']
 * ```
 */
export const supportedCpuArchitectures: string[] | null = ExpoDevice
  ? ExpoDevice.supportedCpuArchitectures
  : null;

/**
 * The name of the OS running on the device.
 *
 * @example
 * ```js
 * Device.osName; // Android: "Android" or fingerprint string; iOS: "iOS" or "iPadOS"; web: "iOS", "Android", "Windows"
 * ```
 *
 * On android this option maps directly to [`android.os.Build.VERSION.BASE_OS`](https://developer.android.com/reference/android/os/Build.VERSION#BASE_OS) which on some devices is set to "Android"
 * and on others is a build fingerprint:
 * - on Xiaomi Poco X3 Pro - `POCO/vayu_eea/vayu:11/RKQ1.200826.002/V12.5.4.0.RJUEUXM:user/release-keys`
 *
 * If you want to differentiate between iOS and Android consider using [`Platform.OS`](https://reactnative.dev/docs/platform#os) from `react-native`.
 */
export const osName: string | null = ExpoDevice ? ExpoDevice.osName : null;

/**
 * The human-readable OS version string. Note that the version string may not always contain three numbers separated by dots.
 *
 * @example
 * ```js
 * Device.osVersion; // Android: "4.0.3"; iOS: "12.3.1"; web: "11.0", "8.1.0"
 * ```
 */
export const osVersion: string | null = ExpoDevice ? ExpoDevice.osVersion : null;

/**
 * The build ID of the OS that more precisely identifies the version of the OS. On Android, this corresponds to `Build.DISPLAY` (not `Build.ID`)
 * and currently is a string as described [here](https://source.android.com/setup/start/build-numbers). On iOS, this corresponds to `kern.osversion`
 * and is the detailed OS version sometimes displayed next to the more human-readable version. On web, this value is always `null`.
 *
 * @example
 * ```js
 * Device.osBuildId; // Android: "PSR1.180720.075"; iOS: "16F203"; web: null
 * ```
 */

Review comment (refactor):
```suggestion
 * for example, on Xiaomi Poco X3 Pro, the fingerprit is  `POCO/vayu_eea/vayu:11/RKQ1.200826.002/V12.5.4.0.RJUEUXM:user/release-keys`
```

Let's remove this since this can be a single sentence, as there are no other items. Also, this should be used as an example since listing every Android manufacturer's fingerprint is currently out of scope for this section to cover. Using an example, it covers what the developers can expect for a specific device.

Code after:
export const totalMemory: number | null = ExpoDevice ? ExpoDevice.totalMemory : null;

/**
 * A list of supported processor architecture versions. The device expects the binaries it runs to be compiled for one of these architectures.
 * This value is `null` if the supported architectures could not be determined, particularly on web.
 *
 * @example
 * ```js
 * Device.supportedCpuArchitectures; // ['arm64 v8', 'Intel x86-64h Haswell', 'arm64-v8a', 'armeabi-v7a", 'armeabi']
 * ```
 */
export const supportedCpuArchitectures: string[] | null = ExpoDevice
  ? ExpoDevice.supportedCpuArchitectures
  : null;

/**
 * The name of the OS running on the device.
 *
 * @example
 * ```js
 * Device.osName; // Android: "Android" or fingerprint string; iOS: "iOS" or "iPadOS"; web: "iOS", "Android", "Windows"
 * ```
 *
 * On Android this option maps directly to [`android.os.Build.VERSION.BASE_OS`](https://developer.android.com/reference/android/os/Build.VERSION#BASE_OS) which on some devices is set to "Android"
 * and on others is a build fingerprint.
 *
 * For example on Xiaomi Poco X3 Pro the `Device.osName` is set to `POCO/vayu_eea/vayu:11/RKQ1.200826.002/V12.5.4.0.RJUEUXM:user/release-keys`
 *
 * If you want to differentiate between Android and iOS consider using [`Platform.OS`](https://reactnative.dev/docs/platform#os) from `react-native`.
 */
export const osName: string | null = ExpoDevice ? ExpoDevice.osName : null;

/**
 * The human-readable OS version string. Note that the version string may not always contain three numbers separated by dots.
 *
 * @example
 * ```js
 * Device.osVersion; // Android: "4.0.3"; iOS: "12.3.1"; web: "11.0", "8.1.0"
 * ```
 */
export const osVersion: string | null = ExpoDevice ? ExpoDevice.osVersion : null;

/**
 * The build ID of the OS that more precisely identifies the version of the OS. On Android, this corresponds to `Build.DISPLAY` (not `Build.ID`)
 * and currently is a string as described [here](https://source.android.com/setup/start/build-numbers). On iOS, this corresponds to `kern.osversion`
 * and is the detailed OS version sometimes displayed next to the more human-readable version. On web, this value is always `null`.
 *
 * @example
 * ```js
 * Device.osBuildId; // Android: "PSR1.180720.075"; iOS: "16F203"; web: null
 * ```