@zendesk/retrace
Version:
define and capture Product Operation Traces along with computed metrics with an optional friendly React beacon API
44 lines • 1.91 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createDefaultPerformanceEntryDeduplicationStrategy = createDefaultPerformanceEntryDeduplicationStrategy;
const getPerformanceEntryHash_1 = require("./getPerformanceEntryHash");
function createDefaultPerformanceEntryDeduplicationStrategy() {
let processedPerformanceEntries = new WeakMap();
const processedPerformanceEntriesByHash = new Map();
return {
findDuplicate(span) {
if (!span.performanceEntry) {
return undefined;
}
const existing = processedPerformanceEntries.get(span.performanceEntry);
if (existing) {
return existing;
}
if (span.performanceEntry.entryType === 'resource') {
const hash = (0, getPerformanceEntryHash_1.getPerformanceEntryHash)(span.performanceEntry);
return processedPerformanceEntriesByHash.get(hash);
}
return undefined;
},
recordSpan(spanAndAnnotation) {
const { span } = spanAndAnnotation;
if (!span.performanceEntry) {
return;
}
processedPerformanceEntries.set(span.performanceEntry, spanAndAnnotation);
if (span.performanceEntry.entryType === 'resource') {
const hash = (0, getPerformanceEntryHash_1.getPerformanceEntryHash)(span.performanceEntry);
processedPerformanceEntriesByHash.set(hash, spanAndAnnotation);
}
},
reset() {
processedPerformanceEntries = new WeakMap();
processedPerformanceEntriesByHash.clear();
},
selectPreferredSpan(existingSpan, newSpan) {
// Default behavior: use the new span
return newSpan;
},
};
}
//# sourceMappingURL=defaultDeduplicationStrategy.js.map