@commercelayer/cli
Version:
56 lines (55 loc) • 2.28 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const core_1 = require("@oclif/core");
const available_1 = require("./available");
const cli_core_1 = require("@commercelayer/cli-core");
class PluginsLatest extends core_1.Command {
static description = 'show latest version of available plugins';
static examples = [
'$ commercelayer plugins:latest',
'$ cl plugins:latest resources'
];
static flags = {
beta: core_1.Flags.boolean({
char: 'b',
description: 'retrieve latest version from beta channel'
})
};
static args = {
plugin: core_1.Args.string({ description: 'the name of the plugin', required: false })
};
async run() {
const { args, flags } = await this.parse(PluginsLatest);
const beta = flags.beta || false;
const pluginInfo = (0, available_1.getPluginInfo)(args.plugin);
if (!pluginInfo && args.plugin)
this.error(`Plugin not available: ${cli_core_1.clColor.msg.error(args.plugin)}`);
const availablePlugins = (0, available_1.getAvailablePlugins)().filter(p => p.enabled && !p.hidden);
const plugins = pluginInfo ? [pluginInfo] : availablePlugins;
if (plugins.length === 0) {
this.log('\nNo available plugins\n');
this.exit();
}
this.log();
core_1.ux.action.start(`Fetching plugins${beta ? ' [beta]' : ''}`);
const output = [];
for (const plugin of plugins) {
const pluginEntry = plugin.plugin;
const channel = beta ? 'beta' : 'latest';
const latest = await fetch(`https://registry.npmjs.org/${pluginEntry}/${channel}`)
.then(async (response) => response.json())
.catch(() => {
this.error('Unable to fetch latest plugins, please retry later');
});
const version = latest.version;
output.push(`${pluginEntry}: ${cli_core_1.clColor.dim(version)}`);
}
core_1.ux.action.stop();
const formattedOutput = output.sort().join('\n');
this.log();
this.log(formattedOutput);
this.log();
return formattedOutput;
}
}
exports.default = PluginsLatest;