diff --git a/packages/node-integration-tests/suites/public-api/LocalVariables/test.ts b/packages/node-integration-tests/suites/public-api/LocalVariables/test.ts index aae488d50475..d07959e9d10d 100644 --- a/packages/node-integration-tests/suites/public-api/LocalVariables/test.ts +++ b/packages/node-integration-tests/suites/public-api/LocalVariables/test.ts @@ -1,13 +1,10 @@ import type { Event } from '@sentry/node'; -import { parseSemver } from '@sentry/utils'; import * as childProcess from 'child_process'; import * as path from 'path'; -const nodeMajor = parseSemver(process.version.slice(1)).major || 1; +import { conditionalTest } from '../../../utils'; -const testIf = (condition: boolean, t: jest.It) => (condition ? t : t.skip); - -describe('LocalVariables integration', () => { +conditionalTest({ min: 18 })('LocalVariables integration', () => { test('Should not include local variables by default', done => { expect.assertions(2); @@ -57,7 +54,7 @@ describe('LocalVariables integration', () => { }); }); - testIf(nodeMajor > 10, test)('Should include local variables with ESM', done => { + test('Should include local variables with ESM', done => { expect.assertions(4); const testScriptPath = path.resolve(__dirname, 'local-variables-caught.mjs'); diff --git a/packages/node/src/integrations/localvariables.ts b/packages/node/src/integrations/localvariables.ts index 0b5f8865e1ca..f98011d94832 100644 --- a/packages/node/src/integrations/localvariables.ts +++ b/packages/node/src/integrations/localvariables.ts @@ -1,7 +1,9 @@ import type { Event, EventProcessor, Exception, Hub, Integration, StackFrame, StackParser } from '@sentry/types'; +import { logger } from '@sentry/utils'; import type { Debugger, InspectorNotification, Runtime, Session } from 'inspector'; import { LRUMap } from 'lru_map'; +import { NODE_VERSION } from '../nodeVersion'; import type { NodeClientOptions } from '../types'; type Variables = Record; @@ -282,6 +284,15 @@ export class LocalVariables implements Integration { clientOptions: NodeClientOptions | undefined, ): void { if (this._session && clientOptions?.includeLocalVariables) { + // Only setup this integration if the Node version is >= v18 + // https://github.com/getsentry/sentry-javascript/issues/7697 + const unsupportedNodeVersion = (NODE_VERSION.major || 0) < 18; + + if (unsupportedNodeVersion) { + logger.log('The `LocalVariables` integration is only supported on Node >= v18.'); + return; + } + this._session.configureAndConnect( (ev, complete) => this._handlePaused(clientOptions.stackParser, ev as InspectorNotification, complete), diff --git a/packages/node/test/integrations/localvariables.test.ts b/packages/node/test/integrations/localvariables.test.ts index 37e980c9cb96..6cd3527b9dae 100644 --- a/packages/node/test/integrations/localvariables.test.ts +++ b/packages/node/test/integrations/localvariables.test.ts @@ -5,8 +5,11 @@ import type { LRUMap } from 'lru_map'; import { defaultStackParser } from '../../src'; import type { DebugSession, FrameVariables } from '../../src/integrations/localvariables'; import { createCallbackList, LocalVariables } from '../../src/integrations/localvariables'; +import { NODE_VERSION } from '../../src/nodeVersion'; import { getDefaultNodeClientOptions } from '../../test/helper/node-client-options'; +const describeIf = (condition: boolean) => (condition ? describe : describe.skip); + interface ThrowOn { configureAndConnect?: boolean; getLocalVariables?: boolean; @@ -145,7 +148,7 @@ const exceptionEvent100Frames = { }, }; -describe('LocalVariables', () => { +describeIf(NODE_VERSION >= 18)('LocalVariables', () => { it('Adds local variables to stack frames', async () => { expect.assertions(7);