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