From 45db64f0d07e2a1a9f3db986ee3c9675411e4fcb Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Mon, 16 Nov 2020 13:08:05 -0800 Subject: [PATCH] Make sure that limited top-level exports are exposed from flipper-plugin Summary: This prefixes APIs of `flipper-plugin`, that are used by Flipper, but should not be used by plugins directly, with `_`. Also added tests to make sure we are always intentional when extending the exposed APIs Reviewed By: passy Differential Revision: D24991700 fbshipit-source-id: ed3700efa188fca7f5a14d5c68250598cf011e42 --- desktop/app/src/Client.tsx | 10 ++-- desktop/app/src/MenuBar.tsx | 6 +-- desktop/app/src/PluginContainer.tsx | 6 ++- .../src/__tests__/PluginContainer.node.tsx | 12 ++--- desktop/app/src/chrome/SettingsSheet.tsx | 4 +- desktop/app/src/devices/BaseDevice.tsx | 12 ++--- .../src/dispatcher/__tests__/plugins.node.tsx | 10 ++-- desktop/app/src/dispatcher/plugins.tsx | 4 +- desktop/app/src/init.tsx | 6 +-- desktop/app/src/plugin.tsx | 10 ++-- .../__tests__/sandydeviceplugins.node.tsx | 8 +-- .../reducers/__tests__/sandyplugins.node.tsx | 18 +++---- .../appinspect/__tests__/PluginList.spec.tsx | 12 ++--- desktop/app/src/store.tsx | 4 +- .../src/utils/__tests__/exportData.node.tsx | 4 +- .../__tests__/messageQueueSandy.node.tsx | 10 ++-- desktop/app/src/utils/messageQueue.tsx | 26 ++++----- desktop/app/src/utils/pluginUtils.tsx | 4 +- .../flipper-plugin/src/__tests__/api.node.tsx | 53 +++++++++++++++++++ desktop/flipper-plugin/src/index.ts | 24 ++++++--- desktop/flipper-plugin/src/ui/NUX.tsx | 3 +- 21 files changed, 156 insertions(+), 90 deletions(-) create mode 100644 desktop/flipper-plugin/src/__tests__/api.node.tsx diff --git a/desktop/app/src/Client.tsx b/desktop/app/src/Client.tsx index e3577c581..f207a8def 100644 --- a/desktop/app/src/Client.tsx +++ b/desktop/app/src/Client.tsx @@ -36,7 +36,7 @@ import {processMessagesLater} from './utils/messageQueue'; import {emitBytesReceived} from './dispatcher/tracking'; import {debounce} from 'lodash'; import {batch} from 'react-redux'; -import {SandyPluginInstance} from 'flipper-plugin'; +import {_SandyPluginInstance} from 'flipper-plugin'; import {flipperMessagesClientPlugin} from './utils/self-inspection/plugins/FlipperMessagesClientPlugin'; import {getFlipperLibImplementation} from './utils/flipperLibImplementation'; @@ -148,11 +148,11 @@ export default class Client extends EventEmitter { plugin: | typeof FlipperPlugin | typeof FlipperDevicePlugin - | SandyPluginInstance; + | _SandyPluginInstance; messages: Params[]; } > = {}; - sandyPluginStates = new Map(); + sandyPluginStates = new Map(); requestCallbacks: Map< number, @@ -251,7 +251,7 @@ export default class Client extends EventEmitter { // TODO: needs to be wrapped in error tracking T68955280 this.sandyPluginStates.set( plugin.id, - new SandyPluginInstance( + new _SandyPluginInstance( getFlipperLibImplementation(), plugin, this, @@ -301,7 +301,7 @@ export default class Client extends EventEmitter { // TODO: needs to be wrapped in error tracking T68955280 this.sandyPluginStates.set( plugin.id, - new SandyPluginInstance(getFlipperLibImplementation(), plugin, this), + new _SandyPluginInstance(getFlipperLibImplementation(), plugin, this), ); } } diff --git a/desktop/app/src/MenuBar.tsx b/desktop/app/src/MenuBar.tsx index 107313168..7a0731fd1 100644 --- a/desktop/app/src/MenuBar.tsx +++ b/desktop/app/src/MenuBar.tsx @@ -26,11 +26,11 @@ import electron, {MenuItemConstructorOptions} from 'electron'; import {notNull} from './utils/typeUtils'; import constants from './fb-stubs/constants'; import {Logger} from './fb-interfaces/Logger'; -import {NormalizedMenuEntry, buildInMenuEntries} from 'flipper-plugin'; +import {NormalizedMenuEntry, _buildInMenuEntries} from 'flipper-plugin'; import {StyleGuide} from './sandy-chrome/StyleGuide'; import {showEmulatorLauncher} from './sandy-chrome/appinspect/LaunchEmulator'; -export type DefaultKeyboardAction = keyof typeof buildInMenuEntries; +export type DefaultKeyboardAction = keyof typeof _buildInMenuEntries; export type TopLevelMenu = 'Edit' | 'View' | 'Window' | 'Help'; export type KeyboardAction = { @@ -70,7 +70,7 @@ export function setupMenuBar( .map((plugin) => plugin.keyboardActions || []) .flat() .map((action: DefaultKeyboardAction | KeyboardAction) => - typeof action === 'string' ? buildInMenuEntries[action] : action, + typeof action === 'string' ? _buildInMenuEntries[action] : action, ) .filter(notNull), ); diff --git a/desktop/app/src/PluginContainer.tsx b/desktop/app/src/PluginContainer.tsx index ca7f7a6bc..18a3e2d94 100644 --- a/desktop/app/src/PluginContainer.tsx +++ b/desktop/app/src/PluginContainer.tsx @@ -46,7 +46,7 @@ import {Message} from './reducers/pluginMessageQueue'; import {Idler} from './utils/Idler'; import {processMessageQueue} from './utils/messageQueue'; import {ToggleButton, SmallText, Layout} from './ui'; -import {SandyPluginRenderer} from 'flipper-plugin'; +import {_SandyPluginRenderer} from 'flipper-plugin'; import {isDevicePluginDefinition} from './utils/pluginUtils'; import ArchivedDevice from './devices/ArchivedDevice'; import {ContentContainer} from './sandy-chrome/ContentContainer'; @@ -377,7 +377,9 @@ class PluginContainer extends PureComponent { // happens if we selected a plugin that is not enabled on a specific app or not supported on a specific device. return this.renderNoPluginActive(); } - pluginElement = ; + pluginElement = ( + <_SandyPluginRenderer key={pluginKey} plugin={instance} /> + ); } else { const props: PluginProps & { key: string; diff --git a/desktop/app/src/__tests__/PluginContainer.node.tsx b/desktop/app/src/__tests__/PluginContainer.node.tsx index eed1a5a0f..cf0c5f9fc 100644 --- a/desktop/app/src/__tests__/PluginContainer.node.tsx +++ b/desktop/app/src/__tests__/PluginContainer.node.tsx @@ -12,7 +12,7 @@ import produce from 'immer'; import {FlipperPlugin} from '../plugin'; import {renderMockFlipperWithPlugin} from '../test-utils/createMockFlipperWithPlugin'; import { - SandyPluginDefinition, + _SandyPluginDefinition, PluginClient, TestUtils, usePlugin, @@ -141,7 +141,7 @@ test('PluginContainer can render Sandy plugins', async () => { }; }; - const definition = new SandyPluginDefinition( + const definition = new _SandyPluginDefinition( TestUtils.createMockPluginDetails(), { plugin, @@ -339,7 +339,7 @@ test('PluginContainer triggers correct lifecycles for background plugin', async return {connectedStub, disconnectedStub, activatedStub, deactivatedStub}; }; - const definition = new SandyPluginDefinition( + const definition = new _SandyPluginDefinition( TestUtils.createMockPluginDetails(), { plugin, @@ -480,7 +480,7 @@ test('PluginContainer + Sandy plugin supports deeplink', async () => { }; }; - const definition = new SandyPluginDefinition( + const definition = new _SandyPluginDefinition( TestUtils.createMockPluginDetails(), { plugin, @@ -636,7 +636,7 @@ test('PluginContainer can render Sandy device plugins', async () => { return {activatedStub, deactivatedStub, lastLogMessage}; }; - const definition = new SandyPluginDefinition( + const definition = new _SandyPluginDefinition( TestUtils.createMockPluginDetails(), { supportsDevice: () => true, @@ -750,7 +750,7 @@ test('PluginContainer + Sandy device plugin supports deeplink', async () => { }; }; - const definition = new SandyPluginDefinition( + const definition = new _SandyPluginDefinition( TestUtils.createMockPluginDetails(), { devicePlugin, diff --git a/desktop/app/src/chrome/SettingsSheet.tsx b/desktop/app/src/chrome/SettingsSheet.tsx index 717697f62..47e99baa1 100644 --- a/desktop/app/src/chrome/SettingsSheet.tsx +++ b/desktop/app/src/chrome/SettingsSheet.tsx @@ -28,7 +28,7 @@ import LauncherSettingsPanel from '../fb-stubs/LauncherSettingsPanel'; import SandySettingsPanel from '../fb-stubs/SandySettingsPanel'; import {reportUsage} from '../utils/metrics'; import {Modal} from 'antd'; -import {Layout, NuxManagerContext} from 'flipper-plugin'; +import {Layout, _NuxManagerContext} from 'flipper-plugin'; const Container = styled(FlexColumn)({ padding: 20, @@ -358,7 +358,7 @@ export default connect( )(SettingsSheet); function ResetTooltips() { - const nuxManager = useContext(NuxManagerContext); + const nuxManager = useContext(_NuxManagerContext); return (