text: 'use strict';
  module.exports = function( grunt ) {
    // load all tasks
    require( 'load-grunt-tasks' )( grunt, { scope: 'devDependencies' } );
  
    grunt.util.linefeed = '\n';
  
    grunt.initConfig( {
      pkg: grunt.file.readJSON( 'package.json' ),
      dirs: {
        css: 'assets/css',
        js: 'assets/js'
      },
      concat: {
        dist: {
          src: [
            'assets/vendors/epsilon-framework/components/epsilon-object.js',
            'assets/vendors/epsilon-framework/**/*.js',
            'assets/vendors/epsilon-framework/epsilon.js',
            '!assets/vendors/epsilon-framework/epsilon.min.js',
            '!assets/vendors/epsilon-framework/epsilon-concat.js'
          ],
          dest: 'assets/js/epsilon.js'
        }
      },
      uglify: {
        epsilon: {
          options: {
            sourceMap: false,
            sourceMapName: 'sourceMap.map'
          },
          src: [ 'assets/js/epsilon.js', '!assets/js/epsilon.min.js' ],
          dest: 'assets/js/epsilon.min.js'
        }
      },
    } );
  
    grunt.config('watch', {
      js: {
        files  : 'assets/vendors/epsilon-framework/**/*.js',
        tasks  : [ 'concat-epsilon' ],
        options: {
          spawn: false
        }
      }
    });
  
    grunt.event.on('watch', function (action, filepath) {
      // Determine task based on filepath
      var get_ext = function (path) {
        var ret = '';
        var i = path.lastIndexOf('.');
        if ( -1 !== i && i <= path.length ) {
          ret = path.substr(i + 1);
        }
        return ret;
      };
      switch ( get_ext(filepath) ) {
          // PHP
        case 'php' :
          grunt.config('paths.php.files', [ filepath ]);
          break;
          // JavaScript
        case 'js' :
          grunt.config('paths.js.files', [ filepath ]);
          break;
      }
    });
  
    // Concatenate Epsilon
    grunt.registerTask( 'concat-epsilon', [
      'concat:dist',
      'uglify:epsilon'
    ] );
  };