Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/quiet-versions-compare.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@uploadthing/shared": patch
---

Compare numeric minor and patch versions in peer dependency checks. Valid double-digit minor versions no longer trigger a warning, and installed versions below the required patch version are rejected.
9 changes: 6 additions & 3 deletions packages/shared/src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -208,19 +208,22 @@ export function semverLite(required: string, toCheck: string) {

const [_1, rMajor, rMinor, rPatch] = requiredMatch;
const [_2, cMajor, cMinor, cPatch] = toCheckMatch;
const meetsMinimum =
Number(cMinor ?? 0) > Number(rMinor ?? 0) ||
(Number(cMinor ?? 0) === Number(rMinor ?? 0) &&
Number(cPatch ?? 0) >= Number(rPatch ?? 0));

if (required.startsWith("^")) {
// Major must be equal, minor must be greater or equal
if (rMajor !== cMajor) return false;
if (rMinor && cMinor && rMinor > cMinor) return false;
return true;
return meetsMinimum;
}

if (required.startsWith("~")) {
// Major must be equal, minor must be equal
if (rMajor !== cMajor) return false;
if (rMinor !== cMinor) return false;
return true;
return Number(cPatch ?? 0) >= Number(rPatch ?? 0);
}

// Exact match
Expand Down
21 changes: 21 additions & 0 deletions packages/shared/test/semver.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { describe, expect, it } from "vitest";

import { semverLite } from "../src/utils";

describe("semverLite", () => {
it.each([
["^7.2.0", "7.10.0", true],
["^7.10.0", "7.2.0", false],
["^7.2.5", "7.2.4", false],
["^7.2.5", "7.2.5", true],
["^7.2.5", "7.3.0", true],
["^7.2.5", "8.0.0", false],
["~7.2.5", "7.2.4", false],
["~7.2.5", "7.2.10", true],
["~7.2.5", "7.3.0", false],
["7.2.5", "7.2.5", true],
["7.2.5", "7.2.6", false],
])("matches %s against %s as %s", (required, installed, matches) => {
expect(semverLite(required, installed)).toBe(matches);
});
});
Loading