46 lines
1.1 KiB
JavaScript
46 lines
1.1 KiB
JavaScript
const SHA256_PATTERN = /^[a-f0-9]{64}$/;
|
|
|
|
function normalizeVersion(rawVersion, fallback = '0.0.0') {
|
|
const value = String(rawVersion || '').trim();
|
|
return value || fallback;
|
|
}
|
|
|
|
function compareLooseVersion(left, right) {
|
|
const normalize = (value) => normalizeVersion(value, '0.0.0')
|
|
.replace(/^v/i, '')
|
|
.split('.')
|
|
.map((part) => parseInt(part, 10))
|
|
.map((num) => (Number.isFinite(num) ? num : 0));
|
|
|
|
const a = normalize(left);
|
|
const b = normalize(right);
|
|
const size = Math.max(a.length, b.length);
|
|
for (let i = 0; i < size; i += 1) {
|
|
const av = a[i] || 0;
|
|
const bv = b[i] || 0;
|
|
if (av > bv) return 1;
|
|
if (av < bv) return -1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
function normalizeReleaseNotes(rawValue) {
|
|
return String(rawValue || '')
|
|
.replace(/\\r\\n/g, '\n')
|
|
.replace(/\\n/g, '\n')
|
|
.replace(/\\r/g, '\n')
|
|
.trim();
|
|
}
|
|
|
|
function normalizeSha256(rawValue) {
|
|
const digest = String(rawValue || '').trim().toLowerCase();
|
|
return SHA256_PATTERN.test(digest) ? digest : '';
|
|
}
|
|
|
|
module.exports = {
|
|
compareLooseVersion,
|
|
normalizeReleaseNotes,
|
|
normalizeSha256,
|
|
normalizeVersion
|
|
};
|