| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
…lease
A tilde range like ~1.2 is documented as equivalent to the 1.2.x
x-range (>=1.2.0 <1.3.0-0). With { includePrerelease: true }, the
x-range and caret operators lower-bound at -0 (e.g. 1.2.x and ^1.2.*
become >=1.2.0-0 ...) so prereleases such as 1.2.0-rc match, but the
tilde operator did not, leaving its lower bound at >=1.2.0. This made
~1.2.* inconsistent with both its documented x-range equivalent and
the caret operator.
Apply the same -0 lower-bound suffix used by replaceCaret/replaceXRange
to the open tilde forms (~1, ~1.x, ~1.2, ~1.2.x). Fully-specified
tildes (~1.2.3) and explicit-prerelease tildes (~1.2.3-beta) keep their
exact lower bound, matching caret semantics. Default behavior (without
includePrerelease) is unchanged.
Closes npm#512
🤖 I have created a release *beep* *boop* --- ## [7.8.5](v7.8.4...v7.8.5) (2026-06-19) ### Bug Fixes * [`9c8692a`](9c8692a) [#878](#878) include prereleases in tilde range lower bound with includePrerelease (#878) (@chatman-media) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
semver 7.8.5 Created-by: HarmonybrewBot Commit-by: HarmonybrewBot Merged-by: HarmonybrewBot Description: Created by `brew bump` --- Created with `brew bump-formula-pr`.<details> <summary>release notes</summary> <pre>## [7.8.5](npm/node-semver@v7.8.4...v7.8.5) (2026-06-19) ### Bug Fixes * [`9c8692a`](npm/node-semver@9c8692a) [#878](npm/node-semver#878) include prereleases in tilde range lower bound with includePrerelease (#878) (@chatman-media)</pre> <p>View the full release notes at <a href="https://github.com/npm/node-semver/releases/tag/v7.8.5">https://github.com/npm/node-semver/releases/tag/v7.8.5</a>.</p> </details> <hr> See merge request: Harmonybrew/homebrew-core!11990
| Back | FazBrowse Home | New Git URL |
Closes #512
Problem
A tilde range like `~1.2` is documented in the README as equivalent to the `1.2.x` x-range:
With `{ includePrerelease: true }`, both the x-range and the caret operator lower-bound their open forms at `-0` (the lowest possible prerelease) so that prereleases like `1.2.0-rc` match. The tilde operator did not, leaving its lower bound at `>=1.2.0`:
This makes `~1.2.*` inconsistent with both its documented x-range equivalent and the caret operator. Reported in #512 (and the same root cause as #510 / #736 discussion around tilde + prerelease).
Fix
`replaceCaret` and `replaceXRange` already compute a lower-bound suffix:
and apply it to their open forms. `replaceTilde` was the only one of the three that did not. This change applies the same suffix to the open tilde forms (`~1`, `~1.x`, `~1.2`, `~1.2.x`).
After the fix, `~1.2.` desugars to `>=1.2.0-0 <1.3.0-0` — identical to the `1.2.` x-range it is documented to equal.
Scope / what is intentionally unchanged
Tests
Added failing-then-passing fixtures:
Full suite (`npm test`) and `eslint` pass.