migrate redux store
Summary: Migrating redux stores to TypeScript Reviewed By: passy Differential Revision: D16579796 fbshipit-source-id: e3e507f17f1bdd57eb45e30cb0b28aaee6c4521c
This commit is contained in:
committed by
Facebook Github Bot
parent
2c95ef6b25
commit
64cefd0f84
@@ -11,7 +11,7 @@ import {applyMiddleware} from 'redux';
|
|||||||
import yargs from 'yargs';
|
import yargs from 'yargs';
|
||||||
import dispatcher from '../src/dispatcher/index.js';
|
import dispatcher from '../src/dispatcher/index.js';
|
||||||
import {init as initLogger} from '../src/fb-stubs/Logger.js';
|
import {init as initLogger} from '../src/fb-stubs/Logger.js';
|
||||||
import reducers from '../src/reducers/index.js';
|
import reducers from '../src/reducers/index.tsx';
|
||||||
import {exportStore, pluginsClassMap} from '../src/utils/exportData.js';
|
import {exportStore, pluginsClassMap} from '../src/utils/exportData.js';
|
||||||
import {
|
import {
|
||||||
exportMetricsWithoutTrace,
|
exportMetricsWithoutTrace,
|
||||||
@@ -20,7 +20,7 @@ import {
|
|||||||
import {listDevices} from '../src/utils/listDevices';
|
import {listDevices} from '../src/utils/listDevices';
|
||||||
// $FlowFixMe this file exist, trust me, flow!
|
// $FlowFixMe this file exist, trust me, flow!
|
||||||
import setup from '../static/setup.js';
|
import setup from '../static/setup.js';
|
||||||
import type {Store} from '../src/reducers';
|
import type {Store} from '../src/reducers/index.tsx';
|
||||||
import {getPersistentPlugins} from '../src/utils/pluginUtils.js';
|
import {getPersistentPlugins} from '../src/utils/pluginUtils.js';
|
||||||
import {serialize} from '../src/utils/serialization';
|
import {serialize} from '../src/utils/serialization';
|
||||||
import type BaseDevice from '../src/devices/BaseDevice';
|
import type BaseDevice from '../src/devices/BaseDevice';
|
||||||
|
|||||||
@@ -52,6 +52,11 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@jest-runner/electron": "^2.0.1",
|
"@jest-runner/electron": "^2.0.1",
|
||||||
"@types/react-dom": "^16.8.5",
|
"@types/react-dom": "^16.8.5",
|
||||||
|
"@types/jest": "^24.0.16",
|
||||||
|
"@types/react": "^16.8.24",
|
||||||
|
"@types/react-redux": "^7.1.1",
|
||||||
|
"@types/redux-persist": "^4.3.1",
|
||||||
|
"@types/uuid": "^3.4.5",
|
||||||
"@typescript-eslint/eslint-plugin": "^1.11.0",
|
"@typescript-eslint/eslint-plugin": "^1.11.0",
|
||||||
"babel-code-frame": "^6.26.0",
|
"babel-code-frame": "^6.26.0",
|
||||||
"babel-eslint": "^10.0.1",
|
"babel-eslint": "^10.0.1",
|
||||||
@@ -76,8 +81,6 @@
|
|||||||
"typescript": "^3.5.2"
|
"typescript": "^3.5.2"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/react": "^16.8.21",
|
|
||||||
"@types/react-redux": "^7.1.0",
|
|
||||||
"JSONStream": "^1.3.1",
|
"JSONStream": "^1.3.1",
|
||||||
"adbkit-fb": "2.10.1",
|
"adbkit-fb": "2.10.1",
|
||||||
"ansi-to-html": "^0.6.3",
|
"ansi-to-html": "^0.6.3",
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import React from 'react';
|
|||||||
import {FlexColumn, FlexRow} from 'flipper';
|
import {FlexColumn, FlexRow} from 'flipper';
|
||||||
import {connect} from 'react-redux';
|
import {connect} from 'react-redux';
|
||||||
import WelcomeScreen from './chrome/WelcomeScreen.tsx';
|
import WelcomeScreen from './chrome/WelcomeScreen.tsx';
|
||||||
// $FlowFixMe T47375728
|
|
||||||
import TitleBar from './chrome/TitleBar.tsx';
|
import TitleBar from './chrome/TitleBar.tsx';
|
||||||
import MainSidebar from './chrome/MainSidebar.js';
|
import MainSidebar from './chrome/MainSidebar.js';
|
||||||
import BugReporterDialog from './chrome/BugReporterDialog.js';
|
import BugReporterDialog from './chrome/BugReporterDialog.js';
|
||||||
@@ -23,6 +22,8 @@ import Sheet from './chrome/Sheet.js';
|
|||||||
import {ipcRenderer, remote} from 'electron';
|
import {ipcRenderer, remote} from 'electron';
|
||||||
import PluginDebugger from './chrome/PluginDebugger.js';
|
import PluginDebugger from './chrome/PluginDebugger.js';
|
||||||
import {
|
import {
|
||||||
|
ShareType,
|
||||||
|
ActiveSheet,
|
||||||
ACTIVE_SHEET_BUG_REPORTER,
|
ACTIVE_SHEET_BUG_REPORTER,
|
||||||
ACTIVE_SHEET_PLUGIN_DEBUGGER,
|
ACTIVE_SHEET_PLUGIN_DEBUGGER,
|
||||||
ACTIVE_SHEET_SHARE_DATA,
|
ACTIVE_SHEET_SHARE_DATA,
|
||||||
@@ -30,12 +31,10 @@ import {
|
|||||||
ACTIVE_SHEET_SHARE_DATA_IN_FILE,
|
ACTIVE_SHEET_SHARE_DATA_IN_FILE,
|
||||||
ACTIVE_SHEET_SELECT_PLUGINS_TO_EXPORT,
|
ACTIVE_SHEET_SELECT_PLUGINS_TO_EXPORT,
|
||||||
ACTIVE_SHEET_PLUGIN_SHEET,
|
ACTIVE_SHEET_PLUGIN_SHEET,
|
||||||
} from './reducers/application.js';
|
} from './reducers/application.tsx';
|
||||||
import type {ShareType} from './reducers/application.js';
|
|
||||||
import type {Logger} from './fb-interfaces/Logger.js';
|
import type {Logger} from './fb-interfaces/Logger.js';
|
||||||
import type BugReporter from './fb-stubs/BugReporter.js';
|
import type BugReporter from './fb-stubs/BugReporter.js';
|
||||||
import type BaseDevice from './devices/BaseDevice.js';
|
import type BaseDevice from './devices/BaseDevice.js';
|
||||||
import type {ActiveSheet} from './reducers/application.js';
|
|
||||||
const version = remote.app.getVersion();
|
const version = remote.app.getVersion();
|
||||||
|
|
||||||
type OwnProps = {|
|
type OwnProps = {|
|
||||||
|
|||||||
@@ -9,17 +9,17 @@ import type {FlipperPlugin, FlipperBasePlugin} from './plugin.js';
|
|||||||
import type BaseDevice from './devices/BaseDevice.js';
|
import type BaseDevice from './devices/BaseDevice.js';
|
||||||
import type {App} from './App.js';
|
import type {App} from './App.js';
|
||||||
import type {Logger} from './fb-interfaces/Logger.js';
|
import type {Logger} from './fb-interfaces/Logger.js';
|
||||||
import type {Store} from './reducers/index.js';
|
import type {Store} from './reducers/index.tsx';
|
||||||
import type {OS} from './devices/BaseDevice.js';
|
import type {OS} from './devices/BaseDevice.js';
|
||||||
import {FlipperDevicePlugin} from './plugin.js';
|
import {FlipperDevicePlugin} from './plugin.js';
|
||||||
import {setPluginState} from './reducers/pluginStates.js';
|
import {setPluginState} from './reducers/pluginStates.tsx';
|
||||||
import {ReactiveSocket, PartialResponder} from 'rsocket-core';
|
import {ReactiveSocket, PartialResponder} from 'rsocket-core';
|
||||||
// $FlowFixMe perf_hooks is a new API in node
|
// $FlowFixMe perf_hooks is a new API in node
|
||||||
import {performance} from 'perf_hooks';
|
import {performance} from 'perf_hooks';
|
||||||
import {reportPlatformFailures} from './utils/metrics';
|
import {reportPlatformFailures} from './utils/metrics';
|
||||||
import {reportPluginFailures} from './utils/metrics';
|
import {reportPluginFailures} from './utils/metrics';
|
||||||
import {default as isProduction} from './utils/isProduction.js';
|
import {default as isProduction} from './utils/isProduction.js';
|
||||||
import {registerPlugins} from './reducers/plugins';
|
import {registerPlugins} from './reducers/plugins.tsx';
|
||||||
import createTableNativePlugin from './plugins/TableNativePlugin';
|
import createTableNativePlugin from './plugins/TableNativePlugin';
|
||||||
|
|
||||||
const EventEmitter = require('events');
|
const EventEmitter = require('events');
|
||||||
@@ -71,7 +71,7 @@ const handleError = (store: Store, deviceSerial: ?string, error: ErrorType) => {
|
|||||||
name: 'Plugin Error',
|
name: 'Plugin Error',
|
||||||
reason: JSON.stringify(error),
|
reason: JSON.stringify(error),
|
||||||
};
|
};
|
||||||
// $FlowFixMe: We checked persistedStateReducer exists
|
|
||||||
const newPluginState = crashReporterPlugin.persistedStateReducer(
|
const newPluginState = crashReporterPlugin.persistedStateReducer(
|
||||||
persistedState,
|
persistedState,
|
||||||
'flipper-crash-report',
|
'flipper-crash-report',
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ import {
|
|||||||
setActiveSheet,
|
setActiveSheet,
|
||||||
setSelectPluginsToExportActiveSheet,
|
setSelectPluginsToExportActiveSheet,
|
||||||
ACTIVE_SHEET_SHARE_DATA,
|
ACTIVE_SHEET_SHARE_DATA,
|
||||||
} from './reducers/application';
|
} from './reducers/application.tsx';
|
||||||
import type {Store} from './reducers/';
|
import type {Store} from './reducers/index.tsx';
|
||||||
import electron from 'electron';
|
import electron from 'electron';
|
||||||
import {ENABLE_SHAREABLE_LINK} from 'flipper';
|
import {ENABLE_SHAREABLE_LINK} from 'flipper';
|
||||||
export type DefaultKeyboardAction = 'clear' | 'goToBottom' | 'createPaste';
|
export type DefaultKeyboardAction = 'clear' | 'goToBottom' | 'createPaste';
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import type {
|
|||||||
FlipperPlugin,
|
FlipperPlugin,
|
||||||
Device,
|
Device,
|
||||||
} from 'flipper';
|
} from 'flipper';
|
||||||
import type {PluginNotification} from './reducers/notifications';
|
import type {PluginNotification} from './reducers/notifications.tsx';
|
||||||
import type {Logger} from './fb-interfaces/Logger';
|
import type {Logger} from './fb-interfaces/Logger';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@@ -35,8 +35,8 @@ import {
|
|||||||
clearAllNotifications,
|
clearAllNotifications,
|
||||||
updatePluginBlacklist,
|
updatePluginBlacklist,
|
||||||
updateCategoryBlacklist,
|
updateCategoryBlacklist,
|
||||||
} from './reducers/notifications';
|
} from './reducers/notifications.tsx';
|
||||||
import {selectPlugin} from './reducers/connections';
|
import {selectPlugin} from './reducers/connections.tsx';
|
||||||
import {textContent} from './utils/index';
|
import {textContent} from './utils/index';
|
||||||
import createPaste from './fb-stubs/createPaste';
|
import createPaste from './fb-stubs/createPaste';
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import type {FlipperPlugin, FlipperDevicePlugin} from './plugin.js';
|
|||||||
import type {Logger} from './fb-interfaces/Logger';
|
import type {Logger} from './fb-interfaces/Logger';
|
||||||
import BaseDevice from './devices/BaseDevice.js';
|
import BaseDevice from './devices/BaseDevice.js';
|
||||||
import type {Props as PluginProps} from './plugin';
|
import type {Props as PluginProps} from './plugin';
|
||||||
import {pluginKey as getPluginKey} from './reducers/pluginStates';
|
import {pluginKey as getPluginKey} from './reducers/pluginStates.tsx';
|
||||||
import Client from './Client.js';
|
import Client from './Client.js';
|
||||||
import {
|
import {
|
||||||
ErrorBoundary,
|
ErrorBoundary,
|
||||||
@@ -21,8 +21,8 @@ import {
|
|||||||
} from 'flipper';
|
} from 'flipper';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {connect} from 'react-redux';
|
import {connect} from 'react-redux';
|
||||||
import {setPluginState} from './reducers/pluginStates.js';
|
import {setPluginState} from './reducers/pluginStates.tsx';
|
||||||
import {selectPlugin} from './reducers/connections';
|
import {selectPlugin} from './reducers/connections.tsx';
|
||||||
import NotificationsHub from './NotificationsHub';
|
import NotificationsHub from './NotificationsHub';
|
||||||
import {activateMenuItems} from './MenuBar.js';
|
import {activateMenuItems} from './MenuBar.js';
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import React from 'react';
|
|||||||
import {App} from '../App.js';
|
import {App} from '../App.js';
|
||||||
import {Provider} from 'react-redux';
|
import {Provider} from 'react-redux';
|
||||||
import renderer from 'react-test-renderer';
|
import renderer from 'react-test-renderer';
|
||||||
import reducers from '../reducers/index.js';
|
import reducers from '../reducers/index.tsx';
|
||||||
import configureStore from 'redux-mock-store';
|
import configureStore from 'redux-mock-store';
|
||||||
import {init as initLogger} from '../fb-stubs/Logger';
|
import {init as initLogger} from '../fb-stubs/Logger';
|
||||||
import BugReporter from '../fb-stubs/BugReporter.js';
|
import BugReporter from '../fb-stubs/BugReporter.js';
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
import Server from '../server.js';
|
import Server from '../server.js';
|
||||||
import {init as initLogger} from '../fb-stubs/Logger';
|
import {init as initLogger} from '../fb-stubs/Logger';
|
||||||
import reducers from '../reducers/index.js';
|
import reducers from '../reducers/index.tsx';
|
||||||
import {createStore} from 'redux';
|
import {createStore} from 'redux';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
import {init as initLogger} from '../fb-stubs/Logger';
|
import {init as initLogger} from '../fb-stubs/Logger';
|
||||||
import Server from '../server';
|
import Server from '../server';
|
||||||
import reducers from '../reducers/index.js';
|
import reducers from '../reducers/index.tsx';
|
||||||
import configureStore from 'redux-mock-store';
|
import configureStore from 'redux-mock-store';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import React from 'react';
|
|||||||
import ReactDOM from 'react-dom';
|
import ReactDOM from 'react-dom';
|
||||||
import Sidebar from '../ui/components/Sidebar';
|
import Sidebar from '../ui/components/Sidebar';
|
||||||
import {connect} from 'react-redux';
|
import {connect} from 'react-redux';
|
||||||
import {toggleRightSidebarAvailable} from '../reducers/application.js';
|
import {toggleRightSidebarAvailable} from '../reducers/application.tsx';
|
||||||
|
|
||||||
type OwnProps = {|
|
type OwnProps = {|
|
||||||
children: any,
|
children: any,
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import {Component, Button, styled} from 'flipper';
|
|||||||
import {connect} from 'react-redux';
|
import {connect} from 'react-redux';
|
||||||
import {spawn} from 'child_process';
|
import {spawn} from 'child_process';
|
||||||
import {dirname} from 'path';
|
import {dirname} from 'path';
|
||||||
import {selectDevice, preferDevice} from '../reducers/connections.js';
|
import {selectDevice, preferDevice} from '../reducers/connections.tsx';
|
||||||
import {default as which} from 'which';
|
import {default as which} from 'which';
|
||||||
import {promisify} from 'util';
|
import {promisify} from 'util';
|
||||||
import {showOpenDialog} from '../utils/exportData';
|
import {showOpenDialog} from '../utils/exportData';
|
||||||
|
|||||||
@@ -6,17 +6,17 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import {Component, connect} from 'flipper';
|
import {Component, connect} from 'flipper';
|
||||||
import type {ShareType} from '../reducers/application.js';
|
import type {ShareType} from '../reducers/application.tsx';
|
||||||
import type {State as PluginState} from '../reducers/plugins.js';
|
import type {State as PluginState} from '../reducers/plugins.tsx';
|
||||||
import type {State as PluginStatesState} from '../reducers/pluginStates.js';
|
import type {State as PluginStatesState} from '../reducers/pluginStates.tsx';
|
||||||
import type {ActiveSheet} from '../reducers/application.js';
|
import type {ActiveSheet} from '../reducers/application.tsx';
|
||||||
import {selectedPlugins as actionForSelectedPlugins} from '../reducers/plugins.js';
|
import {selectedPlugins as actionForSelectedPlugins} from '../reducers/plugins.tsx';
|
||||||
import {getActivePersistentPlugins} from '../utils/pluginUtils';
|
import {getActivePersistentPlugins} from '../utils/pluginUtils';
|
||||||
import {
|
import {
|
||||||
ACTIVE_SHEET_SHARE_DATA,
|
ACTIVE_SHEET_SHARE_DATA,
|
||||||
setActiveSheet as getActiveSheetAction,
|
setActiveSheet as getActiveSheetAction,
|
||||||
setExportDataToFileActiveSheet as getExportDataToFileActiveSheetAction,
|
setExportDataToFileActiveSheet as getExportDataToFileActiveSheetAction,
|
||||||
} from '../reducers/application.js';
|
} from '../reducers/application.tsx';
|
||||||
import SelectPluginSheet from './SelectPluginSheet';
|
import SelectPluginSheet from './SelectPluginSheet';
|
||||||
|
|
||||||
type OwnProps = {|
|
type OwnProps = {|
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ import config from '../fb-stubs/config';
|
|||||||
import type BaseDevice from '../devices/BaseDevice.js';
|
import type BaseDevice from '../devices/BaseDevice.js';
|
||||||
import type Client from '../Client.js';
|
import type Client from '../Client.js';
|
||||||
import type {UninitializedClient} from '../UninitializedClient.js';
|
import type {UninitializedClient} from '../UninitializedClient.js';
|
||||||
import type {PluginNotification} from '../reducers/notifications';
|
import type {PluginNotification} from '../reducers/notifications.tsx';
|
||||||
import type {ActiveSheet} from '../reducers/application';
|
import type {ActiveSheet} from '../reducers/application.tsx';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
PureComponent,
|
PureComponent,
|
||||||
@@ -31,8 +31,8 @@ import {
|
|||||||
} from 'flipper';
|
} from 'flipper';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import NotificationsHub from '../NotificationsHub.js';
|
import NotificationsHub from '../NotificationsHub.js';
|
||||||
import {selectPlugin} from '../reducers/connections.js';
|
import {selectPlugin} from '../reducers/connections.tsx';
|
||||||
import {setActiveSheet} from '../reducers/application.js';
|
import {setActiveSheet} from '../reducers/application.tsx';
|
||||||
import UserAccount from './UserAccount.tsx';
|
import UserAccount from './UserAccount.tsx';
|
||||||
import {connect} from 'react-redux';
|
import {connect} from 'react-redux';
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,10 @@ import {
|
|||||||
Spacer,
|
Spacer,
|
||||||
Input,
|
Input,
|
||||||
} from 'flipper';
|
} from 'flipper';
|
||||||
import {setExportStatusComponent, unsetShare} from '../reducers/application';
|
import {
|
||||||
|
setExportStatusComponent,
|
||||||
|
unsetShare,
|
||||||
|
} from '../reducers/application.tsx';
|
||||||
import type {Logger} from '../fb-interfaces/Logger.js';
|
import type {Logger} from '../fb-interfaces/Logger.js';
|
||||||
import {Idler} from '../utils/Idler';
|
import {Idler} from '../utils/Idler';
|
||||||
import {shareFlipperData} from '../fb-stubs/user';
|
import {shareFlipperData} from '../fb-stubs/user';
|
||||||
|
|||||||
@@ -15,7 +15,10 @@ import {
|
|||||||
FlexRow,
|
FlexRow,
|
||||||
Spacer,
|
Spacer,
|
||||||
} from 'flipper';
|
} from 'flipper';
|
||||||
import {setExportStatusComponent, unsetShare} from '../reducers/application';
|
import {
|
||||||
|
setExportStatusComponent,
|
||||||
|
unsetShare,
|
||||||
|
} from '../reducers/application.tsx';
|
||||||
import {reportPlatformFailures} from '../utils/metrics';
|
import {reportPlatformFailures} from '../utils/metrics';
|
||||||
import CancellableExportStatus from './CancellableExportStatus';
|
import CancellableExportStatus from './CancellableExportStatus';
|
||||||
// $FlowFixMe: Missing type defs for node built-in.
|
// $FlowFixMe: Missing type defs for node built-in.
|
||||||
|
|||||||
@@ -7,13 +7,13 @@
|
|||||||
|
|
||||||
import {Component} from 'react';
|
import {Component} from 'react';
|
||||||
import {Transition} from 'react-transition-group';
|
import {Transition} from 'react-transition-group';
|
||||||
import {setActiveSheet} from '../reducers/application.js';
|
import {setActiveSheet} from '../reducers/application.tsx';
|
||||||
import {connect} from 'react-redux';
|
import {connect} from 'react-redux';
|
||||||
import {styled} from 'flipper';
|
import {styled} from 'flipper';
|
||||||
import {PLUGIN_SHEET_ELEMENT_ID} from '../ui/components/Sheet';
|
import {PLUGIN_SHEET_ELEMENT_ID} from '../ui/components/Sheet';
|
||||||
import {ACTIVE_SHEET_PLUGIN_SHEET} from '../reducers/application';
|
import {ACTIVE_SHEET_PLUGIN_SHEET} from '../reducers/application.tsx';
|
||||||
|
|
||||||
import type {ActiveSheet} from '../reducers/application';
|
import type {ActiveSheet} from '../reducers/application.tsx';
|
||||||
|
|
||||||
const DialogContainer = styled('div')(({state}) => ({
|
const DialogContainer = styled('div')(({state}) => ({
|
||||||
transform: `translate(-50%, ${
|
transform: `translate(-50%, ${
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import {
|
|||||||
colors,
|
colors,
|
||||||
} from 'flipper';
|
} from 'flipper';
|
||||||
import {writeKeychain, getUser} from '../fb-stubs/user';
|
import {writeKeychain, getUser} from '../fb-stubs/user';
|
||||||
import {login} from '../reducers/user';
|
import {login} from '../reducers/user.tsx';
|
||||||
import {connect} from 'react-redux';
|
import {connect} from 'react-redux';
|
||||||
|
|
||||||
const Container = styled(FlexColumn)({
|
const Container = styled(FlexColumn)({
|
||||||
|
|||||||
@@ -5,8 +5,16 @@
|
|||||||
* @format
|
* @format
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {ActiveSheet, LauncherMsg, ShareType} from '../reducers/application.js';
|
import {
|
||||||
|
ActiveSheet,
|
||||||
|
LauncherMsg,
|
||||||
|
ShareType,
|
||||||
|
setActiveSheet,
|
||||||
|
toggleLeftSidebarVisible,
|
||||||
|
toggleRightSidebarVisible,
|
||||||
|
ACTIVE_SHEET_BUG_REPORTER,
|
||||||
|
setFlipperRating,
|
||||||
|
} from '../reducers/application';
|
||||||
import {
|
import {
|
||||||
colors,
|
colors,
|
||||||
Button,
|
Button,
|
||||||
@@ -18,13 +26,6 @@ import {
|
|||||||
LoadingIndicator,
|
LoadingIndicator,
|
||||||
} from 'flipper';
|
} from 'flipper';
|
||||||
import {connect} from 'react-redux';
|
import {connect} from 'react-redux';
|
||||||
import {
|
|
||||||
setActiveSheet,
|
|
||||||
toggleLeftSidebarVisible,
|
|
||||||
toggleRightSidebarVisible,
|
|
||||||
ACTIVE_SHEET_BUG_REPORTER,
|
|
||||||
setFlipperRating,
|
|
||||||
} from '../reducers/application.js';
|
|
||||||
import RatingButton from './RatingButton.js';
|
import RatingButton from './RatingButton.js';
|
||||||
import DevicesButton from './DevicesButton.js';
|
import DevicesButton from './DevicesButton.js';
|
||||||
import ScreenCaptureButtons from './ScreenCaptureButtons.js';
|
import ScreenCaptureButtons from './ScreenCaptureButtons.js';
|
||||||
@@ -35,6 +36,7 @@ import {isAutoUpdaterEnabled} from '../utils/argvUtils.js';
|
|||||||
import isProduction from '../utils/isProduction.js';
|
import isProduction from '../utils/isProduction.js';
|
||||||
import {clipboard} from 'electron';
|
import {clipboard} from 'electron';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import {State} from 'src/reducers';
|
||||||
|
|
||||||
const AppTitleBar = styled(FlexRow)(({focused}) => ({
|
const AppTitleBar = styled(FlexRow)(({focused}) => ({
|
||||||
background: focused
|
background: focused
|
||||||
@@ -118,7 +120,7 @@ const Importing = styled(FlexRow)({
|
|||||||
|
|
||||||
function statusMessageComponent(
|
function statusMessageComponent(
|
||||||
downloadingImportData: boolean,
|
downloadingImportData: boolean,
|
||||||
statusComponent?: React.ReactElement<any> | undefined,
|
statusComponent?: React.ReactNode | undefined,
|
||||||
) {
|
) {
|
||||||
if (downloadingImportData) {
|
if (downloadingImportData) {
|
||||||
return (
|
return (
|
||||||
@@ -192,9 +194,7 @@ class TitleBar extends React.Component<Props, StateFromProps> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// @TODO: TS_MIGRATION
|
export default connect<StateFromProps, DispatchFromProps, OwnProps, State>(
|
||||||
type Store = any;
|
|
||||||
export default connect<StateFromProps, DispatchFromProps, OwnProps, Store>(
|
|
||||||
({
|
({
|
||||||
application: {
|
application: {
|
||||||
windowIsFocused,
|
windowIsFocused,
|
||||||
|
|||||||
@@ -5,9 +5,9 @@
|
|||||||
* @format
|
* @format
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {LauncherMsg} from '../reducers/application.js';
|
import {LauncherMsg} from '../reducers/application';
|
||||||
import {colors, FlexRow, Glyph, styled} from 'flipper';
|
import {colors, FlexRow, Glyph, styled} from 'flipper';
|
||||||
import React, {Component} from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
const Container = styled(FlexRow)({
|
const Container = styled(FlexRow)({
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
@@ -27,7 +27,7 @@ function getSeverityColor(severity: 'warning' | 'error'): string {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default class UpdateIndicator extends Component<Props> {
|
export default class UpdateIndicator extends React.Component<Props> {
|
||||||
render() {
|
render() {
|
||||||
if (this.props.launcherMsg.message.length == 0) {
|
if (this.props.launcherMsg.message.length == 0) {
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import {ActiveSheet} from '../reducers/application';
|
|||||||
|
|
||||||
import {styled, FlexRow, Glyph, Text, colors} from 'flipper';
|
import {styled, FlexRow, Glyph, Text, colors} from 'flipper';
|
||||||
import {logout} from '../reducers/user';
|
import {logout} from '../reducers/user';
|
||||||
import {setActiveSheet, ACTIVE_SHEET_SIGN_IN} from '../reducers/application.js';
|
import {setActiveSheet, ACTIVE_SHEET_SIGN_IN} from '../reducers/application';
|
||||||
import {connect} from 'react-redux';
|
import {connect} from 'react-redux';
|
||||||
import electron from 'electron';
|
import electron from 'electron';
|
||||||
import {findDOMNode} from 'react-dom';
|
import {findDOMNode} from 'react-dom';
|
||||||
|
|||||||
@@ -5,10 +5,9 @@
|
|||||||
* @format
|
* @format
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// $FlowFixMe T47375728
|
|
||||||
import TitleBar from '../TitleBar.tsx';
|
import TitleBar from '../TitleBar.tsx';
|
||||||
import renderer from 'react-test-renderer';
|
import renderer from 'react-test-renderer';
|
||||||
import reducers from '../../reducers/index.js';
|
import reducers from '../../reducers/index.tsx';
|
||||||
import configureStore from 'redux-mock-store';
|
import configureStore from 'redux-mock-store';
|
||||||
import {Provider} from 'react-redux';
|
import {Provider} from 'react-redux';
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import dispatcher, {
|
|||||||
import path from 'path';
|
import path from 'path';
|
||||||
import {remote} from 'electron';
|
import {remote} from 'electron';
|
||||||
import {FlipperPlugin} from '../../plugin';
|
import {FlipperPlugin} from '../../plugin';
|
||||||
import reducers from '../../reducers/index.js';
|
import reducers from '../../reducers/index.tsx';
|
||||||
import {init as initLogger} from '../../fb-stubs/Logger.js';
|
import {init as initLogger} from '../../fb-stubs/Logger.js';
|
||||||
import configureStore from 'redux-mock-store';
|
import configureStore from 'redux-mock-store';
|
||||||
import {TEST_PASSING_GK, TEST_FAILING_GK} from '../../fb-stubs/GK';
|
import {TEST_PASSING_GK, TEST_FAILING_GK} from '../../fb-stubs/GK';
|
||||||
|
|||||||
@@ -7,14 +7,14 @@
|
|||||||
|
|
||||||
import AndroidDevice from '../devices/AndroidDevice';
|
import AndroidDevice from '../devices/AndroidDevice';
|
||||||
import child_process from 'child_process';
|
import child_process from 'child_process';
|
||||||
import type {Store} from '../reducers/index.js';
|
import type {Store} from '../reducers/index.tsx';
|
||||||
import type BaseDevice from '../devices/BaseDevice';
|
import type BaseDevice from '../devices/BaseDevice';
|
||||||
import type {Logger} from '../fb-interfaces/Logger.js';
|
import type {Logger} from '../fb-interfaces/Logger.js';
|
||||||
import {registerDeviceCallbackOnPlugins} from '../utils/onRegisterDevice.js';
|
import {registerDeviceCallbackOnPlugins} from '../utils/onRegisterDevice.js';
|
||||||
import {getAdbClient} from '../utils/adbClient';
|
import {getAdbClient} from '../utils/adbClient';
|
||||||
import {default as which} from 'which';
|
import {default as which} from 'which';
|
||||||
import {promisify} from 'util';
|
import {promisify} from 'util';
|
||||||
import type {ServerPorts} from '../reducers/application';
|
import type {ServerPorts} from '../reducers/application.tsx';
|
||||||
|
|
||||||
function createDevice(
|
function createDevice(
|
||||||
adbClient: any,
|
adbClient: any,
|
||||||
|
|||||||
@@ -6,9 +6,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import {remote, ipcRenderer} from 'electron';
|
import {remote, ipcRenderer} from 'electron';
|
||||||
import type {Store} from '../reducers/index.js';
|
import type {Store} from '../reducers/index.tsx';
|
||||||
import type {Logger} from '../fb-interfaces/Logger.js';
|
import type {Logger} from '../fb-interfaces/Logger.js';
|
||||||
import {toggleAction} from '../reducers/application';
|
import {toggleAction} from '../reducers/application.tsx';
|
||||||
import {parseFlipperPorts} from '../utils/environmentVariables';
|
import {parseFlipperPorts} from '../utils/environmentVariables';
|
||||||
import {
|
import {
|
||||||
importDataToStore,
|
importDataToStore,
|
||||||
@@ -17,7 +17,7 @@ import {
|
|||||||
} from '../utils/exportData';
|
} from '../utils/exportData';
|
||||||
import {tryCatchReportPlatformFailures} from '../utils/metrics';
|
import {tryCatchReportPlatformFailures} from '../utils/metrics';
|
||||||
|
|
||||||
import {selectPlugin} from '../reducers/connections';
|
import {selectPlugin} from '../reducers/connections.tsx';
|
||||||
import qs from 'query-string';
|
import qs from 'query-string';
|
||||||
|
|
||||||
export const uriComponents = (url: string) => {
|
export const uriComponents = (url: string) => {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
* @format
|
* @format
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type {Store} from '../reducers/index.js';
|
import type {Store} from '../reducers/index.tsx';
|
||||||
import type {Logger} from '../fb-interfaces/Logger.js';
|
import type {Logger} from '../fb-interfaces/Logger.js';
|
||||||
|
|
||||||
import MacDevice from '../devices/MacDevice';
|
import MacDevice from '../devices/MacDevice';
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import type {ChildProcess} from 'child_process';
|
import type {ChildProcess} from 'child_process';
|
||||||
import type {Store} from '../reducers/index.js';
|
import type {Store} from '../reducers/index.tsx';
|
||||||
import type {Logger} from '../fb-interfaces/Logger.js';
|
import type {Logger} from '../fb-interfaces/Logger.js';
|
||||||
import type {DeviceType} from '../devices/BaseDevice';
|
import type {DeviceType} from '../devices/BaseDevice';
|
||||||
import {promisify} from 'util';
|
import {promisify} from 'util';
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import plugins from './plugins';
|
|||||||
import user from './user';
|
import user from './user';
|
||||||
|
|
||||||
import type {Logger} from '../fb-interfaces/Logger.js';
|
import type {Logger} from '../fb-interfaces/Logger.js';
|
||||||
import type {Store} from '../reducers/index.js';
|
import type {Store} from '../reducers/index.tsx';
|
||||||
import type {Dispatcher} from './types';
|
import type {Dispatcher} from './types';
|
||||||
|
|
||||||
export default function(store: Store, logger: Logger): () => Promise<void> {
|
export default function(store: Store, logger: Logger): () => Promise<void> {
|
||||||
|
|||||||
@@ -5,18 +5,18 @@
|
|||||||
* @format
|
* @format
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type {Store} from '../reducers/index.js';
|
import type {Store} from '../reducers/index.tsx';
|
||||||
import type {Logger} from '../fb-interfaces/Logger.js';
|
import type {Logger} from '../fb-interfaces/Logger.js';
|
||||||
import type {PluginNotification} from '../reducers/notifications';
|
import type {PluginNotification} from '../reducers/notifications.tsx';
|
||||||
import type {FlipperPlugin, FlipperDevicePlugin} from '../plugin.js';
|
import type {FlipperPlugin, FlipperDevicePlugin} from '../plugin.js';
|
||||||
import isHeadless from '../utils/isHeadless.js';
|
import isHeadless from '../utils/isHeadless.js';
|
||||||
import {ipcRenderer} from 'electron';
|
import {ipcRenderer} from 'electron';
|
||||||
import {selectPlugin} from '../reducers/connections';
|
import {selectPlugin} from '../reducers/connections.tsx';
|
||||||
import {
|
import {
|
||||||
setActiveNotifications,
|
setActiveNotifications,
|
||||||
updatePluginBlacklist,
|
updatePluginBlacklist,
|
||||||
updateCategoryBlacklist,
|
updateCategoryBlacklist,
|
||||||
} from '../reducers/notifications';
|
} from '../reducers/notifications.tsx';
|
||||||
import {textContent} from '../utils/index';
|
import {textContent} from '../utils/index';
|
||||||
import GK from '../fb-stubs/GK';
|
import GK from '../fb-stubs/GK';
|
||||||
|
|
||||||
|
|||||||
@@ -5,10 +5,10 @@
|
|||||||
* @format
|
* @format
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type {Store} from '../reducers/index.js';
|
import type {Store} from '../reducers/index.tsx';
|
||||||
import type {Logger} from '../fb-interfaces/Logger.js';
|
import type {Logger} from '../fb-interfaces/Logger.js';
|
||||||
import type {FlipperPlugin, FlipperDevicePlugin} from '../plugin.js';
|
import type {FlipperPlugin, FlipperDevicePlugin} from '../plugin.js';
|
||||||
import type {State} from '../reducers/plugins';
|
import type {State} from '../reducers/plugins.tsx';
|
||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import ReactDOM from 'react-dom';
|
import ReactDOM from 'react-dom';
|
||||||
@@ -18,7 +18,7 @@ import {
|
|||||||
addGatekeepedPlugins,
|
addGatekeepedPlugins,
|
||||||
addDisabledPlugins,
|
addDisabledPlugins,
|
||||||
addFailedPlugins,
|
addFailedPlugins,
|
||||||
} from '../reducers/plugins';
|
} from '../reducers/plugins.tsx';
|
||||||
import {remote} from 'electron';
|
import {remote} from 'electron';
|
||||||
import GK from '../fb-stubs/GK';
|
import GK from '../fb-stubs/GK';
|
||||||
import {FlipperBasePlugin} from '../plugin.js';
|
import {FlipperBasePlugin} from '../plugin.js';
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
import Server from '../server.js';
|
import Server from '../server.js';
|
||||||
|
|
||||||
import type {Store} from '../reducers/index.js';
|
import type {Store} from '../reducers/index.tsx';
|
||||||
import type {Logger} from '../fb-interfaces/Logger.js';
|
import type {Logger} from '../fb-interfaces/Logger.js';
|
||||||
import type Client from '../Client.js';
|
import type Client from '../Client.js';
|
||||||
import type {UninitializedClient} from '../UninitializedClient';
|
import type {UninitializedClient} from '../UninitializedClient';
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import {ipcRenderer} from 'electron';
|
|||||||
// $FlowFixMe perf_hooks is a new API in node
|
// $FlowFixMe perf_hooks is a new API in node
|
||||||
import {performance} from 'perf_hooks';
|
import {performance} from 'perf_hooks';
|
||||||
|
|
||||||
import type {Store} from '../reducers/index.js';
|
import type {Store} from '../reducers/index.tsx';
|
||||||
import type {Logger} from '../fb-interfaces/Logger.js';
|
import type {Logger} from '../fb-interfaces/Logger.js';
|
||||||
import type Client from '../Client';
|
import type Client from '../Client';
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
* LICENSE file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
* @format
|
* @format
|
||||||
*/
|
*/
|
||||||
import type {Store} from '../reducers/index.js';
|
import type {Store} from '../reducers/index.tsx';
|
||||||
import type {Logger} from '../fb-interfaces/Logger';
|
import type {Logger} from '../fb-interfaces/Logger';
|
||||||
|
|
||||||
export type Dispatcher = (store: Store, logger: Logger) => ?() => Promise<void>;
|
export type Dispatcher = (store: Store, logger: Logger) => ?() => Promise<void>;
|
||||||
|
|||||||
@@ -5,9 +5,9 @@
|
|||||||
* @format
|
* @format
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type {Store} from '../reducers/index.js';
|
import type {Store} from '../reducers/index.tsx';
|
||||||
import type {Logger} from '../fb-interfaces/Logger.js';
|
import type {Logger} from '../fb-interfaces/Logger.js';
|
||||||
import {login} from '../reducers/user';
|
import {login} from '../reducers/user.tsx';
|
||||||
import {getUser, logoutUser} from '../fb-stubs/user';
|
import {getUser, logoutUser} from '../fb-stubs/user';
|
||||||
|
|
||||||
export default (store: Store, logger: Logger) => {
|
export default (store: Store, logger: Logger) => {
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
import type {Logger} from '../fb-interfaces/Logger';
|
import type {Logger} from '../fb-interfaces/Logger';
|
||||||
|
|
||||||
import type {Store} from '../reducers/index.js';
|
import type {Store} from '../reducers/index.tsx';
|
||||||
|
|
||||||
export default class BugReporter {
|
export default class BugReporter {
|
||||||
constructor(logManager: Logger, store: Store) {}
|
constructor(logManager: Logger, store: Store) {}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import type {TrackType, Logger} from '../fb-interfaces/Logger';
|
import type {TrackType, Logger} from '../fb-interfaces/Logger';
|
||||||
import type {Store} from '../reducers/index';
|
import type {Store} from '../reducers/index.tsx';
|
||||||
import ScribeLogger from './ScribeLogger';
|
import ScribeLogger from './ScribeLogger';
|
||||||
|
|
||||||
let instance: ?StubLogger = null;
|
let instance: ?StubLogger = null;
|
||||||
|
|||||||
@@ -24,10 +24,10 @@ export {clipboard} from 'electron';
|
|||||||
export * from './fb-stubs/constants.js';
|
export * from './fb-stubs/constants.js';
|
||||||
export * from './fb-stubs/createPaste.js';
|
export * from './fb-stubs/createPaste.js';
|
||||||
export {connect} from 'react-redux';
|
export {connect} from 'react-redux';
|
||||||
export {selectPlugin} from './reducers/connections';
|
export {selectPlugin} from './reducers/connections.tsx';
|
||||||
export {getPluginKey, getPersistedState} from './utils/pluginUtils.js';
|
export {getPluginKey, getPersistedState} from './utils/pluginUtils.js';
|
||||||
export {default as BaseDevice} from './devices/BaseDevice.js';
|
export {default as BaseDevice} from './devices/BaseDevice.js';
|
||||||
export type {Store, MiddlewareAPI} from './reducers/index.js';
|
export type {Store, MiddlewareAPI} from './reducers/index.tsx';
|
||||||
|
|
||||||
export {
|
export {
|
||||||
default as SidebarExtensions,
|
default as SidebarExtensions,
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import BugReporter from './fb-stubs/BugReporter.js';
|
|||||||
import setupPrefetcher from './fb-stubs/Prefetcher.js';
|
import setupPrefetcher from './fb-stubs/Prefetcher.js';
|
||||||
import {createStore} from 'redux';
|
import {createStore} from 'redux';
|
||||||
import {persistStore} from 'redux-persist';
|
import {persistStore} from 'redux-persist';
|
||||||
import reducers from './reducers/index.js';
|
import reducers from './reducers/index.tsx';
|
||||||
import dispatcher from './dispatcher/index.js';
|
import dispatcher from './dispatcher/index.js';
|
||||||
import TooltipProvider from './ui/components/TooltipProvider.js';
|
import TooltipProvider from './ui/components/TooltipProvider.js';
|
||||||
import config from './utils/processConfig.js';
|
import config from './utils/processConfig.js';
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import type {KeyboardActions} from './MenuBar.js';
|
|||||||
import type {App} from './App.js';
|
import type {App} from './App.js';
|
||||||
import type {Logger} from './fb-interfaces/Logger.js';
|
import type {Logger} from './fb-interfaces/Logger.js';
|
||||||
import type Client from './Client.js';
|
import type Client from './Client.js';
|
||||||
import type {Store, MiddlewareAPI} from './reducers/index.js';
|
import type {Store, MiddlewareAPI} from './reducers/index.tsx';
|
||||||
import type {MetricType} from './utils/exportMetrics.js';
|
import type {MetricType} from './utils/exportMetrics.js';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import type {Node} from 'react';
|
import type {Node} from 'react';
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
import reducer from '../connections';
|
import reducer from '../connections';
|
||||||
import BaseDevice from '../../devices/BaseDevice';
|
import BaseDevice from '../../devices/BaseDevice';
|
||||||
import type {State} from '../connections';
|
import {State} from '../connections';
|
||||||
|
|
||||||
test('REGISTER_DEVICE doesnt remove error', () => {
|
test('REGISTER_DEVICE doesnt remove error', () => {
|
||||||
const initialState: State = reducer(undefined, {
|
const initialState: State = reducer(undefined, {
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
* @format
|
* @format
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type {State} from '../notifications';
|
import {State} from '../notifications';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
default as reducer,
|
default as reducer,
|
||||||
@@ -5,8 +5,7 @@
|
|||||||
* @format
|
* @format
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {default as reducer, setPluginState} from '../pluginStates';
|
import {default as reducer, setPluginState, Action} from '../pluginStates';
|
||||||
import type {Action} from '../pluginStates';
|
|
||||||
|
|
||||||
test('reduce setPluginState', () => {
|
test('reduce setPluginState', () => {
|
||||||
const result = reducer(
|
const result = reducer(
|
||||||
@@ -83,7 +83,6 @@ test('do not add other classes', () => {
|
|||||||
disabledPlugins: [],
|
disabledPlugins: [],
|
||||||
selectedPlugins: [],
|
selectedPlugins: [],
|
||||||
},
|
},
|
||||||
// $FlowFixMe testing wrong classes on purpose here
|
|
||||||
registerPlugins([testBasePlugin]),
|
registerPlugins([testBasePlugin]),
|
||||||
);
|
);
|
||||||
expect(res.devicePlugins.size).toEqual(0);
|
expect(res.devicePlugins.size).toEqual(0);
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
import {default as reducer, login, logout} from '../user';
|
import {default as reducer, login, logout} from '../user';
|
||||||
|
|
||||||
test('login', () => {
|
test('login', () => {
|
||||||
const userData = {username: 'Jane Doe'};
|
const userData = {name: 'Jane Doe'};
|
||||||
const res = reducer({}, login(userData));
|
const res = reducer({}, login(userData));
|
||||||
expect(res).toEqual(userData);
|
expect(res).toEqual(userData);
|
||||||
});
|
});
|
||||||
@@ -16,7 +16,7 @@ test('login', () => {
|
|||||||
test('logout', () => {
|
test('logout', () => {
|
||||||
const res = reducer(
|
const res = reducer(
|
||||||
{
|
{
|
||||||
username: 'Jane Doe',
|
name: 'Jane Doe',
|
||||||
},
|
},
|
||||||
logout(),
|
logout(),
|
||||||
);
|
);
|
||||||
@@ -7,8 +7,7 @@
|
|||||||
|
|
||||||
import {remote} from 'electron';
|
import {remote} from 'electron';
|
||||||
import uuidv1 from 'uuid/v1';
|
import uuidv1 from 'uuid/v1';
|
||||||
import {type Element as ReactElement} from 'react';
|
|
||||||
import CancellableExportStatus from '../chrome/CancellableExportStatus';
|
|
||||||
export const ACTIVE_SHEET_PLUGIN_SHEET: 'PLUGIN_SHEET' = 'PLUGIN_SHEET';
|
export const ACTIVE_SHEET_PLUGIN_SHEET: 'PLUGIN_SHEET' = 'PLUGIN_SHEET';
|
||||||
export const ACTIVE_SHEET_BUG_REPORTER: 'BUG_REPORTER' = 'BUG_REPORTER';
|
export const ACTIVE_SHEET_BUG_REPORTER: 'BUG_REPORTER' = 'BUG_REPORTER';
|
||||||
export const ACTIVE_SHEET_PLUGIN_DEBUGGER: 'PLUGIN_DEBUGGER' =
|
export const ACTIVE_SHEET_PLUGIN_DEBUGGER: 'PLUGIN_DEBUGGER' =
|
||||||
@@ -42,12 +41,16 @@ export type ServerPorts = {
|
|||||||
secure: number,
|
secure: number,
|
||||||
};
|
};
|
||||||
|
|
||||||
type SubShareType = {type: 'file', file: string} | {type: 'link'};
|
type SubShareType =
|
||||||
|
| {
|
||||||
|
type: 'file',
|
||||||
|
file: string,
|
||||||
|
}
|
||||||
|
| {type: 'link'};
|
||||||
|
|
||||||
export type ShareType = {
|
export type ShareType = {
|
||||||
statusComponent?: ReactElement<typeof CancellableExportStatus>,
|
statusComponent?: React.ReactNode,
|
||||||
...SubShareType,
|
} & SubShareType;
|
||||||
};
|
|
||||||
|
|
||||||
export type State = {
|
export type State = {
|
||||||
leftSidebarVisible: boolean,
|
leftSidebarVisible: boolean,
|
||||||
@@ -55,12 +58,12 @@ export type State = {
|
|||||||
rightSidebarAvailable: boolean,
|
rightSidebarAvailable: boolean,
|
||||||
windowIsFocused: boolean,
|
windowIsFocused: boolean,
|
||||||
activeSheet: ActiveSheet,
|
activeSheet: ActiveSheet,
|
||||||
share: ?ShareType,
|
share: ShareType | null,
|
||||||
sessionId: ?string,
|
sessionId: string | null,
|
||||||
serverPorts: ServerPorts,
|
serverPorts: ServerPorts,
|
||||||
downloadingImportData: boolean,
|
downloadingImportData: boolean,
|
||||||
launcherMsg: LauncherMsg,
|
launcherMsg: LauncherMsg,
|
||||||
flipperRating: ?number,
|
flipperRating: number | null,
|
||||||
};
|
};
|
||||||
|
|
||||||
type BooleanActionType =
|
type BooleanActionType =
|
||||||
@@ -108,11 +111,11 @@ export type Action =
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
| {
|
| {
|
||||||
type: typeof UNSET_SHARE,
|
type: 'UNSET_SHARE',
|
||||||
}
|
}
|
||||||
| {
|
| {
|
||||||
type: typeof SET_EXPORT_STATUS_MESSAGE,
|
type: 'SET_EXPORT_STATUS_MESSAGE',
|
||||||
payload: ReactElement<typeof CancellableExportStatus>,
|
payload: React.ReactNode,
|
||||||
};
|
};
|
||||||
|
|
||||||
const initialState: () => State = () => ({
|
const initialState: () => State = () => ({
|
||||||
@@ -195,7 +198,6 @@ export default function reducer(state: State, action: Action): State {
|
|||||||
const {share} = state;
|
const {share} = state;
|
||||||
return {
|
return {
|
||||||
...state,
|
...state,
|
||||||
//$FlowFixMe: T48110490, its not able to understand for which case it needs to apply the changes
|
|
||||||
share: {...share, statusComponent: action.payload},
|
share: {...share, statusComponent: action.payload},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -215,17 +217,6 @@ export const toggleAction = (
|
|||||||
payload,
|
payload,
|
||||||
});
|
});
|
||||||
|
|
||||||
export const unsetShare = (): Action => ({
|
|
||||||
type: UNSET_SHARE,
|
|
||||||
});
|
|
||||||
|
|
||||||
export const setExportStatusComponent = (
|
|
||||||
payload: ReactElement<typeof CancellableExportStatus>,
|
|
||||||
): Action => ({
|
|
||||||
type: SET_EXPORT_STATUS_MESSAGE,
|
|
||||||
payload,
|
|
||||||
});
|
|
||||||
|
|
||||||
export const setSelectPluginsToExportActiveSheet = (
|
export const setSelectPluginsToExportActiveSheet = (
|
||||||
payload: ShareType,
|
payload: ShareType,
|
||||||
): Action => ({
|
): Action => ({
|
||||||
@@ -5,33 +5,32 @@
|
|||||||
* @format
|
* @format
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type BaseDevice from '../devices/BaseDevice';
|
import BaseDevice from '../devices/BaseDevice';
|
||||||
import MacDevice from '../devices/MacDevice';
|
import MacDevice from '../devices/MacDevice';
|
||||||
import type Client from '../Client';
|
import Client from '../Client';
|
||||||
import type {UninitializedClient} from '../UninitializedClient';
|
import {UninitializedClient} from '../UninitializedClient';
|
||||||
import {isEqual} from 'lodash';
|
import {isEqual} from 'lodash';
|
||||||
import iosUtil from '../fb-stubs/iOSContainerUtility';
|
import iosUtil from '../fb-stubs/iOSContainerUtility';
|
||||||
// $FlowFixMe perf_hooks is a new API in node
|
|
||||||
import {performance} from 'perf_hooks';
|
import {performance} from 'perf_hooks';
|
||||||
|
|
||||||
export type State = {|
|
export type State = {
|
||||||
devices: Array<BaseDevice>,
|
devices: Array<BaseDevice>,
|
||||||
androidEmulators: Array<string>,
|
androidEmulators: Array<string>,
|
||||||
selectedDevice: ?BaseDevice,
|
selectedDevice: null | BaseDevice,
|
||||||
selectedPlugin: ?string,
|
selectedPlugin: null | string,
|
||||||
selectedApp: ?string,
|
selectedApp: null | string,
|
||||||
userPreferredDevice: ?string,
|
userPreferredDevice: null | string,
|
||||||
userPreferredPlugin: ?string,
|
userPreferredPlugin: null | string,
|
||||||
userPreferredApp: ?string,
|
userPreferredApp: null | string,
|
||||||
error: ?string,
|
error: null | string,
|
||||||
clients: Array<Client>,
|
clients: Array<Client>,
|
||||||
uninitializedClients: Array<{
|
uninitializedClients: Array<{
|
||||||
client: UninitializedClient,
|
client: UninitializedClient,
|
||||||
deviceId?: string,
|
deviceId?: string,
|
||||||
errorMessage?: string,
|
errorMessage?: string,
|
||||||
}>,
|
}>,
|
||||||
deepLinkPayload: ?string,
|
deepLinkPayload: null | string,
|
||||||
|};
|
};
|
||||||
|
|
||||||
export type Action =
|
export type Action =
|
||||||
| {
|
| {
|
||||||
@@ -52,11 +51,11 @@ export type Action =
|
|||||||
}
|
}
|
||||||
| {
|
| {
|
||||||
type: 'SELECT_PLUGIN',
|
type: 'SELECT_PLUGIN',
|
||||||
payload: {|
|
payload: {
|
||||||
selectedPlugin: ?string,
|
selectedPlugin: null | string,
|
||||||
selectedApp: ?string,
|
selectedApp?: null | string,
|
||||||
deepLinkPayload: ?string,
|
deepLinkPayload: null | string,
|
||||||
|},
|
},
|
||||||
}
|
}
|
||||||
| {
|
| {
|
||||||
type: 'SELECT_USER_PREFERRED_PLUGIN',
|
type: 'SELECT_USER_PREFERRED_PLUGIN',
|
||||||
@@ -64,7 +63,7 @@ export type Action =
|
|||||||
}
|
}
|
||||||
| {
|
| {
|
||||||
type: 'SERVER_ERROR',
|
type: 'SERVER_ERROR',
|
||||||
payload: ?string,
|
payload: null | string,
|
||||||
}
|
}
|
||||||
| {
|
| {
|
||||||
type: 'NEW_CLIENT',
|
type: 'NEW_CLIENT',
|
||||||
@@ -138,7 +137,7 @@ const reducer = (state: State = INITAL_STATE, action: Action): State => {
|
|||||||
let {selectedDevice, selectedPlugin} = state;
|
let {selectedDevice, selectedPlugin} = state;
|
||||||
|
|
||||||
// select the default plugin
|
// select the default plugin
|
||||||
let selection = {
|
let selection: Partial<State> = {
|
||||||
selectedApp: null,
|
selectedApp: null,
|
||||||
selectedPlugin: DEFAULT_PLUGIN,
|
selectedPlugin: DEFAULT_PLUGIN,
|
||||||
};
|
};
|
||||||
@@ -270,7 +269,7 @@ const reducer = (state: State = INITAL_STATE, action: Action): State => {
|
|||||||
case 'CLIENT_REMOVED': {
|
case 'CLIENT_REMOVED': {
|
||||||
const {payload} = action;
|
const {payload} = action;
|
||||||
|
|
||||||
const selected = {};
|
const selected: Partial<State> = {};
|
||||||
if (state.selectedApp === payload) {
|
if (state.selectedApp === payload) {
|
||||||
selected.selectedApp = null;
|
selected.selectedApp = null;
|
||||||
selected.selectedPlugin = DEFAULT_PLUGIN;
|
selected.selectedPlugin = DEFAULT_PLUGIN;
|
||||||
@@ -374,11 +373,11 @@ export const preferDevice = (payload: string): Action => ({
|
|||||||
payload,
|
payload,
|
||||||
});
|
});
|
||||||
|
|
||||||
export const selectPlugin = (payload: {|
|
export const selectPlugin = (payload: {
|
||||||
selectedPlugin: ?string,
|
selectedPlugin: null | string,
|
||||||
selectedApp?: ?string,
|
selectedApp?: null | string,
|
||||||
deepLinkPayload: ?string,
|
deepLinkPayload: null | string,
|
||||||
|}): Action => ({
|
}): Action => ({
|
||||||
type: 'SELECT_PLUGIN',
|
type: 'SELECT_PLUGIN',
|
||||||
payload,
|
payload,
|
||||||
});
|
});
|
||||||
@@ -5,42 +5,33 @@
|
|||||||
* @format
|
* @format
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {combineReducers} from 'redux';
|
import {combineReducers, Dispatch} from 'redux';
|
||||||
import application from './application.js';
|
import application, {
|
||||||
import connections from './connections.js';
|
State as ApplicationState,
|
||||||
import pluginStates from './pluginStates.js';
|
Action as ApplicationAction,
|
||||||
import notifications from './notifications.js';
|
} from './application';
|
||||||
import plugins from './plugins.js';
|
import connections, {
|
||||||
import user from './user.js';
|
State as DevicesState,
|
||||||
|
Action as DevicesAction,
|
||||||
|
} from './connections';
|
||||||
|
import pluginStates, {
|
||||||
|
State as PluginStatesState,
|
||||||
|
Action as PluginStatesAction,
|
||||||
|
} from './pluginStates';
|
||||||
|
import notifications, {
|
||||||
|
State as NotificationsState,
|
||||||
|
Action as NotificationsAction,
|
||||||
|
} from './notifications';
|
||||||
|
import plugins, {
|
||||||
|
State as PluginsState,
|
||||||
|
Action as PluginsAction,
|
||||||
|
} from './plugins';
|
||||||
|
import user, {State as UserState, Action as UserAction} from './user';
|
||||||
|
|
||||||
import {persistReducer} from 'redux-persist';
|
import {persistReducer} from 'redux-persist';
|
||||||
import storage from 'redux-persist/lib/storage/index.js';
|
import storage from 'redux-persist/lib/storage/index.js';
|
||||||
|
|
||||||
import type {
|
import {Store as ReduxStore, MiddlewareAPI as ReduxMiddlewareAPI} from 'redux';
|
||||||
State as ApplicationState,
|
|
||||||
Action as ApplicationAction,
|
|
||||||
} from './application.js';
|
|
||||||
import type {
|
|
||||||
State as DevicesState,
|
|
||||||
Action as DevicesAction,
|
|
||||||
} from './connections.js';
|
|
||||||
import type {
|
|
||||||
State as PluginStatesState,
|
|
||||||
Action as PluginStatesAction,
|
|
||||||
} from './pluginStates.js';
|
|
||||||
import type {
|
|
||||||
State as NotificationsState,
|
|
||||||
Action as NotificationsAction,
|
|
||||||
} from './notifications.js';
|
|
||||||
import type {
|
|
||||||
State as PluginsState,
|
|
||||||
Action as PluginsAction,
|
|
||||||
} from './plugins.js';
|
|
||||||
import type {State as UserState, Action as UserAction} from './user.js';
|
|
||||||
import type {
|
|
||||||
Store as ReduxStore,
|
|
||||||
MiddlewareAPI as ReduxMiddlewareAPI,
|
|
||||||
} from 'redux';
|
|
||||||
|
|
||||||
type Actions =
|
type Actions =
|
||||||
| ApplicationAction
|
| ApplicationAction
|
||||||
@@ -49,21 +40,21 @@ type Actions =
|
|||||||
| NotificationsAction
|
| NotificationsAction
|
||||||
| PluginsAction
|
| PluginsAction
|
||||||
| UserAction
|
| UserAction
|
||||||
| {|type: 'INIT'|};
|
| {type: 'INIT'};
|
||||||
|
|
||||||
export type State = {|
|
export type State = {
|
||||||
application: ApplicationState,
|
application: ApplicationState,
|
||||||
connections: DevicesState,
|
connections: DevicesState,
|
||||||
pluginStates: PluginStatesState,
|
pluginStates: PluginStatesState,
|
||||||
notifications: NotificationsState,
|
notifications: NotificationsState,
|
||||||
plugins: PluginsState,
|
plugins: PluginsState,
|
||||||
user: UserState,
|
user: UserState,
|
||||||
|};
|
};
|
||||||
|
|
||||||
export type Store = ReduxStore<State, Actions>;
|
export type Store = ReduxStore<State, Actions>;
|
||||||
export type MiddlewareAPI = ReduxMiddlewareAPI<State, Actions>;
|
export type MiddlewareAPI = ReduxMiddlewareAPI<Dispatch<Actions>, State>;
|
||||||
|
|
||||||
export default combineReducers<_, Actions>({
|
export default combineReducers<State, Actions>({
|
||||||
application: persistReducer(
|
application: persistReducer(
|
||||||
{
|
{
|
||||||
key: 'application',
|
key: 'application',
|
||||||
@@ -4,13 +4,13 @@
|
|||||||
* LICENSE file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
* @format
|
* @format
|
||||||
*/
|
*/
|
||||||
import type {Notification} from '../plugin';
|
import {Notification} from '../plugin';
|
||||||
|
|
||||||
export type PluginNotification = {|
|
export type PluginNotification = {
|
||||||
notification: Notification,
|
notification: Notification,
|
||||||
pluginId: string,
|
pluginId: string,
|
||||||
client: ?string,
|
client: null | string,
|
||||||
|};
|
};
|
||||||
|
|
||||||
export type State = {
|
export type State = {
|
||||||
activeNotifications: Array<PluginNotification>,
|
activeNotifications: Array<PluginNotification>,
|
||||||
@@ -24,7 +24,7 @@ type ActiveNotificationsAction = {
|
|||||||
type: 'SET_ACTIVE_NOTIFICATIONS',
|
type: 'SET_ACTIVE_NOTIFICATIONS',
|
||||||
payload: {
|
payload: {
|
||||||
notifications: Array<Notification>,
|
notifications: Array<Notification>,
|
||||||
client: ?string,
|
client: null | string,
|
||||||
pluginId: string,
|
pluginId: string,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@@ -37,7 +37,7 @@ export type Action =
|
|||||||
type: 'SET_ACTIVE_NOTIFICATIONS',
|
type: 'SET_ACTIVE_NOTIFICATIONS',
|
||||||
payload: {
|
payload: {
|
||||||
notifications: Array<Notification>,
|
notifications: Array<Notification>,
|
||||||
client: ?string,
|
client: null | string,
|
||||||
pluginId: string,
|
pluginId: string,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -139,7 +139,7 @@ function activeNotificationsReducer(
|
|||||||
|
|
||||||
export function setActiveNotifications(payload: {
|
export function setActiveNotifications(payload: {
|
||||||
notifications: Array<Notification>,
|
notifications: Array<Notification>,
|
||||||
client: ?string,
|
client: null | string,
|
||||||
pluginId: string,
|
pluginId: string,
|
||||||
}): Action {
|
}): Action {
|
||||||
return {
|
return {
|
||||||
@@ -154,14 +154,14 @@ export function clearAllNotifications(): Action {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function updatePluginBlacklist(payload: Array<string>) {
|
export function updatePluginBlacklist(payload: Array<string>): Action {
|
||||||
return {
|
return {
|
||||||
type: 'UPDATE_PLUGIN_BLACKLIST',
|
type: 'UPDATE_PLUGIN_BLACKLIST',
|
||||||
payload,
|
payload,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function updateCategoryBlacklist(payload: Array<string>) {
|
export function updateCategoryBlacklist(payload: Array<string>): Action {
|
||||||
return {
|
return {
|
||||||
type: 'UPDATE_CATEGORY_BLACKLIST',
|
type: 'UPDATE_CATEGORY_BLACKLIST',
|
||||||
payload,
|
payload,
|
||||||
@@ -6,19 +6,18 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import {FlipperPlugin, FlipperDevicePlugin} from '../plugin.js';
|
import {FlipperPlugin, FlipperDevicePlugin} from '../plugin.js';
|
||||||
|
import {PluginDefinition} from '../dispatcher/plugins';
|
||||||
import type {PluginDefinition} from '../dispatcher/plugins';
|
|
||||||
|
|
||||||
export type State = {
|
export type State = {
|
||||||
devicePlugins: Map<string, Class<FlipperDevicePlugin<>>>,
|
devicePlugins: Map<string, typeof FlipperDevicePlugin>,
|
||||||
clientPlugins: Map<string, Class<FlipperPlugin<>>>,
|
clientPlugins: Map<string, typeof FlipperPlugin>,
|
||||||
gatekeepedPlugins: Array<PluginDefinition>,
|
gatekeepedPlugins: Array<PluginDefinition>,
|
||||||
disabledPlugins: Array<PluginDefinition>,
|
disabledPlugins: Array<PluginDefinition>,
|
||||||
failedPlugins: Array<[PluginDefinition, string]>,
|
failedPlugins: Array<[PluginDefinition, string]>,
|
||||||
selectedPlugins: Array<string>,
|
selectedPlugins: Array<string>,
|
||||||
};
|
};
|
||||||
|
|
||||||
type P = Class<FlipperPlugin<> | FlipperDevicePlugin<>>;
|
type P = typeof FlipperPlugin | typeof FlipperDevicePlugin;
|
||||||
|
|
||||||
export type Action =
|
export type Action =
|
||||||
| {
|
| {
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
import type {SecureServerConfig} from './utils/CertificateProvider';
|
import type {SecureServerConfig} from './utils/CertificateProvider';
|
||||||
import type {Logger} from './fb-interfaces/Logger';
|
import type {Logger} from './fb-interfaces/Logger';
|
||||||
import type {ClientQuery} from './Client.js';
|
import type {ClientQuery} from './Client.js';
|
||||||
import type {Store} from './reducers/index.js';
|
import type {Store} from './reducers/index.tsx';
|
||||||
|
|
||||||
import CertificateProvider from './utils/CertificateProvider';
|
import CertificateProvider from './utils/CertificateProvider';
|
||||||
import {RSocketServer, ReactiveSocket} from 'rsocket-core';
|
import {RSocketServer, ReactiveSocket} from 'rsocket-core';
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ import {connect} from 'react-redux';
|
|||||||
import {
|
import {
|
||||||
ACTIVE_SHEET_PLUGIN_SHEET,
|
ACTIVE_SHEET_PLUGIN_SHEET,
|
||||||
setActiveSheet,
|
setActiveSheet,
|
||||||
} from '../../reducers/application.js';
|
} from '../../reducers/application.tsx';
|
||||||
|
|
||||||
import type {ActiveSheet} from '../../reducers/application';
|
import type {ActiveSheet} from '../../reducers/application.tsx';
|
||||||
|
|
||||||
export const PLUGIN_SHEET_ELEMENT_ID = 'pluginSheetContents';
|
export const PLUGIN_SHEET_ELEMENT_ID = 'pluginSheetContents';
|
||||||
|
|
||||||
|
|||||||
@@ -6,11 +6,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import {getPersistentPlugins, getActivePersistentPlugins} from '../pluginUtils';
|
import {getPersistentPlugins, getActivePersistentPlugins} from '../pluginUtils';
|
||||||
import type {State as PluginsState} from '../../reducers/plugins.js';
|
import type {State as PluginsState} from '../../reducers/plugins.tsx';
|
||||||
import type {State as PluginStatesState} from '../../reducers/pluginStates.js';
|
import type {State as PluginStatesState} from '../../reducers/pluginStates.tsx';
|
||||||
import type {PluginDefinition} from '../../dispatcher/plugins';
|
import type {PluginDefinition} from '../../dispatcher/plugins';
|
||||||
import {FlipperBasePlugin} from '../../..';
|
import {FlipperBasePlugin} from '../../..';
|
||||||
import type {MiddlewareAPI} from '../../reducers/index.js';
|
import type {MiddlewareAPI} from '../../reducers/index.tsx';
|
||||||
class MockFlipperPluginWithDefaultPersistedState extends FlipperBasePlugin<
|
class MockFlipperPluginWithDefaultPersistedState extends FlipperBasePlugin<
|
||||||
*,
|
*,
|
||||||
*,
|
*,
|
||||||
@@ -46,15 +46,11 @@ function mockPluginState(
|
|||||||
): PluginsState {
|
): PluginsState {
|
||||||
return {
|
return {
|
||||||
devicePlugins: new Map([
|
devicePlugins: new Map([
|
||||||
//$FlowFixMe: Just for testing
|
|
||||||
['DevicePlugin1', MockFlipperPluginWithDefaultPersistedState],
|
['DevicePlugin1', MockFlipperPluginWithDefaultPersistedState],
|
||||||
//$FlowFixMe: Just for testing
|
|
||||||
['DevicePlugin2', MockFlipperPluginWithDefaultPersistedState],
|
['DevicePlugin2', MockFlipperPluginWithDefaultPersistedState],
|
||||||
]),
|
]),
|
||||||
clientPlugins: new Map([
|
clientPlugins: new Map([
|
||||||
//$FlowFixMe: Just for testing
|
|
||||||
['ClientPlugin1', MockFlipperPluginWithDefaultPersistedState],
|
['ClientPlugin1', MockFlipperPluginWithDefaultPersistedState],
|
||||||
//$FlowFixMe: Just for testing
|
|
||||||
['ClientPlugin2', MockFlipperPluginWithDefaultPersistedState],
|
['ClientPlugin2', MockFlipperPluginWithDefaultPersistedState],
|
||||||
]),
|
]),
|
||||||
gatekeepedPlugins,
|
gatekeepedPlugins,
|
||||||
@@ -95,15 +91,11 @@ test('getPersistentPlugins with no plugins getting excluded', () => {
|
|||||||
test('getPersistentPlugins, where the plugins with exportPersistedState not getting excluded', () => {
|
test('getPersistentPlugins, where the plugins with exportPersistedState not getting excluded', () => {
|
||||||
const state: PluginsState = {
|
const state: PluginsState = {
|
||||||
devicePlugins: new Map([
|
devicePlugins: new Map([
|
||||||
//$FlowFixMe: Just for testing
|
|
||||||
['DevicePlugin1', MockFlipperPluginWithExportPersistedState],
|
['DevicePlugin1', MockFlipperPluginWithExportPersistedState],
|
||||||
//$FlowFixMe: Just for testing
|
|
||||||
['DevicePlugin2', MockFlipperPluginWithExportPersistedState],
|
['DevicePlugin2', MockFlipperPluginWithExportPersistedState],
|
||||||
]),
|
]),
|
||||||
clientPlugins: new Map([
|
clientPlugins: new Map([
|
||||||
//$FlowFixMe: Just for testing
|
|
||||||
['ClientPlugin1', MockFlipperPluginWithExportPersistedState],
|
['ClientPlugin1', MockFlipperPluginWithExportPersistedState],
|
||||||
//$FlowFixMe: Just for testing
|
|
||||||
['ClientPlugin2', MockFlipperPluginWithExportPersistedState],
|
['ClientPlugin2', MockFlipperPluginWithExportPersistedState],
|
||||||
]),
|
]),
|
||||||
gatekeepedPlugins: [],
|
gatekeepedPlugins: [],
|
||||||
@@ -123,15 +115,11 @@ test('getPersistentPlugins, where the plugins with exportPersistedState not gett
|
|||||||
test('getPersistentPlugins, where the non persistent plugins getting excluded', () => {
|
test('getPersistentPlugins, where the non persistent plugins getting excluded', () => {
|
||||||
const state: PluginsState = {
|
const state: PluginsState = {
|
||||||
devicePlugins: new Map([
|
devicePlugins: new Map([
|
||||||
//$FlowFixMe: Just for testing
|
|
||||||
['DevicePlugin1', MockFlipperPluginWithNoPersistedState],
|
['DevicePlugin1', MockFlipperPluginWithNoPersistedState],
|
||||||
//$FlowFixMe: Just for testing
|
|
||||||
['DevicePlugin2', MockFlipperPluginWithDefaultPersistedState],
|
['DevicePlugin2', MockFlipperPluginWithDefaultPersistedState],
|
||||||
]),
|
]),
|
||||||
clientPlugins: new Map([
|
clientPlugins: new Map([
|
||||||
//$FlowFixMe: Just for testing
|
|
||||||
['ClientPlugin1', MockFlipperPluginWithDefaultPersistedState],
|
['ClientPlugin1', MockFlipperPluginWithDefaultPersistedState],
|
||||||
//$FlowFixMe: Just for testing
|
|
||||||
['ClientPlugin2', MockFlipperPluginWithNoPersistedState],
|
['ClientPlugin2', MockFlipperPluginWithNoPersistedState],
|
||||||
]),
|
]),
|
||||||
gatekeepedPlugins: [],
|
gatekeepedPlugins: [],
|
||||||
@@ -146,15 +134,11 @@ test('getPersistentPlugins, where the non persistent plugins getting excluded',
|
|||||||
test('getActivePersistentPlugins, where the non persistent plugins getting excluded', () => {
|
test('getActivePersistentPlugins, where the non persistent plugins getting excluded', () => {
|
||||||
const state: PluginsState = {
|
const state: PluginsState = {
|
||||||
devicePlugins: new Map([
|
devicePlugins: new Map([
|
||||||
//$FlowFixMe: Just for testing
|
|
||||||
['DevicePlugin1', MockFlipperPluginWithNoPersistedState],
|
['DevicePlugin1', MockFlipperPluginWithNoPersistedState],
|
||||||
//$FlowFixMe: Just for testing
|
|
||||||
['DevicePlugin2', MockFlipperPluginWithDefaultPersistedState],
|
['DevicePlugin2', MockFlipperPluginWithDefaultPersistedState],
|
||||||
]),
|
]),
|
||||||
clientPlugins: new Map([
|
clientPlugins: new Map([
|
||||||
//$FlowFixMe: Just for testing
|
|
||||||
['ClientPlugin1', MockFlipperPluginWithDefaultPersistedState],
|
['ClientPlugin1', MockFlipperPluginWithDefaultPersistedState],
|
||||||
//$FlowFixMe: Just for testing
|
|
||||||
['ClientPlugin2', MockFlipperPluginWithNoPersistedState],
|
['ClientPlugin2', MockFlipperPluginWithNoPersistedState],
|
||||||
]),
|
]),
|
||||||
gatekeepedPlugins: [],
|
gatekeepedPlugins: [],
|
||||||
@@ -175,15 +159,11 @@ test('getActivePersistentPlugins, where the non persistent plugins getting exclu
|
|||||||
test('getActivePersistentPlugins, where the plugins not in pluginState gets excluded', () => {
|
test('getActivePersistentPlugins, where the plugins not in pluginState gets excluded', () => {
|
||||||
const state: PluginsState = {
|
const state: PluginsState = {
|
||||||
devicePlugins: new Map([
|
devicePlugins: new Map([
|
||||||
//$FlowFixMe: Just for testing
|
|
||||||
['DevicePlugin1', MockFlipperPluginWithDefaultPersistedState],
|
['DevicePlugin1', MockFlipperPluginWithDefaultPersistedState],
|
||||||
//$FlowFixMe: Just for testing
|
|
||||||
['DevicePlugin2', MockFlipperPluginWithDefaultPersistedState],
|
['DevicePlugin2', MockFlipperPluginWithDefaultPersistedState],
|
||||||
]),
|
]),
|
||||||
clientPlugins: new Map([
|
clientPlugins: new Map([
|
||||||
//$FlowFixMe: Just for testing
|
|
||||||
['ClientPlugin1', MockFlipperPluginWithDefaultPersistedState],
|
['ClientPlugin1', MockFlipperPluginWithDefaultPersistedState],
|
||||||
//$FlowFixMe: Just for testing
|
|
||||||
['ClientPlugin2', MockFlipperPluginWithDefaultPersistedState],
|
['ClientPlugin2', MockFlipperPluginWithDefaultPersistedState],
|
||||||
]),
|
]),
|
||||||
gatekeepedPlugins: [],
|
gatekeepedPlugins: [],
|
||||||
|
|||||||
@@ -5,13 +5,13 @@
|
|||||||
* @format
|
* @format
|
||||||
*/
|
*/
|
||||||
import {getInstance as getLogger} from '../fb-stubs/Logger';
|
import {getInstance as getLogger} from '../fb-stubs/Logger';
|
||||||
import type {Store, MiddlewareAPI} from '../reducers';
|
import type {Store, MiddlewareAPI} from '../reducers.tsx';
|
||||||
import type {DeviceExport} from '../devices/BaseDevice';
|
import type {DeviceExport} from '../devices/BaseDevice';
|
||||||
import type {State as PluginStates} from '../reducers/pluginStates';
|
import type {State as PluginStates} from '../reducers/pluginStates.tsx';
|
||||||
import type {PluginNotification} from '../reducers/notifications.js';
|
import type {PluginNotification} from '../reducers/notifications.tsx';
|
||||||
import type {ClientExport} from '../Client.js';
|
import type {ClientExport} from '../Client.js';
|
||||||
import type {State as PluginStatesState} from '../reducers/pluginStates';
|
import type {State as PluginStatesState} from '../reducers/pluginStates.tsx';
|
||||||
import {pluginKey} from '../reducers/pluginStates';
|
import {pluginKey} from '../reducers/pluginStates.tsx';
|
||||||
import {FlipperDevicePlugin, FlipperPlugin, callClient} from '../plugin.js';
|
import {FlipperDevicePlugin, FlipperPlugin, callClient} from '../plugin.js';
|
||||||
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';
|
||||||
|
|||||||
@@ -6,8 +6,8 @@
|
|||||||
*/
|
*/
|
||||||
import type {FlipperPlugin, FlipperDevicePlugin} from 'flipper';
|
import type {FlipperPlugin, FlipperDevicePlugin} from 'flipper';
|
||||||
import {serialize} from './serialization';
|
import {serialize} from './serialization';
|
||||||
import type {State as PluginStatesState} from '../reducers/pluginStates';
|
import type {State as PluginStatesState} from '../reducers/pluginStates.tsx';
|
||||||
import type {Store} from '../reducers';
|
import type {Store} from '../reducers/index.tsx';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import type {ExportType} from './exportData';
|
import type {ExportType} from './exportData';
|
||||||
import {fetchMetadata, pluginsClassMap} from './exportData';
|
import {fetchMetadata, pluginsClassMap} from './exportData';
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import type {ProcessConfig} from './processConfig.js';
|
import type {ProcessConfig} from './processConfig.js';
|
||||||
import type {Store} from '../reducers/index.js';
|
import type {Store} from '../reducers/index.tsx';
|
||||||
|
|
||||||
export function initLauncherHooks(config: ProcessConfig, store: Store) {
|
export function initLauncherHooks(config: ProcessConfig, store: Store) {
|
||||||
if (config.launcherMsg) {
|
if (config.launcherMsg) {
|
||||||
|
|||||||
@@ -4,10 +4,10 @@
|
|||||||
* LICENSE file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
* @format
|
* @format
|
||||||
*/
|
*/
|
||||||
import type {Store} from '../reducers/index.js';
|
import type {Store} from '../reducers/index.tsx';
|
||||||
import {FlipperPlugin, FlipperDevicePlugin} from '../plugin.js';
|
import {FlipperPlugin, FlipperDevicePlugin} from '../plugin.js';
|
||||||
import type BaseDevice from '../devices/BaseDevice.js';
|
import type BaseDevice from '../devices/BaseDevice.js';
|
||||||
import {setPluginState} from '../reducers/pluginStates.js';
|
import {setPluginState} from '../reducers/pluginStates.tsx';
|
||||||
import {getPersistedState} from '../utils/pluginUtils.js';
|
import {getPersistedState} from '../utils/pluginUtils.js';
|
||||||
|
|
||||||
export function registerDeviceCallbackOnPlugins(
|
export function registerDeviceCallbackOnPlugins(
|
||||||
|
|||||||
@@ -6,9 +6,9 @@
|
|||||||
*/
|
*/
|
||||||
import type BaseDevice from '../devices/BaseDevice.js';
|
import type BaseDevice from '../devices/BaseDevice.js';
|
||||||
import {FlipperDevicePlugin, FlipperPlugin} from '../plugin.js';
|
import {FlipperDevicePlugin, FlipperPlugin} from '../plugin.js';
|
||||||
import type {State as PluginStatesState} from '../reducers/pluginStates.js';
|
import type {State as PluginStatesState} from '../reducers/pluginStates.tsx';
|
||||||
import {pluginsClassMap} from './exportData.js';
|
import {pluginsClassMap} from './exportData.js';
|
||||||
import type {State as PluginsState} from '../reducers/plugins.js';
|
import type {State as PluginsState} from '../reducers/plugins.tsx';
|
||||||
import type {PluginDefinition} from '../dispatcher/plugins';
|
import type {PluginDefinition} from '../dispatcher/plugins';
|
||||||
|
|
||||||
export function getPluginKey(
|
export function getPluginKey(
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
* LICENSE file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
* @format
|
* @format
|
||||||
*/
|
*/
|
||||||
import type {State} from '../reducers/index';
|
import {State} from '../reducers/index.tsx';
|
||||||
import type {DeviceExport} from '../devices/BaseDevice';
|
import type {DeviceExport} from '../devices/BaseDevice';
|
||||||
|
|
||||||
export const stateSanitizer = (state: State) => {
|
export const stateSanitizer = (state: State) => {
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"module": "system",
|
"module": "system",
|
||||||
"lib": ["es7", "dom"],
|
"lib": ["es7", "dom"],
|
||||||
|
"target": "es6",
|
||||||
"removeComments": true,
|
"removeComments": true,
|
||||||
"preserveConstEnums": true,
|
"preserveConstEnums": true,
|
||||||
"outFile": "../../built/local/tsc.js",
|
"outFile": "../../built/local/tsc.js",
|
||||||
|
|||||||
50
yarn.lock
50
yarn.lock
@@ -1104,6 +1104,18 @@
|
|||||||
"@types/istanbul-lib-coverage" "*"
|
"@types/istanbul-lib-coverage" "*"
|
||||||
"@types/istanbul-lib-report" "*"
|
"@types/istanbul-lib-report" "*"
|
||||||
|
|
||||||
|
"@types/jest-diff@*":
|
||||||
|
version "20.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/jest-diff/-/jest-diff-20.0.1.tgz#35cc15b9c4f30a18ef21852e255fdb02f6d59b89"
|
||||||
|
integrity sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA==
|
||||||
|
|
||||||
|
"@types/jest@^24.0.16":
|
||||||
|
version "24.0.16"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.16.tgz#8d3e406ec0f0dc1688d6711af3062ff9bd428066"
|
||||||
|
integrity sha512-JrAiyV+PPGKZzw6uxbI761cHZ0G7QMOHXPhtSpcl08rZH6CswXaaejckn3goFKmF7M3nzEoJ0lwYCbqLMmjziQ==
|
||||||
|
dependencies:
|
||||||
|
"@types/jest-diff" "*"
|
||||||
|
|
||||||
"@types/json-schema@^7.0.3":
|
"@types/json-schema@^7.0.3":
|
||||||
version "7.0.3"
|
version "7.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636"
|
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636"
|
||||||
@@ -1115,9 +1127,9 @@
|
|||||||
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
|
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
|
||||||
|
|
||||||
"@types/node@*":
|
"@types/node@*":
|
||||||
version "12.6.8"
|
version "12.6.9"
|
||||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.8.tgz#e469b4bf9d1c9832aee4907ba8a051494357c12c"
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.9.tgz#ffeee23afdc19ab16e979338e7b536fdebbbaeaf"
|
||||||
integrity sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg==
|
integrity sha512-+YB9FtyxXGyD54p8rXwWaN1EWEyar5L58GlGWgtH2I9rGmLGBQcw63+0jw+ujqVavNuO47S1ByAjm9zdHMnskw==
|
||||||
|
|
||||||
"@types/node@^10.12.18":
|
"@types/node@^10.12.18":
|
||||||
version "10.14.13"
|
version "10.14.13"
|
||||||
@@ -1136,7 +1148,7 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@types/react" "*"
|
"@types/react" "*"
|
||||||
|
|
||||||
"@types/react-redux@^7.1.0":
|
"@types/react-redux@^7.1.1":
|
||||||
version "7.1.1"
|
version "7.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.1.tgz#eb01e89cf71cad77df9f442b819d5db692b997cb"
|
resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.1.tgz#eb01e89cf71cad77df9f442b819d5db692b997cb"
|
||||||
integrity sha512-owqNahzE8en/jR4NtrUJDJya3tKru7CIEGSRL/pVS84LtSCdSoT7qZTkrbBd3S4Lp11sAp+7LsvxIeONJVKMnw==
|
integrity sha512-owqNahzE8en/jR4NtrUJDJya3tKru7CIEGSRL/pVS84LtSCdSoT7qZTkrbBd3S4Lp11sAp+7LsvxIeONJVKMnw==
|
||||||
@@ -1146,19 +1158,33 @@
|
|||||||
hoist-non-react-statics "^3.3.0"
|
hoist-non-react-statics "^3.3.0"
|
||||||
redux "^4.0.0"
|
redux "^4.0.0"
|
||||||
|
|
||||||
"@types/react@*", "@types/react@^16.8.21":
|
"@types/react@*", "@types/react@^16.8.24":
|
||||||
version "16.8.23"
|
version "16.8.24"
|
||||||
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.8.23.tgz#ec6be3ceed6353a20948169b6cb4c97b65b97ad2"
|
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.8.24.tgz#8d1ea1fcbfa214220da3d3c04e506f1077b0deac"
|
||||||
integrity sha512-abkEOIeljniUN9qB5onp++g0EY38h7atnDHxwKUFz1r3VH1+yG1OKi2sNPTyObL40goBmfKFpdii2lEzwLX1cA==
|
integrity sha512-VpFHUoD37YNY2+lr/+c7qL/tZsIU/bKuskUF3tmGUArbxIcQdb5j3zvo4cuuzu2A6UaVmVn7sJ4PgWYNFEBGzg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/prop-types" "*"
|
"@types/prop-types" "*"
|
||||||
csstype "^2.2.0"
|
csstype "^2.2.0"
|
||||||
|
|
||||||
|
"@types/redux-persist@^4.3.1":
|
||||||
|
version "4.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/redux-persist/-/redux-persist-4.3.1.tgz#aa4c876859e0bea5155e5f7980e5b8c4699dc2e6"
|
||||||
|
integrity sha1-qkyHaFngvqUVXl95gOW4xGmdwuY=
|
||||||
|
dependencies:
|
||||||
|
redux-persist "*"
|
||||||
|
|
||||||
"@types/stack-utils@^1.0.1":
|
"@types/stack-utils@^1.0.1":
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
|
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
|
||||||
integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==
|
integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==
|
||||||
|
|
||||||
|
"@types/uuid@^3.4.5":
|
||||||
|
version "3.4.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-3.4.5.tgz#d4dc10785b497a1474eae0ba7f0cb09c0ddfd6eb"
|
||||||
|
integrity sha512-MNL15wC3EKyw1VLF+RoVO4hJJdk9t/Hlv3rt1OL65Qvuadm4BYo6g9ZJQqoq7X8NBFSsQXgAujWciovh2lpVjA==
|
||||||
|
dependencies:
|
||||||
|
"@types/node" "*"
|
||||||
|
|
||||||
"@types/yargs@^12.0.2", "@types/yargs@^12.0.9":
|
"@types/yargs@^12.0.2", "@types/yargs@^12.0.9":
|
||||||
version "12.0.12"
|
version "12.0.12"
|
||||||
resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-12.0.12.tgz#45dd1d0638e8c8f153e87d296907659296873916"
|
resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-12.0.12.tgz#45dd1d0638e8c8f153e87d296907659296873916"
|
||||||
@@ -2598,11 +2624,15 @@ cssstyle@^1.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
cssom "0.3.x"
|
cssom "0.3.x"
|
||||||
|
|
||||||
csstype@^2.2.0, csstype@^2.5.2:
|
csstype@^2.2.0:
|
||||||
version "2.6.6"
|
version "2.6.6"
|
||||||
resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.6.tgz#c34f8226a94bbb10c32cc0d714afdf942291fc41"
|
resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.6.tgz#c34f8226a94bbb10c32cc0d714afdf942291fc41"
|
||||||
integrity sha512-RpFbQGUE74iyPgvr46U9t1xoQBM8T4BL8SxrN66Le2xYAPSaDJJKeztV3awugusb3g3G9iL8StmkBBXhcbbXhg==
|
integrity sha512-RpFbQGUE74iyPgvr46U9t1xoQBM8T4BL8SxrN66Le2xYAPSaDJJKeztV3awugusb3g3G9iL8StmkBBXhcbbXhg==
|
||||||
|
|
||||||
|
csstype@^2.5.2:
|
||||||
|
version "2.5.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.5.6.tgz#2ae1db2319642d8b80a668d2d025c6196071e788"
|
||||||
|
|
||||||
currently-unhandled@^0.4.1:
|
currently-unhandled@^0.4.1:
|
||||||
version "0.4.1"
|
version "0.4.1"
|
||||||
resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
|
resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
|
||||||
@@ -7200,7 +7230,7 @@ redux-mock-store@^1.5.3:
|
|||||||
dependencies:
|
dependencies:
|
||||||
lodash.isplainobject "^4.0.6"
|
lodash.isplainobject "^4.0.6"
|
||||||
|
|
||||||
redux-persist@^5.10.0:
|
redux-persist@*, redux-persist@^5.10.0:
|
||||||
version "5.10.0"
|
version "5.10.0"
|
||||||
resolved "https://registry.yarnpkg.com/redux-persist/-/redux-persist-5.10.0.tgz#5d8d802c5571e55924efc1c3a9b23575283be62b"
|
resolved "https://registry.yarnpkg.com/redux-persist/-/redux-persist-5.10.0.tgz#5d8d802c5571e55924efc1c3a9b23575283be62b"
|
||||||
integrity sha512-sSJAzNq7zka3qVHKce1hbvqf0Vf5DuTVm7dr4GtsqQVOexnrvbV47RWFiPxQ8fscnyiuWyD2O92DOxPl0tGCRg==
|
integrity sha512-sSJAzNq7zka3qVHKce1hbvqf0Vf5DuTVm7dr4GtsqQVOexnrvbV47RWFiPxQ8fscnyiuWyD2O92DOxPl0tGCRg==
|
||||||
|
|||||||
Reference in New Issue
Block a user