Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/Badisi/latest-version

📦 Get latest versions of packages
https://github.com/Badisi/latest-version

check current dependencies latest module next npm package package-json pkg updates version

Last synced: about 1 month ago
JSON representation

📦 Get latest versions of packages

Awesome Lists containing this project

README

        


@badisi/latest-version


📦 Get latest versions of packages.



npm version


npm donwloads


license



build status


PRs welcome


## Features

✅ Get `installed` versions of packages *(if installed locally or globally with npm or yarn)*

✅ Get `latest` and `next` versions of packages *(from package registries)*

✅ Get `wanted` version of packages *(if a version range or a tag is provided)*

✅ Check if any `updates` are available

✅ Cache support to increase data retrieval performance

✅ Support public/private repositories and proxies

✅ [Command line tool](#command-line-tool) that helps visualize packages updates

## Installation

```sh
npm install @badisi/latest-version --save
```

```sh
yarn add @badisi/latest-version
```

## Usage

__Example__

```ts
/** CommonJS */
// const { readFileSync } = require('fs');
// const latestVersion = require('@badisi/latest-version');

/** ESM / Typescript */
import { readFileSync } from 'fs';
import latestVersion from '@badisi/latest-version';

(async () => {
// Single package
const pkg = await latestVersion('npm');

// List of packages
const pkgs = await latestVersion(['npm', '[email protected]', 'npm@beta', '@scope/name@^5.0.2']);

// Package.json
const pkgs = await latestVersion(JSON.parse(readFileSync('package.json').toString()));

// Using cache
const pkg = await latestVersion('npm@^5.0.2', { useCache: true });
})();
```

__Return__

Either a collection or a single `LatestVersionPackage` object:

```ts
interface LatestVersionPackage {
/**
* The name of the package.
*/
name: string;
/**
* The current local installed version of the package (if installed).
*/
local?: string;
/**
* The current npm global installed version of the package (if installed).
*/
globalNpm?: string;
/**
* The current yarn global installed version of the package (if installed).
*/
globalYarn?: string;
/**
* The latest version of the package found on the registry (if found).
*/
latest?: string;
/**
* The next version of the package found on the registry (if found).
*/
next?: string;
/**
* The tag or version range that was provided (if provided).
*
* @default "latest"
*/
wantedTagOrRange?: string;
/**
* The latest version of the package found on the registry and satisfied by the wanted tag or version range.
*/
wanted?: string;
/**
* Whether the local or global installed versions (if any) could be upgraded or not, based on the wanted version.
*/
updatesAvailable: {
local: string | false;
globalNpm: string | false;
globalYarn: string | false;
} | false;
/**
* Any error that might have occurred during the process.
*/
error?: Error;
}
```

__Options__

```ts
interface LatestVersionOptions {
/**
* Awaiting the api to return might take time, depending on the network, and might impact your package loading performance.
* You can use the cache mechanism to improve load performance and reduce unnecessary network requests.
* If `useCache` is not supplied, the api will always check for updates and wait for every requests to return before returning itself.
* If `useCache` is used, the api will either (for each provided packages):
* 1) return immediately if a cache was found.
* 2) fetch and wait for updates of that particular package then creates a cache for it so that it is available for the next call to the api.
*
* @default false
*/
useCache?: boolean;

/**
* How long the cache for each provided packages should be used before being refreshed (in milliseconds).
* If `useCache` is not supplied, this option has no effect.
* If `0` is used, this will force the cache to refresh immediately:
* 1) New updates will be fetched and waited
* 2) The cache for each provided packages will be refreshed and made available for the next call to the api
*
* @default ONE_DAY
*/
cacheMaxAge?: number;

/**
* A JavaScript package registry url that implements the CommonJS Package Registry specification.
*
* @default "Looks at any registry urls in the .npmrc file or fallback to the default npm registry instead"
* @example .npmrc
* registry = 'https://custom-registry.com/'
* @pkgscope:registry = 'https://custom-registry.com/'
*/
registryUrl?: string;

/**
* Set of options to be passed down to Node.js http/https request.
*
* @example Behind a proxy with self-signed certificate
* { ca: fs.readFileSync('proxy-cert.pem') }
* @example Bypassing certificate validation
* { rejectUnauthorized: false }
*/
requestOptions?: RequestOptions;
}
```

## Command line tool

The CLI utility will help you visualize any available updates for a given *package.json* file, a local *package.json* file or any provided package names.

```sh
$ latest-version

Examples:
$ lv
$ latest-version path/to/package.json
$ latest-version package1 package2 package3 --skip-missing
```

![CLI utility preview][clipreview]

## Development

See the [developer docs][developer].

## Contributing

#### > Want to Help ?

Want to file a bug, contribute some code or improve documentation ? Excellent!

But please read up first on the guidelines for [contributing][contributing], and learn about submission process, coding rules and more.

#### > Code of Conduct

Please read and follow the [Code of Conduct][codeofconduct] and help me keep this project open and inclusive.

[clipreview]: https://github.com/badisi/latest-version/blob/main/cli_preview.png
[developer]: https://github.com/badisi/latest-version/blob/main/DEVELOPER.md
[contributing]: https://github.com/badisi/latest-version/blob/main/CONTRIBUTING.md
[codeofconduct]: https://github.com/badisi/latest-version/blob/main/CODE_OF_CONDUCT.md