Fix semver prerelease identifier handling for empty/falsy values

This commit is contained in:
Cursor Agent
2025-06-23 23:03:37 +00:00
parent 30441585d6
commit 80c74f0e9a
2 changed files with 9 additions and 5 deletions

View File

@@ -326,18 +326,21 @@ pub const Version = extern struct {
new_version.major +|= 1;
new_version.minor = 0;
new_version.patch = 0;
try pre_strings.writer().print("{s}.0", .{identifier orelse "0"});
const id = if (identifier) |i| if (i.len > 0) i else "0" else "0";
try pre_strings.writer().print("{s}.0", .{id});
new_version.tag.pre = ExternalString.from(pre_strings.items);
},
.preminor => {
new_version.minor +|= 1;
new_version.patch = 0;
try pre_strings.writer().print("{s}.0", .{identifier orelse "0"});
const id = if (identifier) |i| if (i.len > 0) i else "0" else "0";
try pre_strings.writer().print("{s}.0", .{id});
new_version.tag.pre = ExternalString.from(pre_strings.items);
},
.prepatch => {
new_version.patch +|= 1;
try pre_strings.writer().print("{s}.0", .{identifier orelse "0"});
const id = if (identifier) |i| if (i.len > 0) i else "0" else "0";
try pre_strings.writer().print("{s}.0", .{id});
new_version.tag.pre = ExternalString.from(pre_strings.items);
},
.release => {
@@ -347,7 +350,8 @@ pub const Version = extern struct {
if (!new_version.tag.hasPre()) {
// Same as prepatch
new_version.patch +|= 1;
try pre_strings.writer().print("{s}.0", .{identifier orelse "0"});
const id = if (identifier) |i| if (i.len > 0) i else "0" else "0";
try pre_strings.writer().print("{s}.0", .{id});
new_version.tag.pre = ExternalString.from(pre_strings.items);
} else {
// Increment existing prerelease

View File

@@ -1178,7 +1178,7 @@ describe("Bun.semver negative tests", () => {
// Note: non-string identifiers are converted to strings
expect(Bun.semver.bump("1.2.3", "prerelease", 123 as any)).toBe("1.2.4-123.0");
expect(Bun.semver.bump("1.2.3", "prerelease", {} as any)).toBe("1.2.4-[object Object].0");
expect(Bun.semver.bump("1.2.3", "prerelease", [] as any)).toBe("1.2.4-.0");
expect(Bun.semver.bump("1.2.3", "prerelease", [] as any)).toBe("1.2.4-0.0");
expect(Bun.semver.bump("1.2.3", "prerelease", true as any)).toBe("1.2.4-true.0");
});
});