UNPKG

1.69 kBJavaScriptView Raw
1var log = require('debug')('ggit')
2var la = require('lazy-ass')
3var check = require('check-more-types')
4var glob = require('glob')
5var q = require('q')
6var folder = require('chdir-promise')
7var isTracked = require('./is-file-tracked')
8var R = require('ramda')
9
10la(check.fn(glob), 'missing glob')
11la(check.fn(isTracked), 'missing is tracked')
12
13function is3rdParty (filename) {
14 return /node_modules/.test(filename) || /bower_components/.test(filename)
15}
16
17function isGitFile (filename) {
18 return filename === '.git' || /^\.git\//.test(filename)
19}
20
21function findFiles (pattern, options) {
22 pattern = pattern || '**/*.js'
23 var allFiles = glob.sync(pattern, options)
24 var appFiles = allFiles.filter(R.not(isGitFile)).filter(R.not(is3rdParty))
25 log('found files\n' + appFiles.join('\n'))
26 return q(appFiles)
27}
28
29function leaveTracked (filenames) {
30 la(check.arrayOfStrings(filenames), 'expected list of filenames', filenames)
31 return q
32 .all(filenames.map(isTracked))
33 .then(R.zipObj(filenames))
34 .then(R.pickBy(R.eq(true)))
35 .then(R.keys)
36}
37
38function sourceFiles (folderName, pattern, options) {
39 if (folderName) {
40 return folder
41 .to(folderName)
42 .then(findFiles.bind(null, pattern, options))
43 .then(leaveTracked)
44 .tap(folder.back)
45 }
46 return findFiles(pattern, options).then(leaveTracked)
47}
48
49module.exports = check.defend(
50 sourceFiles,
51 check.maybe.unemptyString,
52 'expected folder name',
53 check.maybe.unemptyString,
54 'expected glob pattern',
55 check.maybe.object,
56 'expected glob options'
57)
58
59if (!module.parent) {
60 sourceFiles('.', '**', { dot: true })
61 .then(console.log.bind(console))
62 .catch(console.error.bind(console))
63}