import { Metric } from "../Metrics/Metric.cjs"; //#region src/Plugin/Plugin.d.ts /** * Plugin * * The `Plugin` interface allows developers to compose custom * functionality for their `Metrics` * * ```typescript * class LoggerPlugin extends Plugin { * protected override start(metric: T) { * console.log(metric.name, "Started!") * } * * protected override stop(metric: T) { * console.log(metric.name, "Stopped!") * } * } * * * const myMetric = new Metric("My Metric", { * logger: new LoggerPlugin() * }); * ``` */ declare class Plugin = Metric> { private registered; /** * Register * * Binds a plugin to the provided Metric. Plugins are bound using the * Metric's underlying event emitter. */ register(metric: T): void; /** * Validate Event * * Returns true if a constructor method on an extending class is * a valid event emitted by the underlying metric */ private validateEvent; /** * Start * * An event emitted each time the provided metric calls `start()` */ protected start(_metric: T): void; /** * Stop * * An event emitted each time the provided metric calls `stop()` */ protected stop(_metric: T): void; /** * Reset * * An event emitted each time the provided metric calls `reset()` */ protected reset(_metric: T): void; /** * Success * * An event emitted each time the provided metric calls `succeed()` */ protected success(_metric: T): void; /** * Failure * * An event emitted each time the provided metric calls `fail()` */ protected failure(_metric: T): void; /** * To JSON * * Modifies the return value of the `Plugin` interface when passed * to `JSON.stringify` */ protected toJSON(): {}; } //#endregion export { Plugin };