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.
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());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 wasmNode.js must be available on PATH for the --node runner. Use
--headless --chrome or --headless --firefox instead to run in a headless
browser.
- 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
-
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