UNPKG

veffect

Version:

powerful TypeScript validation library built on the robust foundation of Effect combining exceptional type safety, high performance, and developer experience. Taking inspiration from Effect's functional principles, VEffect delivers a balanced approach tha

217 lines (198 loc) 5.55 kB
/** * @since 2.0.0 */ import type * as Duration from "./Duration.js" import type * as Equal from "./Equal.js" import * as internal from "./internal/metric/key.js" import type * as MetricBoundaries from "./MetricBoundaries.js" import type * as MetricKeyType from "./MetricKeyType.js" import type * as MetricLabel from "./MetricLabel.js" import type * as Option from "./Option.js" import type { Pipeable } from "./Pipeable.js" import type * as Types from "./Types.js" /** * @since 2.0.0 * @category symbols */ export const MetricKeyTypeId: unique symbol = internal.MetricKeyTypeId /** * @since 2.0.0 * @category symbols */ export type MetricKeyTypeId = typeof MetricKeyTypeId /** * A `MetricKey` is a unique key associated with each metric. The key is based * on a combination of the metric type, the name and tags associated with the * metric, an optional description of the key, and any other information to * describe a metric, such as the boundaries of a histogram. In this way, it is * impossible to ever create different metrics with conflicting keys. * * @since 2.0.0 * @category models */ export interface MetricKey<out Type extends MetricKeyType.MetricKeyType<any, any>> extends MetricKey.Variance<Type>, Equal.Equal, Pipeable { readonly name: string readonly keyType: Type readonly description: Option.Option<string> readonly tags: ReadonlyArray<MetricLabel.MetricLabel> } /** * @since 2.0.0 */ export declare namespace MetricKey { /** * @since 2.0.0 * @category models */ export type Untyped = MetricKey<any> /** * @since 2.0.0 * @category models */ export type Counter<A extends (number | bigint)> = MetricKey<MetricKeyType.MetricKeyType.Counter<A>> /** * @since 2.0.0 * @category models */ export type Gauge<A extends (number | bigint)> = MetricKey<MetricKeyType.MetricKeyType.Gauge<A>> /** * @since 2.0.0 * @category models */ export type Frequency = MetricKey<MetricKeyType.MetricKeyType.Frequency> /** * @since 2.0.0 * @category models */ export type Histogram = MetricKey<MetricKeyType.MetricKeyType.Histogram> /** * @since 2.0.0 * @category models */ export type Summary = MetricKey<MetricKeyType.MetricKeyType.Summary> /** * @since 2.0.0 * @category models */ export interface Variance<out Type> { readonly [MetricKeyTypeId]: { _Type: Types.Covariant<Type> } } } /** * @since 2.0.0 * @category refinements */ export const isMetricKey: (u: unknown) => u is MetricKey<MetricKeyType.MetricKeyType<unknown, unknown>> = internal.isMetricKey /** * Creates a metric key for a counter, with the specified name. * * @since 2.0.0 * @category constructors */ export const counter: { ( name: string, options?: { readonly description?: string | undefined readonly bigint?: false | undefined readonly incremental?: boolean | undefined } ): MetricKey.Counter<number> ( name: string, options: { readonly description?: string | undefined readonly bigint: true readonly incremental?: boolean | undefined } ): MetricKey.Counter<bigint> } = internal.counter /** * Creates a metric key for a categorical frequency table, with the specified * name. * * @since 2.0.0 * @category constructors */ export const frequency: (name: string, description?: string) => MetricKey.Frequency = internal.frequency /** * Creates a metric key for a gauge, with the specified name. * * @since 2.0.0 * @category constructors */ export const gauge: { (name: string, options?: { readonly description?: string | undefined readonly bigint?: false | undefined }): MetricKey.Gauge<number> (name: string, options: { readonly description?: string | undefined readonly bigint: true }): MetricKey.Gauge<bigint> } = internal.gauge /** * Creates a metric key for a histogram, with the specified name and boundaries. * * @since 2.0.0 * @category constructors */ export const histogram: ( name: string, boundaries: MetricBoundaries.MetricBoundaries, description?: string ) => MetricKey.Histogram = internal.histogram /** * Creates a metric key for a summary, with the specified name, maxAge, * maxSize, error, and quantiles. * * @since 2.0.0 * @category constructors */ export const summary: ( options: { readonly name: string readonly maxAge: Duration.DurationInput readonly maxSize: number readonly error: number readonly quantiles: ReadonlyArray<number> readonly description?: string | undefined } ) => MetricKey.Summary = internal.summary /** * Returns a new `MetricKey` with the specified tag appended. * * @since 2.0.0 * @category constructors */ export const tagged: { ( key: string, value: string ): <Type extends MetricKeyType.MetricKeyType<any, any>>(self: MetricKey<Type>) => MetricKey<Type> <Type extends MetricKeyType.MetricKeyType<any, any>>( self: MetricKey<Type>, key: string, value: string ): MetricKey<Type> } = internal.tagged /** * Returns a new `MetricKey` with the specified tags appended. * * @since 2.0.0 * @category constructors */ export const taggedWithLabels: { ( extraTags: ReadonlyArray<MetricLabel.MetricLabel> ): <Type extends MetricKeyType.MetricKeyType<any, any>>(self: MetricKey<Type>) => MetricKey<Type> <Type extends MetricKeyType.MetricKeyType<any, any>>( self: MetricKey<Type>, extraTags: ReadonlyArray<MetricLabel.MetricLabel> ): MetricKey<Type> } = internal.taggedWithLabels