diff --git a/desktop/flipper-server-core/package.json b/desktop/flipper-server-core/package.json index 639b8014f..ba170222a 100644 --- a/desktop/flipper-server-core/package.json +++ b/desktop/flipper-server-core/package.json @@ -37,6 +37,7 @@ "rsocket-flowable": "^0.0.27", "rsocket-tcp-server": "^0.0.25", "rsocket-types": "^0.0.25", + "semver": "^7.3.7", "serialize-error": "^8.1.0", "split2": "^4.1.0", "tmp": "^0.2.1", diff --git a/desktop/flipper-server-core/src/plugins/isPluginCompatible.tsx b/desktop/flipper-server-core/src/plugins/isPluginCompatible.tsx new file mode 100644 index 000000000..e68be5795 --- /dev/null +++ b/desktop/flipper-server-core/src/plugins/isPluginCompatible.tsx @@ -0,0 +1,25 @@ +/** + * 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 + */ + +import {PluginDetails} from 'flipper-common'; +import semver from 'semver'; +import {getFlipperServerConfig} from '../FlipperServerConfig'; + +export function isPluginCompatible(plugin: PluginDetails) { + const config = getFlipperServerConfig(); + const flipperVersion = config.environmentInfo.appVersion; + return ( + config.gatekeepers['flipper_disable_plugin_compatibility_checks'] || + flipperVersion === '0.0.0' || + !plugin.engines?.flipper || + semver.lte(plugin.engines?.flipper, flipperVersion) + ); +} + +export default isPluginCompatible;