@axway/axway-cli-pm
Version:
Package manager for Axway products
148 lines (117 loc) • 12.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _pm = require("../pm.js");
var _snooplogg = _interopRequireDefault(require("snooplogg"));
var _amplifyCliUtils = require("@axway/amplify-cli-utils");
var _semver = _interopRequireDefault(require("semver"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var _default = {
aliases: ['v', '!info', '!show'],
args: [{
name: 'package',
hint: 'package[@version]',
desc: 'The package name and version to view',
redact: false,
required: true
}, {
name: 'filter',
hint: 'field[.subfield]',
callback: ({
ctx,
value
}) => {
if (value) {
ctx.banner = false;
}
},
desc: 'Display specific package fields',
redact: false
}],
desc: 'Displays info for a specific package',
options: {
'--json': {
callback: ({
ctx,
value
}) => {
ctx.jsonMode = value;
if (value) {
ctx.banner = false;
}
},
desc: 'Outputs package info as JSON'
}
},
async action({
argv,
cli,
console
}) {
let info = await (0, _pm.view)(argv.package);
if (argv.filter) {
for (const key of argv.filter.split('.')) {
if (typeof info !== 'object') {
break;
}
info = Object.prototype.hasOwnProperty.call(info, key) ? info[key] : undefined;
}
}
if (argv.json || argv.filter) {
cli.banner = false;
console.log(!info ? null : argv.filter ? info : JSON.stringify(info, null, 2));
return;
}
const {
green,
highlight
} = _snooplogg.default.styles;
if (info) {
console.log(green(`${info.name}@${info.version}`));
const desc = (info.description || '').trim();
if (desc) {
console.log(desc + '\n');
}
const createVersionTable = (label, versions) => {
const majors = {}; // sort versions into buckets by major version
for (const ver of versions) {
const major = _semver.default.major(ver);
if (!majors[major]) {
majors[major] = [];
}
majors[major].push(ver);
} // build the table of versions
let i = 0;
const table = (0, _amplifyCliUtils.createTable)();
for (const major of Object.keys(majors).sort().reverse()) {
const versions = majors[major].sort(_semver.default.rcompare);
if (i++) {
table.push(['']);
}
while (versions.length) {
const vers = versions.splice(0, 8);
while (vers.length < 8) {
vers.push('');
}
table.push(vers);
}
}
return label.toUpperCase() + '\n' + highlight(table.toString()) + '\n';
};
if (info.versions.length) {
console.log(createVersionTable('Available versions:', info.versions));
}
if (info.installed) {
console.log(createVersionTable('Installed versions:', Object.keys(info.installed)));
} else {
console.log(`To install this package, run:\n\n ${highlight(`axway pm install ${info.name}`)}`);
}
} else {
console.log(`No result found for ${highlight(`"${argv.package}"`)}`);
}
}
};
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZHMvdmlldy5qcyIsIm5hbWVzIjpbImFsaWFzZXMiLCJhcmdzIiwibmFtZSIsImhpbnQiLCJkZXNjIiwicmVkYWN0IiwicmVxdWlyZWQiLCJjYWxsYmFjayIsImN0eCIsInZhbHVlIiwiYmFubmVyIiwib3B0aW9ucyIsImpzb25Nb2RlIiwiYWN0aW9uIiwiYXJndiIsImNsaSIsImNvbnNvbGUiLCJpbmZvIiwicGFja2FnZSIsImZpbHRlciIsImtleSIsInNwbGl0IiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwidW5kZWZpbmVkIiwianNvbiIsImxvZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJncmVlbiIsImhpZ2hsaWdodCIsInNub29wbG9nZyIsInN0eWxlcyIsInZlcnNpb24iLCJkZXNjcmlwdGlvbiIsInRyaW0iLCJjcmVhdGVWZXJzaW9uVGFibGUiLCJsYWJlbCIsInZlcnNpb25zIiwibWFqb3JzIiwidmVyIiwibWFqb3IiLCJzZW12ZXIiLCJwdXNoIiwiaSIsInRhYmxlIiwia2V5cyIsInNvcnQiLCJyZXZlcnNlIiwicmNvbXBhcmUiLCJsZW5ndGgiLCJ2ZXJzIiwic3BsaWNlIiwidG9VcHBlckNhc2UiLCJ0b1N0cmluZyIsImluc3RhbGxlZCJdLCJzb3VyY2VzIjpbImNvbW1hbmRzL3ZpZXcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdmlldyB9IGZyb20gJy4uL3BtLmpzJztcbmltcG9ydCBzbm9vcGxvZ2cgZnJvbSAnc25vb3Bsb2dnJztcbmltcG9ydCB7IGNyZWF0ZVRhYmxlIH0gZnJvbSAnQGF4d2F5L2FtcGxpZnktY2xpLXV0aWxzJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcblxuZXhwb3J0IGRlZmF1bHQge1xuXHRhbGlhc2VzOiBbICd2JywgJyFpbmZvJywgJyFzaG93JyBdLFxuXHRhcmdzOiBbXG5cdFx0e1xuXHRcdFx0bmFtZTogJ3BhY2thZ2UnLFxuXHRcdFx0aGludDogJ3BhY2thZ2VbQHZlcnNpb25dJyxcblx0XHRcdGRlc2M6ICdUaGUgcGFja2FnZSBuYW1lIGFuZCB2ZXJzaW9uIHRvIHZpZXcnLFxuXHRcdFx0cmVkYWN0OiBmYWxzZSxcblx0XHRcdHJlcXVpcmVkOiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRuYW1lOiAnZmlsdGVyJyxcblx0XHRcdGhpbnQ6ICdmaWVsZFsuc3ViZmllbGRdJyxcblx0XHRcdGNhbGxiYWNrOiAoeyBjdHgsIHZhbHVlIH0pID0+IHtcblx0XHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdFx0Y3R4LmJhbm5lciA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZGVzYzogJ0Rpc3BsYXkgc3BlY2lmaWMgcGFja2FnZSBmaWVsZHMnLFxuXHRcdFx0cmVkYWN0OiBmYWxzZVxuXHRcdH1cblx0XSxcblx0ZGVzYzogJ0Rpc3BsYXlzIGluZm8gZm9yIGEgc3BlY2lmaWMgcGFja2FnZScsXG5cdG9wdGlvbnM6IHtcblx0XHQnLS1qc29uJzoge1xuXHRcdFx0Y2FsbGJhY2s6ICh7IGN0eCwgdmFsdWUgfSkgPT4ge1xuXHRcdFx0XHRjdHguanNvbk1vZGUgPSB2YWx1ZTtcblx0XHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdFx0Y3R4LmJhbm5lciA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZGVzYzogJ091dHB1dHMgcGFja2FnZSBpbmZvIGFzIEpTT04nXG5cdFx0fVxuXHR9LFxuXHRhc3luYyBhY3Rpb24oeyBhcmd2LCBjbGksIGNvbnNvbGUgfSkge1xuXHRcdGxldCBpbmZvID0gYXdhaXQgdmlldyhhcmd2LnBhY2thZ2UpO1xuXG5cdFx0aWYgKGFyZ3YuZmlsdGVyKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBvZiBhcmd2LmZpbHRlci5zcGxpdCgnLicpKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgaW5mbyAhPT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpbmZvID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGluZm8sIGtleSkgPyBpbmZvW2tleV0gOiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGFyZ3YuanNvbiB8fCBhcmd2LmZpbHRlcikge1xuXHRcdFx0Y2xpLmJhbm5lciA9IGZhbHNlO1xuXHRcdFx0Y29uc29sZS5sb2coIWluZm8gPyBudWxsIDogYXJndi5maWx0ZXIgPyBpbmZvIDogSlNPTi5zdHJpbmdpZnkoaW5mbywgbnVsbCwgMikpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHsgZ3JlZW4sIGhpZ2hsaWdodCB9ID0gc25vb3Bsb2dnLnN0eWxlcztcblxuXHRcdGlmIChpbmZvKSB7XG5cdFx0XHRjb25zb2xlLmxvZyhncmVlbihgJHtpbmZvLm5hbWV9QCR7aW5mby52ZXJzaW9ufWApKTtcblx0XHRcdGNvbnN0IGRlc2MgPSAoaW5mby5kZXNjcmlwdGlvbiB8fCAnJykudHJpbSgpO1xuXHRcdFx0aWYgKGRlc2MpIHtcblx0XHRcdFx0Y29uc29sZS5sb2coZGVzYyArICdcXG4nKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgY3JlYXRlVmVyc2lvblRhYmxlID0gKGxhYmVsLCB2ZXJzaW9ucykgPT4ge1xuXHRcdFx0XHRjb25zdCBtYWpvcnMgPSB7fTtcblxuXHRcdFx0XHQvLyBzb3J0IHZlcnNpb25zIGludG8gYnVja2V0cyBieSBtYWpvciB2ZXJzaW9uXG5cdFx0XHRcdGZvciAoY29uc3QgdmVyIG9mIHZlcnNpb25zKSB7XG5cdFx0XHRcdFx0Y29uc3QgbWFqb3IgPSBzZW12ZXIubWFqb3IodmVyKTtcblx0XHRcdFx0XHRpZiAoIW1ham9yc1ttYWpvcl0pIHtcblx0XHRcdFx0XHRcdG1ham9yc1ttYWpvcl0gPSBbXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bWFqb3JzW21ham9yXS5wdXNoKHZlcik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBidWlsZCB0aGUgdGFibGUgb2YgdmVyc2lvbnNcblx0XHRcdFx0bGV0IGkgPSAwO1xuXHRcdFx0XHRjb25zdCB0YWJsZSA9IGNyZWF0ZVRhYmxlKCk7XG5cdFx0XHRcdGZvciAoY29uc3QgbWFqb3Igb2YgT2JqZWN0LmtleXMobWFqb3JzKS5zb3J0KCkucmV2ZXJzZSgpKSB7XG5cdFx0XHRcdFx0Y29uc3QgdmVyc2lvbnMgPSBtYWpvcnNbbWFqb3JdLnNvcnQoc2VtdmVyLnJjb21wYXJlKTtcblx0XHRcdFx0XHRpZiAoaSsrKSB7XG5cdFx0XHRcdFx0XHR0YWJsZS5wdXNoKFsgJycgXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHdoaWxlICh2ZXJzaW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHZlcnMgPSB2ZXJzaW9ucy5zcGxpY2UoMCwgOCk7XG5cdFx0XHRcdFx0XHR3aGlsZSAodmVycy5sZW5ndGggPCA4KSB7XG5cdFx0XHRcdFx0XHRcdHZlcnMucHVzaCgnJyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0YWJsZS5wdXNoKHZlcnMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBsYWJlbC50b1VwcGVyQ2FzZSgpICsgJ1xcbicgKyBoaWdobGlnaHQodGFibGUudG9TdHJpbmcoKSkgKyAnXFxuJztcblx0XHRcdH07XG5cblx0XHRcdGlmIChpbmZvLnZlcnNpb25zLmxlbmd0aCkge1xuXHRcdFx0XHRjb25zb2xlLmxvZyhjcmVhdGVWZXJzaW9uVGFibGUoJ0F2YWlsYWJsZSB2ZXJzaW9uczonLCBpbmZvLnZlcnNpb25zKSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpbmZvLmluc3RhbGxlZCkge1xuXHRcdFx0XHRjb25zb2xlLmxvZyhjcmVhdGVWZXJzaW9uVGFibGUoJ0luc3RhbGxlZCB2ZXJzaW9uczonLCBPYmplY3Qua2V5cyhpbmZvLmluc3RhbGxlZCkpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKGBUbyBpbnN0YWxsIHRoaXMgcGFja2FnZSwgcnVuOlxcblxcbiAgJHtoaWdobGlnaHQoYGF4d2F5IHBtIGluc3RhbGwgJHtpbmZvLm5hbWV9YCl9YCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnNvbGUubG9nKGBObyByZXN1bHQgZm91bmQgZm9yICR7aGlnaGxpZ2h0KGBcIiR7YXJndi5wYWNrYWdlfVwiYCl9YCk7XG5cdFx0fVxuXHR9XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7ZUFFZTtFQUNkQSxPQUFPLEVBQUUsQ0FBRSxHQUFGLEVBQU8sT0FBUCxFQUFnQixPQUFoQixDQURLO0VBRWRDLElBQUksRUFBRSxDQUNMO0lBQ0NDLElBQUksRUFBRSxTQURQO0lBRUNDLElBQUksRUFBRSxtQkFGUDtJQUdDQyxJQUFJLEVBQUUsc0NBSFA7SUFJQ0MsTUFBTSxFQUFFLEtBSlQ7SUFLQ0MsUUFBUSxFQUFFO0VBTFgsQ0FESyxFQVFMO0lBQ0NKLElBQUksRUFBRSxRQURQO0lBRUNDLElBQUksRUFBRSxrQkFGUDtJQUdDSSxRQUFRLEVBQUUsQ0FBQztNQUFFQyxHQUFGO01BQU9DO0lBQVAsQ0FBRCxLQUFvQjtNQUM3QixJQUFJQSxLQUFKLEVBQVc7UUFDVkQsR0FBRyxDQUFDRSxNQUFKLEdBQWEsS0FBYjtNQUNBO0lBQ0QsQ0FQRjtJQVFDTixJQUFJLEVBQUUsaUNBUlA7SUFTQ0MsTUFBTSxFQUFFO0VBVFQsQ0FSSyxDQUZRO0VBc0JkRCxJQUFJLEVBQUUsc0NBdEJRO0VBdUJkTyxPQUFPLEVBQUU7SUFDUixVQUFVO01BQ1RKLFFBQVEsRUFBRSxDQUFDO1FBQUVDLEdBQUY7UUFBT0M7TUFBUCxDQUFELEtBQW9CO1FBQzdCRCxHQUFHLENBQUNJLFFBQUosR0FBZUgsS0FBZjs7UUFDQSxJQUFJQSxLQUFKLEVBQVc7VUFDVkQsR0FBRyxDQUFDRSxNQUFKLEdBQWEsS0FBYjtRQUNBO01BQ0QsQ0FOUTtNQU9UTixJQUFJLEVBQUU7SUFQRztFQURGLENBdkJL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