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'); + }); +});