“use strict”;
var srcFiles = ‘app/*/.js’; var htmlFiles = ‘app/*/.html’; var cssFiles = ‘app/*/.scss’; var specFiles = ‘spec/*/.js’; var devServerPort = 8081; var reloadPort = 35279; var confPath = ‘app/static/configs’; var arethusaPackages = ‘bower_components/arethusa/dist/arethusa_packages.min.js’; var arethusaFiles = ‘bower_components/arethusa/dist/arethusa.min.js’; var specHelpers = ‘bower_components/arethusa/spec/helpers/*/’;
module.exports = function(grunt) {
require('load-grunt-tasks')(grunt); function confFiles() { return grunt.file.expand(confPath + '/*.json'); } function confMergeCommands() { var file, target, cmd, cmds = []; var files = confFiles(); for (var i = files.length - 1; i >= 0; i--){ file = files[i]; target = file.replace(confPath, 'dist/configs'); cmd = 'arethusa merge ' + file + ' -m > ' + target; cmds.push(cmd); } return cmds; } grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), jasmine: { src: srcFiles, options: { specs: specFiles } }, karma: { spec: { autoWatch: false, singleRun: true, options: { files : [ arethusaPackages, 'bower_components/angular-mocks/angular-mocks.js', specHelpers, arethusaFiles, srcFiles, specFiles ], frameworks: ['jasmine'], browsers : ['PhantomJS'], plugins : [ 'karma-chrome-launcher', 'karma-phantomjs-launcher', 'karma-firefox-launcher', 'karma-jasmine', 'karma-coverage' ], reporters: ['progress', 'coverage'], preprocessors: { 'app/**/*.js': ['coverage'] }, coverageReporter: { reporters: [ {type: 'html', dir:'coverage/'}, {type: 'lcov'}, ] } } }, }, coveralls: { src: 'coverage/**/lcov.info' }, uglify: { options: { sourceMap: true }, '<%= namespaced_name %>' : { files: { 'dist/<%= namespaced_name %>.min.js' : [ 'app/js/<%= namespaced_name %>.js', 'app/js/<%= namespaced_name %>/**/*.js', 'app/templates/<%= namespaced_name %>/compiled/<%= namespaced_name %>.templates.js' ] } } }, sass: { dist: { options: { sourcemap: true }, files: { 'app/css/<%= namespaced_name %>.css': 'app/css/<%= namespaced_name %>.scss' } } }, cssmin: { css: { src: 'app/css/**/*.css', dest: 'dist/<%= namespaced_name %>.min.css' } }, ngtemplates : { '<%= namespaced_name %>' : { cwd: 'app', src: 'templates/**/*.html', dest: 'app/templates/<%= namespaced_name %>/compiled/<%= namespaced_name %>.templates.js' } }, connect: { devServer: { options: { port: devServerPort, debug: true, keepalive: true, livereload: reloadPort, middleware: function(connect) { return [ require('connect-livereload')(), connect.static(require('path').resolve('./')) ]; } } }, }, watch: { spec: { files: [srcFiles, htmlFiles, specFiles], tasks: 'karma:spec' }, server: { files: [srcFiles, htmlFiles, cssFiles], tasks: 'minify', options: { spawn: false, livereload: reloadPort } }, }, jshint: { options: { jshintrc: true, }, all: ['*.js', srcFiles, specFiles] }, shell: { minifyConfs: { command: confMergeCommands().join('&') } }, concurrent: { minify: { tasks: [ 'minify:src', 'minify:css', 'minify:conf' ] }, server: { tasks: ['watch:server', 'server'], options: { logConcurrentOutput: true } } } }); grunt.registerTask('minify:src', ['ngtemplates', 'uglify']); grunt.registerTask('minify:css', ['sass', 'cssmin']); grunt.registerTask('minify:conf', 'shell:minifyConfs'); grunt.registerTask('minify', ['concurrent:minify']); grunt.registerTask('spec', 'watch:spec'); grunt.registerTask('server', ['minify', 'connect:devServer']); grunt.registerTask('reload-server', 'concurrent:server'); grunt.registerTask('default', ['karma:spec', 'jshint']);
};