From 31f1ae5e6089e6deba71baa58b3e73929a3161dd Mon Sep 17 00:00:00 2001 From: Charly Gomez Date: Tue, 27 Jan 2026 14:13:36 +0100 Subject: [PATCH 1/2] add bundler-major-version tag --- .../src/options-mapping.ts | 2 ++ .../src/sentry/telemetry.ts | 2 ++ packages/bundler-plugin-core/src/types.ts | 4 +++ packages/webpack-plugin/src/index.ts | 30 +++++++++++++++++-- 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/packages/bundler-plugin-core/src/options-mapping.ts b/packages/bundler-plugin-core/src/options-mapping.ts index d85321a0..762720df 100644 --- a/packages/bundler-plugin-core/src/options-mapping.ts +++ b/packages/bundler-plugin-core/src/options-mapping.ts @@ -76,6 +76,7 @@ export type NormalizedOptions = { _metaOptions: { telemetry: { metaFramework: string | undefined; + bundlerMajorVersion: string | undefined; }; }; applicationKey: string | undefined; @@ -121,6 +122,7 @@ export function normalizeUserOptions(userOptions: UserOptions): NormalizedOption _metaOptions: { telemetry: { metaFramework: userOptions._metaOptions?.telemetry?.metaFramework, + bundlerMajorVersion: userOptions._metaOptions?.telemetry?.bundlerMajorVersion, }, }, applicationKey: userOptions.applicationKey, diff --git a/packages/bundler-plugin-core/src/sentry/telemetry.ts b/packages/bundler-plugin-core/src/sentry/telemetry.ts index 70c17b3e..f3060b67 100644 --- a/packages/bundler-plugin-core/src/sentry/telemetry.ts +++ b/packages/bundler-plugin-core/src/sentry/telemetry.ts @@ -110,6 +110,8 @@ export function setTelemetryDataOnScope( project: Array.isArray(project) ? project.join(", ") : project ?? "undefined", bundler: buildTool, }); + + scope.setTag("bundler-major-version", options._metaOptions.telemetry.bundlerMajorVersion); scope.setUser({ id: org }); } diff --git a/packages/bundler-plugin-core/src/types.ts b/packages/bundler-plugin-core/src/types.ts index 292b6bd5..1c00c94a 100644 --- a/packages/bundler-plugin-core/src/types.ts +++ b/packages/bundler-plugin-core/src/types.ts @@ -418,6 +418,10 @@ export interface Options { * The meta framework using the plugin. */ metaFramework?: string; + /** + * The major version of the bundler (e.g., "4" or "5" for webpack). + */ + bundlerMajorVersion?: string; }; }; } diff --git a/packages/webpack-plugin/src/index.ts b/packages/webpack-plugin/src/index.ts index 9b1bfa24..4b2d6cfe 100644 --- a/packages/webpack-plugin/src/index.ts +++ b/packages/webpack-plugin/src/index.ts @@ -8,14 +8,40 @@ const BannerPlugin = webpack4or5?.BannerPlugin || webpack4or5?.default?.BannerPl const DefinePlugin = webpack4or5?.DefinePlugin || webpack4or5?.default?.DefinePlugin; +// Detect webpack major version for telemetry (helps differentiate webpack 4 vs 5 usage) +function getWebpackMajorVersion(): string | undefined { + try { + const webpack = webpack4or5 as unknown as { version?: string; default?: { version?: string } } | undefined; + const version = webpack?.version ?? webpack?.default?.version; + const webpackMajorVersion = version?.split(".")[0]; // "4" or "5" + return webpackMajorVersion; + } catch (error) { + return undefined + } +} + +const webpackMajorVersion = getWebpackMajorVersion(); + const sentryUnplugin = sentryWebpackUnpluginFactory({ BannerPlugin, DefinePlugin, }); // eslint-disable-next-line @typescript-eslint/no-explicit-any -export const sentryWebpackPlugin: (options?: SentryWebpackPluginOptions) => any = - sentryUnplugin.webpack; +export const sentryWebpackPlugin: (options?: SentryWebpackPluginOptions) => any = (options) => { + const enhancedOptions: SentryWebpackPluginOptions = { + ...options, + _metaOptions: { + ...options?._metaOptions, + telemetry: { + ...options?._metaOptions?.telemetry, + bundlerMajorVersion: + options?._metaOptions?.telemetry?.bundlerMajorVersion ?? webpackMajorVersion, + }, + }, + }; + return sentryUnplugin.webpack(enhancedOptions); +}; export { sentryCliBinaryExists } from "@sentry/bundler-plugin-core"; From 1f9cdc54b7015a806fe6359456a9eca79cf3e706 Mon Sep 17 00:00:00 2001 From: Charly Gomez Date: Tue, 27 Jan 2026 14:15:47 +0100 Subject: [PATCH 2/2] format --- packages/bundler-plugin-core/src/sentry/telemetry.ts | 2 +- packages/webpack-plugin/src/index.ts | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/bundler-plugin-core/src/sentry/telemetry.ts b/packages/bundler-plugin-core/src/sentry/telemetry.ts index f3060b67..7f48ec4a 100644 --- a/packages/bundler-plugin-core/src/sentry/telemetry.ts +++ b/packages/bundler-plugin-core/src/sentry/telemetry.ts @@ -110,7 +110,7 @@ export function setTelemetryDataOnScope( project: Array.isArray(project) ? project.join(", ") : project ?? "undefined", bundler: buildTool, }); - + scope.setTag("bundler-major-version", options._metaOptions.telemetry.bundlerMajorVersion); scope.setUser({ id: org }); diff --git a/packages/webpack-plugin/src/index.ts b/packages/webpack-plugin/src/index.ts index 4b2d6cfe..cb4683e1 100644 --- a/packages/webpack-plugin/src/index.ts +++ b/packages/webpack-plugin/src/index.ts @@ -11,12 +11,14 @@ const DefinePlugin = webpack4or5?.DefinePlugin || webpack4or5?.default?.DefinePl // Detect webpack major version for telemetry (helps differentiate webpack 4 vs 5 usage) function getWebpackMajorVersion(): string | undefined { try { - const webpack = webpack4or5 as unknown as { version?: string; default?: { version?: string } } | undefined; + const webpack = webpack4or5 as unknown as + | { version?: string; default?: { version?: string } } + | undefined; const version = webpack?.version ?? webpack?.default?.version; const webpackMajorVersion = version?.split(".")[0]; // "4" or "5" return webpackMajorVersion; } catch (error) { - return undefined + return undefined; } }