Files
rmm-openwrt/web/version.js
T
2026-07-31 00:28:22 +03:00

49 lines
1.7 KiB
JavaScript

(function exposeVersionHelpers(root, factory) {
const helpers = factory();
if (typeof module === "object" && module.exports) module.exports = helpers;
if (root) root.RMMVersions = helpers;
})(typeof globalThis !== "undefined" ? globalThis : this, function createVersionHelpers() {
function parseSemVer(value) {
const match = String(value || "").trim().match(/^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/);
if (!match) return null;
return {
major: Number(match[1]),
minor: Number(match[2]),
patch: Number(match[3]),
prerelease: match[4] ? match[4].split(".") : [],
};
}
function comparePrerelease(left, right) {
if (!left.length && !right.length) return 0;
if (!left.length) return 1;
if (!right.length) return -1;
const length = Math.max(left.length, right.length);
for (let index = 0; index < length; index += 1) {
const a = left[index];
const b = right[index];
if (a === undefined) return -1;
if (b === undefined) return 1;
if (a === b) continue;
const aNumber = /^\d+$/.test(a);
const bNumber = /^\d+$/.test(b);
if (aNumber && bNumber) return Number(a) < Number(b) ? -1 : 1;
if (aNumber !== bNumber) return aNumber ? -1 : 1;
return a < b ? -1 : 1;
}
return 0;
}
function compareSemVer(leftValue, rightValue) {
const left = parseSemVer(leftValue);
const right = parseSemVer(rightValue);
if (!left || !right) return null;
for (const key of ["major", "minor", "patch"]) {
if (left[key] !== right[key]) return left[key] < right[key] ? -1 : 1;
}
return comparePrerelease(left.prerelease, right.prerelease);
}
return { parseSemVer, compareSemVer };
});