Skip to content

Conversation

@lforst
Copy link

@lforst lforst commented Jun 6, 2023

Fixes #300

Esbuild will generate one output bundle for each entrypoint that is defined. The issue previously was that we were injecting an import that is only resolved and loaded once for all entrypoints, leading to the same debug ID in all output bundles.

We attempt fixing this by transforming the entrypoints via a proxy module that in return imports a stub that injects the debug ID snippets into the entrypoints.

One thing I am still a little bit unsure about is why just adding a namespace to the existing onResolve and onLoad didn't work, since that is basically what we're doing here, minus the proxy module. It fails because it can't the injected file anymore. Maybe this is some intransparent behaviour of esbuild.
It seems esbuild does not call onResolve for injected modules.

@lforst lforst marked this pull request as ready for review June 6, 2023 09:18
@lforst lforst requested review from AbhiPrasad and mydea June 6, 2023 09:18
contents: `
import "_sentry-debug-id-injection-stub";
import * as OriginalModule from "${originalPath}";
export default OriginalModule.default;
Copy link
Member

Choose a reason for hiding this comment

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

just sanity checking, does this also work if the original module has no default export?

Copy link
Author

Choose a reason for hiding this comment

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

Yes, I made sure to check this. The output code will look as follows in these situations:

var d = typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {};
d.SENTRY_RELEASE = { id: "0cd3502" };
(function () {
  try {
    var e =
        typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {},
      n = new Error().stack;
    n &&
      ((e._sentryDebugIds = e._sentryDebugIds || {}),
      (e._sentryDebugIds[n] = "e426cce9-c1fa-4eea-aa91-50e49ab0f23d"),
      (e._sentryDebugIdIdentifier = "sentry-dbid-e426cce9-c1fa-4eea-aa91-50e49ab0f23d"));
  } catch {}
})();
function o() {
  return global.SENTRY_RELEASE;
}
function t() {
  console.log("Hello world!");
}
console.log("entrypoint1.js loaded");
function p() {
  console.log("called main (entrypoint1.js)"), t();
}
console.log("global:", o());
var w = void 0;
export { w as default, o as getGlobal, p as main };
//# sourceMappingURL=entrypoint1.js.map

@lforst lforst merged commit 2a22ed8 into main Jun 6, 2023
@lforst lforst deleted the lforst-fix-esbuild-same-debug-ids branch June 6, 2023 12:58
Sign up for free to 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.

Esbuild debug ID injection is broken when having multiple entrypoints

3 participants