Skip to content

Latest commit

 

History

115 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

js-semver

License crates github repo codecov

A parser and evaluator for npm's flavor of Semantic Versioning, compliant with node-semver.

This crate is designed for the JavaScript ecosystem and follows node-semver (the one npm uses) parsing and range semantics. It maintains high compatibility and performance, and has zero dependencies by default.

Example

use js_semver::{BuildMetadata, PreRelease, Range, Version};

fn main() {
    let range: Range = ">=4.1.0 <5.0.0".parse().unwrap();

    // Pre-release versions are not included in the range unless explicitly specified.
    let version = Version {
        major: 4,
        minor: 1,
        patch: 0,
        pre_release: PreRelease::new("rc.1").unwrap(),
        build: BuildMetadata::default(),
    };
    assert!(!range.satisfies(&version));

    // Stable version is included in the range.
    let version: Version = "4.1.0".parse().unwrap();
    assert!(range.satisfies(&version));
}

Features

serde

Enable serde to serialize and deserialize versions and ranges:

[dependencies]
js-semver = { version = "0.4", features = ["serde"] }
serde_json = "1"

For example, read a dependency range from package.json:

use js_semver::Range;

let package: serde_json::Value =
    serde_json::from_str(r#"{"dependencies":{"react":"^19.0.0"}}"#).unwrap();
let react: Range = serde_json::from_value(package["dependencies"]["react"].clone()).unwrap();
assert!(react.satisfies(&"19.1.0".parse().unwrap()));

Range is serialized in its normalized form. Invalid strings produce a deserialization error.

no-std

std feature is enabled by default. To use js-semver in a no_std environment, disable the default features:

[dependencies]
js-semver = { version = "0.4", default-features = false }

Comparison with other crates

node-semver

node-semver crate has numerous issues, including unnecessary dependencies like miette, incompatibilities with npm's node-semver, and the fact that it is no longer actively maintained.

semver

semver crate is designed for Cargo. Therefore, it is not well-suited for the Node.js ecosystem, such as parsing versions in package.json.

License

MIT-0

This project's tests incorporate material from third parties, but they are not part of the library. For attribution and additional notice information, see NOTICE.md.

About

Parser and evaluator for npm's flavor of Semantic Versioning, compliant with node-semver

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages