UNPKG

astro-web-vitals-pocketbase

Version:
74 lines (59 loc) 1.41 kB
import type { Metric } from "web-vitals"; import { setupMetricCollection } from "./collect-vitals"; import { reportMetrics } from "./report-metrics"; declare global { interface Window { __web_vitals__?: { url: string; batchEnabled: boolean; }; } } if (!window.__web_vitals__) { throw new Error( "Web Vitals integration is not properly configured. Please check your configuration." ); } const queue = new Set<Metric>(); let timer: ReturnType<typeof setTimeout> | undefined; function addToQueue(metric: Metric): void { console.log("Adding metric to queue:", metric); queue.add(metric); if (timer) { clearTimeout(timer); } timer = setTimeout(() => { flushQueue(); }, 5000); } function flushQueue(): void { if (queue.size === 0) { return; } const metrics = [...queue]; queue.clear(); console.log("Flushing metrics:", metrics); reportMetrics( metrics, window.__web_vitals__!.url, window.__web_vitals__!.batchEnabled ); if (timer) { clearTimeout(timer); timer = undefined; } } // Initialize the web vitals collection setupMetricCollection((metric: Metric) => { addToQueue(metric); }); // Listen for events to flush the queue addEventListener("visibilitychange", () => { if (document.visibilityState !== "hidden") { return; } flushQueue(); }); addEventListener("pagehide", () => { flushQueue(); });