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