TypeScript utility that checks your local npm packages against the registry and prompts users to update β with smart caching to avoid unnecessary network requests.
- π 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
npm install @rodbe/check-updates --saveimport { 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();| 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 |
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.
Runs the install command immediately without any prompt. Calls cbOnSuccess on success or cbOnError on failure.
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();MIT