Convert plugins dispatcher to TS

Summary: Convert plugins dispatcher to TS

Reviewed By: passy

Differential Revision: D16689874

fbshipit-source-id: afdac7960e267ebed350fcb170795689bd327807
This commit is contained in:
John Knox
2019-08-09 08:58:19 -07:00
committed by Facebook Github Bot
parent 9edfe88caa
commit 6da09fa381
5 changed files with 23 additions and 22 deletions

View File

@@ -6,7 +6,7 @@
*/ */
import type {FlipperDevicePlugin, FlipperPlugin} from '../plugin.tsx'; import type {FlipperDevicePlugin, FlipperPlugin} from '../plugin.tsx';
import type {PluginDefinition} from '../dispatcher/plugins'; import type {PluginDefinition} from '../dispatcher/plugins.tsx';
import type Client from '../Client.tsx'; import type Client from '../Client.tsx';
import type {TableBodyRow} from '../ui/components/table/types'; import type {TableBodyRow} from '../ui/components/table/types';

View File

@@ -10,7 +10,7 @@ import dispatcher, {
checkDisabled, checkDisabled,
checkGK, checkGK,
requirePlugin, requirePlugin,
} from '../plugins'; } from '../plugins.tsx';
import path from 'path'; import path from 'path';
import {remote} from 'electron'; import {remote} from 'electron';
import {FlipperPlugin} from '../../plugin.tsx'; import {FlipperPlugin} from '../../plugin.tsx';

View File

@@ -5,10 +5,10 @@
* @format * @format
*/ */
import type {Store} from '../reducers/index.tsx'; import {Store} from '../reducers/index';
import type {Logger} from '../fb-interfaces/Logger.js'; import {Logger} from '../fb-interfaces/Logger.js';
import type {FlipperPlugin, FlipperDevicePlugin} from '../plugin.tsx'; import {FlipperPlugin, FlipperDevicePlugin} from '../plugin';
import type {State} from '../reducers/plugins.tsx'; import {State} from '../reducers/plugins';
import React from 'react'; import React from 'react';
import ReactDOM from 'react-dom'; import ReactDOM from 'react-dom';
@@ -18,25 +18,25 @@ import {
addGatekeepedPlugins, addGatekeepedPlugins,
addDisabledPlugins, addDisabledPlugins,
addFailedPlugins, addFailedPlugins,
} from '../reducers/plugins.tsx'; } from '../reducers/plugins';
import {remote} from 'electron'; import {remote} from 'electron';
import GK from '../fb-stubs/GK.tsx'; import GK from '../fb-stubs/GK';
import {FlipperBasePlugin} from '../plugin.tsx'; import {FlipperBasePlugin} from '../plugin';
import {setupMenuBar} from '../MenuBar.js'; import {setupMenuBar} from '../MenuBar.js';
import path from 'path'; import path from 'path';
import {default as config} from '../utils/processConfig.js'; import {default as config} from '../utils/processConfig.js';
import isProduction from '../utils/isProduction'; import isProduction from '../utils/isProduction';
export type PluginDefinition = { export type PluginDefinition = {
name: string, name: string;
out: string, out: string;
gatekeeper?: string, gatekeeper?: string;
entry?: string, entry?: string;
}; };
export default (store: Store, logger: Logger) => { export default (store: Store, logger: Logger) => {
// expose Flipper and exact globally for dynamically loaded plugins // expose Flipper and exact globally for dynamically loaded plugins
const globalObject = typeof window === 'undefined' ? global : window; const globalObject: any = typeof window === 'undefined' ? global : window;
globalObject.React = React; globalObject.React = React;
globalObject.ReactDOM = ReactDOM; globalObject.ReactDOM = ReactDOM;
globalObject.Flipper = Flipper; globalObject.Flipper = Flipper;
@@ -46,7 +46,7 @@ export default (store: Store, logger: Logger) => {
const failedPlugins: Array<[PluginDefinition, string]> = []; const failedPlugins: Array<[PluginDefinition, string]> = [];
const initialPlugins: Array< const initialPlugins: Array<
Class<FlipperPlugin<> | FlipperDevicePlugin<>>, typeof FlipperPlugin | typeof FlipperDevicePlugin
> = [...getBundledPlugins(), ...getDynamicPlugins()] > = [...getBundledPlugins(), ...getDynamicPlugins()]
.filter(checkDisabled(disabledPlugins)) .filter(checkDisabled(disabledPlugins))
.filter(checkGK(gatekeepedPlugins)) .filter(checkGK(gatekeepedPlugins))
@@ -58,7 +58,7 @@ export default (store: Store, logger: Logger) => {
store.dispatch(addFailedPlugins(failedPlugins)); store.dispatch(addFailedPlugins(failedPlugins));
store.dispatch(registerPlugins(initialPlugins)); store.dispatch(registerPlugins(initialPlugins));
let state: ?State = null; let state: State | null = null;
store.subscribe(() => { store.subscribe(() => {
const newState = store.getState().plugins; const newState = store.getState().plugins;
if (state !== newState) { if (state !== newState) {
@@ -87,7 +87,8 @@ function getBundledPlugins(): Array<PluginDefinition> {
let bundledPlugins: Array<PluginDefinition> = []; let bundledPlugins: Array<PluginDefinition> = [];
try { try {
bundledPlugins = global.electronRequire( // TODO We can probably define this in the globals file.
bundledPlugins = (global as any).electronRequire(
path.join(pluginPath, 'index.json'), path.join(pluginPath, 'index.json'),
); );
} catch (e) { } catch (e) {
@@ -105,7 +106,7 @@ export function getDynamicPlugins() {
try { try {
dynamicPlugins = JSON.parse( dynamicPlugins = JSON.parse(
// $FlowFixMe process.env not defined in electron API spec // $FlowFixMe process.env not defined in electron API spec
remote?.process.env.PLUGINS || process.env.PLUGINS || '[]', (remote && remote.process.env.PLUGINS) || process.env.PLUGINS || '[]',
); );
} catch (e) { } catch (e) {
console.error(e); console.error(e);
@@ -145,11 +146,11 @@ export const checkDisabled = (disabledPlugins: Array<PluginDefinition>) => (
export const requirePlugin = ( export const requirePlugin = (
failedPlugins: Array<[PluginDefinition, string]>, failedPlugins: Array<[PluginDefinition, string]>,
reqFn: Function = global.electronRequire, reqFn: Function = (global as any).electronRequire,
) => { ) => {
return ( return (
pluginDefinition: PluginDefinition, pluginDefinition: PluginDefinition,
): ?Class<FlipperPlugin<> | FlipperDevicePlugin<>> => { ): typeof FlipperPlugin | typeof FlipperDevicePlugin => {
try { try {
let plugin = reqFn(pluginDefinition.out); let plugin = reqFn(pluginDefinition.out);
if (plugin.default) { if (plugin.default) {

View File

@@ -8,7 +8,7 @@
import {getPersistentPlugins, getActivePersistentPlugins} from '../pluginUtils'; import {getPersistentPlugins, getActivePersistentPlugins} from '../pluginUtils';
import type {State as PluginsState} from '../../reducers/plugins.tsx'; import type {State as PluginsState} from '../../reducers/plugins.tsx';
import type {State as PluginStatesState} from '../../reducers/pluginStates.tsx'; import type {State as PluginStatesState} from '../../reducers/pluginStates.tsx';
import type {PluginDefinition} from '../../dispatcher/plugins'; import type {PluginDefinition} from '../../dispatcher/plugins.tsx';
import {FlipperBasePlugin} from '../../..'; import {FlipperBasePlugin} from '../../..';
import type {MiddlewareAPI} from '../../reducers/index.tsx'; import type {MiddlewareAPI} from '../../reducers/index.tsx';
class MockFlipperPluginWithDefaultPersistedState extends FlipperBasePlugin< class MockFlipperPluginWithDefaultPersistedState extends FlipperBasePlugin<

View File

@@ -9,7 +9,7 @@ import type {State as PluginStatesState} from '../reducers/pluginStates.tsx';
import type BaseDevice from '../devices/BaseDevice.tsx'; import type BaseDevice from '../devices/BaseDevice.tsx';
import {pluginsClassMap} from './exportData.js'; import {pluginsClassMap} from './exportData.js';
import type {State as PluginsState} from '../reducers/plugins.tsx'; import type {State as PluginsState} from '../reducers/plugins.tsx';
import type {PluginDefinition} from '../dispatcher/plugins'; import type {PluginDefinition} from '../dispatcher/plugins.tsx';
export function getPluginKey( export function getPluginKey(
selectedApp: ?string, selectedApp: ?string,