clarity-js
Version:
An analytics library that uses web page interactions to generate aggregated insights
45 lines (38 loc) • 1.34 kB
text/typescript
import { Check, Event, type LimitData, Setting } from "@clarity-types/data";
import * as clarity from "@src/clarity";
import { time } from "@src/core/time";
import * as envelope from "@src/data/envelope";
import * as metadata from "@src/data/metadata";
import encode from "./encode";
export let data: LimitData;
export function start(): void {
data = { check: Check.None };
}
export function check(bytes: number): void {
if (data.check === Check.None) {
let reason = data.check;
reason = envelope.data.sequence >= Setting.PayloadLimit ? Check.Payload : reason;
reason = envelope.data.pageNum >= Setting.PageLimit ? Check.Page : reason;
reason = time() > Setting.ShutdownLimit ? Check.Shutdown : reason;
reason = bytes > Setting.PlaybackBytesLimit ? Check.Shutdown : reason;
if (reason !== data.check) {
trigger(reason);
}
}
}
export function trigger(reason: Check): void {
data.check = reason;
// limit the dimensions we collect, but we don't need to stop Clarity entirely if we hit the limit
if (reason !== Check.Collection) {
metadata.clear();
clarity.stop();
}
}
export function compute(): void {
if (data.check !== Check.None) {
encode(Event.Limit);
}
}
export function stop(): void {
data = null;
}