foam-framework
Version:
MVC metaprogramming framework
148 lines (136 loc) • 4.05 kB
JavaScript
module.exports = function(grunt) {
require('grunt-log-headers')(grunt);
// Returns the repetitive shell commands for measuring the size.
function sizeOptions() {
var ret = {};
function oneSize(file, gzip) {
ret[file + (gzip ? '.gz' : '')] = {
command: 'cat build/' + file + ' | ' +
(gzip ? 'gzip -c | ' : '') +
'wc -c',
options: {
gruntLogHeader: false,
stdout: false,
callback: function(err, stdout, stderr, cb) {
console.log(file + (gzip ? '.gz' : '') + ':\t' + stdout.trim());
cb();
}
}
};
}
oneSize('foam.js', false);
oneSize('foam.js', true);
oneSize('foam.min.js', false);
oneSize('foam.min.js', true);
return ret;
}
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
concat: {
options: {
banner: '/*! <%= pkg.name %> v<%= pkg.version %> */\n' +
'/* <%= grunt.option("gitRevision") %> */\n'
},
foam: {
dest: 'build/foam.js',
src: [
'core/firefox.js',
'core/internetexplorer.js',
'core/funcName.js',
'core/safari.js',
'core/i18n.js',
'core/stdlib.js',
'core/WeakMap.js',
'core/io.js',
'core/writer.js',
'core/socket.js',
'core/base64.js',
'core/encodings.js',
'core/utf8.js',
'core/async.js',
'core/parse.js',
'core/event.js',
'core/JSONUtil.js',
'core/XMLUtil.js',
'core/context.js',
'core/JSONParser.js',
'core/TemplateUtil.js',
'core/FOAM.js',
'core/FObject.js',
'core/BootstrapModel.js',
'core/mm1Model.js',
'core/mm2Property.js',
'core/mm3Types.js',
'core/mm4Method.js',
'core/mm6Misc.js',
'core/value.js',
'core/view.js',
'core/layout.js',
'core/ChoiceView.js',
'core/DetailView.js',
'core/TableView.js',
'core/cview.js',
'core/cview2.js',
'core/RichTextView.js',
'core/listchoiceview.js',
'core/scroll.js',
'core/HTMLParser.js',
'core/mlang.js',
'core/QueryParser.js',
'core/oam.js',
'core/visitor.js',
'core/messaging.js',
'core/dao.js',
'core/arrayDAO.js',
'core/ClientDAO.js',
'core/diff.js',
'core/SplitDAO.js',
'core/index.js',
'core/StackView.js',
'core/MementoMgr.js',
'core/DAOController.js',
'core/ThreePaneController.js',
'core/experimental/protobufparser.js',
'core/experimental/protobuf.js',
'core/models.js',
'core/touch.js',
'core/glang.js',
'core/oauth.js',
'core/busy.js',
'core/turntable.js',
'core/CORE.js'
]
}
},
uglify: {
foam: {
src: 'build/foam.js',
dest: 'build/foam.min.js',
preserveComments: 'all'
}
},
'git-describe': {
foam: {}
},
shell: sizeOptions()
});
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-git-describe');
grunt.loadNpmTasks('grunt-shell');
// Custom logic: Read in the git metadata, and save it as a value.
// This value is used in the concat banner.
grunt.registerTask('loadGitData', function() {
grunt.event.once('git-describe', function(rev) {
grunt.option('gitRevision', rev);
});
grunt.task.run('git-describe');
});
grunt.registerTask('sizes', function() {
grunt.task.run('shell:foam.js');
grunt.task.run('shell:foam.js.gz');
grunt.task.run('shell:foam.min.js');
grunt.task.run('shell:foam.min.js.gz');
});
grunt.registerTask('default', ['loadGitData', 'concat', 'uglify', 'sizes']);
};