summaryrefslogtreecommitdiff
path: root/node_modules/maximatch/index.js
blob: c8fa8d6d4c466b3970d7c481e7fdc2e177ed8d2c (plain)
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
'use strict';
var minimatch = require('minimatch');
var arrayUnion = require('array-union');
var arrayDiffer = require('array-differ');
var arrify = require('arrify');

module.exports = function (list, patterns, options) {
	list = arrify(list);
	patterns = arrify(patterns);

	if (list.length === 0 || patterns.length === 0) {
		return [];
	}

	options = options || {};

	return patterns.reduce(function (ret, pattern) {
		if (typeof pattern === 'function') {

			return arrayUnion(ret, list.filter(pattern));

		} else if (pattern instanceof RegExp) {

			return arrayUnion(ret, list.filter(function(item) {
				return pattern.test(item);
			}));

		} else {
			var process = arrayUnion;

			if (pattern[0] === '!') {
				pattern = pattern.slice(1);
				process = arrayDiffer;
			}

			return process(ret, minimatch.match(list, pattern, options));
		}
	}, []);
};