@axway/axway-cli-pm
Version:
Package manager for Axway products
151 lines (125 loc) • 14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _snooplogg = _interopRequireDefault(require("snooplogg"));
var _cliKit = require("cli-kit");
var _pm = require("../pm.js");
var _amplifyCliUtils = require("@axway/amplify-cli-utils");
var _utils = require("../utils.js");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var _default = {
aliases: ['i'],
args: [{
name: 'packages...',
hint: 'package[@version]',
desc: 'One or more packages by name and version to install',
redact: false,
required: true
}],
desc: 'Install a package',
options: {
'--json': {
callback: ({
ctx,
value
}) => ctx.jsonMode = value,
desc: 'Output installed package as JSON'
}
},
skipExtensionUpdateCheck: true,
async action({
argv,
cli,
console,
exitCode
}) {
const {
alert,
highlight
} = _snooplogg.default.styles;
const tasks = [];
const results = {
installed: [],
failures: []
};
const packages = (Array.isArray(argv.packages) ? argv.packages : [argv.packages]).filter(Boolean);
if (!packages.length) {
throw new TypeError('Expected one or more package names');
}
this.skipExtensionUpdateCheck = true;
for (const pkg of packages) {
tasks.push({
title: `Fetching metadata ${highlight(pkg)}`,
async task(ctx, task) {
try {
await new Promise((resolve, reject) => {
(0, _pm.install)(pkg).on('download', ({
name,
version
}) => {
task.title = `Downloading ${highlight(`${name}@${version}`)}`;
}).on('install', ({
name,
version
}) => {
task.title = `Installing ${highlight(`${name}@${version}`)}`;
}).on('register', ({
name,
version
}) => {
task.title = `Registering ${highlight(`${name}@${version}`)}`;
}).on('end', info => {
task.title = `Installed ${highlight(`${info.name}@${info.version}`)}`;
results.installed.push(info);
resolve();
}).on('error', reject);
});
} catch (err) {
results.failures.push({
error: err.toString(),
package: pkg
});
task.title = alert(err.toString());
err.message = undefined; // prevent the error from rendering twice
exitCode(1);
throw err;
}
}
});
}
try {
await (0, _utils.runListr)({
console,
json: argv.json,
tasks
});
} catch (err) {// errors are stored in the results
}
const cfg = await (0, _amplifyCliUtils.loadConfig)();
await cfg.delete('update.notified');
await cfg.save();
if (argv.json) {
console.log(JSON.stringify(results, null, 2));
}
for (const info of results.installed) {
if (info.type === 'amplify-cli-plugin') {
const ext = new _cliKit.Extension(info.path); // load the extension that was just installed so that it can receive the `axway:pm:install` action
cli.extension(ext);
if (!argv.json) {
const cmds = Object.keys(ext.exports);
if (cmds.length) {
console.log(`\nTo use this new extension, run${cmds.length > 1 ? ' one of the following' : ''}:\n`);
for (const name of cmds) {
console.log(highlight(` axway ${name}`));
}
}
}
}
await cli.emitAction('axway:pm:install', info);
}
}
};
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZHMvaW5zdGFsbC5qcyIsIm5hbWVzIjpbImFsaWFzZXMiLCJhcmdzIiwibmFtZSIsImhpbnQiLCJkZXNjIiwicmVkYWN0IiwicmVxdWlyZWQiLCJvcHRpb25zIiwiY2FsbGJhY2siLCJjdHgiLCJ2YWx1ZSIsImpzb25Nb2RlIiwic2tpcEV4dGVuc2lvblVwZGF0ZUNoZWNrIiwiYWN0aW9uIiwiYXJndiIsImNsaSIsImNvbnNvbGUiLCJleGl0Q29kZSIsImFsZXJ0IiwiaGlnaGxpZ2h0Iiwic25vb3Bsb2dnIiwic3R5bGVzIiwidGFza3MiLCJyZXN1bHRzIiwiaW5zdGFsbGVkIiwiZmFpbHVyZXMiLCJwYWNrYWdlcyIsIkFycmF5IiwiaXNBcnJheSIsImZpbHRlciIsIkJvb2xlYW4iLCJsZW5ndGgiLCJUeXBlRXJyb3IiLCJwa2ciLCJwdXNoIiwidGl0bGUiLCJ0YXNrIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJvbiIsInZlcnNpb24iLCJpbmZvIiwiZXJyIiwiZXJyb3IiLCJ0b1N0cmluZyIsInBhY2thZ2UiLCJtZXNzYWdlIiwidW5kZWZpbmVkIiwianNvbiIsImNmZyIsImRlbGV0ZSIsInNhdmUiLCJsb2ciLCJKU09OIiwic3RyaW5naWZ5IiwidHlwZSIsImV4dCIsIkV4dGVuc2lvbiIsInBhdGgiLCJleHRlbnNpb24iLCJjbWRzIiwiT2JqZWN0Iiwia2V5cyIsImV4cG9ydHMiLCJlbWl0QWN0aW9uIl0sInNvdXJjZXMiOlsiY29tbWFuZHMvaW5zdGFsbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc25vb3Bsb2dnIGZyb20gJ3Nub29wbG9nZyc7XG5pbXBvcnQgeyBFeHRlbnNpb24gfSBmcm9tICdjbGkta2l0JztcbmltcG9ydCB7IGluc3RhbGwgfSBmcm9tICcuLi9wbS5qcyc7XG5pbXBvcnQgeyBsb2FkQ29uZmlnIH0gZnJvbSAnQGF4d2F5L2FtcGxpZnktY2xpLXV0aWxzJztcbmltcG9ydCB7IHJ1bkxpc3RyIH0gZnJvbSAnLi4vdXRpbHMuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG5cdGFsaWFzZXM6IFsgJ2knIF0sXG5cdGFyZ3M6IFtcblx0XHR7XG5cdFx0XHRuYW1lOiAncGFja2FnZXMuLi4nLFxuXHRcdFx0aGludDogJ3BhY2thZ2VbQHZlcnNpb25dJyxcblx0XHRcdGRlc2M6ICdPbmUgb3IgbW9yZSBwYWNrYWdlcyBieSBuYW1lIGFuZCB2ZXJzaW9uIHRvIGluc3RhbGwnLFxuXHRcdFx0cmVkYWN0OiBmYWxzZSxcblx0XHRcdHJlcXVpcmVkOiB0cnVlXG5cdFx0fVxuXHRdLFxuXHRkZXNjOiAnSW5zdGFsbCBhIHBhY2thZ2UnLFxuXHRvcHRpb25zOiB7XG5cdFx0Jy0tanNvbic6IHtcblx0XHRcdGNhbGxiYWNrOiAoeyBjdHgsIHZhbHVlIH0pID0+IGN0eC5qc29uTW9kZSA9IHZhbHVlLFxuXHRcdFx0ZGVzYzogJ091dHB1dCBpbnN0YWxsZWQgcGFja2FnZSBhcyBKU09OJ1xuXHRcdH1cblx0fSxcblx0c2tpcEV4dGVuc2lvblVwZGF0ZUNoZWNrOiB0cnVlLFxuXHRhc3luYyBhY3Rpb24oeyBhcmd2LCBjbGksIGNvbnNvbGUsIGV4aXRDb2RlIH0pIHtcblx0XHRjb25zdCB7IGFsZXJ0LCBoaWdobGlnaHQgfSA9IHNub29wbG9nZy5zdHlsZXM7XG5cdFx0Y29uc3QgdGFza3MgPSBbXTtcblx0XHRjb25zdCByZXN1bHRzID0ge1xuXHRcdFx0aW5zdGFsbGVkOiBbXSxcblx0XHRcdGZhaWx1cmVzOiBbXVxuXHRcdH07XG5cblx0XHRjb25zdCBwYWNrYWdlcyA9IChBcnJheS5pc0FycmF5KGFyZ3YucGFja2FnZXMpID8gYXJndi5wYWNrYWdlcyA6IFsgYXJndi5wYWNrYWdlcyBdKS5maWx0ZXIoQm9vbGVhbik7XG5cdFx0aWYgKCFwYWNrYWdlcy5sZW5ndGgpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIG9uZSBvciBtb3JlIHBhY2thZ2UgbmFtZXMnKTtcblx0XHR9XG5cblx0XHR0aGlzLnNraXBFeHRlbnNpb25VcGRhdGVDaGVjayA9IHRydWU7XG5cblx0XHRmb3IgKGNvbnN0IHBrZyBvZiBwYWNrYWdlcykge1xuXHRcdFx0dGFza3MucHVzaCh7XG5cdFx0XHRcdHRpdGxlOiBgRmV0Y2hpbmcgbWV0YWRhdGEgJHtoaWdobGlnaHQocGtnKX1gLFxuXHRcdFx0XHRhc3luYyB0YXNrKGN0eCwgdGFzaykge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdFx0XHRcdGluc3RhbGwocGtnKVxuXHRcdFx0XHRcdFx0XHRcdC5vbignZG93bmxvYWQnLCAoeyBuYW1lLCB2ZXJzaW9uIH0pID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdHRhc2sudGl0bGUgPSBgRG93bmxvYWRpbmcgJHtoaWdobGlnaHQoYCR7bmFtZX1AJHt2ZXJzaW9ufWApfWA7XG5cdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHQub24oJ2luc3RhbGwnLCAoeyBuYW1lLCB2ZXJzaW9uIH0pID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdHRhc2sudGl0bGUgPSBgSW5zdGFsbGluZyAke2hpZ2hsaWdodChgJHtuYW1lfUAke3ZlcnNpb259YCl9YDtcblx0XHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHRcdC5vbigncmVnaXN0ZXInLCAoeyBuYW1lLCB2ZXJzaW9uIH0pID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdHRhc2sudGl0bGUgPSBgUmVnaXN0ZXJpbmcgJHtoaWdobGlnaHQoYCR7bmFtZX1AJHt2ZXJzaW9ufWApfWA7XG5cdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHQub24oJ2VuZCcsIGluZm8gPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGFzay50aXRsZSA9IGBJbnN0YWxsZWQgJHtoaWdobGlnaHQoYCR7aW5mby5uYW1lfUAke2luZm8udmVyc2lvbn1gKX1gO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0cy5pbnN0YWxsZWQucHVzaChpbmZvKTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHRcdC5vbignZXJyb3InLCByZWplY3QpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHRzLmZhaWx1cmVzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRlcnJvcjogZXJyLnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0XHRcdHBhY2thZ2U6IHBrZ1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR0YXNrLnRpdGxlID0gYWxlcnQoZXJyLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRcdFx0ZXJyLm1lc3NhZ2UgPSB1bmRlZmluZWQ7IC8vIHByZXZlbnQgdGhlIGVycm9yIGZyb20gcmVuZGVyaW5nIHR3aWNlXG5cdFx0XHRcdFx0XHRleGl0Q29kZSgxKTtcblx0XHRcdFx0XHRcdHRocm93IGVycjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCBydW5MaXN0cih7IGNvbnNvbGUsIGpzb246IGFyZ3YuanNvbiwgdGFza3MgfSk7XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHQvLyBlcnJvcnMgYXJlIHN0b3JlZCBpbiB0aGUgcmVzdWx0c1xuXHRcdH1cblxuXHRcdGNvbnN0IGNmZyA9IGF3YWl0IGxvYWRDb25maWcoKTtcblx0XHRhd2FpdCBjZmcuZGVsZXRlKCd1cGRhdGUubm90aWZpZWQnKTtcblx0XHRhd2FpdCBjZmcuc2F2ZSgpO1xuXG5cdFx0aWYgKGFyZ3YuanNvbikge1xuXHRcdFx0Y29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVzdWx0cywgbnVsbCwgMikpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgaW5mbyBvZiByZXN1bHRzLmluc3RhbGxlZCkge1xuXHRcdFx0aWYgKGluZm8udHlwZSA9PT0gJ2FtcGxpZnktY2xpLXBsdWdpbicpIHtcblx0XHRcdFx0Y29uc3QgZXh0ID0gbmV3IEV4dGVuc2lvbihpbmZvLnBhdGgpO1xuXG5cdFx0XHRcdC8vIGxvYWQgdGhlIGV4dGVuc2lvbiB0aGF0IHdhcyBqdXN0IGluc3RhbGxlZCBzbyB0aGF0IGl0IGNhbiByZWNlaXZlIHRoZSBgYXh3YXk6cG06aW5zdGFsbGAgYWN0aW9uXG5cdFx0XHRcdGNsaS5leHRlbnNpb24oZXh0KTtcblxuXHRcdFx0XHRpZiAoIWFyZ3YuanNvbikge1xuXHRcdFx0XHRcdGNvbnN0IGNtZHMgPSBPYmplY3Qua2V5cyhleHQuZXhwb3J0cyk7XG5cdFx0XHRcdFx0aWYgKGNtZHMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgXFxuVG8gdXNlIHRoaXMgbmV3IGV4dGVuc2lvbiwgcnVuJHtjbWRzLmxlbmd0aCA+IDEgPyAnIG9uZSBvZiB0aGUgZm9sbG93aW5nJyA6ICcnfTpcXG5gKTtcblx0XHRcdFx0XHRcdGZvciAoY29uc3QgbmFtZSBvZiBjbWRzKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGhpZ2hsaWdodChgICBheHdheSAke25hbWV9YCkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRhd2FpdCBjbGkuZW1pdEFjdGlvbignYXh3YXk6cG06aW5zdGFsbCcsIGluZm8pO1xuXHRcdH1cblx0fVxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O2VBRWU7RUFDZEEsT0FBTyxFQUFFLENBQUUsR0FBRixDQURLO0VBRWRDLElBQUksRUFBRSxDQUNMO0lBQ0NDLElBQUksRUFBRSxhQURQO0lBRUNDLElBQUksRUFBRSxtQkFGUDtJQUdDQyxJQUFJLEVBQUUscURBSFA7SUFJQ0MsTUFBTSxFQUFFLEtBSlQ7SUFLQ0MsUUFBUSxFQUFFO0VBTFgsQ0FESyxDQUZRO0VBV2RG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