UNPKG

@axiomhq/react

Version:
1 lines 1.92 kB
{"version":3,"file":"web-vitals.cjs","sources":["../../src/web-vitals.tsx"],"sourcesContent":["'use client';\nimport { Logger } from '@axiomhq/logging';\nimport * as React from 'react';\nimport { onLCP, onFID, onCLS, onINP, onFCP, onTTFB } from 'web-vitals';\nimport type { Metric } from 'web-vitals';\n\nexport function useReportWebVitals(pushMetrics: (metric: Metric) => void, flushMetrics: () => void) {\n const pushMetricsRef = React.useRef(pushMetrics);\n const flushMetricsRef = React.useRef(flushMetrics);\n\n React.useEffect(() => {\n const effectFlushMetrics = () => {\n flushMetricsRef.current();\n };\n\n onCLS(pushMetricsRef.current);\n onFID(pushMetricsRef.current);\n onLCP(pushMetricsRef.current);\n onINP(pushMetricsRef.current);\n onFCP(pushMetricsRef.current);\n onTTFB(pushMetricsRef.current);\n\n document.addEventListener('visibilitychange', effectFlushMetrics);\n\n return () => {\n document.removeEventListener('visibilitychange', effectFlushMetrics);\n };\n }, []);\n}\n\nexport const transformWebVitalsMetric = (metric: Metric): Record<string, any> => {\n return {\n webVital: metric,\n _time: new Date().getTime(),\n source: 'web-vital',\n path: window.location.pathname,\n };\n};\n\nexport const createWebVitalsComponent = (logger: Logger) => {\n const sendMetrics = (metric: Metric) => {\n logger.raw(transformWebVitalsMetric(metric));\n };\n\n const flushMetrics = () => {\n logger.flush();\n };\n\n return () => {\n useReportWebVitals(sendMetrics, flushMetrics);\n\n return <></>;\n };\n};\n"],"names":["React","onCLS","onFID","onLCP","onINP","onFCP","onTTFB"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAMgB;AACR;AACA;AAENA;AACE;AACE;AAAwB;AAG1BC;AACAC;AACAC;AACAC;AACAC;AACAC;AAES;AAET;AACW;AAA0D;AAAA;AAGzE;AAEa;AACJ;AAAA;AACK;AACgB;AAClB;AACc;AAE1B;AAEa;AACL;AACG;AAAoC;AAG7C;AACE;AAAa;AAGf;AACE;AAEA;AAAS;AAEb;;;;"}