Files
flipper/flow-typed/flipper.js
Vladyslav Stepanov ba559ac338 Added new Flipper API
Differential Revision: D17542140

fbshipit-source-id: 2d7512b345d1d5e8add76a607e62effe4f4a5f16
2019-09-27 17:11:49 -07:00

280 lines
7.9 KiB
JavaScript

/**
* Copyright 2018-present Facebook.
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
* @format
*/
// This has been taken from the old plugin.js and manually stripped of
// implementation so only the types remain.
// It's not generated using flowgen because the typescript def is slightly weaker
// than the original flow one. (Persisted State generic param being used
// in reducers etc.
import type {KeyboardActions} from './MenuBar.js';
import type {App} from './App.js';
import type {Logger} from './fb-interfaces/Logger.js';
import type Client from './Client.js';
import type {Store, MiddlewareAPI} from './reducers/index.js';
import type {MetricType} from './utils/exportMetrics.tsx';
import type {Node} from 'react';
import type BaseDevice from './devices/BaseDevice.js';
import type AndroidDevice from './devices/AndroidDevice';
import type IOSDevice from './devices/IOSDevice';
declare module 'flipper' {
// This function is intended to be called from outside of the plugin.
// If you want to `call` from the plugin use, this.client.call
declare function callClient(
client: Client,
id: string,
): (string, ?Object) => Promise<Object>;
declare interface PluginClient {
// eslint-disable-next-line
send(method: string, params?: Object): void;
// eslint-disable-next-line
call(method: string, params?: Object): Promise<any>;
// eslint-disable-next-line
subscribe(method: string, callback: (params: any) => void): void;
// eslint-disable-next-line
supportsMethod(method: string): Promise<boolean>;
}
declare type PluginTarget = BaseDevice | Client;
declare type Notification = {|
id: string,
title: string,
message: string | Node,
severity: 'warning' | 'error',
timestamp?: number,
category?: string,
action?: string,
|};
declare type Props<T> = {
logger: Logger,
persistedState: T,
setPersistedState: (state: $Shape<T>) => void,
target: PluginTarget,
deepLinkPayload: ?string,
selectPlugin: (pluginID: string, deepLinkPayload: ?string) => boolean,
isArchivedDevice: boolean,
selectedApp: ?string,
};
declare class FlipperBasePlugin<
State = *,
Actions = *,
PersistedState = *,
> extends React.Component<Props<PersistedState>, State> {
static title: ?string;
static id: string;
static icon: ?string;
static gatekeeper: ?string;
static entry: ?string;
static bugs: ?{
email?: string,
url?: string,
};
static keyboardActions: ?KeyboardActions;
static screenshot: ?string;
static defaultPersistedState: PersistedState;
static persistedStateReducer: ?(
persistedState: PersistedState,
method: string,
data: Object,
) => $Shape<PersistedState>;
static metricsReducer: ?(
persistedState: PersistedState,
) => Promise<MetricType>;
static exportPersistedState: ?(
callClient: (string, ?Object) => Promise<Object>,
persistedState: ?PersistedState,
store: ?MiddlewareAPI,
) => Promise<?PersistedState>;
static serializePersistedState: (
persistedState: PersistedState,
statusUpdate?: (msg: string) => void,
idler?: Idler,
) => Promise<string>;
static deserializePersistedState: (
serializedString: string,
) => PersistedState;
static getActiveNotifications: ?(
persistedState: PersistedState,
) => Array<Notification>;
static onRegisterDevice: ?(
store: Store,
baseDevice: BaseDevice,
setPersistedState: (
pluginKey: string,
newPluginState: ?PersistedState,
) => void,
) => void;
// forbid instance properties that should be static
title: empty;
id: empty;
persist: empty;
icon: empty;
keyboardActions: empty;
screenshot: empty;
reducers: {
[actionName: string]: (state: State, actionData: Object) => $Shape<State>,
};
app: App;
onKeyboardAction: ?(action: string) => void;
toJSON(): string;
init(): void;
teardown(): void;
computeNotifications(props: Props<*>, state: State): Array<Notification>;
// methods to be overridden by subclasses
_init(): void;
_teardown(): void;
dispatchAction(actionData: Actions): void;
}
declare class FlipperDevicePlugin<
S = *,
A = *,
P = *,
> extends FlipperBasePlugin<S, A, P> {
device: BaseDevice;
constructor(props: Props<P>): void;
_init(): void;
_teardown(): void;
static supportsDevice(device: BaseDevice): boolean;
}
declare class FlipperPlugin<S = *, A = *, P = *> extends FlipperBasePlugin<
S,
A,
P,
> {
constructor(props: Props<P>): void;
subscriptions: Array<{
method: string,
callback: Function,
}>;
client: PluginClient;
realClient: Client;
getDevice(): Promise<BaseDevice>;
getAndroidDevice(): AndroidDevice;
getIOSDevice(): IOSDevice;
_teardown(): void;
_init(): void;
}
declare var AndroidDevice: any;
declare var BaseDevice: any;
declare var Block: any;
declare var Box: any;
declare var Button: any;
declare var ButtonGroup: any;
declare var Checkbox: any;
declare var CodeBlock: any;
declare var Component: any;
declare var ContextMenu: any;
declare var DataDescription: any;
declare var DataInspector: any;
declare var DetailSidebar: any;
declare var Device: any;
declare var DeviceLogEntry: any;
declare var Element: any;
declare var ElementID: any;
declare var ElementSearchResultSet: any;
declare var ElementsInspector: any;
declare var ErrorBlock: any;
declare var ErrorBlockContainer: any;
declare var Filter: any;
declare var FlexBox: any;
declare var FlexCenter: any;
declare var FlexColumn: any;
declare var FlexRow: any;
declare var FlipperBasePlugin: any;
declare var FlipperPlugin: any;
declare var GK: any;
declare var Glyph: any;
declare var Heading: any;
declare var HorizontalRule: any;
declare var Input: any;
declare var Label: any;
declare var Link: any;
declare var LoadingIndicator: any;
declare var LogLevel: any;
declare var ManagedDataInspector: any;
declare var ManagedTable: any;
declare var ManagedTable_immutable: any;
declare var MarkerTimeline: any;
declare var MetricType: any;
declare var MiddlewareAPI: any;
declare var OS: any;
declare var Panel: any;
declare var PureComponent: any;
declare var SearchBox: any;
declare var SearchIcon: any;
declare var SearchInput: any;
declare var Searchable: any;
declare var SearchableProps: any;
declare var SearchableTable: any;
declare var SearchableTable_immutable: any;
declare var Select: any;
declare var Sheet: any;
declare var Sidebar: any;
declare var SidebarExtensions: any;
declare var Spacer: any;
declare var StackTrace: any;
declare var StatusIndicator: any;
declare var Store: any;
declare var Tab: any;
declare var TableBodyRow: any;
declare var TableColumnOrder: any;
declare var TableColumnSizes: any;
declare var TableColumns: any;
declare var TableHighlightedRows: any;
declare var TableRowSortOrder: any;
declare var TableRows: any;
declare var TableRows_immutable: any;
declare var Tabs: any;
declare var Text: any;
declare var Textarea: any;
declare var ToggleButton: any;
declare var Toolbar: any;
declare var Tooltip: any;
declare var Value: any;
declare var VerticalRule: any;
declare var View: any;
declare var bufferToBlob: any;
declare var clipboard: any;
declare var colors: any;
declare var constants: any;
declare var createPaste: any;
declare var createTablePlugin: any;
declare var getPersistedState: any;
declare var getPluginKey: any;
declare var getStringFromErrorLike: any;
declare var graphQLQuery: any;
declare var isProduction: any;
declare var keyframes: any;
declare var renderValue: any;
declare var shouldParseAndroidLog: any;
declare var styled: any;
declare var textContent: any;
}