2 Object.defineProperty(exports, "__esModule", { value: true });
\r
3 var patternUtils = require("../utils/pattern");
\r
5 * Generate tasks based on parent directory of each pattern.
\r
7 function generate(patterns, options) {
\r
8 var unixPatterns = patterns.map(patternUtils.unixifyPattern);
\r
9 var unixIgnore = options.ignore.map(patternUtils.unixifyPattern);
\r
10 var positivePatterns = getPositivePatterns(unixPatterns);
\r
11 var negativePatterns = getNegativePatternsAsPositive(unixPatterns, unixIgnore);
\r
13 * When the `case` option is disabled, all patterns must be marked as dynamic, because we cannot check filepath
\r
14 * directly (without read directory).
\r
16 var staticPatterns = !options.case ? [] : positivePatterns.filter(patternUtils.isStaticPattern);
\r
17 var dynamicPatterns = !options.case ? positivePatterns : positivePatterns.filter(patternUtils.isDynamicPattern);
\r
18 var staticTasks = convertPatternsToTasks(staticPatterns, negativePatterns, /* dynamic */ false);
\r
19 var dynamicTasks = convertPatternsToTasks(dynamicPatterns, negativePatterns, /* dynamic */ true);
\r
20 return staticTasks.concat(dynamicTasks);
\r
22 exports.generate = generate;
\r
24 * Convert patterns to tasks based on parent directory of each pattern.
\r
26 function convertPatternsToTasks(positive, negative, dynamic) {
\r
27 var positivePatternsGroup = groupPatternsByBaseDirectory(positive);
\r
28 // When we have a global group – there is no reason to divide the patterns into independent tasks.
\r
29 // In this case, the global task covers the rest.
\r
30 if ('.' in positivePatternsGroup) {
\r
31 var task = convertPatternGroupToTask('.', positive, negative, dynamic);
\r
34 return convertPatternGroupsToTasks(positivePatternsGroup, negative, dynamic);
\r
36 exports.convertPatternsToTasks = convertPatternsToTasks;
\r
38 * Return only positive patterns.
\r
40 function getPositivePatterns(patterns) {
\r
41 return patternUtils.getPositivePatterns(patterns);
\r
43 exports.getPositivePatterns = getPositivePatterns;
\r
45 * Return only negative patterns.
\r
47 function getNegativePatternsAsPositive(patterns, ignore) {
\r
48 var negative = patternUtils.getNegativePatterns(patterns).concat(ignore);
\r
49 var positive = negative.map(patternUtils.convertToPositivePattern);
\r
52 exports.getNegativePatternsAsPositive = getNegativePatternsAsPositive;
\r
54 * Group patterns by base directory of each pattern.
\r
56 function groupPatternsByBaseDirectory(patterns) {
\r
57 return patterns.reduce(function (collection, pattern) {
\r
58 var base = patternUtils.getBaseDirectory(pattern);
\r
59 if (base in collection) {
\r
60 collection[base].push(pattern);
\r
63 collection[base] = [pattern];
\r
68 exports.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory;
\r
70 * Convert group of patterns to tasks.
\r
72 function convertPatternGroupsToTasks(positive, negative, dynamic) {
\r
73 return Object.keys(positive).map(function (base) {
\r
74 return convertPatternGroupToTask(base, positive[base], negative, dynamic);
\r
77 exports.convertPatternGroupsToTasks = convertPatternGroupsToTasks;
\r
79 * Create a task for positive and negative patterns.
\r
81 function convertPatternGroupToTask(base, positive, negative, dynamic) {
\r
87 patterns: [].concat(positive, negative.map(patternUtils.convertToNegativePattern))
\r
90 exports.convertPatternGroupToTask = convertPatternGroupToTask;
\r