diff --git a/src/services/dependencyAnalyzerService.ts b/src/services/dependencyAnalyzerService.ts index fa38833..df5fb0d 100644 --- a/src/services/dependencyAnalyzerService.ts +++ b/src/services/dependencyAnalyzerService.ts @@ -47,7 +47,7 @@ const isValidSemverRange = (version: string): boolean => { * @returns The cleaned version string. */ const cleanVersion = (version: string): string => { - return version.replace(/^[<=>^~]/, ""); + return version.replace(/^[<=>^~]+/, ""); }; /** diff --git a/test/services/dependencyAnalyzerService.spec.ts b/test/services/dependencyAnalyzerService.spec.ts index c3ddc39..2599337 100644 --- a/test/services/dependencyAnalyzerService.spec.ts +++ b/test/services/dependencyAnalyzerService.spec.ts @@ -6,6 +6,7 @@ /* eslint-disable vitest/valid-expect -- Test expectations don't need messages */ /* eslint-disable max-lines-per-function -- Test suites require many test cases */ +/* eslint-disable max-lines -- Test suites require many test cases */ /* eslint-disable @typescript-eslint/naming-convention -- Test data uses npm package names and destructured imports */ /* eslint-disable @typescript-eslint/consistent-type-assertions -- Required for mocking */ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; @@ -266,6 +267,30 @@ describe("dependencyAnalyzerService", () => { expect(result[0]?.currentVersion).toBe("^1.0.0"); }); + it("should handle multi-character version prefixes like >=", async() => { + expect.assertions(2); + const mockNpmService = createMockNpmService(); + const oldDate = getDaysAgoIso(15); + mockNpmService.getPackageInfo.mockResolvedValue({ + "dist-tags": { latest: "2.0.0" }, + "name": "test-package", + "time": { "2.0.0": oldDate }, + "versions": { "2.0.0": { version: "2.0.0" } }, + }); + const { DependencyAnalyzerService } + = await import("../../src/services/dependencyAnalyzerService.js"); + const analyzerService = new DependencyAnalyzerService( + mockNpmService as Parameters[0], + ); + const result = await analyzerService.analyzePackageJson({ + dependencies: { + "test-package": ">=1.0.0", + }, + }); + expect(result).toHaveLength(1); + expect(result[0]?.currentVersion).toBe(">=1.0.0"); + }); + it("should handle npm errors gracefully", async() => { expect.assertions(1); const mockNpmService = createMockNpmService();