create-grafana-plugin 0.2.3

CLI tool to scaffold production-ready Grafana plugin projects
Documentation
// @managed by create-grafana-plugin — do not edit
{%- if plugin_type == "panel" %}
import { PanelPlugin, type PanelProps } from '@grafana/data';
import type React from 'react';

function {{ pascal_case_name }}Panel(_props: PanelProps): React.ReactElement {
  return (
    <div className="panel-empty-state">
      <p>{{ plugin_description }}</p>
    </div>
  );
}

export const plugin = new PanelPlugin({{ pascal_case_name }}Panel);
{%- elif plugin_type == "datasource" %}
import {
  DataSourcePlugin,
  DataSourceApi,
  type DataQueryRequest,
  type DataQueryResponse,
  type DataSourceInstanceSettings,
} from '@grafana/data';
import type { {{ pascal_case_name }}JsonData, {{ pascal_case_name }}Query } from './types';

class {{ pascal_case_name }}DataSource extends DataSourceApi<
  {{ pascal_case_name }}Query,
  {{ pascal_case_name }}JsonData
> {
  constructor(instanceSettings: DataSourceInstanceSettings) {
    super(instanceSettings);
  }

  query(request: DataQueryRequest<{{ pascal_case_name }}Query>): Promise<DataQueryResponse> {
    void request;
    return Promise.resolve({ data: [] });
  }

  async testDatasource(): Promise<{ status: string; message: string }> {
    return { status: 'success', message: 'Data source is working' };
  }
}

export const plugin = new DataSourcePlugin({{ pascal_case_name }}DataSource);
{%- else %}
import { AppPlugin, type AppRootProps } from '@grafana/data';
import type React from 'react';

function {{ pascal_case_name }}RootPage(_props: AppRootProps): React.ReactElement {
  return (
    <div>
      <p>{{ plugin_description }}</p>
    </div>
  );
}

export const plugin = new AppPlugin<{}>().setRootPage({{ pascal_case_name }}RootPage);
{%- endif %}