You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
3.5 KiB
90 lines
3.5 KiB
"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;
|
|
|