From 2ef1757e3c41a7b68de9938918999ecede2152d6 Mon Sep 17 00:00:00 2001 From: Sigrid <32902192+s1gr1d@users.noreply.github.com> Date: Fri, 23 Oct 2026 11:56:25 +0200 Subject: [PATCH] fix(v10/build): Make CJS re-exports visible to Node ESM imports Backport of: #25599 Co-Authored-By: GPT-6 --- dev-packages/rollup-utils/npmHelpers.mjs | 2 ++ packages/nextjs/test/serverExports.test.ts | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/dev-packages/rollup-utils/npmHelpers.mjs b/dev-packages/rollup-utils/npmHelpers.mjs index 43e11e36f19c..e106e579c3c5 100644 --- a/dev-packages/rollup-utils/npmHelpers.mjs +++ b/dev-packages/rollup-utils/npmHelpers.mjs @@ -76,6 +76,8 @@ export function makeBaseNPMConfig(options = {}) { // Allow wrappers or helper functions generated by rollup to use any ES2015 features generatedCode: { preset: 'es2015', + // With arrow functions, Node can't see `export *` exports when ESM code imports our CJS files. + arrowFunctions: false, }, // don't add `"use strict"` to the top of cjs files diff --git a/packages/nextjs/test/serverExports.test.ts b/packages/nextjs/test/serverExports.test.ts index 4e9d04866bf3..6e32ea4416f6 100644 --- a/packages/nextjs/test/serverExports.test.ts +++ b/packages/nextjs/test/serverExports.test.ts @@ -30,3 +30,17 @@ describe('`pinoIntegration` is a statically detectable export from every runtime expect(staticExports[runtime]).toContain('pinoIntegration'); }); }); + +/** + * Node loads this CJS file for ESM imports too, and must see that it re-exports everything from `@sentry/node`. + * + * Regression test for https://github.com/getsentry/sentry-javascript/issues/22791 + */ +describe('CJS server build re-exports are detectable by Node', () => { + it('detects the `@sentry/node` re-export', async () => { + await init(); + const { reexports } = parse(readFileSync(resolve(__dirname, '../build/cjs/index.server.js'), 'utf8')); + + expect(reexports).toContain('@sentry/node'); + }); +});