clarity-js
Version:
An analytics library that uses web page interactions to generate aggregated insights
54 lines (46 loc) • 1.6 kB
text/typescript
import { Check, Event, Dimension, DimensionData, Setting } from "@clarity-types/data";
import * as limit from "@src/data/limit";
import encode from "./encode";
export let data: DimensionData = null;
export let updates: DimensionData = null;
let limited = false;
export function start(): void {
data = {};
updates = {};
limited = false;
}
export function stop(): void {
data = {};
updates = {};
limited = false;
}
export function log(dimension: Dimension, value: string): void {
// Check valid value before moving ahead
if (value) {
// Ensure received value is casted into a string if it wasn't a string to begin with
value = "" + value;
if (!(dimension in data)) { data[dimension] = []; }
if (!data[dimension].includes(value)) {
// Limit check to ensure we have a cap on number of dimensions we can collect
if (data[dimension].length > Setting.CollectionLimit) {
if (!limited) {
limited = true;
limit.trigger(Check.Collection);
}
return;
}
data[dimension].push(value);
// If this is a new value, track it as part of updates object
// This allows us to only send back new values in subsequent payloads
if (!(dimension in updates)) { updates[dimension] = []; }
updates[dimension].push(value);
}
}
}
export function compute(): void {
encode(Event.Dimension);
}
export function reset(): void {
updates = {};
limited = false;
}