import { NonEmptyArray } from "./types.js"; export type NoLabels = Record; export type LabelsGeneric = Record; export type LabelKeys = Extract; export type CollectFn = (metric: Gauge) => void; export interface Gauge { inc: NoLabels extends Labels ? (value?: number) => void : (labels: Labels, value?: number) => void; dec: NoLabels extends Labels ? (value?: number) => void : (labels: Labels, value?: number) => void; set: NoLabels extends Labels ? (value: number) => void : (labels: Labels, value: number) => void; collect?(): void; reset(): void; } export interface GaugeExtra extends Omit, "collect"> { addCollect(collectFn: CollectFn): void; } export interface Histogram { startTimer(): NoLabels extends Labels ? () => number : (labels: Labels) => number; startTimer>(labels?: NoLabels extends Labels ? never : L): keyof Omit extends never ? () => number : (labels: Omit) => number; observe: NoLabels extends Labels ? (value: number) => void : (labels: Labels, value: number) => void; reset(): void; } export interface AvgMinMax { addGetValuesFn(getValuesFn: () => number[]): void; set: NoLabels extends Labels ? (values: number[]) => void : (labels: Labels, values: number[]) => void; } export interface Counter { inc: NoLabels extends Labels ? (value?: number) => void : (labels: Labels, value?: number) => void; } export type GaugeConfig = { name: string; help: string; } & (NoLabels extends Labels ? { labelNames?: never; } : { labelNames: NonEmptyArray>; }); export type HistogramConfig = GaugeConfig & { buckets: number[]; }; export type AvgMinMaxConfig = GaugeConfig; export type CounterConfig = GaugeConfig; export type StaticConfig = { name: GaugeConfig["name"]; help: GaugeConfig["help"]; value: Record, string>; }; export interface MetricsRegister { gauge(config: GaugeConfig): Gauge; histogram(config: HistogramConfig): Histogram; counter(config: CounterConfig): Counter; } export interface MetricsRegisterExtra extends MetricsRegister { gauge(config: GaugeConfig): GaugeExtra; } export interface MetricsRegisterCustom extends MetricsRegisterExtra { avgMinMax(config: AvgMinMaxConfig): AvgMinMax; static(config: StaticConfig): void; } //# sourceMappingURL=metrics.d.ts.map