chore: Remove lazy loading for hook registration - #22443

Merged
isaacs merged 18 commits into
developfrom
timfish/chore/cleanup-hook-register
Jul 23, 2026
Merged

chore: Remove lazy loading for hook registration#22443
isaacs merged 18 commits into
developfrom
timfish/chore/cleanup-hook-register

Conversation

@timfish

@timfishtimfish commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

This PR simplifies the register.ts hook registration to remove all the lazy loading. The clankers seem to always resort to lazy loading but pushed hard enough they will find better alternatives 🤣

Once the lazy loading was removed there were a number of other things required to get this actually passing all the e2e tests:

  • Bundle the whole orchestrion runtime chain (@apm-js-collab/*, meriyah, esquery, …) into @sentry/server-utils' build (all now devDependencies). The dist only has relative requires, which removes two classes of breakage:
  • The Module.register async hook is now a self-referenced entrypoint of our own ESM build (@sentry/server-utils/orchestrion/hook), sharing the vendored chunks
  • The webpack/Turbopack loader ships as a bundled entrypoint (./orchestrion/webpack-loader), resolved by self-reference since the @apm-js-collab packages are no longer installed
  • Fix build-time Rollup ESM interop issues (Node builtins need default interop; default-only ESM deps need requireReturnsDefault: 'auto')
  • NextJS: force @sentry/server-utils external via absolute-path externals so register.ts stays in node_modules and its Module.register self-reference resolves under pnpm — also removes the tracingHooksPath workaround
  • Bumps the @sentry/node size limit by ~40kb — the lazy loading previously hid this code from the size report
  • feat: Remove support for initialising via --require #22513

@github-actions

github-actionsBot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser27.79 kB--
@sentry/browser - with treeshaking flags26.23 kB--
@sentry/browser (incl. Tracing)46.31 kB--
@sentry/browser (incl. Tracing + Span Streaming)48.06 kB--
@sentry/browser (incl. Tracing, Profiling)51.12 kB--
@sentry/browser (incl. Tracing, Replay)85.59 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags75.23 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)90.29 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)102.97 kB--
@sentry/browser (incl. Feedback)44.96 kB--
@sentry/browser (incl. sendFeedback)32.59 kB--
@sentry/browser (incl. FeedbackAsync)37.64 kB--
@sentry/browser (incl. Metrics)28.88 kB--
@sentry/browser (incl. Logs)29.11 kB--
@sentry/browser (incl. Metrics & Logs)29.8 kB--
@sentry/react29.59 kB--
@sentry/react (incl. Tracing)48.6 kB--
@sentry/vue33.22 kB--
@sentry/vue (incl. Tracing)48.28 kB--
@sentry/svelte27.81 kB--
CDN Bundle30.11 kB--
CDN Bundle (incl. Tracing)48.14 kB--
CDN Bundle (incl. Logs, Metrics)31.69 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)49.47 kB--
CDN Bundle (incl. Replay, Logs, Metrics)70.95 kB--
CDN Bundle (incl. Tracing, Replay)85.72 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)87.01 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)91.49 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)92.78 kB--
CDN Bundle - uncompressed89.77 kB--
CDN Bundle (incl. Tracing) - uncompressed144.84 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed94.48 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed148.82 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed219.24 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed264.08 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed268.04 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed277.78 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed281.74 kB--
@sentry/nextjs (client)51.13 kB--
@sentry/sveltekit (client)46.75 kB--
@sentry/core/server79.92 kB--
@sentry/core/browser51.9 kB--
@sentry/node124.4 kB-0.01%-1 B 🔽
@sentry/node (incl. diagnostics channel injection)168.41 kB+12.41%+18.58 kB 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection)166 B-99.77%-69.86 kB 🔽
@sentry/node - without tracing74.66 kB+0.01%+1 B 🔺
@sentry/aws-serverless84.13 kB+0.01%+1 B 🔺
@sentry/cloudflare (withSentry) - minified196.61 kB--
@sentry/cloudflare (withSentry)482.97 kB--

View base workflow run

@timfishtimfish changed the title chore: Cleanup hook registrationchore: Remove lazy loading for hook registrationJul 21, 2026
@timfish
timfish marked this pull request as ready for review July 23, 2026 15:56
@timfish
timfish requested review from a team as code ownersJuly 23, 2026 15:56
@timfish
timfish requested review from JPeer264, chargome, isaacs, mydea and nicohrubec and removed request for a teamJuly 23, 2026 15:56

@cursorcursorBot left a comment

Copy link
Copy Markdown

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 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 2705b96. Configure here.

Comment threadpackages/server-utils/src/orchestrion/runtime/register.ts
Comment thread.size-limit.js
Comment threadpackages/server-utils/src/orchestrion/bundler/webpack.ts
Comment threadpackages/server-utils/src/orchestrion/runtime/register.ts
Comment threadpackages/server-utils/src/orchestrion/runtime/register.ts

@isaacsisaacs left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The only thing I'd gate on is the license banner preservation, to stay on the right side of the MIT/ISC/Apache/BSD code this bundles.

But, I think it's absolutely the right way to go, and overall works as expected.

(denoVersion[0] ?? 0) > 2 ||
(denoVersion[0] === 2 && (denoVersion[1] ?? 0) >= 8)
);
if (denoVersionString) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I wonder if the deno test is still necessary, since our minimum Deno version is going to be 2.8.2 in v11?

Comment threadpackages/server-utils/rollup.npm.config.mjs
Comment on lines +31 to +36
// `strictRequires: false`: the default `'auto'` wraps conditionally-required modules (e.g.
// `debug`'s browser/node split) in lazy initializers exported as `__require` — an export name that
// downstream re-bundlers mishandle (Turbopack renames it, producing `.require is not a function`
// crashes in Next.js on Cloudflare). Hoisting is safe here: the vendored graph is closed (nothing
// optional/missing) and has no require cycles that depend on lazy evaluation.
const commonJSOptions = { transformMixedEsModules: true, requireReturnsDefault: 'auto', strictRequires: false };

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

(low/safety) It'd be good to have a smoke test that verifies this, if only to prevent us from upgrading and breaking something down the road, if meriyah or apm-js-collab stuff ever violates that assumption.

@isaacsisaacs left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM! Checking with our oss legal brain trust now about the third-party-licenses.txt thing, but we can always patch it (or back this out) before cutting a v11 release, if they find any problems with the approach.


Update: Sentry counsel says this is the way, so we're good. Third-party bundle is obvious in the build artifact, and the single collected license declaration is standard practice. 👍

@isaacs
isaacs merged commit 9df27e7 into developJul 23, 2026
282 checks passed
@isaacs
isaacs deleted the timfish/chore/cleanup-hook-register branch July 23, 2026 21:32
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Aug 27, 2026
…roduction dependencies (#23667)
Backport of: #22443Closes: #23611
`@sentry/server-utils` shipped the orchestrion bundler plugins and a
full JavaScript parser toolchain (meriyah, esquery, astring, source-map)
as production dependencies, so every consumer of `@sentry/node`
installed roughly 5 MB of code that no runtime path reaches unless they
opt into diagnostics-channel injection. The orchestrion runtime chain is
now compiled into this package's own build, and all `@apm-js-collab/*`
packages plus meriyah become devDependencies. Production dependencies
are down to `@sentry/conventions` and `@sentry/core`.
## Differences to the original PR
- `packages/server-utils/src/orchestrion/runtime/register.ts`: kept
`RegisterDiagnosticsChannelInjectionOptions` and the optional parameter
on `registerDiagnosticsChannelInjection()`, now deprecated and ignored.
The original deletes both; on v10 the option is reachable through the
public `experimentalUseDiagnosticsChannelInjection(options)`, so
removing it would be a compile error for anyone passing
`tracingHooksDir`.
- `packages/node/src/sdk/experimentalUseDiagnosticsChannelInjection.ts`:
same reason, the optional parameter stays.
- `packages/server-utils/src/orchestrion/runtime/register.ts`: kept
v10's loader-thread guard (`isMainThread` / `parentPort`), which landed
after the v10 branch point and is not in the original.
-
`packages/nextjs/src/config/withSentryConfig/getFinalConfigObjectUtils.ts`
and `getFinalConfigObject.ts`: removed
`maybeAddOutputFileTracingIncludes` plus its tests in
`packages/nextjs/test/config/withSentryConfig.test.ts`. That
`@vercel/nft` force-include is a v10-only workaround for meriyah's
`module-sync` exports map (#23034), which bundling removes. `develop`
never carried it, so this brings both branches to the same state.
---------
Co-authored-by: Tim Fish <tim@timfish.uk>
Sign up for freeto 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.

2 participants

@timfish@isaacs
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

chore: Remove lazy loading for hook registration - #22443

Merged
isaacs merged 18 commits into
developfrom
timfish/chore/cleanup-hook-register
Jul 23, 2026
Merged

chore: Remove lazy loading for hook registration#22443
isaacs merged 18 commits into
developfrom
timfish/chore/cleanup-hook-register

Conversation

@timfish

@timfishtimfish commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

This PR simplifies the register.ts hook registration to remove all the lazy loading. The clankers seem to always resort to lazy loading but pushed hard enough they will find better alternatives 🤣

Once the lazy loading was removed there were a number of other things required to get this actually passing all the e2e tests:

  • Bundle the whole orchestrion runtime chain (@apm-js-collab/*, meriyah, esquery, …) into @sentry/server-utils' build (all now devDependencies). The dist only has relative requires, which removes two classes of breakage:
  • The Module.register async hook is now a self-referenced entrypoint of our own ESM build (@sentry/server-utils/orchestrion/hook), sharing the vendored chunks
  • The webpack/Turbopack loader ships as a bundled entrypoint (./orchestrion/webpack-loader), resolved by self-reference since the @apm-js-collab packages are no longer installed
  • Fix build-time Rollup ESM interop issues (Node builtins need default interop; default-only ESM deps need requireReturnsDefault: 'auto')
  • NextJS: force @sentry/server-utils external via absolute-path externals so register.ts stays in node_modules and its Module.register self-reference resolves under pnpm — also removes the tracingHooksPath workaround
  • Bumps the @sentry/node size limit by ~40kb — the lazy loading previously hid this code from the size report
  • feat: Remove support for initialising via --require #22513

@github-actions

github-actionsBot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser27.79 kB--
@sentry/browser - with treeshaking flags26.23 kB--
@sentry/browser (incl. Tracing)46.31 kB--
@sentry/browser (incl. Tracing + Span Streaming)48.06 kB--
@sentry/browser (incl. Tracing, Profiling)51.12 kB--
@sentry/browser (incl. Tracing, Replay)85.59 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags75.23 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)90.29 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)102.97 kB--
@sentry/browser (incl. Feedback)44.96 kB--
@sentry/browser (incl. sendFeedback)32.59 kB--
@sentry/browser (incl. FeedbackAsync)37.64 kB--
@sentry/browser (incl. Metrics)28.88 kB--
@sentry/browser (incl. Logs)29.11 kB--
@sentry/browser (incl. Metrics & Logs)29.8 kB--
@sentry/react29.59 kB--
@sentry/react (incl. Tracing)48.6 kB--
@sentry/vue33.22 kB--
@sentry/vue (incl. Tracing)48.28 kB--
@sentry/svelte27.81 kB--
CDN Bundle30.11 kB--
CDN Bundle (incl. Tracing)48.14 kB--
CDN Bundle (incl. Logs, Metrics)31.69 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)49.47 kB--
CDN Bundle (incl. Replay, Logs, Metrics)70.95 kB--
CDN Bundle (incl. Tracing, Replay)85.72 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)87.01 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)91.49 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)92.78 kB--
CDN Bundle - uncompressed89.77 kB--
CDN Bundle (incl. Tracing) - uncompressed144.84 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed94.48 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed148.82 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed219.24 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed264.08 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed268.04 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed277.78 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed281.74 kB--
@sentry/nextjs (client)51.13 kB--
@sentry/sveltekit (client)46.75 kB--
@sentry/core/server79.92 kB--
@sentry/core/browser51.9 kB--
@sentry/node124.4 kB-0.01%-1 B 🔽
@sentry/node (incl. diagnostics channel injection)168.41 kB+12.41%+18.58 kB 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection)166 B-99.77%-69.86 kB 🔽
@sentry/node - without tracing74.66 kB+0.01%+1 B 🔺
@sentry/aws-serverless84.13 kB+0.01%+1 B 🔺
@sentry/cloudflare (withSentry) - minified196.61 kB--
@sentry/cloudflare (withSentry)482.97 kB--

View base workflow run

@timfishtimfish changed the title chore: Cleanup hook registrationchore: Remove lazy loading for hook registrationJul 21, 2026
@timfish
timfish marked this pull request as ready for review July 23, 2026 15:56
@timfish
timfish requested review from a team as code ownersJuly 23, 2026 15:56
@timfish
timfish requested review from JPeer264, chargome, isaacs, mydea and nicohrubec and removed request for a teamJuly 23, 2026 15:56

@cursorcursorBot left a comment

Copy link
Copy Markdown

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 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 2705b96. Configure here.

Comment threadpackages/server-utils/src/orchestrion/runtime/register.ts
Comment thread.size-limit.js
Comment threadpackages/server-utils/src/orchestrion/bundler/webpack.ts
Comment threadpackages/server-utils/src/orchestrion/runtime/register.ts
Comment threadpackages/server-utils/src/orchestrion/runtime/register.ts

@isaacsisaacs left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The only thing I'd gate on is the license banner preservation, to stay on the right side of the MIT/ISC/Apache/BSD code this bundles.

But, I think it's absolutely the right way to go, and overall works as expected.

(denoVersion[0] ?? 0) > 2 ||
(denoVersion[0] === 2 && (denoVersion[1] ?? 0) >= 8)
);
if (denoVersionString) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I wonder if the deno test is still necessary, since our minimum Deno version is going to be 2.8.2 in v11?

Comment threadpackages/server-utils/rollup.npm.config.mjs
Comment on lines +31 to +36
// `strictRequires: false`: the default `'auto'` wraps conditionally-required modules (e.g.
// `debug`'s browser/node split) in lazy initializers exported as `__require` — an export name that
// downstream re-bundlers mishandle (Turbopack renames it, producing `.require is not a function`
// crashes in Next.js on Cloudflare). Hoisting is safe here: the vendored graph is closed (nothing
// optional/missing) and has no require cycles that depend on lazy evaluation.
const commonJSOptions = { transformMixedEsModules: true, requireReturnsDefault: 'auto', strictRequires: false };

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

(low/safety) It'd be good to have a smoke test that verifies this, if only to prevent us from upgrading and breaking something down the road, if meriyah or apm-js-collab stuff ever violates that assumption.

@isaacsisaacs left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM! Checking with our oss legal brain trust now about the third-party-licenses.txt thing, but we can always patch it (or back this out) before cutting a v11 release, if they find any problems with the approach.


Update: Sentry counsel says this is the way, so we're good. Third-party bundle is obvious in the build artifact, and the single collected license declaration is standard practice. 👍

@isaacs
isaacs merged commit 9df27e7 into developJul 23, 2026
282 checks passed
@isaacs
isaacs deleted the timfish/chore/cleanup-hook-register branch July 23, 2026 21:32
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Aug 27, 2026
…roduction dependencies (#23667)
Backport of: #22443Closes: #23611
`@sentry/server-utils` shipped the orchestrion bundler plugins and a
full JavaScript parser toolchain (meriyah, esquery, astring, source-map)
as production dependencies, so every consumer of `@sentry/node`
installed roughly 5 MB of code that no runtime path reaches unless they
opt into diagnostics-channel injection. The orchestrion runtime chain is
now compiled into this package's own build, and all `@apm-js-collab/*`
packages plus meriyah become devDependencies. Production dependencies
are down to `@sentry/conventions` and `@sentry/core`.
## Differences to the original PR
- `packages/server-utils/src/orchestrion/runtime/register.ts`: kept
`RegisterDiagnosticsChannelInjectionOptions` and the optional parameter
on `registerDiagnosticsChannelInjection()`, now deprecated and ignored.
The original deletes both; on v10 the option is reachable through the
public `experimentalUseDiagnosticsChannelInjection(options)`, so
removing it would be a compile error for anyone passing
`tracingHooksDir`.
- `packages/node/src/sdk/experimentalUseDiagnosticsChannelInjection.ts`:
same reason, the optional parameter stays.
- `packages/server-utils/src/orchestrion/runtime/register.ts`: kept
v10's loader-thread guard (`isMainThread` / `parentPort`), which landed
after the v10 branch point and is not in the original.
-
`packages/nextjs/src/config/withSentryConfig/getFinalConfigObjectUtils.ts`
and `getFinalConfigObject.ts`: removed
`maybeAddOutputFileTracingIncludes` plus its tests in
`packages/nextjs/test/config/withSentryConfig.test.ts`. That
`@vercel/nft` force-include is a v10-only workaround for meriyah's
`module-sync` exports map (#23034), which bundling removes. `develop`
never carried it, so this brings both branches to the same state.
---------
Co-authored-by: Tim Fish <tim@timfish.uk>
Sign up for freeto 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.

2 participants

@timfish@isaacs
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

chore: Remove lazy loading for hook registration - #22443

Merged
isaacs merged 18 commits into
developfrom
timfish/chore/cleanup-hook-register
Jul 23, 2026
Merged

chore: Remove lazy loading for hook registration#22443
isaacs merged 18 commits into
developfrom
timfish/chore/cleanup-hook-register

Conversation

@timfish

@timfishtimfish commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

This PR simplifies the register.ts hook registration to remove all the lazy loading. The clankers seem to always resort to lazy loading but pushed hard enough they will find better alternatives 🤣

Once the lazy loading was removed there were a number of other things required to get this actually passing all the e2e tests:

  • Bundle the whole orchestrion runtime chain (@apm-js-collab/*, meriyah, esquery, …) into @sentry/server-utils' build (all now devDependencies). The dist only has relative requires, which removes two classes of breakage:
  • The Module.register async hook is now a self-referenced entrypoint of our own ESM build (@sentry/server-utils/orchestrion/hook), sharing the vendored chunks
  • The webpack/Turbopack loader ships as a bundled entrypoint (./orchestrion/webpack-loader), resolved by self-reference since the @apm-js-collab packages are no longer installed
  • Fix build-time Rollup ESM interop issues (Node builtins need default interop; default-only ESM deps need requireReturnsDefault: 'auto')
  • NextJS: force @sentry/server-utils external via absolute-path externals so register.ts stays in node_modules and its Module.register self-reference resolves under pnpm — also removes the tracingHooksPath workaround
  • Bumps the @sentry/node size limit by ~40kb — the lazy loading previously hid this code from the size report
  • feat: Remove support for initialising via --require #22513

@github-actions

github-actionsBot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser27.79 kB--
@sentry/browser - with treeshaking flags26.23 kB--
@sentry/browser (incl. Tracing)46.31 kB--
@sentry/browser (incl. Tracing + Span Streaming)48.06 kB--
@sentry/browser (incl. Tracing, Profiling)51.12 kB--
@sentry/browser (incl. Tracing, Replay)85.59 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags75.23 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)90.29 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)102.97 kB--
@sentry/browser (incl. Feedback)44.96 kB--
@sentry/browser (incl. sendFeedback)32.59 kB--
@sentry/browser (incl. FeedbackAsync)37.64 kB--
@sentry/browser (incl. Metrics)28.88 kB--
@sentry/browser (incl. Logs)29.11 kB--
@sentry/browser (incl. Metrics & Logs)29.8 kB--
@sentry/react29.59 kB--
@sentry/react (incl. Tracing)48.6 kB--
@sentry/vue33.22 kB--
@sentry/vue (incl. Tracing)48.28 kB--
@sentry/svelte27.81 kB--
CDN Bundle30.11 kB--
CDN Bundle (incl. Tracing)48.14 kB--
CDN Bundle (incl. Logs, Metrics)31.69 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)49.47 kB--
CDN Bundle (incl. Replay, Logs, Metrics)70.95 kB--
CDN Bundle (incl. Tracing, Replay)85.72 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)87.01 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)91.49 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)92.78 kB--
CDN Bundle - uncompressed89.77 kB--
CDN Bundle (incl. Tracing) - uncompressed144.84 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed94.48 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed148.82 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed219.24 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed264.08 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed268.04 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed277.78 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed281.74 kB--
@sentry/nextjs (client)51.13 kB--
@sentry/sveltekit (client)46.75 kB--
@sentry/core/server79.92 kB--
@sentry/core/browser51.9 kB--
@sentry/node124.4 kB-0.01%-1 B 🔽
@sentry/node (incl. diagnostics channel injection)168.41 kB+12.41%+18.58 kB 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection)166 B-99.77%-69.86 kB 🔽
@sentry/node - without tracing74.66 kB+0.01%+1 B 🔺
@sentry/aws-serverless84.13 kB+0.01%+1 B 🔺
@sentry/cloudflare (withSentry) - minified196.61 kB--
@sentry/cloudflare (withSentry)482.97 kB--

View base workflow run

@timfishtimfish changed the title chore: Cleanup hook registrationchore: Remove lazy loading for hook registrationJul 21, 2026
@timfish
timfish marked this pull request as ready for review July 23, 2026 15:56
@timfish
timfish requested review from a team as code ownersJuly 23, 2026 15:56
@timfish
timfish requested review from JPeer264, chargome, isaacs, mydea and nicohrubec and removed request for a teamJuly 23, 2026 15:56

@cursorcursorBot left a comment

Copy link
Copy Markdown

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 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 2705b96. Configure here.

Comment threadpackages/server-utils/src/orchestrion/runtime/register.ts
Comment thread.size-limit.js
Comment threadpackages/server-utils/src/orchestrion/bundler/webpack.ts
Comment threadpackages/server-utils/src/orchestrion/runtime/register.ts
Comment threadpackages/server-utils/src/orchestrion/runtime/register.ts

@isaacsisaacs left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The only thing I'd gate on is the license banner preservation, to stay on the right side of the MIT/ISC/Apache/BSD code this bundles.

But, I think it's absolutely the right way to go, and overall works as expected.

(denoVersion[0] ?? 0) > 2 ||
(denoVersion[0] === 2 && (denoVersion[1] ?? 0) >= 8)
);
if (denoVersionString) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I wonder if the deno test is still necessary, since our minimum Deno version is going to be 2.8.2 in v11?

Comment threadpackages/server-utils/rollup.npm.config.mjs
Comment on lines +31 to +36
// `strictRequires: false`: the default `'auto'` wraps conditionally-required modules (e.g.
// `debug`'s browser/node split) in lazy initializers exported as `__require` — an export name that
// downstream re-bundlers mishandle (Turbopack renames it, producing `.require is not a function`
// crashes in Next.js on Cloudflare). Hoisting is safe here: the vendored graph is closed (nothing
// optional/missing) and has no require cycles that depend on lazy evaluation.
const commonJSOptions = { transformMixedEsModules: true, requireReturnsDefault: 'auto', strictRequires: false };

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

(low/safety) It'd be good to have a smoke test that verifies this, if only to prevent us from upgrading and breaking something down the road, if meriyah or apm-js-collab stuff ever violates that assumption.

@isaacsisaacs left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM! Checking with our oss legal brain trust now about the third-party-licenses.txt thing, but we can always patch it (or back this out) before cutting a v11 release, if they find any problems with the approach.


Update: Sentry counsel says this is the way, so we're good. Third-party bundle is obvious in the build artifact, and the single collected license declaration is standard practice. 👍

@isaacs
isaacs merged commit 9df27e7 into developJul 23, 2026
282 checks passed
@isaacs
isaacs deleted the timfish/chore/cleanup-hook-register branch July 23, 2026 21:32
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Aug 27, 2026
…roduction dependencies (#23667)
Backport of: #22443Closes: #23611
`@sentry/server-utils` shipped the orchestrion bundler plugins and a
full JavaScript parser toolchain (meriyah, esquery, astring, source-map)
as production dependencies, so every consumer of `@sentry/node`
installed roughly 5 MB of code that no runtime path reaches unless they
opt into diagnostics-channel injection. The orchestrion runtime chain is
now compiled into this package's own build, and all `@apm-js-collab/*`
packages plus meriyah become devDependencies. Production dependencies
are down to `@sentry/conventions` and `@sentry/core`.
## Differences to the original PR
- `packages/server-utils/src/orchestrion/runtime/register.ts`: kept
`RegisterDiagnosticsChannelInjectionOptions` and the optional parameter
on `registerDiagnosticsChannelInjection()`, now deprecated and ignored.
The original deletes both; on v10 the option is reachable through the
public `experimentalUseDiagnosticsChannelInjection(options)`, so
removing it would be a compile error for anyone passing
`tracingHooksDir`.
- `packages/node/src/sdk/experimentalUseDiagnosticsChannelInjection.ts`:
same reason, the optional parameter stays.
- `packages/server-utils/src/orchestrion/runtime/register.ts`: kept
v10's loader-thread guard (`isMainThread` / `parentPort`), which landed
after the v10 branch point and is not in the original.
-
`packages/nextjs/src/config/withSentryConfig/getFinalConfigObjectUtils.ts`
and `getFinalConfigObject.ts`: removed
`maybeAddOutputFileTracingIncludes` plus its tests in
`packages/nextjs/test/config/withSentryConfig.test.ts`. That
`@vercel/nft` force-include is a v10-only workaround for meriyah's
`module-sync` exports map (#23034), which bundling removes. `develop`
never carried it, so this brings both branches to the same state.
---------
Co-authored-by: Tim Fish <tim@timfish.uk>
Sign up for freeto 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.

2 participants

@timfish@isaacs
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

chore: Remove lazy loading for hook registration - #22443

Merged
isaacs merged 18 commits into
developfrom
timfish/chore/cleanup-hook-register
Jul 23, 2026
Merged

chore: Remove lazy loading for hook registration#22443
isaacs merged 18 commits into
developfrom
timfish/chore/cleanup-hook-register

Conversation

@timfish

@timfishtimfish commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

This PR simplifies the register.ts hook registration to remove all the lazy loading. The clankers seem to always resort to lazy loading but pushed hard enough they will find better alternatives 🤣

Once the lazy loading was removed there were a number of other things required to get this actually passing all the e2e tests:

  • Bundle the whole orchestrion runtime chain (@apm-js-collab/*, meriyah, esquery, …) into @sentry/server-utils' build (all now devDependencies). The dist only has relative requires, which removes two classes of breakage:
  • The Module.register async hook is now a self-referenced entrypoint of our own ESM build (@sentry/server-utils/orchestrion/hook), sharing the vendored chunks
  • The webpack/Turbopack loader ships as a bundled entrypoint (./orchestrion/webpack-loader), resolved by self-reference since the @apm-js-collab packages are no longer installed
  • Fix build-time Rollup ESM interop issues (Node builtins need default interop; default-only ESM deps need requireReturnsDefault: 'auto')
  • NextJS: force @sentry/server-utils external via absolute-path externals so register.ts stays in node_modules and its Module.register self-reference resolves under pnpm — also removes the tracingHooksPath workaround
  • Bumps the @sentry/node size limit by ~40kb — the lazy loading previously hid this code from the size report
  • feat: Remove support for initialising via --require #22513

@github-actions

github-actionsBot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser27.79 kB--
@sentry/browser - with treeshaking flags26.23 kB--
@sentry/browser (incl. Tracing)46.31 kB--
@sentry/browser (incl. Tracing + Span Streaming)48.06 kB--
@sentry/browser (incl. Tracing, Profiling)51.12 kB--
@sentry/browser (incl. Tracing, Replay)85.59 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags75.23 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)90.29 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)102.97 kB--
@sentry/browser (incl. Feedback)44.96 kB--
@sentry/browser (incl. sendFeedback)32.59 kB--
@sentry/browser (incl. FeedbackAsync)37.64 kB--
@sentry/browser (incl. Metrics)28.88 kB--
@sentry/browser (incl. Logs)29.11 kB--
@sentry/browser (incl. Metrics & Logs)29.8 kB--
@sentry/react29.59 kB--
@sentry/react (incl. Tracing)48.6 kB--
@sentry/vue33.22 kB--
@sentry/vue (incl. Tracing)48.28 kB--
@sentry/svelte27.81 kB--
CDN Bundle30.11 kB--
CDN Bundle (incl. Tracing)48.14 kB--
CDN Bundle (incl. Logs, Metrics)31.69 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)49.47 kB--
CDN Bundle (incl. Replay, Logs, Metrics)70.95 kB--
CDN Bundle (incl. Tracing, Replay)85.72 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)87.01 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)91.49 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)92.78 kB--
CDN Bundle - uncompressed89.77 kB--
CDN Bundle (incl. Tracing) - uncompressed144.84 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed94.48 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed148.82 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed219.24 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed264.08 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed268.04 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed277.78 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed281.74 kB--
@sentry/nextjs (client)51.13 kB--
@sentry/sveltekit (client)46.75 kB--
@sentry/core/server79.92 kB--
@sentry/core/browser51.9 kB--
@sentry/node124.4 kB-0.01%-1 B 🔽
@sentry/node (incl. diagnostics channel injection)168.41 kB+12.41%+18.58 kB 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection)166 B-99.77%-69.86 kB 🔽
@sentry/node - without tracing74.66 kB+0.01%+1 B 🔺
@sentry/aws-serverless84.13 kB+0.01%+1 B 🔺
@sentry/cloudflare (withSentry) - minified196.61 kB--
@sentry/cloudflare (withSentry)482.97 kB--

View base workflow run

@timfishtimfish changed the title chore: Cleanup hook registrationchore: Remove lazy loading for hook registrationJul 21, 2026
@timfish
timfish marked this pull request as ready for review July 23, 2026 15:56
@timfish
timfish requested review from a team as code ownersJuly 23, 2026 15:56
@timfish
timfish requested review from JPeer264, chargome, isaacs, mydea and nicohrubec and removed request for a teamJuly 23, 2026 15:56

@cursorcursorBot left a comment

Copy link
Copy Markdown

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 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 2705b96. Configure here.

Comment threadpackages/server-utils/src/orchestrion/runtime/register.ts
Comment thread.size-limit.js
Comment threadpackages/server-utils/src/orchestrion/bundler/webpack.ts
Comment threadpackages/server-utils/src/orchestrion/runtime/register.ts
Comment threadpackages/server-utils/src/orchestrion/runtime/register.ts

@isaacsisaacs left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The only thing I'd gate on is the license banner preservation, to stay on the right side of the MIT/ISC/Apache/BSD code this bundles.

But, I think it's absolutely the right way to go, and overall works as expected.

(denoVersion[0] ?? 0) > 2 ||
(denoVersion[0] === 2 && (denoVersion[1] ?? 0) >= 8)
);
if (denoVersionString) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I wonder if the deno test is still necessary, since our minimum Deno version is going to be 2.8.2 in v11?

Comment threadpackages/server-utils/rollup.npm.config.mjs
Comment on lines +31 to +36
// `strictRequires: false`: the default `'auto'` wraps conditionally-required modules (e.g.
// `debug`'s browser/node split) in lazy initializers exported as `__require` — an export name that
// downstream re-bundlers mishandle (Turbopack renames it, producing `.require is not a function`
// crashes in Next.js on Cloudflare). Hoisting is safe here: the vendored graph is closed (nothing
// optional/missing) and has no require cycles that depend on lazy evaluation.
const commonJSOptions = { transformMixedEsModules: true, requireReturnsDefault: 'auto', strictRequires: false };

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

(low/safety) It'd be good to have a smoke test that verifies this, if only to prevent us from upgrading and breaking something down the road, if meriyah or apm-js-collab stuff ever violates that assumption.

@isaacsisaacs left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM! Checking with our oss legal brain trust now about the third-party-licenses.txt thing, but we can always patch it (or back this out) before cutting a v11 release, if they find any problems with the approach.


Update: Sentry counsel says this is the way, so we're good. Third-party bundle is obvious in the build artifact, and the single collected license declaration is standard practice. 👍

@isaacs
isaacs merged commit 9df27e7 into developJul 23, 2026
282 checks passed
@isaacs
isaacs deleted the timfish/chore/cleanup-hook-register branch July 23, 2026 21:32
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Aug 27, 2026
…roduction dependencies (#23667)
Backport of: #22443Closes: #23611
`@sentry/server-utils` shipped the orchestrion bundler plugins and a
full JavaScript parser toolchain (meriyah, esquery, astring, source-map)
as production dependencies, so every consumer of `@sentry/node`
installed roughly 5 MB of code that no runtime path reaches unless they
opt into diagnostics-channel injection. The orchestrion runtime chain is
now compiled into this package's own build, and all `@apm-js-collab/*`
packages plus meriyah become devDependencies. Production dependencies
are down to `@sentry/conventions` and `@sentry/core`.
## Differences to the original PR
- `packages/server-utils/src/orchestrion/runtime/register.ts`: kept
`RegisterDiagnosticsChannelInjectionOptions` and the optional parameter
on `registerDiagnosticsChannelInjection()`, now deprecated and ignored.
The original deletes both; on v10 the option is reachable through the
public `experimentalUseDiagnosticsChannelInjection(options)`, so
removing it would be a compile error for anyone passing
`tracingHooksDir`.
- `packages/node/src/sdk/experimentalUseDiagnosticsChannelInjection.ts`:
same reason, the optional parameter stays.
- `packages/server-utils/src/orchestrion/runtime/register.ts`: kept
v10's loader-thread guard (`isMainThread` / `parentPort`), which landed
after the v10 branch point and is not in the original.
-
`packages/nextjs/src/config/withSentryConfig/getFinalConfigObjectUtils.ts`
and `getFinalConfigObject.ts`: removed
`maybeAddOutputFileTracingIncludes` plus its tests in
`packages/nextjs/test/config/withSentryConfig.test.ts`. That
`@vercel/nft` force-include is a v10-only workaround for meriyah's
`module-sync` exports map (#23034), which bundling removes. `develop`
never carried it, so this brings both branches to the same state.
---------
Co-authored-by: Tim Fish <tim@timfish.uk>
Sign up for freeto 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.

2 participants

@timfish@isaacs
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

chore: Remove lazy loading for hook registration - #22443

Merged
isaacs merged 18 commits into
developfrom
timfish/chore/cleanup-hook-register
Jul 23, 2026
Merged

chore: Remove lazy loading for hook registration#22443
isaacs merged 18 commits into
developfrom
timfish/chore/cleanup-hook-register

Conversation

@timfish

@timfishtimfish commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

This PR simplifies the register.ts hook registration to remove all the lazy loading. The clankers seem to always resort to lazy loading but pushed hard enough they will find better alternatives 🤣

Once the lazy loading was removed there were a number of other things required to get this actually passing all the e2e tests:

  • Bundle the whole orchestrion runtime chain (@apm-js-collab/*, meriyah, esquery, …) into @sentry/server-utils' build (all now devDependencies). The dist only has relative requires, which removes two classes of breakage:
  • The Module.register async hook is now a self-referenced entrypoint of our own ESM build (@sentry/server-utils/orchestrion/hook), sharing the vendored chunks
  • The webpack/Turbopack loader ships as a bundled entrypoint (./orchestrion/webpack-loader), resolved by self-reference since the @apm-js-collab packages are no longer installed
  • Fix build-time Rollup ESM interop issues (Node builtins need default interop; default-only ESM deps need requireReturnsDefault: 'auto')
  • NextJS: force @sentry/server-utils external via absolute-path externals so register.ts stays in node_modules and its Module.register self-reference resolves under pnpm — also removes the tracingHooksPath workaround
  • Bumps the @sentry/node size limit by ~40kb — the lazy loading previously hid this code from the size report
  • feat: Remove support for initialising via --require #22513

@github-actions

github-actionsBot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser27.79 kB--
@sentry/browser - with treeshaking flags26.23 kB--
@sentry/browser (incl. Tracing)46.31 kB--
@sentry/browser (incl. Tracing + Span Streaming)48.06 kB--
@sentry/browser (incl. Tracing, Profiling)51.12 kB--
@sentry/browser (incl. Tracing, Replay)85.59 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags75.23 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)90.29 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)102.97 kB--
@sentry/browser (incl. Feedback)44.96 kB--
@sentry/browser (incl. sendFeedback)32.59 kB--
@sentry/browser (incl. FeedbackAsync)37.64 kB--
@sentry/browser (incl. Metrics)28.88 kB--
@sentry/browser (incl. Logs)29.11 kB--
@sentry/browser (incl. Metrics & Logs)29.8 kB--
@sentry/react29.59 kB--
@sentry/react (incl. Tracing)48.6 kB--
@sentry/vue33.22 kB--
@sentry/vue (incl. Tracing)48.28 kB--
@sentry/svelte27.81 kB--
CDN Bundle30.11 kB--
CDN Bundle (incl. Tracing)48.14 kB--
CDN Bundle (incl. Logs, Metrics)31.69 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)49.47 kB--
CDN Bundle (incl. Replay, Logs, Metrics)70.95 kB--
CDN Bundle (incl. Tracing, Replay)85.72 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)87.01 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)91.49 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)92.78 kB--
CDN Bundle - uncompressed89.77 kB--
CDN Bundle (incl. Tracing) - uncompressed144.84 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed94.48 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed148.82 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed219.24 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed264.08 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed268.04 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed277.78 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed281.74 kB--
@sentry/nextjs (client)51.13 kB--
@sentry/sveltekit (client)46.75 kB--
@sentry/core/server79.92 kB--
@sentry/core/browser51.9 kB--
@sentry/node124.4 kB-0.01%-1 B 🔽
@sentry/node (incl. diagnostics channel injection)168.41 kB+12.41%+18.58 kB 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection)166 B-99.77%-69.86 kB 🔽
@sentry/node - without tracing74.66 kB+0.01%+1 B 🔺
@sentry/aws-serverless84.13 kB+0.01%+1 B 🔺
@sentry/cloudflare (withSentry) - minified196.61 kB--
@sentry/cloudflare (withSentry)482.97 kB--

View base workflow run

@timfishtimfish changed the title chore: Cleanup hook registrationchore: Remove lazy loading for hook registrationJul 21, 2026
@timfish
timfish marked this pull request as ready for review July 23, 2026 15:56
@timfish
timfish requested review from a team as code ownersJuly 23, 2026 15:56
@timfish
timfish requested review from JPeer264, chargome, isaacs, mydea and nicohrubec and removed request for a teamJuly 23, 2026 15:56

@cursorcursorBot left a comment

Copy link
Copy Markdown

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 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 2705b96. Configure here.

Comment threadpackages/server-utils/src/orchestrion/runtime/register.ts
Comment thread.size-limit.js
Comment threadpackages/server-utils/src/orchestrion/bundler/webpack.ts
Comment threadpackages/server-utils/src/orchestrion/runtime/register.ts
Comment threadpackages/server-utils/src/orchestrion/runtime/register.ts

@isaacsisaacs left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The only thing I'd gate on is the license banner preservation, to stay on the right side of the MIT/ISC/Apache/BSD code this bundles.

But, I think it's absolutely the right way to go, and overall works as expected.

(denoVersion[0] ?? 0) > 2 ||
(denoVersion[0] === 2 && (denoVersion[1] ?? 0) >= 8)
);
if (denoVersionString) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I wonder if the deno test is still necessary, since our minimum Deno version is going to be 2.8.2 in v11?

Comment threadpackages/server-utils/rollup.npm.config.mjs
Comment on lines +31 to +36
// `strictRequires: false`: the default `'auto'` wraps conditionally-required modules (e.g.
// `debug`'s browser/node split) in lazy initializers exported as `__require` — an export name that
// downstream re-bundlers mishandle (Turbopack renames it, producing `.require is not a function`
// crashes in Next.js on Cloudflare). Hoisting is safe here: the vendored graph is closed (nothing
// optional/missing) and has no require cycles that depend on lazy evaluation.
const commonJSOptions = { transformMixedEsModules: true, requireReturnsDefault: 'auto', strictRequires: false };

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

(low/safety) It'd be good to have a smoke test that verifies this, if only to prevent us from upgrading and breaking something down the road, if meriyah or apm-js-collab stuff ever violates that assumption.

@isaacsisaacs left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM! Checking with our oss legal brain trust now about the third-party-licenses.txt thing, but we can always patch it (or back this out) before cutting a v11 release, if they find any problems with the approach.


Update: Sentry counsel says this is the way, so we're good. Third-party bundle is obvious in the build artifact, and the single collected license declaration is standard practice. 👍

@isaacs
isaacs merged commit 9df27e7 into developJul 23, 2026
282 checks passed
@isaacs
isaacs deleted the timfish/chore/cleanup-hook-register branch July 23, 2026 21:32
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Aug 27, 2026
…roduction dependencies (#23667)
Backport of: #22443Closes: #23611
`@sentry/server-utils` shipped the orchestrion bundler plugins and a
full JavaScript parser toolchain (meriyah, esquery, astring, source-map)
as production dependencies, so every consumer of `@sentry/node`
installed roughly 5 MB of code that no runtime path reaches unless they
opt into diagnostics-channel injection. The orchestrion runtime chain is
now compiled into this package's own build, and all `@apm-js-collab/*`
packages plus meriyah become devDependencies. Production dependencies
are down to `@sentry/conventions` and `@sentry/core`.
## Differences to the original PR
- `packages/server-utils/src/orchestrion/runtime/register.ts`: kept
`RegisterDiagnosticsChannelInjectionOptions` and the optional parameter
on `registerDiagnosticsChannelInjection()`, now deprecated and ignored.
The original deletes both; on v10 the option is reachable through the
public `experimentalUseDiagnosticsChannelInjection(options)`, so
removing it would be a compile error for anyone passing
`tracingHooksDir`.
- `packages/node/src/sdk/experimentalUseDiagnosticsChannelInjection.ts`:
same reason, the optional parameter stays.
- `packages/server-utils/src/orchestrion/runtime/register.ts`: kept
v10's loader-thread guard (`isMainThread` / `parentPort`), which landed
after the v10 branch point and is not in the original.
-
`packages/nextjs/src/config/withSentryConfig/getFinalConfigObjectUtils.ts`
and `getFinalConfigObject.ts`: removed
`maybeAddOutputFileTracingIncludes` plus its tests in
`packages/nextjs/test/config/withSentryConfig.test.ts`. That
`@vercel/nft` force-include is a v10-only workaround for meriyah's
`module-sync` exports map (#23034), which bundling removes. `develop`
never carried it, so this brings both branches to the same state.
---------
Co-authored-by: Tim Fish <tim@timfish.uk>
Sign up for freeto 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.

2 participants

@timfish@isaacs
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

chore: Remove lazy loading for hook registration - #22443

Merged
isaacs merged 18 commits into
developfrom
timfish/chore/cleanup-hook-register
Jul 23, 2026
Merged

chore: Remove lazy loading for hook registration#22443
isaacs merged 18 commits into
developfrom
timfish/chore/cleanup-hook-register

Conversation

@timfish

@timfishtimfish commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

This PR simplifies the register.ts hook registration to remove all the lazy loading. The clankers seem to always resort to lazy loading but pushed hard enough they will find better alternatives 🤣

Once the lazy loading was removed there were a number of other things required to get this actually passing all the e2e tests:

  • Bundle the whole orchestrion runtime chain (@apm-js-collab/*, meriyah, esquery, …) into @sentry/server-utils' build (all now devDependencies). The dist only has relative requires, which removes two classes of breakage:
  • The Module.register async hook is now a self-referenced entrypoint of our own ESM build (@sentry/server-utils/orchestrion/hook), sharing the vendored chunks
  • The webpack/Turbopack loader ships as a bundled entrypoint (./orchestrion/webpack-loader), resolved by self-reference since the @apm-js-collab packages are no longer installed
  • Fix build-time Rollup ESM interop issues (Node builtins need default interop; default-only ESM deps need requireReturnsDefault: 'auto')
  • NextJS: force @sentry/server-utils external via absolute-path externals so register.ts stays in node_modules and its Module.register self-reference resolves under pnpm — also removes the tracingHooksPath workaround
  • Bumps the @sentry/node size limit by ~40kb — the lazy loading previously hid this code from the size report
  • feat: Remove support for initialising via --require #22513

@github-actions

github-actionsBot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser27.79 kB--
@sentry/browser - with treeshaking flags26.23 kB--
@sentry/browser (incl. Tracing)46.31 kB--
@sentry/browser (incl. Tracing + Span Streaming)48.06 kB--
@sentry/browser (incl. Tracing, Profiling)51.12 kB--
@sentry/browser (incl. Tracing, Replay)85.59 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags75.23 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)90.29 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)102.97 kB--
@sentry/browser (incl. Feedback)44.96 kB--
@sentry/browser (incl. sendFeedback)32.59 kB--
@sentry/browser (incl. FeedbackAsync)37.64 kB--
@sentry/browser (incl. Metrics)28.88 kB--
@sentry/browser (incl. Logs)29.11 kB--
@sentry/browser (incl. Metrics & Logs)29.8 kB--
@sentry/react29.59 kB--
@sentry/react (incl. Tracing)48.6 kB--
@sentry/vue33.22 kB--
@sentry/vue (incl. Tracing)48.28 kB--
@sentry/svelte27.81 kB--
CDN Bundle30.11 kB--
CDN Bundle (incl. Tracing)48.14 kB--
CDN Bundle (incl. Logs, Metrics)31.69 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)49.47 kB--
CDN Bundle (incl. Replay, Logs, Metrics)70.95 kB--
CDN Bundle (incl. Tracing, Replay)85.72 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)87.01 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)91.49 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)92.78 kB--
CDN Bundle - uncompressed89.77 kB--
CDN Bundle (incl. Tracing) - uncompressed144.84 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed94.48 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed148.82 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed219.24 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed264.08 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed268.04 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed277.78 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed281.74 kB--
@sentry/nextjs (client)51.13 kB--
@sentry/sveltekit (client)46.75 kB--
@sentry/core/server79.92 kB--
@sentry/core/browser51.9 kB--
@sentry/node124.4 kB-0.01%-1 B 🔽
@sentry/node (incl. diagnostics channel injection)168.41 kB+12.41%+18.58 kB 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection)166 B-99.77%-69.86 kB 🔽
@sentry/node - without tracing74.66 kB+0.01%+1 B 🔺
@sentry/aws-serverless84.13 kB+0.01%+1 B 🔺
@sentry/cloudflare (withSentry) - minified196.61 kB--
@sentry/cloudflare (withSentry)482.97 kB--

View base workflow run

@timfishtimfish changed the title chore: Cleanup hook registrationchore: Remove lazy loading for hook registrationJul 21, 2026
@timfish
timfish marked this pull request as ready for review July 23, 2026 15:56
@timfish
timfish requested review from a team as code ownersJuly 23, 2026 15:56
@timfish
timfish requested review from JPeer264, chargome, isaacs, mydea and nicohrubec and removed request for a teamJuly 23, 2026 15:56

@cursorcursorBot left a comment

Copy link
Copy Markdown

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 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 2705b96. Configure here.

Comment threadpackages/server-utils/src/orchestrion/runtime/register.ts
Comment thread.size-limit.js
Comment threadpackages/server-utils/src/orchestrion/bundler/webpack.ts
Comment threadpackages/server-utils/src/orchestrion/runtime/register.ts
Comment threadpackages/server-utils/src/orchestrion/runtime/register.ts

@isaacsisaacs left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The only thing I'd gate on is the license banner preservation, to stay on the right side of the MIT/ISC/Apache/BSD code this bundles.

But, I think it's absolutely the right way to go, and overall works as expected.

(denoVersion[0] ?? 0) > 2 ||
(denoVersion[0] === 2 && (denoVersion[1] ?? 0) >= 8)
);
if (denoVersionString) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I wonder if the deno test is still necessary, since our minimum Deno version is going to be 2.8.2 in v11?

Comment threadpackages/server-utils/rollup.npm.config.mjs
Comment on lines +31 to +36
// `strictRequires: false`: the default `'auto'` wraps conditionally-required modules (e.g.
// `debug`'s browser/node split) in lazy initializers exported as `__require` — an export name that
// downstream re-bundlers mishandle (Turbopack renames it, producing `.require is not a function`
// crashes in Next.js on Cloudflare). Hoisting is safe here: the vendored graph is closed (nothing
// optional/missing) and has no require cycles that depend on lazy evaluation.
const commonJSOptions = { transformMixedEsModules: true, requireReturnsDefault: 'auto', strictRequires: false };

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

(low/safety) It'd be good to have a smoke test that verifies this, if only to prevent us from upgrading and breaking something down the road, if meriyah or apm-js-collab stuff ever violates that assumption.

@isaacsisaacs left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM! Checking with our oss legal brain trust now about the third-party-licenses.txt thing, but we can always patch it (or back this out) before cutting a v11 release, if they find any problems with the approach.


Update: Sentry counsel says this is the way, so we're good. Third-party bundle is obvious in the build artifact, and the single collected license declaration is standard practice. 👍

@isaacs
isaacs merged commit 9df27e7 into developJul 23, 2026
282 checks passed
@isaacs
isaacs deleted the timfish/chore/cleanup-hook-register branch July 23, 2026 21:32
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Aug 27, 2026
…roduction dependencies (#23667)
Backport of: #22443Closes: #23611
`@sentry/server-utils` shipped the orchestrion bundler plugins and a
full JavaScript parser toolchain (meriyah, esquery, astring, source-map)
as production dependencies, so every consumer of `@sentry/node`
installed roughly 5 MB of code that no runtime path reaches unless they
opt into diagnostics-channel injection. The orchestrion runtime chain is
now compiled into this package's own build, and all `@apm-js-collab/*`
packages plus meriyah become devDependencies. Production dependencies
are down to `@sentry/conventions` and `@sentry/core`.
## Differences to the original PR
- `packages/server-utils/src/orchestrion/runtime/register.ts`: kept
`RegisterDiagnosticsChannelInjectionOptions` and the optional parameter
on `registerDiagnosticsChannelInjection()`, now deprecated and ignored.
The original deletes both; on v10 the option is reachable through the
public `experimentalUseDiagnosticsChannelInjection(options)`, so
removing it would be a compile error for anyone passing
`tracingHooksDir`.
- `packages/node/src/sdk/experimentalUseDiagnosticsChannelInjection.ts`:
same reason, the optional parameter stays.
- `packages/server-utils/src/orchestrion/runtime/register.ts`: kept
v10's loader-thread guard (`isMainThread` / `parentPort`), which landed
after the v10 branch point and is not in the original.
-
`packages/nextjs/src/config/withSentryConfig/getFinalConfigObjectUtils.ts`
and `getFinalConfigObject.ts`: removed
`maybeAddOutputFileTracingIncludes` plus its tests in
`packages/nextjs/test/config/withSentryConfig.test.ts`. That
`@vercel/nft` force-include is a v10-only workaround for meriyah's
`module-sync` exports map (#23034), which bundling removes. `develop`
never carried it, so this brings both branches to the same state.
---------
Co-authored-by: Tim Fish <tim@timfish.uk>
Sign up for freeto 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.

2 participants

@timfish@isaacs
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

chore: Remove lazy loading for hook registration - #22443

Merged
isaacs merged 18 commits into
developfrom
timfish/chore/cleanup-hook-register
Jul 23, 2026
Merged

chore: Remove lazy loading for hook registration#22443
isaacs merged 18 commits into
developfrom
timfish/chore/cleanup-hook-register

Conversation

@timfish

@timfishtimfish commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

This PR simplifies the register.ts hook registration to remove all the lazy loading. The clankers seem to always resort to lazy loading but pushed hard enough they will find better alternatives 🤣

Once the lazy loading was removed there were a number of other things required to get this actually passing all the e2e tests:

  • Bundle the whole orchestrion runtime chain (@apm-js-collab/*, meriyah, esquery, …) into @sentry/server-utils' build (all now devDependencies). The dist only has relative requires, which removes two classes of breakage:
  • The Module.register async hook is now a self-referenced entrypoint of our own ESM build (@sentry/server-utils/orchestrion/hook), sharing the vendored chunks
  • The webpack/Turbopack loader ships as a bundled entrypoint (./orchestrion/webpack-loader), resolved by self-reference since the @apm-js-collab packages are no longer installed
  • Fix build-time Rollup ESM interop issues (Node builtins need default interop; default-only ESM deps need requireReturnsDefault: 'auto')
  • NextJS: force @sentry/server-utils external via absolute-path externals so register.ts stays in node_modules and its Module.register self-reference resolves under pnpm — also removes the tracingHooksPath workaround
  • Bumps the @sentry/node size limit by ~40kb — the lazy loading previously hid this code from the size report
  • feat: Remove support for initialising via --require #22513

@github-actions

github-actionsBot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser27.79 kB--
@sentry/browser - with treeshaking flags26.23 kB--
@sentry/browser (incl. Tracing)46.31 kB--
@sentry/browser (incl. Tracing + Span Streaming)48.06 kB--
@sentry/browser (incl. Tracing, Profiling)51.12 kB--
@sentry/browser (incl. Tracing, Replay)85.59 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags75.23 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)90.29 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)102.97 kB--
@sentry/browser (incl. Feedback)44.96 kB--
@sentry/browser (incl. sendFeedback)32.59 kB--
@sentry/browser (incl. FeedbackAsync)37.64 kB--
@sentry/browser (incl. Metrics)28.88 kB--
@sentry/browser (incl. Logs)29.11 kB--
@sentry/browser (incl. Metrics & Logs)29.8 kB--
@sentry/react29.59 kB--
@sentry/react (incl. Tracing)48.6 kB--
@sentry/vue33.22 kB--
@sentry/vue (incl. Tracing)48.28 kB--
@sentry/svelte27.81 kB--
CDN Bundle30.11 kB--
CDN Bundle (incl. Tracing)48.14 kB--
CDN Bundle (incl. Logs, Metrics)31.69 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)49.47 kB--
CDN Bundle (incl. Replay, Logs, Metrics)70.95 kB--
CDN Bundle (incl. Tracing, Replay)85.72 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)87.01 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)91.49 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)92.78 kB--
CDN Bundle - uncompressed89.77 kB--
CDN Bundle (incl. Tracing) - uncompressed144.84 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed94.48 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed148.82 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed219.24 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed264.08 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed268.04 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed277.78 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed281.74 kB--
@sentry/nextjs (client)51.13 kB--
@sentry/sveltekit (client)46.75 kB--
@sentry/core/server79.92 kB--
@sentry/core/browser51.9 kB--
@sentry/node124.4 kB-0.01%-1 B 🔽
@sentry/node (incl. diagnostics channel injection)168.41 kB+12.41%+18.58 kB 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection)166 B-99.77%-69.86 kB 🔽
@sentry/node - without tracing74.66 kB+0.01%+1 B 🔺
@sentry/aws-serverless84.13 kB+0.01%+1 B 🔺
@sentry/cloudflare (withSentry) - minified196.61 kB--
@sentry/cloudflare (withSentry)482.97 kB--

View base workflow run

@timfishtimfish changed the title chore: Cleanup hook registrationchore: Remove lazy loading for hook registrationJul 21, 2026
@timfish
timfish marked this pull request as ready for review July 23, 2026 15:56
@timfish
timfish requested review from a team as code ownersJuly 23, 2026 15:56
@timfish
timfish requested review from JPeer264, chargome, isaacs, mydea and nicohrubec and removed request for a teamJuly 23, 2026 15:56

@cursorcursorBot left a comment

Copy link
Copy Markdown

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 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 2705b96. Configure here.

Comment threadpackages/server-utils/src/orchestrion/runtime/register.ts
Comment thread.size-limit.js
Comment threadpackages/server-utils/src/orchestrion/bundler/webpack.ts
Comment threadpackages/server-utils/src/orchestrion/runtime/register.ts
Comment threadpackages/server-utils/src/orchestrion/runtime/register.ts

@isaacsisaacs left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The only thing I'd gate on is the license banner preservation, to stay on the right side of the MIT/ISC/Apache/BSD code this bundles.

But, I think it's absolutely the right way to go, and overall works as expected.

(denoVersion[0] ?? 0) > 2 ||
(denoVersion[0] === 2 && (denoVersion[1] ?? 0) >= 8)
);
if (denoVersionString) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I wonder if the deno test is still necessary, since our minimum Deno version is going to be 2.8.2 in v11?

Comment threadpackages/server-utils/rollup.npm.config.mjs
Comment on lines +31 to +36
// `strictRequires: false`: the default `'auto'` wraps conditionally-required modules (e.g.
// `debug`'s browser/node split) in lazy initializers exported as `__require` — an export name that
// downstream re-bundlers mishandle (Turbopack renames it, producing `.require is not a function`
// crashes in Next.js on Cloudflare). Hoisting is safe here: the vendored graph is closed (nothing
// optional/missing) and has no require cycles that depend on lazy evaluation.
const commonJSOptions = { transformMixedEsModules: true, requireReturnsDefault: 'auto', strictRequires: false };

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

(low/safety) It'd be good to have a smoke test that verifies this, if only to prevent us from upgrading and breaking something down the road, if meriyah or apm-js-collab stuff ever violates that assumption.

@isaacsisaacs left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM! Checking with our oss legal brain trust now about the third-party-licenses.txt thing, but we can always patch it (or back this out) before cutting a v11 release, if they find any problems with the approach.


Update: Sentry counsel says this is the way, so we're good. Third-party bundle is obvious in the build artifact, and the single collected license declaration is standard practice. 👍

@isaacs
isaacs merged commit 9df27e7 into developJul 23, 2026
282 checks passed
@isaacs
isaacs deleted the timfish/chore/cleanup-hook-register branch July 23, 2026 21:32
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Aug 27, 2026
…roduction dependencies (#23667)
Backport of: #22443Closes: #23611
`@sentry/server-utils` shipped the orchestrion bundler plugins and a
full JavaScript parser toolchain (meriyah, esquery, astring, source-map)
as production dependencies, so every consumer of `@sentry/node`
installed roughly 5 MB of code that no runtime path reaches unless they
opt into diagnostics-channel injection. The orchestrion runtime chain is
now compiled into this package's own build, and all `@apm-js-collab/*`
packages plus meriyah become devDependencies. Production dependencies
are down to `@sentry/conventions` and `@sentry/core`.
## Differences to the original PR
- `packages/server-utils/src/orchestrion/runtime/register.ts`: kept
`RegisterDiagnosticsChannelInjectionOptions` and the optional parameter
on `registerDiagnosticsChannelInjection()`, now deprecated and ignored.
The original deletes both; on v10 the option is reachable through the
public `experimentalUseDiagnosticsChannelInjection(options)`, so
removing it would be a compile error for anyone passing
`tracingHooksDir`.
- `packages/node/src/sdk/experimentalUseDiagnosticsChannelInjection.ts`:
same reason, the optional parameter stays.
- `packages/server-utils/src/orchestrion/runtime/register.ts`: kept
v10's loader-thread guard (`isMainThread` / `parentPort`), which landed
after the v10 branch point and is not in the original.
-
`packages/nextjs/src/config/withSentryConfig/getFinalConfigObjectUtils.ts`
and `getFinalConfigObject.ts`: removed
`maybeAddOutputFileTracingIncludes` plus its tests in
`packages/nextjs/test/config/withSentryConfig.test.ts`. That
`@vercel/nft` force-include is a v10-only workaround for meriyah's
`module-sync` exports map (#23034), which bundling removes. `develop`
never carried it, so this brings both branches to the same state.
---------
Co-authored-by: Tim Fish <tim@timfish.uk>
Sign up for freeto 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.

2 participants

@timfish@isaacs
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

chore: Remove lazy loading for hook registration - #22443

Merged
isaacs merged 18 commits into
developfrom
timfish/chore/cleanup-hook-register
Jul 23, 2026
Merged

chore: Remove lazy loading for hook registration#22443
isaacs merged 18 commits into
developfrom
timfish/chore/cleanup-hook-register

Conversation

@timfish

@timfishtimfish commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

This PR simplifies the register.ts hook registration to remove all the lazy loading. The clankers seem to always resort to lazy loading but pushed hard enough they will find better alternatives 🤣

Once the lazy loading was removed there were a number of other things required to get this actually passing all the e2e tests:

  • Bundle the whole orchestrion runtime chain (@apm-js-collab/*, meriyah, esquery, …) into @sentry/server-utils' build (all now devDependencies). The dist only has relative requires, which removes two classes of breakage:
  • The Module.register async hook is now a self-referenced entrypoint of our own ESM build (@sentry/server-utils/orchestrion/hook), sharing the vendored chunks
  • The webpack/Turbopack loader ships as a bundled entrypoint (./orchestrion/webpack-loader), resolved by self-reference since the @apm-js-collab packages are no longer installed
  • Fix build-time Rollup ESM interop issues (Node builtins need default interop; default-only ESM deps need requireReturnsDefault: 'auto')
  • NextJS: force @sentry/server-utils external via absolute-path externals so register.ts stays in node_modules and its Module.register self-reference resolves under pnpm — also removes the tracingHooksPath workaround
  • Bumps the @sentry/node size limit by ~40kb — the lazy loading previously hid this code from the size report
  • feat: Remove support for initialising via --require #22513

@github-actions

github-actionsBot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser27.79 kB--
@sentry/browser - with treeshaking flags26.23 kB--
@sentry/browser (incl. Tracing)46.31 kB--
@sentry/browser (incl. Tracing + Span Streaming)48.06 kB--
@sentry/browser (incl. Tracing, Profiling)51.12 kB--
@sentry/browser (incl. Tracing, Replay)85.59 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags75.23 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)90.29 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)102.97 kB--
@sentry/browser (incl. Feedback)44.96 kB--
@sentry/browser (incl. sendFeedback)32.59 kB--
@sentry/browser (incl. FeedbackAsync)37.64 kB--
@sentry/browser (incl. Metrics)28.88 kB--
@sentry/browser (incl. Logs)29.11 kB--
@sentry/browser (incl. Metrics & Logs)29.8 kB--
@sentry/react29.59 kB--
@sentry/react (incl. Tracing)48.6 kB--
@sentry/vue33.22 kB--
@sentry/vue (incl. Tracing)48.28 kB--
@sentry/svelte27.81 kB--
CDN Bundle30.11 kB--
CDN Bundle (incl. Tracing)48.14 kB--
CDN Bundle (incl. Logs, Metrics)31.69 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)49.47 kB--
CDN Bundle (incl. Replay, Logs, Metrics)70.95 kB--
CDN Bundle (incl. Tracing, Replay)85.72 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)87.01 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)91.49 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)92.78 kB--
CDN Bundle - uncompressed89.77 kB--
CDN Bundle (incl. Tracing) - uncompressed144.84 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed94.48 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed148.82 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed219.24 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed264.08 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed268.04 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed277.78 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed281.74 kB--
@sentry/nextjs (client)51.13 kB--
@sentry/sveltekit (client)46.75 kB--
@sentry/core/server79.92 kB--
@sentry/core/browser51.9 kB--
@sentry/node124.4 kB-0.01%-1 B 🔽
@sentry/node (incl. diagnostics channel injection)168.41 kB+12.41%+18.58 kB 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection)166 B-99.77%-69.86 kB 🔽
@sentry/node - without tracing74.66 kB+0.01%+1 B 🔺
@sentry/aws-serverless84.13 kB+0.01%+1 B 🔺
@sentry/cloudflare (withSentry) - minified196.61 kB--
@sentry/cloudflare (withSentry)482.97 kB--

View base workflow run

@timfishtimfish changed the title chore: Cleanup hook registrationchore: Remove lazy loading for hook registrationJul 21, 2026
@timfish
timfish marked this pull request as ready for review July 23, 2026 15:56
@timfish
timfish requested review from a team as code ownersJuly 23, 2026 15:56
@timfish
timfish requested review from JPeer264, chargome, isaacs, mydea and nicohrubec and removed request for a teamJuly 23, 2026 15:56

@cursorcursorBot left a comment

Copy link
Copy Markdown

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 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 2705b96. Configure here.

Comment threadpackages/server-utils/src/orchestrion/runtime/register.ts
Comment thread.size-limit.js
Comment threadpackages/server-utils/src/orchestrion/bundler/webpack.ts
Comment threadpackages/server-utils/src/orchestrion/runtime/register.ts
Comment threadpackages/server-utils/src/orchestrion/runtime/register.ts

@isaacsisaacs left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The only thing I'd gate on is the license banner preservation, to stay on the right side of the MIT/ISC/Apache/BSD code this bundles.

But, I think it's absolutely the right way to go, and overall works as expected.

(denoVersion[0] ?? 0) > 2 ||
(denoVersion[0] === 2 && (denoVersion[1] ?? 0) >= 8)
);
if (denoVersionString) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I wonder if the deno test is still necessary, since our minimum Deno version is going to be 2.8.2 in v11?

Comment threadpackages/server-utils/rollup.npm.config.mjs
Comment on lines +31 to +36
// `strictRequires: false`: the default `'auto'` wraps conditionally-required modules (e.g.
// `debug`'s browser/node split) in lazy initializers exported as `__require` — an export name that
// downstream re-bundlers mishandle (Turbopack renames it, producing `.require is not a function`
// crashes in Next.js on Cloudflare). Hoisting is safe here: the vendored graph is closed (nothing
// optional/missing) and has no require cycles that depend on lazy evaluation.
const commonJSOptions = { transformMixedEsModules: true, requireReturnsDefault: 'auto', strictRequires: false };

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

(low/safety) It'd be good to have a smoke test that verifies this, if only to prevent us from upgrading and breaking something down the road, if meriyah or apm-js-collab stuff ever violates that assumption.

@isaacsisaacs left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM! Checking with our oss legal brain trust now about the third-party-licenses.txt thing, but we can always patch it (or back this out) before cutting a v11 release, if they find any problems with the approach.


Update: Sentry counsel says this is the way, so we're good. Third-party bundle is obvious in the build artifact, and the single collected license declaration is standard practice. 👍

@isaacs
isaacs merged commit 9df27e7 into developJul 23, 2026
282 checks passed
@isaacs
isaacs deleted the timfish/chore/cleanup-hook-register branch July 23, 2026 21:32
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Jul 24, 2026
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier
via absolute-path webpack externals and dropped the tracingHooksDir option from
registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir
build var. Remove the now-broken nextjs workaround that relied on them; node's
init registers the hooks and the externals keep them resolvable.
andreiborza added a commit that referenced this pull request Aug 27, 2026
…roduction dependencies (#23667)
Backport of: #22443Closes: #23611
`@sentry/server-utils` shipped the orchestrion bundler plugins and a
full JavaScript parser toolchain (meriyah, esquery, astring, source-map)
as production dependencies, so every consumer of `@sentry/node`
installed roughly 5 MB of code that no runtime path reaches unless they
opt into diagnostics-channel injection. The orchestrion runtime chain is
now compiled into this package's own build, and all `@apm-js-collab/*`
packages plus meriyah become devDependencies. Production dependencies
are down to `@sentry/conventions` and `@sentry/core`.
## Differences to the original PR
- `packages/server-utils/src/orchestrion/runtime/register.ts`: kept
`RegisterDiagnosticsChannelInjectionOptions` and the optional parameter
on `registerDiagnosticsChannelInjection()`, now deprecated and ignored.
The original deletes both; on v10 the option is reachable through the
public `experimentalUseDiagnosticsChannelInjection(options)`, so
removing it would be a compile error for anyone passing
`tracingHooksDir`.
- `packages/node/src/sdk/experimentalUseDiagnosticsChannelInjection.ts`:
same reason, the optional parameter stays.
- `packages/server-utils/src/orchestrion/runtime/register.ts`: kept
v10's loader-thread guard (`isMainThread` / `parentPort`), which landed
after the v10 branch point and is not in the original.
-
`packages/nextjs/src/config/withSentryConfig/getFinalConfigObjectUtils.ts`
and `getFinalConfigObject.ts`: removed
`maybeAddOutputFileTracingIncludes` plus its tests in
`packages/nextjs/test/config/withSentryConfig.test.ts`. That
`@vercel/nft` force-include is a v10-only workaround for meriyah's
`module-sync` exports map (#23034), which bundling removes. `develop`
never carried it, so this brings both branches to the same state.
---------
Co-authored-by: Tim Fish <tim@timfish.uk>
Sign up for freeto 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.

2 participants

@timfish@isaacs