Compare semver version strings to find greater, equal or lesser.
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Advanced range matching supporting npm semver range expressions, multiple operators, and complex range combinations.
Determines if a version satisfies an npm-style semver range expression.
/**
* Match npm semver version range.
* @param version Version number to match
* @param range Range pattern for version
* @returns `true` if the version number is within the range, `false` otherwise.
*/
function satisfies(version: string, range: string): boolean;Usage Examples:
import { satisfies } from "compare-versions";
// Caret ranges (compatible within same major version)
satisfies('1.1.0', '^1.0.0'); // true (1.1.0 >= 1.0.0 < 2.0.0)
satisfies('2.0.0', '^1.0.0'); // false (2.0.0 >= 2.0.0)
satisfies('1.0.5', '^1.0.0'); // true
// Tilde ranges (compatible within same minor version)
satisfies('1.1.0', '~1.0.0'); // false (1.1.0 not in 1.0.x range)
satisfies('1.0.5', '~1.0.0'); // true (1.0.5 >= 1.0.0 < 1.1.0)
satisfies('1.0.0', '~1.0.0'); // true
// Exact comparison
satisfies('10.0.1', '=10.0.1'); // true
satisfies('10.0.2', '=10.0.1'); // falseCompatible within the same major version. Allows patch and minor updates.
// ^1.2.3 means >=1.2.3 <2.0.0
satisfies('1.2.3', '^1.2.3'); // true
satisfies('1.3.0', '^1.2.3'); // true
satisfies('1.9.9', '^1.2.3'); // true
satisfies('2.0.0', '^1.2.3'); // false
// ^0.2.3 means >=0.2.3 <0.3.0 (special case for 0.x)
satisfies('0.2.4', '^0.2.3'); // true
satisfies('0.3.0', '^0.2.3'); // false
// ^0.0.3 means >=0.0.3 <0.0.4 (special case for 0.0.x)
satisfies('0.0.3', '^0.0.3'); // true
satisfies('0.0.4', '^0.0.3'); // falseCompatible within the same minor version. Allows only patch updates.
// ~1.2.3 means >=1.2.3 <1.3.0
satisfies('1.2.3', '~1.2.3'); // true
satisfies('1.2.9', '~1.2.3'); // true
satisfies('1.3.0', '~1.2.3'); // false
// ~1.2 means >=1.2.0 <1.3.0
satisfies('1.2.0', '~1.2'); // true
satisfies('1.2.9', '~1.2'); // true
satisfies('1.3.0', '~1.2'); // false
// ~1 means >=1.0.0 <2.0.0
satisfies('1.0.0', '~1'); // true
satisfies('1.9.9', '~1'); // true
satisfies('2.0.0', '~1'); // falseStandard comparison operators for explicit version constraints.
// Greater than
satisfies('10.1.8', '>10.0.4'); // true
satisfies('10.0.4', '>10.0.4'); // false
// Greater than or equal
satisfies('10.0.4', '>=10.0.4'); // true
satisfies('10.1.0', '>=10.0.4'); // true
// Less than
satisfies('10.1.1', '<10.2.2'); // true
satisfies('10.2.2', '<10.2.2'); // false
// Less than or equal
satisfies('10.1.1', '<=10.2.2'); // true
satisfies('10.2.2', '<=10.2.2'); // true
// Not equal
satisfies('10.1.1', '!=10.2.2'); // true
satisfies('10.2.2', '!=10.2.2'); // falseMultiple range options separated by || (logical OR).
// Either exact match OR caret range
satisfies('1.2.7', '1.2.7 || >=1.2.9 <2.0.0'); // true (matches 1.2.7)
satisfies('1.2.8', '1.2.7 || >=1.2.9 <2.0.0'); // false (doesn't match either)
satisfies('1.3.0', '1.2.7 || >=1.2.9 <2.0.0'); // true (matches >=1.2.9 <2.0.0)
// Multiple caret ranges
satisfies('1.4.6', '^1.2.0 || ^2.0.0'); // true
satisfies('2.1.0', '^1.2.0 || ^2.0.0'); // true
satisfies('3.0.0', '^1.2.0 || ^2.0.0'); // falseMultiple constraints that must all be satisfied (logical AND).
// Must satisfy both constraints
satisfies('1.2.5', '>=1.2.0 <1.3.0'); // true
satisfies('1.3.0', '>=1.2.0 <1.3.0'); // false (fails <1.3.0)
satisfies('1.1.9', '>=1.2.0 <1.3.0'); // false (fails >=1.2.0)
// Complex AND with multiple operators
satisfies('1.2.5', '>1.0.0 >=1.2.0 <2.0.0'); // trueRange between two versions (inclusive).
// 1.2.3 - 2.3.4 means >=1.2.3 <=2.3.4
satisfies('1.2.3', '1.2.3 - 2.3.4'); // true
satisfies('1.5.0', '1.2.3 - 2.3.4'); // true
satisfies('2.3.4', '1.2.3 - 2.3.4'); // true
satisfies('2.3.5', '1.2.3 - 2.3.4'); // false
// Partial versions are completed
satisfies('1.2.0', '1.2 - 1.3'); // true (equivalent to 1.2.0 - 1.3.x)Pre-release versions have special handling in range matching:
// Pre-release versions must be explicitly included in ranges
satisfies('1.2.3-alpha', '^1.2.3'); // false
satisfies('1.2.3-alpha', '^1.2.3-alpha'); // true
// Pre-release versions in ranges only match pre-release versions
satisfies('1.2.3', '^1.2.3-alpha'); // false
satisfies('1.2.4-beta', '^1.2.3-alpha'); // trueWildcards in ranges are supported for flexibility:
// x and * are treated as wildcards
satisfies('1.0.0', '1.x'); // true
satisfies('1.5.2', '1.*'); // true
satisfies('2.0.0', '1.x'); // falseThe satisfies function is designed to be robust:
falsefalsefalsesatisfies('invalid', '^1.0.0'); // false
satisfies('1.0.0', 'malformed'); // false
satisfies('', '^1.0.0'); // false