mirror of
				https://github.com/fooflington/selfdefined.git
				synced 2025-11-03 23:29:03 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			65 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
"use strict";
 | 
						||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
						||
const utils = require("../utils");
 | 
						||
function generate(patterns, settings) {
 | 
						||
    const positivePatterns = getPositivePatterns(patterns);
 | 
						||
    const negativePatterns = getNegativePatternsAsPositive(patterns, settings.ignore);
 | 
						||
    const staticPatterns = positivePatterns.filter((pattern) => utils.pattern.isStaticPattern(pattern, settings));
 | 
						||
    const dynamicPatterns = positivePatterns.filter((pattern) => utils.pattern.isDynamicPattern(pattern, settings));
 | 
						||
    const staticTasks = convertPatternsToTasks(staticPatterns, negativePatterns, /* dynamic */ false);
 | 
						||
    const dynamicTasks = convertPatternsToTasks(dynamicPatterns, negativePatterns, /* dynamic */ true);
 | 
						||
    return staticTasks.concat(dynamicTasks);
 | 
						||
}
 | 
						||
exports.generate = generate;
 | 
						||
function convertPatternsToTasks(positive, negative, dynamic) {
 | 
						||
    const 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) {
 | 
						||
        const task = convertPatternGroupToTask('.', positive, negative, dynamic);
 | 
						||
        return [task];
 | 
						||
    }
 | 
						||
    return convertPatternGroupsToTasks(positivePatternsGroup, negative, dynamic);
 | 
						||
}
 | 
						||
exports.convertPatternsToTasks = convertPatternsToTasks;
 | 
						||
function getPositivePatterns(patterns) {
 | 
						||
    return utils.pattern.getPositivePatterns(patterns);
 | 
						||
}
 | 
						||
exports.getPositivePatterns = getPositivePatterns;
 | 
						||
function getNegativePatternsAsPositive(patterns, ignore) {
 | 
						||
    const negative = utils.pattern.getNegativePatterns(patterns).concat(ignore);
 | 
						||
    const positive = negative.map(utils.pattern.convertToPositivePattern);
 | 
						||
    return positive;
 | 
						||
}
 | 
						||
exports.getNegativePatternsAsPositive = getNegativePatternsAsPositive;
 | 
						||
function groupPatternsByBaseDirectory(patterns) {
 | 
						||
    const group = {};
 | 
						||
    return patterns.reduce((collection, pattern) => {
 | 
						||
        const base = utils.pattern.getBaseDirectory(pattern);
 | 
						||
        if (base in collection) {
 | 
						||
            collection[base].push(pattern);
 | 
						||
        }
 | 
						||
        else {
 | 
						||
            collection[base] = [pattern];
 | 
						||
        }
 | 
						||
        return collection;
 | 
						||
    }, group);
 | 
						||
}
 | 
						||
exports.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory;
 | 
						||
function convertPatternGroupsToTasks(positive, negative, dynamic) {
 | 
						||
    return Object.keys(positive).map((base) => {
 | 
						||
        return convertPatternGroupToTask(base, positive[base], negative, dynamic);
 | 
						||
    });
 | 
						||
}
 | 
						||
exports.convertPatternGroupsToTasks = convertPatternGroupsToTasks;
 | 
						||
function convertPatternGroupToTask(base, positive, negative, dynamic) {
 | 
						||
    return {
 | 
						||
        dynamic,
 | 
						||
        positive,
 | 
						||
        negative,
 | 
						||
        base,
 | 
						||
        patterns: [].concat(positive, negative.map(utils.pattern.convertToNegativePattern))
 | 
						||
    };
 | 
						||
}
 | 
						||
exports.convertPatternGroupToTask = convertPatternGroupToTask;
 |