From ecb92c195cb4e16f9cebe9c7fc39de51e141208d Mon Sep 17 00:00:00 2001 From: Andrey Goncharov Date: Tue, 10 May 2022 05:13:24 -0700 Subject: [PATCH] Implement HeadlessPluginInitializer Reviewed By: lblasa Differential Revision: D36130160 fbshipit-source-id: 6edff1c54bf5bf8cb85387bc2877788f947f97a6 --- .../src/HeadlessPluginInitializer.tsx | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 desktop/flipper-server-companion/src/HeadlessPluginInitializer.tsx diff --git a/desktop/flipper-server-companion/src/HeadlessPluginInitializer.tsx b/desktop/flipper-server-companion/src/HeadlessPluginInitializer.tsx new file mode 100644 index 000000000..1d32d2acc --- /dev/null +++ b/desktop/flipper-server-companion/src/HeadlessPluginInitializer.tsx @@ -0,0 +1,52 @@ +/** + * 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 { + ActivatablePluginDetails, + BundledPluginDetails, + InstalledPluginDetails, +} from 'flipper-common'; +import { + AbstractPluginInitializer, + getRenderHostInstance, + isSandyPlugin, +} from 'flipper-frontend-core'; +import {_SandyPluginDefinition} from 'flipper-plugin'; + +export class HeadlessPluginInitializer extends AbstractPluginInitializer { + protected async getFlipperVersion() { + const config = await getRenderHostInstance().flipperServer.exec( + 'get-config', + ); + return config.environmentInfo.appVersion; + } + + protected async requirePluginImpl( + pluginDetails: ActivatablePluginDetails, + ): Promise<_SandyPluginDefinition> { + const plugin = pluginDetails.isBundled + ? this.defaultPluginsIndex[pluginDetails.name] + : await getRenderHostInstance().requirePlugin(pluginDetails.entry); + if (!plugin) { + throw new Error( + `Failed to obtain plugin source for: ${pluginDetails.name}`, + ); + } + return new _SandyPluginDefinition(pluginDetails, plugin); + } + + protected async filterAllLocalVersions( + allLocalVersions: (BundledPluginDetails | InstalledPluginDetails)[], + ): Promise { + const pluginsToLoad = await super.filterAllLocalVersions(allLocalVersions); + return pluginsToLoad + .filter(isSandyPlugin) + .filter((plugin) => plugin.headless); + } +}