Get the diff type of two semver versions: 0.0.1 0.0.2 → patch
npx @tessl/cli install tessl/npm-semver-diff@4.0.0Get the diff type of two semver versions: 0.0.1 0.0.2 → patch. This package provides a simple utility function for determining the semantic version difference type between two semver versions.
Note: This package is built on top of the semver library and uses its parsing and comparison logic.
npm install semver-diffimport semverDiff from 'semver-diff';With TypeScript type definitions:
import semverDiff, { Difference } from 'semver-diff';For CommonJS:
const semverDiff = require('semver-diff');import semverDiff from 'semver-diff';
// Basic version comparisons
semverDiff('1.1.1', '1.1.2');
//=> 'patch'
semverDiff('0.0.1', '1.0.0');
//=> 'major'
semverDiff('0.0.1', '0.1.0');
//=> 'minor'
// Returns undefined if versions are identical or second is lower
semverDiff('0.0.1', '0.0.1');
//=> undefined
semverDiff('0.0.2', '0.0.1');
//=> undefinedDetermines the type of difference between two semantic version strings.
/**
* Get the diff type of two semver versions
* @param versionA - First version string
* @param versionB - Second version string
* @returns The difference type between versions, or undefined if identical or second is lower
*/
function semverDiff(versionA: string, versionB: string): Difference | undefined;Parameters:
versionA (string): First version to compareversionB (string): Second version to compareReturns: Difference | undefined
versionB is higher than versionAundefined if versions are identical or versionB is lower than versionAUsage Examples:
import semverDiff from 'semver-diff';
// Major version changes
semverDiff('0.0.1', '1.0.0'); //=> 'major'
semverDiff('0.0.1-foo', '1.0.0'); //=> 'premajor'
// Minor version changes
semverDiff('0.0.1', '0.1.0'); //=> 'minor'
semverDiff('0.0.1-foo', '0.1.0'); //=> 'preminor'
// Patch version changes
semverDiff('0.0.1', '0.0.2'); //=> 'patch'
semverDiff('1.1.1-foo', '1.1.2'); //=> 'prepatch'
// Prerelease changes
semverDiff('0.0.1-foo', '0.0.1-foo.bar'); //=> 'prerelease'
// Build metadata changes
semverDiff('0.1.0', '0.1.0+foo'); //=> 'build'
semverDiff('0.0.1+1', '0.0.1+2'); //=> 'build'
// Complex build metadata comparison behavior
semverDiff('0.0.1+0', '0.0.1'); //=> undefined (build to no-build)
semverDiff('0.0.1+2', '0.0.1+2'); //=> undefined (identical)
semverDiff('0.0.1+3', '0.0.1+2'); //=> undefined (build metadata downgrade)
semverDiff('0.0.1+2', '0.0.1+2.0'); //=> 'build'
semverDiff('0.0.1+2.0', '0.0.1+2'); //=> undefined (downgrade)
semverDiff('0.0.1+2.a', '0.0.1+2.0'); //=> undefined (downgrade)
semverDiff('0.0.1+2.0', '0.0.1+2.a'); //=> 'build'
// No difference cases
semverDiff('0.0.1', '0.0.1'); //=> undefined
semverDiff('0.0.2', '0.0.1'); //=> undefined (downgrade)/**
* Union type defining all possible semver difference types
*/
type Difference =
| 'major' // Major version increase (1.0.0 → 2.0.0)
| 'premajor' // Major version increase from prerelease (1.0.0-alpha → 2.0.0)
| 'minor' // Minor version increase (1.0.0 → 1.1.0)
| 'preminor' // Minor version increase from prerelease (1.0.0-alpha → 1.1.0)
| 'patch' // Patch version increase (1.0.0 → 1.0.1)
| 'prepatch' // Patch version increase from prerelease (1.0.0-alpha → 1.0.1)
| 'prerelease' // Prerelease version change (1.0.0-alpha → 1.0.0-beta)
| 'build'; // Build metadata change (1.0.0 → 1.0.0+build.1)