all files / lib/component/ getInstalled.js

100% Statements 31/31
60% Branches 9/15
100% Functions 6/6
100% Lines 31/31
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          15× 15× 15× 15× 15× 30×   30× 30×     30×     15× 30×         15×       15× 15×     15× 75×     15×   15× 15× 15× 60× 60× 60×             60×        
'use strict';
 
var path = require('path');
 
var _ = require('lodash');
var fs = require('graceful-fs');
 
var fecom = require('../fecom');
var Component = require('./Component');
var Tree = require('./Tree');
 
module.exports = function () {
  var componentDir = fecom.componentRoot;
  var files = [];
  var dependencies = fecom.config.dependencies || [];
  var children;
  dependencies = dependencies.map(function (semantic) {
    var parsed = fecom.parse(semantic);
 
    Eif (!(parsed.hasOwnProperty('resolved') && parsed.resolved)) {
      parsed.specified = true;
    }
 
    return parsed;
  });
 
  children = dependencies.map(function (parsed) {
    return {
      props: parsed
    };
  });
 
  var rootComponent = new Component(null, 'root', {
    children: children
  });
 
  Eif (fs.existsSync(componentDir)) {
    files = fs.readdirSync(componentDir);
  }
 
  files = files.filter(function (file) {
    return !_.startsWith(file, '.');
  });
 
  return rootComponent.getLocalDependenciesTree()
    .then(function (filledTree) {
      var treeModel = new Tree(filledTree);
      var installed = treeModel.getAllNodes('DFS').slice(1);
      return Promise.all(files.map(function (file) {
        var matchedSpecified = _.find(dependencies, { name: file }) || {};
        var matchedInstalled = _.find(installed, { name: file}) || {};
        var schema = {
          name: file,
          owner: matchedSpecified.owner || matchedInstalled.owner || fecom.config.owner,
          specified: Boolean(matchedSpecified.specified),
          resolved: Boolean(matchedSpecified.resolved)
        };
 
        return fecom.async(new Component(schema, 'local'));
      }));
    });
 
};