all files / lib/ list.js

93.94% Statements 31/33
78.57% Branches 11/14
87.5% Functions 7/8
93.94% Lines 31/33
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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67                                                                       
'use strict';
 
var _ = require('lodash');
var treeify = require('treeify');
 
var fecom = require('./fecom');
var getInstalled = require('./component/getInstalled');
var Spinner = require('cli-spinner').Spinner;
 
var spinner = new Spinner(fecom.i18n('CHECKING_UPDATE'));
 
module.exports = function (semList, options) {
 
  return getInstalled()
    .then(function (installed) {
 
      Iif (semList.length) {
        installed = installed.filter(function (component) {
          return ~semList.indexOf(component.name);
        });
      }
 
      return installed;
    })
    .then(function (installed) {
 
      if (options.update) {
        spinner.setSpinnerString('|/-\\');
        spinner.start();
        return Promise.all(installed.map(function (component) {
          return component.checkUpdate();
        }));
      }
 
      return installed;
    })
    .then(function (installed) {
      var map = {};
      var rootName = fecom.config.name;
      var rootVersion = fecom.config.version;
      var tree, str;
 
      if (options.update) {
        spinner.stop(true);
      }
 
      map = _.zipObject(installed.map(function (component) {
 
        if (options.update) {
          component.status = component.hasUpdate ? component.latest.yellow : fecom.i18n('NO_UPDATE_AVAILABLE');
        }
 
        return component.stringify();
      }));
 
      tree = treeify.asTree(map);
 
      str = rootName ? (rootName + (rootVersion ? '@' + rootVersion : '') + '\n') : '';
 
      fecom.logger.info(fecom.i18n('COMPONENT_VERSIONS', str + tree));
      return installed.map(function (component) {
        return _(component).pick(['name', 'owner', 'version', 'hasUpdate', 'latest']).value();
      });
    })
    .catch(fecom.errorHandler);
 
};