Skip to content

Andrew-Colman/nanov

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

nanoV

npm Maintened


  • 📦 Get the latest version for your package (from npm)

  • 🌐 Great for global installation packages -g

  • ✌️ Semantic versions

  • 0️⃣ Zero dependencies

  • 🚀 Small and fast (~ 1 kbytes)

Installation

npm i nanov or yarn add nanov

const { getVersion } = require("nanov"); // node < 12 (commonjs)

import { getVersion } = from "nanov"; // node 14+ ( using in a .mjs file or setting "type":"module" inside your package.json) // or using a compatible module option in tsconfig for esm

Usage

//cjs (node <12)

const { getVersion } = require("nanov");

/* take your current version */
const currentVersion = require("./package.json").version;
//esm (node 14+)

import { getVersion } from "nanov";

/* take your current version */
import fs from "fs";
const currentVersion = JSON.parse(fs.readFileSync("./package.json")).version;

ℹ️ you must provide your current running version

package name: optionally take your package name from package.json / or write as a string

const packageName = require('./package.json').name;

then

getVersion("my-package-name", currentVersion)
.then(({isMajor, isMinor, isPatch, latestVersion})=> {
 if(isMajor || isMinor || isPatch,)
 console.log('new version available: ', latestVersion)
})
//further code ....

async / await

const { isMajor, isMinor, isPatch, latestVersion } = await getVersion(
    "my-package",
    currentVersion
);

if (isMajor || isMinor || isPatch)
    console.log("new version available: ", latestVersion);

//further code ....

Return Types

// if the latest version is the current version: will result in:
false (boolean)

// if the latest version is greater than the current version
{
  isMajor: boolean, // 1.0.0 > 0.0.0
  isMinor: boolean, // 0.1.0 > 0.0.0
  isPatch: boolean, // 0.0.1 > 0.0.0
  latestVersion: string,
  packageName: string
}: object

// if hit the cache will skip the http request and return empty object
{} (empty object)

semantic version comparison

  //               latest / current
  isMajor: true, // 2.0.0 > 1.0.0 // x - -
  //
  isMinor: true, // 2.1.0 > 1.0.0 // - x -

  isPatch: true, // 2.0.1 > 1.0.0 // - - x

Options

getVersion(packageName: string , currentVersion: string , options: object)
//options
{
    cache: true, // should use caching strategy / true by default (boolean)
    cacheTime: 24, // by default 24 hours (number)
}

the cache path is OS-temp-folder / nanov /packageName@currentVersion.cache.json

Examples

Simple

getVersion("my-package", version).then(({ latestVersion }) => {
    if (latestVersion) console.log("new version available: ", latestVersion);
});

Typescript

const { latestVersion } = (await getVersion('my-package', currentVersion)) as Result;

if (latestVersion) console.log('new version available'),

Catch

always catch errors if you want to prevent your program from stopping (for possible errors related with getVersion)

getVersion("my-package", version)
    .then(({ latestVersion }) => {
        if (latestVersion)
            console.log("new version available: ", latestVersion);
    })
    .catch((err) => {
        console.log(err);
    });

No cache (will do http request everytime)

not recommended

getVersion(packageName, currentVersion, {
    cache: false,
}).then((res, latestVersion) => {
    if (res) console.log("new version available: ", latestVersion);
});

Use cache for 1 hour

getVersion(packageName, currentVersion, {
    cacheTime: 1,
}).then(({ latestVersion }) => {
    if (latestVersion) console.log("new version available: ", latestVersion);
});

Any (Async / await)

const { isMajor, isMinor, isPatch, latestVersion } = await getVersion(
    "my-package",
    version
);
if (isMajor || isMinor || isPatch)
    console.log("new version available: ", latestVersion);

Major only

getVersion("my-package", currentVersion).then(({ isMajor, latestVersion }) => {
    if (isMajor) console.log("new major version available: ", latestVersion);
});

Minor only

getVersion("my-package", currentVersion).then(({ isMinor, latestVersion }) => {
    if (isMinor) console.log("new minor version available: ", latestVersion);
});

Patch only

getVersion("my-package", currentVersion).then(({ isPatch, latestVersion }) => {
    if (isPatch) console.log("new patch version available: ", latestVersion);
});

Basically you can do anything

getVersion("my-package", currentVersion).then(
    ({ isMinor, latestVersion, packageName }) => {
        if (isMinor) {
            console.log("new version available: ", latestVersion);
            console.log(`run: npm i -g ${packageName} to update`);
            //further functions
        }
    }
);

Automatic deprecation (when new major version)

not recommended

getVersion("my-package", currentVersion).then(
    ({ isMajor, latestVersion, packageName }) => {
        if (isMajor) {
            console.log("this version is deprecated");
            console.log("latest version is required: ", latestVersion);
            console.log(`run: npm i -g ${packageName} to update`);
            process.exit(); // quit your program from running
        }
    }
);