diff --git a/packages/esbuild-plugin/src/index.ts b/packages/esbuild-plugin/src/index.ts index 74ef48c1..da7dd4da 100644 --- a/packages/esbuild-plugin/src/index.ts +++ b/packages/esbuild-plugin/src/index.ts @@ -38,26 +38,57 @@ function esbuildReleaseInjectionPlugin(injectionCode: string): UnpluginOptions { function esbuildDebugIdInjectionPlugin(): UnpluginOptions { const pluginName = "sentry-esbuild-debug-id-injection-plugin"; - const virtualReleaseInjectionFilePath = path.resolve("_sentry-debug-id-injection-stub"); // needs to be an absolute path for older eslint versions + const proxyNamespace = "sentry-debug-id-proxy"; + const stubNamespace = "sentry-debug-id-stub"; return { name: pluginName, esbuild: { - setup({ initialOptions, onLoad, onResolve }) { - initialOptions.inject = initialOptions.inject || []; - initialOptions.inject.push(virtualReleaseInjectionFilePath); + setup({ onLoad, onResolve }) { + onResolve({ filter: /.*/ }, (args) => { + if (args.kind !== "entry-point") { + return; + } + return { + pluginName, + path: args.path, + namespace: proxyNamespace, + pluginData: { + originalPath: args.path, + originalResolveDir: args.resolveDir, + }, + }; + }); + + onLoad({ filter: /.*/, namespace: proxyNamespace }, (args) => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + const originalPath = args.pluginData.originalPath as string; + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + const originalResolveDir = args.pluginData.originalResolveDir as string; + return { + loader: "js", + pluginName, + contents: ` + import "_sentry-debug-id-injection-stub"; + import * as OriginalModule from "${originalPath}"; + export default OriginalModule.default; + export * from "${originalPath}";`, + resolveDir: originalResolveDir, + }; + }); onResolve({ filter: /_sentry-debug-id-injection-stub/ }, (args) => { return { path: args.path, sideEffects: true, pluginName, + namespace: stubNamespace, suffix: "?sentry-module-id=" + uuidv4(), // create different module, each time this is resolved }; }); - onLoad({ filter: /_sentry-debug-id-injection-stub/ }, () => { + onLoad({ filter: /_sentry-debug-id-injection-stub/, namespace: stubNamespace }, () => { return { loader: "js", pluginName,