2 Object.defineProperty(exports, "__esModule", { value: true });
\r
3 var path = require("path");
\r
4 var globParent = require("glob-parent");
\r
5 var isGlob = require("is-glob");
\r
6 var micromatch = require("micromatch");
\r
9 * Return true for static pattern.
\r
11 function isStaticPattern(pattern) {
\r
12 return !isDynamicPattern(pattern);
\r
14 exports.isStaticPattern = isStaticPattern;
\r
16 * Return true for pattern that looks like glob.
\r
18 function isDynamicPattern(pattern) {
\r
19 return isGlob(pattern, { strict: false });
\r
21 exports.isDynamicPattern = isDynamicPattern;
\r
23 * Convert a windows «path» to a unix-style «path».
\r
25 function unixifyPattern(pattern) {
\r
26 return pattern.replace(/\\/g, '/');
\r
28 exports.unixifyPattern = unixifyPattern;
\r
30 * Returns negative pattern as positive pattern.
\r
32 function convertToPositivePattern(pattern) {
\r
33 return isNegativePattern(pattern) ? pattern.slice(1) : pattern;
\r
35 exports.convertToPositivePattern = convertToPositivePattern;
\r
37 * Returns positive pattern as negative pattern.
\r
39 function convertToNegativePattern(pattern) {
\r
40 return '!' + pattern;
\r
42 exports.convertToNegativePattern = convertToNegativePattern;
\r
44 * Return true if provided pattern is negative pattern.
\r
46 function isNegativePattern(pattern) {
\r
47 return pattern.startsWith('!') && pattern[1] !== '(';
\r
49 exports.isNegativePattern = isNegativePattern;
\r
51 * Return true if provided pattern is positive pattern.
\r
53 function isPositivePattern(pattern) {
\r
54 return !isNegativePattern(pattern);
\r
56 exports.isPositivePattern = isPositivePattern;
\r
58 * Extracts negative patterns from array of patterns.
\r
60 function getNegativePatterns(patterns) {
\r
61 return patterns.filter(isNegativePattern);
\r
63 exports.getNegativePatterns = getNegativePatterns;
\r
65 * Extracts positive patterns from array of patterns.
\r
67 function getPositivePatterns(patterns) {
\r
68 return patterns.filter(isPositivePattern);
\r
70 exports.getPositivePatterns = getPositivePatterns;
\r
72 * Extract base directory from provided pattern.
\r
74 function getBaseDirectory(pattern) {
\r
75 return globParent(pattern);
\r
77 exports.getBaseDirectory = getBaseDirectory;
\r
79 * Return true if provided pattern has globstar.
\r
81 function hasGlobStar(pattern) {
\r
82 return pattern.indexOf(GLOBSTAR) !== -1;
\r
84 exports.hasGlobStar = hasGlobStar;
\r
86 * Return true if provided pattern ends with slash and globstar.
\r
88 function endsWithSlashGlobStar(pattern) {
\r
89 return pattern.endsWith('/' + GLOBSTAR);
\r
91 exports.endsWithSlashGlobStar = endsWithSlashGlobStar;
\r
93 * Returns «true» when pattern ends with a slash and globstar or the last partial of the pattern is static pattern.
\r
95 function isAffectDepthOfReadingPattern(pattern) {
\r
96 var basename = path.basename(pattern);
\r
97 return endsWithSlashGlobStar(pattern) || isStaticPattern(basename);
\r
99 exports.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern;
\r
101 * Return naive depth of provided pattern without depth of the base directory.
\r
103 function getNaiveDepth(pattern) {
\r
104 var base = getBaseDirectory(pattern);
\r
105 var patternDepth = pattern.split('/').length;
\r
106 var patternBaseDepth = base.split('/').length;
\r
108 * This is a hack for pattern that has no base directory.
\r
110 * This is related to the `*\something\*` pattern.
\r
112 if (base === '.') {
\r
113 return patternDepth - patternBaseDepth;
\r
115 return patternDepth - patternBaseDepth - 1;
\r
117 exports.getNaiveDepth = getNaiveDepth;
\r
119 * Return max naive depth of provided patterns without depth of the base directory.
\r
121 function getMaxNaivePatternsDepth(patterns) {
\r
122 return patterns.reduce(function (max, pattern) {
\r
123 var depth = getNaiveDepth(pattern);
\r
124 return depth > max ? depth : max;
\r
127 exports.getMaxNaivePatternsDepth = getMaxNaivePatternsDepth;
\r
129 * Make RegExp for provided pattern.
\r
131 function makeRe(pattern, options) {
\r
132 return micromatch.makeRe(pattern, options);
\r
134 exports.makeRe = makeRe;
\r
136 * Convert patterns to regexps.
\r
138 function convertPatternsToRe(patterns, options) {
\r
139 return patterns.map(function (pattern) { return makeRe(pattern, options); });
\r
141 exports.convertPatternsToRe = convertPatternsToRe;
\r
143 * Returns true if the entry match any of the given RegExp's.
\r
145 function matchAny(entry, patternsRe) {
\r
146 return patternsRe.some(function (patternRe) { return patternRe.test(entry); });
\r
148 exports.matchAny = matchAny;
\r