read infos from package.json
Summary: Adding the properties from a plugin's `package.json` as static properties to the class. The name from `package.json` is used as it's `id`. This allows us in the future to add meta information about a plugin to it's package.json and still use the data inside the app. Reviewed By: priteshrnandgaonkar Differential Revision: D13417288 fbshipit-source-id: 3d0a62d4cb0115153cce1aaee677b9680fefebf4
This commit is contained in:
committed by
Facebook Github Bot
parent
e23da69db9
commit
6ffc027051
@@ -7,4 +7,6 @@
|
||||
|
||||
import {FlipperPlugin} from '../../plugin.js';
|
||||
|
||||
export default class extends FlipperPlugin {}
|
||||
export default class extends FlipperPlugin {
|
||||
static id = 'Static ID';
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ import reducers from '../../reducers/index.js';
|
||||
import Logger from '../../fb-stubs/Logger.js';
|
||||
import configureStore from 'redux-mock-store';
|
||||
import {TEST_PASSING_GK, TEST_FAILING_GK} from '../../fb-stubs/GK';
|
||||
import TestPlugin from './TestPlugin';
|
||||
|
||||
const mockStore = configureStore([])(reducers(undefined, {type: 'INIT'}));
|
||||
const logger = new Logger();
|
||||
@@ -111,11 +112,17 @@ test('requirePlugin returns null for invalid requires', () => {
|
||||
});
|
||||
|
||||
test('requirePlugin loads plugin', () => {
|
||||
const name = 'pluginID';
|
||||
const homepage = 'https://fb.workplace.com/groups/230455004101832/';
|
||||
const plugin = requirePlugin(require)({
|
||||
name: 'pluginID',
|
||||
name,
|
||||
homepage,
|
||||
out: path.join(__dirname, 'TestPlugin.js'),
|
||||
// $FlowFixMe Electron require returns default exports wrapped in an object
|
||||
}).default;
|
||||
|
||||
});
|
||||
// $FlowFixMe
|
||||
expect(plugin.prototype).toBeInstanceOf(FlipperPlugin);
|
||||
// $FlowFixMe
|
||||
expect(plugin.homepage).toBe(homepage);
|
||||
// $FlowFixMe
|
||||
expect(plugin.id).toBe(TestPlugin.id);
|
||||
});
|
||||
|
||||
@@ -32,6 +32,7 @@ export default (store: Store, logger: Logger) => {
|
||||
window.Flipper = Flipper;
|
||||
|
||||
const disabled = checkDisabled();
|
||||
|
||||
const initialPlugins: Array<
|
||||
Class<FlipperPlugin<> | FlipperDevicePlugin<>>,
|
||||
> = [...getBundledPlugins(), ...getDynamicPlugins()]
|
||||
@@ -113,10 +114,27 @@ export function requirePlugin(
|
||||
pluginDefinition: PluginDefinition,
|
||||
): ?Class<FlipperPlugin<> | FlipperDevicePlugin<>> => {
|
||||
try {
|
||||
const plugin = requireFunction(pluginDefinition.out);
|
||||
let plugin = requireFunction(pluginDefinition.out);
|
||||
if (plugin.default) {
|
||||
plugin = plugin.default;
|
||||
}
|
||||
if (!plugin.prototype instanceof FlipperBasePlugin) {
|
||||
throw new Error(`Plugin ${plugin.name} is not a FlipperBasePlugin`);
|
||||
}
|
||||
|
||||
// set values from package.json as static variables on class
|
||||
Object.keys(pluginDefinition).forEach(key => {
|
||||
if (key === 'name') {
|
||||
plugin.id = plugin.id || pluginDefinition.name;
|
||||
} else if (key === 'id') {
|
||||
throw new Error(
|
||||
'Field "id" not allowed in package.json. The plugin\'s name will be used as ID"',
|
||||
);
|
||||
} else {
|
||||
plugin[key] = plugin[key] || pluginDefinition[key];
|
||||
}
|
||||
});
|
||||
|
||||
return plugin;
|
||||
} catch (e) {
|
||||
console.error(pluginDefinition, e);
|
||||
|
||||
Reference in New Issue
Block a user