| 1234567891011121314151617181920212223242526272829303132 |
- export type FirstNavigationSample = {
- observedAtMs: number
- source: boolean
- destination: boolean
- content: boolean
- pathname?: string
- center?: string
- }
- function category(sample: FirstNavigationSample) {
- if (sample.destination && !sample.source) return "destination"
- if (sample.source && !sample.destination) return "source"
- if (!sample.content) return "blank"
- return "unknown"
- }
- export function summarizeFirstNavigation(samples: FirstNavigationSample[]) {
- const categories = samples.map(category)
- const stable = categories.findIndex(
- (value, index) =>
- value === "destination" && categories[index + 1] === "destination" && categories[index + 2] === "destination",
- )
- return {
- samples: samples.length,
- firstDestinationObservedMs: samples[categories.indexOf("destination")]?.observedAtMs ?? null,
- stableDestinationObservedMs: stable === -1 ? null : samples[stable + 2]!.observedAtMs,
- sourceSamples: categories.filter((value) => value === "source").length,
- blankSamples: categories.filter((value) => value === "blank").length,
- unknownSamples: categories.filter((value) => value === "unknown").length,
- destinationSamples: categories.filter((value) => value === "destination").length,
- }
- }
|