Code coverage report for tasks/build.js

Statements: 77.14% (54 / 70)      Branches: 64.29% (18 / 28)      Functions: 70.59% (12 / 17)      Lines: 83.08% (54 / 65)      Ignored: none     

All files » tasks/ » build.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 961 1 1 1 1 1 1   1 4 4 4 8 8 8 8     4     1                         1 1 1 1   1 1 1     1 2 2 2   2 2 2 2   2     1 1 1 1   1 1 1     1               1   4     1 4 4 4 4 4 4       1 1 1 2    
var Promise = require('es6-promise').Promise;
var log = require('./utils/log');
var helper = require('./utils/config-helper');
var extend = require('util')._extend;
var path = require('path');
var clean = require('./clean');
var config, build = {};
 
function buildPromises(wrapper, fileType, options){
    var Fn = require('./wrappers/' + wrapper);
    var promises = [];
    config.buildPaths.forEach(function(pathObj, i){
        var src = path.join(pathObj.source, config.globs[fileType]);
        pathObj.targets.forEach(function(target){
            var newOptions = extend({minify:(!options.dev && pathObj.minify)}, options || {});
            promises.push((new Fn(src, target, newOptions)).write());
        });
    });
    return Promise.all(promises).then(options.reload).catch(log.warn);
}
 
build.htmlMin = function htmlMin(fileObjs) {
    var htmlWrapper = helper.matches(config.tasks.build, ['html-min']);
    if (!htmlWrapper) return Promise.resolve();
    log.info(' * HTML Min');
 
    var HtmlMin = require('./wrappers/html-min');
    var promises = [];
    fileObjs.forEach(function(fileObjs){
        promises.push(new HtmlMin(fileObjs).write());
    });
    return Promise.all(promises).catch(log.warn);
};
 
build.html = function html(options) {
    var wrapper = helper.matches(config.tasks.build, ['jade','mustache']);
    Iif (!wrapper) return Promise.resolve();
    log.info(' * HTML');
 
    options = extend(config.pkg || {}, options || {});
    options.now = Date().split(' ').splice(0,5).join(' ');
    return buildPromises(wrapper, 'html', options);
};
 
build.scripts = function scripts(options){
    var wrapper = helper.matches(config.tasks.build, ['browserify','requirejs']);
    Iif (!wrapper) return Promise.resolve();
    log.info(' * Scripts');
 
    options = extend(config[wrapper] || {}, options);
    options.browserify = config.pkg.browserify;
    options.browser = config.pkg.browser;
    options["browserify-shim"] = config.pkg["browserify-shim"];
 
    return buildPromises(wrapper, 'scripts', options);
};
 
build.styles = function styles(options){
    var wrapper = helper.matches(config.tasks.build, ['sass']);
    Iif (!wrapper) return Promise.resolve();
    log.info(' * Styles');
 
    options = extend(config[wrapper] || {}, options);
    options.appRoot = config.appRoot;
    return buildPromises(wrapper, 'styles', options);
};
 
build.all = function all(options){
    return Promise.all([
        build.scripts(options),
        build.styles(options),
        build.html(options)
    ]).catch(log.warn);
};
 
var prepare = {
    all: function(){ return clean.build(); },
    noop: function(){ return Promise.resolve(); }
};
 
function exec(task, options){
    config = helper.getConfig();
    options = options || {};
    Iif (!config.tasks.build && task == 'all') return Promise.resolve();
    return (prepare[task] || prepare.noop)().then(function(){
        log.info('Building :');
        return build[task](options);
    });
}
 
module.exports = {
    html: function(options){ return exec('html', options); },
    styles:  function(options){ return exec('styles', options); },
    scripts:  function(options){ return exec('scripts', options); },
    all:  function(options){ return exec('all', options); }
};