module.exports = function (grunt) { var embedOption = grunt.option('embedLocales'), embedLocaleDest = embedOption ? 'min/moment-with-customlocales.js' : 'min/moment-with-locales.js', embedLocaleSrc = 'locale/*.js'; if (embedOption && embedOption.match(/,/)) { embedLocaleSrc = 'locale/{' + embedOption + '}.js'; } else if (embedOption) { embedLocaleSrc = 'locale/' + embedOption + '.js'; } grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), concat : { locales: { src: 'locale/*.js', dest: 'min/locales.js' }, tests: { src: [ 'test/browser-prefix.js', 'test/moment/*.js', 'test/locale/*.js', 'test/browser-suffix.js' ], dest: 'min/tests.js' } }, env : { sauceLabs : (grunt.file.exists('.sauce-labs.creds') ? grunt.file.readJSON('.sauce-labs.creds') : {}) }, karma : { options: { frameworks: ['nodeunit'], files: [ 'min/moment-with-locales.js', 'min/tests.js', 'test/browser.js' ], sauceLabs: { startConnect: true, testName: 'MomentJS' }, customLaunchers: { slChromeWinXp: { base: 'SauceLabs', browserName: 'chrome', platform: 'Windows XP' }, slIe9Win7: { base: 'SauceLabs', browserName: 'internet explorer', platform: 'Windows 7', version: '9' }, slIe8Win7: { base: 'SauceLabs', browserName: 'internet explorer', platform: 'Windows 7', version: '8' }, slFfLinux: { base: 'SauceLabs', browserName: 'firefox', platform: 'Linux' }, slSafariOsx: { base: 'SauceLabs', browserName: 'safari', platform: 'OS X 10.8' } } }, server: { browsers: [] }, chrome: { singleRun: true, browsers: ['Chrome'] }, firefox: { singleRun: true, browsers: ['Firefox'] }, sauce: { options: {reporters: ['dots']}, singleRun: true, browsers: [ 'slChromeWinXp', 'slIe9Win7', 'slIe8Win7', 'slFfLinux', 'slSafariOsx' ] } }, uglify : { main: { files: { 'min/moment-with-locales.min.js' : 'min/moment-with-locales.js', 'min/locales.min.js' : 'min/locales.js', 'min/moment.min.js' : 'moment.js' } }, customlocales: { files: { 'min/moment-with-customlocales.min.js' : 'min/moment-with-customlocales.js' } }, options: { mangle: true, compress: { dead_code: false // jshint ignore:line }, output: { ascii_only: true // jshint ignore:line }, report: 'min', preserveComments: 'some' } }, nodeunit : { all : ['test/moment/**/*.js', 'test/locale/**/*.js'] }, jshint: { all: [ 'Gruntfile.js', 'moment.js', 'locale/**/*.js', 'test/**/*.js', '!test/browser*.js' ], options: { 'node' : true, 'browser' : true, 'boss' : false, 'curly' : true, 'debug' : false, 'devel' : false, 'eqeqeq' : true, 'eqnull' : true, 'evil' : false, 'forin' : false, 'immed' : false, 'laxbreak' : false, 'newcap' : true, 'noarg' : true, 'noempty' : false, 'nonew' : false, 'onevar' : true, 'plusplus' : false, 'regexp' : false, 'undef' : true, 'sub' : true, 'strict' : false, 'white' : true, 'es3' : true, 'camelcase' : true, 'globals': { 'define': false } } }, jscs: { all: [ 'Gruntfile.js', 'moment.js', 'locale/**/*.js', 'test/**/*.js', '!test/browser*.js' ], options: { config: '.jscs.json' } }, watch : { test : { files : [ 'moment.js', 'locale/*.js', 'test/**/*.js' ], tasks: ['nodeunit'] }, jshint : { files : '<%= jshint.all %>', tasks: ['jshint'] } }, embedLocales: { moment: 'moment.js', dest: embedLocaleDest, targetLocales: embedLocaleSrc }, benchmark: { all: { src: ['benchmarks/*.js'] } } }); grunt.loadTasks('tasks'); // These plugins provide necessary tasks. require('load-grunt-tasks')(grunt); // Default task. grunt.registerTask('default', ['jshint', 'jscs', 'nodeunit']); // test tasks grunt.registerTask('test', ['test:node', 'test:browser']); grunt.registerTask('test:node', ['nodeunit']); grunt.registerTask('test:server', ['concat', 'embedLocales', 'karma:server']); grunt.registerTask('test:browser', ['concat', 'embedLocales', 'karma:chrome', 'karma:firefox']); grunt.registerTask('test:sauce-browser', ['concat', 'embedLocales', 'env:sauceLabs', 'karma:sauce']); grunt.registerTask('test:travis-sauce-browser', ['concat', 'embedLocales', 'karma:sauce']); // travis build task grunt.registerTask('build:travis', [ // code style 'jshint', 'jscs', // node tests 'test:node' ]); // Task to be run when releasing a new version grunt.registerTask('release', [ 'jshint', 'nodeunit', 'concat', 'embedLocales', 'component', 'uglify:main' ]); };