From a3e086baa26103b2098be9b30b23b1fcb1877181 Mon Sep 17 00:00:00 2001 From: Francesco Novy Date: Fri, 11 Jul 2025 11:28:01 +0200 Subject: [PATCH 1/2] ref: Use optional chaining wherever possible --- packages/browser/src/integrations/spotlight.ts | 3 +-- packages/browser/src/profiling/utils.ts | 4 ++-- packages/core/src/fetch.ts | 2 +- packages/core/src/integrations/dedupe.ts | 2 +- packages/core/src/integrations/rewriteframes.ts | 2 +- packages/core/src/utils/vercelWaitUntil.ts | 3 +-- packages/feedback/src/modal/integration.tsx | 4 ++-- packages/node-core/src/integrations/spotlight.ts | 7 +------ packages/replay-internal/src/coreHandlers/handleDom.ts | 3 +-- packages/replay-internal/src/util/isRrwebError.ts | 2 +- 10 files changed, 12 insertions(+), 20 deletions(-) diff --git a/packages/browser/src/integrations/spotlight.ts b/packages/browser/src/integrations/spotlight.ts index 233b85ace310..703d3c14492f 100644 --- a/packages/browser/src/integrations/spotlight.ts +++ b/packages/browser/src/integrations/spotlight.ts @@ -81,8 +81,7 @@ export function isSpotlightInteraction(event: Event): boolean { return Boolean( event.type === 'transaction' && event.spans && - event.contexts && - event.contexts.trace && + event.contexts?.trace && event.contexts.trace.op === 'ui.action.click' && event.spans.some(({ description }) => description?.includes('#sentry-spotlight')), ); diff --git a/packages/browser/src/profiling/utils.ts b/packages/browser/src/profiling/utils.ts index 5b81364df727..9e5718805b52 100644 --- a/packages/browser/src/profiling/utils.ts +++ b/packages/browser/src/profiling/utils.ts @@ -98,7 +98,7 @@ export interface ProfiledEvent extends Event { } function getTraceId(event: Event): string { - const traceId: unknown = event.contexts?.trace?.['trace_id']; + const traceId: unknown = event.contexts?.trace?.trace_id; // Log a warning if the profile has an invalid traceId (should be uuidv4). // All profiles and transactions are rejected if this is the case and we want to // warn users that this is happening if they enable debug flag @@ -333,7 +333,7 @@ export function findProfiledTransactionsFromEnvelope(envelope: Envelope): Event[ for (let j = 1; j < item.length; j++) { const event = item[j] as Event; - if (event?.contexts && event.contexts['profile'] && event.contexts['profile']['profile_id']) { + if (event?.contexts?.profile?.profile_id) { events.push(item[j] as Event); } } diff --git a/packages/core/src/fetch.ts b/packages/core/src/fetch.ts index cf82eca1e6c1..502e24711994 100644 --- a/packages/core/src/fetch.ts +++ b/packages/core/src/fetch.ts @@ -204,7 +204,7 @@ function endSpan(span: Span, handlerData: HandlerDataFetch): void { if (handlerData.response) { setHttpStatus(span, handlerData.response.status); - const contentLength = handlerData.response?.headers && handlerData.response.headers.get('content-length'); + const contentLength = handlerData.response?.headers?.get('content-length'); if (contentLength) { const contentLengthNum = parseInt(contentLength); diff --git a/packages/core/src/integrations/dedupe.ts b/packages/core/src/integrations/dedupe.ts index dfca4698f788..2e9d9326d7c9 100644 --- a/packages/core/src/integrations/dedupe.ts +++ b/packages/core/src/integrations/dedupe.ts @@ -176,5 +176,5 @@ function _isSameFingerprint(currentEvent: Event, previousEvent: Event): boolean } function _getExceptionFromEvent(event: Event): Exception | undefined { - return event.exception?.values && event.exception.values[0]; + return event.exception?.values?.[0]; } diff --git a/packages/core/src/integrations/rewriteframes.ts b/packages/core/src/integrations/rewriteframes.ts index c903016b0531..7590a46ac694 100644 --- a/packages/core/src/integrations/rewriteframes.ts +++ b/packages/core/src/integrations/rewriteframes.ts @@ -84,7 +84,7 @@ export const rewriteFramesIntegration = defineIntegration((options: RewriteFrame function _processStacktrace(stacktrace?: Stacktrace): Stacktrace { return { ...stacktrace, - frames: stacktrace?.frames && stacktrace.frames.map(f => iteratee(f)), + frames: stacktrace?.frames?.map(f => iteratee(f)), }; } diff --git a/packages/core/src/utils/vercelWaitUntil.ts b/packages/core/src/utils/vercelWaitUntil.ts index f9bae863ce9a..bfcaa6b4b832 100644 --- a/packages/core/src/utils/vercelWaitUntil.ts +++ b/packages/core/src/utils/vercelWaitUntil.ts @@ -18,8 +18,7 @@ export function vercelWaitUntil(task: Promise): void { // @ts-expect-error This is not typed GLOBAL_OBJ[Symbol.for('@vercel/request-context')]; - const ctx = - vercelRequestContextGlobal?.get && vercelRequestContextGlobal.get() ? vercelRequestContextGlobal.get() : {}; + const ctx = vercelRequestContextGlobal?.get?.(); if (ctx?.waitUntil) { ctx.waitUntil(task); diff --git a/packages/feedback/src/modal/integration.tsx b/packages/feedback/src/modal/integration.tsx index c01152b910ef..dd2c341760a7 100644 --- a/packages/feedback/src/modal/integration.tsx +++ b/packages/feedback/src/modal/integration.tsx @@ -70,8 +70,8 @@ export const feedbackModalIntegration = ((): FeedbackModalIntegration => { screenshotInput={screenshotInput} showName={options.showName || options.isNameRequired} showEmail={options.showEmail || options.isEmailRequired} - defaultName={(userKey && user && user[userKey.name]) || ''} - defaultEmail={(userKey && user && user[userKey.email]) || ''} + defaultName={(userKey && user?.[userKey.name]) || ''} + defaultEmail={(userKey && user?.[userKey.email]) || ''} onFormClose={() => { renderContent(false); options.onFormClose?.(); diff --git a/packages/node-core/src/integrations/spotlight.ts b/packages/node-core/src/integrations/spotlight.ts index 4e36f3692fb0..fecfd284ba44 100644 --- a/packages/node-core/src/integrations/spotlight.ts +++ b/packages/node-core/src/integrations/spotlight.ts @@ -20,12 +20,7 @@ const _spotlightIntegration = ((options: Partial = { return { name: INTEGRATION_NAME, setup(client) { - if ( - typeof process === 'object' && - process.env && - process.env.NODE_ENV && - process.env.NODE_ENV !== 'development' - ) { + if (typeof process === 'object' && process.env?.NODE_ENV && process.env.NODE_ENV !== 'development') { logger.warn("[Spotlight] It seems you're not in dev mode. Do you really want to have Spotlight enabled?"); } connectToSpotlight(client, _options); diff --git a/packages/replay-internal/src/coreHandlers/handleDom.ts b/packages/replay-internal/src/coreHandlers/handleDom.ts index f84a3938125c..a546a874ac87 100644 --- a/packages/replay-internal/src/coreHandlers/handleDom.ts +++ b/packages/replay-internal/src/coreHandlers/handleDom.ts @@ -30,8 +30,7 @@ export const handleDomListener: (replay: ReplayContainer) => (handlerData: Handl if ( isClick && replay.clickDetector && - event && - event.target && + event?.target && !event.altKey && !event.metaKey && !event.ctrlKey && diff --git a/packages/replay-internal/src/util/isRrwebError.ts b/packages/replay-internal/src/util/isRrwebError.ts index 3348d384d047..8d38b68ccf86 100644 --- a/packages/replay-internal/src/util/isRrwebError.ts +++ b/packages/replay-internal/src/util/isRrwebError.ts @@ -4,7 +4,7 @@ import type { Event, EventHint } from '@sentry/core'; * Returns true if we think the given event is an error originating inside of rrweb. */ export function isRrwebError(event: Event, hint: EventHint): boolean { - if (event.type || !event.exception || !event.exception.values || !event.exception.values.length) { + if (event.type || !event.exception?.values?.length) { return false; } From 250d7fc73230346e8afe593af55fd47e606abe49 Mon Sep 17 00:00:00 2001 From: Francesco Novy Date: Tue, 15 Jul 2025 15:03:46 +0200 Subject: [PATCH 2/2] fix it --- packages/node-core/src/integrations/spotlight.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/node-core/src/integrations/spotlight.ts b/packages/node-core/src/integrations/spotlight.ts index fecfd284ba44..fab83cbe579e 100644 --- a/packages/node-core/src/integrations/spotlight.ts +++ b/packages/node-core/src/integrations/spotlight.ts @@ -20,8 +20,12 @@ const _spotlightIntegration = ((options: Partial = { return { name: INTEGRATION_NAME, setup(client) { - if (typeof process === 'object' && process.env?.NODE_ENV && process.env.NODE_ENV !== 'development') { - logger.warn("[Spotlight] It seems you're not in dev mode. Do you really want to have Spotlight enabled?"); + try { + if (process.env.NODE_ENV && process.env.NODE_ENV !== 'development') { + logger.warn("[Spotlight] It seems you're not in dev mode. Do you really want to have Spotlight enabled?"); + } + } catch { + // ignore } connectToSpotlight(client, _options); },