compare-versions
Advanced tools
Comparing version
@@ -8,3 +8,3 @@ /** | ||
*/ | ||
export declare const compareVersions: (v1: string, v2: string) => 1 | -1 | 0; | ||
export declare const compareVersions: (v1: string, v2: string) => 0 | 1 | -1; | ||
/** | ||
@@ -27,3 +27,3 @@ * Validate [semver](https://semver.org/) version strings. | ||
*/ | ||
export declare type CompareOperator = '>' | '>=' | '=' | '<' | '<='; | ||
export type CompareOperator = '>' | '>=' | '=' | '<' | '<='; | ||
/** | ||
@@ -30,0 +30,0 @@ * Compare [semver](https://semver.org/) version strings using the specified operator. |
@@ -163,5 +163,3 @@ (function (global, factory) { | ||
Object.defineProperty(exports, '__esModule', { value: true }); | ||
})); | ||
//# sourceMappingURL=index.js.map |
{ | ||
"name": "compare-versions", | ||
"version": "5.0.1", | ||
"version": "5.0.2", | ||
"description": "Compare semver version strings to find greater, equal or lesser.", | ||
@@ -37,6 +37,6 @@ "repository": { | ||
"devDependencies": { | ||
"@types/mocha": "^9.1.0", | ||
"@types/mocha": "^10.0.1", | ||
"c8": "^7.10.0", | ||
"mocha": "^10.0.0", | ||
"rollup": "^2.78.1", | ||
"rollup": "^3.7.4", | ||
"ts-node": "^10.7.0", | ||
@@ -43,0 +43,0 @@ "typescript": "^4.6.3" |
@@ -103,10 +103,27 @@ /** | ||
// else range of either "~" or "^" is assumed | ||
const [v1, v2, v3] = validateAndParse(version); | ||
const [r1, r2, r3] = validateAndParse(range); | ||
if (compareStrings(v1, r1) !== 0) return false; | ||
if (op === '^') { | ||
return compareSegments([v2, v3], [r2, r3]) >= 0; | ||
const [v1, v2, v3, , vp] = validateAndParse(version); | ||
const [r1, r2, r3, , rp] = validateAndParse(range); | ||
const v = [v1, v2, v3]; | ||
const r = [r1, r2 ?? 'x', r3 ?? 'x']; | ||
// validate pre-release | ||
if (rp) { | ||
if (!vp) return false; | ||
if (compareSegments(v, r) !== 0) return false; | ||
if (compareSegments(vp.split('.'), rp.split('.')) === -1) return false; | ||
} | ||
if (compareStrings(v2, r2) !== 0) return false; | ||
return compareStrings(v3, r3) >= 0; | ||
// first non-zero number | ||
const nonZero = r.findIndex((v) => v !== '0') + 1; | ||
// pointer to where segments can be >= | ||
const i = op === '~' ? 2 : nonZero > 1 ? nonZero : 1; | ||
// before pointer must be equal | ||
if (compareSegments(v.slice(0, i), r.slice(0, i)) !== 0) return false; | ||
// after pointer must be >= | ||
if (compareSegments(v.slice(i), r.slice(i)) === -1) return false; | ||
return true; | ||
}; | ||
@@ -150,4 +167,4 @@ | ||
const compareSegments = ( | ||
a: string | RegExpMatchArray, | ||
b: string | RegExpMatchArray | ||
a: string | string[] | RegExpMatchArray, | ||
b: string | string[] | RegExpMatchArray | ||
) => { | ||
@@ -154,0 +171,0 @@ for (let i = 0; i < Math.max(a.length, b.length); i++) { |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
40440
1.01%538
1.89%