You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							148 lines
						
					
					
						
							4.4 KiB
						
					
					
				
			
		
		
	
	
							148 lines
						
					
					
						
							4.4 KiB
						
					
					
				"use strict"; | 
						|
Object.defineProperty(exports, "__esModule", { value: true }); | 
						|
var path = require("path"); | 
						|
var globParent = require("glob-parent"); | 
						|
var isGlob = require("is-glob"); | 
						|
var micromatch = require("micromatch"); | 
						|
var GLOBSTAR = '**'; | 
						|
/** | 
						|
 * Return true for static pattern. | 
						|
 */ | 
						|
function isStaticPattern(pattern) { | 
						|
    return !isDynamicPattern(pattern); | 
						|
} | 
						|
exports.isStaticPattern = isStaticPattern; | 
						|
/** | 
						|
 * Return true for pattern that looks like glob. | 
						|
 */ | 
						|
function isDynamicPattern(pattern) { | 
						|
    return isGlob(pattern, { strict: false }); | 
						|
} | 
						|
exports.isDynamicPattern = isDynamicPattern; | 
						|
/** | 
						|
 * Convert a windows «path» to a unix-style «path». | 
						|
 */ | 
						|
function unixifyPattern(pattern) { | 
						|
    return pattern.replace(/\\/g, '/'); | 
						|
} | 
						|
exports.unixifyPattern = unixifyPattern; | 
						|
/** | 
						|
 * Returns negative pattern as positive pattern. | 
						|
 */ | 
						|
function convertToPositivePattern(pattern) { | 
						|
    return isNegativePattern(pattern) ? pattern.slice(1) : pattern; | 
						|
} | 
						|
exports.convertToPositivePattern = convertToPositivePattern; | 
						|
/** | 
						|
 * Returns positive pattern as negative pattern. | 
						|
 */ | 
						|
function convertToNegativePattern(pattern) { | 
						|
    return '!' + pattern; | 
						|
} | 
						|
exports.convertToNegativePattern = convertToNegativePattern; | 
						|
/** | 
						|
 * Return true if provided pattern is negative pattern. | 
						|
 */ | 
						|
function isNegativePattern(pattern) { | 
						|
    return pattern.startsWith('!') && pattern[1] !== '('; | 
						|
} | 
						|
exports.isNegativePattern = isNegativePattern; | 
						|
/** | 
						|
 * Return true if provided pattern is positive pattern. | 
						|
 */ | 
						|
function isPositivePattern(pattern) { | 
						|
    return !isNegativePattern(pattern); | 
						|
} | 
						|
exports.isPositivePattern = isPositivePattern; | 
						|
/** | 
						|
 * Extracts negative patterns from array of patterns. | 
						|
 */ | 
						|
function getNegativePatterns(patterns) { | 
						|
    return patterns.filter(isNegativePattern); | 
						|
} | 
						|
exports.getNegativePatterns = getNegativePatterns; | 
						|
/** | 
						|
 * Extracts positive patterns from array of patterns. | 
						|
 */ | 
						|
function getPositivePatterns(patterns) { | 
						|
    return patterns.filter(isPositivePattern); | 
						|
} | 
						|
exports.getPositivePatterns = getPositivePatterns; | 
						|
/** | 
						|
 * Extract base directory from provided pattern. | 
						|
 */ | 
						|
function getBaseDirectory(pattern) { | 
						|
    return globParent(pattern); | 
						|
} | 
						|
exports.getBaseDirectory = getBaseDirectory; | 
						|
/** | 
						|
 * Return true if provided pattern has globstar. | 
						|
 */ | 
						|
function hasGlobStar(pattern) { | 
						|
    return pattern.indexOf(GLOBSTAR) !== -1; | 
						|
} | 
						|
exports.hasGlobStar = hasGlobStar; | 
						|
/** | 
						|
 * Return true if provided pattern ends with slash and globstar. | 
						|
 */ | 
						|
function endsWithSlashGlobStar(pattern) { | 
						|
    return pattern.endsWith('/' + GLOBSTAR); | 
						|
} | 
						|
exports.endsWithSlashGlobStar = endsWithSlashGlobStar; | 
						|
/** | 
						|
 * Returns «true» when pattern ends with a slash and globstar or the last partial of the pattern is static pattern. | 
						|
 */ | 
						|
function isAffectDepthOfReadingPattern(pattern) { | 
						|
    var basename = path.basename(pattern); | 
						|
    return endsWithSlashGlobStar(pattern) || isStaticPattern(basename); | 
						|
} | 
						|
exports.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern; | 
						|
/** | 
						|
 * Return naive depth of provided pattern without depth of the base directory. | 
						|
 */ | 
						|
function getNaiveDepth(pattern) { | 
						|
    var base = getBaseDirectory(pattern); | 
						|
    var patternDepth = pattern.split('/').length; | 
						|
    var patternBaseDepth = base.split('/').length; | 
						|
    /** | 
						|
     * This is a hack for pattern that has no base directory. | 
						|
     * | 
						|
     * This is related to the `*\something\*` pattern. | 
						|
     */ | 
						|
    if (base === '.') { | 
						|
        return patternDepth - patternBaseDepth; | 
						|
    } | 
						|
    return patternDepth - patternBaseDepth - 1; | 
						|
} | 
						|
exports.getNaiveDepth = getNaiveDepth; | 
						|
/** | 
						|
 * Return max naive depth of provided patterns without depth of the base directory. | 
						|
 */ | 
						|
function getMaxNaivePatternsDepth(patterns) { | 
						|
    return patterns.reduce(function (max, pattern) { | 
						|
        var depth = getNaiveDepth(pattern); | 
						|
        return depth > max ? depth : max; | 
						|
    }, 0); | 
						|
} | 
						|
exports.getMaxNaivePatternsDepth = getMaxNaivePatternsDepth; | 
						|
/** | 
						|
 * Make RegExp for provided pattern. | 
						|
 */ | 
						|
function makeRe(pattern, options) { | 
						|
    return micromatch.makeRe(pattern, options); | 
						|
} | 
						|
exports.makeRe = makeRe; | 
						|
/** | 
						|
 * Convert patterns to regexps. | 
						|
 */ | 
						|
function convertPatternsToRe(patterns, options) { | 
						|
    return patterns.map(function (pattern) { return makeRe(pattern, options); }); | 
						|
} | 
						|
exports.convertPatternsToRe = convertPatternsToRe; | 
						|
/** | 
						|
 * Returns true if the entry match any of the given RegExp's. | 
						|
 */ | 
						|
function matchAny(entry, patternsRe) { | 
						|
    return patternsRe.some(function (patternRe) { return patternRe.test(entry); }); | 
						|
} | 
						|
exports.matchAny = matchAny;
 | 
						|
 |