"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); } 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;