From c4c6471a36064108c9b849562fbaf482a5b3e084 Mon Sep 17 00:00:00 2001 From: RulaKhaled Date: Sun, 8 Feb 2026 22:42:50 +0100 Subject: [PATCH 1/5] fix: Populate __SENTRY_SERVER_MODULES__ in Turbopack --- .../turbopack/generateValueInjectionRules.ts | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/packages/nextjs/src/config/turbopack/generateValueInjectionRules.ts b/packages/nextjs/src/config/turbopack/generateValueInjectionRules.ts index a241d4727572..7ff65be660aa 100644 --- a/packages/nextjs/src/config/turbopack/generateValueInjectionRules.ts +++ b/packages/nextjs/src/config/turbopack/generateValueInjectionRules.ts @@ -1,3 +1,4 @@ +import * as fs from 'fs'; import * as path from 'path'; import type { VercelCronsConfig } from '../../common/types'; import type { RouteManifest } from '../manifest/types'; @@ -40,6 +41,9 @@ export function generateValueInjectionRules({ if (vercelCronsConfig) { serverValues._sentryVercelCronsConfig = JSON.stringify(vercelCronsConfig); } + // Inject server modules (matching webpack's __SENTRY_SERVER_MODULES__ behavior) + // Use process.cwd() to get the project directory at build time + serverValues.__SENTRY_SERVER_MODULES__ = getModulesFromPackageJson(process.cwd()); if (Object.keys(isomorphicValues).length > 0) { clientValues = { ...clientValues, ...isomorphicValues }; @@ -82,3 +86,24 @@ export function generateValueInjectionRules({ return rules; } + +/** + * Extract modules from package.json (matching webpack's _getModules behavior) + */ +function getModulesFromPackageJson(projectDir: string): Record { + try { + const packageJsonPath = path.join(projectDir, 'package.json'); + const packageJsonContent = fs.readFileSync(packageJsonPath, 'utf8'); + const packageJsonObject = JSON.parse(packageJsonContent) as { + dependencies?: Record; + devDependencies?: Record; + }; + + return { + ...packageJsonObject.dependencies, + ...packageJsonObject.devDependencies, + }; + } catch { + return {}; + } +} From 552d91107532870429bcd63e10321ac1c4a57589 Mon Sep 17 00:00:00 2001 From: RulaKhaled Date: Mon, 9 Feb 2026 11:27:38 +0100 Subject: [PATCH 2/5] fix tests --- .../constructTurbopackConfig.test.ts | 145 +++++++++++++++++- .../generateValueInjectionRules.test.ts | 111 ++++++++++++-- 2 files changed, 240 insertions(+), 16 deletions(-) diff --git a/packages/nextjs/test/config/turbopack/constructTurbopackConfig.test.ts b/packages/nextjs/test/config/turbopack/constructTurbopackConfig.test.ts index ef37711eac48..7c576a5ef692 100644 --- a/packages/nextjs/test/config/turbopack/constructTurbopackConfig.test.ts +++ b/packages/nextjs/test/config/turbopack/constructTurbopackConfig.test.ts @@ -23,6 +23,7 @@ describe('constructTurbopackConfig', () => { { path: '/users', regex: '/users' }, { path: '/api/health', regex: '/api/health' }, ], + isrRoutes: [], }; const mockSentryOptions = {}; @@ -36,7 +37,22 @@ describe('constructTurbopackConfig', () => { userSentryOptions: mockSentryOptions, }); - expect(result).toEqual({}); + expect(result).toEqual({ + rules: { + '**/instrumentation.*': { + loaders: [ + { + loader: '/mocked/path/to/valueInjectionLoader.js', + options: { + values: { + __SENTRY_SERVER_MODULES__: expect.any(Object), + }, + }, + }, + ], + }, + }, + }); }); it('should create turbopack config with instrumentation rule when manifest is provided', () => { @@ -61,6 +77,18 @@ describe('constructTurbopackConfig', () => { }, ], }, + '**/instrumentation.*': { + loaders: [ + { + loader: '/mocked/path/to/valueInjectionLoader.js', + options: { + values: { + __SENTRY_SERVER_MODULES__: expect.any(Object), + }, + }, + }, + ], + }, }, }); }); @@ -135,6 +163,18 @@ describe('constructTurbopackConfig', () => { }, rules: { '*.test.js': ['jest-loader'], + '**/instrumentation.*': { + loaders: [ + { + loader: '/mocked/path/to/valueInjectionLoader.js', + options: { + values: { + __SENTRY_SERVER_MODULES__: expect.any(Object), + }, + }, + }, + ], + }, }, }); }); @@ -174,6 +214,18 @@ describe('constructTurbopackConfig', () => { }, ], }, + '**/instrumentation.*': { + loaders: [ + { + loader: '/mocked/path/to/valueInjectionLoader.js', + options: { + values: { + __SENTRY_SERVER_MODULES__: expect.any(Object), + }, + }, + }, + ], + }, }, }); }); @@ -224,7 +276,7 @@ describe('constructTurbopackConfig', () => { describe('with edge cases', () => { it('should handle empty route manifest', () => { const userNextConfig: NextConfigObject = {}; - const emptyManifest: RouteManifest = { dynamicRoutes: [], staticRoutes: [] }; + const emptyManifest: RouteManifest = { dynamicRoutes: [], staticRoutes: [], isrRoutes: [] }; const result = constructTurbopackConfig({ userNextConfig, @@ -245,6 +297,18 @@ describe('constructTurbopackConfig', () => { }, ], }, + '**/instrumentation.*': { + loaders: [ + { + loader: '/mocked/path/to/valueInjectionLoader.js', + options: { + values: { + __SENTRY_SERVER_MODULES__: expect.any(Object), + }, + }, + }, + ], + }, }, }); }); @@ -252,6 +316,7 @@ describe('constructTurbopackConfig', () => { it('should handle complex route manifest', () => { const userNextConfig: NextConfigObject = {}; const complexManifest: RouteManifest = { + isrRoutes: [], dynamicRoutes: [ { path: '/users/[id]/posts/[postId]', regex: '/users/([^/]+)/posts/([^/]+)', paramNames: ['id', 'postId'] }, { path: '/api/[...params]', regex: '/api/(.+)', paramNames: ['params'] }, @@ -278,6 +343,18 @@ describe('constructTurbopackConfig', () => { }, ], }, + '**/instrumentation.*': { + loaders: [ + { + loader: '/mocked/path/to/valueInjectionLoader.js', + options: { + values: { + __SENTRY_SERVER_MODULES__: expect.any(Object), + }, + }, + }, + ], + }, }, }); }); @@ -308,6 +385,18 @@ describe('constructTurbopackConfig', () => { }, ], }, + '**/instrumentation.*': { + loaders: [ + { + loader: '/mocked/path/to/valueInjectionLoader.js', + options: { + values: { + __SENTRY_SERVER_MODULES__: expect.any(Object), + }, + }, + }, + ], + }, }, }); }); @@ -342,6 +431,7 @@ describe('constructTurbopackConfig', () => { loader: '/mocked/path/to/valueInjectionLoader.js', options: { values: { + __SENTRY_SERVER_MODULES__: expect.any(Object), _sentryNextJsVersion: '15.0.0', }, }, @@ -397,6 +487,7 @@ describe('constructTurbopackConfig', () => { loader: '/mocked/path/to/valueInjectionLoader.js', options: { values: { + __SENTRY_SERVER_MODULES__: expect.any(Object), _sentryNextJsVersion: '14.0.0', }, }, @@ -433,6 +524,18 @@ describe('constructTurbopackConfig', () => { }, ], }, + '**/instrumentation.*': { + loaders: [ + { + loader: '/mocked/path/to/valueInjectionLoader.js', + options: { + values: { + __SENTRY_SERVER_MODULES__: expect.any(Object), + }, + }, + }, + ], + }, }, }); }); @@ -493,6 +596,7 @@ describe('constructTurbopackConfig', () => { loader: '/mocked/path/to/valueInjectionLoader.js', options: { values: { + __SENTRY_SERVER_MODULES__: expect.any(Object), _sentryNextJsVersion: nextJsVersion, }, }, @@ -534,6 +638,7 @@ describe('constructTurbopackConfig', () => { loader: '/mocked/path/to/valueInjectionLoader.js', options: { values: { + __SENTRY_SERVER_MODULES__: expect.any(Object), _sentryNextJsVersion: nextJsVersion, }, }, @@ -586,6 +691,7 @@ describe('constructTurbopackConfig', () => { loader: '/mocked/path/to/valueInjectionLoader.js', options: { values: { + __SENTRY_SERVER_MODULES__: expect.any(Object), _sentryNextJsVersion: nextJsVersion, }, }, @@ -624,7 +730,22 @@ describe('constructTurbopackConfig', () => { nextJsVersion: undefined, }); - expect(result).toEqual({}); + expect(result).toEqual({ + rules: { + '**/instrumentation.*': { + loaders: [ + { + loader: '/mocked/path/to/valueInjectionLoader.js', + options: { + values: { + __SENTRY_SERVER_MODULES__: expect.any(Object), + }, + }, + }, + ], + }, + }, + }); }); it('should not create Next.js version rule when nextJsVersion is empty string', () => { @@ -635,7 +756,22 @@ describe('constructTurbopackConfig', () => { nextJsVersion: '', }); - expect(result).toEqual({}); + expect(result).toEqual({ + rules: { + '**/instrumentation.*': { + loaders: [ + { + loader: '/mocked/path/to/valueInjectionLoader.js', + options: { + values: { + __SENTRY_SERVER_MODULES__: expect.any(Object), + }, + }, + }, + ], + }, + }, + }); }); it('should not override existing instrumentation rule when nextJsVersion is provided', () => { @@ -725,6 +861,7 @@ describe('constructTurbopackConfig', () => { loader: '/mocked/path/to/valueInjectionLoader.js', options: { values: { + __SENTRY_SERVER_MODULES__: expect.any(Object), _sentryNextJsVersion: nextJsVersion, }, }, diff --git a/packages/nextjs/test/config/turbopack/generateValueInjectionRules.test.ts b/packages/nextjs/test/config/turbopack/generateValueInjectionRules.test.ts index 74e3d24b2cc4..d4fed2368101 100644 --- a/packages/nextjs/test/config/turbopack/generateValueInjectionRules.test.ts +++ b/packages/nextjs/test/config/turbopack/generateValueInjectionRules.test.ts @@ -25,7 +25,23 @@ describe('generateValueInjectionRules', () => { it('should return empty array when no inputs are provided', () => { const result = generateValueInjectionRules({}); - expect(result).toEqual([]); + expect(result).toEqual([ + { + matcher: '**/instrumentation.*', + rule: { + loaders: [ + { + loader: '/mocked/path/to/valueInjectionLoader.js', + options: { + values: { + __SENTRY_SERVER_MODULES__: expect.any(Object), + }, + }, + }, + ], + }, + }, + ]); }); it('should return empty array when inputs are undefined', () => { @@ -34,7 +50,23 @@ describe('generateValueInjectionRules', () => { nextJsVersion: undefined, }); - expect(result).toEqual([]); + expect(result).toEqual([ + { + matcher: '**/instrumentation.*', + rule: { + loaders: [ + { + loader: '/mocked/path/to/valueInjectionLoader.js', + options: { + values: { + __SENTRY_SERVER_MODULES__: expect.any(Object), + }, + }, + }, + ], + }, + }, + ]); }); }); @@ -71,6 +103,7 @@ describe('generateValueInjectionRules', () => { loader: '/mocked/path/to/valueInjectionLoader.js', options: { values: { + __SENTRY_SERVER_MODULES__: expect.any(Object), _sentryNextJsVersion: '14.0.0', }, }, @@ -86,9 +119,9 @@ describe('generateValueInjectionRules', () => { routeManifest: mockRouteManifest, }); - expect(result).toHaveLength(1); + expect(result).toHaveLength(2); - // Only client rule should exist + // Client rule should exist const clientRule = result.find(rule => rule.matcher === '**/instrumentation-client.*'); expect(clientRule).toBeDefined(); expect(clientRule?.rule).toEqual({ @@ -104,9 +137,21 @@ describe('generateValueInjectionRules', () => { ], }); - // Server rule should not exist + // Server rule should exist with __SENTRY_SERVER_MODULES__ const serverRule = result.find(rule => rule.matcher === '**/instrumentation.*'); - expect(serverRule).toBeUndefined(); + expect(serverRule).toBeDefined(); + expect(serverRule?.rule).toEqual({ + loaders: [ + { + loader: '/mocked/path/to/valueInjectionLoader.js', + options: { + values: { + __SENTRY_SERVER_MODULES__: expect.any(Object), + }, + }, + }, + ], + }); }); it('should handle empty route manifest', () => { @@ -119,7 +164,7 @@ describe('generateValueInjectionRules', () => { routeManifest: emptyManifest, }); - expect(result).toHaveLength(1); + expect(result).toHaveLength(2); const clientRule = result.find(rule => rule.matcher === '**/instrumentation-client.*'); expect(clientRule?.rule).toMatchObject({ @@ -133,6 +178,19 @@ describe('generateValueInjectionRules', () => { }, ], }); + + const serverRule = result.find(rule => rule.matcher === '**/instrumentation.*'); + expect(serverRule?.rule).toMatchObject({ + loaders: [ + { + options: { + values: { + __SENTRY_SERVER_MODULES__: expect.any(Object), + }, + }, + }, + ], + }); }); it('should handle complex route manifest', () => { @@ -154,7 +212,7 @@ describe('generateValueInjectionRules', () => { routeManifest: complexManifest, }); - expect(result).toHaveLength(1); + expect(result).toHaveLength(2); const clientRule = result.find(rule => rule.matcher === '**/instrumentation-client.*'); expect(clientRule?.rule).toMatchObject({ @@ -168,6 +226,19 @@ describe('generateValueInjectionRules', () => { }, ], }); + + const serverRule = result.find(rule => rule.matcher === '**/instrumentation.*'); + expect(serverRule?.rule).toMatchObject({ + loaders: [ + { + options: { + values: { + __SENTRY_SERVER_MODULES__: expect.any(Object), + }, + }, + }, + ], + }); }); }); @@ -197,7 +268,7 @@ describe('generateValueInjectionRules', () => { ], }); - // Server rule should have only nextJsVersion + // Server rule should have __SENTRY_SERVER_MODULES__ and nextJsVersion const serverRule = result.find(rule => rule.matcher === '**/instrumentation.*'); expect(serverRule).toBeDefined(); expect(serverRule?.rule).toEqual({ @@ -206,6 +277,7 @@ describe('generateValueInjectionRules', () => { loader: '/mocked/path/to/valueInjectionLoader.js', options: { values: { + __SENTRY_SERVER_MODULES__: expect.any(Object), _sentryNextJsVersion: '14.0.0', }, }, @@ -217,9 +289,9 @@ describe('generateValueInjectionRules', () => { it('should handle all combinations of truthy and falsy values', () => { const testCases = [ { nextJsVersion: '14.0.0', routeManifest: mockRouteManifest, expectedRules: 2 }, - { nextJsVersion: '', routeManifest: mockRouteManifest, expectedRules: 1 }, + { nextJsVersion: '', routeManifest: mockRouteManifest, expectedRules: 2 }, { nextJsVersion: '14.0.0', routeManifest: undefined, expectedRules: 2 }, - { nextJsVersion: '', routeManifest: undefined, expectedRules: 0 }, + { nextJsVersion: '', routeManifest: undefined, expectedRules: 1 }, ]; testCases.forEach(({ nextJsVersion, routeManifest, expectedRules }) => { @@ -319,7 +391,22 @@ describe('generateValueInjectionRules', () => { nextJsVersion: '', }); - expect(result).toEqual([]); + expect(result).toHaveLength(1); + expect(result[0]).toMatchObject({ + matcher: '**/instrumentation.*', + rule: { + loaders: [ + { + loader: expect.any(String), + options: { + values: { + __SENTRY_SERVER_MODULES__: expect.any(Object), + }, + }, + }, + ], + }, + }); }); it('should handle whitespace-only nextJsVersion', () => { From c8ba43fe4112cf17e980e467291ac739575086a2 Mon Sep 17 00:00:00 2001 From: RulaKhaled Date: Mon, 9 Feb 2026 13:23:39 +0100 Subject: [PATCH 3/5] duplicate fns, just unify it --- .../turbopack/generateValueInjectionRules.ts | 25 ++----------------- packages/nextjs/src/config/util.ts | 22 ++++++++++++++++ packages/nextjs/src/config/webpack.ts | 20 +-------------- 3 files changed, 25 insertions(+), 42 deletions(-) diff --git a/packages/nextjs/src/config/turbopack/generateValueInjectionRules.ts b/packages/nextjs/src/config/turbopack/generateValueInjectionRules.ts index 7ff65be660aa..363fc58b6413 100644 --- a/packages/nextjs/src/config/turbopack/generateValueInjectionRules.ts +++ b/packages/nextjs/src/config/turbopack/generateValueInjectionRules.ts @@ -1,8 +1,8 @@ -import * as fs from 'fs'; import * as path from 'path'; import type { VercelCronsConfig } from '../../common/types'; import type { RouteManifest } from '../manifest/types'; import type { JSONValue, TurbopackMatcherWithRule } from '../types'; +import { _getModules } from '../util'; /** * Generate the value injection rules for client and server in turbopack config. @@ -43,7 +43,7 @@ export function generateValueInjectionRules({ } // Inject server modules (matching webpack's __SENTRY_SERVER_MODULES__ behavior) // Use process.cwd() to get the project directory at build time - serverValues.__SENTRY_SERVER_MODULES__ = getModulesFromPackageJson(process.cwd()); + serverValues.__SENTRY_SERVER_MODULES__ = _getModules(process.cwd()); if (Object.keys(isomorphicValues).length > 0) { clientValues = { ...clientValues, ...isomorphicValues }; @@ -86,24 +86,3 @@ export function generateValueInjectionRules({ return rules; } - -/** - * Extract modules from package.json (matching webpack's _getModules behavior) - */ -function getModulesFromPackageJson(projectDir: string): Record { - try { - const packageJsonPath = path.join(projectDir, 'package.json'); - const packageJsonContent = fs.readFileSync(packageJsonPath, 'utf8'); - const packageJsonObject = JSON.parse(packageJsonContent) as { - dependencies?: Record; - devDependencies?: Record; - }; - - return { - ...packageJsonObject.dependencies, - ...packageJsonObject.devDependencies, - }; - } catch { - return {}; - } -} diff --git a/packages/nextjs/src/config/util.ts b/packages/nextjs/src/config/util.ts index d4ff32be0c0a..021f0038d821 100644 --- a/packages/nextjs/src/config/util.ts +++ b/packages/nextjs/src/config/util.ts @@ -1,6 +1,7 @@ import { parseSemver } from '@sentry/core'; import * as fs from 'fs'; import { createRequire } from 'module'; +import * as path from 'path'; /** * Returns the version of Next.js installed in the project, or undefined if it cannot be determined. @@ -181,3 +182,24 @@ export function detectActiveBundler(): 'turbopack' | 'webpack' { return 'webpack'; } } + +/** + * Extract modules from project directory's package.json + */ +export function _getModules(projectDir: string): Record { + try { + const packageJson = path.join(projectDir, 'package.json'); + const packageJsonContent = fs.readFileSync(packageJson, 'utf8'); + const packageJsonObject = JSON.parse(packageJsonContent) as { + dependencies?: Record; + devDependencies?: Record; + }; + + return { + ...packageJsonObject.dependencies, + ...packageJsonObject.devDependencies, + }; + } catch { + return {}; + } +} diff --git a/packages/nextjs/src/config/webpack.ts b/packages/nextjs/src/config/webpack.ts index c57c7744a188..88e4792513b9 100644 --- a/packages/nextjs/src/config/webpack.ts +++ b/packages/nextjs/src/config/webpack.ts @@ -21,7 +21,7 @@ import type { WebpackConfigObjectWithModuleRules, WebpackEntryProperty, } from './types'; -import { getNextjsVersion } from './util'; +import { _getModules, getNextjsVersion } from './util'; import type { VercelCronsConfigResult } from './withSentryConfig/getFinalConfigObjectUtils'; // Next.js runs webpack 3 times, once for the client, the server, and for edge. Because we don't want to print certain @@ -883,24 +883,6 @@ function addEdgeRuntimePolyfills(newConfig: WebpackConfigObjectWithModuleRules, }; } -function _getModules(projectDir: string): Record { - try { - const packageJson = path.join(projectDir, 'package.json'); - const packageJsonContent = fs.readFileSync(packageJson, 'utf8'); - const packageJsonObject = JSON.parse(packageJsonContent) as { - dependencies?: Record; - devDependencies?: Record; - }; - - return { - ...packageJsonObject.dependencies, - ...packageJsonObject.devDependencies, - }; - } catch { - return {}; - } -} - /** * Sets up the tree-shaking flags based on the user's configuration. * https://docs.sentry.io/platforms/javascript/guides/nextjs/configuration/tree-shaking/ From 919109a4a64b3e8134912dc7b1ce2c2ce1d39320 Mon Sep 17 00:00:00 2001 From: RulaKhaled Date: Mon, 9 Feb 2026 19:52:10 +0100 Subject: [PATCH 4/5] Rename --- .../src/config/turbopack/generateValueInjectionRules.ts | 4 ++-- packages/nextjs/src/config/util.ts | 2 +- packages/nextjs/src/config/webpack.ts | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/nextjs/src/config/turbopack/generateValueInjectionRules.ts b/packages/nextjs/src/config/turbopack/generateValueInjectionRules.ts index 363fc58b6413..9dac16cc411f 100644 --- a/packages/nextjs/src/config/turbopack/generateValueInjectionRules.ts +++ b/packages/nextjs/src/config/turbopack/generateValueInjectionRules.ts @@ -2,7 +2,7 @@ import * as path from 'path'; import type { VercelCronsConfig } from '../../common/types'; import type { RouteManifest } from '../manifest/types'; import type { JSONValue, TurbopackMatcherWithRule } from '../types'; -import { _getModules } from '../util'; +import { getPackageModules } from '../util'; /** * Generate the value injection rules for client and server in turbopack config. @@ -43,7 +43,7 @@ export function generateValueInjectionRules({ } // Inject server modules (matching webpack's __SENTRY_SERVER_MODULES__ behavior) // Use process.cwd() to get the project directory at build time - serverValues.__SENTRY_SERVER_MODULES__ = _getModules(process.cwd()); + serverValues.__SENTRY_SERVER_MODULES__ = getPackageModules(process.cwd()); if (Object.keys(isomorphicValues).length > 0) { clientValues = { ...clientValues, ...isomorphicValues }; diff --git a/packages/nextjs/src/config/util.ts b/packages/nextjs/src/config/util.ts index 021f0038d821..d23efc480b76 100644 --- a/packages/nextjs/src/config/util.ts +++ b/packages/nextjs/src/config/util.ts @@ -186,7 +186,7 @@ export function detectActiveBundler(): 'turbopack' | 'webpack' { /** * Extract modules from project directory's package.json */ -export function _getModules(projectDir: string): Record { +export function getPackageModules(projectDir: string): Record { try { const packageJson = path.join(projectDir, 'package.json'); const packageJsonContent = fs.readFileSync(packageJson, 'utf8'); diff --git a/packages/nextjs/src/config/webpack.ts b/packages/nextjs/src/config/webpack.ts index 88e4792513b9..6a9fd12032f5 100644 --- a/packages/nextjs/src/config/webpack.ts +++ b/packages/nextjs/src/config/webpack.ts @@ -21,7 +21,7 @@ import type { WebpackConfigObjectWithModuleRules, WebpackEntryProperty, } from './types'; -import { _getModules, getNextjsVersion } from './util'; +import { getNextjsVersion,getPackageModules } from './util'; import type { VercelCronsConfigResult } from './withSentryConfig/getFinalConfigObjectUtils'; // Next.js runs webpack 3 times, once for the client, the server, and for edge. Because we don't want to print certain @@ -425,7 +425,7 @@ export function constructWebpackConfigFunction({ newConfig.plugins = newConfig.plugins || []; newConfig.plugins.push( new buildContext.webpack.DefinePlugin({ - __SENTRY_SERVER_MODULES__: JSON.stringify(_getModules(projectDir)), + __SENTRY_SERVER_MODULES__: JSON.stringify(getPackageModules(projectDir)), }), ); From d95c8e85b8c1b3f6000ac6af309a0921f4b67c75 Mon Sep 17 00:00:00 2001 From: RulaKhaled Date: Mon, 9 Feb 2026 21:51:03 +0100 Subject: [PATCH 5/5] lint --- packages/nextjs/src/config/webpack.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nextjs/src/config/webpack.ts b/packages/nextjs/src/config/webpack.ts index 6a9fd12032f5..f86ceb7de736 100644 --- a/packages/nextjs/src/config/webpack.ts +++ b/packages/nextjs/src/config/webpack.ts @@ -21,7 +21,7 @@ import type { WebpackConfigObjectWithModuleRules, WebpackEntryProperty, } from './types'; -import { getNextjsVersion,getPackageModules } from './util'; +import { getNextjsVersion, getPackageModules } from './util'; import type { VercelCronsConfigResult } from './withSentryConfig/getFinalConfigObjectUtils'; // Next.js runs webpack 3 times, once for the client, the server, and for edge. Because we don't want to print certain