Code coverage report for ggit/src/tracked-source-files.js

Statements: 96% (24 / 25)      Branches: 83.33% (5 / 6)      Functions: 100% (4 / 4)      Lines: 96% (24 / 25)      Ignored: none     

All files » ggit/src/ » tracked-source-files.js
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 471 1 1 1 1 1 1   1 1   1 5       1 1 1 1 1 1     1 1 1           1 1 1                 1      
require('lazy-ass');
var check = require('check-more-types');
var glob = require('glob');
var q = require('q');
var folder = require('chdir-promise');
var isTracked = require('./is-file-tracked');
var R = require('ramda');
 
la(check.fn(glob), 'missing glob');
la(check.fn(isTracked), 'missing is tracked');
 
function is3rdParty(filename) {
  return /node\_modules/.test(filename) ||
    /bower\_components/.test(filename);
}
 
function findFiles(pattern) {
  pattern = pattern || '**/*.js';
  var jsFiles = glob.sync(pattern);
  var appFiles = jsFiles.filter(R.not(is3rdParty));
  console.log('found files\n' + appFiles.join('\n'));
  return q(appFiles);
}
 
function leaveTracked(filenames) {
  la(check.arrayOfStrings(filenames), 'expected list of filenames', filenames);
  return q.all(filenames.map(isTracked))
    .then(R.zipObj(filenames))
    .then(R.pickBy(R.eq(true)))
    .then(R.keys);
}
 
function sourceFiles(folderName, pattern) {
  Eif (folderName) {
    return folder.to(folderName)
      .then(findFiles.bind(null, pattern))
      .then(leaveTracked)
      .tap(folder.back);
  }
  return findFiles(pattern)
    .then(leaveTracked);
}
 
module.exports = check.defend(sourceFiles,
  check.maybe.unemptyString, 'expected folder name',
  check.maybe.unemptyString, 'expected glob pattern');