Module: services/version

Utilities relating to generating badges relating to version numbers. Includes comparing versions to determine the latest, and determining the color to use for the badge based on whether the version is a stable release. For utilities specific to PHP version ranges, see php-version.js.

Source:

Methods

(inner) compareDottedVersion(v1, v2) → {number}

Compares two strings representing version numbers lexicographically and returns an integer value.

Parameters:
Name Type Description
v1 string

The first version to compare

v2 string

The second version to compare

Source:
Returns:

-1 if v1 is smaller than v2, 1 if v1 is larger than v2, 0 if v1 and v2 are equal

Type
number
Example
compareDottedVersion('1.2.3', '1.2.4') // returns -1 because numeric part of first version is smaller than the numeric part of second version.

(inner) latest(versions, optionsopt) → {string|undefined}

Finds the largest version number lexicographically or semantically from an array of strings representing version numbers and returns it as a string. latest() is looser than latestMaybeSemVer() as it will attempt to make sense of anything, falling back to alphabetic sorting. We should ideally prefer latest() over latestMaybeSemVer() when adding version badges.

Parameters:
Name Type Attributes Description
versions Array.<string>

The array of version numbers to compare

options object <optional>

An optional object that contains additional options

Properties
Name Type Attributes Default Description
pre boolean <optional>
false

Whether to include pre-release versions or not, defaults to false

Source:
Returns:

The largest version number as a string, or undefined if the array is empty

Type
string | undefined
Example
latest(['1.2.3', '1.2.4', '1.3', '2.0'], { pre: false }) // returns '2.0' because it is the largest version number and pre-release versions are excluded.
latest(['1.2.3', '1.2.4', '1.3', '2.0'], { pre: true }) // returns '2.0' because pre-release versions are included but none of them are present in the array.
latest(['1.2.3', '1.2.4', '1.3-alpha', '2.0-beta'], { pre: false }) // returns '1.2.4' because pre-release versions are excluded and it is the largest version number among the remaining ones.
latest(['1.2.3', '1.2.4', '1.3-alpha', '2.0-beta'], { pre: true }) // returns '2.0-beta' because pre-release versions are included and it is the largest version number.

(inner) latestDottedVersion(versions) → {string|undefined}

Finds the largest version number lexicographically from an array of strings representing version numbers and returns it as a string.

Parameters:
Name Type Description
versions Array.<string>

The array of version numbers to compare

Source:
Returns:

The largest version number as a string, or undefined if the array is empty

Type
string | undefined
Example
latestDottedVersion(['1.2.3', '1.2.4', '1.3', '2.0']) // returns '2.0' because it is the largest version number in the array.
latestDottedVersion([]) // returns undefined because the array is empty.

(inner) latestMaybeSemVer(versions, pre) → {string|undefined}

Finds the largest version number lexicographically or semantically from an array of strings representing version numbers and returns it as a string. latestMaybeSemVer() is used for versions that match some kind of dotted version pattern.

Parameters:
Name Type Description
versions Array.<string>

The array of version numbers to compare

pre boolean

Whether to include pre-release versions or not

Source:
Returns:

The largest version number as a string, or undefined if the array is empty

Type
string | undefined
Example
latestMaybeSemVer(['1.2.3', '1.2.4', '1.3', '2.0'], false) // returns '2.0' because it is the largest version number and pre-release versions are excluded.
latestMaybeSemVer(['1.2.3', '1.2.4', '1.3', '2.0'], true) // returns '2.0' because pre-release versions are included but none of them are present in the array.
latestMaybeSemVer(['1.2.3', '1.2.4', '1.3-alpha', '2.0-beta'], false) // returns '1.2.4' because pre-release versions are excluded and it is the largest version number among the remaining ones.
latestMaybeSemVer(['1.2.3', '1.2.4', '1.3-alpha', '2.0-beta'], true) // returns '2.0-beta' because pre-release versions are included and it is the largest version number.

(inner) listCompare(a, b) → {number}

Compares two arrays of numbers lexicographically and returns an integer value.

Parameters:
Name Type Description
a Array.<number>

The first array to compare

b Array.<number>

The second array to compare

Source:
Returns:

-1 if a is smaller than b, 1 if a is larger than b, 0 if a and b are equal

Type
number
Example
listCompare([1, 2, 3], [1, 2, 4]) // returns -1 because the third element of the first array is smaller than the third element of the second array.

(inner) rangeStart(v) → {string}

Returns the start of the range that matches a given version string.

Parameters:
Name Type Description
v string

A version string that follows the Semantic Versioning specification. The function will accept and coerce invalid versions into valid ones.

Source:
Throws:

If v is an invalid semver range

Type
TypeError
Returns:

The start of the range that matches the given version string, or null if no match is found.

Type
string
Example
rangeStart('^1.2.3') // returns '1.2.3'
rangeStart('>=2.0.0') // returns '2.0.0'
rangeStart('1.x || >=2.5.0 || 5.0.0 - 7.2.3') // returns '1.0.0'
rangeStart('1.2.x') // returns '1.2.0'
rangeStart('1.2.*') // returns '1.2.0-0'
rangeStart(null) // throws TypeError: Invalid Version: null
rangeStart('') // throws TypeError: Invalid Version:

(inner) renderVersionBadge(options) → {object}

Creates a badge object that displays information about a version number. It should usually be used to output a version badge.

Parameters:
Name Type Description
options object

An object that contains the options for the badge

Properties
Name Type Attributes Default Description
version string

The version number to display on the badge

tag string <optional>

The tag to display on the badge, such as "alpha" or "beta"

defaultLabel string <optional>

The default label to display on the badge, such as "npm" or "github"

prefix string <optional>

The prefix to display on the message, such as ">=", "v", overrides the default behavior of using addv

suffix string <optional>

The suffix to display on the message, such as "tested"

versionFormatter function <optional>
versionColor

The function to use to format the color of the badge based on the version number

isPrerelease boolean <optional>

Whether the version is explicitly marked as a prerelease by upstream API

Source:
Returns:

A badge object that has three properties: label, message, and color

Type
object
Example
renderVersionBadge({version: '1.2.3', tag: 'alpha', defaultLabel: 'npm'}) // returns {label: 'npm@alpha', message: 'v1.2.3', color: 'orange'} because
it uses the tag and the defaultLabel to create the label, the addv function to add a 'v' prefix to the version in message,
and the versionColor function to assign an orange color based on the version.

(inner) slice(v, releaseType) → {string|null}

Slices the specified number of dotted parts from the given semver version.

Parameters:
Name Type Description
v string

The semver version to slice

releaseType string

The release type to slice up to. Can be one of "major", "minor", or "patch"

Source:
Returns:

The sliced version as a string, or null if the version is not valid

Type
string | null
Example
slice('2.4.7', 'minor') // returns '2.4' because it slices the version string up to the minor component.
slice('2.4.7-alpha', 'patch') // returns '2.4.7-alpha' because it slices the version string up to the patch component and preserves the prerelease component.
slice('2.4', 'patch') // returns null because the version string is not valid according to semver rules.