Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions packages/core/src/tracing/dynamicSamplingContext.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
baggageHeaderToDynamicSamplingContext,
dynamicSamplingContextToSentryBaggageHeader,
} from '../utils-hoist/baggage';
import { addNonEnumerableProperty, dropUndefinedKeys } from '../utils-hoist/object';
import { addNonEnumerableProperty } from '../utils-hoist/object';
import { hasSpansEnabled } from '../utils/hasSpansEnabled';
import { getRootSpan, spanIsSampled, spanToJSON } from '../utils/spanUtils';
import { getCapturedScopesOnSpan } from './utils';
Expand Down Expand Up @@ -41,12 +41,14 @@ export function getDynamicSamplingContextFromClient(trace_id: string, client: Cl

const { publicKey: public_key } = client.getDsn() || {};

const dsc = dropUndefinedKeys({
// Instead of conditionally adding non-undefined values, we add them and then remove them if needed
// otherwise, the order of baggage entries changes, which "breaks" a bunch of tests etc.
const dsc: DynamicSamplingContext = {
environment: options.environment || DEFAULT_ENVIRONMENT,
release: options.release,
public_key,
trace_id,
}) satisfies DynamicSamplingContext;
};

client.emit('createDsc', dsc);

Expand Down
4 changes: 2 additions & 2 deletions packages/core/src/utils-hoist/anr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,12 +81,12 @@ export function callFrameToStackFrame(
const colno = frame.location.columnNumber ? frame.location.columnNumber + 1 : undefined;
const lineno = frame.location.lineNumber ? frame.location.lineNumber + 1 : undefined;

return dropUndefinedKeys({
return {
filename,
module: getModuleFromFilename(filename),
function: frame.functionName || UNKNOWN_FUNCTION,
colno,
lineno,
in_app: filename ? filenameIsInApp(filename) : undefined,
});
};
}
4 changes: 2 additions & 2 deletions packages/core/src/utils-hoist/envelope.ts
Original file line number Diff line number Diff line change
Expand Up @@ -196,13 +196,13 @@ export function createAttachmentEnvelopeItem(attachment: Attachment): Attachment
const buffer = typeof attachment.data === 'string' ? encodeUTF8(attachment.data) : attachment.data;

return [
dropUndefinedKeys({
{
type: 'attachment',
length: buffer.length,
filename: attachment.filename,
content_type: attachment.contentType,
attachment_type: attachment.attachmentType,
}),
},
buffer,
];
}
Expand Down
4 changes: 2 additions & 2 deletions packages/core/src/utils/request.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,14 +91,14 @@ export function httpRequestToRequestData(request: {
// This is non-standard, but may be set on e.g. Next.js or Express requests
const cookies = (request as PolymorphicRequest).cookies;

return dropUndefinedKeys({
return {
url: absoluteUrl,
method: request.method,
query_string: extractQueryParamsFromUrl(url),
headers: headersToDict(headers),
cookies,
data,
});
};
}

function getAbsoluteUrl({
Expand Down
10 changes: 5 additions & 5 deletions packages/core/src/utils/spanUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import type {
} from '../types-hoist';
import type { SpanLink, SpanLinkJSON } from '../types-hoist/link';
import { consoleSandbox } from '../utils-hoist/logger';
import { addNonEnumerableProperty, dropUndefinedKeys } from '../utils-hoist/object';
import { addNonEnumerableProperty } from '../utils-hoist/object';
import { generateSpanId } from '../utils-hoist/propagationContext';
import { timestampInSeconds } from '../utils-hoist/time';
import { generateSentryTraceHeader } from '../utils-hoist/tracing';
Expand All @@ -42,7 +42,7 @@ export function spanToTransactionTraceContext(span: Span): TraceContext {
const { spanId: span_id, traceId: trace_id } = span.spanContext();
const { data, op, parent_span_id, status, origin, links } = spanToJSON(span);

return dropUndefinedKeys({
return {
parent_span_id,
span_id,
trace_id,
Expand All @@ -51,7 +51,7 @@ export function spanToTransactionTraceContext(span: Span): TraceContext {
status,
origin,
links,
});
};
}

/**
Expand All @@ -67,11 +67,11 @@ export function spanToTraceContext(span: Span): TraceContext {

const span_id = isRemote ? scope?.getPropagationContext().propagationSpanId || generateSpanId() : spanId;

return dropUndefinedKeys({
return {
parent_span_id,
span_id,
trace_id,
});
};
}

/**
Expand Down
9 changes: 3 additions & 6 deletions packages/core/src/utils/transactionEvent.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import { SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, SEMANTIC_ATTRIBUTE_PROFILE_ID } from '../semanticAttributes';
import type { SpanJSON, TransactionEvent } from '../types-hoist';
import { dropUndefinedKeys } from '../utils-hoist';

/**
* Converts a transaction event to a span JSON object.
*/
export function convertTransactionEventToSpanJson(event: TransactionEvent): SpanJSON {
const { trace_id, parent_span_id, span_id, status, origin, data, op } = event.contexts?.trace ?? {};

return dropUndefinedKeys({
return {
data: data ?? {},
description: event.transaction,
op,
Expand All @@ -23,14 +22,14 @@ export function convertTransactionEventToSpanJson(event: TransactionEvent): Span
exclusive_time: data?.[SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME] as number | undefined,
measurements: event.measurements,
is_segment: true,
});
};
}

/**
* Converts a span JSON object to a transaction event.
*/
export function convertSpanJsonToTransactionEvent(span: SpanJSON): TransactionEvent {
const event: TransactionEvent = {
return {
type: 'transaction',
timestamp: span.timestamp,
start_timestamp: span.start_timestamp,
Expand All @@ -52,6 +51,4 @@ export function convertSpanJsonToTransactionEvent(span: SpanJSON): TransactionEv
},
measurements: span.measurements,
};

return dropUndefinedKeys(event);
}
4 changes: 4 additions & 0 deletions packages/core/test/lib/tracing/dynamicSamplingContext.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ describe('getDynamicSamplingContextFromSpan', () => {
const dynamicSamplingContext = getDynamicSamplingContextFromSpan(rootSpan);

expect(dynamicSamplingContext).toStrictEqual({
public_key: undefined,
release: '1.0.1',
environment: 'production',
sampled: 'true',
Expand All @@ -88,6 +89,7 @@ describe('getDynamicSamplingContextFromSpan', () => {
const dynamicSamplingContext = getDynamicSamplingContextFromSpan(rootSpan);

expect(dynamicSamplingContext).toStrictEqual({
public_key: undefined,
release: '1.0.1',
environment: 'production',
sampled: 'true',
Expand All @@ -111,6 +113,7 @@ describe('getDynamicSamplingContextFromSpan', () => {
const dynamicSamplingContext = getDynamicSamplingContextFromSpan(rootSpan);

expect(dynamicSamplingContext).toStrictEqual({
public_key: undefined,
release: '1.0.1',
environment: 'production',
sampled: 'true',
Expand Down Expand Up @@ -166,6 +169,7 @@ describe('getDynamicSamplingContextFromSpan', () => {
const dynamicSamplingContext = getDynamicSamplingContextFromSpan(rootSpan);

expect(dynamicSamplingContext).toStrictEqual({
public_key: undefined,
release: '1.0.1',
environment: 'production',
trace_id: expect.stringMatching(/^[a-f0-9]{32}$/),
Expand Down
30 changes: 14 additions & 16 deletions packages/nuxt/src/runtime/utils.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import type { ClientOptions, Context } from '@sentry/core';
import { captureException, dropUndefinedKeys, getClient, getTraceMetaTags } from '@sentry/core';
import { captureException, getClient, getTraceMetaTags } from '@sentry/core';
import type { VueOptions } from '@sentry/vue/src/types';
import type { CapturedErrorContext } from 'nitropack';
import type { NuxtRenderHTMLContext } from 'nuxt/app';
Expand All @@ -9,25 +9,23 @@ import type { ComponentPublicInstance } from 'vue';
* Extracts the relevant context information from the error context (H3Event in Nitro Error)
* and created a structured context object.
*/
export function extractErrorContext(errorContext: CapturedErrorContext): Context {
const structuredContext: Context = {
method: undefined,
path: undefined,
tags: undefined,
};
export function extractErrorContext(errorContext: CapturedErrorContext | undefined): Context {
const ctx: Context = {};

if (errorContext) {
if (errorContext.event) {
structuredContext.method = errorContext.event._method || undefined;
structuredContext.path = errorContext.event._path || undefined;
}
if (!errorContext) {
return ctx;
}

if (Array.isArray(errorContext.tags)) {
structuredContext.tags = errorContext.tags || undefined;
}
if (errorContext.event) {
ctx.method = errorContext.event._method;
ctx.path = errorContext.event._path;
}

if (Array.isArray(errorContext.tags)) {
ctx.tags = errorContext.tags;
}

return dropUndefinedKeys(structuredContext);
return ctx;
}

/**
Expand Down
4 changes: 2 additions & 2 deletions packages/replay-internal/src/integration.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import type { BrowserClientReplayOptions, Client, Integration, IntegrationFn, ReplayRecordingMode } from '@sentry/core';
import { consoleSandbox, dropUndefinedKeys, isBrowser, parseSampleRate } from '@sentry/core';
import { consoleSandbox, isBrowser, parseSampleRate } from '@sentry/core';
import {
DEFAULT_FLUSH_MAX_DELAY,
DEFAULT_FLUSH_MIN_DELAY,
Expand Down Expand Up @@ -356,7 +356,7 @@ function loadReplayOptionsFromClient(initialOptions: InitialReplayPluginOptions,
const finalOptions: ReplayPluginOptions = {
sessionSampleRate: 0,
errorSampleRate: 0,
...dropUndefinedKeys(initialOptions),
...initialOptions,
};

const replaysSessionSampleRate = parseSampleRate(opt.replaysSessionSampleRate);
Expand Down
3 changes: 1 addition & 2 deletions packages/sveltekit/src/vite/sentryVitePlugins.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { dropUndefinedKeys } from '@sentry/core';
import type { Plugin } from 'vite';
import type { AutoInstrumentSelection } from './autoInstrument';
import { makeAutoInstrumentationPlugin } from './autoInstrument';
Expand Down Expand Up @@ -104,5 +103,5 @@ export function generateVitePluginOptions(
}
}

return dropUndefinedKeys(sentryVitePluginsOptions);
return sentryVitePluginsOptions;
}
Loading