| "use strict"; | 
| Object.defineProperty(exports, "__esModule", { value: true }); | 
| var patternUtils = require("../utils/pattern"); | 
| /** | 
|  * Generate tasks based on parent directory of each pattern. | 
|  */ | 
| function generate(patterns, options) { | 
|     var unixPatterns = patterns.map(patternUtils.unixifyPattern); | 
|     var unixIgnore = options.ignore.map(patternUtils.unixifyPattern); | 
|     var positivePatterns = getPositivePatterns(unixPatterns); | 
|     var negativePatterns = getNegativePatternsAsPositive(unixPatterns, unixIgnore); | 
|     /** | 
|      * When the `case` option is disabled, all patterns must be marked as dynamic, because we cannot check filepath | 
|      * directly (without read directory). | 
|      */ | 
|     var staticPatterns = !options.case ? [] : positivePatterns.filter(patternUtils.isStaticPattern); | 
|     var dynamicPatterns = !options.case ? positivePatterns : positivePatterns.filter(patternUtils.isDynamicPattern); | 
|     var staticTasks = convertPatternsToTasks(staticPatterns, negativePatterns, /* dynamic */ false); | 
|     var dynamicTasks = convertPatternsToTasks(dynamicPatterns, negativePatterns, /* dynamic */ true); | 
|     return staticTasks.concat(dynamicTasks); | 
| } | 
| exports.generate = generate; | 
| /** | 
|  * Convert patterns to tasks based on parent directory of each pattern. | 
|  */ | 
| function convertPatternsToTasks(positive, negative, dynamic) { | 
|     var positivePatternsGroup = groupPatternsByBaseDirectory(positive); | 
|     // When we have a global group – there is no reason to divide the patterns into independent tasks. | 
|     // In this case, the global task covers the rest. | 
|     if ('.' in positivePatternsGroup) { | 
|         var task = convertPatternGroupToTask('.', positive, negative, dynamic); | 
|         return [task]; | 
|     } | 
|     return convertPatternGroupsToTasks(positivePatternsGroup, negative, dynamic); | 
| } | 
| exports.convertPatternsToTasks = convertPatternsToTasks; | 
| /** | 
|  * Return only positive patterns. | 
|  */ | 
| function getPositivePatterns(patterns) { | 
|     return patternUtils.getPositivePatterns(patterns); | 
| } | 
| exports.getPositivePatterns = getPositivePatterns; | 
| /** | 
|  * Return only negative patterns. | 
|  */ | 
| function getNegativePatternsAsPositive(patterns, ignore) { | 
|     var negative = patternUtils.getNegativePatterns(patterns).concat(ignore); | 
|     var positive = negative.map(patternUtils.convertToPositivePattern); | 
|     return positive; | 
| } | 
| exports.getNegativePatternsAsPositive = getNegativePatternsAsPositive; | 
| /** | 
|  * Group patterns by base directory of each pattern. | 
|  */ | 
| function groupPatternsByBaseDirectory(patterns) { | 
|     return patterns.reduce(function (collection, pattern) { | 
|         var base = patternUtils.getBaseDirectory(pattern); | 
|         if (base in collection) { | 
|             collection[base].push(pattern); | 
|         } | 
|         else { | 
|             collection[base] = [pattern]; | 
|         } | 
|         return collection; | 
|     }, {}); | 
| } | 
| exports.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory; | 
| /** | 
|  * Convert group of patterns to tasks. | 
|  */ | 
| function convertPatternGroupsToTasks(positive, negative, dynamic) { | 
|     return Object.keys(positive).map(function (base) { | 
|         return convertPatternGroupToTask(base, positive[base], negative, dynamic); | 
|     }); | 
| } | 
| exports.convertPatternGroupsToTasks = convertPatternGroupsToTasks; | 
| /** | 
|  * Create a task for positive and negative patterns. | 
|  */ | 
| function convertPatternGroupToTask(base, positive, negative, dynamic) { | 
|     return { | 
|         base: base, | 
|         dynamic: dynamic, | 
|         positive: positive, | 
|         negative: negative, | 
|         patterns: [].concat(positive, negative.map(patternUtils.convertToNegativePattern)) | 
|     }; | 
| } | 
| exports.convertPatternGroupToTask = convertPatternGroupToTask; |