CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-compare-versions

Compare semver version strings to find greater, equal or lesser.

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

ranges.mddocs/

Range Matching

Advanced range matching supporting npm semver range expressions, multiple operators, and complex range combinations.

Capabilities

satisfies Function

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');  // false

Range Types

Caret Ranges (^)

Compatible 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');   // false

Tilde Ranges (~)

Compatible 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');       // false

Comparison Operators

Standard 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'); // false

Complex Range Expressions

OR Combinations (||)

Multiple 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');          // false

AND Combinations (space-separated)

Multiple 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');  // true

Hyphen Ranges

Range 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 Version Handling

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');   // true

Wildcard Support

Wildcards 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');      // false

Error Handling

The satisfies function is designed to be robust:

  • Invalid version strings return false
  • Malformed range expressions return false
  • Empty or undefined inputs return false
satisfies('invalid', '^1.0.0');     // false
satisfies('1.0.0', 'malformed');    // false
satisfies('', '^1.0.0');            // false

docs

comparison.md

index.md

ranges.md

validation.md

tile.json