or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

index.md
tile.json

tessl/npm-semver-diff

Get the diff type of two semver versions: 0.0.1 0.0.2 → patch

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/semver-diff@4.0.x

To install, run

npx @tessl/cli install tessl/npm-semver-diff@4.0.0

index.mddocs/

semver-diff

Get the diff type of two semver versions: 0.0.1 0.0.2patch. 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.

Package Information

  • Package Name: semver-diff
  • Package Type: npm
  • Language: JavaScript (ES Module with TypeScript definitions)
  • Installation: npm install semver-diff
  • Node.js: Requires Node.js >=12

Core Imports

import semverDiff from 'semver-diff';

With TypeScript type definitions:

import semverDiff, { Difference } from 'semver-diff';

For CommonJS:

const semverDiff = require('semver-diff');

Basic Usage

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');
//=> undefined

Capabilities

Version Difference Detection

Determines 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 compare
  • versionB (string): Second version to compare

Returns: Difference | undefined

  • Returns the difference type if versionB is higher than versionA
  • Returns undefined if versions are identical or versionB is lower than versionA
  • For build metadata: Uses semver build comparison logic where build metadata is compared lexically

Usage 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)

Types

/**
 * 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)