Use the single type representing plugins

Summary: Use interface PluginDetails everywhere where plugins are handled and removed PluginDefinition type which was effectively a subset of PluginDetails

Reviewed By: mweststrate

Differential Revision: D21927456

fbshipit-source-id: 434ebeef955b922cc11757e78fbba8dec05f1060
This commit is contained in:
Anton Nikolaev
2020-06-08 08:47:29 -07:00
committed by Facebook GitHub Bot
parent 907cb9e3cc
commit db3f04a2d7
21 changed files with 264 additions and 167 deletions

View File

@@ -13,7 +13,7 @@ import {
} from '../pluginUtils.tsx';
import type {State as PluginsState} from '../../reducers/plugins.tsx';
import type {State as PluginStatesState} from '../../reducers/pluginStates.tsx';
import type {PluginDefinition} from '../../dispatcher/plugins.tsx';
import type {PluginDetails} from 'flipper-plugin-lib';
import type {State as PluginMessageQueueState} from '../../reducers/pluginStates.tsx';
import {FlipperBasePlugin} from 'flipper';
import type {ReduxState} from '../../reducers/index.tsx';
@@ -60,9 +60,9 @@ function createMockFlipperPluginWithNoPersistedState(id: string) {
}
function mockPluginState(
gatekeepedPlugins: Array<PluginDefinition>,
disabledPlugins: Array<PluginDefinition>,
failedPlugins: Array<[PluginDefinition, string]>,
gatekeepedPlugins: Array<PluginDetails>,
disabledPlugins: Array<PluginDetails>,
failedPlugins: Array<[PluginDetails, string]>,
): PluginsState {
return {
devicePlugins: new Map([
@@ -92,7 +92,7 @@ function mockPluginState(
};
}
function mockPluginDefinition(name: string): PluginDefinition {
function mockPluginDefinition(name: string): PluginDetails {
return {
name,
out: 'out',

View File

@@ -8,9 +8,8 @@
*/
import path from 'path';
import fs from 'fs-extra';
import {homedir} from 'os';
import {PluginMap, PluginDefinition} from '../reducers/pluginManager';
import {PluginMap, PluginDetails} from 'flipper-plugin-lib';
import {default as algoliasearch, SearchIndex} from 'algoliasearch';
import NpmApi, {Package} from 'npm-api';
import semver from 'semver';
@@ -26,36 +25,6 @@ export function provideSearchIndex(): SearchIndex {
return client.initIndex('npm-search');
}
export async function readInstalledPlugins(): Promise<PluginMap> {
const pluginDirExists = await fs.pathExists(PLUGIN_DIR);
if (!pluginDirExists) {
return new Map();
}
const dirs = await fs.readdir(PLUGIN_DIR);
const plugins = await Promise.all<[string, PluginDefinition]>(
dirs.map(
(name) =>
new Promise(async (resolve, reject) => {
if (!(await fs.lstat(path.join(PLUGIN_DIR, name))).isDirectory()) {
return resolve(undefined);
}
const packageJSON = await fs.readFile(
path.join(PLUGIN_DIR, name, 'package.json'),
);
try {
resolve([name, JSON.parse(packageJSON.toString())]);
} catch (e) {
reject(e);
}
}),
),
);
return new Map(plugins.filter(Boolean));
}
export type UpdateResult =
| {kind: 'up-to-date'}
| {kind: 'error'; error: Error}
@@ -68,9 +37,7 @@ export async function findPluginUpdates(
return Promise.all(
Array.from(currentPlugins.values()).map(
async (
currentPlugin: PluginDefinition,
): Promise<[string, UpdateResult]> =>
async (currentPlugin: PluginDetails): Promise<[string, UpdateResult]> =>
npm
.repo(currentPlugin.name)
.package()

View File

@@ -11,7 +11,7 @@ import {FlipperDevicePlugin, FlipperPlugin, FlipperBasePlugin} from '../plugin';
import {State as PluginStatesState} from '../reducers/pluginStates';
import {State as PluginsState} from '../reducers/plugins';
import {State as PluginMessageQueueState} from '../reducers/pluginMessageQueue';
import {PluginDefinition} from '../dispatcher/plugins';
import {PluginDetails} from 'flipper-plugin-lib';
import {deconstructPluginKey, deconstructClientId} from './clientUtils';
type Client = import('../Client').default;
@@ -188,16 +188,16 @@ export function getPersistentPlugins(plugins: PluginsState): Array<string> {
typeof FlipperDevicePlugin | typeof FlipperPlugin
> = pluginsClassMap(plugins);
const arr: Array<PluginDefinition> = plugins.disabledPlugins.concat(
const arr: Array<PluginDetails> = plugins.disabledPlugins.concat(
plugins.gatekeepedPlugins,
);
arr.forEach((plugin: PluginDefinition) => {
arr.forEach((plugin: PluginDetails) => {
if (pluginsMap.has(plugin.name)) {
pluginsMap.delete(plugin.name);
}
});
plugins.failedPlugins.forEach((plugin: [PluginDefinition, string]) => {
plugins.failedPlugins.forEach((plugin: [PluginDetails, string]) => {
if (plugin[0] && plugin[0].name && pluginsMap.has(plugin[0].name)) {
pluginsMap.delete(plugin[0].name);
}