Skip to content

Latest commit

 

History

66 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

vers-rs

Build crates.io npm

A Rust library (with WASM support) for parsing, validating, and checking version range specifiers.

This library implements the version range specifier (vers) format as described in the vers-spec.

Usage

use vers_rs::schemes::semver::*;
use vers_rs::{parse, VersVersionRange};
use vers_rs::range::VersionRange;

// Parse a version range specifier with an explicit type
let range: VersVersionRange<SemVer> = "vers:npm/>=1.0.0|<2.0.0".parse().unwrap();

// Parse a version range specifier with dynamic dispatch
let dynamic_range = parse("vers:npm/>=1.0.0|<2.0.0").unwrap();

// Check if a version is within the range
assert!(range.contains("1.5.0".parse().unwrap()).unwrap());
assert!(!range.contains("2.0.0".parse().unwrap()).unwrap());

assert!(dynamic_range.contains("1.5.0".to_string()).unwrap());
assert!(!dynamic_range.contains("2.0.0".to_string()).unwrap());

Development

Testing

Native tests run with the usual cargo test.

WASM-specific tests (using #[wasm_bindgen_test] in src/wasm.rs) only run when targeting wasm32-unknown-unknown, and are best run with wasm-pack, which takes care of installing a matching wasm-bindgen CLI version automatically:

rustup target add wasm32-unknown-unknown
cargo install wasm-pack
wasm-pack test --node --features wasm

Node.js must be available on PATH for the --node runner. Use --headless --chrome or --headless --firefox instead to run in a headless browser.

Features

  • Parse version range specifiers in the format vers:<versioning-scheme>/<version-constraint>|<version-constraint>|...
  • Validate version range specifiers according to the rules in the specification
  • Normalize and simplify version range specifiers
  • Check if a version is within a specified range
  • Support for different versioning schemes (npm/semver, pypi, maven, deb, etc.)
  • Dynamic dispatch wrapper that automatically detects version schemes

TODO: Future Improvements

  • Version Comparison: Implement proper version comparison for different versioning schemes:

    • PEP440 for Python/PyPI
    • Maven versioning rules
    • Debian versioning rules
    • RubyGems versioning rules
  • Normalization: Improve the normalization algorithm:

    • Use proper version comparison for sorting
    • Handle more edge cases
    • Optimize for better performance
  • Validation: Enhance validation:

    • Validate version formats for different versioning schemes
    • Add more detailed error messages
    • Make sort order validation a hard requirement
  • Error Handling: Improve error handling:

    • Add more specific error types
    • Provide more context in error messages
    • Consider returning errors for unknown versioning schemes

About

Implementation of the vers standard in Rust

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages