diff --git a/packages/vercel-edge/package.json b/packages/vercel-edge/package.json index 09b8efe2b65e..d9a6a8f0fb39 100644 --- a/packages/vercel-edge/package.json +++ b/packages/vercel-edge/package.json @@ -40,7 +40,6 @@ }, "dependencies": { "@opentelemetry/api": "^1.9.1", - "@opentelemetry/resources": "^2.6.1", "@sentry/core": "10.59.0" }, "devDependencies": { diff --git a/packages/vercel-edge/rollup.npm.config.mjs b/packages/vercel-edge/rollup.npm.config.mjs index ae01f43703d0..e80e03014471 100644 --- a/packages/vercel-edge/rollup.npm.config.mjs +++ b/packages/vercel-edge/rollup.npm.config.mjs @@ -73,6 +73,32 @@ export default makeNPMConfigVariants( } }, }, + { + // `@opentelemetry/sdk-trace-base` is bundled here, and its `BasicTracerProvider` + // statically imports `defaultResource` from `@opentelemetry/resources` as a fallback + // (`mergedConfig.resource ?? defaultResource()`). Sentry always supplies its own + // resource via `getSentryResource()`, so the fallback never runs. Shimming the import + // lets us drop the `@opentelemetry/resources` dependency and avoids bundling its + // node-only resource detectors into the edge runtime. + name: 'otel-resources-shim', + resolveId: source => (source === '@opentelemetry/resources' ? '\0otel_resources_sentry_shim' : null), + load: id => + id === '\0otel_resources_sentry_shim' + ? ` + export function defaultResource() { + return { + attributes: {}, + merge() { + return this; + }, + getRawAttributes() { + return []; + }, + }; + } + ` + : null, + }, ], }, }),