semo-plugin-plugin
Version:
A semo plugin to provide plugin management.
112 lines (111 loc) • 5.21 kB
JavaScript
;
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;