From 04ab4358f48e29fcb2cfd17bc69b80dbf14ae8c1 Mon Sep 17 00:00:00 2001 From: Francesco Novy Date: Fri, 11 Jul 2025 11:23:25 +0200 Subject: [PATCH 1/4] ref: Avoid try-catch with unused parameter Instead, we can just use the parameter-less version of try-catch. In future versions of eslint, this will be disallowed, so extracting this out. --- .../scripts/detectFlakyTests.ts | 2 +- .../moduleMetadata/appliesMetadata/init.js | 2 +- .../appliesMetadataWithRewriteFrames/init.js | 2 +- .../browser-integration-tests/utils/helpers.ts | 4 ++-- .../ember-classic/app/controllers/index.ts | 2 +- packages/browser/src/eventbuilder.ts | 4 ++-- packages/browser/src/tracing/request.ts | 4 ++-- packages/browser/src/transports/offline.ts | 6 +++--- packages/cloudflare/src/handler.ts | 2 +- packages/core/src/instrument/fetch.ts | 2 +- packages/core/src/integrations/dedupe.ts | 4 ++-- packages/core/src/integrations/eventFilters.ts | 2 +- packages/core/src/metadata.ts | 4 ++-- packages/core/src/trpc.ts | 2 +- packages/core/src/utils/eventUtils.ts | 2 +- packages/core/src/utils/misc.ts | 2 +- packages/core/src/utils/node.ts | 4 ++-- packages/core/src/utils/object.ts | 6 +++--- packages/core/src/utils/string.ts | 2 +- packages/core/src/utils/supports.ts | 10 +++++----- packages/core/test/lib/utils/promisebuffer.test.ts | 2 +- packages/deno/src/integrations/contextlines.ts | 4 ++-- packages/deno/src/integrations/normalizepaths.ts | 2 +- packages/ember/tests/dummy/app/controllers/index.ts | 2 +- packages/nextjs/src/config/webpack.ts | 2 +- packages/nextjs/src/config/withSentryConfig.ts | 2 +- packages/node-core/src/integrations/anr/index.ts | 2 +- packages/node-core/src/integrations/anr/worker.ts | 4 ++-- packages/node-core/src/integrations/context.ts | 8 ++++---- .../local-variables/local-variables-sync.ts | 2 +- packages/node-core/src/utils/debug.ts | 2 +- .../node-native/src/event-loop-block-integration.ts | 2 +- packages/react/src/redux.ts | 2 +- packages/replay-worker/examples/worker.js | 2 +- packages/sveltekit/src/vite/svelteConfig.ts | 2 +- packages/sveltekit/test/server-common/handle.test.ts | 10 +++++----- packages/vue/src/pinia.ts | 2 +- scripts/normalize-e2e-test-dump-transaction-events.js | 2 +- 38 files changed, 61 insertions(+), 61 deletions(-) diff --git a/dev-packages/browser-integration-tests/scripts/detectFlakyTests.ts b/dev-packages/browser-integration-tests/scripts/detectFlakyTests.ts index 1105346562c9..8e0aadc6af59 100644 --- a/dev-packages/browser-integration-tests/scripts/detectFlakyTests.ts +++ b/dev-packages/browser-integration-tests/scripts/detectFlakyTests.ts @@ -131,7 +131,7 @@ function getApproximateNumberOfTests(testPath: string): number { const content = fs.readFileSync(path.join(process.cwd(), testPath, 'test.ts'), 'utf-8'); const matches = content.match(/sentryTest\(/g); return Math.max(matches ? matches.length : 1, 1); - } catch (e) { + } catch { console.error(`Could not read file ${testPath}`); return 1; } diff --git a/dev-packages/browser-integration-tests/suites/integrations/moduleMetadata/appliesMetadata/init.js b/dev-packages/browser-integration-tests/suites/integrations/moduleMetadata/appliesMetadata/init.js index b0f321d1f5cd..d5b05443ca9e 100644 --- a/dev-packages/browser-integration-tests/suites/integrations/moduleMetadata/appliesMetadata/init.js +++ b/dev-packages/browser-integration-tests/suites/integrations/moduleMetadata/appliesMetadata/init.js @@ -14,7 +14,7 @@ Sentry.init({ moduleMetadataEntries.push(frame.module_metadata); }); }); - } catch (e) { + } catch { // noop } } diff --git a/dev-packages/browser-integration-tests/suites/integrations/moduleMetadata/appliesMetadataWithRewriteFrames/init.js b/dev-packages/browser-integration-tests/suites/integrations/moduleMetadata/appliesMetadataWithRewriteFrames/init.js index f3fd6e98874d..3c89709b3dfb 100644 --- a/dev-packages/browser-integration-tests/suites/integrations/moduleMetadata/appliesMetadataWithRewriteFrames/init.js +++ b/dev-packages/browser-integration-tests/suites/integrations/moduleMetadata/appliesMetadataWithRewriteFrames/init.js @@ -28,7 +28,7 @@ Sentry.init({ moduleMetadataEntries.push(frame.module_metadata); }); }); - } catch (e) { + } catch { // noop } } diff --git a/dev-packages/browser-integration-tests/utils/helpers.ts b/dev-packages/browser-integration-tests/utils/helpers.ts index e4ebd8b19313..5a9d8a351449 100644 --- a/dev-packages/browser-integration-tests/utils/helpers.ts +++ b/dev-packages/browser-integration-tests/utils/helpers.ts @@ -23,7 +23,7 @@ export const envelopeParser = (request: Request | null): unknown[] => { return envelope.split('\n').map(line => { try { return JSON.parse(line); - } catch (error) { + } catch { return line; } }); @@ -172,7 +172,7 @@ export async function runScriptInSandbox( ): Promise { try { await page.addScriptTag({ path: impl.path, content: impl.content }); - } catch (e) { + } catch { // no-op } } diff --git a/dev-packages/e2e-tests/test-applications/ember-classic/app/controllers/index.ts b/dev-packages/e2e-tests/test-applications/ember-classic/app/controllers/index.ts index c49ff8d94147..418b51ccee07 100644 --- a/dev-packages/e2e-tests/test-applications/ember-classic/app/controllers/index.ts +++ b/dev-packages/e2e-tests/test-applications/ember-classic/app/controllers/index.ts @@ -22,7 +22,7 @@ export default class IndexController extends Controller { public createCaughtEmberError(): void { try { throw new Error('Looks like you have a caught EmberError'); - } catch (e) { + } catch { // do nothing } } diff --git a/packages/browser/src/eventbuilder.ts b/packages/browser/src/eventbuilder.ts index fc2654d2b4d7..67cb4d2578cd 100644 --- a/packages/browser/src/eventbuilder.ts +++ b/packages/browser/src/eventbuilder.ts @@ -120,7 +120,7 @@ function parseStackFrames( try { return stackParser(stacktrace, skipLines, framesToPop); - } catch (e) { + } catch { // no-empty } @@ -392,7 +392,7 @@ function getObjectClassName(obj: unknown): string | undefined | void { try { const prototype: Prototype | null = Object.getPrototypeOf(obj); return prototype ? prototype.constructor.name : undefined; - } catch (e) { + } catch { // ignore errors here } } diff --git a/packages/browser/src/tracing/request.ts b/packages/browser/src/tracing/request.ts index 2918e925afb8..0756da3ccb2a 100644 --- a/packages/browser/src/tracing/request.ts +++ b/packages/browser/src/tracing/request.ts @@ -277,7 +277,7 @@ export function shouldAttachHeaders( try { resolvedUrl = new URL(targetUrl, href); currentOrigin = new URL(href).origin; - } catch (e) { + } catch { return false; } @@ -413,7 +413,7 @@ function setHeaderOnXhr( xhr.setRequestHeader!('baggage', sentryBaggageHeader); } } - } catch (_) { + } catch { // Error: InvalidStateError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED. } } diff --git a/packages/browser/src/transports/offline.ts b/packages/browser/src/transports/offline.ts index 5fbf7fa6ffc4..a334268eaa69 100644 --- a/packages/browser/src/transports/offline.ts +++ b/packages/browser/src/transports/offline.ts @@ -129,7 +129,7 @@ function createIndexedDbStore(options: BrowserOfflineTransportOptions): OfflineS try { const serialized = await serializeEnvelope(env); await push(getStore(), serialized, options.maxQueueSize || 30); - } catch (_) { + } catch { // } }, @@ -137,7 +137,7 @@ function createIndexedDbStore(options: BrowserOfflineTransportOptions): OfflineS try { const serialized = await serializeEnvelope(env); await unshift(getStore(), serialized, options.maxQueueSize || 30); - } catch (_) { + } catch { // } }, @@ -147,7 +147,7 @@ function createIndexedDbStore(options: BrowserOfflineTransportOptions): OfflineS if (deserialized) { return parseEnvelope(deserialized); } - } catch (_) { + } catch { // } diff --git a/packages/cloudflare/src/handler.ts b/packages/cloudflare/src/handler.ts index 001ab55049ab..354233154a0b 100644 --- a/packages/cloudflare/src/handler.ts +++ b/packages/cloudflare/src/handler.ts @@ -233,7 +233,7 @@ export function withSentry { DEBUG_BUILD && debug.warn('Event dropped due to being a duplicate of previously captured event.'); return null; } - } catch (_oO) {} // eslint-disable-line no-empty + } catch {} // eslint-disable-line no-empty return (previousEvent = currentEvent); }, @@ -170,7 +170,7 @@ function _isSameFingerprint(currentEvent: Event, previousEvent: Event): boolean // Otherwise, compare the two try { return !!(currentFingerprint.join('') === previousFingerprint.join('')); - } catch (_oO) { + } catch { return false; } } diff --git a/packages/core/src/integrations/eventFilters.ts b/packages/core/src/integrations/eventFilters.ts index 729758a7438e..a8054ae39ac6 100644 --- a/packages/core/src/integrations/eventFilters.ts +++ b/packages/core/src/integrations/eventFilters.ts @@ -211,7 +211,7 @@ function _getEventFilterUrl(event: Event): string | null { .find(value => value.mechanism?.parent_id === undefined && value.stacktrace?.frames?.length); const frames = rootException?.stacktrace?.frames; return frames ? _getLastValidUrl(frames) : null; - } catch (oO) { + } catch { DEBUG_BUILD && debug.error(`Cannot extract url for event ${getEventDescription(event)}`); return null; } diff --git a/packages/core/src/metadata.ts b/packages/core/src/metadata.ts index c88d7a36406d..190db6dd55fa 100644 --- a/packages/core/src/metadata.ts +++ b/packages/core/src/metadata.ts @@ -72,7 +72,7 @@ export function addMetadataToStackFrames(parser: StackParser, event: Event): voi } } }); - } catch (_) { + } catch { // To save bundle size we're just try catching here instead of checking for the existence of all the different objects. } } @@ -92,7 +92,7 @@ export function stripMetadataFromStackFrames(event: Event): void { delete frame.module_metadata; } }); - } catch (_) { + } catch { // To save bundle size we're just try catching here instead of checking for the existence of all the different objects. } } diff --git a/packages/core/src/trpc.ts b/packages/core/src/trpc.ts index 611dded043b6..beac8c5b4c4c 100644 --- a/packages/core/src/trpc.ts +++ b/packages/core/src/trpc.ts @@ -70,7 +70,7 @@ export function trpcMiddleware(options: SentryTrpcMiddlewareOptions = {}) { const rawRes = await getRawInput(); trpcContext.input = normalize(rawRes); - } catch (err) { + } catch { // noop } } diff --git a/packages/core/src/utils/eventUtils.ts b/packages/core/src/utils/eventUtils.ts index 3b474548a300..4391e63f72f8 100644 --- a/packages/core/src/utils/eventUtils.ts +++ b/packages/core/src/utils/eventUtils.ts @@ -19,7 +19,7 @@ export function getPossibleEventMessages(event: Event): string[] { possibleMessages.push(`${lastException.type}: ${lastException.value}`); } } - } catch (e) { + } catch { // ignore errors here } diff --git a/packages/core/src/utils/misc.ts b/packages/core/src/utils/misc.ts index 78b8a9d6aa74..79674cc8060a 100644 --- a/packages/core/src/utils/misc.ts +++ b/packages/core/src/utils/misc.ts @@ -45,7 +45,7 @@ export function uuid4(crypto = getCrypto()): string { return typedArray[0]!; }; } - } catch (_) { + } catch { // some runtimes can crash invoking crypto // https://github.com/getsentry/sentry-javascript/issues/8935 } diff --git a/packages/core/src/utils/node.ts b/packages/core/src/utils/node.ts index d7747d6ae6c0..6060700c2b03 100644 --- a/packages/core/src/utils/node.ts +++ b/packages/core/src/utils/node.ts @@ -50,7 +50,7 @@ export function loadModule(moduleName: string, existingModule: any = module): try { mod = dynamicRequire(existingModule, moduleName); - } catch (e) { + } catch { // no-empty } @@ -58,7 +58,7 @@ export function loadModule(moduleName: string, existingModule: any = module): try { const { cwd } = dynamicRequire(existingModule, 'process'); mod = dynamicRequire(existingModule, `${cwd()}/node_modules/${moduleName}`) as T; - } catch (e) { + } catch { // no-empty } } diff --git a/packages/core/src/utils/object.ts b/packages/core/src/utils/object.ts index 208bd4d0ec8f..b86eed939a27 100644 --- a/packages/core/src/utils/object.ts +++ b/packages/core/src/utils/object.ts @@ -61,7 +61,7 @@ export function addNonEnumerableProperty(obj: object, name: string, value: unkno writable: true, configurable: true, }); - } catch (o_O) { + } catch { DEBUG_BUILD && debug.log(`Failed to add non-enumerable property "${name}" to object`, obj); } } @@ -78,7 +78,7 @@ export function markFunctionWrapped(wrapped: WrappedFunction, original: WrappedF const proto = original.prototype || {}; wrapped.prototype = original.prototype = proto; addNonEnumerableProperty(wrapped, '__sentry_original__', original); - } catch (o_O) {} // eslint-disable-line no-empty + } catch {} // eslint-disable-line no-empty } /** @@ -151,7 +151,7 @@ export function convertToPlainObject(value: V): function serializeEventTarget(target: unknown): string { try { return isElement(target) ? htmlTreeAsString(target) : Object.prototype.toString.call(target); - } catch (_oO) { + } catch { return ''; } } diff --git a/packages/core/src/utils/string.ts b/packages/core/src/utils/string.ts index ab98c794f681..34a1abd4eb46 100644 --- a/packages/core/src/utils/string.ts +++ b/packages/core/src/utils/string.ts @@ -85,7 +85,7 @@ export function safeJoin(input: unknown[], delimiter?: string): string { } else { output.push(String(value)); } - } catch (e) { + } catch { output.push('[value cannot be serialized]'); } } diff --git a/packages/core/src/utils/supports.ts b/packages/core/src/utils/supports.ts index 51f839ad8918..42d2f66fb15a 100644 --- a/packages/core/src/utils/supports.ts +++ b/packages/core/src/utils/supports.ts @@ -16,7 +16,7 @@ export function supportsErrorEvent(): boolean { try { new ErrorEvent(''); return true; - } catch (e) { + } catch { return false; } } @@ -34,7 +34,7 @@ export function supportsDOMError(): boolean { // @ts-expect-error It really needs 1 argument, not 0. new DOMError(''); return true; - } catch (e) { + } catch { return false; } } @@ -49,7 +49,7 @@ export function supportsDOMException(): boolean { try { new DOMException(''); return true; - } catch (e) { + } catch { return false; } } @@ -83,7 +83,7 @@ function _isFetchSupported(): boolean { new Request('http://www.example.com'); new Response(); return true; - } catch (e) { + } catch { return false; } } @@ -172,7 +172,7 @@ export function supportsReferrerPolicy(): boolean { referrerPolicy: 'origin' as ReferrerPolicy, }); return true; - } catch (e) { + } catch { return false; } } diff --git a/packages/core/test/lib/utils/promisebuffer.test.ts b/packages/core/test/lib/utils/promisebuffer.test.ts index 1f0011dd6e50..618de06322a0 100644 --- a/packages/core/test/lib/utils/promisebuffer.test.ts +++ b/packages/core/test/lib/utils/promisebuffer.test.ts @@ -74,7 +74,7 @@ describe('PromiseBuffer', () => { expect(buffer.$.length).toEqual(1); try { await task; - } catch (_) { + } catch { // no-empty } expect(buffer.$.length).toEqual(0); diff --git a/packages/deno/src/integrations/contextlines.ts b/packages/deno/src/integrations/contextlines.ts index 8b068a17f8cb..cf13252052b8 100644 --- a/packages/deno/src/integrations/contextlines.ts +++ b/packages/deno/src/integrations/contextlines.ts @@ -28,7 +28,7 @@ async function readSourceFile(filename: string): Promise { let content: string | null = null; try { content = await Deno.readTextFile(filename); - } catch (_) { + } catch { // } @@ -102,7 +102,7 @@ async function addSourceContextToFrames(frames: StackFrame[], contextLines: numb try { const lines = sourceFile.split('\n'); addContextToFrame(lines, frame, contextLines); - } catch (_) { + } catch { // anomaly, being defensive in case // unlikely to ever happen in practice but can definitely happen in theory } diff --git a/packages/deno/src/integrations/normalizepaths.ts b/packages/deno/src/integrations/normalizepaths.ts index 417fd139b545..4e7e599fb4d3 100644 --- a/packages/deno/src/integrations/normalizepaths.ts +++ b/packages/deno/src/integrations/normalizepaths.ts @@ -54,7 +54,7 @@ function getCwd(): string | undefined { if (permission.state == 'granted') { return Deno.cwd(); } - } catch (_) { + } catch { // } diff --git a/packages/ember/tests/dummy/app/controllers/index.ts b/packages/ember/tests/dummy/app/controllers/index.ts index c49ff8d94147..418b51ccee07 100644 --- a/packages/ember/tests/dummy/app/controllers/index.ts +++ b/packages/ember/tests/dummy/app/controllers/index.ts @@ -22,7 +22,7 @@ export default class IndexController extends Controller { public createCaughtEmberError(): void { try { throw new Error('Looks like you have a caught EmberError'); - } catch (e) { + } catch { // do nothing } } diff --git a/packages/nextjs/src/config/webpack.ts b/packages/nextjs/src/config/webpack.ts index 77db5120cda3..5beea538558f 100644 --- a/packages/nextjs/src/config/webpack.ts +++ b/packages/nextjs/src/config/webpack.ts @@ -487,7 +487,7 @@ function getInstrumentationFile(projectDir: string, dotPrefixedExtensions: strin for (const pathSegments of paths) { try { return fs.readFileSync(path.resolve(projectDir, ...pathSegments), { encoding: 'utf-8' }); - } catch (e) { + } catch { // no-op } } diff --git a/packages/nextjs/src/config/withSentryConfig.ts b/packages/nextjs/src/config/withSentryConfig.ts index 85ade8e682de..57fff867f64a 100644 --- a/packages/nextjs/src/config/withSentryConfig.ts +++ b/packages/nextjs/src/config/withSentryConfig.ts @@ -470,7 +470,7 @@ function getGitRevision(): string | undefined { .execSync('git rev-parse HEAD', { stdio: ['ignore', 'pipe', 'ignore'] }) .toString() .trim(); - } catch (e) { + } catch { // noop } return gitRevision; diff --git a/packages/node-core/src/integrations/anr/index.ts b/packages/node-core/src/integrations/anr/index.ts index 9615ca241198..8f6adab4d3b6 100644 --- a/packages/node-core/src/integrations/anr/index.ts +++ b/packages/node-core/src/integrations/anr/index.ts @@ -231,7 +231,7 @@ async function _startWorker( const session = currentSession ? { ...currentSession, toJSON: undefined } : undefined; // message the worker to tell it the main event loop is still running worker.postMessage({ session, debugImages: getFilenameToDebugIdMap(initOptions.stackParser) }); - } catch (_) { + } catch { // } }, options.pollInterval); diff --git a/packages/node-core/src/integrations/anr/worker.ts b/packages/node-core/src/integrations/anr/worker.ts index dae062b4df7c..7c2ac91f30af 100644 --- a/packages/node-core/src/integrations/anr/worker.ts +++ b/packages/node-core/src/integrations/anr/worker.ts @@ -62,7 +62,7 @@ async function sendAbnormalSession(): Promise { try { // Notify the main process that the session has ended so the session can be cleared from the scope parentPort?.postMessage('session-ended'); - } catch (_) { + } catch { // ignore } } @@ -280,7 +280,7 @@ if (options.captureStackTrace) { session.post('Debugger.enable', () => { session.post('Debugger.pause'); }); - } catch (_) { + } catch { // } }; diff --git a/packages/node-core/src/integrations/context.ts b/packages/node-core/src/integrations/context.ts index b8376ab0ada8..f30361afd77b 100644 --- a/packages/node-core/src/integrations/context.ts +++ b/packages/node-core/src/integrations/context.ts @@ -192,7 +192,7 @@ function getCultureContext(): CultureContext | undefined { timezone: options.timeZone, }; } - } catch (err) { + } catch { // } @@ -228,7 +228,7 @@ export function getDeviceContext(deviceOpt: DeviceContextOptions | true): Device let uptime; try { uptime = os.uptime(); - } catch (e) { + } catch { // noop } @@ -347,7 +347,7 @@ async function getDarwinInfo(): Promise { darwinInfo.name = matchFirst(/^ProductName:\s+(.*)$/m, output); darwinInfo.version = matchFirst(/^ProductVersion:\s+(.*)$/m, output); darwinInfo.build = matchFirst(/^BuildVersion:\s+(.*)$/m, output); - } catch (e) { + } catch { // ignore } @@ -402,7 +402,7 @@ async function getLinuxInfo(): Promise { // are computed in `LINUX_VERSIONS`. const id = getLinuxDistroId(linuxInfo.name); linuxInfo.version = LINUX_VERSIONS[id]?.(contents); - } catch (e) { + } catch { // ignore } diff --git a/packages/node-core/src/integrations/local-variables/local-variables-sync.ts b/packages/node-core/src/integrations/local-variables/local-variables-sync.ts index 495a0712eb80..eb8a057e4162 100644 --- a/packages/node-core/src/integrations/local-variables/local-variables-sync.ts +++ b/packages/node-core/src/integrations/local-variables/local-variables-sync.ts @@ -76,7 +76,7 @@ export function createCallbackList(complete: Next): CallbackWrapper { try { popped(result); - } catch (_) { + } catch { // If there is an error, we still want to call the complete callback checkedComplete(result); } diff --git a/packages/node-core/src/utils/debug.ts b/packages/node-core/src/utils/debug.ts index 71df5e761230..634592dfa780 100644 --- a/packages/node-core/src/utils/debug.ts +++ b/packages/node-core/src/utils/debug.ts @@ -9,7 +9,7 @@ export async function isDebuggerEnabled(): Promise { // Node can be built without inspector support const inspector = await import('node:inspector'); cachedDebuggerEnabled = !!inspector.url(); - } catch (_) { + } catch { cachedDebuggerEnabled = false; } } diff --git a/packages/node-native/src/event-loop-block-integration.ts b/packages/node-native/src/event-loop-block-integration.ts index 14e60fbf0bc0..713093f77961 100644 --- a/packages/node-native/src/event-loop-block-integration.ts +++ b/packages/node-native/src/event-loop-block-integration.ts @@ -48,7 +48,7 @@ function poll(enabled: boolean, clientOptions: ClientOptions): void { const session = currentSession ? { ...currentSession, toJSON: undefined } : undefined; // message the worker to tell it the main event loop is still running threadPoll({ session, debugImages: getFilenameToDebugIdMap(clientOptions.stackParser) }, !enabled); - } catch (_) { + } catch { // we ignore all errors } } diff --git a/packages/react/src/redux.ts b/packages/react/src/redux.ts index 3a713701c676..1e0be6f7d190 100644 --- a/packages/react/src/redux.ts +++ b/packages/react/src/redux.ts @@ -106,7 +106,7 @@ function createReduxEnhancer(enhancerOptions?: Partial): { filename: 'redux_state.json', data: JSON.stringify(event.contexts.state.state.value) }, ]; } - } catch (_) { + } catch { // empty } return event; diff --git a/packages/replay-worker/examples/worker.js b/packages/replay-worker/examples/worker.js index ddd321d8a124..cd0fa6506c6a 100644 --- a/packages/replay-worker/examples/worker.js +++ b/packages/replay-worker/examples/worker.js @@ -729,7 +729,7 @@ var te = typeof TextEncoder != 'undefined' && /*#__PURE__*/ new TextEncoder(); var td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder(); try { td.decode(et, { stream: true }); -} catch (e) {} +} catch {} /** * Streaming UTF-8 encoding */ diff --git a/packages/sveltekit/src/vite/svelteConfig.ts b/packages/sveltekit/src/vite/svelteConfig.ts index 5e88a310726e..ed0c9ec6f801 100644 --- a/packages/sveltekit/src/vite/svelteConfig.ts +++ b/packages/sveltekit/src/vite/svelteConfig.ts @@ -107,7 +107,7 @@ async function getNodeAdapterOutputDir(svelteConfig: Config): Promise { try { await nodeAdapter.adapt(adapterBuilder); - } catch (_) { + } catch { // We expect the adapter to throw in writeClient! } diff --git a/packages/sveltekit/test/server-common/handle.test.ts b/packages/sveltekit/test/server-common/handle.test.ts index 98c483996f11..5d7d23419f92 100644 --- a/packages/sveltekit/test/server-common/handle.test.ts +++ b/packages/sveltekit/test/server-common/handle.test.ts @@ -133,7 +133,7 @@ describe('sentryHandle', () => { try { await sentryHandle()({ event: mockEvent(), resolve: resolve(type, isError) }); - } catch (e) { + } catch { // } @@ -172,7 +172,7 @@ describe('sentryHandle', () => { return mockResponse; }, }); - } catch (e) { + } catch { // } @@ -275,7 +275,7 @@ describe('sentryHandle', () => { try { await sentryHandle()({ event, resolve: resolve(type, isError) }); - } catch (e) { + } catch { // } @@ -305,7 +305,7 @@ describe('sentryHandle', () => { it("doesn't send redirects in a request handler to Sentry", async () => { try { await sentryHandle()({ event: mockEvent(), resolve: resolve(type, false, 'redirect') }); - } catch (e) { + } catch { expect(mockCaptureException).toBeCalledTimes(0); } }); @@ -313,7 +313,7 @@ describe('sentryHandle', () => { it("doesn't send Http 4xx errors in a request handler to Sentry", async () => { try { await sentryHandle()({ event: mockEvent(), resolve: resolve(type, false, 'http') }); - } catch (e) { + } catch { expect(mockCaptureException).toBeCalledTimes(0); } }); diff --git a/packages/vue/src/pinia.ts b/packages/vue/src/pinia.ts index 9d576a461cef..f55be4d6602c 100644 --- a/packages/vue/src/pinia.ts +++ b/packages/vue/src/pinia.ts @@ -70,7 +70,7 @@ export const createSentryPiniaPlugin: ( }, ]; } - } catch (_) { + } catch { // empty } diff --git a/scripts/normalize-e2e-test-dump-transaction-events.js b/scripts/normalize-e2e-test-dump-transaction-events.js index 9b775e62a381..e3459d52621d 100644 --- a/scripts/normalize-e2e-test-dump-transaction-events.js +++ b/scripts/normalize-e2e-test-dump-transaction-events.js @@ -25,7 +25,7 @@ glob.glob( let envelope; try { envelope = JSON.parse(serializedEnvelope); - } catch (e) { + } catch { return; // noop } From 7b8e7d35ff57c94431e790420132e50660848377 Mon Sep 17 00:00:00 2001 From: Francesco Novy Date: Tue, 15 Jul 2025 13:15:42 +0200 Subject: [PATCH 2/4] more try-catch --- .../suites/feedback/attachTo/test.ts | 2 +- .../suites/feedback/captureFeedback/test.ts | 2 +- .../captureFeedbackAndReplay/hasSampling/test.ts | 2 +- .../suites/feedback/captureFeedbackCsp/test.ts | 2 +- .../nextjs-13/pages/crashed-session-page.tsx | 2 +- .../test-applications/nextjs-app-dir/assert-build.ts | 2 +- .../node-core-integration-tests/scripts/clean.js | 2 +- .../node-core-integration-tests/utils/runner.ts | 2 +- dev-packages/node-integration-tests/scripts/clean.js | 2 +- dev-packages/node-integration-tests/utils/runner.ts | 2 +- packages/aws-serverless/test/sdk.test.ts | 8 ++++---- packages/browser-utils/src/instrument/dom.ts | 8 ++++---- packages/browser-utils/src/instrument/xhr.ts | 2 +- packages/browser/src/helpers.ts | 2 +- packages/browser/src/integrations/breadcrumbs.ts | 2 +- packages/browser/src/integrations/browserapierrors.ts | 2 +- packages/browser/src/tracing/linkedTraces.ts | 2 +- packages/core/src/integrations/rewriteframes.ts | 2 +- packages/core/src/utils/browser.ts | 4 ++-- packages/core/src/utils/eventbuilder.ts | 2 +- packages/core/src/utils/is.ts | 2 +- packages/core/src/utils/misc.ts | 2 +- packages/core/src/utils/normalize.ts | 4 ++-- packages/core/src/utils/stacktrace.ts | 4 ++-- packages/core/test/lib/tracing/trace.test.ts | 10 +++++----- packages/core/test/testutils.ts | 2 +- packages/deno/scripts/install-deno.mjs | 2 +- packages/deno/src/integrations/globalhandlers.ts | 2 +- packages/gatsby/gatsby-node.js | 2 +- .../src/client/clientNormalizationIntegration.ts | 4 ++-- packages/nextjs/src/client/index.ts | 2 +- .../routing/pagesRouterRoutingInstrumentation.ts | 2 +- packages/nextjs/src/client/routing/parameterization.ts | 2 +- .../src/common/devErrorSymbolicationEventProcessor.ts | 2 +- packages/nextjs/src/common/utils/urls.ts | 2 +- .../src/common/withServerActionInstrumentation.ts | 2 +- .../src/common/wrapGenerationFunctionWithSentry.ts | 2 +- .../config/templates/routeHandlerWrapperTemplate.ts | 2 +- .../config/templates/serverComponentWrapperTemplate.ts | 2 +- packages/node-core/src/integrations/modules.ts | 6 +++--- .../node/src/integrations/tracing/express-v5/utils.ts | 2 +- packages/node/src/utils/redisCache.ts | 4 ++-- .../src/server/instrumentation/reactRouter.ts | 2 +- packages/remix/src/server/errors.ts | 2 +- packages/remix/src/server/instrumentServer.ts | 2 +- .../test/integration/test/client/utils/helpers.ts | 2 +- packages/replay-canvas/src/canvas.ts | 2 +- packages/replay-internal/src/coreHandlers/handleDom.ts | 2 +- .../src/coreHandlers/util/onWindowOpen.ts | 2 +- packages/replay-internal/src/integration.ts | 2 +- packages/replay-internal/src/util/addMemoryEntry.ts | 2 +- packages/replay-internal/src/util/rrweb.ts | 2 +- packages/sveltekit/src/vite/sourceMaps.ts | 4 ++-- packages/sveltekit/test/server-common/handle.test.ts | 2 +- 54 files changed, 72 insertions(+), 72 deletions(-) diff --git a/dev-packages/browser-integration-tests/suites/feedback/attachTo/test.ts b/dev-packages/browser-integration-tests/suites/feedback/attachTo/test.ts index e3f094022bbf..c93ce0453f83 100644 --- a/dev-packages/browser-integration-tests/suites/feedback/attachTo/test.ts +++ b/dev-packages/browser-integration-tests/suites/feedback/attachTo/test.ts @@ -17,7 +17,7 @@ sentryTest('should capture feedback with custom button', async ({ getLocalTestUr try { return getEnvelopeType(req) === 'feedback'; - } catch (err) { + } catch { return false; } }); diff --git a/dev-packages/browser-integration-tests/suites/feedback/captureFeedback/test.ts b/dev-packages/browser-integration-tests/suites/feedback/captureFeedback/test.ts index c94f8363b107..e6eb920f64a5 100644 --- a/dev-packages/browser-integration-tests/suites/feedback/captureFeedback/test.ts +++ b/dev-packages/browser-integration-tests/suites/feedback/captureFeedback/test.ts @@ -17,7 +17,7 @@ sentryTest('should capture feedback', async ({ getLocalTestUrl, page }) => { try { return getEnvelopeType(req) === 'feedback'; - } catch (err) { + } catch { return false; } }); diff --git a/dev-packages/browser-integration-tests/suites/feedback/captureFeedbackAndReplay/hasSampling/test.ts b/dev-packages/browser-integration-tests/suites/feedback/captureFeedbackAndReplay/hasSampling/test.ts index 65d9f18c48a8..66653ce68a82 100644 --- a/dev-packages/browser-integration-tests/suites/feedback/captureFeedbackAndReplay/hasSampling/test.ts +++ b/dev-packages/browser-integration-tests/suites/feedback/captureFeedbackAndReplay/hasSampling/test.ts @@ -25,7 +25,7 @@ sentryTest('should capture feedback', async ({ forceFlushReplay, getLocalTestUrl try { return getEnvelopeType(req) === 'feedback'; - } catch (err) { + } catch { return false; } }); diff --git a/dev-packages/browser-integration-tests/suites/feedback/captureFeedbackCsp/test.ts b/dev-packages/browser-integration-tests/suites/feedback/captureFeedbackCsp/test.ts index 030d5049b0f7..69c715654921 100644 --- a/dev-packages/browser-integration-tests/suites/feedback/captureFeedbackCsp/test.ts +++ b/dev-packages/browser-integration-tests/suites/feedback/captureFeedbackCsp/test.ts @@ -17,7 +17,7 @@ sentryTest('should capture feedback', async ({ getLocalTestUrl, page }) => { try { return getEnvelopeType(req) === 'feedback'; - } catch (err) { + } catch { return false; } }); diff --git a/dev-packages/e2e-tests/test-applications/nextjs-13/pages/crashed-session-page.tsx b/dev-packages/e2e-tests/test-applications/nextjs-13/pages/crashed-session-page.tsx index 277293e77aed..ddfdc73680db 100644 --- a/dev-packages/e2e-tests/test-applications/nextjs-13/pages/crashed-session-page.tsx +++ b/dev-packages/e2e-tests/test-applications/nextjs-13/pages/crashed-session-page.tsx @@ -6,7 +6,7 @@ export default function CrashedPage() { // @ts-expect-error window.onerror(null, null, null, null, new Error('Crashed')); } - } catch (_e) { + } catch { // no-empty } return

Crashed

; diff --git a/dev-packages/e2e-tests/test-applications/nextjs-app-dir/assert-build.ts b/dev-packages/e2e-tests/test-applications/nextjs-app-dir/assert-build.ts index 75cdeb30ee10..8d6ab7ffbfef 100644 --- a/dev-packages/e2e-tests/test-applications/nextjs-app-dir/assert-build.ts +++ b/dev-packages/e2e-tests/test-applications/nextjs-app-dir/assert-build.ts @@ -13,7 +13,7 @@ const getLatestNextVersion = async () => { const response = await fetch('https://registry.npmjs.org/next/latest'); const data = await response.json(); return data.version as string; - } catch (error) { + } catch { return '0.0.0'; } }; diff --git a/dev-packages/node-core-integration-tests/scripts/clean.js b/dev-packages/node-core-integration-tests/scripts/clean.js index 0610e39f92d4..e6fdb4c4f6e8 100644 --- a/dev-packages/node-core-integration-tests/scripts/clean.js +++ b/dev-packages/node-core-integration-tests/scripts/clean.js @@ -13,7 +13,7 @@ for (const path of paths) { // eslint-disable-next-line no-console console.log(`docker compose down @ ${path}`); execSync('docker compose down --volumes', { stdio: 'inherit', cwd: path }); - } catch (_) { + } catch { // } } diff --git a/dev-packages/node-core-integration-tests/utils/runner.ts b/dev-packages/node-core-integration-tests/utils/runner.ts index 97b1efa2dbb4..273680607ffb 100644 --- a/dev-packages/node-core-integration-tests/utils/runner.ts +++ b/dev-packages/node-core-integration-tests/utils/runner.ts @@ -497,7 +497,7 @@ export function createRunner(...paths: string[]) { try { const envelope = JSON.parse(cleanedLine) as Envelope; newEnvelope(envelope); - } catch (_) { + } catch { // } } diff --git a/dev-packages/node-integration-tests/scripts/clean.js b/dev-packages/node-integration-tests/scripts/clean.js index 0610e39f92d4..e6fdb4c4f6e8 100644 --- a/dev-packages/node-integration-tests/scripts/clean.js +++ b/dev-packages/node-integration-tests/scripts/clean.js @@ -13,7 +13,7 @@ for (const path of paths) { // eslint-disable-next-line no-console console.log(`docker compose down @ ${path}`); execSync('docker compose down --volumes', { stdio: 'inherit', cwd: path }); - } catch (_) { + } catch { // } } diff --git a/dev-packages/node-integration-tests/utils/runner.ts b/dev-packages/node-integration-tests/utils/runner.ts index 1006d71bf3f0..44fc82c220a0 100644 --- a/dev-packages/node-integration-tests/utils/runner.ts +++ b/dev-packages/node-integration-tests/utils/runner.ts @@ -506,7 +506,7 @@ export function createRunner(...paths: string[]) { try { const envelope = JSON.parse(cleanedLine) as Envelope; newEnvelope(envelope); - } catch (_) { + } catch { // } } diff --git a/packages/aws-serverless/test/sdk.test.ts b/packages/aws-serverless/test/sdk.test.ts index f05deee57d88..9c1e7f584b8d 100644 --- a/packages/aws-serverless/test/sdk.test.ts +++ b/packages/aws-serverless/test/sdk.test.ts @@ -265,7 +265,7 @@ describe('AWSLambda', () => { try { await wrappedHandler(fakeEvent, fakeContext, fakeCallback); - } catch (e) { + } catch { const fakeTransactionContext = { name: 'functionName', op: 'function.aws.lambda', @@ -376,7 +376,7 @@ describe('AWSLambda', () => { try { await wrappedHandler(fakeEvent, fakeContext, fakeCallback); - } catch (e) { + } catch { const fakeTransactionContext = { name: 'functionName', op: 'function.aws.lambda', @@ -458,7 +458,7 @@ describe('AWSLambda', () => { try { await wrappedHandler(fakeEvent, fakeContext, fakeCallback); - } catch (e) { + } catch { const fakeTransactionContext = { name: 'functionName', op: 'function.aws.lambda', @@ -489,7 +489,7 @@ describe('AWSLambda', () => { try { await wrappedHandler(fakeEvent, fakeContext, fakeCallback); - } catch (e) { + } catch { expect(mockCaptureException).toBeCalledWith(error, expect.any(Function)); const scopeFunction = mockCaptureException.mock.calls[0][1]; diff --git a/packages/browser-utils/src/instrument/dom.ts b/packages/browser-utils/src/instrument/dom.ts index 0bef2ee114c7..8b3d8cb8b2b2 100644 --- a/packages/browser-utils/src/instrument/dom.ts +++ b/packages/browser-utils/src/instrument/dom.ts @@ -86,7 +86,7 @@ export function instrumentDOM(): void { } handlerForType.refCount++; - } catch (e) { + } catch { // Accessing dom properties is always fragile. // Also allows us to skip `addEventListeners` calls with no proper `this` context. } @@ -120,7 +120,7 @@ export function instrumentDOM(): void { delete this.__sentry_instrumentation_handlers__; } } - } catch (e) { + } catch { // Accessing dom properties is always fragile. // Also allows us to skip `addEventListeners` calls with no proper `this` context. } @@ -148,7 +148,7 @@ function isSimilarToLastCapturedEvent(event: Event): boolean { if (!event.target || (event.target as SentryWrappedTarget)._sentryId !== lastCapturedEventTargetId) { return false; } - } catch (e) { + } catch { // just accessing `target` property can throw an exception in some rare circumstances // see: https://github.com/getsentry/sentry-javascript/issues/838 } @@ -236,7 +236,7 @@ function makeDOMEventHandler( function getEventTarget(event: Event): SentryWrappedTarget | null { try { return event.target as SentryWrappedTarget | null; - } catch (e) { + } catch { // just accessing `target` property can throw an exception in some rare circumstances // see: https://github.com/getsentry/sentry-javascript/issues/838 return null; diff --git a/packages/browser-utils/src/instrument/xhr.ts b/packages/browser-utils/src/instrument/xhr.ts index c90467380c30..f7bbda52860f 100644 --- a/packages/browser-utils/src/instrument/xhr.ts +++ b/packages/browser-utils/src/instrument/xhr.ts @@ -79,7 +79,7 @@ export function instrumentXHR(): void { // touching statusCode in some platforms throws // an exception xhrInfo.status_code = xhrOpenThisArg.status; - } catch (e) { + } catch { /* do nothing */ } diff --git a/packages/browser/src/helpers.ts b/packages/browser/src/helpers.ts index 8fe8d650f322..362020a8d845 100644 --- a/packages/browser/src/helpers.ts +++ b/packages/browser/src/helpers.ts @@ -96,7 +96,7 @@ export function wrap( if (getOriginalFunction(fn)) { return fn; } - } catch (e) { + } catch { // Just accessing custom props in some Selenium environments // can cause a "Permission denied" exception (see raven-js#495). // Bail on wrapping and return the function as-is (defers to window.onerror). diff --git a/packages/browser/src/integrations/breadcrumbs.ts b/packages/browser/src/integrations/breadcrumbs.ts index 636f091e5e06..1802dfaacaa8 100644 --- a/packages/browser/src/integrations/breadcrumbs.ts +++ b/packages/browser/src/integrations/breadcrumbs.ts @@ -159,7 +159,7 @@ function _getDomBreadcrumbHandler( target = htmlTreeAsString(element, { keyAttrs, maxStringLength }); componentName = getComponentName(element); - } catch (e) { + } catch { target = ''; } diff --git a/packages/browser/src/integrations/browserapierrors.ts b/packages/browser/src/integrations/browserapierrors.ts index 113c969b9ebc..6db6d40c67c2 100644 --- a/packages/browser/src/integrations/browserapierrors.ts +++ b/packages/browser/src/integrations/browserapierrors.ts @@ -256,7 +256,7 @@ function _wrapEventTarget(target: string, integrationOptions: BrowserApiErrorsOp if (originalEventHandler) { originalRemoveEventListener.call(this, eventName, originalEventHandler, options); } - } catch (e) { + } catch { // ignore, accessing __sentry_wrapped__ will throw in some Selenium environments } return originalRemoveEventListener.call(this, eventName, fn, options); diff --git a/packages/browser/src/tracing/linkedTraces.ts b/packages/browser/src/tracing/linkedTraces.ts index cd487aad9afa..90d9c0ea2153 100644 --- a/packages/browser/src/tracing/linkedTraces.ts +++ b/packages/browser/src/tracing/linkedTraces.ts @@ -226,7 +226,7 @@ export function getPreviousTraceFromSessionStorage(): PreviousTraceInfo | undefi const previousTraceInfo = WINDOW.sessionStorage?.getItem(PREVIOUS_TRACE_KEY); // @ts-expect-error - intentionally risking JSON.parse throwing when previousTraceInfo is null to save bundle size return JSON.parse(previousTraceInfo); - } catch (e) { + } catch { return undefined; } } diff --git a/packages/core/src/integrations/rewriteframes.ts b/packages/core/src/integrations/rewriteframes.ts index c903016b0531..ebab85a28674 100644 --- a/packages/core/src/integrations/rewriteframes.ts +++ b/packages/core/src/integrations/rewriteframes.ts @@ -75,7 +75,7 @@ export const rewriteFramesIntegration = defineIntegration((options: RewriteFrame })), }, }; - } catch (_oO) { + } catch { return event; } } diff --git a/packages/core/src/utils/browser.ts b/packages/core/src/utils/browser.ts index bd9775c594ab..c051cd70f234 100644 --- a/packages/core/src/utils/browser.ts +++ b/packages/core/src/utils/browser.ts @@ -56,7 +56,7 @@ export function htmlTreeAsString( } return out.reverse().join(separator); - } catch (_oO) { + } catch { return ''; } } @@ -134,7 +134,7 @@ function _htmlElementAsString(el: unknown, keyAttrs?: string[]): string { export function getLocationHref(): string { try { return WINDOW.document.location.href; - } catch (oO) { + } catch { return ''; } } diff --git a/packages/core/src/utils/eventbuilder.ts b/packages/core/src/utils/eventbuilder.ts index 7156a0227615..24889187712f 100644 --- a/packages/core/src/utils/eventbuilder.ts +++ b/packages/core/src/utils/eventbuilder.ts @@ -82,7 +82,7 @@ function getObjectClassName(obj: unknown): string | undefined | void { try { const prototype: unknown | null = Object.getPrototypeOf(obj); return prototype ? prototype.constructor.name : undefined; - } catch (e) { + } catch { // ignore errors here } } diff --git a/packages/core/src/utils/is.ts b/packages/core/src/utils/is.ts index 5fa8a3d1877b..9ec498983d4a 100644 --- a/packages/core/src/utils/is.ts +++ b/packages/core/src/utils/is.ts @@ -182,7 +182,7 @@ export function isSyntheticEvent(wat: unknown): boolean { export function isInstanceOf(wat: any, base: any): boolean { try { return wat instanceof base; - } catch (_e) { + } catch { return false; } } diff --git a/packages/core/src/utils/misc.ts b/packages/core/src/utils/misc.ts index 79674cc8060a..607eff129fe5 100644 --- a/packages/core/src/utils/misc.ts +++ b/packages/core/src/utils/misc.ts @@ -222,7 +222,7 @@ export function checkOrSetAlreadyCaught(exception: unknown): boolean { // set it this way rather than by assignment so that it's not ennumerable and therefore isn't recorded by the // `ExtraErrorData` integration addNonEnumerableProperty(exception as { [key: string]: unknown }, '__sentry_captured__', true); - } catch (err) { + } catch { // `exception` is a primitive, so we can't mark it seen } diff --git a/packages/core/src/utils/normalize.ts b/packages/core/src/utils/normalize.ts index 2aa5dae7fae7..ba78d0cdb043 100644 --- a/packages/core/src/utils/normalize.ts +++ b/packages/core/src/utils/normalize.ts @@ -134,7 +134,7 @@ function visit( const jsonValue = valueWithToJSON.toJSON(); // We need to normalize the return value of `.toJSON()` in case it has circular references return visit('', jsonValue, remainingDepth - 1, maxProperties, memo); - } catch (err) { + } catch { // pass (The built-in `toJSON` failed, but we can still try to do it ourselves) } } @@ -296,7 +296,7 @@ export function normalizeUrlToBase(url: string, basePath: string): string { let newUrl = url; try { newUrl = decodeURI(url); - } catch (_Oo) { + } catch { // Sometime this breaks } return ( diff --git a/packages/core/src/utils/stacktrace.ts b/packages/core/src/utils/stacktrace.ts index 2c95280d0407..1aa1fa5ab92d 100644 --- a/packages/core/src/utils/stacktrace.ts +++ b/packages/core/src/utils/stacktrace.ts @@ -133,7 +133,7 @@ export function getFunctionName(fn: unknown): string { return defaultFunctionName; } return fn.name || defaultFunctionName; - } catch (e) { + } catch { // Just accessing custom props in some Selenium environments // can cause a "Permission denied" exception (see raven-js#495). return defaultFunctionName; @@ -158,7 +158,7 @@ export function getFramesFromEvent(event: Event): StackFrame[] | undefined { } }); return frames; - } catch (_oO) { + } catch { return undefined; } } diff --git a/packages/core/test/lib/tracing/trace.test.ts b/packages/core/test/lib/tracing/trace.test.ts index eccbb57f1610..31d04f0f971d 100644 --- a/packages/core/test/lib/tracing/trace.test.ts +++ b/packages/core/test/lib/tracing/trace.test.ts @@ -94,7 +94,7 @@ describe('startSpan', () => { await startSpan({ name: 'GET users/[id]' }, () => { return callback(); }); - } catch (e) { + } catch { // } expect(_span).toBeDefined(); @@ -113,7 +113,7 @@ describe('startSpan', () => { span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, 'http.server'); return callback(); }); - } catch (e) { + } catch { // } @@ -133,7 +133,7 @@ describe('startSpan', () => { return callback(); }); }); - } catch (e) { + } catch { // } @@ -160,7 +160,7 @@ describe('startSpan', () => { return callback(); }); }); - } catch (e) { + } catch { // } @@ -186,7 +186,7 @@ describe('startSpan', () => { return callback(); }, ); - } catch (e) { + } catch { // } diff --git a/packages/core/test/testutils.ts b/packages/core/test/testutils.ts index c00ec2b878b7..3fc56afa7f75 100644 --- a/packages/core/test/testutils.ts +++ b/packages/core/test/testutils.ts @@ -10,7 +10,7 @@ export const testOnlyIfNodeVersionAtLeast = (minVersion: number): Function => { if (Number(currentNodeVersion?.split('.')[0]) < minVersion) { return it.skip; } - } catch (oO) { + } catch { // we can't tell, so err on the side of running the test } diff --git a/packages/deno/scripts/install-deno.mjs b/packages/deno/scripts/install-deno.mjs index aa7235a278ff..ad962778af88 100644 --- a/packages/deno/scripts/install-deno.mjs +++ b/packages/deno/scripts/install-deno.mjs @@ -4,7 +4,7 @@ import { download } from './download.mjs'; try { execSync('deno --version', { stdio: 'inherit' }); -} catch (_) { +} catch { // eslint-disable-next-line no-console console.error('Deno is not installed. Installing...'); if (process.platform === 'win32') { diff --git a/packages/deno/src/integrations/globalhandlers.ts b/packages/deno/src/integrations/globalhandlers.ts index cb799b0be132..0e3639a7472d 100644 --- a/packages/deno/src/integrations/globalhandlers.ts +++ b/packages/deno/src/integrations/globalhandlers.ts @@ -96,7 +96,7 @@ function installGlobalUnhandledRejectionHandler(client: Client): void { if ('reason' in e) { error = e.reason; } - } catch (_oO) { + } catch { // no-empty } diff --git a/packages/gatsby/gatsby-node.js b/packages/gatsby/gatsby-node.js index 3b40481cd89d..7b96ab049d26 100644 --- a/packages/gatsby/gatsby-node.js +++ b/packages/gatsby/gatsby-node.js @@ -68,7 +68,7 @@ exports.onCreateWebpackConfig = ({ getConfig, actions }, options) => { let configFile = null; try { configFile = SENTRY_USER_CONFIG.find(file => fs.existsSync(file)); - } catch (error) { + } catch { // Some node versions (like v11) throw an exception on `existsSync` instead of // returning false. See https://github.com/tschaub/mock-fs/issues/256 } diff --git a/packages/nextjs/src/client/clientNormalizationIntegration.ts b/packages/nextjs/src/client/clientNormalizationIntegration.ts index 1d80ac3736c4..c92147c82bbe 100644 --- a/packages/nextjs/src/client/clientNormalizationIntegration.ts +++ b/packages/nextjs/src/client/clientNormalizationIntegration.ts @@ -39,7 +39,7 @@ export const nextjsClientStackFrameNormalizationIntegration = defineIntegration( if (frameOrigin === windowOrigin) { frame.filename = frame.filename?.replace(frameOrigin, 'app://').replace(basePath, ''); } - } catch (err) { + } catch { // Filename wasn't a properly formed URL, so there's nothing we can do } } @@ -47,7 +47,7 @@ export const nextjsClientStackFrameNormalizationIntegration = defineIntegration( try { const { origin } = new URL(frame.filename as string); frame.filename = frame.filename?.replace(origin, 'app://').replace(rewriteFramesAssetPrefixPath, ''); - } catch (err) { + } catch { // Filename wasn't a properly formed URL, so there's nothing we can do } } diff --git a/packages/nextjs/src/client/index.ts b/packages/nextjs/src/client/index.ts index e650c4e23a10..4d09e7e2d170 100644 --- a/packages/nextjs/src/client/index.ts +++ b/packages/nextjs/src/client/index.ts @@ -81,7 +81,7 @@ export function init(options: BrowserOptions): Client | undefined { if (process.turbopack) { getGlobalScope().setTag('turbopack', true); } - } catch (e) { + } catch { // Noop // The statement above can throw because process is not defined on the client } diff --git a/packages/nextjs/src/client/routing/pagesRouterRoutingInstrumentation.ts b/packages/nextjs/src/client/routing/pagesRouterRoutingInstrumentation.ts index 75147930528b..ccbf4e2d927b 100644 --- a/packages/nextjs/src/client/routing/pagesRouterRoutingInstrumentation.ts +++ b/packages/nextjs/src/client/routing/pagesRouterRoutingInstrumentation.ts @@ -69,7 +69,7 @@ function extractNextDataTagInformation(): NextDataTagInfo { if (nextDataTag?.innerHTML) { try { nextData = JSON.parse(nextDataTag.innerHTML); - } catch (e) { + } catch { DEBUG_BUILD && logger.warn('Could not extract __NEXT_DATA__'); } } diff --git a/packages/nextjs/src/client/routing/parameterization.ts b/packages/nextjs/src/client/routing/parameterization.ts index 8ce98044a588..3bf6c5265345 100644 --- a/packages/nextjs/src/client/routing/parameterization.ts +++ b/packages/nextjs/src/client/routing/parameterization.ts @@ -98,7 +98,7 @@ function getManifest(): RouteManifest | null { cachedManifest = manifest; cachedManifestString = currentManifestString; return manifest; - } catch (error) { + } catch { // Something went wrong while parsing the manifest, so we'll fallback to no parameterization DEBUG_BUILD && logger.warn('Could not extract route manifest'); return null; diff --git a/packages/nextjs/src/common/devErrorSymbolicationEventProcessor.ts b/packages/nextjs/src/common/devErrorSymbolicationEventProcessor.ts index 9cda8013ed4a..3aab35e9f0d9 100644 --- a/packages/nextjs/src/common/devErrorSymbolicationEventProcessor.ts +++ b/packages/nextjs/src/common/devErrorSymbolicationEventProcessor.ts @@ -91,7 +91,7 @@ export async function devErrorSymbolicationEventProcessor(event: Event, hint: Ev ); } } - } catch (e) { + } catch { return event; } diff --git a/packages/nextjs/src/common/utils/urls.ts b/packages/nextjs/src/common/utils/urls.ts index d1274e1c35d9..1d02bce01973 100644 --- a/packages/nextjs/src/common/utils/urls.ts +++ b/packages/nextjs/src/common/utils/urls.ts @@ -91,7 +91,7 @@ export function extractSanitizedUrlFromRefererHeader(headersDict?: HeadersDict): try { const refererUrl = new URL(referer); return getSanitizedUrlStringFromUrlObject(refererUrl); - } catch (error) { + } catch { return undefined; } } diff --git a/packages/nextjs/src/common/withServerActionInstrumentation.ts b/packages/nextjs/src/common/withServerActionInstrumentation.ts index 20d9c6937b12..8d36cb84651a 100644 --- a/packages/nextjs/src/common/withServerActionInstrumentation.ts +++ b/packages/nextjs/src/common/withServerActionInstrumentation.ts @@ -82,7 +82,7 @@ async function withServerActionInstrumentationImplementation { fullHeadersObject[key] = value; }); - } catch (e) { + } catch { DEBUG_BUILD && logger.warn( "Sentry wasn't able to extract the tracing headers for a server action. Will not trace this request.", diff --git a/packages/nextjs/src/common/wrapGenerationFunctionWithSentry.ts b/packages/nextjs/src/common/wrapGenerationFunctionWithSentry.ts index 79af67475b06..aad64e0f4ea4 100644 --- a/packages/nextjs/src/common/wrapGenerationFunctionWithSentry.ts +++ b/packages/nextjs/src/common/wrapGenerationFunctionWithSentry.ts @@ -40,7 +40,7 @@ export function wrapGenerationFunctionWithSentry a // We try-catch here just in case anything goes wrong with the async storage here goes wrong since it is Next.js internal API try { headers = requestAsyncStorage?.getStore()?.headers; - } catch (e) { + } catch { /** empty */ } diff --git a/packages/nextjs/src/config/templates/routeHandlerWrapperTemplate.ts b/packages/nextjs/src/config/templates/routeHandlerWrapperTemplate.ts index a2aed7543c39..d8e931e06451 100644 --- a/packages/nextjs/src/config/templates/routeHandlerWrapperTemplate.ts +++ b/packages/nextjs/src/config/templates/routeHandlerWrapperTemplate.ts @@ -43,7 +43,7 @@ function wrapHandler(handler: T, method: 'GET' | 'POST' | 'PUT' | 'PATCH' | ' try { const requestAsyncStore = requestAsyncStorage?.getStore() as ReturnType; headers = requestAsyncStore?.headers; - } catch (e) { + } catch { /** empty */ } diff --git a/packages/nextjs/src/config/templates/serverComponentWrapperTemplate.ts b/packages/nextjs/src/config/templates/serverComponentWrapperTemplate.ts index 11a18cdb5044..f29df45d3542 100644 --- a/packages/nextjs/src/config/templates/serverComponentWrapperTemplate.ts +++ b/packages/nextjs/src/config/templates/serverComponentWrapperTemplate.ts @@ -50,7 +50,7 @@ if (typeof serverComponent === 'function') { sentryTraceHeader = requestAsyncStore?.headers.get('sentry-trace') ?? undefined; baggageHeader = requestAsyncStore?.headers.get('baggage') ?? undefined; headers = requestAsyncStore?.headers; - } catch (e) { + } catch { /** empty */ } diff --git a/packages/node-core/src/integrations/modules.ts b/packages/node-core/src/integrations/modules.ts index 6adee9e46744..6724a473b5bb 100644 --- a/packages/node-core/src/integrations/modules.ts +++ b/packages/node-core/src/integrations/modules.ts @@ -44,7 +44,7 @@ export const modulesIntegration = _modulesIntegration; function getRequireCachePaths(): string[] { try { return require.cache ? Object.keys(require.cache as Record) : []; - } catch (e) { + } catch { return []; } } @@ -96,7 +96,7 @@ function collectRequireModules(): ModuleInfo { version: string; }; infos[info.name] = info.version; - } catch (_oO) { + } catch { // no-empty } }; @@ -126,7 +126,7 @@ function getPackageJson(): PackageJson { const packageJson = JSON.parse(readFileSync(filePath, 'utf8')) as PackageJson; return packageJson; - } catch (e) { + } catch { return {}; } } diff --git a/packages/node/src/integrations/tracing/express-v5/utils.ts b/packages/node/src/integrations/tracing/express-v5/utils.ts index 45ef61ed7eb6..85bf42958bdd 100644 --- a/packages/node/src/integrations/tracing/express-v5/utils.ts +++ b/packages/node/src/integrations/tracing/express-v5/utils.ts @@ -146,7 +146,7 @@ export const isLayerIgnored = ( return true; } } - } catch (e) { + } catch { /* catch block */ } diff --git a/packages/node/src/utils/redisCache.ts b/packages/node/src/utils/redisCache.ts index 20cca873c55a..b9d6cb814856 100644 --- a/packages/node/src/utils/redisCache.ts +++ b/packages/node/src/utils/redisCache.ts @@ -53,7 +53,7 @@ export function getCacheKeySafely(redisCommand: string, cmdArgs: IORedisCommandA } return flatten(cmdArgs.map(arg => processArg(arg))); - } catch (e) { + } catch { return undefined; } } @@ -82,7 +82,7 @@ export function calculateCacheItemSize(response: unknown): number | undefined { else if (typeof value === 'number') return value.toString().length; else if (value === null || value === undefined) return 0; return JSON.stringify(value).length; - } catch (e) { + } catch { return undefined; } }; diff --git a/packages/react-router/src/server/instrumentation/reactRouter.ts b/packages/react-router/src/server/instrumentation/reactRouter.ts index f369e22ce66e..74d3775b9d4c 100644 --- a/packages/react-router/src/server/instrumentation/reactRouter.ts +++ b/packages/react-router/src/server/instrumentation/reactRouter.ts @@ -67,7 +67,7 @@ export class ReactRouterInstrumentation extends InstrumentationBase ServerBuild | Promise try { normalizedRequest = winterCGRequestToRequestData(request); - } catch (e) { + } catch { DEBUG_BUILD && debug.warn('Failed to normalize Remix request'); } diff --git a/packages/remix/test/integration/test/client/utils/helpers.ts b/packages/remix/test/integration/test/client/utils/helpers.ts index 97007673703b..a0e68d1ed42e 100644 --- a/packages/remix/test/integration/test/client/utils/helpers.ts +++ b/packages/remix/test/integration/test/client/utils/helpers.ts @@ -172,7 +172,7 @@ export async function runScriptInSandbox( ): Promise { try { await page.addScriptTag({ path: impl.path, content: impl.content }); - } catch (e) { + } catch { // no-op } } diff --git a/packages/replay-canvas/src/canvas.ts b/packages/replay-canvas/src/canvas.ts index 968e6d586688..d026567e01b1 100644 --- a/packages/replay-canvas/src/canvas.ts +++ b/packages/replay-canvas/src/canvas.ts @@ -94,7 +94,7 @@ export const _replayCanvasIntegration = ((options: Partial if (typeof err === 'object') { (err as Error & { __rrweb__?: boolean }).__rrweb__ = true; } - } catch (error) { + } catch { // ignore errors here // this can happen if the error is frozen or does not allow mutation for other reasons } diff --git a/packages/replay-internal/src/coreHandlers/handleDom.ts b/packages/replay-internal/src/coreHandlers/handleDom.ts index f84a3938125c..e48db15fb071 100644 --- a/packages/replay-internal/src/coreHandlers/handleDom.ts +++ b/packages/replay-internal/src/coreHandlers/handleDom.ts @@ -98,7 +98,7 @@ function getDomTarget(handlerData: HandlerDataDom): { target: Node | null; messa try { target = isClick ? getClickTargetNode(handlerData.event as Event) : getTargetNode(handlerData.event as Event); message = htmlTreeAsString(target, { maxStringLength: 200 }) || ''; - } catch (e) { + } catch { message = ''; } diff --git a/packages/replay-internal/src/coreHandlers/util/onWindowOpen.ts b/packages/replay-internal/src/coreHandlers/util/onWindowOpen.ts index f63e0b2ec1fa..16dc8c1aab73 100644 --- a/packages/replay-internal/src/coreHandlers/util/onWindowOpen.ts +++ b/packages/replay-internal/src/coreHandlers/util/onWindowOpen.ts @@ -32,7 +32,7 @@ function monkeyPatchWindowOpen(): void { if (handlers) { try { handlers.forEach(handler => handler()); - } catch (e) { + } catch { // ignore errors in here } } diff --git a/packages/replay-internal/src/integration.ts b/packages/replay-internal/src/integration.ts index 6db78dced270..795562c7f6ce 100644 --- a/packages/replay-internal/src/integration.ts +++ b/packages/replay-internal/src/integration.ts @@ -145,7 +145,7 @@ export class Replay implements Integration { errorHandler: (err: Error & { __rrweb__?: boolean }) => { try { err.__rrweb__ = true; - } catch (error) { + } catch { // ignore errors here // this can happen if the error is frozen or does not allow mutation for other reasons } diff --git a/packages/replay-internal/src/util/addMemoryEntry.ts b/packages/replay-internal/src/util/addMemoryEntry.ts index 01c87daa7ead..b87f19521cbc 100644 --- a/packages/replay-internal/src/util/addMemoryEntry.ts +++ b/packages/replay-internal/src/util/addMemoryEntry.ts @@ -23,7 +23,7 @@ export async function addMemoryEntry(replay: ReplayContainer): Promise { try { await sentryHandle()({ event, resolve: resolve(type, isError) }); - } catch (e) { + } catch { // } From 9f2e8ffb7b560388bdfb6f73acd5d577755dccfa Mon Sep 17 00:00:00 2001 From: Francesco Novy Date: Tue, 15 Jul 2025 14:55:07 +0200 Subject: [PATCH 3/4] try-catch --- packages/angular/patch-vitest.ts | 2 +- packages/core/src/utils/cookie.ts | 2 +- packages/core/src/utils/envelope.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/angular/patch-vitest.ts b/packages/angular/patch-vitest.ts index 476d40860786..26f695db9512 100644 --- a/packages/angular/patch-vitest.ts +++ b/packages/angular/patch-vitest.ts @@ -85,7 +85,7 @@ function wrapTestInZone(testBody: string | any[] | undefined) { enumerable: false, }); wrappedFunc.length = testBody.length; - } catch (e) { + } catch { return testBody.length === 0 ? () => testProxyZone.run(testBody, null) : (done: any) => testProxyZone.run(testBody, null, [done]); diff --git a/packages/core/src/utils/cookie.ts b/packages/core/src/utils/cookie.ts index 2a9d21654ba6..218342ae36d3 100644 --- a/packages/core/src/utils/cookie.ts +++ b/packages/core/src/utils/cookie.ts @@ -66,7 +66,7 @@ export function parseCookie(str: string): Record { try { obj[key] = val.indexOf('%') !== -1 ? decodeURIComponent(val) : val; - } catch (e) { + } catch { obj[key] = val; } } diff --git a/packages/core/src/utils/envelope.ts b/packages/core/src/utils/envelope.ts index 0f6af9440643..ffda9434d886 100644 --- a/packages/core/src/utils/envelope.ts +++ b/packages/core/src/utils/envelope.ts @@ -112,7 +112,7 @@ export function serializeEnvelope(envelope: Envelope): string | Uint8Array { let stringifiedPayload: string; try { stringifiedPayload = JSON.stringify(payload); - } catch (e) { + } catch { // In case, despite all our efforts to keep `payload` circular-dependency-free, `JSON.stringify()` still // fails, we try again after normalizing it again with infinite normalization depth. This of course has a // performance impact but in this case a performance hit is better than throwing. From fdbb84021dc5375498b07e6548aaf47ee0dedd68 Mon Sep 17 00:00:00 2001 From: Francesco Novy Date: Tue, 15 Jul 2025 15:23:22 +0200 Subject: [PATCH 4/4] fix ecmaVersion --- .eslintrc.js | 2 +- packages/eslint-config-sdk/src/base.js | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 75ab5f048b29..5266f0117a89 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -9,7 +9,7 @@ module.exports = { es2017: true, }, parserOptions: { - ecmaVersion: 2018, + ecmaVersion: 2020, }, extends: ['@sentry-internal/sdk'], ignorePatterns: [ diff --git a/packages/eslint-config-sdk/src/base.js b/packages/eslint-config-sdk/src/base.js index 10e410aaa592..fade0633fc98 100644 --- a/packages/eslint-config-sdk/src/base.js +++ b/packages/eslint-config-sdk/src/base.js @@ -11,6 +11,10 @@ module.exports = { rules: { 'no-unused-vars': ['error', { argsIgnorePattern: '^_' }], }, + parserOptions: { + sourceType: 'module', + ecmaVersion: 2020, + }, }, { // Configuration for typescript files @@ -185,7 +189,7 @@ module.exports = { files: ['*.config.js', '*.config.mjs'], parserOptions: { sourceType: 'module', - ecmaVersion: 2018, + ecmaVersion: 2020, }, }, {