Skip to content

rodbe-io/check-updates

Repository files navigation

@rodbe/check-updates

TypeScript utility that checks your local npm packages against the registry and prompts users to update β€” with smart caching to avoid unnecessary network requests.

✨ Features

  • πŸ” Version detection β€” fetches the latest version of any npm package from the registry
  • ⚑ Smart caching β€” avoids repeated network calls using configurable TTL intervals
  • πŸ’¬ Interactive prompt β€” asks the user before installing anything
  • πŸ“¦ Auto install β€” runs the install command automatically when the user accepts
  • πŸ”” Lifecycle callbacks β€” hooks for success and error after the install attempt

πŸ“¦ Installation

npm install @rodbe/check-updates --save

πŸš€ Usage

import { dirname, join } from 'node:path';
import { fileURLToPath } from 'node:url';

import { checkUpdates } from '@rodbe/check-updates';

// β†’ ./dist/ (compiled output directory)
const distPath = join(dirname(fileURLToPath(import.meta.url)));

const updateChecker = checkUpdates({
  packageJsonPath: join(distPath, '..', 'package.json'), // β†’ ./package.json
  isGlobal: true,
});

// Checks the registry, prompts the user, and installs if accepted
await updateChecker.checkNewVersion();

βš™οΈ Configuration Options

Option Type Default Description
packageJsonPath string Required Path to the package.json of the package to check
askToUpdate boolean true Whether to prompt the user before installing
isGlobal boolean true Install the package globally (npm install -g)
updateCheckInterval number 604800000 (1 week) How often to check the registry for a new version, in ms
dontAskCheckInterval number 86400000 (1 day) How long to suppress the prompt after the user declines, in ms
updateQuestion string 'Heey! Before, do you want to get the latest version? πŸ”₯' Custom message shown in the update prompt
cbOnSuccess () => void undefined Callback invoked after a successful installation
cbOnError () => void undefined Callback invoked when the installation fails
debug boolean false Runs npm -v instead of the real install command β€” useful during local development

πŸ“– API

checkNewVersion(): Promise<void>

Checks the npm registry for a newer version. If one is found (and the cache TTL has expired), it prompts the user. The user can accept to install or decline β€” if declined, the prompt is suppressed until dontAskCheckInterval elapses.

update(): void

Runs the install command immediately without any prompt. Calls cbOnSuccess on success or cbOnError on failure.

πŸ”§ Advanced usage

import { dirname, join } from 'node:path';
import { fileURLToPath } from 'node:url';

import { checkUpdates } from '@rodbe/check-updates';

const distPath = join(dirname(fileURLToPath(import.meta.url)));

const updateChecker = checkUpdates({
  packageJsonPath: join(distPath, '..', 'package.json'),
  isGlobal: true,
  askToUpdate: true,
  updateCheckInterval: 7 * 24 * 60 * 60 * 1000, // check once a week
  dontAskCheckInterval: 24 * 60 * 60 * 1000,    // suppress prompt for 1 day after decline
  updateQuestion: 'Do you want to upgrade to the latest version now?',
  cbOnSuccess: () => console.log('Package updated successfully!'),
  cbOnError: () => console.error('Something went wrong during the update.'),
});

// Check and prompt automatically
await updateChecker.checkNewVersion();

// Or trigger the update directly, skipping the prompt
updateChecker.update();

πŸ“„ License

MIT

About

Checks for the latest version of local npm packages πŸ§™β€β™‚οΈ against the npm registry πŸ“¦

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors