Seed CLISeed CLI

Semver

Semantic versioning utilities for parsing, comparing, and bumping versions.

bun add @seedcli/semver

The semver module wraps the semver npm package with a clean API for version validation, comparison, and manipulation.

Validation

seed.semver.valid('1.2.3')     // '1.2.3'
seed.semver.valid('not.a.ver') // null

Returns the cleaned version string if valid, or null if invalid.

Cleaning

Strip leading v or extra whitespace:

seed.semver.clean('  v1.2.3  ')  // '1.2.3'
seed.semver.clean('invalid')     // null

Coercion

Attempt to coerce a loose string into a valid semver:

seed.semver.coerce('v1')      // '1.0.0'
seed.semver.coerce('3.2')     // '3.2.0'
seed.semver.coerce('nope')    // null

Comparison

seed.semver.gt('2.0.0', '1.0.0')   // true
seed.semver.gte('1.0.0', '1.0.0')  // true
seed.semver.lt('1.0.0', '2.0.0')   // true
seed.semver.lte('1.0.0', '1.0.0')  // true
seed.semver.eq('1.0.0', '1.0.0')   // true

seed.semver.compare('1.0.0', '2.0.0')  // -1
seed.semver.compare('2.0.0', '1.0.0')  // 1
seed.semver.compare('1.0.0', '1.0.0')  // 0

Range Satisfaction

seed.semver.satisfies('1.2.3', '>=1.0.0')        // true
seed.semver.satisfies('1.2.3', '>=1.0.0 <2.0.0') // true
seed.semver.satisfies('2.0.0', '^1.0.0')          // false

Version Parts

seed.semver.major('1.2.3')       // 1
seed.semver.minor('1.2.3')       // 2
seed.semver.patch('1.2.3')       // 3
seed.semver.prerelease('1.2.3-beta.1')  // ['beta', 1]
seed.semver.prerelease('1.2.3')         // null

Bumping Versions

seed.semver.bump('1.2.3', 'major')      // '2.0.0'
seed.semver.bump('1.2.3', 'minor')      // '1.3.0'
seed.semver.bump('1.2.3', 'patch')      // '1.2.4'
seed.semver.bump('1.2.3', 'premajor')   // '2.0.0-0'
seed.semver.bump('1.2.3', 'preminor')   // '1.3.0-0'
seed.semver.bump('1.2.3', 'prepatch')   // '1.2.4-0'
seed.semver.bump('1.2.3-0', 'prerelease') // '1.2.3-1'

Sorting

const sorted = seed.semver.sort(['3.0.0', '1.0.0', '2.0.0'])
// ['1.0.0', '2.0.0', '3.0.0']

Finding Best Match

const best = seed.semver.maxSatisfying(
  ['1.0.0', '1.1.0', '1.2.0', '2.0.0'],
  '^1.0.0'
)
// '1.2.0'

Diff

Determine the release type between two versions:

seed.semver.diff('1.0.0', '2.0.0')     // 'major'
seed.semver.diff('1.0.0', '1.1.0')     // 'minor'
seed.semver.diff('1.0.0', '1.0.1')     // 'patch'
seed.semver.diff('1.0.0', '1.0.0')     // null

API Reference

FunctionSignatureDescription
valid(version: string) => string | nullReturn cleaned version or null
clean(version: string) => string | nullClean version string
coerce(version: string) => string | nullCoerce to valid semver
satisfies(version: string, range: string) => booleanCheck range satisfaction
gt(a: string, b: string) => booleanGreater than
gte(a: string, b: string) => booleanGreater than or equal
lt(a: string, b: string) => booleanLess than
lte(a: string, b: string) => booleanLess than or equal
eq(a: string, b: string) => booleanEqual
compare(a: string, b: string) => -1 | 0 | 1Compare two versions
diff(a: string, b: string) => ReleaseType | nullGet release type between versions
bump(version: string, release: ReleaseType, identifier?: string) => string | nullBump version
major(version: string) => numberGet major version
minor(version: string) => numberGet minor version
patch(version: string) => numberGet patch version
prerelease(version: string) => (string | number)[] | nullGet prerelease identifiers
sort(versions: string[]) => string[]Sort versions ascending
maxSatisfying(versions: string[], range: string) => string | nullFind best match

On this page