in src/services/interactions.ts [30:71]
export function handleInteractionEntry (entry: PerformanceEventTiming) {
entryPreProcessingCallbacks.forEach((cb) => cb(entry));
if (!(entry.interactionId || entry.entryType === 'first-input')) return;
const minLongestInteraction = interactionList[interactionList.length - 1];
const existingInteraction = interactionsMap.get(entry.interactionId!);
if (
existingInteraction || interactionList.length < MAX_INTERACTIONS_TO_CONSIDER ||
entry.duration > minLongestInteraction.latency
) {
if (existingInteraction) {
if (entry.duration > existingInteraction.latency) {
existingInteraction.entries = [entry];
existingInteraction.latency = entry.duration;
} else if (
entry.duration === existingInteraction.latency &&
entry.startTime === existingInteraction.entries[0].startTime
) {
existingInteraction.entries.push(entry);
}
} else {
const interaction = {
id: entry.interactionId!,
latency: entry.duration,
entries: [entry],
};
interactionsMap.set(interaction.id, interaction);
interactionList.push(interaction);
}
// Sort the entries by latency
interactionList.sort((a, b) => b.latency - a.latency);
if (interactionList.length > MAX_INTERACTIONS_TO_CONSIDER) {
interactionList
.splice(MAX_INTERACTIONS_TO_CONSIDER)
.forEach((i) => interactionsMap.delete(i.id));
}
}
};