/usr/share/grafana/public/app/features/plugins
import type { AppPluginConfig, PluginExtensionAddedLinkConfig, PluginExtensionExposedComponentConfig, PluginExtensionAddedComponentConfig, } from '@grafana/data'; import { contextSrv } from 'app/core/services/context_srv'; import { getPluginSettings } from 'app/features/plugins/pluginSettings'; import { pluginImporter } from './importer/pluginImporter'; export type PluginPreloadResult = { pluginId: string; error?: unknown; exposedComponentConfigs: PluginExtensionExposedComponentConfig[]; addedComponentConfigs?: PluginExtensionAddedComponentConfig[]; addedLinkConfigs?: PluginExtensionAddedLinkConfig[]; }; const preloadPromises = new Map<string, Promise<void>>(); export const clearPreloadedPluginsCache = () => { preloadPromises.clear(); }; export async function preloadPlugins(apps: AppPluginConfig[] = []) { // Create preload promises for each app, reusing existing promises if already loading const promises = apps.map((app) => { if (!preloadPromises.has(app.id)) { preloadPromises.set(app.id, preload(app)); } return preloadPromises.get(app.id)!; }); await Promise.all(promises); } async function preload(config: AppPluginConfig): Promise<void> { const showErrorAlert = contextSrv.user.orgRole !== ''; try { const meta = await getPluginSettings(config.id, { showErrorAlert }); await pluginImporter.importApp(meta); } catch (error) { if (!showErrorAlert) { return; } console.error(`[Plugins] Failed to preload plugin: ${config.path} (version: ${config.version})`, error); } }
.
Edit
..
Edit
admin
Edit
built_in_plugins.ts
Edit
cdn
Edit
components
Edit
datasource_srv.test.ts
Edit
datasource_srv.ts
Edit
extensions
Edit
importPanelPlugin.ts
Edit
importer
Edit
loader
Edit
pluginPreloader.test.ts
Edit
pluginPreloader.ts
Edit
pluginSettings.test.ts
Edit
pluginSettings.ts
Edit
routes.tsx
Edit
sandbox
Edit
utils.test.ts
Edit
utils.ts
Edit