UNPKG

3.68 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var patternUtils = require("../utils/pattern");
4/**
5 * Generate tasks based on parent directory of each pattern.
6 */
7function generate(patterns, options) {
8 var unixPatterns = patterns.map(patternUtils.unixifyPattern);
9 var unixIgnore = options.ignore.map(patternUtils.unixifyPattern);
10 var positivePatterns = getPositivePatterns(unixPatterns);
11 var negativePatterns = getNegativePatternsAsPositive(unixPatterns, unixIgnore);
12 var staticPatterns = positivePatterns.filter(patternUtils.isStaticPattern);
13 var dynamicPatterns = positivePatterns.filter(patternUtils.isDynamicPattern);
14 var staticTasks = convertPatternsToTasks(staticPatterns, negativePatterns, /* dynamic */ false);
15 var dynamicTasks = convertPatternsToTasks(dynamicPatterns, negativePatterns, /* dynamic */ true);
16 return staticTasks.concat(dynamicTasks);
17}
18exports.generate = generate;
19/**
20 * Convert patterns to tasks based on parent directory of each pattern.
21 */
22function convertPatternsToTasks(positive, negative, dynamic) {
23 var positivePatternsGroup = groupPatternsByBaseDirectory(positive);
24 var negativePatternsGroup = groupPatternsByBaseDirectory(negative);
25 // When we have a global group – there is no reason to divide the patterns into independent tasks.
26 // In this case, the global task covers the rest.
27 if ('.' in positivePatternsGroup) {
28 var task = convertPatternGroupToTask('.', positive, negative, dynamic);
29 return [task];
30 }
31 return convertPatternGroupsToTasks(positivePatternsGroup, negativePatternsGroup, dynamic);
32}
33exports.convertPatternsToTasks = convertPatternsToTasks;
34/**
35 * Return only positive patterns.
36 */
37function getPositivePatterns(patterns) {
38 return patternUtils.getPositivePatterns(patterns);
39}
40exports.getPositivePatterns = getPositivePatterns;
41/**
42 * Retrun only negative patterns.
43 */
44function getNegativePatternsAsPositive(patterns, ignore) {
45 var negative = patternUtils.getNegativePatterns(patterns);
46 var positive = negative.map(patternUtils.convertToPositivePattern).concat(ignore);
47 return positive;
48}
49exports.getNegativePatternsAsPositive = getNegativePatternsAsPositive;
50/**
51 * Group patterns by base directory of each pattern.
52 */
53function groupPatternsByBaseDirectory(patterns) {
54 return patterns.reduce(function (collection, pattern) {
55 var base = patternUtils.getBaseDirectory(pattern);
56 if (base in collection) {
57 collection[base].push(pattern);
58 }
59 else {
60 collection[base] = [pattern];
61 }
62 return collection;
63 }, {});
64}
65exports.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory;
66/**
67 * Convert group of patterns to tasks.
68 */
69function convertPatternGroupsToTasks(positive, negative, dynamic) {
70 var globalNegative = '.' in negative ? negative['.'] : [];
71 return Object.keys(positive).map(function (base) {
72 var localNegative = base in negative ? negative[base] : [];
73 var fullNegative = localNegative.concat(globalNegative);
74 return convertPatternGroupToTask(base, positive[base], fullNegative, dynamic);
75 });
76}
77exports.convertPatternGroupsToTasks = convertPatternGroupsToTasks;
78/**
79 * Create a task for positive and negative patterns.
80 */
81function convertPatternGroupToTask(base, positive, negative, dynamic) {
82 return {
83 base: base,
84 dynamic: dynamic,
85 patterns: [].concat(positive, negative.map(patternUtils.convertToNegativePattern)),
86 positive: positive,
87 negative: negative
88 };
89}
90exports.convertPatternGroupToTask = convertPatternGroupToTask;