UNPKG

clarity-js

Version:

An analytics library that uses web page interactions to generate aggregated insights

62 lines (53 loc) 1.39 kB
import { Event, Metric, type MetricData } from "@clarity-types/data"; import encode from "./encode"; export let data: MetricData = null; export let updates: MetricData = null; export function start(): void { data = {}; updates = {}; count(Metric.InvokeCount); } export function stop(): void { data = {}; updates = {}; } export function count(metric: Metric): void { if (!(metric in data)) { data[metric] = 0; } if (!(metric in updates)) { updates[metric] = 0; } data[metric]++; updates[metric]++; } export function sum(metric: Metric, value: number): void { if (value !== null) { if (!(metric in data)) { data[metric] = 0; } if (!(metric in updates)) { updates[metric] = 0; } data[metric] += value; updates[metric] += value; } } export function max(metric: Metric, value: number): void { // Ensure that we do not process null or NaN values if (value !== null && Number.isNaN(value) === false) { if (!(metric in data)) { data[metric] = 0; } if (value > data[metric] || data[metric] === 0) { updates[metric] = value; data[metric] = value; } } } export function compute(): void { encode(Event.Metric); } export function reset(): void { updates = {}; }