auri
Version:
Organize package changes and releases
63 lines (62 loc) • 1.5 kB
JavaScript
import { convertPositiveIntegerString } from "./int.js";
export function parseSemver(version) {
let parts = version.split("-");
if (parts.length > 2) {
throw new Error("Invalid version format");
}
const mainParts = parts[0].split(".");
if (mainParts.length !== 3) {
throw new Error("Invalid version format");
}
let major;
try {
major = convertPositiveIntegerString(mainParts[0]);
}
catch {
throw new Error("Invalid version format");
}
let minor;
try {
minor = convertPositiveIntegerString(mainParts[1]);
}
catch {
throw new Error("Invalid version format");
}
let patch;
try {
patch = convertPositiveIntegerString(mainParts[2]);
}
catch {
throw new Error("Invalid version format");
}
if (parts.length === 1) {
const semver = {
major,
minor,
patch,
next: null
};
return semver;
}
const nextParts = parts[1].split(".");
if (nextParts.length !== 2) {
throw new Error("Invalid version format");
}
if (nextParts[0] !== "next") {
throw new Error("Invalid version format");
}
let next;
try {
next = convertPositiveIntegerString(nextParts[1]);
}
catch {
throw new Error("Invalid version format");
}
const semver = {
major,
minor,
patch,
next
};
return semver;
}