2021-11-19 06:42:26 -06:00
|
|
|
import { GrafanaPlugin, PanelPluginMeta, PluginType } from '@grafana/data';
|
2022-04-22 08:33:13 -05:00
|
|
|
|
|
|
|
import { importPanelPluginFromMeta } from './importPanelPlugin';
|
2021-11-19 06:42:26 -06:00
|
|
|
import { getPluginSettings } from './pluginSettings';
|
|
|
|
import { importAppPlugin, importDataSourcePlugin } from './plugin_loader';
|
|
|
|
|
|
|
|
export async function loadPlugin(pluginId: string): Promise<GrafanaPlugin> {
|
|
|
|
const info = await getPluginSettings(pluginId);
|
|
|
|
let result: GrafanaPlugin | undefined;
|
|
|
|
|
|
|
|
if (info.type === PluginType.app) {
|
|
|
|
result = await importAppPlugin(info);
|
|
|
|
}
|
|
|
|
if (info.type === PluginType.datasource) {
|
|
|
|
result = await importDataSourcePlugin(info);
|
|
|
|
}
|
|
|
|
if (info.type === PluginType.panel) {
|
|
|
|
const panelPlugin = await importPanelPluginFromMeta(info as PanelPluginMeta);
|
2022-02-02 06:02:32 -06:00
|
|
|
result = panelPlugin as unknown as GrafanaPlugin;
|
2021-11-19 06:42:26 -06:00
|
|
|
}
|
|
|
|
if (info.type === PluginType.renderer) {
|
|
|
|
result = { meta: info } as GrafanaPlugin;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!result) {
|
|
|
|
throw new Error('Unknown Plugin type: ' + info.type);
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|