https://github.com/unraid/custom-semver
Custom Semver Parser for Ordering Hotfix Versions of Unraid
https://github.com/unraid/custom-semver
Last synced: 2 months ago
JSON representation
Custom Semver Parser for Ordering Hotfix Versions of Unraid
- Host: GitHub
- URL: https://github.com/unraid/custom-semver
- Owner: unraid
- Created: 2025-05-05T15:13:54.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2026-04-01T21:12:59.000Z (3 months ago)
- Last Synced: 2026-04-02T08:52:02.318Z (2 months ago)
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/@unraid/custom-semver
- Size: 82 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
# Custom SemVer
A library for semantic versioning with special handling for patch build tags.
## Installation
```bash
npm install custom-semver
# or
yarn add custom-semver
# or
pnpm add custom-semver
```
### Peer Dependencies
This package has the following peer dependencies:
```json
{
"semver": "^7.0.0"
}
```
Make sure they are installed in your project.
## Features
This library extends standard semver comparison to handle build tags in a special way:
- Normal semver comparison is performed first. If versions are equal, then build tags are compared.
- If at least one version has a build tag containing "patch", custom comparison is used:
- Build tags are normalized by adding zeros until they have at least 3 parts (like 1.0.0) for proper comparison.
- A version with a patch build tag is considered greater than a version without a build tag.
- If neither version has a build tag containing "patch", standard semver comparison is used.
## Usage
```typescript
import { customSemverCompare, gt, lt, eq, gte, lte, valid } from 'custom-semver';
// Compare versions
customSemverCompare('1.0.0', '2.0.0'); // returns -1 (1.0.0 < 2.0.0)
customSemverCompare('7.0.0+patch.1', '7.0.0+patch.10'); // returns -1 (7.0.0+patch.1 < 7.0.0+patch.10)
customSemverCompare('7.0.0+patch.1', '7.0.0+patch.1.0'); // returns 0 (they are equal)
// Check if one version is greater than another
gt('2.0.0', '1.0.0'); // returns true
gt('7.0.0+patch.10', '7.0.0+patch.1'); // returns true
// Check if one version is less than another
lt('1.0.0', '2.0.0'); // returns true
lt('7.0.0+patch.1', '7.0.0+patch.10'); // returns true
// Check if versions are equal
eq('1.0.0', '1.0.0'); // returns true
eq('7.0.0+patch.1', '7.0.0+patch.1.0'); // returns true
// Check if one version is greater than or equal to another
gte('2.0.0', '1.0.0'); // returns true
gte('1.0.0', '1.0.0'); // returns true
gte('7.0.0+patch.10', '7.0.0+patch.1'); // returns true
// Check if one version is less than or equal to another
lte('1.0.0', '2.0.0'); // returns true
lte('1.0.0', '1.0.0'); // returns true
lte('7.0.0+patch.1', '7.0.0+patch.10'); // returns true
// Check if a version string is valid
valid('1.0.0'); // returns '1.0.0'
valid('invalid'); // returns null
```
## Examples
```typescript
// Handling patch build tags
customSemverCompare('7.0.0+patch.1', '7.0.0+patch.10'); // -1
customSemverCompare('7.0.0+patch.10', '7.0.0+patch.1'); // 1
// Comparing versions with and without build tags
customSemverCompare('7.0.0', '7.0.0+patch.1'); // -1
customSemverCompare('7.0.0+patch.1', '7.0.0'); // 1
// Standard semver comparison for non-patch build tags
customSemverCompare('7.0.0+alpha', '7.0.0+beta'); // 0
```
## License
MIT
## Code Coverage
[](https://codecov.io/gh/unraid/custom-semver)
This project uses [Codecov](https://codecov.io/) for code coverage reporting. The badge above shows the current test coverage status.