immutable-js
Version:
Immutable types in JavaScript
163 lines (156 loc) • 5.22 kB
JavaScript
module.exports = function(grunt) {
var pkg = require('./package.json');
var fs = require('fs');
var esperanto = require('esperanto');
var copyright = require('./build/stripCopyright');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-es6-transpiler');
grunt.loadNpmTasks('grunt-release');
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
jshint: {
options: {
asi: true,
curly: false,
eqeqeq: true,
esnext: true,
expr: true,
forin: true,
freeze: false,
immed: true,
indent: 2,
iterator: true,
noarg: true,
node: true,
noempty: true,
nonstandard: true,
trailing: true,
undef: true,
unused: false,
},
source: ['src/**/*.js']
},
bundle: {
default: {
files: {
src: 'src/Immutable.js',
dest: 'dist/Immutable'
}
}
},
clean: {
default: [
'dist/**/*.js',
'dist/**/*.map'
]
},
es6transpiler: {
default: {
options: {
globals: {
'define': true,
'Immutable': true
}
},
files: {
'dist/browser/Immutable.js': 'dist/Immutable.js'
}
}
},
uglify: {
options: {
mangle: {
toplevel: true
},
compress: true,
banner: '/**! <%= pkg.name %>.js - v<%= pkg.version %> © by <%= pkg.author %> */',
quoteStyle: 1,
fromString: true,
reserved: ['module', 'define', 'Immutable']
},
browser: {
options: {
sourceMap: true,
sourceMapName: 'dist/browser/Immutable.map'
},
files: {
'dist/browser/Immutable.min.js': [
'dist/browser/Immutable.js'
]
}
}
},
release: {
default: {},
dev: {
npmtag: 'canary'
}
},
watch: {
nextgen: {
files: ['src/**/*.js'],
tasks: ['build'],
options: {
debounceDelay: 1000,
interval: 80,
event: ['added', 'deleted', 'changed']
}
}
}
});
grunt.registerMultiTask('bundle', 'Bundles ES6 modules', function(bundleType) {
var done = this.async();
var source = this.files.src;
var destination = this.files.dest;
esperanto.bundle({
entry: './src/Immutable.js',
transform: function(source) {
return copyright(source);
}
}).then(function(bundle) {
/* default: universal module definition */
var bundleType = grunt.option('bundleType') || 'UMD';
var copy = fs.readFileSync('build/COPYRIGHT');
var bundled = '<empty>';
var esperantoSettings = {
banner: copy,
name: pkg.buildId
};
switch(bundleType.toLowerCase()) {
case 'amd':
grunt.log.writeln('Compiling as AMD modules ...');
bundled = bundle.toAmd(esperantoSettings).code;
break;
case 'umd':
grunt.log.writeln('Compiling as UMD modules ...');
bundled = bundle.toUmd(esperantoSettings).code;
break;
case 'cjs':
grunt.log.writeln('Compiling as Common.js modules ...');
bundled = bundle.toCjs(esperantoSettings).code;
break;
default:
bundled = '/**! Unknown bundle-type for esperanto */';
break;
}
fs.writeFile('dist/Immutable.js', bundled, function(err) {
if(err) {
grunt.log.error(err);
return;
}
});
}).then(function() {
done();
}, function(err) {
grunt.log.error(err.stack);
done(false);
});
});
grunt.registerTask('minify', ['uglify:browser' /* searching for es6-minify */]);
grunt.registerTask('lint', ['jshint:source']);
grunt.registerTask('build', ['clean', 'bundle', 'es6transpiler'])
grunt.registerTask('default', ['lint', 'build', 'minify', 'watch:nextgen']);
}