Blame view

node_modules/globby/index.js 1.49 KB
f7563de62   Palak Handa   first commit
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
  'use strict';
  var Promise = require('pinkie-promise');
  var arrayUnion = require('array-union');
  var objectAssign = require('object-assign');
  var glob = require('glob');
  var arrify = require('arrify');
  var pify = require('pify');
  
  var globP = pify(glob, Promise).bind(glob);
  
  function isNegative(pattern) {
  	return pattern[0] === '!';
  }
  
  function generateGlobTasks(patterns, opts) {
  	var globTasks = [];
  
  	patterns = arrify(patterns);
  	opts = objectAssign({
  		cache: Object.create(null),
  		statCache: Object.create(null),
  		realpathCache: Object.create(null),
  		symlinks: Object.create(null),
  		ignore: []
  	}, opts);
  
  	patterns.forEach(function (pattern, i) {
  		if (isNegative(pattern)) {
  			return;
  		}
  
  		var ignore = patterns.slice(i).filter(isNegative).map(function (pattern) {
  			return pattern.slice(1);
  		});
  
  		globTasks.push({
  			pattern: pattern,
  			opts: objectAssign({}, opts, {
  				ignore: opts.ignore.concat(ignore)
  			})
  		});
  	});
  
  	return globTasks;
  }
  
  module.exports = function (patterns, opts) {
  	var globTasks = generateGlobTasks(patterns, opts);
  
  	return Promise.all(globTasks.map(function (task) {
  		return globP(task.pattern, task.opts);
  	})).then(function (paths) {
  		return arrayUnion.apply(null, paths);
  	});
  };
  
  module.exports.sync = function (patterns, opts) {
  	var globTasks = generateGlobTasks(patterns, opts);
  
  	return globTasks.reduce(function (matches, task) {
  		return arrayUnion(matches, glob.sync(task.pattern, task.opts));
  	}, []);
  };
  
  module.exports.generateGlobTasks = generateGlobTasks;