Load only compatible plugins on startup

Summary: We currently filtering out incompatible versions from marketplace. This diff also add filtering for incompatible installed plugins on Flipper startup to ensure we always load the latest compatible version.

Reviewed By: passy

Differential Revision: D28341891

fbshipit-source-id: 83afc14a3c07e1763e1bd146251e6d3b71a66248
This commit is contained in:
Anton Nikolaev
2021-05-11 17:02:24 -07:00
committed by Facebook GitHub Bot
parent 252322f525
commit a8ca142c9a
4 changed files with 36 additions and 8 deletions

View File

@@ -52,7 +52,7 @@ import * as crc32 from 'crc32';
// eslint-disable-next-line import/no-unresolved
import getDefaultPluginsIndex from '../utils/getDefaultPluginsIndex';
import {isDevicePluginDefinition} from '../utils/pluginUtils';
import {isPluginCompatible} from '../utils/isPluginCompatible';
import isPluginCompatible from '../utils/isPluginCompatible';
let defaultPluginsIndex: any = null;
@@ -90,10 +90,25 @@ export default async (store: Store, logger: Logger) => {
const bundledPlugins = getBundledPlugins();
const loadedPlugins = filterNewestVersionOfEachPlugin(
bundledPlugins,
await getDynamicPlugins(),
).filter((p) => !uninstalledPluginNames.has(p.name));
const allLocalVersions = [
...getBundledPlugins(),
...(await getDynamicPlugins()),
].filter((p) => !uninstalledPluginNames.has(p.name));
const loadedVersionsMap: Map<string, ActivatablePluginDetails> = new Map();
for (const localVersion of allLocalVersions) {
if (isPluginCompatible(localVersion)) {
const loadedVersion = loadedVersionsMap.get(localVersion.id);
if (
!loadedVersion ||
semver.gt(localVersion.version, loadedVersion.version)
) {
loadedVersionsMap.set(localVersion.id, localVersion);
}
}
}
const loadedPlugins = Array.from(loadedVersionsMap.values());
const initialPlugins: PluginDefinition[] = loadedPlugins
.map(reportVersion)