import { VegaSlimmer } from '../../../vega-slimmer/vega-slimmer-core';
export declare type PublicAPIRuntimeMetricsDefinition = {
  payloadKey: string;
  payloadDescription: string;
  canAccept: (className: string, methodName: string, args?: unknown[]) => boolean;
  payloadValue: (args?: unknown[]) => boolean;
};
/**
 * The `VegaPublicAPIRuntimeMetricsSlimmerBase` class is used for sending
 * telemetry data to a telemetry service based on defined usage metrics for a public api.
 */
export declare class VegaPublicAPIRuntimeMetricsSlimmerBase extends VegaSlimmer {
  private readonly className;
  private readonly usageDefinitions;
  originalMethodName: string;
  /**
   * The constructor initializes a private readonly property with an optional array of
   * PublicAPIRuntimeMetricsDefinition.
   *
   * @param {string} [className] - The parameter show the class name of public api.
   * @param {PublicAPIRuntimeMetricsDefinition[]} [usageDefinitions] - The `usageDefinitions`
   * parameter in the constructor is of type `PublicAPIRuntimeMetricsDefinition<T>[]`, which is an
   * array of `ComponentUsageRuntimeMetricsDefinition` objects. This parameter is optional as it is
   * marked with a question mark `?`, meaning it can be omitted when creating an instance of
   */
  constructor(className: string, usageDefinitions: PublicAPIRuntimeMetricsDefinition[]);
  /**
   * register the observer when the slimmer method called
   *
   * @param {unknown[]} [args] - The `args` parameter passed in when the slimmer method is executed
   */
  sendPublicAPIPayloadToTelemetry(args: unknown[]): void;
  /**
   * The function `getPublicAPIMetricsPayload` generates a payload containing public api
   * metrics data.
   * The `CurrentlyInvokedMethodName` is a public API method name, it comes from the `InjectVegaTelemetrySlimmer` definition and assignment
   *
   * @param {unknown[]} [args] - The `args` parameter passed in when the slimmer method is executed
   * @returns {Nullable<Record<string, unknown>>} The `getPublicAPIMetricsPayload` method returns an object with the following
   * structure:
   * {
   * 	publicAPIName: string, // The public api name
   * 	data: { // An object containing payload data with keys and boolean values
   * 		'waitForVegaRenderFinished': true,
   * }
   */
  private getPublicAPIMetricsPayload;
}
