From 72829f917cfecc4524465e32220b6c5a31543da6 Mon Sep 17 00:00:00 2001 From: Will Gordon Date: Wed, 6 May 2026 14:54:33 -0400 Subject: [PATCH] fix(deps): strips version specifiers from cached dep metadata --- .../components/dashboard/DependenciesTab.tsx | 5 +-- src/app/lib/dependency-detection.ts | 2 +- tests/lib/dependency-detection.test.ts | 32 +++++++++++++++++++ 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/src/app/components/dashboard/DependenciesTab.tsx b/src/app/components/dashboard/DependenciesTab.tsx index 5107c753..b9cc2591 100644 --- a/src/app/components/dashboard/DependenciesTab.tsx +++ b/src/app/components/dashboard/DependenciesTab.tsx @@ -8,6 +8,7 @@ import type { AbandonedDependency } from "../../lib/dependency-dashboard"; import { classifyDepStatus, extractVersionInfo, + stripVersionSpecifier, ALL_DEP_STATUSES, isKnownDepBot, DEP_TOOL_LABEL_NAMES, @@ -174,8 +175,8 @@ export default function DependenciesTab(props: DependenciesTabProps) { if (cached && (!titleInfo?.updateType || !titleInfo?.from)) { versionInfo = { packageName: titleInfo?.packageName ?? cached.packageName, - from: cached.from ?? titleInfo?.from, - to: cached.to ?? titleInfo?.to, + from: stripVersionSpecifier(cached.from ?? titleInfo?.from ?? "") || undefined, + to: stripVersionSpecifier(cached.to ?? titleInfo?.to ?? "") || undefined, updateType: cached.updateType ?? titleInfo?.updateType, }; } diff --git a/src/app/lib/dependency-detection.ts b/src/app/lib/dependency-detection.ts index 171e8f9d..99140459 100644 --- a/src/app/lib/dependency-detection.ts +++ b/src/app/lib/dependency-detection.ts @@ -74,7 +74,7 @@ export function isDependencyPr(pr: PullRequest, trackedBotLogins: Set): const VERSION_SPECIFIER_RE = /^[><=!~^]+/; -function stripVersionSpecifier(v: string): string { +export function stripVersionSpecifier(v: string): string { return v.replace(VERSION_SPECIFIER_RE, ""); } diff --git a/tests/lib/dependency-detection.test.ts b/tests/lib/dependency-detection.test.ts index 8fb4b6bc..f3bfd304 100644 --- a/tests/lib/dependency-detection.test.ts +++ b/tests/lib/dependency-detection.test.ts @@ -8,6 +8,7 @@ import { isRebasing, isKnownDepBot, expandBotLogins, + stripVersionSpecifier, KNOWN_DEP_BOT_LOGINS, DEP_BRANCH_PREFIXES, DEP_TITLE_PATTERN, @@ -210,6 +211,37 @@ describe("extractVersionInfo", () => { }); }); +describe("stripVersionSpecifier", () => { + it("strips == prefix", () => { + expect(stripVersionSpecifier("==9.0.2")).toBe("9.0.2"); + }); + + it("strips >= prefix", () => { + expect(stripVersionSpecifier(">=1.5.0")).toBe("1.5.0"); + }); + + it("strips ~= prefix", () => { + expect(stripVersionSpecifier("~=1.15.0")).toBe("1.15.0"); + }); + + it("strips ^ prefix (npm caret)", () => { + expect(stripVersionSpecifier("^1.2.3")).toBe("1.2.3"); + }); + + it("strips <= prefix", () => { + expect(stripVersionSpecifier("<=2.0.0")).toBe("2.0.0"); + }); + + it("leaves plain versions unchanged", () => { + expect(stripVersionSpecifier("4.17.21")).toBe("4.17.21"); + expect(stripVersionSpecifier("v2.0.0")).toBe("v2.0.0"); + }); + + it("returns empty string for empty input", () => { + expect(stripVersionSpecifier("")).toBe(""); + }); +}); + describe("isRebasing", () => { it("returns true when rebase label matches exactly", () => { const pr = makePullRequest({ labels: [{ name: "rebase", color: "ffffff" }] });