| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- // See: packages/grafana-ui/src/types/plugin.ts
- interface PluginJSONSchema {
- id: string;
- info: PluginMetaInfo;
- }
- interface PluginMetaInfo {
- version: string;
- }
- export const validatePluginJson = (pluginJson: any) => {
- if (!pluginJson.id) {
- throw new Error('Plugin id is missing in plugin.json');
- }
- if (!pluginJson.info) {
- throw new Error('Plugin info node is missing in plugin.json');
- }
- if (!pluginJson.info.version) {
- throw new Error('Plugin info.version is missing in plugin.json');
- }
- const types = ['panel', 'datasource', 'app'];
- const type = pluginJson.type;
- if (!types.includes(type)) {
- throw new Error('Invalid plugin type in plugin.json: ' + type);
- }
- if (!pluginJson.id.endsWith('-' + type)) {
- throw new Error('[plugin.json] id should end with: -' + type);
- }
- };
- export const getPluginJson = (path: string): PluginJSONSchema => {
- let pluginJson;
- try {
- pluginJson = require(path);
- } catch (e) {
- throw new Error('Unable to find: ' + path);
- }
- validatePluginJson(pluginJson);
- return pluginJson as PluginJSONSchema;
- };
|