init commit

This commit is contained in:
rxliuli
2025-11-04 05:03:50 +08:00
commit bce557cc2d
1396 changed files with 172991 additions and 0 deletions

View File

@@ -0,0 +1,99 @@
function parseVersion(input) {
const data = {
version: input.toLowerCase()
};
const parts = input.toLowerCase().split('.').filter((p)=>!!p);
// Only parse single parts that are actual numbers.
// This check will prevent `parseInt` from pasing the leading chars if they are
// valid numbers.
if (parts.length <= 1 && !/^\d+$/.test(parts[0])) {
return data;
}
const major = parseInt(parts[0], 10);
const minor = parseInt(parts[1], 10);
const patch = parseInt(parts[2], 10);
// Only add converted versions if `major` part was valid
if (!Number.isNaN(major)) {
data.major = major;
if (!Number.isNaN(minor)) data.minor = minor;
if (!Number.isNaN(patch)) data.patch = patch;
}
return data;
}
/**
* Check if the given value is a complete Version struct.
*/ // eslint-disable-next-line @typescript-eslint/no-explicit-any
function isVersion(value) {
var _value, _value1;
return typeof ((_value = value) === null || _value === void 0 ? void 0 : _value.major) === 'number' && typeof ((_value1 = value) === null || _value1 === void 0 ? void 0 : _value1.minor) === 'number';
}
/**
* Compare two version numbers together.
*
* NOTE: This only supports the first 3 segments (major, minor, patch) and does not
* do a full SemVer compare.
*
* @example
* ```javascript
* compareVersion('1.2.3', '1.2.4');
* // => -1
* ```
*/ function compareVersion(base, comp) {
let baseList = toNumbers(base);
let compList = toNumbers(comp);
// Right pad versions with zeros to make them equal length
const versionLength = Math.max(baseList.length, compList.length);
baseList = baseList.concat(Array(versionLength).fill(0)).slice(0, versionLength);
compList = compList.concat(Array(versionLength).fill(0)).slice(0, versionLength);
/** Constrain the given value to the output range of this function. */ const constrain = (value)=>{
if (value <= -1) return -1;
else if (value >= 1) return 1;
else return 0;
};
for(let index = 0; index < versionLength; index++){
const aValue = baseList[index];
const bValue = compList[index];
if (aValue !== bValue) {
return constrain(aValue - bValue);
}
}
return 0;
}
function eq(base, comp) {
return compareVersion(base, comp) === 0;
}
function gt(base, comp) {
return compareVersion(base, comp) > 0;
}
function gte(base, comp) {
const result = compareVersion(base, comp);
return result > 0 || result === 0;
}
function lt(base, comp) {
return compareVersion(base, comp) < 0;
}
function lte(base, comp) {
const result = compareVersion(base, comp);
return result < 0 || result === 0;
}
function toNumbers(value) {
if (Array.isArray(value)) {
return value;
} else if (typeof value === 'number') {
return [
value
];
} else if (typeof value === 'string') {
return toNumbers(parseVersion(value));
} else {
const values = [
value.major,
value.minor,
value.patch
];
const uidx = values.indexOf(undefined);
return uidx === -1 ? values : values.slice(0, uidx);
}
}
export { compareVersion, eq, gt, gte, isVersion, lt, lte, parseVersion };