depguard
Version:
A powerful CLI tool to check and update npm/yarn dependencies in your projects
82 lines (81 loc) • 3.06 kB
JavaScript
#!/usr/bin/env node
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const commander_1 = require("commander");
const inquirer_1 = __importDefault(require("inquirer"));
const ora_1 = __importDefault(require("ora"));
const update_1 = require("./update");
const check_1 = require("./check");
const factory_1 = require("./package-managers/factory");
const program = new commander_1.Command();
const check = new check_1.Check();
const update = new update_1.Update();
program
.name('depguard')
.description('CLI to check and update project dependencies')
.version('1.0.0');
program
.command('check')
.description('Check for outdated dependencies')
.option('-i, --interactive', 'Run in interactive mode')
.option('-o, --output <format>', 'Output format (json, csv)', 'text')
.action(async (opts) => {
const spinner = (0, ora_1.default)('Checking dependencies...').start();
try {
await check.checkUpdates();
spinner.succeed('Dependencies checked successfully');
}
catch (error) {
spinner.fail('Failed to check dependencies');
console.error(error);
}
});
program
.command('update')
.description('Update dependencies to latest')
.option('-s, --safe', 'Only update compatible versions')
.option('-i, --interactive', 'Run in interactive mode')
.option('-p, --package <name>', 'Update specific package')
.action(async (opts) => {
const spinner = (0, ora_1.default)('Updating dependencies...').start();
try {
if (opts.interactive) {
const packageManager = await factory_1.PackageManagerFactory.create();
const { action } = await inquirer_1.default.prompt([
{
type: 'list',
name: 'action',
message: 'What would you like to do?',
choices: [
{ name: 'Update all dependencies', value: 'all' },
{ name: 'Update only compatible versions', value: 'safe' },
{ name: 'Update specific package', value: 'specific' }
]
}
]);
if (action === 'specific') {
const { packageName } = await inquirer_1.default.prompt([
{
type: 'input',
name: 'packageName',
message: 'Enter package name:'
}
]);
opts.package = packageName;
}
else if (action === 'safe') {
opts.safe = true;
}
}
await update.updateDependencies(opts);
spinner.succeed('Dependencies updated successfully');
}
catch (error) {
spinner.fail('Failed to update dependencies');
console.error(error);
}
});
program.parse(process.argv);