refactor(nextjs): Change ESM interop. to remove lazy loading#22193
Merged
Conversation
timfish
marked this pull request as ready for review
July 11, 2026 13:41
timfish
requested review from
andreiborza,
chargome,
isaacs,
mydea and
s1gr1d
and removed request for
a team
July 11, 2026 13:41
Collaborator
Author
|
Practicing what I preach 🤣 |
isaacs
approved these changes
Jul 15, 2026
logaretm
approved these changes
Jul 16, 2026
| default?: (options: { instrumentations: InstrumentationConfig[] }) => unknown; | ||
| }; | ||
| const codeTransformerWebpack = mod.default ?? (mod as unknown as NonNullable<typeof mod.default>); | ||
| export function sentryOrchestrionWebpackPlugin(options: PluginOptions = {}): ReturnType<typeof codeTransformerWebpack> { |
Contributor
There was a problem hiding this comment.
Bug: The function sentryOrchestrionWebpackPlugin is called without arguments, but its options parameter no longer has a default value, leading to a TypeError when options.instrumentations is accessed.
Severity: HIGH
Suggested Fix
Restore the default value for the options parameter in the sentryOrchestrionWebpackPlugin function signature. Change (options: PluginOptions) to (options: PluginOptions = {}) to prevent options from being undefined when the function is called without arguments.
Prompt for AI Agent
Review the code at the location below. A potential bug has been identified by an AI
agent. Verify if this is a real issue. If it is, propose a fix; if not, explain why it's
not valid.
Location: packages/server-utils/src/orchestrion/bundler/webpack.ts#L50
Potential issue: The function `sentryOrchestrionWebpackPlugin` is called without
arguments from `packages/nextjs/src/config/webpack.ts`. A recent refactor removed the
default `{}` value for the `options` parameter. Consequently, `options` becomes
`undefined` inside the function. This `undefined` value is passed to
`orchestrionTransformOptions`, which then attempts to access `options.instrumentations`,
causing a `TypeError`. This will crash the webpack build process for Next.js
applications that have the `_experimental.useDiagnosticsChannelInjection` option
enabled.
Also affects:
packages/nextjs/src/config/webpack.ts:436~436
Did we get this right? 👍 / 👎 to inform future reviews.
chargome
approved these changes
Jul 17, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Code checking
defaultlike this always points to an ESM/CJS interop issue:sentry-javascript/packages/server-utils/src/orchestrion/bundler/webpack.ts
Line 53 in 8c6358a
This is caused by our repo-wide Rollup setting of
interop: 'esModule'. This is required for us to be able to monkey patch Node built-ins but causes the above issues with CJS dependencies that use the classic CJS default export (module.exports = fn).This PR overrides the
interopsetting for the suspect package and removes the lazy dependency loading.