mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
41f525ccae
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/44221 This diff pre-suppresses errors of the following pattern, to prepare for the next Flow release. ``` declare const obj: {foo: string}; declare const key: string; obj[key]; // error: invalid-computed-prop ``` Changelog: [Internal] Reviewed By: alexmckenley Differential Revision: D56477899 fbshipit-source-id: 5676b8685bd3157a519fe433cfce0fa28e003502
62 lines
1.5 KiB
JavaScript
62 lines
1.5 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.
|
|
*
|
|
* @flow strict
|
|
* @format
|
|
*/
|
|
|
|
const APPLE_PLATFORMS_MACRO_MAP = {
|
|
ios: 'TARGET_OS_IOS',
|
|
macos: 'TARGET_OS_OSX',
|
|
tvos: 'TARGET_OS_TV',
|
|
visionos: 'TARGET_OS_VISION',
|
|
};
|
|
|
|
/**
|
|
* Adds compiler macros to the file template to exclude unsupported platforms.
|
|
*/
|
|
function generateSupportedApplePlatformsMacro(
|
|
fileTemplate: string,
|
|
supportedPlatformsMap: ?{[string]: boolean},
|
|
): string {
|
|
if (!supportedPlatformsMap) {
|
|
return fileTemplate;
|
|
}
|
|
|
|
// According to Podspec Syntax Reference, when `platform` or `deployment_target` is not specified, it defaults to all platforms.
|
|
// https://guides.cocoapods.org/syntax/podspec.html#platform
|
|
const everyPlatformIsUnsupported = Object.keys(supportedPlatformsMap).every(
|
|
platform => supportedPlatformsMap[platform] === false,
|
|
);
|
|
|
|
if (everyPlatformIsUnsupported) {
|
|
return fileTemplate;
|
|
}
|
|
|
|
const compilerMacroString = Object.keys(supportedPlatformsMap)
|
|
.reduce((acc: string[], platform) => {
|
|
if (!supportedPlatformsMap[platform]) {
|
|
// $FlowFixMe[invalid-computed-prop]
|
|
return [...acc, `!${APPLE_PLATFORMS_MACRO_MAP[platform]}`];
|
|
}
|
|
return acc;
|
|
}, [])
|
|
.join(' && ');
|
|
|
|
if (!compilerMacroString) {
|
|
return fileTemplate;
|
|
}
|
|
|
|
return `#if ${compilerMacroString}
|
|
${fileTemplate}
|
|
#endif
|
|
`;
|
|
}
|
|
|
|
module.exports = {
|
|
generateSupportedApplePlatformsMacro,
|
|
};
|