Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

balena-semver

balena-io-modules60.4kApache-2.03.0.6TypeScript support: included

Balena specific semver utility methods

balena, balena.io, resin, resin.io, semver

readme

balena-semver

Balena specific semver utility methods

Build Status

Role

The intention of this module is to provide a collection of balena specific semver utility methods.

THIS MODULE IS LOW LEVEL AND IS NOT MEANT TO BE USED BY END USERS DIRECTLY.

Unless you know what you're doing, use the Balena SDK instead.

Installation

Install balena-semver by running:

$ npm install --save balena-semver

Documentation

Functions

compare(versionA, versionB)number

Accepts string or null values and compares them, returning a number indicating sort order. Values are parsed for valid semver strings. Sorts an array of versions in ascending order if passed to Array.sort().

rcompare(versionA, versionB)number

The reverse of .compare(). Accepts string or null values and compares them, returning a number indicating sort order. Values are parsed for valid semver strings. Sorts an array of versions in descending order when passed to Array.sort().

major(version)number | null

Returns the major version number in a semver string. If the version is not a valid semver string, or a valid semver string cannot be found, it returns null.

prerelease(version)Array.<(string|number)> | null

Returns an array of prerelease components, or null if none exist

gte(versionA, versionB)boolean

Returns true if versionA is greater than or equal to versionB. Valid semver versions are always weighted above non semver strings. Non-semver strings are compared alphabetically.

gt(versionA, versionB)boolean

Returns true if versionA is greater than versionB. Valid semver versions are always weighted above non semver strings. Non-semver strings are compared alphabetically.

lte(versionA, versionB)boolean

Returns true if versionA is less than or equal to versionB. Valid semver versions are always weighted above non semver strings. Non-semver strings are compared alphabetically.

lt(versionA, versionB)boolean

Returns true if versionA is less than versionB. Valid semver versions are always weighted above non semver strings. Non-semver strings are compared alphabetically.

satisfies(version, range)boolean

Return true if the parsed version satisfies the range. This method will always return false if the provided version doesn't contain a valid semver string.

maxSatisfying(versions, range)string | null

Return the highest version in the list that satisfies the range, or null if none of them do. If multiple versions are found that have equally high values, the last one in the array is returned. Note that only version that contain a valid semver string can satisfy a range.

parse(version)SemverObject | null

Returns an object representing the semver version. Returns null if a valid semver string can't be found.

valid(version)string | null

Return the parsed version, or null if it's not valid.

inc(version, release)string | null

Return the version incremented by the release type (major, premajor, minor, preminor, patch, prepatch, or prerelease), or null if it's not valid.

compare(versionA, versionB) ⇒ number

Accepts string or null values and compares them, returning a number indicating sort order. Values are parsed for valid semver strings. Sorts an array of versions in ascending order if passed to Array.sort().

Kind: global function
Summary: Compare order of versions
Returns: number - Returns 0 if versionA == versionB, or 1 if versionA is greater, or -1 if versionB is greater. Null values are sorted before invalid semver values, and invalid semver values are sorted before valid semver values If both values are invalid semver values, then the values are compared alphabetically.
Access: public

Param Type Description
versionA string | null | undefined The first version to compare
versionB string | null | undefined The second version to compare

Example
should not throw when provided with a version.

versions_1.versions.forEach(function (version) {
    (0, chai.expect)(function () { return semver.compare(version, version); }).to.not.throw();
});

should correctly sort lists of versions.

(0, chai.expect)(versions_1.versions.slice().sort(semver.compare)).to.eql(versions_1.versions);

should correctly compare versions with leading 0s.

(0, chai.expect)(semver.compare('18.04.1', '18.4.1')).to.equal(0);
(0, chai.expect)(semver.compare('18.04.2', '18.4.1')).to.equal(1);
(0, chai.expect)(semver.compare('18.04.1', '18.4.2')).to.equal(-1);

should correctly compare valid semver values.

(0, chai.expect)(semver.compare('2.0.5', '1.16.0')).to.equal(1);
(0, chai.expect)(semver.compare('2.0.5', '2.0.5')).to.equal(0);
(0, chai.expect)(semver.compare('1.16.0', '2.0.5')).to.equal(-1);

should correctly compare valid semver values to Resin formatted versions.

(0, chai.expect)(semver.compare('2.0.5', 'Resin OS v2.0.2+rev2')).to.equal(1);
(0, chai.expect)(semver.compare('1.16.0', 'Resin OS v2.0.2+rev2')).to.equal(-1);
(0, chai.expect)(semver.compare('1.16.0', 'Resin OS v1.16.0')).to.equal(0);
(0, chai.expect)(semver.compare('Resin OS 1.16.0', '2.0.2')).to.equal(-1);
(0, chai.expect)(semver.compare('Resin OS 1.16.0', '1.16.0')).to.equal(0);
(0, chai.expect)(semver.compare('Resin OS 2.0.2', '1.16.0')).to.equal(1);

should correctly compare Resin formatted versions.

(0, chai.expect)(semver.compare('Resin OS 2.0.5', 'Resin OS 2.0.2+rev2')).to.equal(1);
(0, chai.expect)(semver.compare('Resin OS 1.16.0', 'Resin OS 2.0.2 (prod)')).to.equal(-1);
(0, chai.expect)(semver.compare('Resin OS 1.16.0', 'Resin OS 1.16.0')).to.equal(0);

should correctly compare Balena formatted versions.

(0, chai.expect)(semver.compare('balenaOS 2.0.5', 'balenaOS 2.0.2+rev2')).to.equal(1);
(0, chai.expect)(semver.compare('balenaOS 1.16.0', 'balenaOS 2.0.2 (prod)')).to.equal(-1);
(0, chai.expect)(semver.compare('balenaOS 1.16.0', 'balenaOS 1.16.0')).to.equal(0);

should correctly compare Balena formatted versions to Resin formatted versions.

(0, chai.expect)(semver.compare('balenaOS 2.0.5', 'Resin OS 2.0.2+rev2')).to.equal(1);
(0, chai.expect)(semver.compare('balenaOS 1.16.0', 'Resin OS 2.0.2 (prod)')).to.equal(-1);
(0, chai.expect)(semver.compare('balenaOS 1.16.0', 'Resin OS 1.16.0')).to.equal(0);

should correctly compare Balena formatted versions with leading 0s.

(0, chai.expect)(semver.compare('balenaOS v2.0.2+rev2', 'balenaOS v2.0.2+rev02')).to.equal(0);
(0, chai.expect)(semver.compare('balenaOS v2.0.2+rev01', 'balenaOS v2.0.2+rev02')).to.equal(-1);
(0, chai.expect)(semver.compare('balenaOS v2.0.02+rev2', 'balenaOS v2.0.2+rev1')).to.equal(1);

should correctly compare invalid semver values.

(0, chai.expect)(semver.compare('Linux 14.04', 'Resin OS v2.0.2+rev2')).to.equal(-1);
(0, chai.expect)(semver.compare('Linux 14.04', 'A development version')).to.equal(1);
(0, chai.expect)(semver.compare('Version B', 'Version A')).to.equal(1);
(0, chai.expect)(semver.compare('Version A', 'Version A')).to.equal(0);

should correctly compare null values.

(0, chai.expect)(semver.compare('2.0.5', null)).to.equal(1);
(0, chai.expect)(semver.compare(null, '1.16.0')).to.equal(-1);
(0, chai.expect)(semver.compare('Resin OS 1.16.0', null)).to.equal(1);
(0, chai.expect)(semver.compare(null, 'Resin OS 1.16.0')).to.equal(-1);
(0, chai.expect)(semver.compare('Linux 14.04', null)).to.equal(1);
(0, chai.expect)(semver.compare(null, 'Linux 14.04')).to.equal(-1);
(0, chai.expect)(semver.compare(null, null)).to.equal(0);

should correctly compare undefined values.

(0, chai.expect)(semver.compare('2.0.5', undefined)).to.equal(1);
(0, chai.expect)(semver.compare(undefined, '1.16.0')).to.equal(-1);
(0, chai.expect)(semver.compare('Resin OS 1.16.0', undefined)).to.equal(1);
(0, chai.expect)(semver.compare(undefined, 'Resin OS 1.16.0')).to.equal(-1);
(0, chai.expect)(semver.compare('Linux 14.04', undefined)).to.equal(1);
(0, chai.expect)(semver.compare(undefined, 'Linux 14.04')).to.equal(-1);
(0, chai.expect)(semver.compare(undefined, undefined)).to.equal(0);

should correctly compare "rev" values.

(0, chai.expect)(semver.compare('2.0.0+rev6', '2.0.0+rev3')).to.equal(1);
(0, chai.expect)(semver.compare('Resin OS 2.0.0+rev4', 'Resin OS 2.0.0+rev3')).to.equal(1);
(0, chai.expect)(semver.compare('2.0.0+rev6', 'Resin OS 2.0.0+rev3')).to.equal(1);
(0, chai.expect)(semver.compare('2.0.0+rev2', 'Resin OS 2.0.0+rev5')).to.equal(-1);
(0, chai.expect)(semver.compare('2.0.0+rev3', '2.0.0+rev3')).to.equal(0);
(0, chai.expect)(semver.compare('2.0.0+rev1', '2.0.0+rev11')).to.equal(-1);
(0, chai.expect)(semver.compare('2.0.0+rev2', '2.0.0+rev11')).to.equal(-1);

should correctly compare ".dev" versions.

(0, chai.expect)(semver.compare('2.0.0', '2.0.0+dev')).to.equal(1);
(0, chai.expect)(semver.compare('2.0.0', '2.0.0-dev')).to.equal(1);
(0, chai.expect)(semver.compare('2.0.0', '2.0.0.dev')).to.equal(1);
(0, chai.expect)(semver.compare('2.0.0+rev6', '2.0.0+rev6.dev')).to.equal(1);
(0, chai.expect)(semver.compare('2.0.0+rev6.dev', '2.0.0+rev6')).to.equal(-1);
(0, chai.expect)(semver.compare('2.0.0+rev6.dev', '2.0.0+rev6.dev')).to.equal(0);
(0, chai.expect)(semver.compare('Resin OS 2.0.0+rev3', 'Resin OS 2.0.0+rev3.dev')).to.equal(1);
(0, chai.expect)(semver.compare('Resin OS 2.0.0+rev3.dev', 'Resin OS 2.0.0+rev3')).to.equal(-1);
(0, chai.expect)(semver.compare('Resin OS 2.0.0+rev3.dev', 'Resin OS 2.0.0+rev3.dev')).to.equal(0);
(0, chai.expect)(semver.compare('2.0.0', 'Resin OS 2.0.0.dev')).to.equal(1);
(0, chai.expect)(semver.compare('Resin OS 2.0.0.dev', '2.0.0')).to.equal(-1);
(0, chai.expect)(semver.compare('Resin OS 2.0.0.dev', '2.0.0.dev')).to.equal(0);

should correctly compare "(dev)" and "(prod)" versions without revisions.

(0, chai.expect)(semver.compare('Resin OS 2.0.0', 'Resin OS 2.0.0 (dev)')).to.equal(1);
(0, chai.expect)(semver.compare('Resin OS 2.0.0', 'Resin OS 2.0.0 (prod)')).to.equal(-1);
(0, chai.expect)(semver.compare('Resin OS 2.0.0 (dev)', 'Resin OS 2.0.0 (prod)')).to.equal(-1);
(0, chai.expect)(semver.compare('Resin OS 2.0.0', 'Resin OS 2.0.0-prod')).to.equal(1);
(0, chai.expect)(semver.compare('Resin OS 2.0.0', 'Resin OS 2.0.0.prod')).to.equal(-1);
(0, chai.expect)(semver.compare('Resin OS 2.0.0', 'Resin OS 2.0.0+prod')).to.equal(-1);
(0, chai.expect)(semver.compare('Resin OS 2.0.0 (dev)', 'Resin OS 2.0.0+prod')).to.equal(-1);
(0, chai.expect)(semver.compare('Resin OS 2.0.0.dev', 'Resin OS 2.0.0+dev')).to.equal(0);
(0, chai.expect)(semver.compare('Resin OS 2.0.0.dev', 'Resin OS 2.0.0 (dev)')).to.equal(0);
(0, chai.expect)(semver.compare('Resin OS 2.0.0+dev', 'Resin OS 2.0.0 (dev)')).to.equal(0);
(0, chai.expect)(semver.compare('Resin OS 2.0.0.prod', 'Resin OS 2.0.0+prod')).to.equal(0);
(0, chai.expect)(semver.compare('Resin OS 2.0.0.prod', 'Resin OS 2.0.0 (prod)')).to.equal(0);
(0, chai.expect)(semver.compare('Resin OS 2.0.0+prod', 'Resin OS 2.0.0 (prod)')).to.equal(0);

should correctly compare "(dev)" and "(prod)" versions of the same revision.

(0, chai.expect)(semver.compare('Resin OS 2.0.0+rev3', 'Resin OS 2.0.0+rev3 (dev)')).to.equal(1);
(0, chai.expect)(semver.compare('Resin OS 2.0.0+rev3', 'Resin OS 2.0.0+rev3 (prod)')).to.equal(-1);
(0, chai.expect)(semver.compare('Resin OS 2.0.0+rev3 (dev)', 'Resin OS 2.0.0+rev3 (prod)')).to.equal(-1);
(0, chai.expect)(semver.compare('Resin OS 2.0.0+rev3', 'Resin OS 2.0.0+rev3.prod')).to.equal(-1);
(0, chai.expect)(semver.compare('Resin OS 2.0.0+rev3 (dev)', 'Resin OS 2.0.0+rev3+prod')).to.equal(1); // B is invalid

should correctly compare versions with underscores.

(0, chai.expect)(semver.compare('6.0.1_logstream', '5.0.1')).to.equal(1);
(0, chai.expect)(semver.compare('6.0.1_logstream', '5.0.1_logstream')).to.equal(1);
(0, chai.expect)(semver.compare('6.0.1_logstream', '7.0.1')).to.equal(-1);
(0, chai.expect)(semver.compare('6.0.1_logstream', '6.0.1')).to.equal(1);

rcompare(versionA, versionB) ⇒ number

The reverse of .compare(). Accepts string or null values and compares them, returning a number indicating sort order. Values are parsed for valid semver strings. Sorts an array of versions in descending order when passed to Array.sort().

Kind: global function
Summary: Compare order of versions in reverse
Returns: number - Returns 0 if versionA == versionB, or -1 if versionA is greater, or 1 if versionB is greater. Valid semver values are sorted before invalid semver values, and invalid semver values are sorted before null values. If both values are non-null invalid semver values, then the values are compared alphabetically.
Access: public

Param Type Description
versionA string | null | undefined The first version to compare
versionB string | null | undefined The second version to compare

Example
should not throw when provided with a version.

versions_1.versions.forEach(function (version) {
    (0, chai.expect)(function () { return semver.rcompare(version, version); }).to.not.throw();
});

should correctly compare valid semver values.

(0, chai.expect)(semver.rcompare('2.0.5', '1.16.0')).to.equal(-1);
(0, chai.expect)(semver.rcompare('2.0.5', '2.0.5')).to.equal(0);
(0, chai.expect)(semver.rcompare('1.16.0', '2.0.5')).to.equal(1);

should correctly compare valid semver values to Resin formatted versions.

(0, chai.expect)(semver.rcompare('2.0.5', 'Resin OS v2.0.2+rev2')).to.equal(-1);
(0, chai.expect)(semver.rcompare('1.16.0', 'Resin OS v2.0.2+rev2')).to.equal(1);
(0, chai.expect)(semver.rcompare('1.16.0', 'Resin OS v1.16.0')).to.equal(0);
(0, chai.expect)(semver.rcompare('Resin OS 1.16.0', '2.0.2')).to.equal(1);
(0, chai.expect)(semver.rcompare('Resin OS 1.16.0', '1.16.0')).to.equal(0);
(0, chai.expect)(semver.rcompare('Resin OS 2.0.2', '1.16.0')).to.equal(-1);

should correctly compare Resin formatted versions.

(0, chai.expect)(semver.rcompare('Resin OS 2.0.5', 'Resin OS 2.0.2+rev2')).to.equal(-1);
(0, chai.expect)(semver.rcompare('Resin OS 1.16.0', 'Resin OS 2.0.2 (prod)')).to.equal(1);
(0, chai.expect)(semver.rcompare('Resin OS 1.16.0', 'Resin OS 1.16.0')).to.equal(0);

should correctly compare invalid semver values.

(0, chai.expect)(semver.rcompare('Linux 14.04', 'Resin OS v2.0.2+rev2')).to.equal(1);
(0, chai.expect)(semver.rcompare('Linux 14.04', 'A development version')).to.equal(-1);
(0, chai.expect)(semver.rcompare('Version B', 'Version A')).to.equal(-1);
(0, chai.expect)(semver.rcompare('Version A', 'Version A')).to.equal(0);

should correctly compare null values.

(0, chai.expect)(semver.rcompare('2.0.5', null)).to.equal(-1);
(0, chai.expect)(semver.rcompare(null, '1.16.0')).to.equal(1);
(0, chai.expect)(semver.rcompare('Resin OS 1.16.0', null)).to.equal(-1);
(0, chai.expect)(semver.rcompare(null, 'Resin OS 1.16.0')).to.equal(1);
(0, chai.expect)(semver.rcompare('Linux 14.04', null)).to.equal(-1);
(0, chai.expect)(semver.rcompare(null, 'Linux 14.04')).to.equal(1);
(0, chai.expect)(semver.rcompare(null, null)).to.equal(0);

should correctly compare undefined values.

(0, chai.expect)(semver.rcompare('2.0.5', undefined)).to.equal(-1);
(0, chai.expect)(semver.rcompare(undefined, '1.16.0')).to.equal(1);
(0, chai.expect)(semver.rcompare('Resin OS 1.16.0', undefined)).to.equal(-1);
(0, chai.expect)(semver.rcompare(undefined, 'Resin OS 1.16.0')).to.equal(1);
(0, chai.expect)(semver.rcompare('Linux 14.04', undefined)).to.equal(-1);
(0, chai.expect)(semver.rcompare(undefined, 'Linux 14.04')).to.equal(1);
(0, chai.expect)(semver.rcompare(undefined, undefined)).to.equal(0);

should correctly compare "rev" values.

(0, chai.expect)(semver.rcompare('2.0.0+rev6', '2.0.0+rev3')).to.equal(-1);
(0, chai.expect)(semver.rcompare('Resin OS 2.0.0+rev4', 'Resin OS 2.0.0+rev3')).to.equal(-1);
(0, chai.expect)(semver.rcompare('2.0.0+rev6', 'Resin OS 2.0.0+rev3')).to.equal(-1);
(0, chai.expect)(semver.rcompare('2.0.0+rev2', 'Resin OS 2.0.0+rev5')).to.equal(1);
(0, chai.expect)(semver.rcompare('2.0.0+rev3', '2.0.0+rev3')).to.equal(0);

should correctly compare ".dev" versions.

(0, chai.expect)(semver.rcompare('2.0.0', '2.0.0+dev')).to.equal(-1);
(0, chai.expect)(semver.rcompare('2.0.0', '2.0.0-dev')).to.equal(-1);
(0, chai.expect)(semver.rcompare('2.0.0', '2.0.0.dev')).to.equal(-1);
(0, chai.expect)(semver.rcompare('2.0.0+rev6', '2.0.0+rev6.dev')).to.equal(-1);
(0, chai.expect)(semver.rcompare('2.0.0+rev6.dev', '2.0.0+rev6')).to.equal(1);
(0, chai.expect)(semver.rcompare('2.0.0+rev6.dev', '2.0.0+rev6.dev')).to.equal(0);
(0, chai.expect)(semver.rcompare('Resin OS 2.0.0+rev3', 'Resin OS 2.0.0+rev3.dev')).to.equal(-1);
(0, chai.expect)(semver.rcompare('Resin OS 2.0.0+rev3.dev', 'Resin OS 2.0.0+rev3')).to.equal(1);
(0, chai.expect)(semver.rcompare('Resin OS 2.0.0+rev3.dev', 'Resin OS 2.0.0+rev3.dev')).to.equal(0);
(0, chai.expect)(semver.rcompare('2.0.0', 'Resin OS 2.0.0.dev')).to.equal(-1);
(0, chai.expect)(semver.rcompare('Resin OS 2.0.0.dev', '2.0.0')).to.equal(1);
(0, chai.expect)(semver.rcompare('Resin OS 2.0.0.dev', '2.0.0.dev')).to.equal(0);

major(version) ⇒ number | null

Returns the major version number in a semver string. If the version is not a valid semver string, or a valid semver string cannot be found, it returns null.

Kind: global function
Summary: Return the major version number
Returns: number | null - - The major version number
Access: public

Param Type Description
version string | null | undefine The version string to evaluate

Example
should correctly match valid semver versions.

(0, chai.expect)(semver.major('4.5.1')).to.equal(4);

should correctly match resinOS prefixed versions.

(0, chai.expect)(semver.major('Resin OS v2.0.5')).to.equal(2);
(0, chai.expect)(semver.major('Resin OS 2.0.2+rev2')).to.equal(2);
(0, chai.expect)(semver.major('Resin OS 2.0.0.rev1 (prod)')).to.equal(2);
(0, chai.expect)(semver.major('Resin OS 2.0.0-rc5.rev1')).to.equal(2);

should return null when version is null.

(0, chai.expect)(semver.major(null)).to.equal(null);

should return null when version is undefined.

(0, chai.expect)(semver.major(undefined)).to.equal(null);

should return null when the version contains no valid semver value.

(0, chai.expect)(semver.major('My dev version')).to.equal(null);
(0, chai.expect)(semver.major('Linux 14.04')).to.equal(null);
(0, chai.expect)(semver.major('Software version 42.3.20170726.72bbcf8')).to.equal(null);

should correctly match underscored versions.

(0, chai.expect)(semver.major('7.1.2_logstream')).to.equal(7);

prerelease(version) ⇒ Array.<(string|number)> | null

Returns an array of prerelease components, or null if none exist

Kind: global function
Summary: Return prerelease components
Returns: Array.<(string|number)> | null - - An array of prerelease component, or null if none exist
Access: public

Param Type Description
version string | null | undefined The version string to evaluate

Example
should return an array of prerelease components when provided a semver string.

(0, chai.expect)(semver.prerelease('1.16.0-alpha.1')).to.eql(['alpha', 1]);

should return null when provided with a semver string that has no prerelease segment.

(0, chai.expect)(semver.prerelease('1.16.0')).to.eql(null);

should return an array of prerelease components when provided a resinOS prefixed version.

(0, chai.expect)(semver.prerelease('Resin OS 2.0.0-rc5.rev1')).to.eql([
    'rc5',
    'rev1',
]);

should return null when provided a resinOS prefixed version that has no prerelease segment.

(0, chai.expect)(semver.prerelease('Resin OS 2.0.0')).to.equal(null);

should return null when provided with an invalid version.

(0, chai.expect)(semver.prerelease('My dev version')).to.equal(null);
(0, chai.expect)(semver.prerelease('Linux 14.04')).to.equal(null);
(0, chai.expect)(semver.prerelease('Software version 42.3.20170726.72bbcf8')).to.equal(null);

should return null when provided with a null value.

(0, chai.expect)(semver.prerelease(null)).to.equal(null);

should return null when provided with an undefined value.

(0, chai.expect)(semver.prerelease(undefined)).to.equal(null);

gte(versionA, versionB) ⇒ boolean

Returns true if versionA is greater than or equal to versionB. Valid semver versions are always weighted above non semver strings. Non-semver strings are compared alphabetically.

Kind: global function
Summary: Check if a version is greater than or equal to another
Returns: boolean - - true if versionA is greater than or equal to versionB, otherwise false.
Access: public

Param Type Description
versionA string | null | undefined The version string to compare against
versionB string | null | undefined The version string to compare to versionA

Example
should correctly compare valid semver values.

(0, chai.expect)(semver.gte('2.0.5', '1.16.0')).to.equal(true);
(0, chai.expect)(semver.gte('1.16.0', '2.0.5')).to.equal(false);

should correctly compare valid semver values to Resin formatted versions.

(0, chai.expect)(semver.gte('2.0.5', 'Resin OS v2.0.2+rev2')).to.equal(true);
(0, chai.expect)(semver.gte('1.16.0', 'Resin OS v2.0.2+rev2')).to.equal(false);
(0, chai.expect)(semver.gte('Resin OS 1.16.0', '2.0.2')).to.equal(false);
(0, chai.expect)(semver.gte('Resin OS 1.16.0', '1.16.0')).to.equal(true);

should correctly compare Resin formatted versions.

(0, chai.expect)(semver.gte('Resin OS 2.0.5', 'Resin OS 2.0.2+rev2')).to.equal(true);
(0, chai.expect)(semver.gte('Resin OS 1.16.0', 'Resin OS 2.0.2 (prod)')).to.equal(false);

should correctly compare invalid semver values.

(0, chai.expect)(semver.gte('Linux 14.04', 'Resin OS v2.0.2+rev2')).to.equal(false);
(0, chai.expect)(semver.gte('Linux 14.04', 'A development version')).to.equal(true);
(0, chai.expect)(semver.gte('Version B', 'Version A')).to.equal(true);

should correctly compare null values.

(0, chai.expect)(semver.gte('2.0.5', null)).to.equal(true);
(0, chai.expect)(semver.gte(null, '1.16.0')).to.equal(false);
(0, chai.expect)(semver.gte('Resin OS 1.16.0', null)).to.equal(true);
(0, chai.expect)(semver.gte(null, 'Resin OS 1.16.0')).to.equal(false);
(0, chai.expect)(semver.gte('Linux 14.04', null)).to.equal(true);
(0, chai.expect)(semver.gte(null, 'Linux 14.04')).to.equal(false);
(0, chai.expect)(semver.gte(null, null)).to.equal(true);

should correctly compare undefined values.

(0, chai.expect)(semver.gte('2.0.5', undefined)).to.equal(true);
(0, chai.expect)(semver.gte(undefined, '1.16.0')).to.equal(false);
(0, chai.expect)(semver.gte('Resin OS 1.16.0', undefined)).to.equal(true);
(0, chai.expect)(semver.gte(undefined, 'Resin OS 1.16.0')).to.equal(false);
(0, chai.expect)(semver.gte('Linux 14.04', undefined)).to.equal(true);
(0, chai.expect)(semver.gte(undefined, 'Linux 14.04')).to.equal(false);
(0, chai.expect)(semver.gte(undefined, undefined)).to.equal(true);

should correctly compare "rev" values.

(0, chai.expect)(semver.gte('2.0.0+rev6', '2.0.0+rev3')).to.equal(true);
(0, chai.expect)(semver.gte('Resin OS 2.0.0+rev4', 'Resin OS 2.0.0+rev3')).to.equal(true);
(0, chai.expect)(semver.gte('2.0.0+rev6', 'Resin OS 2.0.0+rev3')).to.equal(true);
(0, chai.expect)(semver.gte('2.0.0+rev2', 'Resin OS 2.0.0+rev5')).to.equal(false);
(0, chai.expect)(semver.gte('2.0.0+rev3', '2.0.0+rev3')).to.equal(true);

should correctly compare ".dev" versions.

(0, chai.expect)(semver.gte('2.0.0', '2.0.0+dev')).to.equal(true);
(0, chai.expect)(semver.gte('2.0.0', '2.0.0-dev')).to.equal(true);
(0, chai.expect)(semver.gte('2.0.0', '2.0.0.dev')).to.equal(true);
(0, chai.expect)(semver.gte('2.0.0+rev6', '2.0.0+rev6.dev')).to.equal(true);
(0, chai.expect)(semver.gte('2.0.0+rev6.dev', '2.0.0+rev6')).to.equal(false);
(0, chai.expect)(semver.gte('2.0.0+rev6.dev', '2.0.0+rev6.dev')).to.equal(true);
(0, chai.expect)(semver.gte('Resin OS 2.0.0+rev3', 'Resin OS 2.0.0+rev3.dev')).to.equal(true);
(0, chai.expect)(semver.gte('Resin OS 2.0.0+rev3.dev', 'Resin OS 2.0.0+rev3')).to.equal(false);
(0, chai.expect)(semver.gte('Resin OS 2.0.0+rev3.dev', 'Resin OS 2.0.0+rev3.dev')).to.equal(true);
(0, chai.expect)(semver.gte('2.0.0', 'Resin OS 2.0.0.dev')).to.equal(true);
(0, chai.expect)(semver.gte('Resin OS 2.0.0.dev', '2.0.0')).to.equal(false);
(0, chai.expect)(semver.gte('Resin OS 2.0.0.dev', '2.0.0.dev')).to.equal(true);

should correctly compare underscored versions.

(0, chai.expect)(semver.gte('7.0.1_logstream', '7.0.1')).to.equal(true);
(0, chai.expect)(semver.gte('7.0.1_logstream', '7.0.1_logstream')).to.equal(true);

gt(versionA, versionB) ⇒ boolean

Returns true if versionA is greater than versionB. Valid semver versions are always weighted above non semver strings. Non-semver strings are compared alphabetically.

Kind: global function
Summary: Check if a version is greater than another
Returns: boolean - - true if versionA is greater than versionB, otherwise false.
Access: public

Param Type Description
versionA string | null | undefined The version string to compare against
versionB string | null | undefined The version string to compare to versionA

Example
should correctly compare valid semver values.

(0, chai.expect)(semver.gt('2.0.5', '1.16.0')).to.equal(true);
(0, chai.expect)(semver.gt('1.16.0', '2.0.5')).to.equal(false);
(0, chai.expect)(semver.gt('1.16.0', '1.16.0')).to.equal(false);

should correctly compare valid semver values to Resin formatted versions.

(0, chai.expect)(semver.gt('2.0.5', 'Resin OS v2.0.2+rev2')).to.equal(true);
(0, chai.expect)(semver.gt('1.16.0', 'Resin OS v2.0.2+rev2')).to.equal(false);
(0, chai.expect)(semver.gt('Resin OS 1.16.0', '2.0.2')).to.equal(false);
(0, chai.expect)(semver.gt('Resin OS 1.16.0', '1.16.0')).to.equal(false);

should correctly compare Resin formatted versions.

(0, chai.expect)(semver.gt('Resin OS 2.0.5', 'Resin OS 2.0.2+rev2')).to.equal(true);
(0, chai.expect)(semver.gt('Resin OS 1.16.0', 'Resin OS 2.0.2 (prod)')).to.equal(false);
(0, chai.expect)(semver.gt('Resin OS 1.16.0', 'Resin OS 1.16.0')).to.equal(false);

should correctly compare invalid semver values.

(0, chai.expect)(semver.gt('Linux 14.04', 'Resin OS v2.0.2+rev2')).to.equal(false);
(0, chai.expect)(semver.gt('Linux 14.04', 'A development version')).to.equal(true);
(0, chai.expect)(semver.gt('Version B', 'Version A')).to.equal(true);
(0, chai.expect)(semver.gt('Version A', 'Version A')).to.equal(false);

should correctly compare null values.

(0, chai.expect)(semver.gt('2.0.5', null)).to.equal(true);
(0, chai.expect)(semver.gt(null, '1.16.0')).to.equal(false);
(0, chai.expect)(semver.gt('Resin OS 1.16.0', null)).to.equal(true);
(0, chai.expect)(semver.gt(null, 'Resin OS 1.16.0')).to.equal(false);
(0, chai.expect)(semver.gt('Linux 14.04', null)).to.equal(true);
(0, chai.expect)(semver.gt(null, 'Linux 14.04')).to.equal(false);
(0, chai.expect)(semver.gt(null, null)).to.equal(false);

should correctly compare undefined values.

(0, chai.expect)(semver.gt('2.0.5', undefined)).to.equal(true);
(0, chai.expect)(semver.gt(undefined, '1.16.0')).to.equal(false);
(0, chai.expect)(semver.gt('Resin OS 1.16.0', undefined)).to.equal(true);
(0, chai.expect)(semver.gt(undefined, 'Resin OS 1.16.0')).to.equal(false);
(0, chai.expect)(semver.gt('Linux 14.04', undefined)).to.equal(true);
(0, chai.expect)(semver.gt(undefined, 'Linux 14.04')).to.equal(false);
(0, chai.expect)(semver.gt(undefined, undefined)).to.equal(false);

should correctly compare "rev" values.

(0, chai.expect)(semver.gt('2.0.0+rev6', '2.0.0+rev3')).to.equal(true);
(0, chai.expect)(semver.gt('Resin OS 2.0.0+rev4', 'Resin OS 2.0.0+rev3')).to.equal(true);
(0, chai.expect)(semver.gt('2.0.0+rev6', 'Resin OS 2.0.0+rev3')).to.equal(true);
(0, chai.expect)(semver.gt('2.0.0+rev2', 'Resin OS 2.0.0+rev5')).to.equal(false);
(0, chai.expect)(semver.gt('2.0.0+rev3', '2.0.0+rev3')).to.equal(false);

should correctly compare ".dev" versions.

(0, chai.expect)(semver.gt('2.0.0', '2.0.0+dev')).to.equal(true);
(0, chai.expect)(semver.gt('2.0.0', '2.0.0-dev')).to.equal(true);
(0, chai.expect)(semver.gt('2.0.0', '2.0.0.dev')).to.equal(true);
(0, chai.expect)(semver.gt('2.0.0+rev6', '2.0.0+rev6.dev')).to.equal(true);
(0, chai.expect)(semver.gt('2.0.0+rev6.dev', '2.0.0+rev6')).to.equal(false);
(0, chai.expect)(semver.gt('2.0.0+rev6.dev', '2.0.0+rev6.dev')).to.equal(false);
(0, chai.expect)(semver.gt('Resin OS 2.0.0+rev3', 'Resin OS 2.0.0+rev3.dev')).to.equal(true);
(0, chai.expect)(semver.gt('Resin OS 2.0.0+rev3.dev', 'Resin OS 2.0.0+rev3')).to.equal(false);
(0, chai.expect)(semver.gt('Resin OS 2.0.0+rev3.dev', 'Resin OS 2.0.0+rev3.dev')).to.equal(false);
(0, chai.expect)(semver.gt('2.0.0', 'Resin OS 2.0.0.dev')).to.equal(true);
(0, chai.expect)(semver.gt('Resin OS 2.0.0.dev', '2.0.0')).to.equal(false);
(0, chai.expect)(semver.gt('Resin OS 2.0.0.dev', '2.0.0.dev')).to.equal(false);

lte(versionA, versionB) ⇒ boolean

Returns true if versionA is less than or equal to versionB. Valid semver versions are always weighted above non semver strings. Non-semver strings are compared alphabetically.

Kind: global function
Summary: Check if a version is less than or equal to another
Returns: boolean - - true if versionA is greater than or equal to versionB, otherwise false.
Access: public

Param Type Description
versionA string | null | undefined The version string to compare against
versionB string | null | undefined The version string to compare to versionA

Example
should correctly compare valid semver values.

(0, chai.expect)(semver.lte('2.0.5', '1.16.0')).to.equal(false);
(0, chai.expect)(semver.lte('1.16.0', '2.0.5')).to.equal(true);
(0, chai.expect)(semver.lte('1.16.0', '1.16.0')).to.equal(true);

should correctly compare valid semver values to Resin formatted versions.

(0, chai.expect)(semver.lte('2.0.5', 'Resin OS v2.0.2+rev2')).to.equal(false);
(0, chai.expect)(semver.lte('1.16.0', 'Resin OS v2.0.2+rev2')).to.equal(true);
(0, chai.expect)(semver.lte('Resin OS 1.16.0', '2.0.2')).to.equal(true);
(0, chai.expect)(semver.lte('Resin OS 1.16.0', '1.16.0')).to.equal(true);

should correctly compare Resin formatted versions.

(0, chai.expect)(semver.lte('Resin OS 2.0.5', 'Resin OS 2.0.2+rev2')).to.equal(false);
(0, chai.expect)(semver.lte('Resin OS 1.16.0', 'Resin OS 2.0.2 (prod)')).to.equal(true);
(0, chai.expect)(semver.lte('Resin OS 1.16.0', 'Resin OS 1.16.0')).to.equal(true);

should correctly compare invalid semver values.

(0, chai.expect)(semver.lte('Linux 14.04', 'Resin OS v2.0.2+rev2')).to.equal(true);
(0, chai.expect)(semver.lte('Linux 14.04', 'A development version')).to.equal(false);
(0, chai.expect)(semver.lte('Version B', 'Version A')).to.equal(false);
(0, chai.expect)(semver.lte('Version A', 'Version A')).to.equal(true);

should correctly compare null values.

(0, chai.expect)(semver.lte('2.0.5', null)).to.equal(false);
(0, chai.expect)(semver.lte(null, '1.16.0')).to.equal(true);
(0, chai.expect)(semver.lte('Resin OS 1.16.0', null)).to.equal(false);
(0, chai.expect)(semver.lte(null, 'Resin OS 1.16.0')).to.equal(true);
(0, chai.expect)(semver.lte('Linux 14.04', null)).to.equal(false);
(0, chai.expect)(semver.lte(null, 'Linux 14.04')).to.equal(true);
(0, chai.expect)(semver.lte(null, null)).to.equal(true);

should correctly compare undefined values.

(0, chai.expect)(semver.lte('2.0.5', undefined)).to.equal(false);
(0, chai.expect)(semver.lte(undefined, '1.16.0')).to.equal(true);
(0, chai.expect)(semver.lte('Resin OS 1.16.0', undefined)).to.equal(false);
(0, chai.expect)(semver.lte(undefined, 'Resin OS 1.16.0')).to.equal(true);
(0, chai.expect)(semver.lte('Linux 14.04', undefined)).to.equal(false);
(0, chai.expect)(semver.lte(undefined, 'Linux 14.04')).to.equal(true);
(0, chai.expect)(semver.lte(undefined, undefined)).to.equal(true);

should correctly compare "rev" values.

(0, chai.expect)(semver.lte('2.0.0+rev6', '2.0.0+rev3')).to.equal(false);
(0, chai.expect)(semver.lte('Resin OS 2.0.0+rev4', 'Resin OS 2.0.0+rev3')).to.equal(false);
(0, chai.expect)(semver.lte('2.0.0+rev6', 'Resin OS 2.0.0+rev3')).to.equal(false);
(0, chai.expect)(semver.lte('2.0.0+rev2', 'Resin OS 2.0.0+rev5')).to.equal(true);
(0, chai.expect)(semver.lte('2.0.0+rev3', '2.0.0+rev3')).to.equal(true);

should correctly compare ".dev" versions.

(0, chai.expect)(semver.lte('2.0.0', '2.0.0+dev')).to.equal(false);
(0, chai.expect)(semver.lte('2.0.0', '2.0.0-dev')).to.equal(false);
(0, chai.expect)(semver.lte('2.0.0', '2.0.0.dev')).to.equal(false);
(0, chai.expect)(semver.lte('2.0.0+rev6', '2.0.0+rev6.dev')).to.equal(false);
(0, chai.expect)(semver.lte('2.0.0+rev6.dev', '2.0.0+rev6')).to.equal(true);
(0, chai.expect)(semver.lte('2.0.0+rev6.dev', '2.0.0+rev6.dev')).to.equal(true);
(0, chai.expect)(semver.lte('Resin OS 2.0.0+rev3', 'Resin OS 2.0.0+rev3.dev')).to.equal(false);
(0, chai.expect)(semver.lte('Resin OS 2.0.0+rev3.dev', 'Resin OS 2.0.0+rev3')).to.equal(true);
(0, chai.expect)(semver.lte('Resin OS 2.0.0+rev3.dev', 'Resin OS 2.0.0+rev3.dev')).to.equal(true);
(0, chai.expect)(semver.lte('2.0.0', 'Resin OS 2.0.0.dev')).to.equal(false);
(0, chai.expect)(semver.lte('Resin OS 2.0.0.dev', '2.0.0')).to.equal(true);
(0, chai.expect)(semver.lte('Resin OS 2.0.0.dev', '2.0.0.dev')).to.equal(true);

lt(versionA, versionB) ⇒ boolean

Returns true if versionA is less than versionB. Valid semver versions are always weighted above non semver strings. Non-semver strings are compared alphabetically.

Kind: global function
Summary: Check if a version is less than another
Returns: boolean - - true if versionA is less than versionB, otherwise false.
Access: public

Param Type Description
versionA string | null | undefined The version string to compare against
versionB string | null | undefined The version string to compare to versionA

Example
should correctly compare valid semver values.

(0, chai.expect)(semver.lt('2.0.5', '1.16.0')).to.equal(false);
(0, chai.expect)(semver.lt('1.16.0', '2.0.5')).to.equal(true);
(0, chai.expect)(semver.lt('1.16.0', '1.16.0')).to.equal(false);

should correctly compare valid semver values to Resin formatted versions.

(0, chai.expect)(semver.lt('2.0.5', 'Resin OS v2.0.2+rev2')).to.equal(false);
(0, chai.expect)(semver.lt('1.16.0', 'Resin OS v2.0.2+rev2')).to.equal(true);
(0, chai.expect)(semver.lt('Resin OS 1.16.0', '2.0.2')).to.equal(true);
(0, chai.expect)(semver.lt('Resin OS 1.16.0', '1.16.0')).to.equal(false);

should correctly compare Resin formatted versions.

(0, chai.expect)(semver.lt('Resin OS 2.0.5', 'Resin OS 2.0.2+rev2')).to.equal(false);
(0, chai.expect)(semver.lt('Resin OS 1.16.0', 'Resin OS 2.0.2 (prod)')).to.equal(true);
(0, chai.expect)(semver.lt('Resin OS 1.16.0', 'Resin OS 1.16.0')).to.equal(false);

should correctly compare invalid semver values.

(0, chai.expect)(semver.lt('Linux 14.04', 'Resin OS v2.0.2+rev2')).to.equal(true);
(0, chai.expect)(semver.lt('Linux 14.04', 'A development version')).to.equal(false);
(0, chai.expect)(semver.lt('Version B', 'Version A')).to.equal(false);
(0, chai.expect)(semver.lt('Version A', 'Version A')).to.equal(false);

should correctly compare null values.

(0, chai.expect)(semver.lt('2.0.5', null)).to.equal(false);
(0, chai.expect)(semver.lt(null, '1.16.0')).to.equal(true);
(0, chai.expect)(semver.lt('Resin OS 1.16.0', null)).to.equal(false);
(0, chai.expect)(semver.lt(null, 'Resin OS 1.16.0')).to.equal(true);
(0, chai.expect)(semver.lt('Linux 14.04', null)).to.equal(false);
(0, chai.expect)(semver.lt(null, 'Linux 14.04')).to.equal(true);
(0, chai.expect)(semver.lt(null, null)).to.equal(false);

should correctly compare undefined values.

(0, chai.expect)(semver.lt('2.0.5', undefined)).to.equal(false);
(0, chai.expect)(semver.lt(undefined, '1.16.0')).to.equal(true);
(0, chai.expect)(semver.lt('Resin OS 1.16.0', undefined)).to.equal(false);
(0, chai.expect)(semver.lt(undefined, 'Resin OS 1.16.0')).to.equal(true);
(0, chai.expect)(semver.lt('Linux 14.04', undefined)).to.equal(false);
(0, chai.expect)(semver.lt(undefined, 'Linux 14.04')).to.equal(true);
(0, chai.expect)(semver.lt(undefined, undefined)).to.equal(false);

should correctly compare "rev" values.

(0, chai.expect)(semver.lt('2.0.0+rev6', '2.0.0+rev3')).to.equal(false);
(0, chai.expect)(semver.lt('Resin OS 2.0.0+rev4', 'Resin OS 2.0.0+rev3')).to.equal(false);
(0, chai.expect)(semver.lt('2.0.0+rev6', 'Resin OS 2.0.0+rev3')).to.equal(false);
(0, chai.expect)(semver.lt('2.0.0+rev2', 'Resin OS 2.0.0+rev5')).to.equal(true);
(0, chai.expect)(semver.lt('2.0.0+rev3', '2.0.0+rev3')).to.equal(false);

should correctly compare ".dev" versions.

(0, chai.expect)(semver.lt('2.0.0', '2.0.0+dev')).to.equal(false);
(0, chai.expect)(semver.lt('2.0.0', '2.0.0-dev')).to.equal(false);
(0, chai.expect)(semver.lt('2.0.0', '2.0.0.dev')).to.equal(false);
(0, chai.expect)(semver.lt('2.0.0+rev6', '2.0.0+rev6.dev')).to.equal(false);
(0, chai.expect)(semver.lt('2.0.0+rev6.dev', '2.0.0+rev6')).to.equal(true);
(0, chai.expect)(semver.lt('2.0.0+rev6.dev', '2.0.0+rev6.dev')).to.equal(false);
(0, chai.expect)(semver.lt('Resin OS 2.0.0+rev3', 'Resin OS 2.0.0+rev3.dev')).to.equal(false);
(0, chai.expect)(semver.lt('Resin OS 2.0.0+rev3.dev', 'Resin OS 2.0.0+rev3')).to.equal(true);
(0, chai.expect)(semver.lt('Resin OS 2.0.0+rev3.dev', 'Resin OS 2.0.0+rev3.dev')).to.equal(false);
(0, chai.expect)(semver.lt('2.0.0', 'Resin OS 2.0.0.dev')).to.equal(false);
(0, chai.expect)(semver.lt('Resin OS 2.0.0.dev', '2.0.0')).to.equal(true);
(0, chai.expect)(semver.lt('Resin OS 2.0.0.dev', '2.0.0.dev')).to.equal(false);

satisfies(version, range) ⇒ boolean

Return true if the parsed version satisfies the range. This method will always return false if the provided version doesn't contain a valid semver string.

Kind: global function
Summary: Check if a version satisfies a range
Returns: boolean - - True if the parsed version satisfies the range, false otherwise
Access: public

Param Type Description
version string | null | undefined The version to evaluate
range string A semver range string, see the node-semver docs for details

Example
should correctly evaluate valid semver values.

(0, chai.expect)(semver.satisfies('2.0.5', '^2.0.0')).to.equal(true);
(0, chai.expect)(semver.satisfies('1.16.0', '^2.0.0')).to.equal(false);

should correctly evaluate Resin formatted versions.

(0, chai.expect)(semver.satisfies('Resin OS 2.0.2+rev2', '^2.0.0')).to.equal(true);
(0, chai.expect)(semver.satisfies('Resin OS 2.0.2 (prod)', '^2.0.0')).to.equal(true);
(0, chai.expect)(semver.satisfies('Resin OS 1.16.0', '^2.0.0')).to.equal(false);

should correctly evaluate versions with leading zeros.

(0, chai.expect)(semver.satisfies('2019.04.0', '~2019.04.0')).to.equal(true);
(0, chai.expect)(semver.satisfies('2019.04.1', '~2019.04.0')).to.equal(true);
(0, chai.expect)(semver.satisfies('2019.05.0', '~2019.04.0')).to.equal(false);
(0, chai.expect)(semver.satisfies('2020.05.0', '^2019.04.0')).to.equal(false);

should always return false when provided with an invalid semver value.

(0, chai.expect)(semver.satisfies('Linux 14.04', '^2.0.0')).to.equal(false);
(0, chai.expect)(semver.satisfies('A development version', '^2.0.0')).to.equal(false);
(0, chai.expect)(semver.satisfies('Version A', '^2.0.0')).to.equal(false);
(0, chai.expect)(semver.satisfies('Linux 14.04', '*')).to.equal(false);
(0, chai.expect)(semver.satisfies('Linux 14.04', '< 1.0.0')).to.equal(false);

should correctly evaluate null values.

(0, chai.expect)(semver.satisfies(null, '^2.0.0')).to.equal(false);

should correctly evaluate undefined values.

(0, chai.expect)(semver.satisfies(undefined, '^2.0.0')).to.equal(false);

maxSatisfying(versions, range) ⇒ string | null

Return the highest version in the list that satisfies the range, or null if none of them do. If multiple versions are found that have equally high values, the last one in the array is returned. Note that only version that contain a valid semver string can satisfy a range.

Kind: global function
Summary: Return the highest version in the list that satisfies the range
Returns: string | null - - The highest matching version string, or null.
Access: public

Param Type Description
versions Array.<(string|null|undefined)> An array of versions to evaluate
range string A semver range string, see the node-semver docs for details

Example
should return the correct version.

(0, chai.expect)(semver.maxSatisfying(versions_1.versions, '1.1.*')).to.equal('Resin OS 1.1.4');
(0, chai.expect)(semver.maxSatisfying(versions_1.versions, '^2.0.0')).to.equal('Resin OS 2.14.0');
(0, chai.expect)(semver.maxSatisfying(versions_1.versions, '< 1.0.0')).to.equal(null);

should return the first version found if multiple versions have equally high values.

(0, chai.expect)(semver.maxSatisfying(['1.0.0', 'Resin OS 1.1.4', '1.1.4'], '1.1.*')).to.equal('Resin OS 1.1.4');

should normalize versions used in range parameter.

(0, chai.expect)(semver.maxSatisfying(versions_1.versions, '2.0.0.rev1')).to.equal('Resin OS 2.0.0+rev11');
(0, chai.expect)(semver.maxSatisfying(versions_1.versions, '^ Resin OS 2.0.0 (prod)')).to.equal('Resin OS 2.14.0');
(0, chai.expect)(semver.maxSatisfying(versions_1.versions, '< Resin OS v1.0.0')).to.equal(null);
(0, chai.expect)(semver.maxSatisfying(versions_1.versions, 'Resin OS v1.1.*')).to.equal('Resin OS 1.1.4');

parse(version) ⇒ SemverObject | null

Returns an object representing the semver version. Returns null if a valid semver string can't be found.

Kind: global function
Summary: Parse a version into an object
Returns: SemverObject | null - - An object representing the version string, or null if a valid semver string could not be found
Access: public

Param Type
version string | null | undefined

Example
should correctly parse valid semver values.

(0, chai.expect)(semver.parse('2.0.5')).to.deep.include({
    raw: '2.0.5',
    major: 2,
    minor: 0,
    patch: 5,
    version: '2.0.5',
    prerelease: [],
    build: [],
});

should correctly parse Resin formatted versions.

(0, chai.expect)(semver.parse('Resin OS v2.0.2+rev2')).to.deep.include({
    raw: 'Resin OS v2.0.2+rev2',
    major: 2,
    minor: 0,
    patch: 2,
    version: '2.0.2',
    prerelease: [],
    build: ['rev2'],
});
(0, chai.expect)(semver.parse('Resin OS v2.0.2 (prod)')).to.deep.include({
    raw: 'Resin OS v2.0.2 (prod)',
    major: 2,
    minor: 0,
    patch: 2,
    version: '2.0.2',
    prerelease: [],
    build: ['prod'],
});
(0, chai.expect)(semver.parse('Resin OS v2.0.2.prod')).to.deep.include({
    raw: 'Resin OS v2.0.2.prod',
    major: 2,
    minor: 0,
    patch: 2,
    version: '2.0.2',
    prerelease: [],
    build: ['prod'],
});
(0, chai.expect)(semver.parse('Resin OS 2.0.0-rc5.rev1')).to.deep.include({
    raw: 'Resin OS 2.0.0-rc5.rev1',
    major: 2,
    minor: 0,
    patch: 0,
    version: '2.0.0-rc5.rev1',
    prerelease: ['rc5', 'rev1'],
    build: [],
});
(0, chai.expect)(semver.parse('Resin OS 2.3.0+rev1.prod')).to.deep.include({
    raw: 'Resin OS 2.3.0+rev1.prod',
    major: 2,
    minor: 3,
    patch: 0,
    version: '2.3.0',
    prerelease: [],
    build: ['rev1', 'prod'],
});
(0, chai.expect)(semver.parse('Resin OS v2.3.0-a.b.c (prod)')).to.deep.include({
    raw: 'Resin OS v2.3.0-a.b.c (prod)',
    major: 2,
    minor: 3,
    patch: 0,
    version: '2.3.0-a.b.c',
    prerelease: ['a', 'b', 'c'],
    build: ['prod'],
});
(0, chai.expect)(semver.parse('Resin OS 2.3.0-a.b.c+d.e.f (prod)')).to.deep.include({
    raw: 'Resin OS 2.3.0-a.b.c+d.e.f (prod)',
    major: 2,
    minor: 3,
    patch: 0,
    version: '2.3.0-a.b.c',
    prerelease: ['a', 'b', 'c'],
    build: ['d', 'e', 'f', 'prod'],
});
(0, chai.expect)(semver.parse('Resin OS 2.3.0+a.b.c (prod)')).to.deep.include({
    raw: 'Resin OS 2.3.0+a.b.c (prod)',
    major: 2,
    minor: 3,
    patch: 0,
    version: '2.3.0',
    prerelease: [],
    build: ['a', 'b', 'c', 'prod'],
});

should correctly parse invalid semver values.

(0, chai.expect)(semver.parse('Linux 14.04')).to.equal(null);
(0, chai.expect)(semver.parse('A development version')).to.equal(null);
(0, chai.expect)(semver.parse('Version A')).to.equal(null);

should correctly parse null values.

(0, chai.expect)(semver.parse(null)).to.equal(null);

should correctly parse undefined values.

(0, chai.expect)(semver.parse(undefined)).to.equal(null);

should correctly parse versions with underscores.

(0, chai.expect)(semver.parse('6.0.1_logstream')).to.deep.include({
    raw: '6.0.1_logstream',
    major: 6,
    minor: 0,
    patch: 1,
    version: '6.0.1',
    build: ['logstream'],
});

should not parse versions with multiple underscores.

(0, chai.expect)(semver.parse('7.0.1_logstream_test')).to.be.null;

valid(version) ⇒ string | null

Return the parsed version, or null if it's not valid.

Kind: global function
Summary: Check if a version string is valid
Returns: string | null - - The parsed version string, or null if a valid semver string could not be found
Access: public

Param Type
version string | null | undefined

Example
should return null for invalid semver values.

(0, chai.expect)(semver.valid(null)).to.equal(null);
(0, chai.expect)(semver.valid(undefined)).to.equal(null);
(0, chai.expect)(semver.valid('')).to.equal(null);
(0, chai.expect)(semver.valid('foobar')).to.equal(null);
(0, chai.expect)(semver.valid('12345')).to.equal(null);
(0, chai.expect)(semver.valid('1.2.3.4.5')).to.equal(null);

should correctly parse valid values.

(0, chai.expect)(semver.valid('Resin OS 1.0.0-pre')).to.equal('1.0.0-pre');
(0, chai.expect)(semver.valid('Resin OS 1.0.5 (fido)')).to.equal('1.0.5');
(0, chai.expect)(semver.valid('Resin OS 2.0.0-beta.8')).to.equal('2.0.0-beta.8');
(0, chai.expect)(semver.valid('Resin OS 2.0.0-beta10.rev1')).to.equal('2.0.0-beta10.rev1');
(0, chai.expect)(semver.valid('Resin OS 2.0.0+rev3')).to.equal('2.0.0');
(0, chai.expect)(semver.valid('Resin OS 2.0.0.rev1 (prod)')).to.equal('2.0.0');
(0, chai.expect)(semver.valid('Resin OS 2.0.0+rev4 (dev)')).to.equal('2.0.0');
(0, chai.expect)(semver.valid('2.0.6+rev3.dev')).to.equal('2.0.6');

inc(version, release) ⇒ string | null

Return the version incremented by the release type (major, premajor, minor, preminor, patch, prepatch, or prerelease), or null if it's not valid.

Kind: global function
Summary: Return an incremented version
Returns: string | null - - The incremented version string, or null if a valid semver string could not be found
Access: public

Param Type
version string | null | undefined
release string

Example
should return null for invalid semver values.

(0, chai.expect)(semver.inc(null, 'major')).to.equal(null);
(0, chai.expect)(semver.inc(undefined, 'major')).to.equal(null);
(0, chai.expect)(semver.inc('', 'major')).to.equal(null);
(0, chai.expect)(semver.inc('foobar', 'major')).to.equal(null);
(0, chai.expect)(semver.inc('12345', 'major')).to.equal(null);
(0, chai.expect)(semver.inc('1.2.3.4.5', 'major')).to.equal(null);

should correctly increment valid values by a 'premajor' release.

(0, chai.expect)(semver.inc('Resin OS 1.0.0-pre', 'premajor')).to.equal('2.0.0-0');
(0, chai.expect)(semver.inc('Resin OS 1.0.5 (fido)', 'premajor')).to.equal('2.0.0-0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0-beta.8', 'premajor')).to.equal('3.0.0-0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0-beta10.rev1', 'premajor')).to.equal('3.0.0-0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0+rev3', 'premajor')).to.equal('3.0.0-0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0.rev1 (prod)', 'premajor')).to.equal('3.0.0-0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0+rev4 (dev)', 'premajor')).to.equal('3.0.0-0');
(0, chai.expect)(semver.inc('2.0.6+rev3.dev', 'premajor')).to.equal('3.0.0-0');

should correctly increment valid values by a 'preminor' release.

(0, chai.expect)(semver.inc('Resin OS 1.0.0-pre', 'preminor')).to.equal('1.1.0-0');
(0, chai.expect)(semver.inc('Resin OS 1.0.5 (fido)', 'preminor')).to.equal('1.1.0-0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0-beta.8', 'preminor')).to.equal('2.1.0-0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0-beta10.rev1', 'preminor')).to.equal('2.1.0-0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0+rev3', 'preminor')).to.equal('2.1.0-0');
(0, chai.expect)(semver.inc('Resin OS 2.1.0.rev1 (prod)', 'preminor')).to.equal('2.2.0-0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0+rev4 (dev)', 'preminor')).to.equal('2.1.0-0');
(0, chai.expect)(semver.inc('2.0.6+rev3.dev', 'preminor')).to.equal('2.1.0-0');

should correctly increment valid values by a 'prepatch' release.

(0, chai.expect)(semver.inc('Resin OS 1.0.0-pre', 'prepatch')).to.equal('1.0.1-0');
(0, chai.expect)(semver.inc('Resin OS 1.0.5 (fido)', 'prepatch')).to.equal('1.0.6-0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0-beta.8', 'prepatch')).to.equal('2.0.1-0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0-beta10.rev1', 'prepatch')).to.equal('2.0.1-0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0+rev3', 'prepatch')).to.equal('2.0.1-0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0.rev1 (prod)', 'prepatch')).to.equal('2.0.1-0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0+rev4 (dev)', 'prepatch')).to.equal('2.0.1-0');
(0, chai.expect)(semver.inc('2.0.6+rev3.dev', 'prepatch')).to.equal('2.0.7-0');

should correctly increment valid values by a 'prerelease' release.

(0, chai.expect)(semver.inc('Resin OS 1.0.0-pre', 'prerelease')).to.equal('1.0.0-pre.0');
(0, chai.expect)(semver.inc('Resin OS 1.0.5 (fido)', 'prerelease')).to.equal('1.0.6-0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0-beta.8', 'prerelease')).to.equal('2.0.0-beta.9');
(0, chai.expect)(semver.inc('Resin OS 2.0.0-beta10.rev1', 'prerelease')).to.equal('2.0.0-beta10.rev1.0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0+rev3', 'prerelease')).to.equal('2.0.1-0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0.rev1 (prod)', 'prerelease')).to.equal('2.0.1-0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0+rev4 (dev)', 'prerelease')).to.equal('2.0.1-0');
(0, chai.expect)(semver.inc('2.0.6+rev3.dev', 'prerelease')).to.equal('2.0.7-0');

should correctly increment valid values by a 'major' release.

(0, chai.expect)(semver.inc('Resin OS 1.0.0-pre', 'major')).to.equal('1.0.0');
(0, chai.expect)(semver.inc('Resin OS 1.0.5 (fido)', 'major')).to.equal('2.0.0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0-beta.8', 'major')).to.equal('2.0.0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0-beta10.rev1', 'major')).to.equal('2.0.0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0+rev3', 'major')).to.equal('3.0.0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0.rev1 (prod)', 'major')).to.equal('3.0.0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0+rev4 (dev)', 'major')).to.equal('3.0.0');
(0, chai.expect)(semver.inc('2.0.6+rev3.dev', 'major')).to.equal('3.0.0');

should correctly increment valid values by a 'minor' release.

(0, chai.expect)(semver.inc('Resin OS 1.0.0-pre', 'minor')).to.equal('1.0.0');
(0, chai.expect)(semver.inc('Resin OS 1.0.5 (fido)', 'minor')).to.equal('1.1.0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0-beta.8', 'minor')).to.equal('2.0.0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0-beta10.rev1', 'minor')).to.equal('2.0.0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0+rev3', 'minor')).to.equal('2.1.0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0.rev1 (prod)', 'minor')).to.equal('2.1.0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0+rev4 (dev)', 'minor')).to.equal('2.1.0');
(0, chai.expect)(semver.inc('2.0.6+rev3.dev', 'minor')).to.equal('2.1.0');

should correctly increment valid values by a 'patch' release.

(0, chai.expect)(semver.inc('Resin OS 1.0.0-pre', 'patch')).to.equal('1.0.0');
(0, chai.expect)(semver.inc('Resin OS 1.0.5 (fido)', 'patch')).to.equal('1.0.6');
(0, chai.expect)(semver.inc('Resin OS 2.0.0-beta.8', 'patch')).to.equal('2.0.0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0-beta10.rev1', 'patch')).to.equal('2.0.0');
(0, chai.expect)(semver.inc('Resin OS 2.0.0+rev3', 'patch')).to.equal('2.0.1');
(0, chai.expect)(semver.inc('Resin OS 2.0.0.rev1 (prod)', 'patch')).to.equal('2.0.1');
(0, chai.expect)(semver.inc('Resin OS 2.0.0+rev4 (dev)', 'patch')).to.equal('2.0.1');
(0, chai.expect)(semver.inc('2.0.6+rev3.dev', 'patch')).to.equal('2.0.7');

should correctly increment 4 digit semver parts.

(0, chai.expect)(semver.inc('14.1.1000', 'patch')).to.equal('14.1.1001');
(0, chai.expect)(semver.inc('14.1.1001', 'patch')).to.equal('14.1.1002');
(0, chai.expect)(semver.inc('14.1000.1000', 'minor')).to.equal('14.1001.0');
(0, chai.expect)(semver.inc('14.1001.1001', 'minor')).to.equal('14.1002.0');
(0, chai.expect)(semver.inc('1000.1000.1000', 'major')).to.equal('1001.0.0');
(0, chai.expect)(semver.inc('1001.1001.1001', 'major')).to.equal('1002.0.0');

changelog

Change Log

All notable changes to this project will be documented in this file automatically by Versionist. DO NOT EDIT THIS FILE MANUALLY! This project adheres to Semantic Versioning.

3.0.6 - 2025-04-09

  • Update dependency husky to v9 [balena-renovate[bot]]

3.0.5 - 2025-04-08

  • Update balena-lint to v9 [joshbwlng]

3.0.4 - 2025-04-08

  • Update dependency jsdoc-to-markdown to v9 [balena-renovate[bot]]

3.0.3 - 2025-04-02

  • Update dependency mocha to v11 [balena-renovate[bot]]

3.0.2 - 2025-03-25

  • Update dependency @balena/lint to v8 [balena-renovate[bot]]

3.0.1 - 2025-02-14

  • Fix parsing & incrementing semver parts > 1000 [Thodoris Greasidis]

3.0.0 - 2023-12-12

  • Update dependencies [Thodoris Greasidis]
  • Drop support for nodejs < 16.0.0 [Thodoris Greasidis]

2.3.5 - 2023-10-25

  • Test sorting pre-releases across revisions of the same semver [Thodoris Greasidis]
  • Block the creation of package-lock.json [Thodoris Greasidis]

2.3.4 - 2023-10-25

  • Fix the .compare() method test when used with sorting [Thodoris Greasidis]

2.3.3 - 2023-07-14

  • Update TypeScript to 4.9.5 [Thodoris Greasidis]
  • patch: Update flowzone.yml [Kyle Harding]

2.3.2 - 2022-09-26

  • Delete redundant .resinci.yml [Thodoris Greasidis]

2.3.1 - 2022-09-22

  • Drop the .travis.yml [Thodoris Greasidis]
  • Specify node 10 as the minimum supported node engine in the package.json [Thodoris Greasidis]
  • Replace balenaCI with flowzone [Thodoris Greasidis]

2.3.0 - 2020-03-11

  • Support underscore version variants [Cameron Diver]

2.2.0 - 2020-03-03

  • Update dependencies [Pagan Gazzard]

2.1.0 - 2019-05-17

  • Add loose option for semver.satisfies [Giovanni Garufi]

2.0.4 - 2019-05-16

  • Switch to resin-lint [Pagan Gazzard]

2.0.3 - 2019-05-16

  • Switch to a declaration file for exported types [Pagan Gazzard]

2.0.2 - 2019-05-16

  • Update dev dependencies [Pagan Gazzard]

2.0.1 - 2019-05-16

  • Add .versionbot/CHANGELOG.yml to allow nested changelogs [Pagan Gazzard]

2.0.0 - 2019-05-07

  • Rename everything 'resin' to 'balena' [Thodoris Greasidis]
  • Exclude the build output from the repo [Thodoris Greasidis]
  • Move the build output of the repo [Thodoris Greasidis]

1.6.0 - 2019-04-29

  • Accept versions with leading zeros [Giovanni Garufi]

1.5.1 - 2019-03-05

  • Limit @types/lodash version to not break TS<2.8 consumers [Thodoris Greasidis]
  • Drop lodash.memoize in favor of deep imports [Thodoris Greasidis]

1.5.0 - 2019-01-24

  • Add .lte to the supported functions [Gergely Imreh]

1.4.1 - 2019-01-24

  • Docs: make file writer synchronous [Gergely Imreh]

v1.4.0 - 2018-10-17

  • Add support for balenaOS prefixed OS versions [Lucian Buzzo]

v1.3.0 - 2018-09-18

  • Feat: Add support for Balena OS versions [Lucian Buzzo]

v1.2.2 - 2018-02-16

  • Declare mocha and chai as dev dependencies instead of direct dependencies #64 [Lucian Buzzo]

v1.2.1 - 2017-10-06

  • Bump semver typings version and remove index.d.ts #59 [Lucian Buzzo]

v1.2.0 - 2017-09-15

  • Normalize range/version used in maxSatisfying method #55 [Lucian Buzzo]

v1.1.1 - 2017-09-14

  • Use Husky to prettify and lint files, then build output #50 [Lucian Buzzo]

v1.1.0 - 2017-09-14

  • Add .inc() method #51 [Lucian Buzzo]

v1.0.1 - 2017-09-14

  • Check to see if build output has been committed #48 [Lucian Buzzo]

v1.0.0 - 2017-09-14

  • Normalize dev and prod builds #35 [Thodoris Greasidis]

v0.12.1 - 2017-09-14

  • Auto deploy to npm on tagged commit merge #49 [Lucian Buzzo]

v0.12.0 - 2017-09-13

  • Add the .valid() method #43 [Lucian Buzzo]

v0.11.0 - 2017-09-12

  • Safely handle undefined version values #44 [Lucian Buzzo]

v0.10.0 - 2017-09-12

  • Transpile to ES5 for better project compatibility #41 [Lucian Buzzo]

v0.9.2 - 2017-08-18

  • Fix broken doc generation #39 [Lucian Buzzo]

v0.9.1 - 2017-08-18

  • Drop typings augmentation now that DT types are updated #37 [Lucian Buzzo]

v0.9.0 - 2017-08-16

  • Implement .parse() method #31 [Lucian Buzzo]

v0.8.0 - 2017-08-07

  • Implement .satisfies() and .maxSatisfying() methods [Lucian Buzzo]

v0.7.2 - 2017-08-07

  • Arrange example versions in the /test directory expected sort order [Lucian Buzzo]

v0.7.1 - 2017-08-04

  • Remove string casting from .compare() method [Lucian Buzzo]

v0.7.0 - 2017-08-04

  • Implement .rcompare() method [Lucian Buzzo]

v0.6.1 - 2017-08-01

  • Add additional metadata to package.json [Lucian Buzzo]

v0.6.0 - 2017-08-01

  • Add .lt() method [Lucian Buzzo]

v0.5.0 - 2017-08-01

  • Add a .gt() method [Lucian Buzzo]

v0.4.0 - 2017-08-01

  • Add a .gte() method. [Lucian Buzzo]

v0.3.0 - 2017-08-01

  • Add a .prerelease() method [Lucian Buzzo]

v0.2.0 - 2017-07-31

  • Add a method .major() for returning the major version number [Lucian Buzzo]

v0.1.4 - 2017-07-21

  • Add Functionality for generating documentation. [Lucian Buzzo]

v0.1.3 - 2017-07-21

  • Add linting script and integrate it into test script [Lucian Buzzo]

v0.1.2 - 2017-07-21

  • Add travis CI integration [Lucian Buzzo]

v0.1.1 - 2017-07-21

  • Add test framework and working example of test [Lucian Buzzo]

v0.1.0 - 2017-07-20

  • Added a compare implemntation