clarity-js
Version:
An analytics library that uses web page interactions to generate aggregated insights
62 lines (53 loc) • 1.39 kB
text/typescript
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 = {};
}