6.1.0 • Published 9 months ago

compare-versions v6.1.0

Weekly downloads
3,969,997
License
MIT
Repository
github
Last release
9 months ago

compare-versions

Build Status Coverage Status npm bundle size (minified + gzip)

Compare semver version strings to find greater, equal or lesser. Runs in the browser as well as Node.js/React Native etc. Has no dependencies and is tiny.

Supports the full semver specification including versions with different number of digits like 1.0.0, 1.0, 1 and pre-releases like 1.0.0-alpha. Additionally supports the following variations:

  • Wildcards for minor and patch version like 1.0.x or 1.0.*.
  • Chromium version numbers with 4 parts, e.g. version 25.0.1364.126.
  • Any leading v is ignored, e.g. v1.0 is interpreted as 1.0.
  • Leading zero is ignored, e.g. 1.01.1 is interpreted as 1.1.1.
  • npm version ranges, e.g. 1.2.7 || >=1.2.9 <2.0.0

Install

$ npm install compare-versions

Note: Starting from v5 the main export is now named like so: import { compareVersions } from 'compare-versions'.

Note: Starting from v4 this library includes a ESM version which will automatically be selected by your bundler (webpack, parcel etc). The CJS/UMD version is lib/umd/index.js and the new ESM version is lib/esm/index.js.

Usage

Will return 1 if first version is greater, 0 if versions are equal, and -1 if the second version is greater:

import { compareVersions } from 'compare-versions';

compareVersions('11.1.1', '10.0.0'); //  1
compareVersions('10.0.0', '10.0.0'); //  0
compareVersions('10.0.0', '11.1.1'); // -1

Can also be used for sorting:

const versions = [
  '1.5.19',
  '1.2.3',
  '1.5.5'
]
const sorted = versions.sort(compareVersions);
/*
[
  '1.2.3',
  '1.5.5',
  '1.5.19'
]
*/

"Human Readable" Compare

The alternative compare function accepts an operator which will be more familiar to humans:

import { compare } from 'compare-versions';

compare('10.1.8', '10.0.4', '>');  // true
compare('10.0.1', '10.0.1', '=');  // true
compare('10.1.1', '10.2.2', '<');  // true
compare('10.1.1', '10.2.2', '<='); // true
compare('10.1.1', '10.2.2', '>='); // false

Version ranges

The satisfies function accepts a range to compare, compatible with npm package versioning:

import { satisfies } from 'compare-versions';

satisfies('10.0.1', '~10.0.0');  // true
satisfies('10.1.0', '~10.0.0');  // false
satisfies('10.1.2', '^10.0.0');  // true
satisfies('11.0.0', '^10.0.0');  // false
satisfies('10.1.8', '>10.0.4');  // true
satisfies('10.0.1', '=10.0.1');  // true
satisfies('10.1.1', '<10.2.2');  // true
satisfies('10.1.1', '<=10.2.2'); // true
satisfies('10.1.1', '>=10.2.2'); // false
satisfies('1.4.6', '1.2.7 || >=1.2.9 <2.0.0'); // true
satisfies('1.2.8', '1.2.7 || >=1.2.9 <2.0.0'); // false
satisfies('1.5.1', '1.2.3 - 2.3.4'); // true
satisfies('2.3.5', '1.2.3 - 2.3.4'); // false

Validate version numbers

Applies the same rules used comparing version numbers and returns a boolean:

import { validate } from 'compare-versions';

validate('1.0.0-rc.1'); // true
validate('1.0-rc.1');   // false
validate('foo');        // false

Validate version numbers (strict)

Validate version numbers strictly according to semver.org; 3 integers, no wildcards, no leading zero or "v" etc:

import { validateStrict } from 'compare-versions';

validate('1.0.0');      // true
validate('1.0.0-rc.1'); // true
validate('1.0');        // false
validate('1.x');        // false
validate('v1.02');      // false

Browser

If included directly in the browser, the functions above are available on the global window under the compareVersions object:

<script src=https://unpkg.com/compare-versions/lib/umd/index.js></script>
<script>
  const { compareVersions, compare, satisfies, validate } = window.compareVersions
  console.log(compareVersions('11.0.0', '10.0.0'))
  console.log(compare('11.0.0', '10.0.0', '>'))
  console.log(satisfies('1.2.0', '^1.0.0'))
  console.log(validate('11.0.0'))
  console.log(validateStrict('11.0.0'))
</script>
istanbul-apivscode-mysql-client2@onbbu/pkm@fundamental-ngx/core@salto-io/netsuite-adapterl0-r5-t000003ltsnbyapplltsnbyapplereact-native-bluetooth2reactjs-99uno@social-manager-tools/igbot@barchart/barchart-documentationiconman-cliahm-scriptsreact-life-hookpxrepo-testclarity-toolscrat99uno-react-js299uno-reactjsvp-desktopvitepress-dg-cli@pujitm/typedoc-plugin-pageshomebridge-wink-schmittxhomebridge-wink3-schmittxairscanairscan-examplereact-async-storageyarik-testbb-chattechsee-commonreact-native-esc-pos-sahaab@borisovart/atol-kkt-moduletotal-traffic-traderttt-miniondeneme323112@dxos/xbox-dashboard@ntt_app/react-native-custom-notificationreact-native-twilio-video-callkitreact-native-twilio-video-testreact-native-video-call-v1bitgetnodelts@lp0124/qm-cilitchi-mp-cligithub-update@xornot/tipsycreate-myhtmlprojectcreate-myhtmlproject-app@zrf9018/marvel-cli@45air/air-local-docker@plasmo-corp/web-ext-deploy@bybit/marvel-clicityadpro_playerrn-pdf-reader-offlinenode-red-contrib-deconz-test-zehir@djaciel/api-runneryan-element-uuuunet.vixonic.playerreact-native-slider-kfprimus-only-rtc-quickconnectcreate-sarys-app@beecode/msh-vision@mvd/frodo-cli@infinitebrahmanuniverse/nolb-compa@goku-gaga/node-ltsltsn-nodeaiot-ide-banner@sj-dixon/capacitor-clireact-devtools-sharednocodb-dailykempower_csms_utilsg-wepy-clivs-deployvisionr-server@everything-registry/sub-chunk-1364node-common-sdk-discord@bwc.mobidic/apiafterstrife-launcheralea-launcher@atlas-engine/ci_toolsdinesh-formiodatho7561-vscode-extension-testerdb-auto-migratedb-versioningdbgate-apidoc2tsdelightmom-resourcedepngndeprecated-loaderdeprecation-loadersurgiodevfoldersdevtools-detectordevtools-detector-csp@conda-store/conda-store-ui@dapp.xyz/node-commoncordova-mas-clicountapicreate-vlib
6.1.0

9 months ago

6.0.0

10 months ago

6.0.0-rc.4

10 months ago

6.0.0-rc.3

10 months ago

6.0.0-rc.2

10 months ago

5.0.3

1 year ago

5.0.2

1 year ago

6.0.0-rc.1

1 year ago

5.0.1

2 years ago

5.0.0

2 years ago

4.1.4

2 years ago

4.1.3

2 years ago

4.1.2

2 years ago

4.1.0

2 years ago

4.0.1

2 years ago

4.1.1

2 years ago

4.0.2

2 years ago

4.0.0

2 years ago

3.6.0

4 years ago

3.5.1

5 years ago

3.5.0

5 years ago

3.4.0

6 years ago

3.3.1

6 years ago

3.3.0

6 years ago

3.2.1

6 years ago

3.2.0

6 years ago

3.1.0

7 years ago

3.0.1

7 years ago

3.0.0

8 years ago

2.0.2

8 years ago

2.0.1

9 years ago

2.0.0

9 years ago

1.1.2

9 years ago

1.1.1

9 years ago

1.1.0

9 years ago

1.0.0

9 years ago