Skip to content

feat!: reduce the public apis#18

Merged
ryuapp merged 4 commits intomainfrom
feat/reduce-public-apis
Mar 28, 2026
Merged

feat!: reduce the public apis#18
ryuapp merged 4 commits intomainfrom
feat/reduce-public-apis

Conversation

@ryuapp
Copy link
Copy Markdown
Owner

@ryuapp ryuapp commented Mar 28, 2026

Why

This keeps the crate focused on:

  • parsing
  • SemVer precedence comparison
  • range satisfaction checks

Removed APIs

The following convenience APIs were removed:

  • Version::coerce()
  • Version::difference()
  • Version::increment()
  • Version::is_prerelease()
  • ReleaseType
  • Range::intersects()
  • Range::max_satisfying()
  • Range::min_satisfying()
  • Range::min_version()
  • PreRelease::parse()
  • BuildMetadata::parse()

Replacements

Version::is_prerelease()

Use the public pre_release field directly:

use js_semver::Version;

let version: Version = "1.2.3-alpha.1".parse().unwrap();
assert!(!version.pre_release.is_empty());

Range::max_satisfying() / Range::min_satisfying()

Use iterators with satisfies():

use js_semver::{Range, Version};

let range: Range = "^1.0.0".parse().unwrap();
let versions = vec![
    "1.0.0".parse::<Version>().unwrap(),
    "1.2.0".parse::<Version>().unwrap(),
    "2.0.0".parse::<Version>().unwrap(),
];

let min = versions.iter().filter(|v| range.satisfies(v)).min();
let max = versions.iter().filter(|v| range.satisfies(v)).max();

assert_eq!(min, Some(&"1.0.0".parse().unwrap()));
assert_eq!(max, Some(&"1.2.0".parse().unwrap()));

Version::coerce()

Version::parse() is now the only supported conversion path. Inputs must already be valid versions.

Before:

use js_semver::Version;

assert_eq!(Version::coerce("1.2"), Some(Version::new(1, 2, 0)));

After:

use js_semver::Version;

assert!("1.2".parse::<Version>().is_err());
assert!("1.2.0".parse::<Version>().is_ok());

Version::increment() / ReleaseType

Update version components directly:

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

let mut version: Version = "1.2.3".parse().unwrap();
version.patch += 1;
version.pre_release = PreRelease::default();
version.build = BuildMetadata::default();

assert_eq!(version.to_string(), "1.2.4");

PreRelease::parse() / BuildMetadata::parse()

Use new(...) instead:

use js_semver::{BuildMetadata, PreRelease};

let pre = PreRelease::new("alpha.1").unwrap();
let build: = BuildMetadata::new("build.42").unwrap();

assert_eq!(pre.to_string(), "alpha.1");
assert_eq!(build.to_string(), "build.42");

Range::intersects() / Range::min_version() / Version::difference()

These helpers no longer exist. If you depend on them, move the logic into your application code.

@codecov
Copy link
Copy Markdown

codecov bot commented Mar 28, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.

Files with missing lines Coverage Δ
src/error.rs 100.00% <ø> (ø)
src/range.rs 100.00% <ø> (ø)
src/version.rs 100.00% <100.00%> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@ryuapp ryuapp merged commit a19c770 into main Mar 28, 2026
5 checks passed
@ryuapp ryuapp deleted the feat/reduce-public-apis branch March 28, 2026 12:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant