or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

comparison.mdindex.mdranges.mdvalidation.md
tile.json

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