UNPKG

semo-plugin-plugin

Version:

A semo plugin to provide plugin management.

112 lines (111 loc) 5.21 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.handler = exports.builder = exports.aliases = exports.desc = exports.command = exports.disabled = void 0; const path_1 = __importDefault(require("path")); exports.disabled = false; // Set to true to disable this command temporarily exports.command = ['list', '$0']; exports.desc = 'List all plugins'; exports.aliases = ['l', 'ls']; // export const middleware = (argv) => {} const builder = function (yargs) { yargs.option('remote', { describe: 'List remote plugins' }); }; exports.builder = builder; function cutstr(str, len) { let str_length = 0; let str_len = 0; let str_cut = new String(); str_len = str.length; for (let i = 0; i < str_len; i++) { let a = str.charAt(i); str_length++; if (escape(a).length > 4) { //中文字符的长度经编码之后大于4 str_length++; } str_cut = str_cut.concat(a); if (str_length >= len) { str_cut = str_cut.concat('...'); return str_cut; } } //如果给定字符串小于指定长度,则返回源字符串; if (str_length < len) { return str; } } const handler = function (argv) { return __awaiter(this, void 0, void 0, function* () { const { Utils } = argv.$semo; const plugins = Utils.getAllPluginsMapping(argv); const config = Utils.getCombinedConfig(argv); if (!argv.remote) { if (Object.keys(plugins).length === 0) { Utils.warn('No plugins found.'); Utils.info(`Use ${Utils.chalk.bold.green('plugin install')} sub command to install plugins.`); // Utils.info(`Use ${Utils.chalk.bold.green('plugin list --remote')} to see available plugins.`) return; } const headers = ['Plugin', 'Version', 'Location', 'Status'].map(item => Utils.chalk.green(item)); const rows = [headers]; Object.keys(plugins).forEach(plugin => { let pluginVersion; if (Utils.fileExistsSyncCache(path_1.default.resolve(plugins[plugin], 'package.json'))) { const pkgConfig = require(path_1.default.resolve(plugins[plugin], 'package.json')); pluginVersion = pkgConfig.version || 'Unknown'; } let pluginLocation; if (process.env.HOME && plugins[plugin].indexOf(process.env.HOME) === 0) { pluginLocation = plugins[plugin].replace(process.env.HOME, '~'); } else { pluginLocation = plugins[plugin]; } rows.push([plugin, pluginVersion, pluginLocation, 'Installed']); }); Utils.outputTable(rows); } else { const headers = ['Plugin', 'Version', 'Description', 'Status'].map(item => Utils.chalk.green(item)); const rows = [headers]; let searched = yield Utils.shell.exec('curl -s "https://api.npms.io/v2/search?from=0&q=semo-plugin&size=100"', { silent: true }); let { results } = JSON.parse(searched.stdout ? searched.stdout : ''); results = [ ...results .filter(item => Boolean(plugins[item.package.name])) .sort((a, b) => a.package.name.localeCompare(b.package.name)), ...results .filter(item => !Boolean(plugins[item.package.name])) .sort((a, b) => a.package.name.localeCompare(b.package.name)), ]; for (let item of results) { const hasUpdate = config.pluginConfigs[item.package.name] ? item.package.version !== config.pluginConfigs[item.package.name].version : false; rows.push([ item.package.name, item.package.version, cutstr(item.package.description, 50), plugins[item.package.name] ? 'Installed' + (hasUpdate ? Utils.chalk.yellow('(update)') : '') : 'Not installed', ]); } Utils.outputTable(rows); } }); }; exports.handler = handler;