diff --git a/dev-packages/rollup-utils/npmHelpers.mjs b/dev-packages/rollup-utils/npmHelpers.mjs index 64031564f127..a6ded756d615 100644 --- a/dev-packages/rollup-utils/npmHelpers.mjs +++ b/dev-packages/rollup-utils/npmHelpers.mjs @@ -139,6 +139,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 558c890e93b8..caeb99569498 100644 --- a/packages/nextjs/test/serverExports.test.ts +++ b/packages/nextjs/test/serverExports.test.ts @@ -35,3 +35,17 @@ describe('Node-only integrations are statically detectable exports from every ru }, ); }); + +/** + * 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'); + }); +});