@sentry/core
Version:
Base implementation for all Sentry JavaScript SDKs
134 lines (130 loc) • 4.49 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
const currentScopes = require('../currentScopes.js');
const dynamicSamplingContext = require('../tracing/dynamicSamplingContext.js');
const merge = require('./merge.js');
const spanUtils = require('./spanUtils.js');
function applyScopeDataToEvent(event, data) {
const { fingerprint, span, breadcrumbs, sdkProcessingMetadata } = data;
applyDataToEvent(event, data);
if (span) {
applySpanToEvent(event, span);
}
applyFingerprintToEvent(event, fingerprint);
applyBreadcrumbsToEvent(event, breadcrumbs);
applySdkMetadataToEvent(event, sdkProcessingMetadata);
}
function mergeScopeData(data, mergeData) {
const {
extra,
tags,
attributes,
user,
contexts,
level,
sdkProcessingMetadata,
breadcrumbs,
fingerprint,
eventProcessors,
attachments,
propagationContext,
transactionName,
span
} = mergeData;
mergeAndOverwriteScopeData(data, "extra", extra);
mergeAndOverwriteScopeData(data, "tags", tags);
mergeAndOverwriteScopeData(data, "attributes", attributes);
mergeAndOverwriteScopeData(data, "user", user);
mergeAndOverwriteScopeData(data, "contexts", contexts);
data.sdkProcessingMetadata = merge.merge(data.sdkProcessingMetadata, sdkProcessingMetadata, 2);
if (level) {
data.level = level;
}
if (transactionName) {
data.transactionName = transactionName;
}
if (span) {
data.span = span;
}
if (breadcrumbs.length) {
data.breadcrumbs = [...data.breadcrumbs, ...breadcrumbs];
}
if (fingerprint.length) {
data.fingerprint = [...data.fingerprint, ...fingerprint];
}
if (eventProcessors.length) {
data.eventProcessors = [...data.eventProcessors, ...eventProcessors];
}
if (attachments.length) {
data.attachments = [...data.attachments, ...attachments];
}
data.propagationContext = { ...data.propagationContext, ...propagationContext };
}
function mergeAndOverwriteScopeData(data, prop, mergeVal) {
data[prop] = merge.merge(data[prop], mergeVal, 1);
}
function getCombinedScopeData(isolationScope, currentScope) {
const scopeData = currentScopes.getGlobalScope().getScopeData();
isolationScope && mergeScopeData(scopeData, isolationScope.getScopeData());
currentScope && mergeScopeData(scopeData, currentScope.getScopeData());
return scopeData;
}
function applyDataToEvent(event, data) {
const { extra, tags, user, contexts, level, transactionName } = data;
if (Object.keys(extra).length) {
event.extra = { ...extra, ...event.extra };
}
if (Object.keys(tags).length) {
event.tags = { ...tags, ...event.tags };
}
if (Object.keys(user).length) {
event.user = { ...user, ...event.user };
}
if (Object.keys(contexts).length) {
event.contexts = { ...contexts, ...event.contexts };
}
if (level) {
event.level = level;
}
if (transactionName && event.type !== "transaction") {
event.transaction = transactionName;
}
}
function applyBreadcrumbsToEvent(event, breadcrumbs) {
const mergedBreadcrumbs = [...event.breadcrumbs || [], ...breadcrumbs];
event.breadcrumbs = mergedBreadcrumbs.length ? mergedBreadcrumbs : void 0;
}
function applySdkMetadataToEvent(event, sdkProcessingMetadata) {
event.sdkProcessingMetadata = {
...event.sdkProcessingMetadata,
...sdkProcessingMetadata
};
}
function applySpanToEvent(event, span) {
event.contexts = {
trace: spanUtils.spanToTraceContext(span),
...event.contexts
};
event.sdkProcessingMetadata = {
dynamicSamplingContext: dynamicSamplingContext.getDynamicSamplingContextFromSpan(span),
...event.sdkProcessingMetadata
};
const rootSpan = spanUtils.getRootSpan(span);
const transactionName = spanUtils.spanToJSON(rootSpan).description;
if (transactionName && !event.transaction && event.type === "transaction") {
event.transaction = transactionName;
}
}
function applyFingerprintToEvent(event, fingerprint) {
event.fingerprint = event.fingerprint ? Array.isArray(event.fingerprint) ? event.fingerprint : [event.fingerprint] : [];
if (fingerprint) {
event.fingerprint = event.fingerprint.concat(fingerprint);
}
if (!event.fingerprint.length) {
delete event.fingerprint;
}
}
exports.applyScopeDataToEvent = applyScopeDataToEvent;
exports.getCombinedScopeData = getCombinedScopeData;
exports.mergeAndOverwriteScopeData = mergeAndOverwriteScopeData;
exports.mergeScopeData = mergeScopeData;
//# sourceMappingURL=scopeData.js.map