/** * @since 2.0.0 */ import type { LazyArg } from "./Function.js" import * as internal from "./internal/metric/hook.js" import type * as MetricKey from "./MetricKey.js" import type * as MetricState from "./MetricState.js" import type { Pipeable } from "./Pipeable.js" import type * as Types from "./Types.js" /** * @since 2.0.0 * @category symbols */ export const MetricHookTypeId: unique symbol = internal.MetricHookTypeId /** * @since 2.0.0 * @category symbols */ export type MetricHookTypeId = typeof MetricHookTypeId /** * @since 2.0.0 * @category models */ export interface MetricHook extends MetricHook.Variance, Pipeable { get(): Out update(input: In): void modify(input: In): void } /** * @since 2.0.0 */ export declare namespace MetricHook { /** * @since 2.0.0 * @category models */ export type Root = MetricHook /** * @since 2.0.0 * @category models */ export type Untyped = MetricHook /** * @since 2.0.0 * @category models */ export type Counter = MetricHook> /** * @since 2.0.0 * @category models */ export type Gauge = MetricHook> /** * @since 2.0.0 * @category models */ export type Frequency = MetricHook /** * @since 2.0.0 * @category models */ export type Histogram = MetricHook /** * @since 2.0.0 * @category models */ export type Summary = MetricHook /** * @since 2.0.0 * @category models */ export interface Variance { readonly [MetricHookTypeId]: { readonly _In: Types.Contravariant readonly _Out: Types.Covariant } } } /** * @since 2.0.0 * @category constructors */ export const make: (options: { readonly get: LazyArg readonly update: (input: In) => void readonly modify: (input: In) => void }) => MetricHook = internal.make /** * @since 2.0.0 * @category constructors */ export const counter: (key: MetricKey.MetricKey.Counter) => MetricHook.Counter = internal.counter /** * @since 2.0.0 * @category constructors */ export const frequency: (_key: MetricKey.MetricKey.Frequency) => MetricHook.Frequency = internal.frequency /** * @since 2.0.0 * @category constructors */ export const gauge: { /** * @since 2.0.0 * @category constructors */ (key: MetricKey.MetricKey.Gauge, startAt: number): MetricHook.Gauge /** * @since 2.0.0 * @category constructors */ (key: MetricKey.MetricKey.Gauge, startAt: bigint): MetricHook.Gauge } = internal.gauge /** * @since 2.0.0 * @category constructors */ export const histogram: (key: MetricKey.MetricKey.Histogram) => MetricHook.Histogram = internal.histogram /** * @since 2.0.0 * @category constructors */ export const summary: (key: MetricKey.MetricKey.Summary) => MetricHook.Summary = internal.summary /** * @since 2.0.0 * @category utils */ export const onUpdate: { /** * @since 2.0.0 * @category utils */ (f: (input: In) => void): (self: MetricHook) => MetricHook /** * @since 2.0.0 * @category utils */ (self: MetricHook, f: (input: In) => void): MetricHook } = internal.onUpdate /** * @since 3.6.5 * @category utils */ export const onModify: { /** * @since 3.6.5 * @category utils */ (f: (input: In) => void): (self: MetricHook) => MetricHook /** * @since 3.6.5 * @category utils */ (self: MetricHook, f: (input: In) => void): MetricHook } = internal.onModify