61 lines
1.8 KiB
JavaScript
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;
|