docker_manager/manager-client/tasks/helpers.js

61 lines
1.8 KiB
JavaScript

var grunt = require('grunt'),
_ = grunt.util._,
Helpers = {};
// List of package requisits for tasks
// Notated in conjunctive normal form (CNF)
// e.g. ['a', ['b', 'alternative-to-b']]
var taskRequirements = {
coffee: ['grunt-contrib-coffee'],
compass: ['grunt-contrib-compass'],
sass: [['grunt-sass', 'grunt-contrib-sass']],
less: ['grunt-contrib-less'],
stylus: ['grunt-contrib-stylus'],
emberTemplates: ['grunt-ember-templates'],
emblem: ['grunt-emblem'],
emberscript: ['grunt-ember-script'],
imagemin: ['grunt-contrib-imagemin'],
htmlmin: ['grunt-contrib-htmlmin'],
fancySprites: ['grunt-fancy-sprites'],
autoprefixer: ['grunt-autoprefixer'],
rev: ['grunt-rev'],
'validate-imports': ['grunt-es6-import-validate'],
yuidoc: ['grunt-contrib-yuidoc']
};
// Task fallbacks
// e.g. 'a': ['fallback-a-step-1', 'fallback-a-step-2']
var taskFallbacks = {
'imagemin': 'copy:imageminFallback'
};
Helpers.filterAvailableTasks = function(tasks){
tasks = tasks.map(function(taskName) {
// Maps to task name or fallback if task is unavailable
var baseName = taskName.split(':')[0]; // e.g. 'coffee' for 'coffee:compile'
var reqs = taskRequirements[baseName];
var isAvailable = Helpers.isPackageAvailable(reqs);
return isAvailable ? taskName : taskFallbacks[taskName];
});
return _.flatten(_.compact(tasks)); // Remove undefined's and flatten it
};
Helpers.isPackageAvailable = function(pkgNames) {
if (!pkgNames) return true; // packages are assumed to exist
if (!_.isArray(pkgNames)) { pkgNames = [pkgNames]; }
return _.every(pkgNames, function(pkgNames) {
if (!_.isArray(pkgNames)) { pkgNames = [pkgNames]; }
return _.any(pkgNames, function(pkgName) {
return !!Helpers.pkg.devDependencies[pkgName];
});
});
};
module.exports = Helpers;