From 04b433fe1d1b9de0baec6dcb8b1c766b5a31b9e2 Mon Sep 17 00:00:00 2001 From: Lorenzo Blasa Date: Mon, 11 Jul 2022 07:04:55 -0700 Subject: [PATCH] Load marketplace plugins Summary: Load marketplace plugins using FlipperServer. Extracted from: https://www.internalfb.com/code/fbsource/[c3fdda2336d6]/xplat/sonar/desktop/flipper-ui-core/src/dispatcher/plugins.tsx?lines=89 Reviewed By: passy Differential Revision: D37749793 fbshipit-source-id: 687d6f7c076c9314c6e96dc1cf6fba8c96c71841 --- .../src/plugins/loadMarketplacePlugins.tsx | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 desktop/flipper-server-core/src/plugins/loadMarketplacePlugins.tsx diff --git a/desktop/flipper-server-core/src/plugins/loadMarketplacePlugins.tsx b/desktop/flipper-server-core/src/plugins/loadMarketplacePlugins.tsx new file mode 100644 index 000000000..0ab2a7ef9 --- /dev/null +++ b/desktop/flipper-server-core/src/plugins/loadMarketplacePlugins.tsx @@ -0,0 +1,47 @@ +/** + * 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 {FlipperServer, MarketplacePluginDetails} from 'flipper-common'; +import {loadAvailablePlugins} from './fb-stubs/pluginMarketplaceAPI'; +import isPluginCompatible from './isPluginCompatible'; + +export function selectCompatibleMarketplaceVersions( + availablePlugins: MarketplacePluginDetails[], +): MarketplacePluginDetails[] { + const plugins: MarketplacePluginDetails[] = []; + for (const plugin of availablePlugins) { + if (!isPluginCompatible(plugin)) { + const compatibleVersion = + plugin.availableVersions?.find(isPluginCompatible) ?? + plugin.availableVersions?.slice(-1).pop(); + if (compatibleVersion) { + plugins.push({ + ...compatibleVersion, + availableVersions: plugin?.availableVersions, + }); + } else { + plugins.push(plugin); + } + } else { + plugins.push(plugin); + } + } + return plugins; +} + +export async function loadMarketplacePlugins( + flipperServer: FlipperServer, + marketplaceURL: string, +): Promise { + const availablePlugins = await loadAvailablePlugins( + flipperServer, + marketplaceURL, + ); + return selectCompatibleMarketplaceVersions(availablePlugins); +}