All files / piscosour/plugins/system-checker index.js

0% Statements 0/29
0% Branches 0/19
0% Functions 0/8
0% Lines 0/28
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52                                                                                                       
'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.piscoConfig.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 ]));
    }
  }
};