@springernature/util-package-finder
Version:
Get a list of packages and available versions from within an NPM scope
119 lines (104 loc) • 2.43 kB
JavaScript
;
const boxen = require('boxen');
const kleur = require('kleur');
const figures = require('figures');
const chunk = require('lodash/chunk');
const meow = require('meow');
const packageFinder = require('../lib/js');
const cli = meow(`
Usage
util-package-finder [options]
Options
--json, -j Return results as JSON
--scope, -s Set the scope (default: springernature)
--all, -a Get all available versions
--filters, -f Comma seperated list of name filters
Examples
util-package-finder
util-package-finder -j
util-package-finder -s springernature
util-package-finder -a
util-package-finder -f global,local
util-package-finder -j -a -f global,local
`, {
booleanDefault: undefined,
flags: {
json: {
type: 'boolean',
alias: 'j',
default: false
},
scope: {
type: 'string',
alias: 's',
default: 'springernature'
},
all: {
type: 'boolean',
alias: 'a',
default: false
},
filters: {
type: 'string',
alias: 'f'
}
}
});
const params = {
...cli.flags.scope && {scope: cli.flags.scope},
...cli.flags.filters && {filters: cli.flags.filters.split(',')},
...cli.flags.all && {versions: cli.flags.all}
};
/**
* Format the versions into chunks
* @param {Array} versions
* @return {String}
*/
const formatVersions = versions => {
const list = [];
chunk(versions, 5).filter(item => {
list.push(item.join(', '));
return item;
});
return list.join(`\n\u00A0\u00A0`);
};
/**
* Print results to the CLI
* @param {Array} response
*/
const printCli = response => {
console.log(boxen(
kleur.yellow(`${figures.star} ${kleur.bold(response.length)} packages found ${figures.star}`),
{
padding: 1,
margin: {
top: 1,
bottom: 1
},
borderColor: 'yellow',
dimBorder: true
}
));
response.forEach(item => {
const status = kleur.dim(`[${item.status}]`);
const name = item.name;
console.log(kleur.cyan(` ${name} ${status} ${kleur.green().bold().dim(item.latest)}`));
if (params.versions) {
console.log(`${kleur.dim(formatVersions(item.versions))}`);
}
});
};
/**
* Get data from packages function
* @param {Object}
*/
packageFinder(params)
.then(response => {
if (cli.flags.json) {
console.log(`\nPackages found: ${response.length}\n`);
console.log(response);
} else {
printCli(response);
}
}).catch(err => console.error(err));