Remove instanceof checks
Summary: Replaced `instanceof` checks with `isSandyPlugin` utility. That is cleaner to read and makes it easier to find places where we make exceptions for Sandy plugins Reviewed By: jknoxville Differential Revision: D22206707 fbshipit-source-id: b44a1b585424f3b9bf0d7ce200c34107f03ed55e
This commit is contained in:
committed by
Facebook GitHub Bot
parent
1dc9e899b8
commit
04a29315e2
@@ -7,7 +7,11 @@
|
|||||||
* @format
|
* @format
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {PluginDefinition, ClientPluginDefinition} from './plugin';
|
import {
|
||||||
|
PluginDefinition,
|
||||||
|
ClientPluginDefinition,
|
||||||
|
isSandyPlugin,
|
||||||
|
} from './plugin';
|
||||||
import BaseDevice, {OS} from './devices/BaseDevice';
|
import BaseDevice, {OS} from './devices/BaseDevice';
|
||||||
import {App} from './App';
|
import {App} from './App';
|
||||||
import {Logger} from './fb-interfaces/Logger';
|
import {Logger} from './fb-interfaces/Logger';
|
||||||
@@ -32,7 +36,7 @@ import {sideEffect} from './utils/sideEffect';
|
|||||||
import {emitBytesReceived} from './dispatcher/tracking';
|
import {emitBytesReceived} from './dispatcher/tracking';
|
||||||
import {debounce} from 'lodash';
|
import {debounce} from 'lodash';
|
||||||
import {batch} from 'react-redux';
|
import {batch} from 'react-redux';
|
||||||
import {SandyPluginDefinition, SandyPluginInstance} from 'flipper-plugin';
|
import {SandyPluginInstance} from 'flipper-plugin';
|
||||||
|
|
||||||
type Plugins = Array<string>;
|
type Plugins = Array<string>;
|
||||||
|
|
||||||
@@ -313,7 +317,7 @@ export default class Client extends EventEmitter {
|
|||||||
) {
|
) {
|
||||||
// start a plugin on start if it is a SandyPlugin, which is starred, and doesn't have persisted state yet
|
// start a plugin on start if it is a SandyPlugin, which is starred, and doesn't have persisted state yet
|
||||||
if (
|
if (
|
||||||
plugin instanceof SandyPluginDefinition &&
|
isSandyPlugin(plugin) &&
|
||||||
isEnabled &&
|
isEnabled &&
|
||||||
!this.sandyPluginStates.has(plugin.id)
|
!this.sandyPluginStates.has(plugin.id)
|
||||||
) {
|
) {
|
||||||
@@ -455,7 +459,7 @@ export default class Client extends EventEmitter {
|
|||||||
// TODO: support Sandy plugins T68683442
|
// TODO: support Sandy plugins T68683442
|
||||||
if (
|
if (
|
||||||
persistingPlugin &&
|
persistingPlugin &&
|
||||||
!(persistingPlugin instanceof SandyPluginDefinition) &&
|
!isSandyPlugin(persistingPlugin) &&
|
||||||
persistingPlugin.persistedStateReducer
|
persistingPlugin.persistedStateReducer
|
||||||
) {
|
) {
|
||||||
handled = true;
|
handled = true;
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import {
|
|||||||
FlipperDevicePlugin,
|
FlipperDevicePlugin,
|
||||||
Props as PluginProps,
|
Props as PluginProps,
|
||||||
PluginDefinition,
|
PluginDefinition,
|
||||||
|
isSandyPlugin,
|
||||||
} from './plugin';
|
} from './plugin';
|
||||||
import {Logger} from './fb-interfaces/Logger';
|
import {Logger} from './fb-interfaces/Logger';
|
||||||
import BaseDevice from './devices/BaseDevice';
|
import BaseDevice from './devices/BaseDevice';
|
||||||
@@ -46,7 +47,6 @@ import {Message} from './reducers/pluginMessageQueue';
|
|||||||
import {Idler} from './utils/Idler';
|
import {Idler} from './utils/Idler';
|
||||||
import {processMessageQueue} from './utils/messageQueue';
|
import {processMessageQueue} from './utils/messageQueue';
|
||||||
import {ToggleButton, SmallText} from './ui';
|
import {ToggleButton, SmallText} from './ui';
|
||||||
import {SandyPluginDefinition} from 'flipper-plugin';
|
|
||||||
|
|
||||||
const Container = styled(FlexColumn)({
|
const Container = styled(FlexColumn)({
|
||||||
width: 0,
|
width: 0,
|
||||||
@@ -193,7 +193,7 @@ class PluginContainer extends PureComponent<Props, State> {
|
|||||||
pluginIsEnabled &&
|
pluginIsEnabled &&
|
||||||
activePlugin &&
|
activePlugin &&
|
||||||
// TODO: support sandy: T68683442
|
// TODO: support sandy: T68683442
|
||||||
!(activePlugin instanceof SandyPluginDefinition) &&
|
!isSandyPlugin(activePlugin) &&
|
||||||
activePlugin.persistedStateReducer &&
|
activePlugin.persistedStateReducer &&
|
||||||
pluginKey &&
|
pluginKey &&
|
||||||
pendingMessages?.length
|
pendingMessages?.length
|
||||||
@@ -332,7 +332,7 @@ class PluginContainer extends PureComponent<Props, State> {
|
|||||||
console.warn(`No selected plugin. Rendering empty!`);
|
console.warn(`No selected plugin. Rendering empty!`);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (activePlugin instanceof SandyPluginDefinition) {
|
if (isSandyPlugin(activePlugin)) {
|
||||||
// TODO:
|
// TODO:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
import {Store} from '../reducers/index';
|
import {Store} from '../reducers/index';
|
||||||
import {Logger} from '../fb-interfaces/Logger';
|
import {Logger} from '../fb-interfaces/Logger';
|
||||||
import {PluginNotification} from '../reducers/notifications';
|
import {PluginNotification} from '../reducers/notifications';
|
||||||
import {PluginDefinition} from '../plugin';
|
import {PluginDefinition, isSandyPlugin} from '../plugin';
|
||||||
import isHeadless from '../utils/isHeadless';
|
import isHeadless from '../utils/isHeadless';
|
||||||
import {setStaticView, setDeeplinkPayload} from '../reducers/connections';
|
import {setStaticView, setDeeplinkPayload} from '../reducers/connections';
|
||||||
import {ipcRenderer, IpcRendererEvent} from 'electron';
|
import {ipcRenderer, IpcRendererEvent} from 'electron';
|
||||||
@@ -25,7 +25,6 @@ import {deconstructPluginKey} from '../utils/clientUtils';
|
|||||||
import NotificationScreen from '../chrome/NotificationScreen';
|
import NotificationScreen from '../chrome/NotificationScreen';
|
||||||
import {getPluginTitle} from '../utils/pluginUtils';
|
import {getPluginTitle} from '../utils/pluginUtils';
|
||||||
import {sideEffect} from '../utils/sideEffect';
|
import {sideEffect} from '../utils/sideEffect';
|
||||||
import {SandyPluginDefinition} from 'flipper-plugin';
|
|
||||||
|
|
||||||
type NotificationEvents = 'show' | 'click' | 'close' | 'reply' | 'action';
|
type NotificationEvents = 'show' | 'click' | 'close' | 'reply' | 'action';
|
||||||
const NOTIFICATION_THROTTLE = 5 * 1000; // in milliseconds
|
const NOTIFICATION_THROTTLE = 5 * 1000; // in milliseconds
|
||||||
@@ -117,7 +116,7 @@ export default (store: Store, logger: Logger) => {
|
|||||||
// TODO: add support for Sandy plugins T68683442
|
// TODO: add support for Sandy plugins T68683442
|
||||||
if (
|
if (
|
||||||
persistingPlugin &&
|
persistingPlugin &&
|
||||||
!(persistingPlugin instanceof SandyPluginDefinition) &&
|
!isSandyPlugin(persistingPlugin) &&
|
||||||
persistingPlugin.getActiveNotifications
|
persistingPlugin.getActiveNotifications
|
||||||
) {
|
) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -37,6 +37,12 @@ export type ClientPluginDefinition =
|
|||||||
export type ClientPluginMap = Map<string, ClientPluginDefinition>;
|
export type ClientPluginMap = Map<string, ClientPluginDefinition>;
|
||||||
export type DevicePluginMap = Map<string, DevicePluginDefinition>;
|
export type DevicePluginMap = Map<string, DevicePluginDefinition>;
|
||||||
|
|
||||||
|
export function isSandyPlugin(
|
||||||
|
plugin?: PluginDefinition,
|
||||||
|
): plugin is SandyPluginDefinition {
|
||||||
|
return plugin instanceof SandyPluginDefinition;
|
||||||
|
}
|
||||||
|
|
||||||
// This function is intended to be called from outside of the plugin.
|
// This function is intended to be called from outside of the plugin.
|
||||||
// If you want to `call` from the plugin use, this.client.call
|
// If you want to `call` from the plugin use, this.client.call
|
||||||
export function callClient(
|
export function callClient(
|
||||||
|
|||||||
@@ -28,9 +28,8 @@ import {
|
|||||||
defaultEnabledBackgroundPlugins,
|
defaultEnabledBackgroundPlugins,
|
||||||
} from '../utils/pluginUtils';
|
} from '../utils/pluginUtils';
|
||||||
import {deconstructClientId} from '../utils/clientUtils';
|
import {deconstructClientId} from '../utils/clientUtils';
|
||||||
import {FlipperDevicePlugin, PluginDefinition} from '../plugin';
|
import {FlipperDevicePlugin, PluginDefinition, isSandyPlugin} from '../plugin';
|
||||||
import {RegisterPluginAction} from './plugins';
|
import {RegisterPluginAction} from './plugins';
|
||||||
import {SandyPluginDefinition} from 'flipper-plugin';
|
|
||||||
|
|
||||||
export type StaticView =
|
export type StaticView =
|
||||||
| null
|
| null
|
||||||
@@ -438,7 +437,7 @@ export default (state: State = INITAL_STATE, action: Actions): State => {
|
|||||||
plugins.forEach((plugin) => {
|
plugins.forEach((plugin) => {
|
||||||
// TODO: T68738317 support sandy device plugin
|
// TODO: T68738317 support sandy device plugin
|
||||||
if (
|
if (
|
||||||
!(plugin instanceof SandyPluginDefinition) &&
|
!isSandyPlugin(plugin) &&
|
||||||
plugin.prototype instanceof FlipperDevicePlugin
|
plugin.prototype instanceof FlipperDevicePlugin
|
||||||
) {
|
) {
|
||||||
// smell: devices are mutable
|
// smell: devices are mutable
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import {
|
|||||||
PluginDefinition,
|
PluginDefinition,
|
||||||
DevicePluginMap,
|
DevicePluginMap,
|
||||||
ClientPluginMap,
|
ClientPluginMap,
|
||||||
|
isSandyPlugin,
|
||||||
} from '../plugin';
|
} from '../plugin';
|
||||||
import {default as BaseDevice} from '../devices/BaseDevice';
|
import {default as BaseDevice} from '../devices/BaseDevice';
|
||||||
import {default as ArchivedDevice} from '../devices/ArchivedDevice';
|
import {default as ArchivedDevice} from '../devices/ArchivedDevice';
|
||||||
@@ -49,7 +50,6 @@ import {processMessageQueue} from './messageQueue';
|
|||||||
import {getPluginTitle} from './pluginUtils';
|
import {getPluginTitle} from './pluginUtils';
|
||||||
import {capture} from './screenshot';
|
import {capture} from './screenshot';
|
||||||
import {uploadFlipperMedia} from '../fb-stubs/user';
|
import {uploadFlipperMedia} from '../fb-stubs/user';
|
||||||
import {SandyPluginDefinition} from 'flipper-plugin';
|
|
||||||
|
|
||||||
export const IMPORT_FLIPPER_TRACE_EVENT = 'import-flipper-trace';
|
export const IMPORT_FLIPPER_TRACE_EVENT = 'import-flipper-trace';
|
||||||
export const EXPORT_FLIPPER_TRACE_EVENT = 'export-flipper-trace';
|
export const EXPORT_FLIPPER_TRACE_EVENT = 'export-flipper-trace';
|
||||||
@@ -223,7 +223,7 @@ const serializePluginStates = async (
|
|||||||
const pluginsMap: Map<string, typeof FlipperBasePlugin> = new Map([]);
|
const pluginsMap: Map<string, typeof FlipperBasePlugin> = new Map([]);
|
||||||
clientPlugins.forEach((val, key) => {
|
clientPlugins.forEach((val, key) => {
|
||||||
// TODO: Support Sandy T68683449 and use ClientPluginsMap
|
// TODO: Support Sandy T68683449 and use ClientPluginsMap
|
||||||
if (!(val instanceof SandyPluginDefinition)) {
|
if (!isSandyPlugin(val)) {
|
||||||
pluginsMap.set(key, val);
|
pluginsMap.set(key, val);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -260,7 +260,7 @@ const deserializePluginStates = (
|
|||||||
const pluginsMap: Map<string, typeof FlipperBasePlugin> = new Map([]);
|
const pluginsMap: Map<string, typeof FlipperBasePlugin> = new Map([]);
|
||||||
clientPlugins.forEach((val, key) => {
|
clientPlugins.forEach((val, key) => {
|
||||||
// TODO: Support Sandy T68683449
|
// TODO: Support Sandy T68683449
|
||||||
if (!(val instanceof SandyPluginDefinition)) pluginsMap.set(key, val);
|
if (!isSandyPlugin(val)) pluginsMap.set(key, val);
|
||||||
});
|
});
|
||||||
devicePlugins.forEach((val, key) => {
|
devicePlugins.forEach((val, key) => {
|
||||||
pluginsMap.set(key, val);
|
pluginsMap.set(key, val);
|
||||||
@@ -522,10 +522,7 @@ async function processQueues(
|
|||||||
pluginClass,
|
pluginClass,
|
||||||
} of pluginsToProcess) {
|
} of pluginsToProcess) {
|
||||||
// TODO: Support Sandy T68683449
|
// TODO: Support Sandy T68683449
|
||||||
if (
|
if (!isSandyPlugin(pluginClass) && pluginClass.persistedStateReducer) {
|
||||||
!(pluginClass instanceof SandyPluginDefinition) &&
|
|
||||||
pluginClass.persistedStateReducer
|
|
||||||
) {
|
|
||||||
const processQueueMarker = `${EXPORT_FLIPPER_TRACE_EVENT}:process-queue-per-plugin`;
|
const processQueueMarker = `${EXPORT_FLIPPER_TRACE_EVENT}:process-queue-per-plugin`;
|
||||||
performance.mark(processQueueMarker);
|
performance.mark(processQueueMarker);
|
||||||
|
|
||||||
|
|||||||
@@ -19,8 +19,7 @@ import {
|
|||||||
import {deserializeObject} from './serialization';
|
import {deserializeObject} from './serialization';
|
||||||
import {deconstructPluginKey} from './clientUtils';
|
import {deconstructPluginKey} from './clientUtils';
|
||||||
import {pluginsClassMap} from './pluginUtils';
|
import {pluginsClassMap} from './pluginUtils';
|
||||||
import {PluginDefinition} from '../plugin';
|
import {PluginDefinition, isSandyPlugin} from '../plugin';
|
||||||
import {SandyPluginDefinition} from 'flipper-plugin';
|
|
||||||
|
|
||||||
export type MetricType = {[metricName: string]: number};
|
export type MetricType = {[metricName: string]: number};
|
||||||
type MetricPluginType = {[pluginID: string]: MetricType};
|
type MetricPluginType = {[pluginID: string]: MetricType};
|
||||||
@@ -48,7 +47,7 @@ async function exportMetrics(
|
|||||||
const metricsReducer:
|
const metricsReducer:
|
||||||
| (<U>(persistedState: U) => Promise<MetricType>)
|
| (<U>(persistedState: U) => Promise<MetricType>)
|
||||||
| undefined =
|
| undefined =
|
||||||
pluginClass && !(pluginClass instanceof SandyPluginDefinition)
|
pluginClass && !isSandyPlugin(pluginClass)
|
||||||
? pluginClass.metricsReducer
|
? pluginClass.metricsReducer
|
||||||
: undefined;
|
: undefined;
|
||||||
if (pluginsMap.has(pluginName) && metricsReducer) {
|
if (pluginsMap.has(pluginName) && metricsReducer) {
|
||||||
|
|||||||
@@ -7,7 +7,11 @@
|
|||||||
* @format
|
* @format
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {PersistedStateReducer, FlipperDevicePlugin} from '../plugin';
|
import {
|
||||||
|
PersistedStateReducer,
|
||||||
|
FlipperDevicePlugin,
|
||||||
|
isSandyPlugin,
|
||||||
|
} from '../plugin';
|
||||||
import {State, MiddlewareAPI} from '../reducers/index';
|
import {State, MiddlewareAPI} from '../reducers/index';
|
||||||
import {setPluginState} from '../reducers/pluginStates';
|
import {setPluginState} from '../reducers/pluginStates';
|
||||||
import {flipperRecorderAddEvent} from './pluginStateRecorder';
|
import {flipperRecorderAddEvent} from './pluginStateRecorder';
|
||||||
@@ -200,7 +204,8 @@ export function processMessagesLater(
|
|||||||
| SandyPluginDefinition,
|
| SandyPluginDefinition,
|
||||||
messages: Message[],
|
messages: Message[],
|
||||||
) {
|
) {
|
||||||
if (plugin instanceof SandyPluginDefinition) {
|
// @ts-ignore
|
||||||
|
if (isSandyPlugin(plugin)) {
|
||||||
// TODO:
|
// TODO:
|
||||||
throw new Error(
|
throw new Error(
|
||||||
'Receiving messages is not yet supported for Sandy plugins',
|
'Receiving messages is not yet supported for Sandy plugins',
|
||||||
|
|||||||
@@ -8,11 +8,15 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import {Store} from '../reducers/index';
|
import {Store} from '../reducers/index';
|
||||||
import {ClientPluginMap, DevicePluginMap, PluginDefinition} from '../plugin';
|
import {
|
||||||
|
ClientPluginMap,
|
||||||
|
DevicePluginMap,
|
||||||
|
PluginDefinition,
|
||||||
|
isSandyPlugin,
|
||||||
|
} from '../plugin';
|
||||||
import {setPluginState} from '../reducers/pluginStates';
|
import {setPluginState} from '../reducers/pluginStates';
|
||||||
import BaseDevice from '../devices/BaseDevice';
|
import BaseDevice from '../devices/BaseDevice';
|
||||||
import {getPersistedState} from '../utils/pluginUtils';
|
import {getPersistedState} from '../utils/pluginUtils';
|
||||||
import {SandyPluginDefinition} from 'flipper-plugin';
|
|
||||||
|
|
||||||
export function registerDeviceCallbackOnPlugins(
|
export function registerDeviceCallbackOnPlugins(
|
||||||
store: Store,
|
store: Store,
|
||||||
@@ -22,7 +26,7 @@ export function registerDeviceCallbackOnPlugins(
|
|||||||
) {
|
) {
|
||||||
const callRegisterDeviceHook = (plugin: PluginDefinition) => {
|
const callRegisterDeviceHook = (plugin: PluginDefinition) => {
|
||||||
// This hook is not registered for Sandy plugins, let's see in the future if it is needed
|
// This hook is not registered for Sandy plugins, let's see in the future if it is needed
|
||||||
if (!(plugin instanceof SandyPluginDefinition) && plugin.onRegisterDevice) {
|
if (!isSandyPlugin(plugin) && plugin.onRegisterDevice) {
|
||||||
plugin.onRegisterDevice(
|
plugin.onRegisterDevice(
|
||||||
store,
|
store,
|
||||||
device,
|
device,
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import fs from 'fs';
|
|||||||
import {Store, State} from '../reducers';
|
import {Store, State} from '../reducers';
|
||||||
import {getPluginKey} from './pluginUtils';
|
import {getPluginKey} from './pluginUtils';
|
||||||
import {serialize} from './serialization';
|
import {serialize} from './serialization';
|
||||||
import {SandyPluginDefinition} from 'flipper-plugin';
|
import {isSandyPlugin} from '../plugin';
|
||||||
|
|
||||||
let pluginRecordingState: {
|
let pluginRecordingState: {
|
||||||
recording: string;
|
recording: string;
|
||||||
@@ -69,9 +69,7 @@ async function flipperStartPluginRecording(state: State) {
|
|||||||
// device state, and is used for creating Flipper Exports.
|
// device state, and is used for creating Flipper Exports.
|
||||||
pluginRecordingState.startState = await serialize(
|
pluginRecordingState.startState = await serialize(
|
||||||
state.pluginStates[pluginKey] ||
|
state.pluginStates[pluginKey] ||
|
||||||
(plugin instanceof SandyPluginDefinition
|
(isSandyPlugin(plugin) ? {} : plugin.defaultPersistedState),
|
||||||
? {}
|
|
||||||
: plugin.defaultPersistedState),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
console.log(
|
console.log(
|
||||||
|
|||||||
@@ -12,13 +12,13 @@ import {
|
|||||||
FlipperBasePlugin,
|
FlipperBasePlugin,
|
||||||
PluginDefinition,
|
PluginDefinition,
|
||||||
DevicePluginDefinition,
|
DevicePluginDefinition,
|
||||||
|
isSandyPlugin,
|
||||||
} from '../plugin';
|
} from '../plugin';
|
||||||
import {State as PluginStatesState} from '../reducers/pluginStates';
|
import {State as PluginStatesState} from '../reducers/pluginStates';
|
||||||
import {State as PluginsState} from '../reducers/plugins';
|
import {State as PluginsState} from '../reducers/plugins';
|
||||||
import {State as PluginMessageQueueState} from '../reducers/pluginMessageQueue';
|
import {State as PluginMessageQueueState} from '../reducers/pluginMessageQueue';
|
||||||
import {PluginDetails} from 'flipper-plugin-lib';
|
import {PluginDetails} from 'flipper-plugin-lib';
|
||||||
import {deconstructPluginKey, deconstructClientId} from './clientUtils';
|
import {deconstructPluginKey, deconstructClientId} from './clientUtils';
|
||||||
import {SandyPluginDefinition} from 'flipper-plugin';
|
|
||||||
|
|
||||||
type Client = import('../Client').default;
|
type Client = import('../Client').default;
|
||||||
|
|
||||||
@@ -205,7 +205,7 @@ export function getPersistentPlugins(plugins: PluginsState): Array<string> {
|
|||||||
plugin == 'DeviceLogs' ||
|
plugin == 'DeviceLogs' ||
|
||||||
(pluginClass &&
|
(pluginClass &&
|
||||||
// TODO: support Sandy plugin T68683449
|
// TODO: support Sandy plugin T68683449
|
||||||
!(pluginClass instanceof SandyPluginDefinition) &&
|
!isSandyPlugin(pluginClass) &&
|
||||||
(pluginClass.defaultPersistedState != undefined ||
|
(pluginClass.defaultPersistedState != undefined ||
|
||||||
pluginClass.exportPersistedState != undefined))
|
pluginClass.exportPersistedState != undefined))
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user