Skip to content

fix(nextjs): Populate __SENTRY_SERVER_MODULES__ in Turbopack#19231

Merged
RulaKhaled merged 6 commits intodevelopfrom
resolve-cache-issue-in-turbo
Feb 9, 2026
Merged

fix(nextjs): Populate __SENTRY_SERVER_MODULES__ in Turbopack#19231
RulaKhaled merged 6 commits intodevelopfrom
resolve-cache-issue-in-turbo

Conversation

@RulaKhaled
Copy link
Member

@RulaKhaled RulaKhaled commented Feb 8, 2026

Turbopack was missing __SENTRY_SERVER_MODULES__ injection, causing modulesIntegration to return empty in Next.js v16. This broke auto detection for integrations that check module availability.

Changes matche webpack's existing behavior by reading package.json at build time and injecting dependencies into the bundle.

closes: #19147

@github-actions
Copy link
Contributor

github-actions bot commented Feb 8, 2026

Codecov Results 📊


Generated by Codecov Action

@RulaKhaled RulaKhaled requested review from chargome and logaretm and removed request for logaretm February 9, 2026 10:28
@github-actions
Copy link
Contributor

github-actions bot commented Feb 9, 2026

node-overhead report 🧳

Note: This is a synthetic benchmark with a minimal express app and does not necessarily reflect the real-world performance impact in an application.

Scenario Requests/s % of Baseline Prev. Requests/s Change %
GET Baseline 8,780 - 8,968 -2%
GET With Sentry 1,680 19% 1,736 -3%
GET With Sentry (error only) 6,152 70% 6,029 +2%
POST Baseline 1,182 - 1,202 -2%
POST With Sentry 569 48% 585 -3%
POST With Sentry (error only) 1,058 90% 1,062 -0%
MYSQL Baseline 3,356 - 3,277 +2%
MYSQL With Sentry 443 13% 500 -11%
MYSQL With Sentry (error only) 2,738 82% 2,659 +3%

View base workflow run

@RulaKhaled RulaKhaled marked this pull request as ready for review February 9, 2026 11:58
Copy link
Member

@logaretm logaretm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice find and fix! Just a minor nitpick

/**
* Extract modules from project directory's package.json
*/
export function _getModules(projectDir: string): Record<string, string> {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

very l: nice extracting it but can we rename it to getPackageModules since it's no longer a private function.

}
// 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__ = getPackageModules(process.cwd());
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wrong package.json chosen in monorepos

Medium Severity

generateValueInjectionRules uses getPackageModules(process.cwd()) to populate __SENTRY_SERVER_MODULES__, which can read the wrong package.json when next runs from a different working directory (common in monorepos/workspaces). This can inject an unrelated dependency map, breaking module auto-detection or producing misleading module availability.

Fix in Cursor Fix in Web

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

}
// 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__ = getPackageModules(process.cwd());
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Turbopack value injection incompatible with bare identifier access

High Severity

The __SENTRY_SERVER_MODULES__ value is injected onto globalThis by the valueInjectionLoader, but the consumer code in modules.ts accesses it as a bare identifier rather than via globalThis. In ES modules with strict mode, properties on globalThis aren't accessible as bare identifiers, causing the typeof check to evaluate as 'undefined' and fall back to an empty object. This breaks module detection for Turbopack builds, defeating the entire purpose of this PR.

Fix in Cursor Fix in Web

@RulaKhaled RulaKhaled merged commit 952dae3 into develop Feb 9, 2026
68 checks passed
@RulaKhaled RulaKhaled deleted the resolve-cache-issue-in-turbo branch February 9, 2026 21:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

vercelAIIntegration doesn't activate on Vercel deployments without force: true

2 participants