@oclif/plugin-plugins
Version:
plugins plugin for oclif
72 lines (71 loc) • 2.83 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const core_1 = require("@oclif/core");
const chalk = require("chalk");
const cli_ux_1 = require("cli-ux");
const plugins_1 = require("../../plugins");
class PluginsUninstall extends core_1.Command {
constructor() {
super(...arguments);
this.plugins = new plugins_1.default(this.config);
}
// In this case we want these operations to happen
// sequentially so the `no-await-in-loop` rule is ugnored
/* eslint-disable no-await-in-loop */
async run() {
const { flags, argv } = await this.parse(PluginsUninstall);
this.plugins = new plugins_1.default(this.config);
if (flags.verbose)
this.plugins.verbose = true;
if (argv.length === 0)
argv.push('.');
for (const plugin of argv) {
const friendly = this.removeTags(this.plugins.friendlyName(plugin));
cli_ux_1.default.action.start(`Uninstalling ${friendly}`);
const unfriendly = await this.plugins.hasPlugin(this.removeTags(plugin));
if (!unfriendly) {
const p = this.config.plugins.find(p => p.name === plugin);
if (p) {
if (p && p.parent)
return this.error(`${friendly} is installed via plugin ${p.parent.name}, uninstall ${p.parent.name} instead`);
}
return this.error(`${friendly} is not installed`);
}
try {
const { name } = unfriendly;
await this.plugins.uninstall(name);
}
catch (error) {
cli_ux_1.default.action.stop(chalk.bold.red('failed'));
throw error;
}
cli_ux_1.default.action.stop();
}
}
/* eslint-enable no-await-in-loop */
removeTags(plugin) {
if (plugin.includes('@')) {
const chunked = plugin.split('@');
const last = chunked[chunked.length - 1];
if (!last.includes('/') && chunked.length > 1) {
chunked.pop();
}
return chunked.join('@');
}
return plugin;
}
}
exports.default = PluginsUninstall;
PluginsUninstall.description = 'Removes a plugin from the CLI.';
PluginsUninstall.usage = 'plugins:uninstall PLUGIN...';
PluginsUninstall.help = `
Example:
$ <%- config.bin %> plugins:uninstall <%- config.pjson.oclif.examplePlugin || "myplugin" %>
`;
PluginsUninstall.variableArgs = true;
PluginsUninstall.args = [{ name: 'plugin', description: 'plugin to uninstall' }];
PluginsUninstall.flags = {
help: core_1.Flags.help({ char: 'h' }),
verbose: core_1.Flags.boolean({ char: 'v' }),
};
PluginsUninstall.aliases = ['plugins:unlink', 'plugins:remove'];