@eryx/semver Module

Semantic version parsing, comparison, and range matching.

Supported range selectors:

^ means "compatible with this version". For stable versions it allows changes below the next major version:

^1.2.3  :=  >=1.2.3 <2.0.0

For 0.x versions, compatibility is narrower because 0.x is considered unstable:

^0.2.3  :=  >=0.2.3 <0.3.0
^0.0.3  :=  >=0.0.3 <0.0.4

~ means "approximately this version". It allows patch updates within the same minor version:

~1.2.3  :=  >=1.2.3 <1.3.0

Summary

Functions

semver.satisfies(version: Version | string, selector: Range | string)boolean

API Reference

Functions

semver.parse

Parse a SemVer string.

semver.parse(source: string)Version

semver.tryParse

Parse a SemVer string, returning nil instead of raising on invalid input.

semver.tryParse(source: string)Version?

semver.formatRange

Return a normalized SemVer range string.

semver.formatRange(range: Range)string

semver.format

Return a normalized SemVer string.

semver.format(version: Version | string)string

semver.compare

Compare two versions.

Returns -1 when a < b, 1 when a > b, and 0 when they have equal precedence. Build metadata is ignored.

semver.compare(a: Version | string, b: Version | string)number

semver.equals

semver.equals(a: Version | string, b: Version | string)boolean

semver.lessThan

semver.lessThan(a: Version | string, b: Version | string)boolean

semver.lessThanOrEqual

semver.lessThanOrEqual(a: Version | string, b: Version | string)boolean

semver.greaterThan

semver.greaterThan(a: Version | string, b: Version | string)boolean

semver.greaterThanOrEqual

semver.greaterThanOrEqual(a: Version | string, b: Version | string)boolean

semver.parseRange

Parse a version range selector.

semver.parseRange(selector: string)Range

semver.satisfies

Return whether version satisfies selector.

semver.satisfies(version: Version | string, selector: Range | string)boolean

Types

Version

type Version = { major: number, minor: number, patch: number, prerelease: string?, build: string? }
major: number
minor: number
patch: number
prerelease: string?
build: string?

ComparatorOp

type ComparatorOp = "=" | "<" | "<=" | ">" | ">="

Comparator

type Comparator = { op: ComparatorOp, version: Version }
version: Version

Range

type Range = { sets: { { Comparator } } }
sets: { { Comparator } }