diff --git a/packages/bundler-plugin-core/src/build-plugin-manager.ts b/packages/bundler-plugin-core/src/build-plugin-manager.ts index af9b243d..4ae62419 100644 --- a/packages/bundler-plugin-core/src/build-plugin-manager.ts +++ b/packages/bundler-plugin-core/src/build-plugin-manager.ts @@ -23,6 +23,7 @@ import { arrayify, getProjects, getTurborepoEnvPassthroughWarning, + serializeIgnoreOptions, stripQueryAndHashFromPath, } from "./utils"; import { glob } from "glob"; @@ -554,7 +555,12 @@ export function createSentryBuildPluginManager( try { const cliInstance = createCliInstance(options); await cliInstance.execute( - ["sourcemaps", "inject", ...buildArtifactPaths], + [ + "sourcemaps", + "inject", + ...serializeIgnoreOptions(options.sourcemaps?.ignore), + ...buildArtifactPaths, + ], options.debug ? "rejectOnError" : false ); } catch (e) { diff --git a/packages/bundler-plugin-core/src/utils.ts b/packages/bundler-plugin-core/src/utils.ts index a1aebf11..64400a29 100644 --- a/packages/bundler-plugin-core/src/utils.ts +++ b/packages/bundler-plugin-core/src/utils.ts @@ -408,3 +408,23 @@ export function getProjects(project: string | string[] | undefined): string[] | return undefined; } + +/** + * Inlined functionality from @sentry/cli helper code to add `--ignore` options. + * + * Temporary workaround until we expose a function for injecting debug IDs. Currently, we directly call `execute` with CLI args to inject them. + */ +export function serializeIgnoreOptions(ignoreValue: string | string[] | undefined): string[] { + const DEFAULT_IGNORE = ["node_modules"]; + + const ignoreOptions: string[] = Array.isArray(ignoreValue) + ? ignoreValue + : typeof ignoreValue === "string" + ? [ignoreValue] + : DEFAULT_IGNORE; + + return ignoreOptions.reduce( + (acc, value) => acc.concat(["--ignore", String(value)]), + [] as string[] + ); +} diff --git a/packages/bundler-plugin-core/test/build-plugin-manager.test.ts b/packages/bundler-plugin-core/test/build-plugin-manager.test.ts index e3c87c63..9f3968eb 100644 --- a/packages/bundler-plugin-core/test/build-plugin-manager.test.ts +++ b/packages/bundler-plugin-core/test/build-plugin-manager.test.ts @@ -434,7 +434,7 @@ describe("createSentryBuildPluginManager", () => { await buildPluginManager.injectDebugIds(buildArtifactPaths); expect(mockCliExecute).toHaveBeenCalledWith( - ["sourcemaps", "inject", "/path/to/1", "/path/to/2"], + ["sourcemaps", "inject", "--ignore", "node_modules", "/path/to/1", "/path/to/2"], false ); }); @@ -459,7 +459,7 @@ describe("createSentryBuildPluginManager", () => { await buildPluginManager.injectDebugIds(buildArtifactPaths); expect(mockCliExecute).toHaveBeenCalledWith( - ["sourcemaps", "inject", "/path/to/bundle"], + ["sourcemaps", "inject", "--ignore", "node_modules", "/path/to/bundle"], "rejectOnError" ); }); diff --git a/packages/bundler-plugin-core/test/utils.test.ts b/packages/bundler-plugin-core/test/utils.test.ts index 90fe9666..bcb5e4cc 100644 --- a/packages/bundler-plugin-core/test/utils.test.ts +++ b/packages/bundler-plugin-core/test/utils.test.ts @@ -5,6 +5,7 @@ import { getPackageJson, parseMajorVersion, replaceBooleanFlagsInCode, + serializeIgnoreOptions, stringToUUID, } from "../src/utils"; @@ -270,3 +271,25 @@ describe("generateModuleMetadataInjectorCode", () => { expect(generatedCode).toMatchSnapshot(); }); }); + +describe("serializeIgnoreOptions", () => { + it("returns default ignore options when undefined", () => { + const result = serializeIgnoreOptions(undefined); + expect(result).toEqual(["--ignore", "node_modules"]); + }); + + it("handles array of ignore patterns", () => { + const result = serializeIgnoreOptions(["dist", "**/build/**", "*.log"]); + expect(result).toEqual(["--ignore", "dist", "--ignore", "**/build/**", "--ignore", "*.log"]); + }); + + it("handles single string pattern", () => { + const result = serializeIgnoreOptions("dist"); + expect(result).toEqual(["--ignore", "dist"]); + }); + + it("handles empty array", () => { + const result = serializeIgnoreOptions([]); + expect(result).toEqual([]); + }); +});