UNPKG

@axway/axway-cli-pm

Version:

Package manager for Axway products

151 lines (125 loc) 14 kB
"use strict"; 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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