UNPKG

immutable-js

Version:
163 lines (156 loc) 5.22 kB
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']); }