| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | 'use strict';var Promise = require('pinkie-promise');var arrayUnion = require('array-union');var objectAssign = require('object-assign');var glob = require('glob');var pify = require('pify');var globP = pify(glob, Promise).bind(glob);function isNegative(pattern) {	return pattern[0] === '!';}function isString(value) {	return typeof value === 'string';}function assertPatternsInput(patterns) {	if (!patterns.every(isString)) {		throw new TypeError('patterns must be a string or an array of strings');	}}function generateGlobTasks(patterns, opts) {	patterns = [].concat(patterns);	assertPatternsInput(patterns);	var globTasks = [];	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;	try {		globTasks = generateGlobTasks(patterns, opts);	} catch (err) {		return Promise.reject(err);	}	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;module.exports.hasMagic = function (patterns, opts) {	return [].concat(patterns).some(function (pattern) {		return glob.hasMagic(pattern, opts);	});};
 |