@grafana/plugin-meta-extractor
v0.0.2
Published
Extract meta information from a Grafana plugin source code.
Downloads
1,289
Readme
Grafana / Plugin Meta Extractor
@grafana/plugin-meta-extractor
is a cli tool that can be used to extract meta-information from the source code of a Grafana plugin. It is used to generate plugin metadata without the need for manual intervention, which is then used by the Grafana application to understand features or functionalities a plugin supports or uses.
Install
npm install @grafana/plugin-meta-extractor --save-dev
Usage
With Webpack
The package exposes a webpack plugin that can be used to generate plugin meta-information on every build based on the source code. The plugin adds additional information to the plugin.json
file by overriding the generated
property in the JSON.
// webpack.config.ts
// -----------------
import { GrafanaPluginMetaExtractor } from '@grafana/plugin-meta-extractor';
export default {
// ...
plugins: [
new GrafanaPluginMetaExtractor(),
// ...
],
};
In code
The package exposes the methods for extracting the meta-data so they can be used manually:
import { extractPluginMeta } from '@grafana/plugin-meta-extractor';
const entryPoint = `${PLUGIN_ROOT}/src/module.ts`;
const pluginMeta = extractPluginMeta(entryPoint);
CLI
By calling the binary against a (module.ts|tsx) file, the package will print out the extracted meta-data to the console.
# Run local build
./dist/bin/run.js ~/my-grafana-plugin/src/module.ts
# Run latest remote version
npx @grafana/plugin-meta-extractor ~/my-grafana-plugin/src/module.ts
Returned data format
The returned meta-data is in the following format:
{
extensions: Array<{
type: "link" | "component",
extensionPointId: string,
title: string,
description: string
}>
}
Plugin support
This package requires the module.(ts|tsx)
to be in a certain format to be able to parse it (we are planning to improve on this in the future). The method calls for registering extensions have to be in the module.(ts|tsx)
, and they need to be called on the AppPlugin
instance in a "chained" manner:
// src/module.ts
export const plugin = new AppPlugin<{}>()
.setRootPage(App)
.configureExtensionLink<PluginExtensionPanelContext>({
// ...
})
.configureExtensionLink<PluginExtensionPanelContext>({
// ...
});
Contributing
We are always grateful for contributions! See CONTRIBUTING.md for more information.