import { START_MARK } from "../constants"; import { getEntriesByName, getNavigationEntry } from "../performance"; import { processTimeMetric } from "../timing"; import type { KeysByType, Writable } from "../types"; type NavTimingEntry = Writable & { activationStart: number; navigationStart: number; }; type NavTimingKey = | keyof KeysByType | keyof KeysByType; export type NavigationTimingData = Pick; export function getData(): NavigationTimingData | undefined { const startMark = getEntriesByName(START_MARK).pop(); if (startMark) { // Don't report navigation timing in SPA beacons return undefined; } const navEntry = getNavigationEntry(); const entry: Record = {}; for (const k in navEntry) { const value = navEntry[k]; if (typeof value === "number") { entry[k as keyof NavTimingEntry] = processTimeMetric(value); } else if (typeof value === "string") { entry[k as keyof NavTimingEntry] = value; } } return entry as NavigationTimingData; }