mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
b7f07473df
Summary: There's no need for the 3 type arguments here. Flow will infer a union already if multiple properties are provided. Worse, by not providing these properties these tvars end up with no bounds, which can cause downstream constraints to stall. All of the suppresisons added here are for legitimate errors that were uncovered by consolidating to one type argument. Changelog: [internal] Reviewed By: SamChou19815 Differential Revision: D40355811 fbshipit-source-id: 088fd087017a6082c793ef00c8810a81b39fb9fb
80 lines
1.9 KiB
JavaScript
80 lines
1.9 KiB
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
|
|
*/
|
|
|
|
import NativePlatformConstantsAndroid from './NativePlatformConstantsAndroid';
|
|
|
|
export type PlatformSelectSpec<T> = {
|
|
android?: T,
|
|
native?: T,
|
|
default?: T,
|
|
...
|
|
};
|
|
|
|
const Platform = {
|
|
__constants: null,
|
|
OS: 'android',
|
|
// $FlowFixMe[unsafe-getters-setters]
|
|
get Version(): number {
|
|
// $FlowFixMe[object-this-reference]
|
|
return this.constants.Version;
|
|
},
|
|
// $FlowFixMe[unsafe-getters-setters]
|
|
get constants(): {|
|
|
isTesting: 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,
|
|
|} {
|
|
// $FlowFixMe[object-this-reference]
|
|
if (this.__constants == null) {
|
|
// $FlowFixMe[object-this-reference]
|
|
this.__constants = NativePlatformConstantsAndroid.getConstants();
|
|
}
|
|
// $FlowFixMe[object-this-reference]
|
|
return this.__constants;
|
|
},
|
|
// $FlowFixMe[unsafe-getters-setters]
|
|
get isTesting(): boolean {
|
|
if (__DEV__) {
|
|
// $FlowFixMe[object-this-reference]
|
|
return this.constants.isTesting;
|
|
}
|
|
return false;
|
|
},
|
|
// $FlowFixMe[unsafe-getters-setters]
|
|
get isTV(): boolean {
|
|
// $FlowFixMe[object-this-reference]
|
|
return this.constants.uiMode === 'tv';
|
|
},
|
|
select: <T>(spec: PlatformSelectSpec<T>): T =>
|
|
'android' in spec
|
|
? // $FlowFixMe[incompatible-return]
|
|
spec.android
|
|
: 'native' in spec
|
|
? // $FlowFixMe[incompatible-return]
|
|
spec.native
|
|
: // $FlowFixMe[incompatible-return]
|
|
spec.default,
|
|
};
|
|
|
|
module.exports = Platform;
|