UNPKG

runas-core

Version:

The adhesive orchestrator

52 lines (45 loc) 2.06 kB
'use strict'; // Plugins: ['launcher'] const requirements = require('../../lib/utils/requirements'); module.exports = { 'core-check': function() { if (this.params.requirements && (!this.params.disableSystemCheck || this.params.disableSystemCheck === 'null')) { const tmp = this.params.requirements; this.params.requirements = this.runasConfig.mergeObject(this.params.versions, this.params.requirements); const promises = []; Object.getOwnPropertyNames(tmp).forEach((cmd) => { const options = this.params.requirements[cmd]; const father = this.params.requirements[options.listedIn]; promises.push(Promise.resolve() .then(() => requirements.sh(cmd, options, father)) .then((result) => requirements.check(cmd, options, result, father), (result) => requirements.check(cmd, options, result, father)) .catch((checked) => { if (options.installer && this.params.requirements[options.installer]) { options.cmdInstaller = this.params.requirements[options.installer].cmdInstaller; return this.systemInstall(cmd, options) .then(() => requirements.sh(cmd, options, father, true) .catch((e) => this.logger.trace('ignored error! ->', e))) } else if (!this.params.neverStop) { throw checked; } }) ); }); return Promise.all(promises); } }, addons: { systemInstallable(cmd, option) { let p = option.uri ? `git+${option.uri}` : (option.pkg ? option.pkg : cmd); const versionchar = option.uri ? '#' : '@'; p = option.version ? `${p}${versionchar}${option.version}` : p; return p; }, systemInstall(cmd, option) { this.logger.info('#cyan', cmd, 'is required -> ', '#green', cmd, 'is installing...'); const installable = this.systemInstallable(cmd, option); const cmds = option.cmdInstaller.split(' '); return this.execute(cmds[0], cmds.slice(1).concat([ installable ])); } } };